DeepSeek Harness Plugin

jakehemmerle/dsh-aris-better

Stars ★ 0 Category Workflow & Automation Added 2026-11-02

Adds an ARIS agent preset that loads the 84 ARIS research-workflow skills and runs their reviewer as an in-harness subagent from a different model family than the session model. Other presets are unchanged. A fork of wanshuiyin/Auto-claude-code-research-in-sleep's dsh-aris branch: install it instead of the upstream dsh-aris plugin, not alongside it - both register the mcp__codex__codex reviewer tools and the same ARIS skills.

Install

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

dsh plugin --profile web add github:jakehemmerle/dsh-aris-better

Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).

README

English | 中文

A fork of the upstream dsh-aris branch for DeepSeek Harness (dsh) 0.2.x. The full ARIS project — every workflow, the docs, and the other host adaptations — lives on upstream main. Design and rationale: dsh/SPEC.md.

ARIS runs as its own agent preset. Pick ARIS in the preset picker next to Standard and PTC, and that session gets all 84 ARIS skills plus an independent reviewer. Other presets, and your default model, are untouched.

The reviewer runs inside dsh as a subagent, on the providers your profile already has (anthropic, openai-codex, providerproxy, deepseek-official, any custom route). It is always from a different model family than the session's model — a Claude session is reviewed by GPT, a GPT session by Claude. If no such route is available the review fails with REVIEW_UNAVAILABLE; it never falls back to self-review. No Codex CLI, Python bridge, or extra login is needed.

The skills are unmodified upstream main (26b95cf, 2026-10-07). They keep calling mcp__codex__codex / mcp__codex__codex-reply; this package serves those tool names from dsh.

Install

dsh plugin --profile web add link:/absolute/path/to/this/checkout   # or a packed tarball

Restart dsh (dsh web, or your service) — plugin code loads at startup. Then open a new session, choose ARIS in the preset picker before the first message, and type / to see the ARIS skills.

dsh plugin shells out to pnpm, which dsh does not bundle.

Check the layer applied:

dsh --profile web --dump-config | grep -nE 'aris-host|preset-aris'

How the reviewer works

Skill call What runs
mcp__codex__codex {prompt, model, config.model_reasoning_effort, sandbox, cwd} Picks a reviewer route, starts a dsh child session on it, returns its answer.
mcp__codex__codex-reply {threadId, prompt} Same route/effort/sandbox; the child sees every earlier round of the thread.

Route selection:

  1. The executor is the calling session's live model; its family comes from the model id (so one gateway serving both Claude and GPT is handled).
  2. The configured reviewer routes are the only reviewer models. A skill's pinned model (most pin gpt-6-astra) only moves a route serving that exact model to the front.
  3. The first route of a different family that resolves wins. Defaults, in order: openai-codex/gpt-6.1-sol, providerproxy/gpt-6.1-sol, anthropic/claude-opus-5-5, providerproxy/claude-opus-5-5, deepseek-official/deepseek-v4-pro. So GPT reviews run on GPT-6.1 Sol, not Astra.
  4. Effort never drops below the requested tier: ultra → max then xhigh; xhigh → xhigh then max.

Every result starts with one line the skills record into REVIEW_STATE.json:

ARIS reviewer metadata (not part of the reviewer response): threadId=aris-rv-… round=1 reviewer=openai-codex/gpt-6.1-sol effort=xhigh reviewer_family=openai executor=anthropic/claude-opus-5-5 executor_family=anthropic independence=verified-by-host-routing requested_model=gpt-6-astra requested_model_used=no

The reviewer gets read, read_image, glob, grep, web_search, web_fetch and skill; sandbox: workspace-write adds bash/write/edit. It cannot delegate or call the reviewer tools. Threads persist in $DSH_HOME/aris/reviewer-threads/ and survive restarts.

Override the routes (and timeoutMs, default 20 minutes) on the host row in your profile patch. dsh patches cannot address rows nested inside a preset, so the knobs live on aris-host:

- id: aris-host
  config:
    reviewer:
      routes:
        - { provider: openai-codex, model: gpt-6.1-sol }
        - { provider: anthropic, model: claude-opus-5-5 }

Optional rows (disabled)

Row Enable when
aris-scope-limits You want the reviewer's scope limits applied to the executor too (costs tokens every request).
aris-grok The grok CLI is installed: adds grok / grok-reply consultation tools (upstream #454).
aris-antigravity The agy CLI is installed: adds antigravity / antigravity-reply.

These consultation bridges are not reviewer routes and never satisfy an acceptance gate.

The ARIS tab

Sessions get a read-only ARIS tab beside Chat and Trajectory. It reads review-stage/REVIEW_STATE.json from the session's workspace and shows who reviewed the latest round and whether the families differ. It never writes, advances a round, or turns a score into a completion decision.

Tests

DSH_ROOT=<prefix>/lib/node_modules/@deepseek-ai/dsh npm test

preset-drift.test.mjs compares the preset's copied Standard rows against the installed dsh; run it after every dsh upgrade.

Known limits

  • Tracks one dsh line. Verified on dsh 0.2.1-alpha.2. Presets were redesigned in 2026-09; re-run the tests on every upgrade.
  • Web only. dsh presets are a Web-surface concept; the headless and TUI profiles do not show ARIS mode.
  • No per-preset model. ARIS mode uses the session's model; dsh 0.2.1 has no preset-level default.
  • Replay cost. Each reply round resends the thread's earlier rounds to a fresh reviewer child.
  • Do not also install the upstream Codex MCP server in this preset: it registers the same tool names.

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →

Community comments

Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.