Document the solution to OpenCode/Claude Code issue where LLMs cannot properly delegate to specific model tiers when using subagents.
4.8 KiB
Agent Model Delegation Issue - Solution
Problem
LLMs cannot delegate to specific models for subagents in a way that ensures the right model tier is used according to task requirements.
Symptoms
- LLMs default to most expensive models when delegating
- LLMs don't know which model tier each agent type uses
- No automatic visibility into agent definitions before delegation
- Cost inefficiency from using higher-tier models than necessary
Root Cause
When an LLM wants to delegate work via the Task tool, it needs to:
- Know which agent types exist
- Know which model tier each agent type uses
- Select appropriate agent based on task complexity
But agent definitions (with model field in YAML frontmatter) are stored in ~/.claude/agents/*.md files that are not automatically loaded into LLM's context.
Solution
Three-part approach to make agent information visible to LLMs:
1. Enhanced System Instructions
File: state/system-instructions.json
Updated model-selection process to include:
- Pre-flight check requirement: "Before using Task tool, MUST check agent model"
- Explicit model tier definitions
- Decision flow for model selection
- Agent lookup command reference
2. Enhanced CLAUDE.md Documentation
File: CLAUDE.md
Added to "Model Selection (MANDATORY)" section:
- CRITICAL checklist before delegating
- Steps to verify agent model tier
- Alternative strategies when agent uses higher-tier model
- References to state files for lookup
3. Quick Reference Guide
File: state/model-selection-guide.md
New standalone guide with:
- Model tier decision table
- Available agents grouped by model tier
- Decision flow diagram
- How to use
/agent-infocommand - Escalation rules
How It Works
Before Delegation (Pre-Flight Check)
LLM is now instructed to:
Before delegating to a specific agent, you MUST:
1. Read state/model-policy.json to verify which model tier that agent uses
2. Read state/component-registry.json to check agent triggers and descriptions
3. Match task complexity to agent's model tier (not just agent name)
Agent Registry Sources
Two sources provide agent information:
state/model-policy.json
- Full model tier mappings
- Use cases for each tier
- Which agents use which model
- Escalation rules between tiers
state/component-registry.json
- All registered agents, skills, commands
- Agent triggers and descriptions
- Hierarchical relationships
- Auto-generated from agent files
/agent-info command
- Interactive listing of all agents
- Show hierarchy tree
- Get details for specific agent
Model Selection Flow
Task comes in
│
├─ Check state/model-policy.json
│ └─ Find agent name → Look up model tier
│
├─ Evaluate task complexity
│ ├─ Mechanical with clear instructions? → haiku
│ ├─ Needs code understanding? → sonnet
│ └─ Complex reasoning/coordination? → opus
│
└─ Match task to agent with appropriate tier
├─ Agent uses matching tier? ✓ Use it
├─ Agent uses higher tier? → Find alternative or escalate
└─ Agent uses lower tier? → Escalate if needed
Files Modified
~/.claude/state/system-instructions.json- Enhanced model-selection process~/.claude/CLAUDE.md- Added CRITICAL pre-delegation checklist~/.claude/state/model-selection-guide.md- New quick reference guide
Testing
To verify the fix works:
-
Test model selection awareness:
Ask LLM to delegate a simple grep task Expected: LLM checks agent models, selects haiku-tier agent -
Test escalation flow:
Ask LLM to design a complex system Expected: LLM checks agent models, uses opus-tier agent -
Test cost optimization:
Ask LLM to review a PR Expected: LLM verifies code-reviewer uses sonnet (not opus) -
Test agent-info usage:
Ask LLM which agents are available Expected: LLM runs /agent-info or reads component registry
Future Improvements
-
Tool-based agent lookup: Add a tool that exposes agent info to LLM programmatically (like Flynn's
agents.listtool) -
Automatic context injection: Automatically load agent registry into LLM's initial context rather than requiring explicit read
-
Model tier parameter in Task tool: Allow specifying model tier directly when delegating, not just agent type
-
Cost-aware delegation: Track actual cost per agent delegation and provide feedback
Related Files
~/.claude/agents/*.md- Agent definitions with model field~/.claude/state/model-policy.json- Full model selection policy~/.claude/state/component-registry.json- Generated agent registry~/.claude/automation/agent-info.py- Agent info script~/.claude/commands/agent-info.md- Agent info command