Skip to main content
PathDocs

Built-in Tools

Tools are the model's entry point for performing operations. DSH ships 21 @deepseek-ai/dsh-tool-* packages out of the box, grouped by capability domain below. They register through ctx.tools and automatically appear in the model's tool list.

Want to add a tool for the model? See writing a tool. This page only covers the built-in, out-of-the-box capabilities.

At a glance

Capability domainTool packagesIn one sentence
Terminaltool-bash / tool-bash-persistent / tool-terminal / tool-pwshrun commands, long-lived sessions
Filestool-fs / tool-fs-search / tool-str-replace-editorread/write, search, precise editing
Networktool-webweb_search / web_fetch
Codetool-lspjump-to-definition, find references, hover
Delegationtool-subagent / tool-subagent-control / tool-subagent-reporthand work to subagents
Schedulingscheduletimed reminders
Goalstool-goalsession-level goals
Jobstool-jobsbackground job output/list/terminate
Todostool-todotodo_write
Skillstool-skillload skills
Session querytool-session-queryhistory search/traces
Questionstool-ask-userask the user
Introspectiontool-cordisquery Host/Client contracts and manage versioned dynamic plugins
Orchestrationtool-workflow / tool-ralphJS orchestration, Ralph iteration
Model-carryingdecided by each seampresentation and scheduling

Terminal domain

ToolKey usageDescription
bashrun shell commands, optional background jobs, sandbox escalationgeneral command execution
bash (tool-bash-persistent)long-lived shell sessions (same name as tool-bash)owner-isolated persistent Bash (PTY-based)
terminalsix persistent terminal toolsinteractive terminals, owner-isolated, connected to background jobs
pwshexecute PowerShellthe shell layer for Windows scenarios
Terminal tools all pass through ctx.sandbox.confine (see sandbox and security). The execution environment is uniformly provided by shell-env (ctx.shellEnv): every foreground/background shell call receives a freshly collected managed DSH_* environment snapshot, with built-in DSH_HOME, DSH_SHELL=1, DSH_SESSION_ID (agent calls also carry the DSH_SESSION_JSONL location hint); other plugins can register effect-scoped contributors to append facts; duplicate attribution or undeclared runtime keys fail loud. shell-env is mounted by default, and process.env is never rewritten.

File domain

ToolKey usageDescription
fsread / write / editgoes through the ctx.fs capability seam
fs_searchglob / grepbundled ripgrep, fast discovery
str_replace_editorview/create/literal replace/insert linesprecise editing, small diffs, easy to review

Delegation and parallelism

ToolKey usageDescription
subagentdispatch one-shot subagentsgoes through the ctx.subagents seam
subagent_controlsend_message / interrupt_agent / list_agentsglobal control of continuable sub-sessions
report (tool-subagent-report)the subagent reports backavailable within subagent scope

The full delegation model is in Subagents and parallelism.

Goals / jobs / todos

ToolKey usageDescription
goalsame-session long-term goalsexecution-time permission checks
jobsjob_output / job_list / job_killbackground job registry
todotodo_writewrites into the event-sourced session log

See Goals, Jobs, and Todos.

Search / query / questions

ToolKey usageDescription
session_search (et al.)history session search / traces / event readsqueries DSH's own sessions, opt-in (not mounted by default)
ask_userask the user a questiongoes through ctx.userQuestions

dsh-tool-session-query registers session_search/session_trace/session_event_read and so on to query DSH's own history sessions; the package is opt-in and not mounted by default.

Network

What the model sees is the web tool (web_search / web_fetch), both going through the same ctx.web capability seam. The actual retrieval/forward-fetch is done by the provider backends registered into ctx.web; tool-web only handles presentation (tool name, schema, result format, HTML→markdown):

BackendTypeDescriptionMount
web-search-deepseeksearch providerAnthropic-compatible Messages API + native web_search tool, parses structured result blocks, reuses DEEPSEEK_API_KEYmounted by default (searchProvider: deepseek-official)
web-fetch-httpfetch provideranonymous public HTTP(S), same-origin redirects, byte/char limits, binary rejection; SSRF protection deferredopt-in (base default fetch: false, no fetch provider mounted)
web-search-exasearch providerExa POST /search, auto/keyword/neural; no generated answer, content omittedopt-in (requires EXA_API_KEY)
web-search-perplexitysearch providerOpenAI-compatible chat/completions, generated answer content + citations sources[]opt-in (requires PERPLEXITY_API_KEY)

Providers register capabilities, not tools; tool-web's registration follows the product switch (fetch off by default), not backend availability — when a provider is missing/unavailable/ambiguous, the tool schema stays and a structured WebError is thrown at execution. Provider selection resolves within the seam at execution time (an explicit searchProvider/fetchProvider or automatic selection of the single available provider).

Code

ToolKey usageDescription
lspgoToDefinition / findReferences / goToImplementation / hoverread-only, based on ctx.lsp

Introspection and orchestration

ToolKey usageDescription
cordisinspect_list/query/self + define/run/stop/undefineversioned dynamic Cordis toolset
workflowrun JS orchestration scriptsgoes through ctx.workflowEngine
ralphRalph iteration loop with fresh Agentscombines workflow + subagent

See Workflow and Ralph.

Common combinations (how to chain them to get work done)

You wantCombination
search + read a file + change codesession_search to find history → fs/str_replace_editor to change
terminal running + background jobsbash resident + jobs to collect background output
split a large task for parallelsubagent to dispatch + subagent_control to collect
scheduled progressschedule to set reminders + goal/todo to record progress
stuck, ask a humanask_user to confirm before continuing

Tools are atomic capabilities; fixing common sequences into reusable form is what skills or workflows are for.

Verify which tools are currently installed

dsh web --dump-config | grep -E "tool-"
# each tool-* plugin and whether it's enabled is visible in the composition tree

Tool configurability

Every tool package can override config at the profile layer via a patch (e.g. whether it's off by default, timeouts, workspace authorization). A tool's presentation (native/code/both) is decided by ctx.tools.presentAs, not something a tool cares about itself.