DeepSeek Harness Plugin

JessenReinhart/dsh-poke-todo

Stars ★ 0 Category Workflow & Automation Added 2026-10-16

Ports jcode's auto-poke so an idle agent keeps working while its session still has incomplete todos.

Install

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

dsh plugin --profile web add github:JessenReinhart/dsh-poke-todo

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

A DeepSeek Harness Cordis plugin that ports the auto-poke behavior from jcode.

When an agent is about to finish a turn while its session still has incomplete todos, the Host half injects a synthetic continuation:

You have N incomplete todo(s). Continue working, or update the todo tool.

The plugin listens to the DSH agent/turn-stopping serial event, queries the session's current todo projection from sessionProjections, and calls agent.steer() to continue the turn instead of idling.

Install

The plugin declares a dsh.bundle manifest, so a published build is installed with the DSH CLI:

dsh plugin --profile <name> add dsh-poke-todo

For a local checkout, use the repo installer (runs pnpm add link: and registers the bundle):

node scripts/install.mjs --profile desktop --from local

Layout

  • lib/index.js — static ES module exporting the Cordis contract (name, inject, apply).
  • plugin/host.js — dynamic host function body for cordis_define.
  • plugin/client.js — client-side RPC bridge and styles for dynamic installation.
  • cordis.patch.yml — bundle layer patch for permanent profile compositions.
  • scripts/install.mjs — profile installer.
  • scripts/define-payload.mjs — emits the dynamic cordis_define JSON payload.
  • test/ — unit tests for the host and static modules.

Safety & semantics

  • Up to MAX_CONSECUTIVE_POKES = 3 consecutive pokes per session before the circuit breaker trips.
  • The budget resets when a genuine human message is claimed (agent/inbox/claimed).
  • completed, cancelled, and canceled are treated as finished.
  • Aborted turns (signal.aborted) are ignored.

Publish

npm version patch && npm publish

The bundle manifest in package.json (dsh.bundle.patch) and the root cordis.patch.yml make the published package installable via dsh plugin add.

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.