agi-fans/oh-my-dsh
A focused, keyboard-first DeepSeek coding agent built on the plugin architecture of DeepSeek Harness and inspired by the interaction quality of oh-my-pi.
编辑导读Editor's Brief
## 核心特性
- 提供基于 DeepSeek Harness 插件架构构建、以键盘操作优先的 DeepSeek coding agents 终端客户端。
- 支持持久会话,可恢复会话、回退到人类轮次、重试、压缩,以及导出 Markdown transcript。
- 提供 Harness Agent preset、Workflow、工具展示和访问级别的会话控制,包括 Standard、PTC、Minimal、Cordis、Default、Plan、Native、Code、Both、Read only、Workspace write 和 Full access。
- 显示实时运行上下文,包括 agent、workflow、tools、access、model、reasoning effort、workspace、Git 状态、上下文压力、tokens、TTFT、吞吐量、缓存、耗时、轮次和步骤。
- 渲染终端输出,采用稳定的 transcript 布局、合并滚动更新、行级 diffs,以及针对 CJK 文本和 emoji 的显示单元格对齐。
## 使用场景
- 在终端环境中使用 DeepSeek API key 运行编码会话。
- 在编码会话期间审查并引导 agent 工具调用和 subagent 活动。
- 恢复长时间会话,并导出 transcript 以便后续回顾。
- 使用插件命令将 DSH bundles 安装到 omdsh profile。
## 技术细节
- 要求 Node.js 22.x 系列中的 22.19 或更高版本,或 Node.js 24 及更新版本,并通过 npm 安装为 @agi-fans/oh-my-dsh。
- 使用 DeepSeek Harness packages 和 plugins 处理会话、工具、权限、模型、Skills、MCP servers、命令和遥测。
- 将终端能力拆分为 @agi-fans/dsh-tui,将 boot/plugin 组合拆分为 @agi-fans/oh-my-dsh。
- 支持通过 /login、/model、/logout、$DSH_HOME/settings.yaml、catalog providers 以及自定义 provider 进行提供商配置。
## Core Features
- Provides a keyboard-first terminal client for DeepSeek coding agents built on the DeepSeek Harness plugin architecture.
- Supports durable conversations with session resume, rewind to a human turn, retry, compact, and Markdown transcript export.
- Offers session controls for Harness Agent preset, Workflow, tool presentation, and access level, including Standard, PTC, Minimal, Cordis, Default, Plan, Native, Code, Both, Read only, Workspace write, and Full access.
- Displays live operational context including agent, workflow, tools, access, model, reasoning effort, workspace, Git state, context pressure, tokens, TTFT, throughput, cache, timings, turns, and steps.
- Renders terminal output with settled transcript layout, coalesced scroll updates, row-level diffs, and display-cell alignment for CJK text and emoji.
## Use Cases
- Running coding conversations with a DeepSeek API key from a terminal environment.
- Reviewing and steering agent tool calls and subagent activity during a coding session.
- Resuming long sessions and exporting transcripts for later review.
- Installing DSH bundles into the omdsh profile with plugin commands.
## Technical Details
- Requires Node.js 22.19 or later in the 22.x line, or Node.js 24 or newer, and installs from npm as @agi-fans/oh-my-dsh.
- Uses DeepSeek Harness packages and plugins for sessions, tools, permissions, models, Skills, MCP servers, commands, and telemetry.
- Separates terminal capability into @agi-fans/dsh-tui and boot/plugin composition into @agi-fans/oh-my-dsh.
- Supports provider configuration through /login, /model, /logout, $DSH_HOME/settings.yaml, catalog providers, and custom
安装Install
dsh plugin --profile web add github:agi-fans/oh-my-dsh
把 agi-fans/oh-my-dsh 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
oh-my-dsh
Into the Unknown
A focused, keyboard-first DeepSeek coding agent built on the plugin architecture of DeepSeek Harness and inspired by the interaction quality of oh-my-pi and the original Pi agent harness.
English · 简体中文

