feat: cross-family subagents with model and effort selection - #9
Merged
Conversation
agent_spawn delegates to another model family without the caller naming one — least-spent capable family wins — and agent_fanout runs distinct tasks in parallel, one per family. Every delegation tool now takes model and effort, applied per engine as CLI flags or the model env var, and council_models lists what each family accepts (Codex reports the model from the user's own config rather than a guess). Adds a chat invocation mode: council answers are free-form, so they must not inherit the review path's --output-schema, which codex rejected as an empty schema. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CQy3ZJ5MyUxo4qjZwA93Na
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #8 — these commits were pushed to
feat/councilafter it squash-merged, so main has the council without them.Plain subagents, not just councils
agent_spawn— delegate to another model family without naming one: the least-spent capable family is chosen automatically (preferis a hint, ignored when that family has no quota). Read-only by default,write: truefor edits,background: truefor a job id. This is the subagent shape — hand it work, get a worker from another lineage on a separate subscription.agent_fanout— several different tasks in parallel, one per family, so independent workstreams spread across subscriptions instead of draining one. Assignment is pure and unit-tested: pinned-first, one family each, reuse only once families run out, and a task pinned to an unavailable family is reported rather than silently rerouted.The split is now clean:
council_*gathers opinions on one question,agent_*does work.Model and effort control
council_modelslists which families are summonable and the models/efforts each accepts.modelandefforton every delegation tool, applied per engine as real flags (codex-m+-c model_reasoning_effort, grok-m+--reasoning-effort, claude--model) or the model env var for endpoint-routed families. A caller-supplied effort replaces the engine's built-in flag rather than duplicating it.Two bugs this surfaced
--output-schemaand passed it an empty schema, so every codex consultation 400'd — present in the merged feat: kyora council — summon other model families over MCP #8. Added a chat mode so free-form answers use unconstrained invocations.~/.codex/config.toml(heregpt-5.6-sol), and other families list only ids actually run in testing. Models pass straight through to the vendor CLI, so newer ids work before this package knows them — the list is a hint, not a gate.Verification
effort: lowanswers correctly in 10s (was a hard 400 before the fix)model: glm-5.2through the env route🤖 Generated with Claude Code
https://claude.ai/code/session_01CQy3ZJ5MyUxo4qjZwA93Na