Replaces the headless startup to add --model provider/model, --resume <id|latest>, --continue and --session-info flags to dsh headless runs.
Install
# from npm (prebuilt)
dsh plugin --profile web add @dennisrongo/dsh-headless-plus
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:dennisrongo/dsh-plugins#path:/plugins/dsh-headless-plus
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
npm: @dennisrongo/dsh-headless-plus ·
source: dennisrongo/dsh-plugins
Claude Code parity for the DeepSeek Harness headless app: pick a model and continue a conversation from the command line.
The stock headless app runs one task with the default model and forgets it. This replaces it
with one that takes --model, --resume and --continue, so a shell script or an agent can
hold a real conversation across invocations.
Flags
| Flag | Meaning |
|---|---|
--model provider/model |
Override the model for this run. Malformed values fail fast at startup rather than silently falling back. |
--resume <session-id|latest> |
Continue an existing session. |
-c, --continue |
Alias for --resume latest — the most recent session for this directory. |
--session-info |
Print the session id to stderr at exit, so stdout stays clean for piping. |
dsh --profile headless-plus --session-info "reply with the single word ok"
dsh --profile headless-plus --continue "and again"
dsh --profile headless-plus --model deepseek/deepseek-chat "summarise README.md"
Install
dsh plugin --profile headless add @dennisrongo/dsh-headless-plus
Needs a profile built on @deepseek-ai/dsh-base + @deepseek-ai/dsh-headless. The package
mounts itself: its own cordis.patch.yml disables the two stock headless rows and inserts
its replacements. Do not repeat any of that in your profile — a duplicate id is fatal
(duplicate loader entry id: headless-plus-startup).
This is a replacement app, not an addition, which is why it disables another bundle's rows.
Update
dsh plugin --profile headless outdated
dsh plugin --profile headless update @dennisrongo/dsh-headless-plus
dsh plugin forwards to pnpm, so outdated, update and remove all behave normally. A
caret range only moves within its major; cross one with
add @dennisrongo/dsh-headless-plus@latest. There is no build step — lib/ is hand-written
and committed — but the app is a CLI, so changes apply on the next run, not a refresh.
How it works
Two plugins, two rows. lib/startup.js owns the flag family via commander and publishes a
headlessPlusStartup service carrying the parsed task and options; lib/index.js resolves the
session target, applies any model override, runs the agent and prints the result. Each dsh app
owns its own flags, so these do not collide with the launcher's.
Resuming goes through the public ctx.agents.resume(). --resume latest maps the cwd to its
session directory using the same slug rule as dsh-session-persistence-jsonl (separators → -,
wrapped in --); if that upstream convention changes this breaks, and test/smoke.mjs is what
catches it.
commander is a real dependency; every @deepseek-ai/* is a peer supplied by your dsh install.
See AGENTS.md for the mount rows, dev loop and verification recipe.
About the author
Plugins and walkthroughs on YouTube @codingmenace — I build AI coding tools in public, including DeepSeek Harness itself. More at dennisrongo.com.
Links
More in this category
yjh051108/dsh-routing-suite★ 6997
One repository, three parts: a runtime injector for DSH plugin packages (inject, hot-reload, unload, promote a dev staging tool to the front, route self-heal, plus a settings-page plugin manager that lists, unloads and drags folders in to internalize), a task-aware reasoning-mode router agent preset (router-standard / router-spec / router-react), and a graded two-level task protocol whose six tools (commit_star, lock_stage, revise_do, edit_plan, mark_task, redteam_verdict) pin task state to disk. The injector implementation ships in-tree, so the install carries its own behaviour rather than a dependency list.
strukto-ai/mirage#dsh★ 3696
Swaps the filesystem and bash providers for a mirage virtual workspace: file tools and shell commands run over mounted resources (RAM, S3, Redis, Slack, Gmail, Notion, Postgres) instead of the host disk, with per-mount read/write/exec modes, per-command sandbox routing (monty, pyodide, quickjs in process; docker, e2b, daytona remote), and installed CLIs (git, gh, slack, linear, ntn, gws, or one you register) as head words in the virtual terminal.
first-fluke/oh-my-agent#dsh★ 1344
Runs project OMA checks before and after tool execution and when a turn tries to finish. Installs its OMA CLI dependency and initializes unconfigured projects on first use. Requires Node.js 22+; initial setup needs network access and project write access.
hust-open-atom-club/oh-dsh★ 322
Community distribution: TUI, desktop, and Web UI as one bundle with layered installation.
weijiafu14/pi2dsh★ 217
Pi Host ABI compatibility engine: after one install, unmodified Pi extensions from npm mount as native DSH plugins with `dsh plugin add <pi-package>`. Verified end to end on stock DSH with pi-mcp-adapter (full MCP manager: OAuth, resources, prompts, MCP Apps, elicitation, sampling), @tintinweb/pi-subagents, pi-code, pi-hermes-memory and pi-background-tasks; `pi2dsh inspect` reports a package's compatibility before installing.
Fishquito7/dsh-skill-mcp-panel★ 207
Manages DSH skills and MCP servers from the web settings: skill cards with hot enable/disable, workspace scopes, groups, batch migration and drag-and-drop import, plus stdio/HTTP MCP CRUD with connection tests, secret redaction and the unified dsh-panel CLI.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.