guo-ziao/dsh-interrupt-button ↗★ 0
dsh-interrupt-button
A green interrupt button beside the DeepSeek Harness send box: silently stops a running agent, which then summarizes its progress and asks for your new requirements; the interrupt prompt is customizable.
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:guo-ziao/dsh-interrupt-button说明文档
阅读完整 README ↗dsh-interrupt-button
A green interrupt button beside the DeepSeek Harness send box. While the agent is running, one click silently interrupts it in the background — no simulated user message appears in the transcript. The agent then stops its current work, summarizes what it has done as an assistant message, and asks you: "Do you have any new requirements or suggestions?" — waits for your reply, and merges your new requirements with the old ones before continuing.
When the agent is idle, clicking the button opens a dialog where you can customize the interrupt prompt (the model-facing instruction sent on the next interrupt), save it, or send it immediately.
Features
- 🟢 Green button in the composer tool row, right beside the send button
- ⏸ Strong pause: aborts the active turn (model request / tool calls),
kills background jobs and terminals owned by the agent, interrupts child
agents, and disarms an armed goal so automatic continuation stops; queued
messages are preserved (
keepInbox) - 💬 The agent replies as an assistant message: stops, summarizes its progress in a few sentences, and asks for your new requirements
- ✎ Customizable interrupt prompt: edit the model-facing instruction in a dialog (available when nothing is active); save it, or save & send immediately
- 🌗 Theme-aware dialog (light/dark via DSH theme tokens)
Install
dsh plugin --profile web add guo-ziao/dsh-interrupt-button
Or via npm:
dsh plugin --profile web add dsh-interrupt-button
How it works
The host half registers one loopback HTTP route (POST /dsh-interrupt-button/interrupt).
On press it performs a strong pause — agent.cancel({ kind: 'user' }, { keepInbox: true })
to abort the active turn, jobs.kill / terminals.kill for background work,
subagents.interrupt for child agents, and goals.disarm for an armed goal —
then agent.steer(...) with a plugin-source (notice form) message, so the
transcript shows a system-style context row instead of a fake user message and
the model produces the short summary and the question itself. When nothing is
active, the handler returns and the browser half opens the
prompt editor instead.