DeepSeek Harness plugin

dsh-approve-for-me

Rule-gated automatic approval for DeepSeek Harness sandbox escalations with an optional LLM reviewer and native human fallback.

Jump to install

Source facts

Repository
timeance/dsh-approve-for-me
Latest update
Aug 21, 2026
Category
Models & Providers
GitHub stars
12
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/timeance/dsh-approve-for-me
Plugin: dsh-approve-for-me
Author: timeance

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer4 files
README.mdSource · read only
README language

dsh-approve-for-me - Automatic sandbox approval for DeepSeek Harness

English | 中文

![npm](https://www.npmjs.com/package/dsh-approve-for-me) ![license](LICENSE)

Rules define the boundary. An optional LLM reviews matching requests. Everything uncertain returns to native human approval.

dsh-approve-for-me is a DeepSeek Harness plugin for rule-gated automatic approval of Shell and PowerShell sandbox escalations. It applies fixed high-risk checks, literal command-prefix rules, and an optional tool-free LLM reviewer. Every successful decision grants one allowed-once; it never grants permanent access.

Version 0.2.2 is adapted to DeepSeek Harness 0.1.1-rc.1, including rc1's keyed third-party settings-card slot and shared client settings schema service.

> [!WARNING] > This is an unofficial plugin. It has not received an independent security audit and comes without warranty. Built-in checks cannot cover every command, argument, wrapper, or environment. Keep allowlists narrow and retain Harness's native human approval for important operations.

Quick start

npm install -g @deepseek-ai/dsh
dsh plugin --profile web add dsh-approve-for-me@latest
dsh web --host 127.0.0.1 --port 3080

Then:

1. Open Settings -> Plugins -> Plugin configuration -> Approve for me. 2. Add only command prefixes you are willing to review automatically. 3. Select the Approve for me Access preset for the target agent or session.

> [!IMPORTANT] > commandPrefixes is empty by default. Installing the plugin alone does not automatically approve any command.

@latest is an npm dist-tag, not a fixed version. Use @beta only when you explicitly want the beta channel. Use @<version> for reproducible installation or rollback. Do not use the bare package name as the recommended upgrade command: an existing Profile can remain pinned while pnpm reports Already up to date.

Why use it

Access optionSandbox escalation behavior
Native Harness approvalAsk the user for every escalation
Approve for meEvaluate fixed checks and user rules, optionally ask an LLM, then return uncertain requests to the user
Full accessRemove the sandbox approval boundary

Rules establish the largest possible auto-approval set. The reviewer may narrow that set, but cannot bypass rules or fixed high-risk checks.

Web configuration

Add narrow, literal prefixes such as:

Shell:      git status
Shell:      git diff
PowerShell: Get-Location
PowerShell: Get-Content -LiteralPath README.md

A prefix is a parsed token prefix, not exact string equality. Additional arguments can follow, so include the subcommand and path whenever possible. Every segment of a compound command must match independently.

Known package lifecycle actions, path-qualified executables, direct scripts, wrappers, mutating PowerShell aliases, ambiguous parsing, and fixed high-risk patterns return to human approval even when a prefix appears to match.

The Web card is optional. In rc1 the client registers the keyed settings.plugin.item slot with key approve-for-me and consumes Harness's shared settings schema service. The card is available only over a loopback connection and uses the plugin's loopback-only RPC. Persistence, schema validation, revision conflicts, redaction, and hot reload remain owned by Harness's Settings service. The card does not make approval decisions and does not depend on llm-pi-ai.

Check the package actually installed in the Profile:

dsh plugin --profile web list dsh-approve-for-me --depth 0

Confirm that a matching read-only escalation can receive one-time approval, while an unmatched or high-risk request still opens native human approval. Switching away from the Approve for me preset disables the plugin for that session.

Install and update

Plugins and settings are Profile-specific. Install the plugin separately for web, headless, tui, or a custom Profile.

# Web settings card and Host approval core
dsh plugin --profile web add dsh-approve-for-me@latest

# Host approval core without the Web settings card
dsh plugin --profile headless add dsh-approve-for-me@latest

# Inspect effective wiring
dsh --profile web --dump-config
dsh --profile headless --dump-config

# Remove from one Profile
dsh plugin --profile web remove dsh-approve-for-me

The config dump should contain the approve-for-me permission preset and Host plugin entry.

Upgrade a running Web Profile

1. Stop the terminal running dsh web with Ctrl+C. 2. Request the current latest dist-tag. 3. Verify the installed version. 4. Restart the Host. 5. Refresh the browser after the Host is running again.

dsh plugin --profile web add dsh-approve-for-me@latest
dsh plugin --profile web list dsh-approve-for-me --depth 0
dsh web --host 127.0.0.1 --port 3080

A browser refresh does not reload the Host process or update the Profile lockfile.

If @latest does not update the Profile, request the exact published version:

$version = '<published-version>'
dsh plugin --profile web add "dsh-approve-for-me@$version"
dsh plugin --profile web list dsh-approve-for-me --depth 0

If it remains pinned, keep the Host stopped, remove the dependency, and add it again:

dsh plugin --profile web remove dsh-approve-for-me
dsh plugin --profile web add dsh-approve-for-me@latest
dsh plugin --profile web list dsh-approve-for-me --depth 0

Use dsh plugin --profile web add dsh-approve-for-me@beta for beta testing. Update headless and other Profiles separately.

YAML configuration

The Web page and $DSH_HOME\settings.yaml edit the same approve-for-me settings. Web configuration is optional.

Recommended: rules and the current session model

Omit reviewer.provider and reviewer.model. Each review inherits the provider and model of the session that requested approval.

approve-for-me:
  version: 1
  mode: rules-and-llm
  rules:
    commandPrefixes:
      - tool: shell
        prefix: git status
      - tool: shell
        prefix: git diff
      - tool: pwsh
        prefix: Get-Content -LiteralPath README.md
    reviewerInstructions: >-
      Only allow read-only repository inspection.
  reviewer:
    timeoutMs: 30000
  limits:
    trustedTranscriptChars: 12000
    untrustedToolDataChars: 8000
    reviewerOutputChars: 2000

If the request session has no complete provider/model route, the reviewer cannot allow the request and it returns to human approval.

To pin a route, set both identifiers:

reviewer:
  provider: your-provider-id
  model: your-model-id
  timeoutMs: 30000

Harness continues to own provider credentials. The plugin stores only provider/model identifiers.

To avoid model calls, set mode: rules-only. Correlation checks, parsing, fixed high-risk checks, and command rules still apply.

Limits

FieldDefaultConstraint
moderules-and-llmrules-only or rules-and-llm
rules.commandPrefixes[]At most 200 entries; tool is shell or pwsh
One prefixNoneOne non-empty literal command segment, up to 1,000 characters
rules.reviewerInstructions''Up to 8,000 characters
reviewer.timeoutMs300001,000 to 120,000 milliseconds
Reviewer content limits12000 / 8000 / 2000Each value is 256 to 100,000 characters
reviewer.provider/modelCurrent sessionSet both or omit both

An in-progress review keeps the settings snapshot captured at its start. Hot reload affects later requests.

Safety model

Default behavior:

  • Mode is rules-and-llm.
  • Reviewer provider/model comes from the requesting session.
  • Positive command rules are empty.
  • Fixed high-risk checks run before user rules and the reviewer.
  • Every review uses a fresh agent with no tools.
  • Failure, timeout, invalid output, ambiguity, or mismatch returns to human approval.

Decision order:

1. The active Access preset is approve-for-me. 2. The request is a supported Shell or PowerShell escalation strictly correlated with the active tool call. 3. The command passes fixed high-risk checks. 4. Every command segment matches a literal prefix rule for its tool. 5. rules-only returns one allowed-once; rules-and-llm also requires an explicit schema-valid allow.

Built-in checks cover a finite set of common risks, including parsing failures, file or permission mutation, system and package changes, mutating Git/GitHub actions, package lifecycle scripts, path-qualified executables, dynamic command execution, credential access, and external writes. They are conservative classifiers, not proof that an unflagged command is safe.

A high-risk result stops automatic approval and returns the request to Harness. It is not a direct denial.

Permissions and data

AreaBehavior
Approval contextReads the current escalation, correlated tool call, and a length-bounded transcript
Reviewer inputSeparates trusted guidance from untrusted tool data, limits content, and redacts common credential formats
Reviewer capabilityFresh agent with no tools
NetworkUses the provider route already configured in Harness
Web writesLoopback-only RPC delegates persistence to the Settings service
Approval scopeOne allowed-once for the current request

Troubleshooting

SymptomCheck
Approve for me is missing from AccessInstall in the active Profile, restart it, and inspect --dump-config
The settings card is missingUse the web Profile through 127.0.0.1 or another loopback address
A matching command still asksCheck every compound segment, high-risk signals, tool type, and reviewer result
The reviewer did not runConfirm rules-and-llm, a complete rule match, and a valid session model route
Provider/model validation failsSet both identifiers or clear both
Saving reports a revision conflictReload the card, edit the latest value, and save again
Installation reports peer warningsConfirm Harness 0.1.1-rc.1 compatibility and run pnpm check
Another Profile does not workInstall and configure the plugin in that Profile

FAQ

How do I automatically approve DeepSeek Harness sandbox escalations?

Install the plugin, add narrow command prefixes, and select the Approve for me Access preset. Only strictly correlated requests that pass fixed checks and configured review are approved once.

Does it replace Full access?

No. It keeps the sandbox boundary and returns uncertain requests to Harness's native approval.

Are there built-in rules?

There are fixed high-risk checks, but no built-in positive allowlist. Your allowlist must reflect the project and threat model.

Does it directly reject high-risk commands?

No. Version 0.2.2 stops automatic approval and hands the decision back to the user.

Can the reviewer expand the allowlist?

No. Rules define the maximum candidate set. The reviewer can only allow a matching candidate or return it to the user.

Does it work headlessly?

Yes. Install it in the headless Profile and configure YAML. The approval core does not require the Web card.

Compatibility

| Component | Baseline | | --- | --- | | DeepSeek Harness | 0.1.1-rc.1 | | Node.js | ^22.19.0 || >=24.0.0 | | Cordis | ^4.0.1 | | npm channel | @latest for stable releases; @beta for beta testing |

The rc1 adaptation uses the keyed third-party settings-card registration and settingsSchema service required by Harness. The removed rc7 schema-form package is no longer a dependency. The permission patch preserves Read Only, Workspace Write, and Full access, then adds Approve for me. Permission preset icons remain controlled by the Harness UI.

On August 21, 2026, the 0.2.2 source was verified against the official dsh-v0.1.1-rc.1 tag at commit 528c682e:

  • typecheck, the full regression suite, coverage, and the production build passed.
  • npm pack produced 26 files, including both READMEs.
  • The compatibility workflow covers Ubuntu and Windows on Node 22.19 and 24, including the Windows PowerShell path.
  • Regression coverage includes rc1 permission/preset.origin values, shared settingsSchema injection, one-shot PowerShell correlation, persistent PowerShell fallback, settings conflicts, reconnects, and non-loopback behavior.
  • In an isolated DSH home, the rc1 Web Profile loaded the plugin and served both the Web root and plugin client bundle. The rc1 headless Profile read YAML permission.defaultPreset: approve-for-me and completed a controlled mock-LLM Bash escalation; its session log recorded permission/preset with origin default, approval/decided: allowed-once, and a successful tool result.

A previous rc.6 smoke test on August 15, 2026 verified headless one-time approval and Web bundle loading. It is historical evidence, not the current compatibility baseline.

Development and verification

pnpm install --frozen-lockfile
pnpm check
pnpm test:coverage
npm pack --dry-run --json --ignore-scripts

To run source-level client tests against a specific Harness checkout:

$env:DSH_HARNESS_ROOT = 'H:\path\to\deepseek-harness'
$env:DSH_HARNESS_TSCONFIG = 'H:\path\to\deepseek-harness\tsconfig.base.json'
pnpm test

The test adapter is temporary and ignored by Git. Use a fresh DSH_HOME for runtime verification.

Local tarball

npm pack --json
$package = Get-ChildItem '.\dsh-approve-for-me-*.tgz' |
  Sort-Object LastWriteTime -Descending |
  Select-Object -First 1
dsh plugin --profile web add $package.FullName

Publishing tags

Stable releases use publishConfig.tag: latest, so npm publish updates latest. Publish prereleases with npm publish --tag beta; this updates beta without moving latest.

Security and license

Report vulnerabilities privately through GitHub Security Advisories. Do not submit API keys, credentials, complete prompts, private paths, or unredacted tool arguments. See [SECURITY.md](SECURITY.md).

Thanks to the LINUX DO community for its help and feedback.

Licensed under the [MIT License](LICENSE).