Preface

DeepSeek Harness (dsh) is an open-source agent framework developed by DeepSeek AI, with the core design principle of “everything is a plugin”: models, tools, sessions, sandboxes, and interfaces can all be replaced or recombined using Cordis plugins. The official repository is currently in developer preview, and its compatibility will continue to evolve. A community-driven plugin directory site has emerged to catalog installable extensions, which has no official affiliation with DeepSeek/HyperMind and should not be treated as an official app store.

For daily developers, installing a single skin or sidebar plugin is often insufficient. Features like reading screenshots, remembering cross-session context, validating bug fixes before committing changes, semantic retrieval and impact analysis for large codebases—these all require significant effort to assemble from individual plugins. dsh-tianshu-build takes a different approach: it is a friendly fork based on the August 2026 dsh baseline, pre-assembling a production-ready distribution that includes visual capabilities, cross-session memory, validation gates, agent routing, semantic and graph retrieval, file rollback, and a full-screen terminal UI.

What is this

dsh-tianshu-build is maintained by huiliyi37 and categorized under “Interface Enhancements” in the community directory. Upon opening the repository, you will find it is not just a UI plugin attached to the official dsh, but an independent integrated distribution named Tianshu Harness, with the command line and npm package name oh-my-tianshu. The old GitHub address huiliyi37/dsh-tianshu-build will redirect to huiliyi37/oh-my-tianshu. As of August 17, 2026, the repository has approximately 32 stars, with TypeScript as its primary language.

The license needs to be viewed in two layers. The upstream DeepSeek Harness uses the MIT license; this repository retains the attribution notice in its NOTICE file, clarifies that it is a snapshot-based independent fork with no affiliation or endorsement from DeepSeek, and does not track upstream releases. The distribution license is Apache-2.0, consistent across the directory page, GitHub LICENSE file, and npm package information. The “friendly MIT fork” mentioned in the repository description refers to the upstream license, not that this repository has changed its own license to MIT.

The maintainer has clearly outlined two deployment tracks, so please confirm before installation:
1. Official dsh + dsh-tianshu-tui: Only adds an interactive terminal UI to the official Harness, with the data directory fixed at ~/.dsh.
2. This repository (oh-my-tianshu, formerly tianshu-public): A standalone distribution with a built-in CLI. When coexisting with the official dsh, you should set an independent $DSH_HOME (the documentation example is ~/.dsh-tianshu) to avoid overlapping sessions and configurations.

If you only want to replace the terminal interface of your existing official dsh, follow the first option. dsh-tianshu-build targets users who want to obtain the following differentiated capabilities in one go.

Core Features

The official baseline already includes file and shell/PTY support, skills, tasks/goals/plans, subagents and workflows, sandbox approval, recoverable sessions, LSP, web access, context compression, and more. This monorepo additionally packages several plugins on top of this foundation, all assembled using the “composable plugin” pattern rather than hardcoding the agent loop.

  1. Vision Bridge and Vision Co-pilot: @huiliyi37/dsh-vision-bridge supplements pure-text base models with image understanding: it uses an independent vision model to describe attachments during the agent/pre-step phase, then injects the description into the context. If the bridge fails, it will degrade to a visible prompt instead of failing the entire round. @huiliyi37/dsh-vision-ask goes a step further, registering images in the current session with short IDs like img_1, allowing the base model to repeatedly query images via ask_image without requiring the user to re-send them.
  2. Cross-session Memory: @huiliyi37/dsh-memory performs BM25 hybrid recall on structured claims and knowledge notes, with a quality gate for writes. Manage it in the terminal using /memory and /remember.
  3. Validation Gates and Routing: @huiliyi37/dsh-evidence-gate is designed for bug fixing: it allows edits only after observing a failure, following the RED→GREEN workflow. @huiliyi37/dsh-agent-router dispatches work to native subagents in a MoE fashion based on metrics.
  4. Retrieval: @huiliyi37/dsh-semantic-index performs file-level BM25 alignment by definition-aligned chunking (with handling for CJK bigrams), with an optional vector layer fused using RRF, corresponding to the semantic_search command. @huiliyi37/dsh-meridian uses tree-sitter to build a sqlite code knowledge graph, providing repo map, impact analysis, and streaming queries, corresponding to the repo_graph command. @huiliyi37/dsh-pheromone is a file-level, exponentially decaying session space memory used to mark signals like fragile code and entry points.
  5. File Rollback and Git: @huiliyi37/dsh-fs-snapshot takes snapshots before tools write to disk, supporting code/both granularity for the /rewind command. @huiliyi37/dsh-git provides typed local Git capabilities for tools and UI invocation.
  6. Full-screen Terminal UI: @huiliyi37/dsh-tui connects the Tianshu (opencode-tui) rendering kernel to the harness seams, with an interface modeled after oh-my-pi: welcome card, segmented status bar, status-colored tool blocks, and 17 themes (default amber omp). The Apache-2.0 source chain of the rendering kernel is preserved in the package’s LICENSE/NOTICE/SOURCE-MAP files.
  7. DeepSeek Spark Anchors: The deepseek-spark provider route truncates assistant inference at the transport layer (flash retains the last 300 tokens, pro requires explicit enabling), and @huiliyi37/dsh-spark-anchors injects the excluded paths that were truncated back into the context, reducing the model from reintroducing already rejected options.

