diff --git a/assets/agents/architect/config.yaml b/assets/agents/architect/config.yaml index 25768e0..a8a4c65 100644 --- a/assets/agents/architect/config.yaml +++ b/assets/agents/architect/config.yaml @@ -6,7 +6,7 @@ description: | plan-conformance check (plus a black-box usage-pattern probe for consumer-facing surface), and finishes with ONE draft PR (CI checks watched to green) plus tracked follow-up tasks. Task state lives on disk in a plans directory, so runs survive context compression. -version: 2.1.0 +version: 2.2.0 agent_session: temp auto_continue: true max_auto_continues: 100 @@ -150,6 +150,12 @@ instructions: | {{project_dir}} — and `librarian` for unfamiliar external libraries — to confirm the design's assumptions before sizing. Do NOT guess file/symbol names — verify them. + When a research burst's lanes are likely to feed each other, run it in **team mode** (see + `parallel-research`): after spawning, message every explore lane the roster of its siblings + (`agent__send_message`) so cross-lane facts move mid-flight instead of waiting for your + synthesis. (`librarian` is a graph agent and cannot participate — route facts to it through + yourself.) + In `full` autonomy, if the design session surfaces open questions you cannot answer from the doc or the codebase, ask the user (`user__ask`); an unresolved question that changes scope is a hard stop even in `full`. diff --git a/assets/agents/explore/config.yaml b/assets/agents/explore/config.yaml index d2ea20a..2a69e3f 100644 --- a/assets/agents/explore/config.yaml +++ b/assets/agents/explore/config.yaml @@ -1,6 +1,6 @@ name: explore description: Fast codebase exploration agent - finds patterns, structures, and relevant files. Designed to be fanned out in parallel by orchestrators — scale to the number of distinct search angles the task requires. -version: 3.1.0 +version: 3.2.0 skills_enabled: true enabled_skills: @@ -42,6 +42,15 @@ instructions: | If the prompt says "find auth middleware", you find auth middleware. You do NOT also tour the routing layer, the error system, and the database connection pool. Narrow scope is the contract. + ## Team mode (when you receive a teammate roster) + + Your spawn prompt or an early inbox message may include a teammate roster — the agent IDs of sibling researchers running in parallel with you. If it does: + + - When you find a specific fact that belongs to a TEAMMATE's slice (a file they should read, a symbol they're hunting, a config flag that redirects their search), send it directly: `agent__send_message --id --message ""`. Facts only — file:line, exact names, verbatim snippets. Never chat or status updates. + - Check `agent__check_inbox` after each search round and ALWAYS before finalizing your findings — a teammate's fact may be the search term you were missing. + - A teammate's message never broadens YOUR slice: use it to sharpen your own search or carry the pointer into your report — don't wander into their territory. + - No roster → no messaging. Work your slice and report as usual. + ## Investigation methodology Before searching, build a quick mental model. Then narrow in. Then read. diff --git a/assets/agents/sisyphus/config.yaml b/assets/agents/sisyphus/config.yaml index c27d856..843b68a 100644 --- a/assets/agents/sisyphus/config.yaml +++ b/assets/agents/sisyphus/config.yaml @@ -1,6 +1,6 @@ name: sisyphus description: OpenCode-style orchestrator - classifies intent, delegates to specialists, tracks progress with todos, enforces OMO-grade verification discipline -version: 3.9.0 +version: 3.10.0 agent_session: temp auto_continue: true @@ -229,6 +229,11 @@ instructions: | Never artificially cap at a small number. If there are 10 distinct things to find, spawn 10 agents. The system limit is the only ceiling that matters. + If the slices are likely to FEED each other (adjacent modules; one lane's discovery redirects another's search), run the burst in team mode per `parallel-research`: after spawning, send + every explorer the roster of its siblings (`agent__send_message --id --message "Teammate roster: =, ... Message a teammate directly when you find a fact in THEIR slice; + check your inbox after each search round and before finalizing."`) so cross-slice facts move directly between lanes instead of waiting for your synthesis. Never do this with reviewer + lanes — reviewer verdicts stay independent. + ### The wait protocol After spawning background agents: diff --git a/assets/skills/parallel-research/SKILL.md b/assets/skills/parallel-research/SKILL.md index 43e426b..93a5dab 100644 --- a/assets/skills/parallel-research/SKILL.md +++ b/assets/skills/parallel-research/SKILL.md @@ -39,6 +39,51 @@ Allowed: Duplicate searches waste tokens, may contradict the delegate, and defeat the point of parallelism. +## Team mode (optional): let lanes message each other + +Every spawned LLM-loop agent has a built-in mailbox (`agent__send_message` / +`agent__check_inbox`) — no configuration needed. By default parallel lanes are isolated, and for +most bursts that is correct. Turn on team mode when one lane's discovery is likely to CHANGE what +another lane should look for: + +- **Adjacent slices of one system** — the routes lane finds the middleware file the token lane + is hunting for. +- **Mixed-angle bursts** — one lane discovers the project already vendors library X, which + should redirect another lane's search immediately, not after synthesis. +- **Long-running lanes** where routing a fact through you costs a full collect/re-spawn round + trip. + +Skip team mode when lanes are genuinely independent (survey-style sweeps, one-agent-per-module +audits). And NEVER wire reviewer lanes together (`adversary`, `code-reviewer`, +`security-reviewer`, `probe`): their verdicts derive value from independence — shared chatter +biases them. + +### Orchestrator protocol + +Agent IDs exist only after spawning, so the roster travels as a message: + +1. Spawn the whole burst as usual. +2. Immediately send EVERY lane the roster: + + `agent__send_message --id --message "Teammate roster: middleware=, + tokens=. If you find a specific fact that belongs to a teammate's lane, message them + directly; check your inbox after each search round and before finalizing."` + +3. Synthesis is unchanged: every lane still reports its findings back to YOU. Teammate messages + move facts sideways mid-flight; they never replace the final report. + +Graph agents (`librarian`) cannot participate — their nodes have no inbox tools. A fact that +affects a graph lane routes through you: collect, then re-spawn or refine that lane's prompt. + +### Worker rules (for agents that receive a roster) + +- A message is one or two sentences of specific fact: file:line, exact symbol/term, verbatim + quote — never chat, status updates, or opinions. +- A teammate's message never broadens YOUR slice: use it to sharpen your own search, or carry + the pointer into your report. Entirely outside your slice → ignore it. +- Check your inbox after each search round and ALWAYS before finalizing — a teammate's fact may + be the search term you were missing. + ## Stop conditions Stop searching when: