Preface

DeepSeek Harness (dsh) packages models, tools, sessions, sandboxes and interfaces as replaceable plugins. The official default entry point is the Web UI: after running npx @deepseek-ai/dsh web, open http://127.0.0.1:3080 in your browser. For those who are used to coding in the terminal, switching back and forth to the browser is inconvenient: streaming thought processes, reviewing diffs, switching between multiple sessions, and pasting images are all better suited for a full-screen TUI.

dsh-tianshu-tui is a community plugin built along this direction. It does not replace the official CLI, but attaches an interactive terminal interface to the official DeepSeek Harness’s tui profile. The rendering core comes from Tianshu-Tui, maintained by huiliyi37. The community plugin directory lists it under “Interface Enhancements”, with an inclusion date of 2026-08-15, when it had 143 stars.

This article is organized based on checks against the plugin directory page, GitHub README / Quick Start documentation, and the npm package @huiliyi37/dsh-tianshu-tui: covering what it is, what it can do, how to install it, and how to use it. The community directory deepseek-harness-plugin.com is an independent site and has no official affiliation with DeepSeek / Ho Fung. It should not be treated as an official app store.

What is it

dsh-tianshu-tui (npm package name @huiliyi37/dsh-tianshu-tui) is an interactive terminal UI plugin running on the official @deepseek-ai/dsh. It is licensed under Apache-2.0, and its primary language is TypeScript. The current npm latest version is 0.1.2-rc.10 (released on 2026-08-16), and the host CLI documentation requires 0.1.0-rc.6.

The problem it solves can be summed up in one sentence: provide a full-screen terminal workspace within the official dsh process, instead of spinning up a separate harness.

The repository README clearly defines its boundaries: the UI is purely a presentation layer, and all agent state comes from the session event stream. The TUI itself does not register prompts, tools, or context facets; user input is converted into regular log messages, and the rendering state is derived from session events. Capabilities such as TDD gates, evidence gates, vision bridge, and semantic retrieval are contained in separate packages of the host harness and are not distributed with this plugin – the TUI is only their primary interaction surface. When the host service is not installed, the corresponding panel will display a warning instead of failing to start with a blank screen.

Three easily confused names:

Name Actual identity
dsh-tianshu-tui (this article) TUI plugin for official dsh, data directory ~/.dsh
oh-my-tianshu (formerly tianshu-public) Standalone integrated distribution with built-in CLI, home directory isolated from the official one
Tianshu-Tui Upstream source of the rendering core for this plugin (Apache-2.0, see SOURCE-MAP.md for file-by-file attribution)

There is another full-screen terminal plugin in the same category: dsh-TUI (Claude Code style). Both are community interface enhancements and do not share the same codebase.

Core Features

The following capabilities are taken from the repository README and Quick Start documentation, and are not extra features from the demo environment.

Terminal Session Workspace

After startup, it presents a complete session interface, not a single-line REPL:
- Welcome page: brand header, short session ID, environment checks (API key / git readiness)
- Top bar: current working directory, model, git branch and number of uncommitted files
- Bottom three rows: rounded input box → footer (mode badge + shortcut keys) → metrics (model / cost / context usage / tokens / elapsed time)
- Conversation stream: Markdown rendering, tool card coloring and timing, parallel tool calls grouped into collapsible sections
- Reasoning channel: displays real-time header lines during thinking, collapses into a compact line like ✻ Thought (3.2s) · 12 lines after completion, press Ctrl+O to expand in-place

Common session commands:
- /session new|list|switch: create new, list, and switch sessions; restores and replays the transcript via the same rendering bridge when resumed
- /fork / /branch: copy the current history to a child session, optionally with a starting instruction
- /rewind: roll back to a specified message (session truncation, optional file rollback to the pre-boundary snapshot)
- /export: export the transcript as Markdown
- /steer or Ctrl+T: mid-turn steering without interrupting the current turn
- /compact: compress session context

When multiple sessions are active, a short ID tab bar will appear above the input track. Press Ctrl+X to cycle through sessions, Alt+1~Alt+9 to jump directly to a specific session. When idle, press Esc twice within 1 second to open the rewind panel; when output is in progress, press Esc once to interrupt, with the same behavior as Ctrl+C.

Input, Approval and Modes

The input surface is designed for terminal coding scenarios:
- Type / to open the slash menu: fuzzy prefix matching, MRU sorting, ghost preview
- Press Tab in an empty input box to bring up the full command menu, press Enter to execute the selected command
- @ path Tab completion and @mention expansion
- Optional vim keybindings; press Ctrl+E to edit the current input with $EDITOR
- Ctrl+F to search history; Ctrl+P for the command palette; Ctrl+. to bring up the keybindings list
- Real paths starting with / (such as /src/main.ts, ~/xxx, Windows drive letters) will no longer be misjudged as slash commands

