# 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.