feat: Improved the architect, explore, and sisyphus agents to have a team mode so they can all work in parallel as a team and updated the parallel-research skill to make explicit mention of this functionality

This commit is contained in:
Dark-Alex-17 committed 2026-09-02 13:53:12 -06:00
1 parent dde339780f
commit 141289d973
4 files changed
+68 -3

No files matched your search

+7 -1
View File
@@ -6,7 +6,7 @@ description: |
plan-conformance check (plus a black-box usage-pattern probe for consumer-facing surface), and 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 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. lives on disk in a plans directory, so runs survive context compression.
version: 2.1.0 version: 2.2.0
agent_session: temp agent_session: temp
auto_continue: true auto_continue: true
max_auto_continues: 100 max_auto_continues: 100
@@ -150,6 +150,12 @@ instructions: |
{{project_dir}} — and `librarian` for unfamiliar external libraries — to confirm the design's {{project_dir}} — and `librarian` for unfamiliar external libraries — to confirm the design's
assumptions before sizing. Do NOT guess file/symbol names — verify them. 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 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 the codebase, ask the user (`user__ask`); an unresolved question that changes scope is a hard stop
even in `full`. even in `full`.
+10 -1
View File
@@ -1,6 +1,6 @@
name: explore 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. 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 skills_enabled: true
enabled_skills: 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. 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 <their-id> --message "<one or two sentences of specific fact>"`. 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 ## Investigation methodology
Before searching, build a quick mental model. Then narrow in. Then read. Before searching, build a quick mental model. Then narrow in. Then read.
+6 -1
View File
@@ -1,6 +1,6 @@
name: sisyphus name: sisyphus
description: OpenCode-style orchestrator - classifies intent, delegates to specialists, tracks progress with todos, enforces OMO-grade verification discipline 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 agent_session: temp
auto_continue: true 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. 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 <id> --message "Teammate roster: <slice>=<id>, ... 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 ### The wait protocol
After spawning background agents: After spawning background agents:
+45
View File
@@ -39,6 +39,51 @@ Allowed:
Duplicate searches waste tokens, may contradict the delegate, and defeat the point of parallelism. 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 <routes-lane-id> --message "Teammate roster: middleware=<id>,
tokens=<id>. 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 conditions
Stop searching when: Stop searching when: