dsh-baton
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DSH_BIN | No | Harness CLI for headless mode | the dsh inside the macOS app, else PATH |
| DSH_HOME | No | Harness data folder (headless session reads) | ~/.dsh |
| DSH_BATON_HOME | No | Socket and headless run records | ~/.dsh-baton |
| DSH_BATON_SOCKET | No | Plugin socket path (must match on both sides); on Windows mapped to a per-user named pipe | $DSH_BATON_HOME/host.sock |
| DSH_BATON_WAIT_S | No | How long one dsh_wait call waits; set it only if you raised the client's tool timeout, and keep it below that | 270 for Codex, else 50 |
| DSH_BATON_ACCOUNT | No | 0 uses the API-key route in headless mode | 1 |
| DSH_BATON_BACKEND | No | auto, host or headless | auto |
| DSH_BATON_PATCHES | No | Extra headless --patch overlays, :-separated | empty |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| dsh_list_workspacesA | List the workspaces (project folders) shown in the DeepSeek Harness sidebar. Needs the dsh-baton-host plugin. |
| dsh_create_workspaceA | Register a folder as a workspace in the DeepSeek Harness sidebar (creates the folder unless create_dir is false). Idempotent: an already registered folder returns its existing workspace. Needs the dsh-baton-host plugin. |
| dsh_list_sessionsA | List saved DeepSeek Harness sessions, newest first, with title, workspace folder (cwd) and whether a run is active. Use it to find the session_id to continue. Sessions not in dsh_list_sessions are archived or gone: do not look for them on disk. |
| dsh_read_sessionB | Read the recent visible conversation (user prompts and assistant replies, with tool names) of one session. |
| dsh_sendA | Send a message to DeepSeek Harness. With session_id it continues that existing session (same context, no new session); with cwd or workspace_id it starts a new session there (a cwd that is not a workspace yet is registered in the sidebar first). Returns immediately with a run_id; the turn runs in the background. If the session is already working, mode followup (default) queues the message after the current turn and steer adds it to the running turn; each message gets its own run_id. The message is delivered verbatim as a user message, with no prefix or label added: write it in the language the user works in, self-contained (Harness does not see this conversation), and say who is asking only if it matters. Then wait for the reply with dsh_wait (or the wait_command it returns, where offered). |
| dsh_statusA | Progress of a run: state (queued/running/waiting/completed/failed/cancelled, or interrupted when a Harness restart cut it short), session_id, recent events (text, tool calls), final reply, waiting_on when the turn is over but sub-agents or background jobs are still working, and human_interjections when someone typed in the Harness UI during the run (its result then reflects that input too). A one-off look, never a way to wait: to wait for the reply use dsh_wait, and if dsh_wait timed out, call dsh_wait again. |
| dsh_waitA | Wait for a run to finish and return its final status and reply. Prefer the background wait_command from dsh_send when your client can run background shell commands and wake you when they exit: it costs no turns while waiting. Each call waits up to 50 s (set by the server to stay under this client's tool timeout); if the run is still going it returns timed_out: true with just the state: then call dsh_wait again with the same run_id, without summarising progress. Sends progress notifications while waiting when the client asks for them. |
| dsh_rename_sessionC | Rename a DeepSeek Harness session (shown in the sidebar). |
| dsh_rename_workspaceA | Rename a DeepSeek Harness workspace (sidebar title only; the folder is not moved). Identify it by workspace_id or path. |
| dsh_session_activityA | What a session is doing right now: its running turn, sub-agents (any depth), background jobs and reminders, plus runs handed over through dsh-baton. Check this before sending to a session that might be busy. |
| dsh_cancelA | Stop everything a session is doing (running turn, sub-agents, background jobs), by run_id or session_id. Messages still waiting in the queue are not removed. |
| dsh_list_runsB | List recent runs handed over through dsh-baton, newest first. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 12 tools
Most tools target clearly distinct resources and actions (list/create/rename workspace vs session, send, cancel). The trio dsh_status, dsh_wait, and dsh_session_activity all report run state and could be confused, but the descriptions explicitly carve out roles (one-off look, blocking wait, pre-send busy check).
Every tool uses the uniform dsh_ prefix with snake_case and a predictable verb_noun shape (list_workspaces, create_workspace, rename_session, list_runs). The few bare verbs (send, status, wait, cancel) still fit the same convention.
12 tools is well within the sweet spot for a session/workspace orchestration server. Each tool maps to a distinct operation (list/read/create/rename across sessions and workspaces, plus run lifecycle and control) with no obvious redundancy.
The surface covers the core lifecycle: register/rename/list workspaces, list/read/rename sessions, send/status/wait/cancel runs, and run handover listing. The notable gap is deletion/archival for workspaces and sessions, and there is no direct way to fetch a handed-over run's details beyond dsh_status.