Code-first React and TypeScript task apps rendered inline, in Canvas, full screen, or on localhost, with interaction state available to later agent turns and approval-gated MCP and API access.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-plugin-genui
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:pengyue-polaron/deepseek-harness-genui
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. Only install sources you trust, and pin a commit (github:owner/repo#sha).
README
English | 简体中文
DeepSeek Harness GenUI is a runtime interface layer for Agent tasks. When text gets in the way, the Agent can make the current task grow a focused UI—to explain a difficult relationship, collect a complex decision, or operate a connected tool.
The interface is not the output. It is part of the conversation.
In that conversation, the UI can be Agent output, structured user input, and—after approval—an entry point to real tools.
What Changes
| What it creates | What happens next | |
|---|---|---|
| App builder | A standalone app to keep or share | The app becomes the product |
| MCP Apps | A prepared UI shipped by a tool author | The UI stays attached to that tool |
| DeepSeek Harness GenUI | The interface missing from the current task | Saved state returns to the Agent, and approved tools can continue the work |
When an Interface Helps
It does two jobs: make difficult relationships visible, and turn awkward text-based choices into direct manipulation.
Plain questions, rewriting, summaries, and simple lists stay in prose.
Inline & Canvas
The same app can sit inside the answer or open beside the conversation.
| Inline | Canvas |
|---|---|
| A compact control or focused choice. | More room without covering the conversation. |
Inline, Canvas, full screen, and localhost read and write the same task state. Selections and inputs saved by the interface remain available to later Agent turns.
CLI Example
The terminal profile returns a localhost app. A follow-up can refer to the path already selected in that app.
❯ Explain how a generated app reaches the permission-gated runtime in this
repository. Build an interactive code-path explorer and return a localhost URL.
I mapped src/tools.ts → src/artifacts/builder.ts → src/runtime/server.ts
→ src/artifacts/registry.ts.
http://127.0.0.1:<port>/genui/app/<task-app>
❯ Where does the path I selected stop?
It reaches the permission check in src/runtime/server.ts, then stops before
the connected tool runs because access has not been allowed.
How It Works
- The Agent keeps the explanation in the conversation and creates one focused interface when interaction adds value.
- It writes React + TypeScript and declares only the exact connected Harness/MCP/Skill tools or credential-free public HTTPS prefixes it needs; the plugin then builds and checks the interface.
- The interface saves semantic values—selections, form answers, drafts, and progress—to the task. When the user follows up, the Agent can read those values instead of asking them to repeat the result.
- Later edits update the same app without replacing a working version with a failed one.
Before the first use of each declared capability, Harness asks for task-scoped approval; undeclared calls are blocked. In Web, access can be reviewed or revoked from the app card. MCP credentials never enter generated code, while direct API requests are limited to credential-free public HTTPS.
Design MD
Visual direction lives in DESIGN.md. Four profiles are included:
| Profile | Best fit |
|---|---|
editorial-workbench |
Reading, planning, forms, and content-heavy work |
ledger-grid |
Comparisons, schedules, evidence, and shortlists |
field-atlas |
Scientific, causal, and spatial explanations |
kinetic-signal |
Changing data, connected tools, and user-triggered actions |
Open Settings → Plugins → Plugin configuration to use automatic selection, choose a profile, import a DESIGN.md, or export one as a starting point. The choice applies to new apps without adding design controls to them.
Install
Use Node.js ^22.19.0 || >=24. This release is tested with DeepSeek Harness 0.1.0-rc.6.
dsh plugin --profile web add dsh-plugin-genui
dsh plugin --profile web exec playwright install chromium
dsh --profile web
The Web profile supports Inline, Canvas, full screen, and localhost links. For a terminal profile, replace web with tui; TUI returns localhost links and does not embed Canvas. Connect MCP servers to the same profile as usual.
Safety
Generated code runs in a sandbox. Tool calls and public HTTPS routes must be declared, scoped, and approved. Temporary links and grants expire after 7 days; saved task state expires 7 days after its last update. Return to the app card in the task to review or remove access.
The plugin uses DeepSeek Harness + Cordis, React 18 + TypeScript, esbuild, Playwright, and Vitest.
Development
Building from source requires pnpm 11.
pnpm install
pnpm run typecheck
pnpm test
pnpm run package:plugin
Acceptance scenarios · Screenshot guide · Contributing · MIT
Links
More in this category
zhu1090093659/dsh-web-ui#packages/dsh-web-ui-all★ 2775
Plugin and skin collection for the DSH Web UI: task board, Git graph, right-side panel, remote mobile UI, pet, live token stats, and a skin center.
omdsh-dev/DSH-better-sidebar★ 1305
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
ccch1mneyyy/dsh-TUI★ 1293
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
omdsh-dev/dsh-at-file★ 225
Codex-style `@file` mentions: search workspace files in the composer and attach their contents to prompts.
huiliyi37/dsh-tianshu-tui★ 174
A terminal UI (TUI) for DeepSeek Harness.
Nagi-ovo/dsh-visualize★ 126
In-conversation generative UI: the model renders interactive HTML cards into the chat stream, with streaming preview and sandboxed rendering.