Commit Graph

16 Commits

Author SHA1 Message Date
ismeth 4764d65db1 fix(athena): parallelize council launches and gate handoff actions 2026-04-15 16:17:43 +09:00
ismeth ca199ee85b fix(athena): make council tool blocking — collect results directly instead of polling
The athena_council tool now waits for all council members to complete and
returns their collected results as markdown, eliminating the need for
Athena to repeatedly call background_output per member (which created
excessive UI noise).

- Add result-collector.ts that polls task status and fetches session content
- Update tool to accept BackgroundOutputClient and return formatted markdown
- Update Athena prompt to remove background_output polling steps
- Rewrite tests for new blocking behavior and markdown output format
2026-04-15 15:56:56 +09:00
ismeth 4a418fc324 fix(athena): remove explicit name property causing agent resolution failure
Athena was the only agent setting name explicitly. The mismatch between

the name property ('Athena (Council Orchestrator)') and the config key

('Athena (Council)') caused TypeError during agent resolution.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-15 15:55:37 +09:00
ismeth ef929c96e9 feat(athena): add display name 'Athena (Council Orchestrator)' 2026-04-15 15:49:07 +09:00
ismeth 84185490f9 refactor(athena): rename session_handoff to switch_agent to avoid confusion with /handoff command
Rename across all layers to eliminate naming ambiguity:
- Tool: session_handoff → switch_agent
- Hook: agent-handoff → agent-switch
- Feature: agent-handoff/ → agent-switch/
- Types: SessionHandoffArgs → SwitchAgentArgs, PendingHandoff → PendingSwitch
- Functions: setPendingHandoff → setPendingSwitch, consumePendingHandoff → consumePendingSwitch

/handoff = inter-session context summary (existing command)
switch_agent = intra-session active agent change (our new tool)
2026-04-15 15:47:13 +09:00
ismeth 7db0f110ee feat(athena): add session handoff with Question tool for Atlas/Prometheus routing
After Athena synthesizes council findings, presents user with Question tool
TUI to choose: Atlas (fix now), Prometheus (create plan), or no action.
On selection, session_handoff tool stores intent + calls updateSessionAgent(),
then agent-handoff hook fires on session.idle to switch the main session's
active agent via promptAsync with synthesis context.
2026-04-15 15:45:46 +09:00
ismeth 84c91cb8d7 feat(08-01): guide athena to collect member outputs
- update Athena workflow to launch council then call background_output per task

- require collecting all member responses before synthesis and delegation
2026-04-15 15:42:45 +09:00
ismeth e0b6ad1a53 feat(athena): use Question tool TUI for council member selection with dynamic member list 2026-04-15 15:42:45 +09:00
ismeth 922b66ec36 fix(athena): ask user which council members to consult before calling tool 2026-04-15 15:42:45 +09:00
ismeth 9a72b537fe feat(07-01): document targeted council member selection
- describe optional members array in athena_council tool documentation

- guide Athena prompt to pass members only when user requests specific models
2026-04-15 15:42:45 +09:00
ismeth 53cf2809b0 fix(athena): prometheus handoff via agent switch, not background task
Prometheus needs to interview the user interactively, so it can't run as a
background task. Updated Athena's delegation prompt:
- Atlas: still delegates via task tool (autonomous execution)
- Prometheus: outputs structured findings summary and tells the user to
  switch to Prometheus agent, which sees the conversation context and
  can ask clarifying questions directly
2026-04-15 15:42:15 +09:00
ismeth cbdff96f66 fix(athena): force council-first behavior — unconditional prompt + skip keyword injection
The old prompt said 'when requiring multi-model analysis' which let Athena
decide to skip the council and do direct analysis herself. Combined with
keyword-detector injecting [search-mode] telling her to 'launch explore
agents and use Grep directly', Athena never called athena_council.

Two fixes:
1. System prompt now unconditionally requires athena_council as FIRST action
   - Explicitly prohibits Read/Grep/Glob/LSP/call_omo_agent
   - Identity is 'orchestrator, not analyst'
2. keyword-detector skips ALL injections for Athena agent
   - search/analyze/ultrawork modes conflict with council orchestration
   - Same pattern as isPlannerAgent() skip for Prometheus
2026-04-15 15:42:15 +09:00
ismeth 11b01d4ed3 feat(06-01): direct athena prompt to athena_council
- replace manual council fan-out guidance with athena_council execution flow

- enforce athena_council-only constraint before confirmation-gated delegation
2026-04-15 15:42:15 +09:00
ismeth c99cf27507 feat(05-02): add confirmation-gated Athena delegation prompt 2026-04-15 15:41:41 +09:00
ismeth 3d97fcd199 feat(05-02): allow Athena task tool delegation 2026-04-15 15:41:41 +09:00
ismeth f59dbf6649 feat(04-01): add Athena primary agent factory and exports
- implement createAthenaAgent with primary-mode model behavior and prompt metadata

- export Athena factory and metadata through athena and root agent barrels
2026-04-15 15:40:31 +09:00