Skip to main content

seektty

46Stars2Forks0Issues0Watchers

A TUI frontend for DeepSeek Harness in the terminal, featuring streaming chat, theme/language switching, a plugin marketplace, and first-launch API Key guidance.

Evidence5/5methodologySourceInstallMaintenanceDSH versionSecurity scan
Machine-auditedInstall commandRepo verifieddsh-plugin topicLicenseREADMEAI wiki
Language
JavaScript
License
MIT
Branch
main
agentic-aiai-agentclicoding-agentcommand-linedeepseekdeepseek-harnessdeveloper-tools

Install

cmdweb profile
$ dsh plugin --profile web add seektty

Run the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial

Install via your agent

Install the DeepSeek Harness plugin Hilbert-beinghappy/seektty for me: review the repository at https://github.com/Hilbert-beinghappy/seektty first, then run the install command and verify the plugin loads successfully.

Paste this instruction to the DSH Web GUI assistant — it will install and verify for you.

One-Line Positioning

SeekTTY is DeepSeek Harness's official standalone terminal Bundle, bringing the entire Harness into the terminal to run—streaming dialogue, tool cards, session management, plugin marketplace, and theme/language switching all done with keyboard shortcuts, no browser required.

Core Capabilities

  • Present streaming Markdown conversations, tool call cards (collapsed/expanded/hidden), unified syntax highlighting for code blocks, reasoning content visibility toggle, model retry, and Ctrl+C cancellation within the terminal
  • Complete session lifecycle: /new /resume /rename /fork /archive /export /export md, plus /sessions browsing, /copy to copy previous response
  • Workspace support (/workspace): create, select, reorder, logout; switching Agent mode (/mode), model & Provider (/model), or permissions (/permission) automatically starts a new session
  • /plugin hub: list, search, details, install, remove, update, Bundle sorting, source management, /plugin doctor diagnostics; supports npm, Git, tarball, local paths
  • Independent theme system: UI theme and code theme separately switchable, supports 3–16 color palette generation, /theme import reads local VS Code JSON/JSONC themes (including TextMate token colors)
  • Chinese/English bilingual: /language switch; auto-follows LC_ALL/LC_MESSAGES/LANG/LANGUAGE (auto); shares locale.preference with Harness Web
  • First-launch API Key guidance: when Profile has no available Provider, displays a centered masked input box that only goes through Harness credentials.set, SeekTTY keeps no logs

Technical Implementation

  • Language: TypeScript (ESM, "type": "module", tsdown builds to lib/)
  • Key Dependencies: @deepseek-ai/cordis, @deepseek-ai/dsh-host-apiproxy, @deepseek-ai/dsh-host-plugin-inventory, @mariozechner/pi-tui, @shikijs/core
  • Architecture Pattern: Mounted as a Cordis Profile Bundle (name: 'tui-runner', cordis.patch.yml disables Web/browser/HMR/tools and other default behaviors), uses seektty/in-process in-process RPC instead of Web server, supplemented by seektty/attachment-compat to fill imageLimits compatibility layer for rc.6/rc.7 → rc.8
  • Entry Points: src/index.ts → src/host/index.ts (apply/run starts terminal Surface) → src/client/index.ts (startTui → surface.ts); global command entry lib/bin.js (deepseek)

Use Cases

Developers writing code daily in the terminal who want to chat with AI, view tool calls, and visualize reasoning like Claude Code, without switching to the browser; or those already used to DSH Web and wanting a keyboard-first workflow. SeekTTY shares the same Profile and Session with the official Web, allowing seamless handoff between both endpoints.

Prerequisites & Compatibility

DependencyMinimum VersionNotes
DeepSeek Harness0.1.0-rc.6+ (tested up to 0.1.0-rc.8)Declared in package.json#dsh.compatibility; old versions via dshCompatibilityError are directly rejected, new versions only show a single line hint without blocking (src/dsh-compat.ts:85-133)
Node.js^22.19.0 || >=24.0.0package.json#engines.node
pnpm10+ (11.7.0 recommended)Profile installation uses pnpm; launcher and plugin management both rely on pnpm in PATH (src/bin.ts:175-184)
PlatformmacOS / Linux / Windowspackage.json#os lists darwin/linux/win32; Windows uses pnpm add --global, requires PATHEXT parsing for dsh.cmd (README.md:68-73)
Native ModulesNoneAll JS/TS dependencies, no node-gyp builds
Peer Dependency@deepseek-ai/cordis ^4.0.1Provided by host DSH

Installation

dsh plugin --profile web add github:Hilbert-beinghappy/seektty

The installation command is the unified entry for the plugin marketplace; this plugin's actual Profile name is fixed to tui (created by bin.ts and launcher on first run), not started via web Profile. dsh plugin --profile tui add github:Hilbert-beinghappy/seektty is a more straightforward equivalent写法.

Configuration

SeekTTY doesn't directly accept command-line configuration; behavior toggles all fall under DSH Settings namespace (written via /settings or dsh plugin --profile tui set):

ConfigTypeDescriptionDefault
seektty-appearance.themestringCurrent UI theme (dark / light / custom:<id>)dark
seektty-appearance.codeThemestringSeparate code block theme (auto / dark / light / custom:<id>)auto
seektty-appearance.customThemesarrayNamed custom themes (including UI colors, syntax colors, TextMate rules)[]
seektty-behavior.toolCardscollapsed | expanded | hiddenTool card default statecollapsed
seektty-behavior.showReasoningbooleanWhether reasoning content is shown by defaulttrue
seektty-behavior.desktopNotificationsbooleanWhether to send terminal desktop notifications on round completion or pending approvalfalse
seektty-behavior.composerHistoryLimitnumberInput history persistence count (0 = off)100
seektty-behavior.clipboardFallbackauto | osc52 | offClipboard fallback after OSC 52 failureauto
seektty-behavior.toolOutputLineLimitnumberMax lines per tool output block (0 = no folding)200
seektty-behavior.diffContextLinesnumberDiff context lines3
seektty-behavior.keyBindingsobjectOverride default shortcuts (id → key combo){}
tui-plugin-marketplace.sourcesarrayAdditional marketplace catalog sources (id/label/url/enabled/credentialRef)[]
locale.preferenceauto | zh | enUI language; shared with Harness Webauto

