DSH one-time task execution bundle: run an Agent directly from the command line and exit, bypassing the web interface and browser.
ⓘ This plugin is a sub-package of the op7418/pilot-harness monorepo — stars and activity count the whole repository.
- Language
- TypeScript
- License
- MIT
- Branch
- main
Install
$ dsh plugin --profile web add @deepseek-ai/dsh-headlessRun the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial
Install via your agent
Install the DeepSeek Harness plugin op7418/pilot-harness/packages/bundle/headless for me: review the repository at https://github.com/op7418/pilot-harness first, then run the install command and verify the plugin loads successfully.
Paste this instruction to the DSH Web GUI assistant — it will install and verify for you.
One-Line Description
A one-shot task bundle for dsh: receives a task text from the command line, runs an Agent, outputs the answer to stdout, and exits—without starting a Web UI or browser.
Core Capabilities
- Execute tasks from the command line in one shot, without opening a Web UI or browser
- Automatically create a persistent Agent, submit the command-line task as a user message, and exit once the Agent enters idle state
- Before exiting, call sessions.flush to persist the session and write the last non-empty Assistant text to stdout
- Use exit code to indicate results: exit code 0 when the final turn ends with "completed"; exit code 1 for all other cases (including errors, aborts, or empty turns)
- Does not open any listening ports; pure process-level execution, suitable for CI, scripts, cron jobs, and other automation scenarios
- Rejects startup if task text is missing, displays usage and exits with non-zero code to avoid empty runs
Technical Implementation
- Language: TypeScript (ESM,
"type": "module") - Key Dependencies: @deepseek-ai/cordis (plugin framework), @deepseek-ai/dsh-agent (Agent and Inbox), @deepseek-ai/dsh-session (persistent sessions), commander (CLI parsing)
- Architecture Pattern: cordis named export function plugins (
name/inject/Config/apply), injected along withheadless-startupandheadless-invariantthree same-named plugins into dsh-base viacordis.patch.yml; runner obtains host services (agentDefaultModel,agents,sessions) through Cordis context, then exits via the host-providedappExithook - Entry Files: src/index.ts (runner), src/startup.ts (CLI provider), src/invariant.ts (invariant companion plugin)
Use Cases
This bundle is most suitable when you want to run an AI task directly in CI, scripts, or cron jobs without opening or unable to open the Web console. It only reads command-line arguments, runs an Agent, outputs the answer to stdout, and uses exit codes to indicate success or failure to the caller.
It can also serve as a reference for dsh's minimal usable Agent call stack—one-shot runner + Code Mode worker + base tool stack, sufficient to understand how Cordis plugins drive a complete conversation without mounting Web.
Prerequisites & Compatibility
| Dependency | Min Version | Description |
|---|---|---|
| DSH | 0.1.0-rc.7+ | Depends on packages in the workspace: dsh-base, dsh-agent, dsh-session, dsh-llm, dsh-invariants, dsh-cmdline, dsh-agent-default-model, dsh-code-runtime-worker-thread; all these peerDependencies are declared as workspace:^ |
| Node.js | ^22.19.0 || >=24.0.0 | Required by engines field in monorepo root package.json; bundle itself has no separate declaration |
| Platform | Cross-platform | All Node.js process-level logic, no system calls or native bindings |
| Native Modules | None | All dependencies are pure JS/TS, no native dependencies like node-pty, node:sqlite |
Installation
dsh plugin --profile web add github:op7418/pilot-harness/packages/bundle/headless
After installation, invoke this bundle via dsh --profile headless "your task".
Configuration
| Config | Type | Description | Default |
|---|---|---|---|
| task | string (required) | Single task text for the Agent to execute; multiple words on command line are concatenated with spaces | none |
This field is injected via lazy configuration by the
headless-startupplugin incordis.patch.ymlafter parsing the command line; the runner itself does not directly accept Cordis configuration.
FAQ
Q: Can the task have multi-turn dialogue?
A: No. The runner only submits the command-line argument as one user message to the Agent, waits for the Agent to complete one turn, then exits. There's no entry point for follow-up questions or continued dialogue.
Q: How to determine success/failure from exit code?
A: Exit code 0 means the final turn ended with "completed"; all other cases (including abort, model error, or no turn occurred) return 1, making it easy for scripts and CI to judge directly.
Q: Where does output go when the answer is irrelevant or model errors occur?
A: The last non-empty Assistant text is written to stdout; model error codes and messages are written to stderr in the format "dsh: CODE: message"; stderr is empty under normal conditions.
Q: What happens if task text is not provided?
A: The launcher rejects it during the parsing phase, displays "a task is required" and exits with code 1. The runner is never activated, and the entire process does not enter the Agent creation flow.
Q: Will any ports be opened?
A: No. This bundle does not mount Host, HTTP server, or Web runtime; the process does not listen on any ports, making it suitable for containerized or restricted network environments.
Q: How to uninstall?
A: Execute dsh plugin --profile web remove github:op7418/pilot-harness/packages/bundle/headless under the profile where you originally installed it.
Q: Does this bundle modify the model system prompt?
A: Yes. Its cordis patch changes the system-prompt persona to "You are a coding agent powered by the {{model}} model" and injects the current working directory into the persona.
Q: Where is data stored?
A: Before exiting, it calls sessions.flush to persist the session to the host-configured Session storage; the specific path is determined by the DSH launcher and Session plugin. This bundle does not create any separate local files.
Difficulty
Beginner — there's only one command to use: dsh --profile headless "your task". No UI, config files, or additional parameters. An ordinary user can copy one line of command and run it.
Known Issues & Limitations
- Only supports single submission: The runner has no interactive follow-up entry point; after submitting one task, it waits to exit. Multi-turn follow-up is not supported.
- Depends on host providing
ctx.appExithook: When starting the headless profile in a host environment that doesn't provide this hook, activation will throw "the launcher must provide ctx.appExit before the tree mounts" and fail. - Does not mount Web tool stack: No Host, HTTP, Web runtime, or browser plugins; cannot reuse any Web-mode interaction capabilities (such as approvals, file browser, or extension UI).
- No TODO/FIXME comments found: No unresolved development markers in the source code.
Pilot Harness
English | 中文
A CodePilot-inspired desktop client and plugin suite for DeepSeek Harness.
Run the DeepSeek Harness plugin runtime as a focused native app, manage providers and multimodal models visually, and keep desktop additions isolated as ordinary Harness plugins.
Quick start · Plugins · Architecture · MIT License
Why Pilot Harness
DeepSeek Harness has a powerful “everything is a plugin” architecture, but its default experience is designed around a CLI-launched Web UI. Pilot Harness keeps that runtime model and adds the parts expected from a daily desktop product:
- A real desktop app — Electron packages the local Harness runtime for macOS, Windows, and Linux, owns native window behavior, and provides a recovery screen when startup needs attention.
- A calmer CodePilot-inspired interface — consistent tokens, radii, menus, hover states, settings cards, Markdown, conversation/trajectory navigation, and platform-aware title bars.
- Provider and model management — connect supported providers, declare an OpenAI-compatible endpoint, manage credentials separately from settings, browse the live model catalog, and identify image-capable models.
- Workspace context without clutter — project-aware conversation rows show branch, state, reminder summary, mode, and model details, while Files opens as a true right sidebar.
- Plugin-first extensions — the theme, Worktree sidebar, Schedule summary, and Session-log export remain Cordis/DeepSeek Harness rows rather than desktop-only business logic.
- Reversible customization — disabling the CodePilot theme row removes its product mark and visual overrides so the stock Harness presentation can take over again.
Pilot Harness does not replace the DeepSeek Harness agent loop, Session log, tool pipeline, provider contracts, or RPC implementation. Electron owns packaging and native integration; the composed Harness plugin tree remains the application runtime.
Quick Start
Download the installer for your system from GitHub Releases:
| Platform | Download | Install and handle the security prompt |
|---|---|---|
| macOS (Apple Silicon) | DMG installer ZIP app | Open the DMG, drag pilot-harness.app into Applications, and launch it normally. A formal Release is published only after its Developer ID signature has been verified. Because notarization is not enabled yet, Gatekeeper may still block the first launch; in that case open System Settings → Privacy & Security, click Open Anyway, then confirm Open. Do not run xattr or disable Gatekeeper for a formal Release. If macOS reports that the signed app is damaged, delete it, verify the Release checksum, and download it again instead of bypassing the warning. Apple's security instructions. |
| Windows (x64) | EXE installer | Run the EXE. If Microsoft Defender SmartScreen says Windows protected your PC, first confirm that the file came from this Release, then choose More info → Run anyway. Do not disable SmartScreen globally. A managed computer may hide this option; contact its administrator instead. Microsoft's SmartScreen explanation. |
| Linux (x64) | AppImage DEB RPM | DEB: sudo apt install ./Pilot-Harness-Linux-amd64.debRPM: sudo dnf install ./Pilot-Harness-Linux-x86_64.rpmAppImage: chmod +x Pilot-Harness-Linux-x86_64.AppImage, then ./Pilot-Harness-Linux-x86_64.AppImage. If the file manager blocks execution, enable Allow executing file as program in file properties. The preview packages are unsigned, so only accept a package-manager warning after confirming the official Release source. |
The table links to formal end-user Releases, not the seven-day Actions preview artifacts. Formal macOS files must pass Developer ID verification before publication; while they remain unnotarized, the only expected extra step is Open Anyway in System Settings. Preview macOS artifacts are ad-hoc signed for CI verification and are not the normal installation path. Once notarization is enabled, the Open Anyway step should normally disappear and this guide must be updated with the release pipeline. Windows and Linux preview installers remain unsigned. Only override an operating-system warning for files downloaded from this repository's official GitHub Release; do not turn off platform security globally.
After installation, open Pilot Harness, select a Workspace, then go to Settings → Providers to connect a provider and choose one of its available models. No separate DeepSeek Harness installation is required for the desktop app. Source setup and packaging instructions live in Development, not in the user installation path.
What is included
| Area | What Pilot Harness adds | Ownership |
|---|---|---|
| Desktop shell | Native window, local runtime lifecycle, directory dialog, recovery, installers, and platform icons | Electron app |
| Visual system | CodePilot-inspired design tokens and component contracts | @deepseek-ai/dsh-client-ui-codepilot-theme |
| Workspace Files | Right sidebar, file count, branch summary, row actions, and @path insertion | @deepseek-ai/dsh-ui-worktree |
| Reminder summary | Active reminder count and nearest scheduled time in Session hover details | @deepseek-ai/dsh-ui-schedule-summary |
| Session export | Per-Session ZIP export from the Trajectory toolbar and /export | @deepseek-ai/dsh-session-log-export |
| Providers and models | Configurable adapter, credential/settings UI, live catalog, and multimodal labels | Existing Harness plugins plus the Pilot Harness desktop profile |
The provider/model experience is deliberately a profile composition, not a new provider implementation. It mounts existing adapter, Settings, and Credentials contracts, then replaces the desktop placeholder only after a real provider advertises a usable model.
Use the plugins independently
The desktop client already includes every plugin below. If you use a local DeepSeek Harness Web profile instead, install only the feature you want with one command; each release asset is a prebuilt dsh.bundle, so no repository clone, YAML patch, or local build is required.
CodePilot theme
dsh plugin --profile web add https://github.com/op7418/pilot-harness/releases/latest/download/deepseek-ai-dsh-client-ui-codepilot-theme-0.1.0-rc.5.tgz
Applies the Pilot Harness visual system and product mark. Removing the plugin restores the stock Harness presentation. See theme details.
Files sidebar
dsh plugin --profile web add https://github.com/op7418/pilot-harness/releases/latest/download/deepseek-ai-dsh-ui-worktree-0.1.0-rc.5.tgz
Adds the Workspace-confined right file sidebar, file count, branch summary, row actions, and @path insertion. See Files plugin details.
Reminder summary
dsh plugin --profile web add https://github.com/op7418/pilot-harness/releases/latest/download/deepseek-ai-dsh-ui-schedule-summary-0.1.0-rc.5.tgz
Adds active-reminder metadata to Session hover details while the upstream Schedule plugin remains the reminder authority. See reminder plugin details.
Session-log export
dsh plugin --profile web add https://github.com/op7418/pilot-harness/releases/latest/download/deepseek-ai-dsh-session-log-export-0.1.0-rc.7.tgz
Adds per-Session ZIP export to the Trajectory toolbar and the /export command. See export plugin details.
Restart the Web profile after installation and use dsh --profile web --dump-config to confirm the added row. Files and Reminder summary require the Pilot Harness UI slot contracts included in Pilot Harness v0.1.0; older upstream Harness builds can install their bundles but cannot render those two UI contributions.
Remove a plugin with the same package name shown in its details page, for example:
dsh plugin --profile web remove @deepseek-ai/dsh-ui-worktree
Development
git clone https://github.com/op7418/pilot-harness.git
cd pilot-harness
pnpm install
pnpm run desktop:dev
Run the desktop checks with:
pnpm run desktop:test
pnpm --filter @deepseek-ai/dsh-desktop run typecheck
pnpm --filter @deepseek-ai/dsh-desktop run test:e2e
Official installers are never built or uploaded from a developer machine. Every verified push to main, and a manual workflow dispatch without a release tag, produces seven-day Actions preview artifacts on native macOS, Windows, and Linux runners. A version-matched v* tag starts the formal path, verifies the platform artifacts and macOS Developer ID signature, generates SHA256SUMS.txt, and publishes the GitHub Release.
The Sync DeepSeek Harness upstream workflow checks the newest non-draft official release every day at 09:00 Asia/Shanghai. A clean update is merged without force-pushing, verified, committed to main, and dispatched to the same native release pipeline as v<upstream-version>-pilot.1. A merge conflict opens or refreshes a GitHub Issue and stops before changing main; missing macOS signing secrets also open an issue and leave the verified source synchronized without publishing an unsigned release. Rerunning the workflow after resolving either condition resumes the pending release.
For the underlying system, read the DeepSeek Harness architecture, development guide, and desktop architecture.
Upstream, attribution, and trademark notice
Pilot Harness is an independent community project derived from the MIT-licensed DeepSeek Harness and visually inspired by CodePilot. It is not an official DeepSeek product and is not endorsed by or affiliated with DeepSeek. “DeepSeek”, “DeepSeek Harness”, and “CodePilot” remain the property of their respective owners.
License
Pilot Harness is available under the MIT License. Third-party software and licenses are listed in THIRD_PARTY_NOTICES.md.
Read the usage guide →
Install steps, key points, FAQ and compatibility for this plugin — auto-derived from indexed fields.
Listing badge
[](https://deepseek-plugin.org/plugins/op7418/pilot-harness/packages/bundle/headless)Paste this markdown into your GitHub README to link back to this listing. The badge only states the listing — not a security endorsement.