The architecture remains Cordis plugins: models, tools, policies, storage, context, and interfaces can all be replaced. Session flows are the authoritative logs, from which UI, recovery, and forking are all derived. Code Mode and the self-referential Cordis tool (check and mount/unmount plugins at runtime) are explicitly enabled, not turned on by default. Telemetry is disabled by default and no data is sent externally; logs will only be sent to your specified OTLP/HTTP collector if you set the DSH_TELEMETRY_OTLP_URL environment variable.

Installation and Activation

The runtime environment requires Node ^22.19 || >=24 and a DeepSeek API key (DEEPSEEK_API_KEY). The installation command provided in the community directory, to be executed in the DeepSeek Harness terminal:

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

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

dsh plugin add github:huiliyi37/dsh-tianshu-build#commit

Replace #commit with the actual commit hash. It is important to note that this command comes from the community directory; the repository’s own README positions this project as a standalone CLI, and recommends installing directly via npm rather than treating it as a regular plugin on the official dsh.

The published npm package is @huiliyi37/oh-my-tianshu (version 0.2.7 as verified in this article). Run the terminal UI directly with one command:

npx @huiliyi37/oh-my-tianshu tui

Or install globally:

npm i -g @huiliyi37/oh-my-tianshu
oh-my-tianshu tui

npm 11 and above will block unsigned lifecycle scripts. This package includes several native dependencies: koffi requires compilation, node-pty needs to build PTY binaries, @huiliyi37/dsh-subprocess-local requires restoring executable permissions for spawn-helper, and @google/genai and protobufjs need to generate runtime resources. For global installation, explicitly allow these scripts:

npm i -g --allow-scripts=koffi,node-pty,@huiliyi37/dsh-subprocess-local,@google/genai,protobufjs @huiliyi37/oh-my-tianshu

If npm warns about additional packages outside this list, append them to the command as prompted. Silently skipped native builds will often result in Cannot find module errors at runtime.

You can export the API key first, or write it to your user environment file to auto-load on each startup:

export DEEPSEEK_API_KEY=sk-…
echo 'DEEPSEEK_API_KEY=sk-…' >> ~/.dsh/.env

The first line only applies to the current shell session, while the second line makes the setting persistent. After startup, check the environment line on the welcome page: API Key ✓ indicates the key was detected, API Key ✗ means it was not detected. Restart the program after fixing the configuration. Exit using Ctrl+Q or /exit.

On Termux (or proot-distro as root), process.platform will return android, and koffi has no precompiled packages for Android, while CMake depends on the Termux prefix. You need to set the prefix before installation:

export PREFIX=/data/data/com.termux/files/usr
npm i -g @huiliyi37/oh-my-tianshu

For development from source, you will need git, the aforementioned Node version, and pnpm. Clone the repository using its current name:

git clone https://github.com/huiliyi37/oh-my-tianshu.git
cd oh-my-tianshu
pnpm install
pnpm run build
pnpm oh-my-tianshu tui
pnpm oh-my-tianshu web

When installing alongside the official dsh, separate the data directories first:

export DSH_HOME=~/.dsh-tianshu

The priority order for configuration paths is: explicit configuration > $DSH_HOME > default home directory. The documentation notes that default home directory isolation is still in planning, so do not omit this step until it is implemented.

Typical Usage

The terminal UI and web UI are two common entry points. For the full-screen terminal:

oh-my-tianshu tui

This is equivalent to oh-my-tianshu --profile tui. The web UI listens on http://127.0.0.1:3080 by default:

oh-my-tianshu web