Quick start
Requirements: Node.js 22.19 or later in the 22.x line, or Node.js 24 or newer, plus a DeepSeek API key for live model turns.
npm install --global @agi-fans/oh-my-dsh
omdsh
Run /login once inside omdsh to validate and save your DeepSeek API key, then start a conversation. To try it without a global installation, run npx @agi-fans/oh-my-dsh.
Highlights
- Durable conversations: resume sessions, rewind to a human turn, retry, compact, and export complete transcripts as Markdown.
- Four real session controls: choose a Harness Agent preset (Standard, PTC, Minimal, or Cordis), Workflow (Default or Plan), tool presentation (Native, Code, or Both), and Access (Read only, Workspace write, or Full access).
- Rich terminal input: mention project files and other sessions with
@, paste clipboard images, reuse persistent prompt history, edit multiline prompts externally, and retrieve queued follow-ups. - Readable tool activity: follow streaming calls and live subagent progress, press Down on an empty composer then Enter (or use Alt+A directly) to select a child in the keyboard-driven Agent Hub, steer a continuable child from its transcript, inspect distinct Input and Output sections, expand long results, and keep domain-specific presentation owned by tool plugins.
- Live operational context: see Agent, Workflow, Tools, Access, model, reasoning effort, workspace, Git state, context pressure, tokens, TTFT, throughput, cache, timings, turns, and steps without leaving the composer.
- Responsive by design: retain settled transcript layout, coalesce scroll updates, emit row-level terminal diffs, and preserve correct display-cell alignment for CJK text and emoji.
Learn
- Tutorials — complete a first task, add precise context, guide queued work, recover long sessions, customize the environment, and write an installable plugin.
- Skills and MCP — extend a project with reusable instructions and external tools.
- User plugins — install DSH bundles into the omdsh Profile with
omdsh plugin. - Architecture — understand the plugin boundaries and runtime data flow.
- Performance — inspect the benchmarks, methodology, and rendering optimizations.
Why oh-my-dsh
DeepSeek Harness provides a capable agent runtime and a strong architectural idea: everything is a plugin. oh-my-dsh brings that runtime into a calm, keyboard-driven terminal experience without creating a second agent core or hiding Harness behind a parallel abstraction.
The TUI remains a presentation and interaction layer. Sessions, tools, permissions, models, Skills, MCP servers, commands, and telemetry come from Harness services and plugins; omdsh composes them into a terminal application and adds the interface behavior needed to use them comfortably.
The project follows four principles:
- Harness-native: use published DeepSeek Harness packages as the source of truth for agent behavior, state, and lifecycle.
- Real plugin boundaries: create plugins for independently owned lifecycles and contribution points, not for every source file.
- One terminal owner: keep raw input, cursor state, viewport management, and atomic rendering inside the local TUI Provider.
- Progressive disclosure: keep the default view concise while making tools, telemetry, settings, and session detail discoverable on demand.
Reference checkouts under refs/ remain read-only research material. Runtime code depends only on published packages and oh-my-dsh workspace packages.
Architecture
DeepSeek Harness plugins and services
│
▼
@agi-fans/dsh-tui — terminal capability seam
│
▼
@agi-fans/oh-my-dsh — boot and plugin composition
The TUI package is split into a service definition, local terminal Provider, session and interaction adapters, tool-presentation bridge, command contributions, and interactive Runner. This isolates terminal ownership from Harness domain state and exposes plugin seams only where a capability has an independent lifecycle or owner. See the architecture overview for the current boundaries and data flow.
Performance
Performance is part of the TUI architecture: durable sessions replay in linear time, Harness Projections avoid repeated history scans, settled transcript blocks retain formatted layout, and the terminal writer emits row-level diffs. On the documented Apple M5 Pro environment, restoring 10,000 conversation turns takes a median 2.15 ms, 10,000 tool calls take 21.21 ms, and cached updates over a 5,000-turn surface average 0.24 ms per frame.
See the reproducible TUI performance report or run pnpm benchmark:tui locally.
Configuration
Run /login to configure a provider API key. DeepSeek still opens the official key dashboard, validates the key, and prefers the stored credential over an inherited DEEPSEEK_API_KEY. The same command can also activate a catalog provider such as OpenAI or Anthropic, or add a custom provider with its own id, base URL, protocol, and model ids. /model then lists every live route. /logout removes an omdsh-managed choice and, for DeepSeek, falls back to the environment when available.
Model settings can also come from $DSH_HOME/settings.yaml. Skills and MCP configuration are documented in Skills and MCP.
After an upgrade, omdsh can show release notes once at startup. Use /changelog for recent entries or /changelog full for the complete packaged history. A cached daily npm check reports newer versions without installing anything automatically; both behaviors can be customized in /settings.
Development
pnpm install
pnpm omdsh "list files" # run from source
pnpm typecheck # check TypeScript
pnpm test # unit and pipe-mode tests
pnpm build # build all workspace packages
pnpm smoke # interactive PTY smoke test
pnpm smoke:happy # mock-LLM happy path
The checkouts in refs/deepseek-harness, refs/oh-my-pi, and refs/pi are read-only references. Do not use them as runtime dependencies or modify them while developing omdsh.
Changelog
User-visible changes and release history are tracked in CHANGELOG.md.
Acknowledgements
oh-my-dsh exists because of these projects:
- DeepSeek Harness provides the runtime foundation, plugin architecture, and the conviction that agent capabilities should be composable rather than embedded in one application.
- Pi is the original open agent harness whose terminal interaction, differential rendering, and compact coding-agent craft still set the standard this community builds on.
- oh-my-pi continues that lineage and shows how thoughtful terminal interaction, compact information design, and careful keyboard workflows can make an agent feel fast and approachable.
Thank you to these projects and their contributors. omdsh is an independent community project: it is built on DeepSeek Harness and learns from Pi and OMP, but is not an official distribution of any of them.
License
oh-my-dsh is available under the MIT License.
anywhere-labs/deepseek-harness-desktop
tt-a1i/archify
zhu1090093659/dsh-web-ui
liustack/modlens
omdsh-dev/DSH-better-sidebar
ccch1mneyyy/dsh-TUI
alvinunreal/openpets
agentrq/agentrq