Subagents
Subagents are focused workers that the Lead Agent delegates subtasks to. They run with isolated context, keeping the main conversation clean while handling parallel or specialized work.
When a task is too broad for a single reasoning thread, or when parts of it can be done in parallel, the Lead Agent delegates work to subagents. A subagent is a self-contained agent invocation that receives a specific task, executes it, and returns the result.
Why subagents matter
Subagents solve two key problems in long-horizon workflows:
- Context isolation: a subagent only sees the information it needs for its piece of the task, not the entire parent conversation. This keeps each agent’s working context focused and tractable.
- Parallelism: multiple subagents can run concurrently, allowing independent parts of a task (e.g., researching multiple topics simultaneously) to be processed in parallel.
Built-in subagents
DeerFlow ships with two built-in subagents:
general-purpose
A general-purpose reasoning and execution agent. Suitable for delegating complex subtasks that require multi-step reasoning, web search, file operations, and artifact production.
- Default timeout: 900 seconds (15 minutes)
- Default max turns: 160
bash
A subagent specialized for command-line task execution inside the sandbox. Suitable for scripting, data processing, file transformation, and environment setup tasks.
- Default timeout: 900 seconds (15 minutes)
- Default max turns: 80
- Availability: only exposed when the sandbox’s
bashtool is available (eitherallow_host_bash: trueor a container sandbox is configured)
Delegation flow
The Lead Agent delegates work to a subagent using the built-in task tool:
task(
agent="general-purpose",
task="Research the top 5 competitors of Acme Corp and summarize their pricing",
context="Focus on B2B SaaS pricing models"
)The runtime then:
- Looks up the subagent configuration from the registry, applying any
config.yamloverrides. - Creates a new agent invocation with the subagent’s own prompt and tools.
- Runs the subagent to completion (or until timeout / max turns).
- Returns the subagent’s final output to the Lead Agent as the tool result.
Configuration
Subagent timeouts and max turns are controlled through the subagents: section in config.yaml:
subagents:
# Default timeout in seconds for all subagents (default: 900 = 15 minutes)
timeout_seconds: 900
# Optional: override max turns for all subagents
# max_turns: 120
# Optional: per-agent overrides
agents:
general-purpose:
timeout_seconds: 1800 # 30 minutes for complex tasks
max_turns: 160
bash:
timeout_seconds: 300 # 5 minutes for quick commands
max_turns: 80Per-agent overrides take priority over the global timeout_seconds and max_turns settings.
Concurrency limits
The SubagentLimitMiddleware controls how many subagents the Lead Agent can invoke in parallel in a single turn. This is controlled through the per-request configuration:
subagent_enabled: whether subagent delegation is active for this sessionmax_concurrent_subagents: maximum parallel task calls in one turn (default: 3)
If the agent tries to call more subagents than the limit allows, the middleware trims the excess calls.
ACP agents (external agents)
In addition to the built-in subagents, DeerFlow supports delegating to external agents through the Agent Connect Protocol (ACP). ACP allows DeerFlow to invoke agents running as separate processes (including third-party CLI tools wrapped with an ACP adapter).
Configure ACP agents in config.yaml:
acp_agents:
claude_code:
command: npx
args: ["-y", "@zed-industries/claude-agent-acp"]
description: Claude Code for implementation, refactoring, and debugging
model: null
# auto_approve_permissions: false
# env:
# ANTHROPIC_API_KEY: $ANTHROPIC_API_KEY
codex:
command: npx
args: ["-y", "@zed-industries/codex-acp"]
description: Codex CLI for repository tasks and code generation
model: nullThe Lead Agent invokes ACP agents through the invoke_acp_agent built-in tool.
ACP agents run as child processes managed by DeerFlow. They communicate over
the ACP wire protocol. The standard CLI tools (like the plain claude or
codex commands) are not ACP-compatible by default — use the adapter packages
listed above or a compatible ACP wrapper.
Custom agents as subagents
Custom agents created through the DeerFlow App UI can also be invoked as subagents using the task tool. When you specify agent="my-custom-agent", the runtime loads that agent’s configuration (skills, tool groups, model) and runs it as a subagent for the delegated task.