Files
command-center/agent/memories/sharpshooter/wt-20261017-181502-6d1fc1f-1oq2osmoyw03k/architecture.md
T

4.1 KiB

Subagent routing (harness law, 2026-10-18)

No subagent class may route to frank-archon — the operator session lives there and the endpoint runs 3 sequences (--max-num-seqs 3), so task.maxConcurrency + 1 children eat the parent's own KV slots. Violation cost: three doc children + parent = 4 sequences on 3 slots, children ran 2 h 27 m / 2 h 45 m, the interactive session starved. Routing and bounds live in ~/.omp/agent/config.yml (task: block — the owner; verified with read cfg://task/agentModelOverrides): heavy writers (task, scout) → frank-dragoon (2 slots, idle, slow card ⇒ slice work smaller), bursty readers (reviewer, sonic, designer, librarian) → frank-zealot (2 slots, also the compaction hub and every tiny/smol/plan/commit/memory role). Caps: maxConcurrency: 2, maxRuntimeMs: 1800000, softRequestBudget: 120, maxRecursionDepth: 1 (children never spawn children). cfg://.../save approvals auto-deny after a hardcoded 10 s dialog — after Frank has approved a change, edit config.yml directly and validate the YAML; a running session picks global-config edits up at once. Full procedure: managed skill bounding-subagent-runtime.

Documentation law (2026-10-18)

One fact, one owner. The serverAppConfigs repo owns every fleet fact; AGENTS.md restates only what a deploy gate or the harness needs and otherwise links. serverAppConfigs-docs/ (Obsidian vault) carries the lore: one page per endpoint ([[frank-archon]], [[frank-dragoon]], [[frank-zealot]]) holding Current shape, Eras (one row per payload swap: dates, payload, runtime, shape, why replaced, rollback), Laws, wire contract, files. log.md records incidents and laws only — no per-swap ledgers, no bench tables. A retired payload is an Eras row, never a page of its own. scripts/<service>.env beats any page: where they disagree, the page is the bug.

Model swaps (2026-10-18)

Swap the model, don't instrument the swap: edit the trio (scripts/<svc>.env + serve script + unit) → ./tests/run.sh → PR → deploy.sh <host> --service <svc> → /health + one chat / tool-call / vision probe → done. No benchmarks, A/Bs, ladders, or acceptance tables unless Frank explicitly asks for data. If a payload misbehaves, revert the commit and redeploy. When a bench IS ordered, the GPU-safety procedure (stop + mask, no scratch ports, never systemctl disable) is AGENTS.md → Model swaps and Deployment completeness.

Where facts live

Need Owner
Topology, ports, payload, shape repo AGENTS.md → Fleet topology; scripts/<svc>.env is the authority
Endpoint lore, eras, laws, rollback vault serverAppConfigs-docs/LLM/<endpoint>.md
Harness model entries (contextWindow, maxTokens, reasoningContentField, modelRoles) ~/.omp/agent/models.yml
Incidents and operational laws vault serverAppConfigs-docs/log.md
Service/infra pages vault Dankclaw/, Dankserver/, Infrastructure/, Architecture/

Models.yml resolution rules that are harness-local: a default model resolves as a defaultProvider + defaultModel pair; a subagent override is a bare model id and resolves only when unique across providers; two ports on one host need two provider blocks — the file cannot express "same host, different port".

There is no audio input anywhere in the fleet (gone with the Gemma4 retirement, 2026-10-01). All three chat endpoints take text + images.

Retired laws

  • The old "Benchmarking Policy (MANDATORY)" wording demanded a bench harness per payload; superseded 2026-10-18 by the swap law above.
  • A "Subagent Lifecycle (MANDATORY)" rule (heartbeat ≤5 s, checkpoints, hard timeout) was recorded here 2026-09 and never implemented anywhere; it described nothing that exists and is deleted 2026-10-18. Do not re-add it without a real implementation.
  • The fleet model inventory that used to live in this memory file drifted out of date within hours (it still claimed Bonsai-2-27B at --ctx-size 401408 and a dragoon 524,288-position pool). Memory files do not get deploys — the repo does. That is why it is pointers now.