← Back to home@apcamargo

dsh-review

No description

Stars
0
Language
JavaScript
Created
Oct 6, 2026
Updated
Oct 6, 2026
GitHub repo

Introduction

dsh-review

A DeepSeek Harness plugin that adds a code review workflow to /review and /end-review.

It reviews uncommitted changes, changes against a base branch, a single commit, a GitHub pull request (checked out locally through gh), or a folder as a snapshot. Findings get a priority from [P0] to [P3] and a confidence level, and non-blocking notes for the human reviewer are kept separate from the fix items.

Install

dsh plugin --profile web add https://github.com/apcamargo/dsh-review.git

The package declares a dsh.bundle manifest, so dsh plugin add enables it as a profile layer automatically. (To enable it by hand instead, add the row below to the profile's patch layer, $DSH_HOME/profiles/web/cordis.patch.yml):

- id: review
  name: "@apcamargo/dsh-review"

Restart the harness. Plugins load at boot. Run dsh --profile web --dump-config to check the composition without mounting.

Quick reference

/review                           # review uncommitted changes (the default)
/review uncommitted               # explicit equivalent of /review
/review branch [<name>]           # base branch by name, or main/master when omitted
/review commit abc123
/review pr 123
/review pr https://github.com/owner/repo/pull/123
/review folder src docs           # snapshot review, not a diff
/review check the error handling  # any other text becomes the review focus
/review instructions "prefer fail-fast error handling"
/review instructions "clear"      # quoted form stores the literal word
/review instructions clear        # bare form removes them
/review status
/end-review                       # default: summarize
/end-review summarize
/end-review fix
/end-review done

Commands

Every review mode sends the full review rubric plus a mode-specific focus to the model as the next turn; the rows below decide what that focus is.

/review

CommandParametersDescription
/reviewnoneReviews the working tree exactly as /review uncommitted does. Requires a git repository.
/review uncommittednoneReviews the working tree: the staged changes (git diff --cached), the unstaged changes (git diff), and the untracked (net new) files. Requires a git repository.
/review branch [<name>]name (optional) — base branch to compare the current branch against; defaults to the repository's default branch: origin/HEAD first, then main, with master as the fallback when there is no main.Reviews the changes between the current branch and the base branch, with the merge base between the two resolved up front and baked into the review prompt. Requires a git repository.
/review commit <sha> [<title>]sha (required) — the commit to review, as any SHA git accepts. title (optional) — a human-readable title for the review prompt and the "Review started" line; everything after the SHA is used as the title.Reviews the changes introduced by one commit. Requires a git repository.
/review pr <number|url>number|url (required) — the pull request number (e.g. 123) or a full GitHub PR URL (https://github.com/owner/repo/pull/123).Checks the PR out locally through gh, then reviews its changes against the PR's base branch. Requires a git repository with gh installed and signed in (gh auth login), and blocks when there are uncommitted changes to tracked files.
/review folder <paths...>paths (required, one or more) — whitespace-separated folders and/or files, e.g. src docs.Reviews the paths as a snapshot (not a diff): the reviewer reads them directly. Works outside a git repository.
/review <focus text>focus text (required) — free-form review focus, e.g. check the error handling. Mode keywords (uncommitted, branch, commit, folder, pr, instructions, and a lone status) are matched first; everything else is the focus.The text becomes the review focus: the reviewer reads it and decides what to inspect. Works outside a git repository.
/review instructions <text>text (required) — the instructions to store, e.g. "prefer fail-fast error handling". The bare word clear (case-insensitive) removes them instead; quote it ("clear") to store the literal word.Stores shared custom review instructions that are appended to every review in this session until removed.
/review statusnone — status is only recognized as the sole argument; with more words it becomes a custom review focus.Shows the current review session state: whether a review is active, its target, and the stored custom instructions.
--extra "<instruction>"flag — value required when used.Adds one extra instruction to any mode, on top of any stored session instructions; composes before or after the mode.
--aggressiveflag — no value (--aggressive=true is tolerated).Hunts for issues instead of verifying: skepticism by default, every candidate reported with its confidence label, and each finding still grounded in the real diff and code; composes with any mode.

/end-review [summarize\|fix\|done]

Finishes the active review in this session.

ModeDescription
summarize — the default; bare /end-review uses itQueues a structured handoff: scope, verdict, findings, and an ordered fix queue.
fixQueues a follow-up turn that implements the findings in priority order.
doneJust clears the session back to ordinary coding work.
statusShows the review state without finishing it.

Findings show up as an ordinary turn, so you can talk to the reviewer while it works.

Development

npm install
npm test

The tests run three ways: command grammar, prompts, and state over mock services, git helpers against a real repository, and the full command flow against a real repository. Harness services are reached through the injected ctx, so the package never binds to a specific host install.

License

MIT