Preface¶
DeepSeek Harness (dsh) turns model adaptation, tools, sessions, sandboxes, and UI into replaceable plugins, with the official slogan “Everything is a Plugin”. The default entry point during the developer preview phase is the web interface: running npx @deepseek-ai/dsh web lets you run agents directly in your browser. For those accustomed to SSH, tmux, and pure terminals, there is an immediate gap—the official repository itself does not provide a full-screen TUI.
The community directory DeepSeek Harness Plugin Repository categorizes and hosts such extensions by functionality. Note that this site is an independent community directory, not officially affiliated with DeepSeek / Fangjia, and is not an official app store. Under the “Interface Enhancement” category in the directory, the featured entry dsh-TUI connects Claude Code-style full-screen terminal interactions to the existing dsh service: a pixel whale header bar, real-time activity status line, streaming thought expansion, double-press Esc for time travel, as well as context progress bars and TPS gauges.
This article is collated by cross-checking the directory detail page, GitHub repository README, docs/getting-started.md, docs/architecture.md, npm package descriptions, and the DeepSeek Harness official repository.
What is this¶
dsh-TUI is a full-screen terminal interface plugin for DeepSeek Harness, maintained by GitHub user ccch1mneyyy, licensed under MIT, primarily written in TypeScript. The repository address is ccch1mneyyy/dsh-TUI, and the npm package name is @deepseek-harness-tui/dsh-tui. At the time of writing this draft, the GitHub API showed 1551 stars, and the current version on npm is 0.8.0; the community directory page listed 1058 stars at the time, meaning the directory data may be lagging.
It solves the problem of “dsh can run agents, but there is no complete interactive interface in the terminal”. The plugin is attached to an independent dsh-tui profile via the Cordis pattern, without modifying the DeepSeek Harness core source code: it can be enabled by installing, and no core patches will remain after uninstallation. The TUI only handles interaction and presentation; model calls, tool execution, fork/resume, compaction, and persistence are still handled by dsh’s existing services, and session logs are the true source of conversations.
The repository README states that this plugin was featured as a “beta user selected plugin” by the official DeepSeek Harness WeChat public account. This is the repository’s own inclusion statement, and does not change the fact that it remains a community-maintained plugin.
Core Features¶
According to the README and interaction documentation, the capabilities can be divided into the following sections.
- Terminal-native conversation. Streaming Markdown, structured tool cards,
/commands and@file completion (completion works anywhere in the message; text will have file content appended, and PNG/JPEG/WebP/GIF images are sent as persistent image blocks), history search, and message selection. There are two rendering modes: inline and alternate-screen; use/langto switch between Chinese and English interfaces. - Observable Agent status. Real-time activity status line, context segment progress bar, TPS gauge, cache hit rate, inference level, input/output tokens, and Git/session information. The activity status line reuses the author’s
dsh-working-activitystate machine, derived from session events within the process without writing UI state into shared logs. The TPS gauge uses a streaming 1/8 grid gauge according to the repository description, with speed semantic coloring: ≥50 for green, ≥20 for yellow, <20 for red. - **Complete session workflow
./resumeopens a full-screen session browser,/newcreates a new session,/compactcompresses context,/exportexports Markdown, and/btwsends side questions that are not added to the main history. When the input box is empty, pressEsc` twice to perform session rewind/fork at turn boundaries: after selecting a user message, the history is rewound to before that boundary, and the original message is returned to the input box for modification and resending. - Integrated with existing dsh capabilities. Agent presets, Skills, MCP, Goals, Todos, sub-agents, and
ask_user_questionquestionnaires all use existing services or command registries, rather than setting up a separate Agent system in the TUI. Presets include the officialstandard/code/minimal/cordis, as well as the “Liang Shen Mode”liangshenincluded with the package, which can be switched with/preset; sessions that have already generated conversations cannot have their preset changed in-place. - Rendering for long sessions. Event-driven projection, differential terminal output, message virtualization, replay merging, and bounded caching to avoid per-frame costs growing infinitely with the session. Off-screen message rows become fixed-height placeholders and do not participate in full subtree layout.
Installation and Activation¶
The installation command given on the directory detail page is as follows, run it in a terminal where the dsh CLI has already been installed:
dsh plugin add github:ccch1mneyyy/dsh-TUI
For reproducible installations, the directory page recommends pinning the commit hash:
dsh plugin add github:ccch1mneyyy/dsh-TUI#commit
Replace #commit with the actual commit hash. The plugin runs with the permissions of the current dsh process, and may execute code during installation; you should inspect the source repository and license before installing.
The path recommended by the repository README is more complete: install the official CLI and this plugin globally, and the first launch will automatically initialize the dsh-tui profile. Prerequisites are Node.js ^22.19 || >=24, the official @deepseek-ai/dsh, pnpm 10 or higher, and a terminal TTY that supports interactive input. You will also need DEEPSEEK_API_KEY to run models.
# 1. Install CLI + this plugin globally (comes with the dsh-tui command)
npm install -g @deepseek-ai/dsh @deepseek-harness-tui/dsh-tui
# 2. Install pnpm first if you haven't already (required for first profile initialization)
npm install -g pnpm
# Or: corepack enable pnpm
# 3. Launch; the first run will execute
# dsh plugin --profile dsh-tui add @deepseek-harness-tui/dsh-tui@<version>
dsh-tui
Manual steps are equivalent to the above:
npm install -g @deepseek-ai/dsh
dsh plugin --profile dsh-tui add @deepseek-harness-tui/dsh-tui
dsh --profile dsh-tui
dsh-tui is equivalent to dsh --profile dsh-tui. The command starts from the current directory, and the Agent’s default working directory is also the current directory, so you should cd to the target project first before starting. On macOS/Linux, export the API key like this:
export DEEPSEEK_API_KEY='your-key'
For PowerShell:
$env:DEEPSEEK_API_KEY = 'your-key'
Never paste your real key into a repository. You can also set DEEPSEEK_BASE_URL for custom compatible endpoints.
For updates, the repository requires explicitly including @latest, otherwise pnpm may resolve locally according to the version range recorded in the profile, which will appear as “repeating the installation command but the version does not change”:
dsh plugin --profile dsh-tui add @deepseek-harness-tui/dsh-tui@latest
Entering /update in the TUI will also update the installed @deepseek-harness-tui/dsh-tui and automatically restart and restore the current session. The current version will be displayed in the upper right corner of the launch banner (✦ dsh-TUI vX.Y.Z).
If you used the unscoped packages dsh-cc-tui and cc-tui profile in older versions, you need to migrate to the new package and new profile, and do not add both the old and new packages to the same profile. Environment variables have been unified from CC_TUI_*/DSH_CC_* to DSH_TUI_*, and the data directory has been changed from ~/.dsh-cc to ~/.dsh-tui; if the old directory exists and the new directory does not on first launch, the contents will be copied (not moved) as a whole and a prompt will be shown.
Typical Usage¶
Navigate to your project directory and launch:
cd /path/to/your-project
dsh-tui
Resume the last session:
dsh-tui --resume
Windows repository checkouts also provide dsh-tui.cmd, which behaves equivalently. dsh-tui does not support being launched with stdout redirected, and must be run in an interactive terminal.
After entering, common operations are as follows.
- Conversation. Press
Enterto send content after typing, pressShift+Enterfor a new line. While the model is working:Entersteers the text to the next turn boundary,Tabformats it as a follow-up,Ctrl+Enterinterrupts the current turn and sends immediately.Ctrl+Oexpands or collapses the full thought text, tool parameters, and outputs. - Time travel. When the input box is empty, press
Esctwice to open the user message list, fork a branching session after selecting and confirming. You don’t have to discard the entire session when the agent goes off track. PressCtrl+Ctwice while idle to exit. - Session management. Enter
/to open the command menu./resumebrowses and restores historical sessions (supports search, preview, cross-project; sub-agent runs are collapsed by default),/newcreates a new session,/compactcompresses context,/exportexports Markdown, and/btw <question>sends a single-turn side question that is not added to the session log./modelswitches models via session fork rather than in-place replacement: the history remains intact, the new session routes to the new model, and the old session remains in the/resumelist. - **Environment self-check
./doctorshows terminal type and mode,/statusshows session information,/costshows token usage,/permissionsshows permission descriptions, and/mcpshows MCP connection status. Use/themeto switch themes (auto/light/dark/dark-ansi), or you can place custom JSON themes in~/.dsh-tui/themes/`.
There are two ways to use it in VS Code: run dsh-tui directly in the integrated terminal; or install the companion extension dsh-tui-vscode (publisher baobaolaodie, already listed on the VS Code Marketplace) according to the repository’s docs/vscode.md. The extension itself is in a separate repository and is not covered by this installation guide.
Applicable Scenarios and Notes¶
The directory page clearly states the target users: developers who live in the terminal, and can run DeepSeek Harness without a browser.
- When managing agents on a server via SSH or tmux, you do not need to do port forwarding or open a browser.
- On small VPS or laptops running heavy rebuilds, the TUI uses fewer resources than browser tabs.
- When you need the Claude Code-style full-screen status line, streaming thoughts, and double-press Esc to go back terminal experience, this is the matching complementary plugin currently available in the directory.
There are several boundaries you must review before using.
The plugin runs with the permissions of the current dsh process. dsh-TUI itself does not implement an independent sandbox, but uses the file, Shell, sandbox, and approval policies of the current profile. The provided profile uses workspace constraints and approval by default on non-Windows platforms (DSH_PERMISSION_MODE is workspace-write, and the approval policy is usually ask); Windows currently has no corresponding sandbox backend, and the combination will fall back to danger-full-access, with the approval policy set to never. Before launching in an environment containing sensitive credentials or untrusted repositories, you should check the actual profile configuration, not just rely on the interface.
pnpm must be version 10 or higher. The documentation notes that pnpm 9 has different promotion behavior for transitive dependencies, and dsh-working-activity will not be resolved in the profile, resulting in immediate exit on launch with almost no error messages (issue #60). If this happens, upgrade pnpm first and then reinstall:
npm install -g pnpm@latest
dsh plugin --profile dsh-tui add @deepseek-harness-tui/dsh-tui@latest
Do not run dsh plugin --profile dsh-tui add dsh-working-activity separately for the same profile, otherwise the activity status line may duplicate.
Other known limitations come from the architecture documentation, not usage issues: plugin context injected into the system prompt will not be listed separately in the UI; Ctrl+V reading the clipboard depends on platform tools (Windows uses PowerShell Get-Clipboard, macOS uses osascript/pbpaste, Linux requires one of wl-paste/xclip/xsel); exiting terminates the process directly without waiting for the agent to finish asynchronous persistence, which is handled by the persistence plugin; /vim, /connect, and /hooks are Claude Code-named placeholder commands, and will show a prompt instead of executing silently when there is no equivalent mechanism on the DSH side.
Closing¶
dsh-TUI has a focused purpose: without modifying the dsh core, it complements DeepSeek Harness with a full-screen interface that works over SSH, tmux, and local terminals. Agents, models, tools, and sessions still use the official services, and the TUI only draws these events to the terminal, while adding status lines, time travel, and session workflows.
Directory page: https://deepseek-harness-plugin.com/en-US/plugins/dsh-tui/
GitHub: https://github.com/ccch1mneyyy/dsh-TUI
npm: https://www.npmjs.com/package/@deepseek-harness-tui/dsh-tui