Approval and questioning are also done in the terminal. Pending tool calls can display inline diffs, with y / N / Ctrl+C to finalize. Press Shift+Tab to cycle between normalplanalways-approve modes. Plan mode will change the footer badge; always-approve is a session-level local state that resets when switching sessions or exiting.

Real-time panels include /status, /config, /skills, /tasks, /subagents, /workflow, /goal. /cost accumulates usage by model bucket and provides USD estimates (built-in flash/pro pricing tables, no price guessing for unknown models). When context usage reaches 95%, the footer will add a prefix.

Images, Models and Workflow Observation Panels

The image link is end-to-end: press Ctrl+V to read images from the clipboard (falls back to text if no image is detected), use the terminal graphics protocol for inline rendering in kitty / iTerm2, then pass the image to the model via the harness attachment service. Forward directly when the main model declares supportsVision; when the main model does not support vision, use the vision bridge: generate a description using a separate vision model before submission. Bridge availability comes from the assembly configuration vision.bridgeEnabled or the host visionBridge service; if neither is available, the image will not be sent and a warning will be given. To repeatedly ask questions about the same image, you need to install the companion package vision-ask/ from the same repository.

Run /model without parameters to open the selector, allowing hot-swapping the current session model. spark-flash / spark-pro are aliases mapped to deepseek-v4-flash / deepseek-v4-pro on the official routing respectively. Use /effort to set the reasoning level (off / high / max / auto).

Use /theme to switch themes. The repository documentation lists 16 built-in color palettes, and also supports custom: for custom themes. Terminals that do not support true color will fall back to 16 colors; legacy terminals will convert emojis to ASCII to avoid layout breaks.

It should be noted that verification gates (RED-first / TDD gates from dsh-evidence-gate), failure routing, memory (/memory, /remember), semantic retrieval, etc., are marked in the README as host capabilities that co-evolve with the harness. This plugin provides entry points and observation panels for /workflow, /memory, /doctor, /btw, etc., and does not bundle these packages into the TUI bundle.

Installation and Activation

The installation command given on the plugin directory page is:

dsh plugin add github:huiliyi37/dsh-tianshu-tui

For reproducible installations, pin the commit hash as specified on the directory page:

dsh plugin add github:huiliyi37/dsh-tianshu-tui#<commit>

Replace <commit> with the actual commit hash from the repository. The plugin runs with the permissions of the current dsh process, and may execute code during installation. You should inspect the source code repository and Apache-2.0 license before installing.

The repository README provides more details: this package is not a standalone program, and running npm i alone will not get it working. You first need to have the official CLI @deepseek-ai/dsh (documentation requires 0.1.0-rc.6), and meet the following requirements:
- Node.js ^22.19 || >=24
- pnpm is available on PATH (dsh plugin forwards commands to it)
- A DEEPSEEK_API_KEY is required to run models, or you can go through the official CLI login flow

The README emphasizes: Do not directly run the old dsh on your PATH. If dsh --version is not 0.1.0-rc.6 (for example, ~/.local/bin/dsh), you may enter a local staging environment and encounter ERR_FS_EISDIR. It recommends always using npx and installing the plugin into a profile named tui:

npx -y @deepseek-ai/dsh plugin --profile tui add @huiliyi37/dsh-tianshu-tui
npx -y @deepseek-ai/dsh --profile tui

To install from GitHub and use the same profile:

npx -y @deepseek-ai/dsh plugin --profile tui add github:huiliyi37/dsh-tianshu-tui

The repository already includes lib/index.js, so you do not need to rebuild the package. pnpm may prompt about missing peers, which the documentation says can be ignored: the peers are provided by the official dsh host.

You will know the installation is successful when you see the branded dsh-tianshu-tui welcome page. Press Ctrl+Q or /exit to quit. If you have already installed the official CLI globally and the version matches the documentation, you can replace npx -y @deepseek-ai/dsh with dsh in the above commands.

If npx still reports ERR_FS_EISDIR, the documentation recommends a workaround by using a clean home directory for installation:

DSH_HOME=/tmp/dsh-tianshu npx -y @deepseek-ai/dsh plugin --profile tui add @huiliyi37/dsh-tianshu-tui
DSH_HOME=/tmp/dsh-tianshu npx -y @deepseek-ai/dsh --profile tui

