Bundle
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.
- Source
- guo-ziao
- stars
- 3 stars
- License
- MIT
- Updated
- Updated 4 days ago
Readme
# dsh-interrupt-button
[](https://awesome-dsh-plugin.com)
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
```sh
dsh plugin --profile web add guo-ziao/dsh-interrupt-button
```
Or via npm:
```sh
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 `nothingActive` and the browser half opens the
prompt editor instead.
## Default interrupt prompt
The following instruction is sent to the agent when you have not customized
it (short thinking, brief summary, and the exact closing question):
> 【用户按下了“打断”按钮】
> 用户刚刚按下了打断按钮,立即执行以下操作,不得继续当前任务:
> 1. 立即停止并结束当前一切工作:停止思考、停止工具调用、停止后台任务。
> 2. 用不超过三句话简短总结你到目前为止的进展,只讲结果,不展开过程。
> 3. 回复的最后一句必须原样是:“你有什么新的要求和建议吗?”
> 4. 然后停下等待用户回复;用户给出新要求或建议后,将新要求与旧要求融合,再继续工作。
> 不要长篇分析,直接简洁回复。
## Development
```sh
npm run check # syntax-check both halves
```
## License
[MIT](./LICENSE)
Install
dsh plugin --profile web add github:guo-ziao/dsh-interrupt-button
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-interrupt-button from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.