File tools
- read
- write
- edit
- ls
- find
- grep
Read the contents of a file and return it as text.
Paths are resolved relative to the workspace when configured. Path traversal outside the workspace is blocked.
Shell
- bash
Execute a shell command and return its output.
Limits:
- Timeout: 30 seconds — commands that exceed this are killed
- Output size: 100 KB — output beyond this limit is truncated
bash sets its working directory (cwd) to the workspace path. Commands still have access to the full system; the workspace only sets the starting directory.Web
- web_search
- web_fetch
Search the internet for information and return results.
Not affected by workspace sandboxing.
Skills
Loading a skill is automatic — whenever skills are available, the agent can pull a skill’s full instructions on demand, so there’s no tool to enable for that. The tools below are the ones you opt into to let an agent manage its own skills. See Skills for the full picture.- create_skill
- install_skill
- remove_skill
Create a reusable skill that persists across conversations.
The agent creates skills when the user asks it to remember a process, save a workflow, or build reusable instructions. Skills are persisted to the managed skills directory and available in future conversations.
Memory
Reading and writing memory is automatic — whenever memory is on for an agent, it gets the three tools below without any per-agent tool selection, the same wayload_skill is always available. See Memory for the full picture.
- save_memory
- recall_memory
- forget_memory
Save or update one memory that should persist across conversations.
Never available to sub-agents or swarm workers — they inherit the parent agent’s memory read-only.
Integrations
- mcp
- connector management
Connect to external services and tools via the Model Context Protocol (MCP).MCP lets agents access third-party tools and data sources through a standardized interface. When enabled, the agent can discover and call tools provided by MCP servers.Not affected by workspace sandboxing.
Projects
Task-tracking tools for the Projects board in Desktop. Every agent has these automatically — they are not part of the per-agent tool selection.
Every read, create, update, or comment automatically links the agent’s current chat session to the task, so the task page shows which conversations touched it. When an agent sets a task’s sub-status to
waiting_on_human, the task appears in your Inbox under Waiting on you.
Not affected by workspace sandboxing — task data lives in the HQ’s local database.
Sub-agents
An agent can hand a self-contained task to a sub-agent: a child agent with its own context, its own tool set, and its own transcript. The child never sees the parent’s conversation — it gets only the prompt it is given — and it answers with one final report the parent reads and relays to you. Sub-agents are on by default for every agent. Theagent and send_message tools appear automatically; they are not part of the per-agent tool selection. See Configuration → Sub-agents to turn them off, cap them, or change how eagerly an agent delegates.
- agent
- send_message
- ask_orchestrator
Launch a sub-agent to handle one task.
Fails with an error result when a cap is reached, when the type is unknown (the message lists the valid types), when the requested model isn’t allowed, when the definition would leave the agent with no tools at all, or when
isolation: worktree is asked for in a workspace that isn’t a git repository.agent waits: the parent blocks until the child finishes and the child’s report comes back as the tool result. With run_in_background: true the call returns straight away with Agent <name> launched in the background. You will be notified when it completes., the child keeps running after the parent’s turn ends, and its completion arrives later as a notification (below).
Several at once. An agent can call agent more than once in a single turn; those children run concurrently. Cancelling the turn cancels its foreground children and leaves background ones running.
Built-in agent types.
Explore and Plan are one-shot: they are read-only and cannot be given a new task, so send_message refuses one. Answering a question is not a new task — send_message, the reply box on the row and the legacy send_to_worker all get through to a paused one-shot. Your own types and plugin types are never one-shot; the one exception is a definition that deliberately shadows Explore or Plan by name, which replaces the built-in in that workspace and is resumable like any other type.
Your own agent types. Drop a markdown file with Claude Code frontmatter into .dash/agents/ (or .claude/agents/) in the agent’s workspace and it becomes a launchable type — the frontmatter sets its name, description, tool list, model, and preloaded skills, and the body is its system prompt. Plugins ship types too. See Configuration → Sub-agent types for the file format, where the files can live, and which one wins. Whatever a definition asks for, a sub-agent can never hold a tool or an MCP server its parent doesn’t have.
Nesting. A sub-agent can launch sub-agents of its own, down to the configured depth (subagents.maxDepth, default 3). In chat, one level of nesting is shown: expanding a child shows its transcript, and a grandchild’s row appears there but doesn’t open.
Notifications. When a background agent finishes — or a resumed one, or one you sent a message to — its parent is told in a new turn that starts on its own. In chat that arrives as a compact notification row followed by the agent’s response to it. Nothing is lost while the parent is busy: notifications queue and are delivered together when its current turn ends.
What you see
Each sub-agent draws a collapsed row where it was launched: status, type, the description it was given, and how many tools it has used with elapsed time. Click or tap the row to expand it and watch the child’s own transcript live, with a box at the bottom to type into that child directly. When several start together they are grouped under one summary line. There’s also a list of everything running in the conversation:- Web — a Tasks button in the top bar (with a live count) opens a tasks panel; each row has Stop and Resume.
- iOS — a Tasks toolbar button opens a sheet, plus a strip above the composer while anything is live.
- Desktop — the people icon in the chat header opens the Sub-agents panel, with Stop, Resume, and the child’s transcript in place. The icon appears once the conversation has sub-agents (or when the agent’s Swarm card is ticked).
Legacy swarm tools
spawn_worker, wait_workers, send_to_worker, and check_workers are the earlier swarm tools. They still work, and they appear alongside agent and send_message whenever sub-agents are enabled — but they are now thin wrappers over the same machinery, kept so prompts written against them keep working. Write new agents against agent and send_message.
What that means in practice:
spawn_workeris anagentcall withsubagent_type: general-purposeandrun_in_background: true. Therolebecomes the child’s description (and its name, when the role is a legal name).send_to_workerdoes whatsend_messagedoes, which means it now resumes a worker that has already finished instead of refusing. The two differ only in shape:send_to_workerreports a refusal as a not-ok result, wheresend_messageraises an error the agent sees as a failed tool call.wait_workersandcheck_workersread the same children the sub-agent tools do.- Workers and sub-agents share one set of caps — there is one coordinator behind both.
- A worker’s read-only default is unchanged: with no
toolsargument it getsread,grep,find, andls, intersected with what the parent holds. - Two consequences worth knowing: an agent whose
subagents.allowedTypesexcludesgeneral-purposenow refusesspawn_worker, and a worker can launch sub-agents of its own.
- spawn_worker
- wait_workers
- send_to_worker
- check_workers
Spawn a parallel worker with a role and a self-contained brief.
Fails with an error result when a cap is reached (too many at once, too many per turn, or the global ceiling), when the model isn’t allowed, or when a requested tool isn’t one the orchestrator has.
ask_orchestrator like any other child, and it draws the same row in chat. Watch and steer one from the tasks panel, the tasks sheet, or Desktop’s Sub-agents panel — see Architecture → Sub-agents.
Workspace sandboxing
Each agent’s working directory sets where its tools operate. It defaults to~/.dash/workspaces/<agent-id> and you can set a custom path when you deploy or edit the agent. The directory is created automatically if it doesn’t exist.
How sandboxing works per tool:
If no workspace is configured, file tools operate without path restrictions and
bash runs in the default directory.