Live receipts
memory.write_approvalistrue.- The memory pending store contains 0 JSON records.
- Root SOUL SHA-256 is
05b4ffbf4ae5746958fbdd98ab6be95cc198244e05887c3d770a56f58d98477b. - MEMORY SHA-256 remains
3428258b102f8ec35a2a585b5942ab773c9ef2ad87736ab37544df65aadeb67c. - Hook doctor and config schema 38 checks pass.
- No gateway restart, update, provider change or paid smoke was run.
SOUL, USER and MEMORY do not share one limit system
Current SOUL truncation threshold: 216,000 characters. This is not a strict storage or write cap. SOUL uses Hermes' shared per-file context_file_max_chars truncation rule. The live setting is null, so Hermes calculates the threshold from the active model. GPT-5.6 Sol resolves to a 900,000-token context window. Hermes allocates 6% at 4 characters per token: 900,000 × 4 × 0.06 = 216,000.
Hermes used a flat 20,000-character context-file threshold through release v2026.6.5. Dynamic model-scaled thresholds first shipped in v2026.6.19. In v0.20.5, 20,000 is the dynamic floor, not this model's active threshold. The dynamic ceiling is 500,000. A positive explicit config value overrides the dynamic result.
If SOUL exceeds its active threshold, Hermes retains 70% from the head and 20% from the tail, then inserts a truncation marker. Counts use decoded Unicode characters, not UTF-8 bytes. The raw SOUL has 4,832 characters and 4,911 bytes. Hermes strips the trailing newline before injection, leaving 4,831 injected characters. Both round to 2.24%.
The strict limits you remembered
- USER: 1,374 of 1,375 characters, 99.93% full. Only 1 character remains. The memory tool rejects an add or replacement that would exceed this configured limit.
- MEMORY: 2,013 of 2,200 characters, 91.50% full. 187 characters remain. The same rejection rule applies.
- SOUL: 4,832 characters against today's 216,000-character no-truncation threshold, 2.24%. It is governed by context-file injection, not the strict memory-store write limits.
USER and MEMORY limits are store/write invariants, not physical filesystem maximums. A manually oversized file can exist, but normal memory-tool writes cannot push it over the configured cap. D1-01 and D1-02 change SOUL only. They do not consume USER or MEMORY capacity. Dropbox removal remains a later MEMORY deletion and will free capacity.
Approval reading
D1-01 reaches 5,192 characters. That is 2.40% of today's dynamic threshold and 25.96% of the old fixed 20,000-character default that now acts as the dynamic floor. D1-02 then reduces SOUL to 5,013 characters.
Withdrawn D1-01 v2
### Routing decision (strict - default DELEGATE) - Research/summarise/synthesise → sub (delegate_task) - Code (write/edit/refactor/test) → sub (claude, plan=free; codex → opencode fallback) - Audit/review/QA/file search → sub - 1-3 file edits w/ full context → direct OK - Architecture/planning/judgement → direct (Mikey) - Vague → ask BB Default = delegate. "I have context" ≠ "I should do it".
Load-bearing intent
- Use the smallest rail that safely completes the work.
- Direct work covers single-tool calls, mechanical steps, quick edits and live interaction with Boyd.
- Delegation earns its overhead through reasoning, parallelism, independent review or context control.
- Kanban owns durable task state. Cron and tracked background processes own scheduled or process-durable execution.
- Do not hard-code an unverified coding fallback.
### Routing decision - Work directly when this conversation can safely finish a single-tool call, mechanical step, quick edit or interactive task. - Delegate reasoning-heavy work, parallel workstreams, independent review and work that would flood the parent context. - Use Kanban for work that needs durable ownership, dependencies, retries, human input or review state. - Use cron for scheduled work and a tracked background process for execution that must continue beyond the current turn. - Ask BB only when ambiguity changes the action or risk.
Intent preserved. Clear, but “this conversation can safely finish” is softer than the requested direct triggers.
### Routing decision - Direct: single-tool, mechanical, quick-edit and interactive work. - Delegate: reasoning-heavy, parallel, fresh-context-review and context-flooding work. - Kanban: durable ownership, dependencies, retries, human input and review state. - Cron/background: scheduled or process-durable work. - Ask only when ambiguity changes action or risk.
Nuance weakened. The caveman form is easy to scan but does not say who owns the interaction or distinguish cron from a background process.
### Routing decision - Work directly for single-tool, mechanical, quick-edit and interactive tasks that can be safely completed in this conversation. - Delegate when work is reasoning-heavy, benefits from parallel workers or a fresh-context review, or would flood the parent context. - Use durable Kanban when work needs named ownership, dependencies, retries, review state, human input or cross-session continuity. - Use cron for scheduled work. Use a tracked background process for process-durable work that must continue beyond the current turn. - Explicit multi-agent requests still use delegation or Kanban, chosen by durability and coordination needs. - Retrieve available context before asking BB. Ask only when ambiguity changes the action or risk.
Intent preserved. This is the selected pass. It covers every rail, explicit multi-agent requests and the context-before-question rule without keeping stale provider names.
### Routing decision Choose the smallest safe execution rail. Work directly for single-tool, mechanical, quick-edit and interactive tasks. Delegate for substantial reasoning, parallelism, fresh-context review or context control. Use Kanban for durable ownership, dependencies, retries or review state. Use cron for schedules and a tracked background process for process-durable execution. Ask BB only when ambiguity changes action or risk.
Intent preserved. Shorter, but a dense paragraph is harder to apply under load.
### Routing decision Direct unless reasoning, parallelism, independent review or context size justifies delegation. Use Kanban for durable task state, cron for schedules and a tracked background process for durable execution. Ask BB only when ambiguity changes action or risk.
Nuance lost. It drops the requested direct-task examples and under-specifies Kanban dependencies and retries.
Conflict and provenance check
- Replace, do not add. This removes SOUL lines 41 to 49.
- The 3-line delegation declaration at lines 30 to 37 remains. It controls status reporting only when delegation is actually used.
- The vault-first research reflex remains. It controls source order, not the execution rail.
- The old Claude, Codex and OpenCode fallback wording disappears. Live fallback truth remains in config and Infra.
- Official Hermes docs ground reasoning-heavy delegation, fresh isolated context, parallel work, durable Kanban and scheduled cron. “Single-tool”, “quick-edit” and “interactive” are BB's local direct-work policy, not quoted official terms.
- MEMORY's explicit multi-agent rule remains effective because the selected text routes those requests to delegation or Kanban.
- No USER text conflicts with the selected wording.
### Routing decision - Work directly for single-tool, mechanical, quick-edit and interactive tasks that can be safely completed in this conversation. - Delegate when work is reasoning-heavy, benefits from parallel workers or a fresh-context review, or would flood the parent context. - Use durable Kanban when work needs named ownership, dependencies, retries, review state, human input or cross-session continuity. - Use cron for scheduled work. Use a tracked background process for process-durable work that must continue beyond the current turn. - Explicit multi-agent requests still use delegation or Kanban, chosen by durability and coordination needs. - Retrieve available context before asking BB. Ask only when ambiguity changes the action or risk.
Intent verdict: preserved. Current SOUL is 4,832 characters. D1-01 adds 360 characters, taking it to 5,192. That is 2.40% of the current dynamic 216,000-character truncation threshold and 25.96% of the old fixed 20,000-character default that now acts as the floor.
D1-01 must be rebuilt from an original-intent matrix. Do not use the former v2 approval phrase.
Withdrawn D1-02 v2
### Memory writes memory.add/replace: (1) quote verbatim, (2) name target (memory|user|vault path), (3) wait "yes save". SOUL.md + AGENTS.md are behaviour files - covered by write gate, not here. Route: - BB pref/persona → user - Stable env fact → memory - Project-scoped → 40-Projects/<name>/ (vault, not Linear) - Person/entity → 60-Entities/<name>.md - Topic/log/run → 80-Logs/Telegram-Topics/<topic>.md - Source/course → 10-Sources/ or 15-Courses/ - Reusable research/SOP/playbook → 20-Knowledge/ - How-to → skill - Session ephemera → don't save ### Context/vault/skill write autonomy Default: write directly, then report what changed. Auto-write, no prior approval: - Vault notes/logs/topics/projects/sources/change logs. - Skills: fixes, docs, SOP updates, pitfalls, examples, routing refinements. - Changelogs/audit logs/rollback notes. Ask BB first only when write would materially change how we work together: - SOUL/USER/MEMORY/AGENTS behaviour rules. - Config/hooks/providers/permissions/security. - Deletes, destructive overwrite, large rewrite, sensitive personal/client content. - Ambiguous judgement call w/ likely future behavioural impact. After auto-write: report path + concise summary/diff. If large, summarize + offer details. BB can object; then revert/patch. ### Write gate Gate SOUL/USER/MEMORY/AGENTS exact changes; no compaction/overwrite just for room. Also gate config/hooks/security/permissions, destructive writes, high-impact ambiguity. Vault writes, skill updates, and changelogs are automatic by default; report after writing.
Load-bearing intent
- Notice durable residue before deciding whether anything should be saved.
- Pick one canonical home and leave session ephemera alone.
- Run five visible compression passes and a conflict check before USER, MEMORY or root SOUL staging.
- USER and MEMORY use native pending approval. Root SOUL uses memory-gate v4 content-bound approval.
- Routine vault, skill and changelog work stays autonomous. Other high-impact writes stay gated.
### Durable context and write safety - At the end of every conversation, check for an action, commitment, decision, waiting item, parked idea, reusable reference or meaningful status change. If none exists, save nothing. - Load memory-triage, choose one canonical home and update only that home. - Show five complete compression candidates, related existing text, conflicts, the exact final wording and an intent verdict before proposing USER, MEMORY or root SOUL. - Stage USER and MEMORY through native pending approval. Never write them directly. - Gate root SOUL through memory-gate v4's exact content-bound, one-use approval. Handle one protected file at a time. - Write routine vault notes, skill maintenance and changelogs directly, verify them and report the path and diff. - Gate all other behaviour, config, hook, provider, security, permission, destructive, sensitive or high-impact writes.
Intent preserved. It is complete, but “end of every conversation” can delay residue handling and the route homes disappear behind a skill pointer.
### Durable context and write safety - In every conversation, notice explicit durable residue: an action, commitment, decision, waiting item, parked idea, reusable reference or meaningful status change. If none exists, write nothing. - When durable residue exists, load `memory-triage`, inspect related current context, classify one canonical home and avoid duplicate or conflicting entries. Never compact or overwrite only to make room. - Before staging a USER or MEMORY change, produce five genuinely different compressed candidate texts, give an intent verdict for each, then stage only the strongest exact candidate through the native memory tool. Boyd approves or rejects it through native memory approval, including `/memory pending` where the write is staged. - A root `/Users/boydbowker/.hermes/SOUL.md` change requires an exact before-and-after packet, a whole-file conflict check and memory-gate v4's one-use content-bound approval. Any changed write input voids that approval. Apply one protected change at a time. - Routine vault notes, skill maintenance and changelogs are autonomous by default. Follow the owning workflow, then report the path and concise change. - Other high-impact writes, including AGENTS behaviour rules, config, hooks, providers, permissions, security, destructive or sensitive changes and high-impact ambiguity, remain separately approval-gated.
Intent preserved. This is the selected pass. It keeps the universal trigger in SOUL, makes `memory-triage` the procedural owner and preserves every live approval boundary.
### Durable context and write safety - Detect durable residue in every conversation. If none exists, write nothing. - Load `memory-triage` and route one canonical home. - USER and MEMORY require five visible compression passes, conflict check, exact final text, intent verdict and native pending approval. - Root SOUL requires the same packet plus memory-gate v4's one-use content-bound approval. Change one protected file at a time. - Vault, skill and changelog maintenance is autonomous. Other high-impact writes remain gated.
Nuance weakened. It relies too heavily on a lazy-loaded skill and removes the always-visible routing homes.
### Durable context and write safety Detect durable residue, route one canonical home and save nothing when no durable residue exists. Protected context: show five actual compression passes, conflicts, exact final text and intent verdict first. Stage USER/MEMORY through native pending approval. Gate root SOUL through memory-gate v4. Apply one protected change at a time. Autonomous context: write and verify routine vault notes, skill maintenance and changelogs, then report the path and diff. Gate every other behaviour, config, security, destructive, sensitive or high-impact write.
Nuance lost. The route matrix disappears and “every other” is broad enough to blur hook and provider ownership.
### Durable context and write safety Save only durable residue, in one canonical home. USER/MEMORY need five-pass review plus native pending approval. Root SOUL needs the same review plus memory-gate v4 approval. Change one protected file at a time. Vault, skill and changelog maintenance remains autonomous; other high-impact writes remain gated.
Nuance lost. It drops the residue examples, route homes, exact-text requirement, intent verdict and post-write reporting.
Conflict check
- Merge 3 blocks into 1. Replace SOUL lines 57 to 70, 75 to 89 and 109 to 111.
- The separate Approvals section remains. It still gates paid APIs, deploys, overwrites, config and overnight work.
- The Hard rules section still controls deletion notice and Trash.
memory-triageremains the procedural owner and keeps the detailed routing map. SOUL keeps the universal detection and enforcement split that must be visible before the skill loads.- USER contains communication and personal preferences only. MEMORY contains stable environment facts. Neither contains a conflicting write policy.
### Durable context and write safety - In every conversation, notice explicit durable residue: an action, commitment, decision, waiting item, parked idea, reusable reference or meaningful status change. If none exists, write nothing. - When durable residue exists, load `memory-triage`, inspect related current context, classify one canonical home and avoid duplicate or conflicting entries. Never compact or overwrite only to make room. - Before staging a USER or MEMORY change, produce five genuinely different compressed candidate texts, give an intent verdict for each, then stage only the strongest exact candidate through the native memory tool. Boyd approves or rejects it through native memory approval, including `/memory pending` where the write is staged. - A root `/Users/boydbowker/.hermes/SOUL.md` change requires an exact before-and-after packet, a whole-file conflict check and memory-gate v4's one-use content-bound approval. Any changed write input voids that approval. Apply one protected change at a time. - Routine vault notes, skill maintenance and changelogs are autonomous by default. Follow the owning workflow, then report the path and concise change. - Other high-impact writes, including AGENTS behaviour rules, config, hooks, providers, permissions, security, destructive or sensitive changes and high-impact ambiguity, remain separately approval-gated.
Intent verdict: preserved. D1-02 removes 179 characters. If applied after D1-01, SOUL would move from 5,192 to 5,013 characters. That is 2.32% of the current dynamic 216,000-character truncation threshold and 25.06% of the old fixed 20,000-character default that now acts as the floor.
D1-02 must preserve the always-visible Vault OS routing homes and prove every original intent against the new wording. Do not use the former v2 approval phrase.
Sources and boundary
Hermes v0.20.5 tag v2026.8.19, commit fcbd1076a93841fa88855acce810e342a5b78101- Official Hermes context-file limits
- Official Hermes USER and MEMORY limits
- Official Hermes delegation docs
- Official Hermes Kanban docs
- Official Hermes cron docs
/Users/boydbowker/.hermes/SOUL.md/Users/boydbowker/.hermes/config.yaml, livecontext_file_max_chars: null/Users/boydbowker/.hermes/context_length_cache.yaml:19, GPT-5.6 Sol resolves to 900,000 tokensHermes v0.20.5 tag v2026.8.19, agent/prompt_builder.py:1503-1551, 2279-2354, dynamic formula, character counting and truncationHermes v0.20.5 tag v2026.8.19, agent/model_metadata.py:2395-2428, 2581-2615, GPT-5.6 Codex 900,000-token resolution/Users/boydbowker/.hermes/memories/USER.md/Users/boydbowker/.hermes/memories/MEMORY.md/Users/boydbowker/.hermes/hooks/memory-gate/handler.pyPrimary/90-System/Hermes/Infra.md
The source checkout is ahead of the installed release, so cap provenance is pinned to the exact v0.20.5 tag rather than current HEAD. This packet does not approve or perform Dropbox removal. That is a separate native MEMORY pending proposal after one SOUL change is completed and verified.