DeepSeek Harness plugin

dsh-ccTUI

Claude-Code-style terminal UI for deepseek-harness, ported from clawcodex ui-tui

Jump to install

Source facts

Repository
agentforce314/dsh-ccTUI
Latest update
Aug 19, 2026
Category
Models & Providers
GitHub stars
2
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/agentforce314/dsh-ccTUI
Plugin: dsh-ccTUI
Author: agentforce314

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer3 files
README.mdSource ยท read only

dsh-ccTUI

Claude Code style TUI for Deepseek-Harness โ€” ๐Ÿณ ported from the clawcodex ui-tui and packaged as a dsh bundle plugin (npm package dsh-cctui).

The full Claude-Code-style look, feel, and interactions โ€” streaming markdown transcript, tool trail with diff cards, approval and question prompts, plan review, session switcher and resume, slash commands, model picker, context bar โ€” running in-process against harness services (ctx.agents, session/event, the approval waterfall, ctx.userQuestions, ctx.commands).

 โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•—  โ–ˆโ–ˆโ•—         โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•—   โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•—
 โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•”โ•โ•โ•โ•โ•โ–ˆโ–ˆโ•‘  โ–ˆโ–ˆโ•‘        โ–ˆโ–ˆโ•”โ•โ•โ•โ•โ•โ–ˆโ–ˆโ•”โ•โ•โ•โ•โ•โ•šโ•โ•โ–ˆโ–ˆโ•”โ•โ•โ•โ–ˆโ–ˆโ•‘   โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘
 โ–ˆโ–ˆโ•‘  โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•‘     โ–ˆโ–ˆโ•‘        โ–ˆโ–ˆโ•‘   โ–ˆโ–ˆโ•‘   โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘
 โ–ˆโ–ˆโ•‘  โ–ˆโ–ˆโ•‘โ•šโ•โ•โ•โ•โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•‘ โ•šโ•โ•โ•โ•โ• โ–ˆโ–ˆโ•‘     โ–ˆโ–ˆโ•‘        โ–ˆโ–ˆโ•‘   โ–ˆโ–ˆโ•‘   โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘
 โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘  โ–ˆโ–ˆโ•‘        โ•šโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ•šโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—   โ–ˆโ–ˆโ•‘   โ•šโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ•‘
 โ•šโ•โ•โ•โ•โ•โ• โ•šโ•โ•โ•โ•โ•โ•โ•โ•šโ•โ•  โ•šโ•โ•         โ•šโ•โ•โ•โ•โ•โ• โ•šโ•โ•โ•โ•โ•โ•   โ•šโ•โ•    โ•šโ•โ•โ•โ•โ•โ• โ•šโ•โ•
 ๐Ÿณ Claude Code style TUI for Deepseek-Harness

 โ•ญโ”€โ”€โ”€ dsh-ccTUI v0.3.0 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
 โ”‚                                                                                              โ”‚
 โ”‚           Welcome back, you                 โ”‚ โ–พ Available Tools                              โ”‚
 โ”‚                                             โ”‚ harness: bash, create_goal, edit, โ€ฆ+22         โ”‚
 โ”‚                    : ' :                    โ”‚                                                โ”‚
 โ”‚                 ___'_______                 โ”‚ โ–ธ Available Skills (0)                         โ”‚
 โ”‚               /'  o        \--.             โ”‚                                                โ”‚
 โ”‚              |              ___\            โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚
 โ”‚               \____________/  \/            โ”‚ 25 tools ยท 0 skills ยท /help for commands       โ”‚
 โ”‚                  \__/  \__/                 โ”‚                                                โ”‚
 โ”‚                                             โ”‚                                                โ”‚
 โ”‚                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€                 โ”‚                                                โ”‚
 โ”‚           Model deepseek-v4-flash           โ”‚                                                โ”‚
 โ”‚   Path ~/workspace/dsh-ccTUI                โ”‚                                                โ”‚
 โ”‚    Perms Ask for approval ยท /permissions    โ”‚                                                โ”‚
 โ”‚ Session cctui-56b37bee-41fd-4feb-b270-5988โ€ฆ โ”‚                                                โ”‚
 โ”‚                                                                                              โ”‚
 โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Install

Requires Node โ‰ฅ 22.19, npm, pnpm, and the dsh CLI (npm install -g @deepseek-ai/dsh).

git clone https://github.com/agentforce314/dsh-ccTUI.git
cd dsh-ccTUI
./install.sh           # builds, then: dsh plugin --profile dsh-cctui add "$PWD"
dsh --profile dsh-cctui # launch (or ./bin/dsh-cctui.js)

