Summary
Allow users to configure a dedicated provider + model for subagents (the delegate_task tool) via config.yaml, following the same pattern used by compression.summary_model and the TTS model configs.
Motivation
Currently, subagents always inherit the parent agent's model (delegate_tool.py line 204):
child = AIAgent(
...
model=model or parent_agent.model,
provider=getattr(parent_agent, "provider", None),
...
)
There is no way for users to configure a different (potentially cheaper/faster) model for subagent tasks without the parent agent explicitly passing it per-call. Common use cases:
- Cost savings: Run the main agent on a powerful model (e.g.,
anthropic/claude-sonnet-4) but delegate subtasks to a cheaper model (e.g., google/gemini-3-flash-preview)
- Speed: Subagent tasks are often narrowly scoped and don't need the full reasoning power of the primary model
- Provider flexibility: Use a different provider for subagents than the main agent (e.g., main agent on Nous Portal, subagents on OpenRouter)
Proposed Config
Add a subagent section to config.yaml with provider and model fields, matching the existing pattern:
# config.yaml
subagent:
# Provider for subagent model (optional — defaults to parent's provider)
# provider: "openrouter"
# Model to use for subagents spawned by delegate_task (default: inherits parent model)
# A fast/cheap model is recommended since subtasks are narrowly scoped
model: "google/gemini-3-flash-preview"
For reference, the existing compression config follows this pattern:
compression:
summary_model: "google/gemini-3-flash-preview"
Implementation Notes
- Config: Add
subagent key to DEFAULT_CONFIG in hermes_cli/config.py and load_cli_config() defaults in cli.py
- delegate_tool.py: Read the config values and use them as the default when no explicit model is passed by the agent:
# In _run_single_task or handle_delegate:
subagent_config = config.get("subagent", {})
configured_model = subagent_config.get("model")
configured_provider = subagent_config.get("provider")
child = AIAgent(
...
model=model or configured_model or parent_agent.model,
provider=configured_provider or getattr(parent_agent, "provider", None),
...
)
- cli-config.yaml.example: Add documented example section
- hermes setup / hermes tools: Consider adding subagent model to the config display (
_print_status)
- Precedence: Explicit model passed via tool call > config.yaml subagent.model > parent model (inherit)
Summary
Allow users to configure a dedicated provider + model for subagents (the
delegate_tasktool) viaconfig.yaml, following the same pattern used bycompression.summary_modeland the TTS model configs.Motivation
Currently, subagents always inherit the parent agent's model (
delegate_tool.pyline 204):There is no way for users to configure a different (potentially cheaper/faster) model for subagent tasks without the parent agent explicitly passing it per-call. Common use cases:
anthropic/claude-sonnet-4) but delegate subtasks to a cheaper model (e.g.,google/gemini-3-flash-preview)Proposed Config
Add a
subagentsection toconfig.yamlwithproviderandmodelfields, matching the existing pattern:For reference, the existing compression config follows this pattern:
Implementation Notes
subagentkey toDEFAULT_CONFIGinhermes_cli/config.pyandload_cli_config()defaults incli.py_print_status)