src/council/ executes multi-LLM consensus sessions.
It owns council orchestration and result normalization, while the actual council agent remains in agents/council.ts.
council.ts is a barrel that exports CouncilManager.council-manager.ts is the engine:
runCouncil(prompt, preset, parentSessionId)
├─> enforce depth via SubagentDepthTracker
├─> load council config
├─> resolve preset (default if absent)
├─> run all councillors in parallel or serial mode
│ - each councillor session: create -> prompt -> extract -> abort
│ - tmux delay + stagger delay for launch collisions
│ - retry on empty response up to configured retry count
├─> if none completed -> error
└─> formatCouncillorResults(prompt, completed responses)
Execution characteristics:
councillor agent internally (agent: 'councillor'), tools.task: false.name, model, status, error).session.prompt.config/council-schema.ts:
default_presettimeoutcouncillor_execution_mode (parallel/serial)councillor_retriesgetDeprecatedFields().tools/council.ts defines council_session and is the only caller that invokes CouncilManager.runCouncil(...).config (for preset/timeouts/retry policy)SubagentDepthTracker (to prevent nested delegation explosions)client.session.*) for sub-session lifecyclemultiplexer settings (tmux launch delay behavior)