Model/provider configuration comes from your dsh profile (agent-default-model settings or an - id: cctui config override in the profile's cordis.patch.yml: provider, model, cwd, sessionId).

API key

The TUI stores no key; the harness resolves one per request. Write it to the managed store at $DSH_HOME/.credentials.yaml (default ~/.dsh/.credentials.yaml) โ€” a YAML mapping of credential reference to value and nothing else:

DEEPSEEK_API_KEY: sk-โ€ฆ

chmod 600 that file and chmod 700 ~/.dsh: dsh-credentials-local refuses to read a document carrying any group or other permission bit, and fails at boot naming the repair. The document is watched, so a key stored while the TUI is running takes effect on the next request โ€” first run is "browse models, store the key, prompt again", no restart in between. Until one resolves, the route stays registered and /model stays browsable; it is the request that fails, with MISSING_CREDENTIAL naming every entry point it looked at.

The launching environment beats the store (DEEPSEEK_API_KEY=โ€ฆ dsh --profile dsh-cctui) and is deliberately read-only from inside; the store in turn beats <cwd>/.env and ~/.dsh/.env. Keep the key itself out of cordis.patch.yml โ€” adapter config carries only apiKeyEnv, the reference to resolve. One key covers both the conversation and the web_search tool.

Mode 0600 stops other OS users, not the model: the harness never hands it the document's path and never loads the value into the environment, but bash and the filesystem tools run as you and the shipped policy confines writes rather than reads.

Highlights

  • Conversation loop: streamed deltas render live; reasoning behind Ctrl+O/Ctrl+R density

toggles; busy verbs and spinners; Esc interrupts (Ctrl+C never kills the app).

  • Tools: Claude-style โบ Tool(args) / โŽฟ result trail, each result summarised the way

the original does it โ€” Read 3 lines, Found 37 files, Received 1.2KB (200 OK), Did 1 search in 2s โ€” with a failed call carrying the tool's own message and a running one its own clock; write/edit diffs render as structured diff cards; sandbox-escalation approvals pop the approval box (1 approve / 2+Enter deny); todo lists pin under the busy line.

  • Subagents: a delegation reads โบ Subagent(Review the diff) / `โŽฟ Done (2 tool uses ยท

1.2k tokens ยท 11s), and its children stream into /agents` โ€” goal, live tool calls, tokens, spawn tree.

  • Sessions: /sessions (Ctrl+X) lists live and persisted sessions; /resume <id>

replays a persisted transcript, tool results and all; /new, /title, /rename.

  • Commands: every harness ctx.commands entry (e.g. /plan, /goal) appears in the

completion menu and dispatches through the harness; /model opens the picker backed by the llm catalog; /effort, /context, /usage, /help, /status.

  • Modes: Shift+Tab cycles default โ†’ plan โ†’ bypassPermissions (mapped onto the harness

plan-mode controller and approval policy).

Configuration

Environment knobs use the DSH_CCTUI_ prefix โ€” e.g. DSH_CCTUI_INLINE=0 (alternate screen

instead of inline scrollback), DSH_CCTUI_THEME=light|dark, DSH_CCTUI_HOME (data dir,

default ~/.dsh-cctui), DSH_CCTUI_FPS=1. CLAUDE_CODE_SCROLL_SPEED is still honored as a migration fallback for people coming from Claude Code.

Development

npm install
npm run typecheck && npm test    # 149 files / ~1900 tests
npm run e2e                      # PTY e2e against a real dsh boot + scripted LLM
npm run e2e:install              # the real `dsh plugin add` install path

Tool rows are the fiddliest surface to eyeball, so they have their own harness: python3 scripts/tool-gallery.py [toolโ€ฆ] [--expand] drives a real dsh boot through one harness tool per scenario (via the scripted test/e2e/probe-llm.mjs) and prints the trail it rendered โ€” the thing to diff against the same call made to Claude Code.

Versioning

Each shipped change increments the patch digit by one; it runs to 99 before rolling over into the minor digit:

0.2.0 โ†’ 0.2.1 โ†’ โ€ฆ โ†’ 0.2.13 โ†’ โ€ฆ โ†’ 0.2.99 โ†’ 0.3.0 โ†’ 0.3.1 โ†’ โ€ฆ

Write patch numbers without leading zeros (0.3.1, not 0.3.01 โ€” the latter is not valid semver and npm rejects it). Bump package.json in the change's own commit, then tag v<version> on main after it merges.

Architecture and porting details: [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md), [docs/PLAN.md](docs/PLAN.md), [docs/PORTING-NOTES.md](docs/PORTING-NOTES.md). The adapter boundary (src/harness/ is the only place that may import @deepseek-ai/*) is CI-gated.

Provenance & license

MIT. Substantial portions are ported from the MIT-licensed clawcodex ui-tui (including its forked Ink renderer) with integration patterns from the MIT-licensed dsh-TUI project โ€” see [NOTICE.md](NOTICE.md).