A terminal UI (TUI) for DeepSeek Harness.
Install
# from npm (prebuilt)
dsh plugin --profile web add @huiliyi37/dsh-tianshu-tui
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:huiliyi37/dsh-tianshu-tui
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
Turn DeepSeek Harness into a complete, fluid coding workspace in your terminal.
中文 · English

dsh-tianshu-tui is an interactive terminal UI plugin for the official DeepSeek Harness. Its lightweight, purpose-built ANSI renderer delivers streaming Markdown, tool cards, session restore and rewind, image and vision bridging, LSP diagnostics, 16 themes, and a complete slash-command and keyboard interface.
It is a presentation-only plugin: agent state comes from the session event stream. It does not run a second agent loop or silently inject its own prompts or tools.
What you get
| Capability | What it enables |
|---|---|
| Fluid conversations and tool views | Streaming Markdown, collapsible reasoning, grouped parallel tools, structured diffs, turn timing, and token metrics |
| A complete session workspace | Restore, switch, fork, rewind, and export sessions; queue messages while running or steer the active turn |
| Efficient input | Slash menu, @ path completion, history search, multi-line paste, external editor, and optional Vim keybindings |
| Images and vision | Paste and preview images inline; vision models receive them directly, while text-only models can use a vision bridge |
| Agent control panels | Approval diffs, plan mode, goals, tasks, skills, subagents, and workflow state in one place |
| A customizable development environment | 16 themes, LSP diagnostics, project memory, MCP browsing, and live model/reasoning-effort switching |
Quickstart
Requirements
| Component | Currently validated version |
|---|---|
| Node.js | >=24.9.0 |
| Package manager | pnpm, available through corepack enable |
| DeepSeek Harness | @deepseek-ai/dsh@0.2.2-rc.1, published on both the npm latest and next channels |
| This plugin | @huiliyi37/dsh-tianshu-tui@1.0.0-rc.5 |
The host's npm
latestandnexttags both currently point to0.2.2-rc.1. The install commands keep@nextexplicit to avoid an older global CLI. This package is not a standalone CLI.
One-click install (recommended)
The installer checks Node/pnpm, installs the official CLI, wires the plugin, and launches it:
# macOS / Linux
bash <(curl -fsSL https://raw.githubusercontent.com/huiliyi37/dsh-tianshu-tui/main/scripts/install-tui.sh)
# Windows PowerShell
powershell -ExecutionPolicy Bypass -Command "irm https://raw.githubusercontent.com/huiliyi37/dsh-tianshu-tui/main/scripts/install-tui.ps1 | iex"
To install without launching, append --no-launch on macOS/Linux. On Windows, clone the repository and run powershell -ExecutionPolicy Bypass -File scripts\install-tui.ps1 -NoLaunch.
Manual install
# 1. Add the plugin to an isolated tui profile
pnpm dlx @deepseek-ai/dsh@next plugin --profile tui add @huiliyi37/dsh-tianshu-tui
# 2. Launch
pnpm dlx @deepseek-ai/dsh@next --profile tui
Follow the first-run guide to configure an API key, or enter /key. The dsh-tianshu-tui welcome screen confirms a successful install. Quit with Ctrl+Q or /exit.
If an old global
dshcausesERR_FS_EISDIR, or npm 11 runs out of heap while installing the large host dependency tree, use thepnpm dlxcommands above. See Getting started for alternative setups and troubleshooting.
Everyday commands
Common commands
| Command | Action |
|---|---|
/session |
Create, list, switch, or restore sessions |
/fork · /rewind |
Explore a branch or roll back to a previous message boundary |
/model · /effort |
Switch the current session's model and reasoning effort |
/preset |
Inspect or switch standard / PTC / minimal / creative presets |
/status · /tasks · /subagents |
Inspect goals, tasks, and subagent state |
/theme · /density |
Change the theme or compact rendering |
/scroll · /export |
Browse the full transcript or export Markdown |
Keyboard shortcuts
| Key | Action |
|---|---|
Enter |
Send |
Shift+Enter |
Newline (or \+Enter to continue) |
Ctrl+N |
New session |
Ctrl+S |
Restore the most recent session |
Ctrl+Q |
Quit (same as /exit) |
Ctrl+P |
Command palette |
Ctrl+. |
Full keymap |
Ctrl+F / Ctrl+R |
History search; n/N next, p/P previous |
Ctrl+O |
Expand/collapse the latest reasoning block |
Ctrl+E |
Edit the input line with $EDITOR |
Ctrl+T |
Steer the active turn |
Ctrl+Enter |
Interrupt the active turn and send the draft (requires kitty keyboard protocol) |
Ctrl+C |
Interrupt the active turn; double-press on idle empty input to exit |
Ctrl+V |
Paste a clipboard image, falling back to text |
Alt+W |
Copy the selection to the system clipboard via OSC52 |
Shift+Tab |
Cycle normal → plan → always-approve |
Tab |
@ path completion; accept the slash-menu selection |
Ctrl+U |
Delete to line start |
↑/↓ |
Input history; menu selection; empty-input ↑ takes back a queued message |
PageUp/PageDown |
Slash-menu paging |
Esc |
Close a panel or cancel a question; double-press when idle to rewind |
t |
Approval card: remember this tool for the session |
a |
Approval card: allow for this session |
See the interaction guide for every command, approval action, Vim binding, and terminal-protocol detail.
Updating
npm installs check for updates at startup. You can also run /update inside the TUI. Set DSH_TUI_SKIP_UPDATE=1 to disable the startup check.
pnpm dlx @deepseek-ai/dsh@next plugin --profile tui add @huiliyi37/dsh-tianshu-tui
Current release: 1.0.0-rc.5, adapted to host 0.2.2-rc.1. This release aligns official dsh peers, Cordis ~4.1.0, and Node >=24.9.0; fixes the four presets, legacy list-agents removal, and PTC executor wiring; migrates model routing to persistent AgentModel state and fixes /effort and /btw; passes the current Agent scope to tool presenters; improves Provider 401/settings-revision handling; and turns the old invariant companion into a dependency-free no-op.
Upgrade by running /update and restarting, or rerun the plugin add command above. See CHANGELOG.md for the full release history, or run /changelog inside the TUI.
Documentation
| Document | What it covers |
|---|---|
| Getting started | Installation, launch, clean environments, and troubleshooting |
| Interaction | Commands, keybindings, panels, and input methods |
| Configuration | Assembly options, environment variables, presets, and runtime settings |
| Themes | Built-in palettes, custom colors, and terminal fallbacks |
| Plugin ecosystem | Companion plugins and extension points |
| Architecture · Adapter contract | Layers, event flow, service dependencies, and presentation boundaries |
| VS Code | Running in the VS Code terminal |
| Contributing · Developing | Local development, build, test, and release workflows |
Design principles
- Event-driven: all rendered state derives from session events; live rendering and restored transcripts share the same bridge.
- Presentation boundaries: no private prompt, tool, or context surfaces, and no direct mutation of agent request bodies.
- Explicit degradation: missing optional host services produce an actionable message instead of a blank panel or a startup failure.
- Terminal-friendly: supports narrow screens, 16-color terminals, and
NO_COLOR, with handling for wide CJK text, long output, and streaming refreshes.
See the architecture guide and ADAPTER.md for implementation details and boundary constraints.
Known limitations
- Re-interrogating images with
ask_imagerequires the companionvision-askplugin; basic image submission and vision bridging do not. - LSP servers start lazily but may remain resident in large repositories;
rootUrifollows the first session's working directory after a session switch. - Upstream schedule depends on the Web
sessionController, so this TUI does not mount that tool surface yet.
Contributing
Issues and pull requests are welcome. Read the contribution guide first, then run:
npm run typecheck
npm test
npm run build
Official site and community
| Destination | About |
|---|---|
| Tianshu Harness website | Official website and project overview |
| Tianshu-harness upstream | Upstream source code, issues, and releases |
| Tianshu forum | User discussions, experience sharing, and support |
Community ecosystem
| Project | About |
|---|---|
| dshfind | Chinese DeepSeek Harness learning and plugin community |
| dsh-web-ui | DSH Web UI plugins and skins |
| dsh-TUI | Claude Code-style fullscreen terminal plugin |
| deepseek-harness-ux | Focused progress and automatic history folding for long tasks |
| DSH-better-sidebar | Sidebar workbench for files, terminals, Git, and subagents |
| DSH Desktop | Community desktop client with remote task control |
| dsh-whale-report | Session, cost, tool-call, and risk reports |
License and provenance
Open source under Apache-2.0. The terminal renderer evolved from the author's Tianshu-harness. See SOURCE-MAP.md and NOTICE for file-level provenance and modification notices.
Links
More in this category
zhu1090093659/dsh-web#packages/dsh-task-board★ 10357
Task board for the dsh web GUI: a sidebar multi-column kanban whose cards run in real DSH agent sessions and can also be scheduled with cron expressions, executed host-side even with the browser closed.
zhu1090093659/dsh-web#packages/dsh-web-all★ 10357
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.
ccch1mneyyy/dsh-TUI★ 7530
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 7157
A fixed-corner whale widget for the DSH web GUI — balance, today's usage and per-turn cost with peak/off-peak pricing, editable balance-alert and daily-budget bubbles, a module-based custom bubble queue with A/B weighted choices and random lines or images, 30+ vendor templates (OpenAI, OpenRouter, Kimi, SiliconFlow, Ark, Zhipu, MiniMax and more) with per-model balance and subscription quota, plus task-end sound, imported audio, custom roles and a resource manager. Local-only, no telemetry.
omdsh-dev/DSH-better-sidebar★ 5092
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
Devin-AXIS/deepseek-design#deepseek-idesign★ 1808
Visual design studio for websites, app prototypes, posters, cards, reports, and magazines, with templates, direct element editing, selection-aware AI draft handoff, and export.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.