dsh-relay
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DSH_RELAY_HOST_URL | No | Loopback Harness Host URL. | http://127.0.0.1:3080/ |
| DSH_RELAY_MAX_IMAGES | No | Maximum images per message. | 20 |
| DSH_RELAY_STATE_FILE | No | Persistent Relay state location. | %LOCALAPPDATA%/dsh-relay/state.json |
| DSH_RELAY_RUN_STALL_MS | No | No-progress interval before an active run is marked needs_attention; later progress resumes it automatically. | 300000 |
| DSH_RELAY_RPC_TIMEOUT_MS | No | Host RPC timeout. | 30000 |
| DSH_RELAY_MAX_IMAGE_BYTES | No | Maximum decoded bytes per image. | 5242880 |
| DSH_RELAY_MAX_ISTORY_PAGES | No | Maximmum durable-hitory pages read during one reconciliation. | 100 |
| DSH_RELAY_POLL_INTERVAL_MS | No | Active-run polling interval. | 750 |
| DSH_RELAY_CLIENT_PRINCIPAL_ID | No | Stable local caller identity used with idempotency keys. | local-user |
| DSH_RELAY_MAX_TASK_CHARACTERS | No | Maximum text characters in one prompt. | 100000 |
| DSH_RELAY_PERSIST_PROMPT_TEXT | No | Persist prompt summaries when explicitly acceptable. | false |
| DSH_RELAY_PERMISSSION_LEASE_MS | No | Maximmum lifetime recorded for a reused-sesssion permission lease. | 86400000 |
| DSH_RELAY_ALLOWED_WORKSPACE_ROOTS | No | OS-delimited list of additional authorized absolute roots. Without it, Relay accepts only workspaces already registered by Harness. | Harness workspace registry |
| DSH_RELAY_MAX_MESSAGE_IMAGE_BYTES | No | Maximum decoded image bytes per message. | 104857600 |
| DSH_RELAY_MAX_ASSISTANT_TEXT_BYTES | No | Maximum returned assistant-text tail. | 256000 |
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 | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| doctorA | Check the external Harness Host and relay policy without reading credentials. |
| setup_planB | Generate a validated, no-write MCP configuration patch for Codex, Claude Code, Cursor, or OpenCode V2. |
| setup_doctorA | Return a machine-readable setup report from explicitly supplied probes without reading or modifying client configuration. |
| start_serviceA | Attach an authorized workspace to the existing Harness Host. This never starts or modifies Harness. |
| open_serviceB | Open the stable loopback Harness page for an attached service. |
| list_servicesB | List Host attachments restored from durable relay state. |
| list_workspacesA | List the native Harness workspace registry used by Relay routing. |
| list_workspace_sessionsA | List reusable native sessions accounted to one registered Harness workspace without reading conversation content. |
| stop_serviceA | Forget one relay attachment without stopping or changing the external Harness Host. |
| list_capabilitiesA | List native Provider/model/reasoning, agent preset, and permission preset options without guessing names. |
| start_runA | Create or reuse a native Harness session, select provider/model/reasoning, agent preset, and native permission preset, then submit the first task and return a stable session link. Task parameters are path-reference-only: provide the authorized workspace, reviewTargets, contextReadScope, excludedPaths, writeScope, and acceptance criteria. reviewTargets identify what to assess; they are not a read whitelist. contextReadScope declares where Harness may search and read supporting implementation, tests, configuration, and architecture material. Never embed source text, diffs, file dumps, encoded source, or repository archives. Harness reads named files from the authorized workspace itself. These fields are task instructions, not enforced per-path filesystem isolation. The selected Harness model may send content it reads to its configured model provider even though Relay itself uses a loopback address. Sharing webUrl is not completion: keep wait_run until a terminal status, then consume assistantText. |
| start_reviewA | Create or reuse a native Harness session with the permission preset fixed to read-only, then return a stable session link. Task parameters are path-reference-only: provide the authorized workspace, reviewTargets, contextReadScope, excludedPaths, writeScope, and acceptance criteria. reviewTargets identify what to assess; they are not a read whitelist. contextReadScope declares where Harness may search and read supporting implementation, tests, configuration, and architecture material. Never embed source text, diffs, file dumps, encoded source, or repository archives. Harness reads named files from the authorized workspace itself. These fields are task instructions, not enforced per-path filesystem isolation. The selected Harness model may send content it reads to its configured model provider even though Relay itself uses a loopback address. After start succeeds, share webUrl and keep wait_run until succeeded/failed/cancelled/needs_attention. The calling agent MUST read assistantText before claiming the review is done. If the parent user asked to review then fix, apply accepted findings only after the run is terminal; do not treat a still-running review as finished. |
| steer_runA | Durably insert a correction into an active run. Task parameters are path-reference-only: provide the authorized workspace, reviewTargets, contextReadScope, excludedPaths, writeScope, and acceptance criteria. reviewTargets identify what to assess; they are not a read whitelist. contextReadScope declares where Harness may search and read supporting implementation, tests, configuration, and architecture material. Never embed source text, diffs, file dumps, encoded source, or repository archives. Harness reads named files from the authorized workspace itself. These fields are task instructions, not enforced per-path filesystem isolation. The selected Harness model may send content it reads to its configured model provider even though Relay itself uses a loopback address. |
| get_runA | Preferred tool to reconcile and return one run snapshot; replaces the deprecated status_run alias. If status is running or unknown, hostPollContract.hostMustCallWaitRunAgain is true and the host must not conclude. |
| get_run_summaryB | Project the current durable run snapshot into stable status, model, permission, elapsed time, and next-action fields. |
| read_notificationsA | Read the bounded in-process notification projection after a cursor; cursor gaps return explicit resynchronization metadata. |
| status_runA | Deprecated compatibility alias; use get_run. Scheduled for removal in 0.3.0. |
| open_runA | Open the native Harness Web session in the operating system default browser. Call only when the user explicitly asks to open or show the Harness page. |
| wait_runA | Poll durable Host history for at most 30 seconds and return the latest snapshot plus hostPollContract. Call this native MCP tool directly; never poll through a temporary Node, PowerShell, Python, or shell client. A timeout is a slice, not completion. If hostPollContract.hostMustCallWaitRunAgain is true, you MUST call wait_run again immediately. Do not send a final user answer, mark the delegated task complete, or skip consuming assistantText while the run is still running. Unrelated shell or background-task notifications are not authorization to stop polling. |
| list_runsC | Reconcile and list runs restored from durable relay state. |
| get_operationA | Read the durable idempotent operation record for a start, reply, steer, or cancel request. |
| reconcile_operationA | Compare an uncertain operation with durable Harness events without submitting a duplicate request. |
| reconcile_permissionsB | Retry restoration of the previous native permission preset for a session that requires attention. |
| reply_runA | Submit a new queued turn to the completed run session, optionally selecting a different model, and track it as a new run. Task parameters are path-reference-only: provide the authorized workspace, reviewTargets, contextReadScope, excludedPaths, writeScope, and acceptance criteria. reviewTargets identify what to assess; they are not a read whitelist. contextReadScope declares where Harness may search and read supporting implementation, tests, configuration, and architecture material. Never embed source text, diffs, file dumps, encoded source, or repository archives. Harness reads named files from the authorized workspace itself. These fields are task instructions, not enforced per-path filesystem isolation. The selected Harness model may send content it reads to its configured model provider even though Relay itself uses a loopback address. |
| cancel_runC | Request cancellation through the public Host API. |
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 25 tools
Several tools overlap in function or intent: get_run, get_run_summary, wait_run, status_run (deprecated), and list_runs all touch run state; doctor and setup_doctor also overlap. The detailed descriptions help, but agents must read carefully to pick correctly.
Most tools follow a clear verb_noun snake_case pattern (start_, stop_, list_, get_, setup_). Minor inconsistencies: bare 'doctor' vs 'setup_doctor', 'status_run' for a deprecated alias, and 'reconcile_operation' vs 'get_operation'.
25 tools is large for a relay/session manager. The lifecycle coverage is broadaa but there is redundancy (get_run/get_run_summary/status_run/wait_run all surface run state) and a deprecated tool included in the active set, so it feels heavier than necessary.
The set covers the full run lifecycle (start, reply, steer, cancel, wait, get, list), workspace/service management, diagnostics, setup, and notifications. No obvious missing operations for the described domain.