agent-architect — the one agent that plans, files and dispatches, and never executes
Mirrored from the fleet knowledge base: wi/components/agent-architect.md
Updated
Mirrored verbatim from
utopia-models/knowledgewi/components/agent-architect.mdby the allowlisted publish pipeline. Edit it there, not here.
component: agent-architect
serves: all
runs-on: novaserver (architect) — primary; host-eth (WSL `kxdev`) — peer
adrs: [4063, 6924, 7148]
owns:
- _infra/scripts/file-issue.sh
- _infra/scripts/chain-collision-check.sh
- _infra/scripts/ask-agent.shagent-architect — the one agent that plans, files and dispatches, and never executes
WHAT IT IS
agent (GitHub kxagent), registry class architect-agent. It runs the planning loop with
Tyler in the foreground, writes and curates specs and doctrine, files the Feature and its ordered
sub-issues, and dispatches masters onto them. It is the only agent that does those things and the
only one that never executes a dispatched issue.
Stop it and the masters keep executing whatever is already filed, then go idle: the board stops being refilled. Its output is not code — it is ordered, dispatchable work with a committed brief beside it.
It was master-agent in the registry until #6946 flipped it, and the rename was the point: calling
the planner a master hid the actual architecture, and the OCC now branches on a predicate
(isMasterClass()) rather than on the literal string, so the flip dropped it off no surface.
WHERE IT RUNS
One Architect, two hosts (knowledge#10499, decisions 2 and 5). Primary: novaserver, unix user
architect (/home/architect, knowledge#10285) — Tyler drives it from his phone over Remote Control, in
the persistent tmux sessions listed in _infra/persistent-sessions.tsv (persistent-sessions.md).
Peer: the ETH laptop, WSL user kxdev (host-eth.md) — the same identity, rules and memory, there so
Tyler can still talk to the Architect when novaserver is down. With novaserver down the peer can plan,
file issues and push; it cannot read Infisical or dispatch, because both live on novaserver (decision 7:
no laptop secrets cache). Neither host is a dispatch target: lane agent is undispatchable.
A third host is one command (knowledge#10563). git clone https://github.com/utopia-models/brain-agent.git ~/.claude && bash ~/.claude/bootstrap.sh rebuilds the Architect on any Linux user from GitHub alone; the runbook is brain-agent's BOOTSTRAP.md. The GitHub token is never stored: hooks/sessionstart-gh-token.sh reads GITHUB_TOKEN_1000XAGENT from the vault at every session start, writes it to ~/.config/gh/fleet-token (0600) and exports GH_TOKEN="$(cat <that file>)" — never the value itself, because Claude Code pastes the env file into every Bash command's argv, where any unix user on the box can read it (knowledge#10764) — so a rotation reaches every host on its next session. With the vault gone, gh's own login (gh auth login) is the fallback.
HOW IT WORKS TODAY
flowchart TD
T["Tyler — steps 1, 4, 5<br/>goal · forks · approval"] <--> L["the planning loop<br/>research ⇄ questions, repeating"]
L --> A["a PLAN: the document,<br/>the artifact, the forks closed"]
A --> B["the committed brief<br/><portfolio>/specs/<issue#>-<slug>/spec.md + plan.md"]
A --> F["file-issue.sh — Feature + ordered sub-issues,<br/>every field set in ONE pass"]
F --> K{"chain-collision-check.sh"}
K -- "two phases name one file" --> N["the finding is written INTO the issue body<br/>(the ⚠ same-file block), never silently dropped"]
K --> Q["the board · Status=Todo"]
Q --> S["the sweeper picks it up"]
A -.->|"or by hand"| D["dispatch.sh <master> <issue#>"]
D --> S
S --> M["a master executes to a MERGED PR"]
M -.->|"the merged PR moves the board"| QFiling is a script, not a habit. file-issue.sh sets title, body, lane, priority, portfolio,
parent and blocked-by in one pass — an unfielded issue is unroutable, because dispatch routes on
Lane. It refuses an empty acceptance section, refuses a parked-portfolio title, and enforces the
lane placeholder set; two of its guards carry their own regression tests, in owns: above.
chain-collision-check.sh is why a wave is safe to fan out. Worktrees prevent tree collisions,
never merge collisions: two phases editing one file in parallel means last PR wins. The check runs
at FILING time and writes its findings into each issue body, so the master who draws that phase reads
the collision instead of discovering it.
It is not reachable by the sweeper, and that is structural, not a gap. The sweeper's MASTERS
list is a hardcoded string on novaserver; the Architect (unix user architect on novaserver since knowledge#10285) is never dispatched, and the
OCC excludes it from the dispatchable set by KEY (agentKey !== "agent") rather than by class — so
both tests hold whichever class value it carries. Consequences worth stating plainly: a dispatch it
never starts is invisible.
Tyler talks only to the Architect; ask-agent.sh is how it talks to the rest (knowledge#10776).
bash _infra/scripts/ask-agent.sh <scout|peaky|ronin|wingman|atlas> "<msg>" prints the agent's reply
(default wait 600 s, ASK_AGENT_TIMEOUT; exit 3 on a timeout prints the ref, and ask-agent.sh <agent> --wait <ref> picks
it back up). An agent with a live persistent session (scout, peaky) gets the message pasted into that session — the
conversation Tyler sees over Remote Control — and the reply is read from its transcript once an end_turn stamped
after the paste lands. One without (ronin, wingman, atlas) is asked by claude -p run as the agent in its home, with
its registry role appended, and every ask resumes the one conversation in ~/.local/state/ask-agent/session.id.
It becomes the agent through sudo -n -u <agent>, or ssh nova@localhost + sudo from a box user without sudo.
Watching a running dispatch is the failure, not the diligence. Verification moved off the Architect and onto the master's own acceptance criteria plus the auto-filed VERIFY task. Polling a run collapses fleet throughput to one plan at a time.
BOUND VALUES
- ✅
_infra/scripts/file-issue.sh - ✅
_infra/scripts/chain-collision-check.sh - ✅
architect-agent— still live inwi/registry/organization.yaml(class: (architect-agent)) - ✅
kxagent— still live inwi/registry/organization.yaml(github_account: (kxagent)\s) - ✅
chain-collision-check.sh— still called by_infra/scripts/file-issue.sh
DETERMINE CURRENT STATE
Everything about this agent is off-git from here — it runs as the unix user architect on novaserver
(knowledge#10285), with a peer as kxdev on ETH.
sed -n '/^ agent:/,/^ [a-z]/p' wi/registry/organization.yaml
gh api users/kxagent/events/public --jq '[.[0].created_at, .[0].type]'
python3 -c "import json;print(json.load(open('_infra/occ-feeds/usage/agent.json'))['account'])"
bash _infra/scripts/file-issue.sh --help 2>&1 | head -20 # the filing contract, as it is today
sudo -n -u architect tmux ls # primary: its live sessions on novaserver
tailscale status | grep -E '\seth-1\s' # peer: is the laptop's WSL host upKNOWN BROKEN
- 🔴 The registry id for this component is
master-agent.wi/registry/components.yamlstill carries- id: master-agentwithdoc: wi/work/reference/win/master-agent.md— an id that names the class this agent was moved off. It also collides head-on with the masters' component id (agent-master), which is PLAN-256's open item 1. Renaming a registry id is not this doc's to do; it is recorded here so the next reader does not re-derive it. - ⚠ A new plan started in the same session overwrites the previous plan file — the slug is memoized
per session, so one plan = one file = one session. Stated in
master-agent.mdsince 2026-08-01 and never re-graded; nothing in this repo binds it, because the behaviour lives in the Architect's own skills on its box. - ⚠
file-issue.shandchain-collision-check.share indexed here because nothing else claims them, not because the Architect is the only caller. If aspec-plan-brief-formatorplanning-loopcomponent doc lands with a better claim on the filing contract, thisowns:block is the thing to move.
When Tyler is talking, absorb. A tool call mid-briefing is not listening.
Mirrored from the fleet knowledge base: _rules/when-tyler-is-talking-stop-executing.md
agent-health-sweep — the weekly self-enhancement sweep over every agent
Mirrored from the fleet knowledge base: wi/components/agent-health-sweep.md