After installing from npm, each startup will check against the npm latest version, and write updates to the profile if a newer version is available. Set DSH_TUI_SKIP_UPDATE=1 to skip online version checks. Installations via github: / link: will not be rewritten as npm packages. Starting from version 0.1.2-rc.10, the TUI will automatically restart after an in-place update if no session is active; if a session is already running, it will only prompt without interrupting the current work. You can also manually restart the same process by entering /restart.

Typical Usage

The following operations are taken from docs/getting-started.md and the README, and can be reproduced exactly as written.

1. Chat directly after startup

After a successful startup, the welcome page will check your API key and git setup. Just type your question and press Enter to start chatting. Common keybindings:

What you want to do How to do it
View all shortcut keys Ctrl+.
Switch models Press Enter after /model to select via ↑↓, or use /model <name> directly
Switch themes Press Enter after /theme to select via ↑↓ (real-time preview available)
New session / resume session Ctrl+N / Ctrl+S
Interrupt the current response Ctrl+C (when output is in progress); for idle empty input, press Esc twice to exit
Exit the program Ctrl+Q or /exit

/help will list all commands; /help <command> shows details for a single command.

2. Manage sessions and models with slash commands

/session new
/model spark-flash
/effort high
/theme graphite
/export ./session.md

/model spark-flash and /model spark-pro do not register a provider named spark, they only map to the already registered deepseek-official routing. After switching models, the footer’s glance and vision capability prompts will update to match the actual model.

For exploratory changes, use /fork to create a child session; use /rewind to go back to a previous round. Use /export to save the current conversation as a record.

3. View workflow, memory and diagnostics

When the corresponding host services are installed:

/workflow
/status
/memory
/remember 这个约定下次还要用
/doctor
/mcp

/workflow is a runtime observation panel: displays duration, run name, number of phases, and workflow/log narration. /memory browses cross-session memory (list / filter / delete / preview). /doctor runs terminal diagnostics and provides repair guidance. /mcp lists connected MCP servers and the number of tools.

When plugins such as goal / subagent / workflow are missing, the TUI will still start, and the relevant commands will display a warning instead of showing a blank screen. For model-side LSP tools (such as lsp_goto_definition), the documentation points to the community plugin omdsh-dev/dsh-lsp. The TUI display bridge will consume the same LSP server without spinning up a second instance.

Applicable Scenarios and Notes

It is suitable for these situations:
- You are already using the official DeepSeek Harness and want to keep daily coding interactions in the terminal instead of the default Web UI
- You need a full-screen view of thought processes, tool diffs, approval cards, multi-session tabs, and workflow runtime status
- Your terminal supports the kitty / iTerm2 graphics protocol and want to paste screenshots directly into the conversation
- Install it alongside the standalone distribution oh-my-tianshu: the two have isolated home directories, and the documentation states that they can coexist; set DSH_HOME=~/.dsh-tianshu for the tianshu instance when running together

Please note the following points, all taken from the directory page or repository documentation:
1. Permissions and Supply Chain. The plugin runs with the permissions of the current dsh process, and may execute code during installation. First inspect the GitHub source code, LICENSE, SOURCE-MAP.md and NOTICE. For production or reproducible environments, pin the version with github:huiliyi37/dsh-tianshu-tui#<commit>.
2. It is not a standalone harness. Installing only this npm package will not result in a runnable agent. Host capabilities (evidence gates, vision bridge, memory, semantic indexing) are contained in other packages; when not installed, the corresponding panels will clearly indicate that they are unavailable.
3. Node and CLI versions must match. The documentation requires Node.js ^22.19 || >=24 and the official CLI 0.1.0-rc.6. The old dsh on your PATH is a common cause of ERR_FS_EISDIR.
4. Do not run tsdown on this package from the root of the DeepSeek Harness workspace. The README notes that this will write the unreleased @deepseek-ai/dsh-root into the bundle, which will cause a load failure.
5. Image re-querying is a companion capability. The vision bridge for one-time submissions is on the host side; ask_image and the image registry are in the vision-ask/ directory of the same repository. When not installed, you cannot re-query about already sent images.
6. LSP is only a presentation layer by default. The built-in bridge renders diagnostics on tool card badges and the /lsp panel, does not write session events, and does not register model tool surfaces. LSP tools accessible to the model require a separate installation of dsh-lsp.
7. Known structural debt. The README notes that app.ts is still a relatively large monolith (approximately 3.2k lines), and rendering combinations and key arbitration are still contained within it. This does not affect installation or usage, but you should be aware of this during secondary development.

Summary

dsh-tianshu-tui adds a full-screen terminal UI to the official DeepSeek Harness: session management, approval, thought folding, themes, images, and workflow observation panels are all completed in the TTY. It deliberately restricts itself to a presentation layer, where agent state still flows through session