# Snow CLI User Guide - Sub-Agent Configuration
Welcome to Snow CLI! Agentic coding in your terminal.
## What's New (#194)
| Capability | Description |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| Project Markdown agents | Scan `.snow/agents/**/*.md` (and optional `~/.snow/agents/**/*.md`); schedulable without editing `sub-agents.json` |
| Merge priority | `project .snow/agents` > `global ~/.snow/agents` > `~/.snow/sub-agents.json` > builtin |
| `ROLE-*.md` | Does **not** register a new `agentId` (role overlay only) |
| Unknown-tool warn | Unregistered frontmatter `tools` names are **warned**; declaration is not silently dropped; runtime still filters by allowlist |
| `beforeSubAgentStart` | Hook can inject/rewrite the prompt before spawn (see [Hooks Configuration](./07.Hooks%20Configuration.md)) |
## What are Sub-Agents
Sub-agents are branches of the main workflow in Snow CLI, designed to handle specific individual tasks to save context usage in the main workflow.
## Three Built-in System Sub-Agents
- Explore Agent - An exploration agent for searching code functionality for the main workflow, focusing on locating code positions.
- Plan Agent - A planning agent for developing comprehensive coding plans and guidance for the main workflow.
- General Purpose Agent - A general-purpose agent that provides common coding functionality for the main workflow, suitable for completing tasks that are singular but involve many files (e.g., internationalization).
## Sub-Agent Workflow
```mermaid
graph TB
Start([User Initiates Task]) --> MainProcess[Main Workflow Main Agent]
MainProcess --> Check{Does it need
a sub-agent?}
Check -->|No| DirectHandle[Main workflow handles directly]
DirectHandle --> End([Return Result])
Check -->|Yes| SelectAgent{Select sub-agent type}
SelectAgent -->|Code exploration| ExploreAgent[Explore Agent
Exploration Agent]
SelectAgent -->|Make plan| PlanAgent[Plan Agent
Planning Agent]
SelectAgent -->|General coding| GeneralAgent[General Purpose Agent
General-Purpose Agent]
ExploreAgent --> SendTask[Main workflow sends task prompt]
PlanAgent --> SendTask
GeneralAgent --> SendTask
SendTask --> SubProcess[Sub-agent receives task]
SubProcess --> Isolate[Independent context environment
Isolated from main workflow]
Isolate --> SpecializedWork{Specialized direction processing}
SpecializedWork -->|Explore agent| SearchCode[Search code positions
Analyze code structure]
SpecializedWork -->|Plan agent| MakePlan[Develop coding plan
Provide guidance]
SpecializedWork -->|General agent| GeneralWork[Execute general coding
Process batch files]
SearchCode --> Complete[Processing complete]
MakePlan --> Complete
GeneralWork --> Complete
Complete --> Return[Send results back to main workflow]
Return --> MainReceive[Main workflow receives results]
MainReceive --> End
style MainProcess fill:#e1f5ff
style ExploreAgent fill:#fff4e1
style PlanAgent fill:#ffe1f5
style GeneralAgent fill:#e1ffe1
style Isolate fill:#ffe1e1
style SubProcess fill:#f0f0f0
style Return fill:#e1ffe1
```
### Workflow Description
1. **Main Workflow Assessment**: After receiving a user task, the main workflow first evaluates whether a sub-agent is needed.
2. **Sub-Agent Selection**: Select an appropriate sub-agent based on the task type:
- **Explore Agent**: Deep code exploration (5+ files), complex dependency tracing
- **Plan Agent**: Breaking down complex features, major refactoring planning
- **General Purpose Agent**: Batch modifications (5+ files), systematic refactoring
3. **Task Dispatch**: The main workflow sends a task prompt containing complete context to the sub-agent.
4. **Independent Processing**: The sub-agent processes the task in an independent context environment, completely isolated from the main workflow.
5. **Specialized Processing**: Each sub-agent performs targeted processing according to its specialized direction.
6. **Return Results**: After processing is complete, the sub-agent sends the results back to the main workflow.
7. **Main Workflow Continues**: The main workflow receives the results and continues with subsequent work.
### Key Features
- **Context Isolation**: Sub-agents have independent context that does not affect the main workflow's conversation history.
- **One-Way Communication**: Main workflow → Send task → Sub-agent → Return results → Main workflow
- **Specialized Division of Labor**: Each sub-agent focuses on a specific domain, improving processing efficiency.
- **Resource Conservation**: Prevents the main workflow context from being occupied by extensive exploration or planning information.
## Project Markdown Sub-Agents
In addition to the configuration UI and `~/.snow/sub-agents.json`, you can define sub-agents as Markdown files committed with the repo. They become discoverable and schedulable without editing `sub-agents.json`.
### Scan paths
- Project: `.snow/agents/**/*.md`
- Global (optional): `~/.snow/agents/**/*.md`
### Merge priority (higher wins)
```
project .snow/agents > global ~/.snow/agents > ~/.snow/sub-agents.json > builtin
```
### Markdown format
```markdown
---
id: trellis-implement
name: trellis-implement
description: Implement features from Trellis task
tools:
- filesystem-read
- filesystem-edit
- terminal-execute
- ace-search
---
You implement the active Trellis task using project specs.
```
Fields:
- `id`: optional; defaults to filename stem
- `name`: optional; defaults to `id`
- `description`: description
- `tools`: tool list (array or single string)
- `role`: optional frontmatter; body is used as role when omitted
Notes:
- Invalid markdown is skipped with a warning (no crash)
- `ROLE-*.md` under project root / `~/.snow` does **not** register a new `agentId` (role overlay only)
- Once discovered, agents are schedulable via `#agentId` / the picker
- Unknown tools in frontmatter are **warned** (declaration is not silently dropped; runtime still filters by allowlist)
## Sub-Agent Configuration Management
### Adding a Sub-Agent
You can create custom sub-agents through the configuration interface to meet specific business needs.
#### Operation Steps
1. **Enter Configuration Interface**
- Select "Sub-Agent Configuration" in the main menu
- Select "Add Sub-Agent"
2. **Basic Information Configuration**
Fill in the following fields as prompted by the interface:
- **Agent Name** (Required)
- Enter the name of the sub-agent
- Suggest using descriptive names like "Code Review Agent", "Testing Agent", etc.
- Press Enter to confirm and move to the next field
- **Description** (Required)
- Enter the function description of the sub-agent
- Describe in detail the purpose and application scenarios of this sub-agent
- **Role Definition** (Required)
- Define the role and behavioral norms of the sub-agent
- This is the sub-agent's own role instructions. At runtime it is appended to the prompt sent to the sub-agent.
- Example:
```
You are a professional code review assistant.
Your responsibilities are:
1. Check code quality and compliance
2. Discover potential bugs and security issues
3. Provide improvement suggestions and best practices
```
- Press Enter to confirm and move to the next field
3. **Advanced Configuration Options**
**Important Reminder**: Sub-agents no longer select **System Prompt** or **Custom Request Headers** separately. Both are taken from the selected **Configuration Profile** (Profile), because the profile already contains these settings.
- **Configuration Profile** (Optional)
- Specify a dedicated API configuration profile for the sub-agent
- Purpose: Allow the sub-agent to use different API endpoints, different models, and the system prompt + request headers defined in that profile
- Operation:
- Use ↑/↓ arrow keys to browse available profiles
- Press Space to select/deselect
- Use ←/→ arrow keys to quickly switch between configuration options
- Marker description: `❯` indicates cursor position, `[✓]` indicates selected
- Application scenarios:
- Let the sub-agent use more powerful models
- Let the sub-agent use different API providers
- Allocate different billing accounts for different sub-agents
- Bind different system prompts/request headers via different profiles
- Set different request priorities
4. **Tool Permission Configuration**
Select the tools that the sub-agent can use:
- Use ↑/↓ arrow keys to navigate between tool categories
- Use ←/→ arrow keys to switch between tool categories
- Press Space to select/deselect tools
- Tool categories include:
- Filesystem tools (filesystem-read, filesystem-create, filesystem-edit, etc.)
- ACE code search tool (`ace-search` with action: find_definition / find_references / semantic_search / file_outline / text_search)
- Codebase tools (codebase-search)
- Terminal tools (terminal-execute)
- TODO management tools
- Web search tools
- MCP tools (if configured)
**Suggestion**: Only grant the minimum set of permissions needed for the sub-agent to complete its tasks.
5. **Save Configuration**
- Press Ctrl+S to save the configuration
- The system will automatically validate the configuration's completeness
- Return to the main menu after successful save
#### Configuration Inheritance Explanation
When creating a new sub-agent, if no **Configuration Profile** (Profile) is specified, the sub-agent will follow the currently active profile of the main workflow. This means:
- The sub-agent will use the same API configuration and model as the main workflow
- The sub-agent will use the system prompt and request headers defined in that profile (and then apply its own role definition on top)
### Editing a Sub-Agent
You can edit existing sub-agent configurations, including the three built-in system agents.
#### Operation Steps
1. **Enter Edit Interface**
- Select "Sub-Agent Configuration" in the main menu
- Select the sub-agent to edit
2. **Edit Restrictions Explanation**
**System Built-in Agents** (Explore Agent, Plan Agent, General Purpose Agent):
- Name, description, and role definition are read-only and cannot be modified
- The interface will display "(System Built-in - Not Modifiable)" prompt
- Can modify: Tool permissions, configuration profile
**Custom Agents**:
- All fields can be modified
3. **Modify Configuration**
Navigation and operation methods are the same as adding an agent:
- Use ↑/↓ arrow keys to navigate between fields
- Use ←/→ arrow keys to switch between configuration options
- Press Space to select/deselect
- Directly input modification content in text fields
4. **Save Changes**
- Press Ctrl+S to save changes
- The system will validate the modified configuration
- Return to the main menu after successful save
#### Edit Configuration Inheritance Explanation
When editing an existing sub-agent:
- If the sub-agent already has custom configurations, the interface will display and load these configurations
- If the sub-agent does not have custom configurations:
- When editing a copy of a system built-in agent, it will automatically inherit the current main workflow's configuration as default values
- When editing an existing custom agent, configurations will not be automatically filled (remain unselected)
### Configuration Best Practices
1. **Clear Role Definition**
- Clearly describe the scope of responsibilities of the sub-agent
- Provide specific work steps or checklists
- Specify output format and quality standards
2. **Reasonable Tool Permission Allocation**
- Follow the principle of least privilege
- Read-only tasks do not grant write tools
- Exploration tasks do not grant execution tools
3. **Good Use of Configuration Isolation**
- Configure different sub-agents for different types of tasks
- Use different configuration profiles (Profile) to control cost and model selection
- Use different configuration profiles (Profile) to bind different system prompts and request headers
4. **Test Configuration Effects**
- Perform small-scale testing after creation
- Observe whether the sub-agent's behavior meets expectations
- Adjust role definition and tool permissions based on actual effects
### Keyboard Shortcuts
- **↑/↓**: Navigate between options or scroll lists
- **←/→**: Switch between fields (configuration options, tool categories)
- **Space**: Select/deselect (tools, configuration options)
- **Enter**: Confirm input and move to next field
- **Ctrl+S**: Save configuration
- **Ctrl+C** or **ESC**: Cancel and return
## Quick Sub-Agent Selection
In addition to using the `/agent-` command to open the sub-agent selection panel, you can also use the `#` symbol in the input box to quickly trigger the sub-agent picker:
### How to Use
1. **Trigger the picker**: Type `#` in the input box to automatically pop up the sub-agent selection panel
2. **Search and filter**: Type `#keyword` to filter sub-agents by ID, name, or description
3. **Select sub-agent**: Use arrow keys to select a sub-agent, press Enter to confirm. The system will automatically insert `#subAgentID ` into the input box
### Examples
```
#explore → Select explore sub-agent
#plan → Select plan sub-agent
#general → Select general sub-agent
```
### Notes
- The `#` symbol must not be preceded by `@` (e.g., `@#` or `@@#` will not trigger the sub-agent picker, but the file picker)
- If you type a space or newline after `#`, the picker will automatically close
- Press ESC to close the sub-agent selection panel
## Sending Messages to Running Sub-Agents
When a sub-agent is running, you can use the `>>` command to send messages to specific running sub-agents, enabling real-time interaction with the main workflow.
### How to Use
1. **Trigger the picker**: Type `>>` at the beginning of the input box (leading whitespace is allowed) to pop up the list of currently running sub-agents
2. **Select sub-agents**:
- Use `↑/↓` arrow keys to navigate
- Use `Space` to select/deselect sub-agents (supports multi-select)
- If no sub-agent is explicitly selected, the currently highlighted item will be auto-selected when you press Enter
3. **Send message**: Press `Enter` to confirm selection, then type your message and send
### Visual Tag Explanation
After selecting sub-agents, a visual tag will appear in the input box:
```
[»Explore Agent#abcd: Investigating project architecture...] Please continue analyzing
```
- `»` symbol (U+00BB): Used to avoid re-triggering the picker
- `Explore Agent`: Sub-agent name
- `#abcd`: Last 4 characters of instance ID (ensures uniqueness)
- `Investigating project architecture...`: Short summary of the task prompt
### Message Routing Mechanism
The actual sent message contains a special marker:
```
# SubAgentTarget:instanceId:agentName
Your message content
```
The system routes the message to the corresponding sub-agent based on these markers.
### Use Cases
- **Follow-up details**: Ask about a specific function implementation while the sub-agent is exploring code
- **Correct direction**: Send correction information when you notice the sub-agent misunderstood
- **Add context**: Inform the working sub-agent of important information you just remembered
- **Batch instructions**: Send the same instruction to multiple running sub-agents simultaneously
### Notes
- `>>` must appear at the **beginning** of the input box (leading whitespace is ignored) to trigger
- If a sub-agent has completed or exited, it will not appear in the selection list
- Press `ESC` to close the selection panel
- The selection panel will auto-close when you delete `>>`
### Common Questions
**Q: Can sub-agents use the context of the main workflow?**
A: No. Sub-agents are completely isolated from the main workflow's context. The main workflow needs to provide all necessary context information in the prompt when calling a sub-agent.
**Q: How can I make a sub-agent use a more powerful model?**
A: In the configuration profile (Profile) option, select a profile that uses a more powerful model for the sub-agent.
**Q: What is the difference between the system prompt in a profile and a sub-agent's role definition?**
A: The role definition is the sub-agent's own behavioral specification (entered/edited in the sub-agent config). The system prompt in a configuration profile (Profile) is a profile-level constraint that affects both the main workflow and any sub-agent that uses that profile. At runtime, the sub-agent uses the profile's system prompt as the base, then applies the sub-agent's role definition on top.
**Q: Will editing a system built-in agent affect the original configuration?**
A: No. The core definitions (name, description, role) of system built-in agents are read-only. You can only modify their tool permissions and configuration profile (Profile), and these modifications only affect your usage without changing the system presets.
**Q: How do I delete a custom sub-agent?**
A: Select the sub-agent to delete in the sub-agent list, press the Delete key or select the delete option. System built-in agents cannot be deleted.