J0ss077/dsh-always-require-tools-approval
Stop. Confirm. Run. A DeepSeek Harness plugin that pauses selected tools and waits for your explicit approval before every execution.
项目介绍Project Overview
该插件为DeepSeek Harness添加工具审批门控,默认拦截bash和pwsh,每次执行前需明确批准。适用于需要严格管控命令执行的场景。注意:每次调用都会重新询问,且无审批通道时工具将被拒绝。
This plugin adds an approval gate to DeepSeek Harness, pausing watched tools (default: bash and pwsh) for explicit user confirmation before each execution. Use it when you need strict control over command execution. Note: every call prompts again, and tools are denied if no approval channel exists.
请帮我了解并安装插件:【dsh-always-require-tools-approval】【https://github.com/J0ss077/dsh-always-require-tools-approval】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add @j0ss077/dsh-always-require-tools-approval
把 J0ss077/dsh-always-require-tools-approval 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
@j0ss077/dsh-always-require-tools-approval
Stop. Confirm. Run. A DeepSeek Harness plugin that pauses the tools on your watchlist and waits for your explicit approval before every execution.
What it does
DSH runs your agent in a sandbox that blocks file writes — but not commands. bash can still read files, launch programs, and reach the network.
This plugin puts an approval gate between a tool and its execution. When the agent calls a tool on the watchlist, the harness pauses and asks before anything runs.
- Default watchlist:
bashandpwsh. - One approval = one execution. The next call asks again.
- Reject, cancel, or no approval channel → the tool is blocked.
- Every other tool is left untouched.
Requirements
- A DSH profile with an approval service — the standard
web(GUI) profile ships one. - Node.js >= 22.19.
Install
One command installs and activates the plugin (it ships as a bundle layer):
dsh plugin --profile web add @j0ss077/dsh-always-require-tools-approval
Then restart the GUI. Use a different --profile if you run under another one.
Configure
One option: tools — the watchlist.
| Key | Type | Default | Meaning |
|---|---|---|---|
tools |
string[] |
["bash", "pwsh"] |
Tool names that require approval before they run. |
Override it at runtime without reinstalling. Edit ~/.dsh/settings.yaml ($DSH_HOME/settings.yaml when set):
always-require-tools-approval:
tools: ["bash", "pwsh", "node"]
This file takes precedence over the value baked into the bundle.
What you'll see
- The agent calls a watched tool, e.g.
bash. - Execution pauses: "Approve this tool execution?"
- Approve → that single call runs. Reject → denied, and the agent is told you rejected it.
Every call prompts again — approving once never grants a blank check. The prompt text is fixed by design.
Safety model
- One-shot. One approval authorizes exactly one execution.
- Fail closed. No approval channel (headless run, unmounted service) → the tool is denied, never silently allowed.
- No auto-approve. For a watched tool the plugin only asks; it never approves on its own.
- No interference. Unwatched tools delegate to the next plugin.
Update & remove
dsh plugin --profile web update @j0ss077/dsh-always-require-tools-approval
dsh plugin --profile web remove @j0ss077/dsh-always-require-tools-approval
Restart the GUI after updating.
Development
pnpm install
pnpm build # compile and normalize .d.ts
pnpm typecheck # type-check source + tests
pnpm test # node --test
The plugin is three modules — src/contracts.ts (harness types), src/gate.ts (the gate policy), src/index.ts (wiring). See ADR 0001 for why the harness types are self-declared.
nexu-io/open-design
freestylefly/awesome-gpt-image-2
anywhere-labs/dsh-desktop
walkinglabs/learn-harness-engineering
awesome-dsh-plugin/awesome-dsh-plugin
MemTensor/MemOS