fix(athena): use background_wait for council progress instead of polling

Athena now uses background_wait (race-style) to collect council results with incremental progress instead of sequential background_output calls or rapid polling. Updated both the system prompt and tool description to guide Athena to the correct waiting pattern.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
ismeth
2026-02-19 01:32:49 +01:00
committed by YeonGyu-Kim
parent b7a3b65106
commit f248a09d53
2 changed files with 22 additions and 12 deletions

View File

@@ -78,15 +78,26 @@ Step 3: Call athena_council ONCE PER MEMBER (member per tool call):
- Launch all selected members first (one athena_council call per member) so they run in parallel.
- Track every returned task_id and member mapping.
Step 4: Wait for all member outputs (DO NOT POLL):
- After launching all members, STOP generating and end your turn. Do NOT call background_output yet.
- The system will automatically notify you when tasks complete via system-reminder messages.
- You will receive individual "[BACKGROUND TASK COMPLETED]" notifications as each member finishes.
- When all members finish, you will receive an "[ALL BACKGROUND TASKS COMPLETE]" notification listing all task IDs.
- ONLY after receiving the all-complete notification, call background_output(task_id="<id>") ONCE per member to retrieve their final output.
- Do NOT loop or repeatedly call background_output. One call per task_id, only after the system notification.
- Do not ask the final action question while any launched member is still pending.
- Do not present interim synthesis from partial results. Wait for all members first.
Step 4: Collect results with progress using background_wait:
- After launching all members, call background_wait(task_ids=[...all task IDs...]) with ONLY the task_ids parameter.
- background_wait blocks until ANY one of the given tasks completes, then returns that task's result plus a progress bar.
- Then call background_wait again with the REMAINING task IDs (the tool output tells you which IDs remain).
- Repeat until all members are collected (background_wait will say "All tasks complete" when done).
- IMPORTANT: When background_wait returns, display its progress output DIRECTLY to the user — do NOT summarize or rephrase it. The tool output contains a formatted progress bar that the user should see.
- After EACH call returns, display a progress bar showing overall status. Example format:
\`\`\`
Council progress: [##--] 2/4
- Claude Opus 4.6 — ✅
- GPT 5.3 Codex — ✅
- Kimi K2.5 — 🕓
- MiniMax M2.5 — 🕓
\`\`\`
- Do NOT pass a timeout parameter to background_wait. The default (120s) is correct and the tool returns instantly when any task finishes.
- Do NOT use background_output for collecting council results — use background_wait exclusively.
- Do NOT ask the final action question while any launched member is still pending.
- Do NOT present interim synthesis from partial results. Wait for all members first.
Step 5: Synthesize the findings returned by all collected member outputs:
- Group findings by agreement level: unanimous, majority, minority, solo
@@ -118,7 +129,7 @@ The switch_agent tool switches the active agent. After you call it, end your res
## Constraints
- Use the Question tool for member selection BEFORE calling athena_council (unless user pre-specified).
- Use the Question tool for action selection AFTER synthesis (unless user already stated intent).
- Do NOT poll background_output in a loop. Wait for system notifications, then collect once per member.
- Use background_wait to collect council results — do NOT use background_output for this purpose.
- Do NOT call athena_council with multiple members in one call.
- Do NOT ask "How should we proceed" until all selected member calls have finished.
- Do NOT present or summarize partial council findings while any selected member is still running.

View File

@@ -3,8 +3,7 @@ export const ATHENA_COUNCIL_TOOL_DESCRIPTION_TEMPLATE = `Execute Athena's multi-
Pass members as a single-item array containing one member name or model ID. Athena should call this tool once per selected member.
This tool launches the selected member as a background task and returns task/session metadata immediately.
After launching ALL members, STOP and wait — the system will notify you when tasks complete.
Only then call background_output(task_id=...) once per member to collect results. Do NOT poll in a loop.
After launching ALL members, use background_wait(task_ids=[...all IDs...]) to wait for results. It blocks until the next member finishes and returns progress. Repeat with remaining IDs until all complete.
{members}