Repository navigation
Releases: JialaoLiu/dsh-baton
Release list
v0.5.9
New
- Updates load without a restart. When a newer dsh-baton lands in
~/.dsh-baton/app(a plugin update,setup, or a copy by hand), a conversation that is already open in Claude Code or Codex uses it from its nextdsh_*call. The connection stays open.src/server.mjsis now a thin shell that holds the client's connection, and the server itself (src/mcp.mjs) runs as its child process. Before each call, the shell checks the app folder and starts the new version if there is one.- The first call on the new version carries a note:
dsh-baton was updated from X to Y without a restart. The note also names any tools that are new in this version. - A
dsh_waitthat is already running finishes on the old version. - If the new version cannot start, the old one keeps working and the note says why.
- This applies from 0.5.9 on. A server started from 0.5.8 or earlier needs one last restart, or a
/mcpreconnect, to pick it up.
dsh_call {name, arguments}: a backup entry that calls anydsh_*tool by name and runs the same code as a direct call.- Codex keeps the tool list a conversation started with, so it does not show a tool added by an update until the next conversation. Through
dsh_call, an open conversation can use that tool at once, and the update note points to it. - Called with a name that does not exist, it changes nothing and returns the available tools with their input schemas.
- Codex keeps the tool list a conversation started with, so it does not show a tool added by an update until the next conversation. Through
- Relayed questions put the client's own advice first. When a run stops to ask (
ask_user_question):- Option labels no longer carry the asking model's "(Recommended)" or "(推荐)" mark. That pick moves to a separate field,
harness_suggested. - The result includes
relay, the question laid out for the user. Its first line,My recommendation: <pick>, because <reason>, is for the client to fill in with its own pick and reason, in the user's language. The tools ask it to show this before the options. dsh_answertakes an optionalreason. When the user lets the client decide, it gives one sentence on why. The reason is not sent to Harness.- When the run ends, the result starts with
decided_for_user: what the client chose and why. The client is told to say this to the user, not just pass on the final reply.
- Option labels no longer carry the asking model's "(Recommended)" or "(推荐)" mark. That pick moves to a separate field,
Update
Update the plugin in Harness (Plugins → dsh-baton-host → Uninstall, then Add plugin → dsh-baton-host@0.5.9) and restart Harness. The plugin installs the matching MCP server. Then restart Claude Code and Codex, or start a new chat, once. Later updates load without a restart.
Tested on macOS with Claude Code and Codex, and on Windows with Codex.
Full Changelog: v0.5.8...v0.5.9
v0.5.8
New
dsh_update_queued: edit, remove or steer a message that is still waiting in a Harness session queue (action: edit | remove | steer). An edited message keeps its run, and the run follows it into the conversation. A removed message ends its run as cancelled.dsh_answer, and an immediate wake-up when a run asks a question. When DeepSeek callsask_user_question,dsh_waitand the backgroundwait_commandreturn at once withneeds_input: "answer"and the full questions.wait_commandexits with code 3.- Answer with
dsh_answer: option numbers or labels, free text, or skip. Answers can go in one question at a time. - Once answered, the question card in the Harness window closes. If the user answers in the window instead, the run follows that answer.
- The tool texts tell the client to relay the questions with its own recommendation and a reason from its own judgment of the task. It answers by itself only when the user has said to decide.
- An approval that only a person can give returns
needs_input: "harness-ui".
- Answer with
dsh_sendwithoutmodefollows Harness's own busy-send setting (Settings, sending while busy: queue or steer). The result says which mode was used and why (mode_source:explicit,harnessordefault).dsh_list_runstakes an optionalsession_id(dsh-baton runs --session <id>).
Fixed
dsh_cancel: stopping a session also empties its Harness queue, but the runs of the dropped messages used to stay inqueuedfor good. They now end ascancelled, and the result lists them inremoved_from_queue. The same goes for a message removed with Remove in the Harness UI.
Behaviour change
- If Harness is set to steer while busy, a
dsh_sendwithoutmodeto a busy session is now added to the turn that is running, instead of being queued after it. Passmode: "followup"to keep the old behaviour. Sends with an explicitmodeare unchanged. With the default setting (queue), nothing changes.
Update
Update the plugin in Harness (Plugins → dsh-baton-host → Uninstall, then Add plugin → dsh-baton-host@0.5.8) and restart Harness. The plugin installs the matching MCP server. Start a new chat in Claude Code or Codex to pick up the new tools.
Tested on macOS and Windows.
Full Changelog: v0.5.7...v0.5.8
v0.5.7
v0.5.6
v0.5.5
v0.5.4
Adding the plugin is the whole install: in DeepSeek Harness, Plugins → Add plugin → dsh-baton-host → Install → Enable. The plugin registers the dsh-baton MCP server for Claude Code and Codex.
Changes since 0.4.0:
- 0.5.0 Enabling the
dsh-baton-hostplugin registers the MCP server for Claude Code and Codex. SetDSH_BATON_AUTO_REGISTER=0to turn this off, and usesetup --removeto unregister. - 0.5.1 The MCP Registry name matches the GitHub owner's case:
io.github.JialaoLiu/dsh-baton. - 0.5.2 Node.js is no longer required. Without it, the plugin runs the server with Harness's own runtime.
- 0.5.3 Registration keeps existing
npxentries and checks Node mode on Harness entries. - 0.5.4 The release workflow lists each plain version in the official MCP Registry.
Packages: dsh-baton-mcp · dsh-baton-host