Uniterra

September 6, 2026 · View on GitHub

A desktop app built on the DeepSeek Harness (dsh) agent runtime and community dsh plugins: an Electron shell launches the bundled dsh CLI, provisions built-in plugins and skills into the user's profile, and hosts the dsh Web UI in a window. The goal is to let you build your own desktop agent app through plugins — it ships 9 npm community plugins, 2 vendored community plugins (dsh-shortcuts, plus the dsh_workflow dynamic-workflow layer), 1 optional vendored plugin (the Deep Whale skin, opt-in), and 1 in-house provider plugin, and you can install more at any time.

Docs: Documentation (architecture diagrams, module deep dives, setup, testing, workflows) · Spec: AGENTS.md

Built-in Plugins

The app ships 13 built-in plugins (9 npm community, 2 vendored, 1 optional, 1 in-house). Source and license:

PluginTypeSourceLicense
dshmarketnpmdsh-market/dsh-marketMIT
dsh-notifiernpmTHEWOLFWALKER/dsh-notifierMIT
dsh-better-sidebarnpmomdsh-dev/DSH-better-sidebarMIT
dsh-file-uploadnpmHongMing-Huang/dsh-file-uploadMIT
dsh-find-pluginnpmawesome-dsh-plugin/dsh-find-pluginMIT
dsh-subagent-model-pickernpmnpm package (author ninjasln, no public repo)MIT
dsh-tool-gitnpmlxj808624/dsh-tool-gitMIT
dsh-browser-playwrightnpmChenyuHeee/dsh-browser-playwrightMIT
dsh-computer-usenpm988hj7tczd-oss/dsh-computer-useMIT
dsh-deep-whaleoptionalSmall-tailqwq/dsh-deep-whaleCC BY-NC-SA 4.0
dsh-shortcutsvendoredRicketts-Guo/dsh-shortcutsMIT
@dsh-external/workflowvendoredomdsh-dev/dsh_workflowMIT
@uniterra-solutions/uniterra-providerin-houseUniterra-Solutions/uniterra (packages/uniterra-provider)MIT

Vendored plugins are pinned at fixed commits — see vendor/dsh-plugins/VENDOR.md. We vendor a plugin only because we customize it (edit its copied source in place, recording the divergence + pending-upstream note in the VENDOR.md pin ledger); a plugin we do not modify stays a node_modules/npm import.

dsh-deep-whale is an optional (opt-in) skin — not installed by default. It is licensed under CC BY-NC-SA 4.0 and is redistributed free of charge, unmodified, for non-commercial use. If you are its author and do not want it bundled, please open an issue and we will remove it.

Built-in Workflows

WorkflowDescription
TDD development workflow (uniterra-planuniterra-implementuniterra-simplify / uniterra-review)Plan → clarify requirements + design interactively → scaffold the run dir (init_plan.mjs) and write prd.md / design.md / acceptance.md → confirm the plan with the user → implement: write ALL failing property tests, decompose into a task list (each brief is scaffolded by init_task.mjs under .dsh/<YYYYMMDD-HHmmss>/<project>/<task>.md with a per-project task.json manifest and inlined into the subagent prompt by the workflow — args carries only a promptFile path, keeping the run_workflow JSON tiny), run a batched / full-parallel workflow of subagents → review (property-based, THREE layers — all proven by PBT: (1) intra-module: model the module's own business logic + lifecycle — every operation, every state, happy paths included, not just the paths that look suspicious — and prove its state / transition / composition / lifecycle / data invariants with random operation-sequence properties; (2) interaction: model + prove the module × each counterpart's contract — emit/accept compatibility, event order, ownership, error propagation — with the counterpart mocked to its contract and its states injected; (3) integration: model + prove the system slices involving the module with the external world mocked (fs/network/env/clock) — end-to-end no loss / no duplication, leak-free teardown, restart/replay correctness, failures injected at any point. Security invariants come from the security checklist and are verified via PBT too; all the property tests are written in one pass and brute-forced with >10,000-run PBT in a background job, then every counterexample is shrunk into a structured error report (every adversarial test named after the test purpose it pins); a fixer repairs each and reports back, and the main agent — you — aggregates by severity + user impact without re-running the tests) and/or simplify (over-engineering checklist, behaviour-preserving; the plan's design is an authoritative constraint). Property testing blocks the bugs a known invariant would introduce, during development
TDD debugging workflow (uniterra-pbt-debugging)Don't change code first: read the business logic, encode it as invariants, reproduce the bug via property testing (must fail; the counterexample is the reproduction) → fix the root cause → lock it with regression tests. Reduces debugging to a machine-search problem, maximizing an AI agent's ability to fix software defects
Project documentation management (project-documentation, etc.)Structured docs/ tree generation and incremental updates; plus QA acceptance (uniterra-qa), AGENTS.md management (manage-agents-md), git workflows (manage-git-repo)

Workflow details: docs/modules/uniterra-skills.md · common task recipes: docs/workflows.md

Built-in Provider Enhancement

@uniterra-solutions/uniterra-provider: a dual-protocol (OpenAI chat completions + Responses API) LLM provider plugin that can be configured against any OpenAI-compatible external provider, with upstream model metadata (context window / output tokens / reasoning efforts) auto-detected via models.dev, and a Web settings page for managing the gateway and per-model protocol overrides. See docs/modules/uniterra-provider.md.

Quick Start

# Install the app (macOS / Windows 10+)
npm install -g @uniterra-solutions/uniterra
uniterra setup
# macOS → ~/Applications/Uniterra.app; Windows → %LOCALAPPDATA%\Programs\cardo (with a Start Menu shortcut)
uniterra update
# One-command update: refresh the CLI + rebuild/reinstall the app + auto-relaunch (Update Now in the app runs this too)

# Development
git clone https://github.com/Uniterra-Solutions/uniterra.git
cd uniterra
pnpm install --frozen-lockfile
pnpm build && pnpm lint && pnpm typecheck
pnpm build:vendored-dsh                                   # build the vendored DeepSeek Harness source (one-time; dev then runs dsh from this source)
pnpm --filter @uniterra-solutions/uniterra-desktop dev    # dev mode (does not touch the real ~/.dsh)

The dsh runtime source is vendored at vendor/dsh-harness (pinned dsh-v0.1.2-rc.1 — npm ships compiled lib/ only). The dev app resolves its built CLI first, so a source edit there runs on the next dev boot; see vendor/dsh-harness/VENDOR.md and pnpm run build:vendored-dsh for the loop.

Test commands and the verification matrix: docs/testing.md · environment variables: docs/setup.md

Tech Stack

Node ≥ 22 · Electron 37 · @deepseek-ai/dsh 0.1.2-rc.1 (pinned exact) · TypeScript ~5.9 (NodeNext ESM) · pnpm 11 · fast-check (PBT) · esbuild / electron-builder. Full list: docs/tech-stack.md

Conventions

NodeNext ESM (internal imports carry .js suffixes) · named exports only · no any · @deepseek-ai/* pinned exact · every business logic has tests. See AGENTS.md and docs/conventions.md.

License

MIT