How it behaves
The dsh-tui profile applies a Cordis patch to DSH and projects session and tool events into terminal-rendered React components. Ink/Yoga handles rendering. Session logs remain the source of truth; model calls, tool execution, fork, resume, compaction and persistence remain with DSH services. TUI-only activity data is kept in an in-memory ActivityTracker.
The interface supports streaming Markdown, structured tool cards, message and session search, @ file completion, text and image attachments, inline or alternate-screen rendering, and /lang language switching. Long sessions use event-driven projection, differential terminal output, message virtualisation, replay merging and bounded caches.
Configuration
| Setting |
Behaviour |
DSH_TUI_THEME |
Takes precedence over the persisted theme and automatic terminal-background detection. |
~/.dsh-tui/agent-preset.json |
Persists the selected agent preset. |
~/.dsh-tui/model.json |
Persists the model selected through /model. |
~/.dsh-tui/themes/<name>.json |
Stores custom JSON themes. |
Built-in themes include auto, light, dark and dark-ansi. The liangshen preset is shipped with the TUI alongside the official standard, code, minimal and cordis presets. A preset cannot be changed after a conversation has produced messages; it can be changed in a blank conversation.
Commands
Session commands include /new, /resume, /rename, /workspace resume|rename|open, /clear, /compact, /export, /trace and /btw. Status and setup commands include /status, /cost, /doctor, /config, /init, /tokens, /permissions and /add-dir. Model and interface commands include /model, /thinking, /theme, /lang, /vim, /terminal-setup, /help and /exit. /mcp reports MCP connection status, while /agents, /plan and /goal expose agent or registry features. /update updates and restarts the TUI, restoring the current session.
Requirements and limits
A usable terminal TTY, the official dsh CLI and pnpm 10+ are required. Model use requires DEEPSEEK_API_KEY. Windows can use the repository’s dsh-tui.cmd; macOS extended ⌘ bindings require terminal support for the extended keyboard protocol. Full-screen mouse mode is enabled by the profile patch, although fullscreen: true is otherwise off by default. The plugin operates on the terminal surface, including keyboard and mouse input and clipboard handling.
Written from the project's own documentation and kept in sync with it. Where the two disagree, the source is authoritative — read the README on GitHub