hermespace
GitHub提供Hermes Agent的Hermespace工作区完整指南,涵盖概念、安装、核心机制及多步任务处理。
Trigger Scenarios
Install
npx skills add PabloTheThinker/hermespace --skill hermespace -g -y
SKILL.md
Frontmatter
{
"name": "hermespace",
"description": "Full Hermespace pocket workbench for Hermes Agent (v0.18+): concept, dual decode, workbench I\/O, fabric skills+MEMORY, FOA desk, Pulse, viewport app-shell, Tailscale serve, pocket boundary, autonomy grid, Desktop plugin, ops boot\/doctor\/smoke. Use for hermespace, pocket, workbench, FOA, pulse, viewport, access approve, fabric, neural FOA, Desktop Hermespace missing."
}
Hermespace — complete agent guide
What it is: A limited working-memory desk outside the model for Hermes agents.
What it is not: A second LLM runtime · Claude J-space weights · a SaaS brand · a replacement for Hermes skills/MEMORY.
Package SoT: $HERMESPACE_ROOT (git checkout) · https://github.com/PabloTheThinker/hermespace
State: $HERMESPACE_HOME default ~/.hermespace (optional ILO_HOME)
Hermes: $HERMES_HOME default ~/.hermes
Version: align src/hermespace/__init__.py · pyproject.toml · hermes_plugin/plugin.yaml
1. Core concept (read this first)
Hermes already has tools, skills, memory, cron, messaging. Under load, agents lose focus: too many goals, dumping model context into chat, wrong skill, no sealed decision.
Hermespace is the room inside Hermes where multi-step work stays:
| Property | Meaning |
|---|---|
| Limited FOA | Focus of attention ≤ ~4; desk capacity ~12 |
| Monotropic | One active goal; park the rest |
| Dual decode | report → human · context → model only |
| Legible | Plan, decision, fabric, seal trail |
| Harness-level | No model-weight access; no consciousness claims |
Mental model
User / order
→ GATE (skip trivial acks)
→ ENCODE (streams, load)
→ DESK (FOA, decision, plan)
→ DECODE (report + context)
→ BROADCAST (plugin inject when desk ready)
→ ACT (Hermes tools — real work happens here)
→ SEAL (optional episodic / study DB)
Idle vs order
| Phase | Behavior |
|---|---|
| Idle | idle_tick — consolidate, attractors, env inventory; no user spam |
| Order | receive_order / run_turn — full turn → dual decode → back to idle |
Inspired by WM / GWT roles (Baddeley, Cowan FOA, load) — metaphor only, not medical or brain-reading.
Deep design: package docs/13-full-concept-research.md, WORKFLOW.md, docs/14-workbench-pocket-dimension.md, docs/16-why-hermes-framework.md.
2. When to load this skill
- User says Hermespace / pocket / workbench / FOA desk / pulse / viewport
- Multi-step job needs monotropic focus + dual channel
- Rank Hermes skills / inject MEMORY for this goal
- Desktop Hermespace missing or right-rail only
- Access approve/deny, autonomy toggles, ops boot
- Public ship / smoke / security_audit
- After material ship: always full REVIEW (never ADHOC_PASS alone)
Companions (depth only): hermespace-ops · hermespace-grid · hermespace-everyday · hermespace-runtime-ops · pocket-dimension-security
This skill is the whole-concept + how-to-use entry point.
3. Install once (any machine)
git clone https://github.com/PabloTheThinker/hermespace.git
cd hermespace
export HERMESPACE_ROOT="$PWD"
export HERMESPACE_HOME="${HERMESPACE_HOME:-$HOME/.hermespace}"
export HERMES_HOME="${HERMES_HOME:-$HOME/.hermes}"
export PYTHONPATH="$HERMESPACE_ROOT/src${PYTHONPATH:+:$PYTHONPATH}"
./scripts/install_hermes.sh # skill + plugin into HERMES_HOME
./scripts/install_desktop_plugin.sh # HARD COPY desktop plugin (not symlink)
hermes plugins enable hermespace
./scripts/smoke_test.sh # expect 9/9
./scripts/doctor_desktop.sh # expect DOCTOR_PASS when Desktop used
No operator home paths required. Portable env only.
4. How an agent uses Hermespace (primary loops)
4.1 Python — preferred for agents
from hermespace import Workbench
from hermespace.agent_api import (
encode_message, run_turn, decode_for_user, decode_for_model, decode_bundle,
rank_skills, fabric_snapshot, remember_learning,
)
# --- Pocket dimension (idle / order) ---
wb = Workbench(agent_id="my-agent", session_id="main")
wb.enter() # env kit onto desk
wb.park_goal("Later: docs") # monotropic park
wb.idle_tick() # while waiting — no user message
r = wb.receive_order(
user_text,
goal="…",
decision="A — …",
plan=["step1", "step2"],
say="Short human report.",
force=True,
)
send_to_user(r["user_reply"]) # HUMAN channel only
model_ctx = r["model_context"] # MODEL / tools only
fabric = (r.get("bundle") or {}).get("fabric") or {}
# fabric["skill_hits"] → load full bodies with skill_view(name="…")
# fabric MEMORY/USER excerpts already in model_context
# --- Explicit turn API ---
inp = encode_message(user_text, goal="…", decision="A", plan=["…"], say="…",
session_id="main", agent_id="my-agent", force=True)
out = run_turn(inp)
send_to_user(decode_for_user(out))
ctx = decode_for_model(out)
meta = decode_bundle(out) # includes fabric when present
rank_skills("telegram formatting", limit=5)
fabric_snapshot(goal="…", message=user_text)
remember_learning("Prefer plain TG", goal="messaging") # study DB only — not Hermes MEMORY.md
4.2 Dual decode (hard rule)
| Field | Goes to | Never |
|---|---|---|
report / user_reply |
Human (TG/email/UI) | Full inject dump |
context / model_context |
Model next step / tools | User-facing chat |
bundle["fabric"] |
Agent meta | Public logs with secrets |
High load → short report, monotropic, no option menus.
4.3 CLI
hs turn -m "…" --goal "…" --decision "A" --say "…" --plan "1" --force --json
hs workbench enter|idle|park|order|status|env --agent-id X
hs fabric --goal "…" -m "…"
hs skills --goal "…"
hs status | show | inject | say
hs seal --note "…"
hs study "keyword" | history --session-id …
hs neural caps|eval
hs ops boot | doctor | tick-all
hs controls show|set|job
hs pulse tick|status
hs grid status|mission-add|lens-set|dream|think
hs view --serve --port 8764
hs view --serve --tailscale --port 8764 # any user's tailnet
4.4 Hermes plugin (automatic)
Hooks: on_session_start · pre_llm_call · on_session_end
- Broadcasts ready desk into model context
- Does not invent goals — agents still call Workbench / turn
- Optional:
HERMESPACE_AUTO_ORDER=0(default),HERMESPACE_IDLE_ON_SESSION_END=1
4.5 Skills + MEMORY fabric
Every material turn can:
- Rank
$HERMES_HOME/skills/**/SKILL.mdvs goal (embeddings if Ollama, else hash) - Inject capped MEMORY.md + USER.md excerpts
- Put
skill_hint:nameon desk → agent shouldskill_view(name="exact-name")
Hermes remains SoT for MEMORY writes (memory tool) and skill files.
Hermespace coordinates FOA + inject so you use them this turn.
Docs: docs/17-skills-memory-bridge.md.
5. Subsystems (map)
| Subsystem | Role | Entry |
|---|---|---|
| Desk | Live FOA / goal / plan / report | ACTIVE.md, hs show |
| Workbench | Per-agent pocket idle/order/park | Workbench, hs workbench |
| Workflow | GATE→SEAL spine | Workflow.run, hs turn |
| Fabric | Skills rank + MEMORY/USER | hermes_fabric, hs fabric |
| Neural FOA | Optional embedding competition | HERMESPACE_NEURAL_BACKEND=auto |
| Pulse | Desk-aware ticks (better than blind cron) | hs pulse, in-process on view --serve |
| Viewport | App-shell UI (sidebar) | hs view --serve → Overview/Desk/Access/Pulse/Controls/Missions/Grid |
| Boundary | External writes deny by default | request_access → user approve |
| Grid | Missions, lenses, dream, skillbench, self-talk | hs grid, from hermespace import Grid |
| Desktop plugin | Full page /hermespace + sidebar |
hard-copy install |
Autonomy default off. Resolution: HERMESPACE_AUTONOMY_FORCE > controls.json > HERMESPACE_AUTONOMY.
6. Viewport + Tailscale (any user)
# local only
hs view --serve --port 8764
# → http://127.0.0.1:8764/
# this machine's Tailscale IPv4 only (portable — every user's own tailnet)
hs view --serve --tailscale --port 8764
# → http://<that-host-ts-ip>:8764/ from any device on same tailnet
# all interfaces (needs explicit allow)
hs view --serve --bind-all --allow-remote --port 8764
Optional: HERMESPACE_VIEW_TOKEN · HERMESPACE_TAILSCALE_IP
Docs: docs/18-tailscale-viewport.md.
No hard-coded operator Tailscale IPs in the package.
Stale UI after upgrade: kill old view --serve, restart, browser hard-refresh.
7. Pocket boundary (security)
- Default: cannot write outside
$HERMESPACE_HOMEwithout user OK - Agent:
request_access(path, reason=…)— never silent open-world writes - User (chat/viewport):
allow <path> for 2h·approve request <id>·deny·revoke permits·show boundary - Do not add an “open world write” toggle
Docs: docs/19-pocket-security-viewport.md · skill pocket-dimension-security.
8. Daily boot (operator or agent host)
cd "$HERMESPACE_ROOT"
export PYTHONPATH="$HERMESPACE_ROOT/src${PYTHONPATH:+:$PYTHONPATH}"
export HERMESPACE_HOME="${HERMESPACE_HOME:-$HOME/.hermespace}"
hs ops boot
hs view --serve --port 8764 # or --tailscale
# Desktop: Reload desktop plugins → Hermespace
Without leave-on serve: hs pulse install-timer or hs ops tick-all.
9. Desktop plugin contract
| Rule | Detail |
|---|---|
| Install | Real files under $HERMES_HOME/desktop-plugins/hermespace/ — not symlink |
| Surfaces | Full page /hermespace + sidebar (not right-rail only) |
| StatusDot | only good | muted | warn | bad |
| After code change | reinstall hard-copy + Reload desktop plugins |
| Doctor | ./scripts/doctor_desktop.sh |
See references/desktop-integration.md if present in package skill folder.
10. State layout (never commit)
$HERMESPACE_HOME/memory/hermespace/
ACTIVE.md live desk
hermespace.db turn / study DB
journal/ human log
workbenches/ per-agent JSON
grid/ controls, scars, missions, …
viewport/ HTML snapshot files
11. Recommended env
export HERMESPACE_ROOT=… # checkout
export HERMESPACE_HOME=$HOME/.hermespace
export HERMES_HOME=$HOME/.hermes
export PYTHONPATH=$HERMESPACE_ROOT/src
export HERMESPACE_NEURAL_BACKEND=auto
export HERMESPACE_NEURAL_VERBALIZE=0
export HERMESPACE_AUTONOMY=0
export HERMESPACE_AUTO_ORDER=0
# optional non-loopback viewport:
# export HERMESPACE_VIEW_TOKEN=…
docs/hermes-env.example.sh · docs/RECOMMENDED.md
12. Verify
./scripts/smoke_test.sh # 9/9
./scripts/e2e_ops.sh # E2E_PASS when present
./scripts/security_audit.sh # before public push
./scripts/doctor_desktop.sh # Desktop
hs ops doctor
PYTHONPATH=src python3 -m unittest discover -s tests -q
Ad-hoc script ≠ suite green — label honestly.
13. Finish REVIEW (when shipping for a human operator)
After material Hermespace work, post:
Goal · Shipped · Why · Verify · Open · Where
Never end on only a verify table / ADHOC_PASS.
14. Pitfalls
- Dumping inject/context to the human channel
- Ending ship on ADHOC_PASS without REVIEW
- Desktop symlink install → invisible plugin
- Stale
view --serveafter UI change - Bare
skill_view()— alwaysname="…" - skill_manage patch without skill_view same turn → refused
- External open-world writes without request/approve
- Version drift package / plugin.yaml / pyproject
- Committing desk/DB/journal or personal paths
- Foreground long serve without background → tool timeout
- Buying domains or other paid registrar actions without explicit user OK
- Treating Hermespace as Claude J-space or a second agent brain
15. Doc map (package)
| Doc | Use |
|---|---|
INTEGRATION.md |
All doors (Python/CLI/plugin) |
WORKFLOW.md |
GATE→SEAL |
FOR_HERMES.md |
Maintainer brief |
docs/09 |
I/O + memory DB |
docs/14 |
Workbench pocket |
docs/16 |
Why Hermes framework |
docs/17 |
Fabric skills+MEMORY |
docs/18-tailscale-viewport.md |
Portable Tailscale |
docs/18-autonomy-grid.md |
Grid / missions / dream |
docs/19 |
Pocket security |
docs/20 |
Pulse runtime |
docs/23-everyday-ops.md |
Day-to-day |
docs/INDEX.md |
Full index |
SECURITY.md |
Public ship gate |
16. Related skills
hermespace-ops·hermespace-grid·hermespace-everyday·hermespace-runtime-opspocket-dimension-securityhermes-agent·hermes-desktop-surface·hermes-local-ops- Finish:
ilo-finish-report/material-finish-review/session-closeoutwhen those exist
Package skill path: $HERMESPACE_ROOT/skills/hermespace/SKILL.md
Profile install: $HERMES_HOME/skills/.../hermespace/SKILL.md (via install_hermes.sh)
17. One-screen checklist for agents
[ ] Material multi-step? → enter workbench / run_turn (force if needed)
[ ] Dual decode? → user gets report only; model gets context
[ ] Skills? → read fabric skill_hits → skill_view(name=…)
[ ] MEMORY? → already in fabric inject; durable prefs → Hermes memory tool
[ ] Idle wait? → idle_tick / park_goal — no spam
[ ] Leave pocket filesystem? → request_access + wait for approve
[ ] Viewport? → hs view --serve [--tailscale]
[ ] Done shipping? → smoke/doctor + human REVIEW
Version History
- aa8513e Current 2026-07-30 20:29