Common environment variables (affecting launcher and rendering, not Settings):

Env VariableDescription
DSH_BINSpecify dsh executable path; when set, auto-update dsh is disabled (src/bin.ts:71-77 / 222)
SEEKTTY_UPDATEauto (default) / check / off / explicit disable value, controls version check on startup and exit (src/bin.ts:45-53)
SEEKTTY_SPECOverride default plugin spec (e.g., for local tarball debugging)
SEEKTTY_STARTUP_TRACEWhen 1, outputs startup phase timing to stderr (src/startup-trace.ts:7-11)
NO_COLORAny non-empty value forces terminal into 0-color (plain text) mode (src/client/theme.ts:179)

FAQ

Q: Launcher says "cannot find dsh", what should I do?

A: This is the standard prompt when launcher detects dsh --version failure (src/bin.ts:175-184). Install pnpm add --global @deepseek-ai/[email protected], or explicitly specify path with DSH_BIN=/path/to/dsh before running deepseek.

Q: dsh is 0.1.0-rc.8, but rc.6/rc.7's imageLimits don't match rc.8, will it error?

A: SeekTTY orders seektty/attachment-compat before api-gateway in cordis.patch.yml:153-155; it only supplements maxImageDimension for the specific rc.6/rc.7 capability shape, leaving native rc.8 objects as-is (src/host/attachment-compat.ts:36-90). So cross-version running requires no manual dsh changes.

Q: Will auto-update block startup?

A: No. maybeAutoUpdate silently catches network and installation failures with try/catch (src/bin.ts:325-348); once DSH_BIN is locked, dsh won't be touched, and SEEKTTY_UPDATE=0 can completely disable it.

Q: Will uninstalling lose sessions or modify dsh?

A: No. dsh plugin --profile tui remove seektty only clears Profile dependencies, Bundle order, and config items; the Profile itself is preserved, sessions remain under $DSH_HOME/profiles/<profile>/sessions/, and dsh installation is untouched (README.md:167-180).

Q: First-launch centered popup needs API Key, will it be written to logs/screenshots?

A: No. SeekTTY only forwards user input to Harness credentials.set; its own logs, settings, and screenshots don't persist this value (README.md:97-110). On first normal send, authentication failure goes through official Provider error path back to user.

Q: Why didn't pasting images in terminal work?

A: macOS uses osascript (optional pngpaste), Linux tries wl-paste/xclip, Windows uses PowerShell Get-Clipboard (README.md:50). Clipboard bitmaps land as temporary PNG before insertion; current defaults v4-flash/v4-pro don't accept images, they'll be rejected according to attachment limits (help.ts:23-32).

Q: Does /theme import require VS Code themes?

A: /theme import accepts local VS Code JSON/JSONC theme files, recursively parses include, maps editor and semantic token colors, TextMate foreground/background/bold/italic/underline/strikethrough rules are portable (README.md:223-227). UI colors aren't replaced; font family/size are ignored (terminal fonts are determined by the grid).

Q: How to auto-resume last session?

A: deepseek --resume resumes the most recent session; deepseek --resume <sessionId> resumes specified session; deepseek --cwd <path> specifies working directory. Restart uses seektty-v1 channel to hand off draft/attachments/cwd/profile (src/host/app-handoff.ts:1-14 / src/host/restart-handoff.ts:1-15).

Learning Curve

Beginner — default config needs no modification, install and use; dive into Settings when you want theme customization, keymap customization, or plugin marketplace catalog extension.

Known Issues & Limitations

  • Official host.describe version number is a placeholder: rc.6–rc.8 all return version: '0.0.1', SeekTTY treats this as "unknown version" and ignores it, doesn't use it as actual version for compatibility判断 (src/dsh-compat.ts:15-21 / 90)
  • First-launch API Key guidance has edge cases: if official Provider adapter is missing, credential layer is read-only, or Provider inspection fails, SeekTTY directly skips the popup and points to /settings and /doctor, won't leave a dead form (README.md:110)
  • Restart handoff failure "continues as normal startup": if handoff envelope parsing fails or channel/profile/cwd mismatch, only shows one status bar hint, doesn't block startup (src/host/restart-handoff.ts:17-19 / 63-81)
  • Dependency updates trigger restart: after plugin add/remove/update/reorder when restartRequired is true, host does controlled restart to restore workspace/session/draft/attachments (src/host/profile-plugin-manager.ts:387 / README.md:188-189)
  • pnpm output containing Token/Key/Secret etc environment variables gets redacted: InstallerOutputRedactor does hold + length boundary protection for cross-chunk secrets (src/host/installer-output.ts:31-101)
  • /clarify only appears when Clarify Remote Receiver exists: probed via /api channel; when plugin is absent, command isn't shown and doesn't modify other behavior (src/client/clarify-remote.ts:1-15 / docs/任务书B-seektty-shell.md:7)

Read the usage guide →

Install steps, key points, FAQ and compatibility for this plugin — auto-derived from indexed fields.

Listing badge

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/Hilbert-beinghappy/seektty)

Paste this markdown into your GitHub README to link back to this listing. The badge only states the listing — not a security endorsement.

← Back to plugin directory