Run a task headlessly and exit afterward:

oh-my-tianshu run "summarize this workspace"

oh-my-tianshu launches profiles: plugin bundles are stacked in order, followed by your custom overlays in $DSH_HOME/profiles/. For example, to install plugins into the tui profile:

oh-my-tianshu plugin --profile tui add <package>
oh-my-tianshu --profile tui

In the TUI, type / to open the command menu, use ↑/↓ to select, Tab to confirm, Enter to submit, and Esc to close; press Ctrl+. to view the keybindings at any time. Commands directly related to the distribution’s differentiated capabilities include:
- /memory, /remember: Browse or write cross-session memory
- /rewind: Two-phase rollback, first select a message then select a granularity
- /model spark-flash or /model spark-pro: Switch to DeepSeek Spark (corresponding to deepseek-spark/deepseek-v4-flash and deepseek-spark/deepseek-v4-pro)
- /session, /fork: List sessions or fork a new session from a copied history
- /permission: Toggle between workspace-write and danger-full-access

Tool approval appears inline as ⚠ Allow execution …?[y/N], with a unified diff displayed above. Ctrl+V reads images from the system clipboard (using osascript on macOS, wl-paste/xclip on Linux, and PowerShell on Windows); if the pasted content looks like a path, it will be loaded as a file attachment. Models with native vision support can process images directly; pure-text models with the vision bridge installed will first convert images to descriptions; if neither is available, the UI will prompt that no image was sent and the submission will not proceed.

The vision bridge needs to be added to the plugin assembly with a configured vision-capable provider/model:

# cordis.yml
- id: vision-bridge
  name: '@huiliyi37/dsh-vision-bridge'
  config:
    provider: deepseek-official
    model: <vision-capable model>

Also set the TUI’s vision state to match the bridge in the tui-runner bundle configuration: supportsVision: false, bridgeEnabled: true.

Spark mode shares the same DeepSeek API key, and only needs to be enabled once for hot reloading:

# settings.yaml
llm-deepseek:
  spark:
    enabled: true

dsh-spark-anchors is bundled with the tui bundle; anchor compensation takes effect after switching to the deepseek-spark route. Custom profiles will need to explicitly add this component according to the package’s README.

Applicable Scenarios and Notes

This project is suitable for users who are already using or planning to use DeepSeek Harness, and want to avoid assembling plugins individually: developers writing code in the terminal, occasionally pasting screenshots, needing to remember project conventions across sessions, hoping to validate bug fixes before making changes, and performing semantic retrieval or impact analysis in large codebases. For automation purposes, you can use oh-my-tianshu run, ACP demos, and the Python SDK in the repository, all subject to the source code documentation.

It is not suitable for users who mistakenly treat it as “just a theme package for the official dsh”. While categorized as an interface enhancement in the directory, the repository itself is a full harness fork, with packages published under @huiliyi37/*, evolving independently without following the official release cadence. If you only want the terminal UI and wish to stay on the official CLI, you should install dsh-tianshu-tui instead of this repository.

Read the source code and license terms before installation. As noted in the community directory: plugins run with the permissions of the current dsh process, and may execute code during installation. This distribution also includes native compilation steps, presenting a larger attack surface than regular theme plugins. Telemetry is disabled by default; if you enable OTLP reporting, the target must be your own collector. Code Mode and runtime plugin assembly changes are opt-in, so do not enable them casually in production environments.

The maintainer plans to unify the repository name, startup command, and npm package name in a second phase to reduce confusion with dsh-tianshu-tui. Until then, refer to the naming memo in the README: dsh-tianshu-tui is the TUI plugin for the official dsh, while oh-my-tianshu is this standalone distribution.

Summary

dsh-tianshu-build addresses the pain point that “while dsh is pluginizable, putting together a complete coding agent still requires manual assembly”. It forks from the August 2026 DeepSeek Harness baseline, retains the “everything is a plugin” philosophy, and pre-packages vision, memory, validation gates, retrieval, rollback, and full-screen TUI capabilities into oh-my-tianshu. The community directory still provides the installation command dsh plugin add github:huiliyi37/dsh-tianshu-build; for actual usage, follow the npm/CLI instructions in the repository README, and separate the $DSH_HOME directory from the official dsh.

Directory page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-tianshu-build/

GitHub (old name redirects to current repository): https://github.com/huiliyi37/dsh-tianshu-build

Current repository: https://github.com/huiliyi37/oh-my-tianshu