Quick Answer
A DeepSeek Harness (dsh) agent doesn't just chat — it calls a set of real tools to read and write files, run commands, spawn sub-agents, and search the web. These tools come from plugins; the most common in the standard preset:
| Tool | Purpose | Typical use |
|---|---|---|
bash |
Run shell commands | Read files, run tests, install deps |
| File read/write | Read / write / edit files | Edit code, write reports |
subagent |
Spawn sub-agents | Parallelize sub-tasks |
web_search / web_fetch |
Search / fetch pages | Look up docs, get fresh info |
ask_user_question |
Pause and ask the user | Confirm critical decisions |
lsp |
Language-server queries | Types, navigation, completion |
Understand these and you understand what separates dsh from a chatbot: every tool call is a real read, write, or execution.
bash: The Agent's Hands
bash lets the model run shell commands — the foundation for "run tests, install deps, read a repo":
List the current directory, then run the test suite and tell me the result.
The agent runs ls, reads files, executes the test command, reads stdout, and decides the next step. Note: bash means the agent has your current user's permissions — don't authorize dangerous commands in directories you're unsure about.
File Read/Write: Where Code Gets Edited
File tools let the agent read and write files in the working directory. Combined with bash, this is the core of the "edit code" loop: read → understand → edit → run tests → fix from results.
The standard preset usually also includes glob/grep file search, so the agent can locate "which file defines this function" instead of blindly reading the whole repo.
subagent: Parallelize Sub-Tasks
subagent lets the agent spawn sub-agents for sub-tasks and collect results. A typical use:
Main task: fix three unrelated bugs.
The agent can dispatch three sub-agents, one per bug, then merge the results. This cuts wall-clock time on long tasks — especially when the bottleneck is "many independent small jobs."
web_search / web_fetch: Network Access
web_search and web_fetch let the agent search and fetch pages — for "find the latest docs," "find the issue matching this error," or "get the current API signature," where training data isn't enough.
If you don't need network access (e.g. a purely local repo), just don't mount these tools — a more controllable, cheaper agent. That's dsh's trimmable capability surface (see Plugin Architecture).
ask_user_question: Confirmation at Critical Points
ask_user_question pauses the agent at a key node and waits for your answer. Use it for "this delete is irreversible — confirm?" so the agent doesn't auto-run its way into a mistake.
lsp: Language-Level Intelligence
The lsp tool exposes language-server capabilities — type queries, go-to-definition, completion. It needs a registered provider (e.g. dsh-lsp-stdio); without one it returns a structured error rather than crashing.
Run These Tools on the Free Tier
Tools are free; what costs money is the model call behind each tool round-trip. With TeamoRouter wired in, the free tier covers a full day:
export DEEPSEEK_API_KEY="sk-teamo-your-key"
export DEEPSEEK_BASE_URL="https://api.teamorouter.com/v1"
export DEEPSEEK_DEFAULT_MODEL="deepseek-v4-pro-free"
deepseek-v4-pro-free gives 200 requests/day, each tool round-trip counting as one — light work on deepseek-v4-flash-free (also 200/day), hard work on Pro (see 200 Requests a Day).
FAQ
Are all these tools available by default?
It depends on the loaded agent preset. The standard preset includes bash + file read/write + glob/grep; web_search, subagent, and lsp depend on the preset or config, which you can trim or extend.
Will the agent run dangerous commands on its own?
bash gives it permission in principle. Be safe: run in a restricted working directory, use ask_user_question before critical actions, and don't expose dsh's port to the internet.
Do tool calls consume the free quota?
Yes. Each tool round-trip is one request against the 200/day. Deeper tool loops burn faster — that's why hard work deserves Pro and light work stays on Flash.
How do I add a custom tool?
Write a Cordis plugin registered on ctx.tools, or mount it in a preset. This is the heart of dsh's extensibility (see Plugin Architecture).
Can the file tools write any path?
They're bounded by the working directory and permissions. By default they act inside the agent's working directory; the exact boundary depends on the loaded fs provider.
To run this tool set in practice, get a key at TeamoRouter, configure dsh, and give the agent a "read the repo + run tests + report" task.