<div align="center">
<img src="assets/seektty-logo.png" alt="SeekTTY logo" width="200">
<h1>SeekTTY</h1>
<p>A keyboard-first terminal workspace for DeepSeek Harness, from an early idea to an executable plan.</p>
<p> <a href="https://github.com/Hilbert-beinghappy/seektty/releases"><img src="https://img.shields.io/badge/Version-1.2.1-orange" alt="Version 1.2.1"></a> <img src="https://img.shields.io/badge/DeepSeek%20Harness-0.1.1--rc.2-5B5BD6" alt="DeepSeek Harness 0.1.1-rc.2"> <img src="https://img.shields.io/badge/Node-%5E22.19.0%20%7C%7C%20%3E%3D24-339933?logo=nodedotjs&logoColor=white" alt="Node.js 22.19 or newer"> <a href="https://github.com/Hilbert-beinghappy/seektty/actions"><img src="https://github.com/Hilbert-beinghappy/seektty/actions/workflows/ci.yml/badge.svg" alt="CI"></a> <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-yellow" alt="MIT License"></a> </p>
<p> <a href="#project-overview">Project overview</a> · <a href="#clarify-and-plan">Clarify and Plan</a> · <a href="#harness-capabilities-available-in-the-tui">Terminal capabilities</a> · <a href="#quick-start">Quick start</a> · <a href="#verified-scope">Verification</a> </p>
<p>English · <a href="README.zh.md">中文</a></p>
</div>
---
Project overview
Run deepseek from a project directory to use the native Agent, Session, model, permission, Settings, Profile, plugin, and persistence services of DeepSeek Harness from one terminal workspace. Prompts, code changes, tool calls, sessions, model routes, permissions, plugins, subagents, and diagnostics all operate on the same Harness state.
When an idea still needs definition, the optional plugin-backed /clarify workflow reads the active Session and composer draft, follows the real model route, and generates Socratic questions, contextual options, and a live draft preview that evolves after every answer. Accepting the preview places a complete Draft back in the ordinary composer for review and manual submission. Harness native /plan can then turn the clarified requirement into an implementation plan.
The Clarify Host plugin owns the Session-bound clarification process, model-generated questions, options, previews, and six-method Remote. When that compatible plugin capability is active, SeekTTY detects it and adds the local /clarify command plus its keyboard-first TUI surface. SeekTTY passes the current Session and draft to the plugin, then writes an accepted Draft back into the composer.
Clarify model calls run through Auxiliary Runtime and are recorded in its dedicated auxiliary_runtime ledger. Official Agent-loop usage remains in tokenUsage; SeekTTY /status shows separately sourced Official, Auxiliary, and derived Combined totals while the snapshot contract is healthy.
DeepSeek light and dark interfaces
Light theme

Dark theme

The live view fills the terminal and keeps the composer and status at the bottom. Unused rows remain inside the conversation viewport and disappear as output grows; longer conversations continue into native terminal scrollback.
Clarify and Plan
Clarify is an optional DeepSeek Harness Host plugin, and SeekTTY is its keyboard-first terminal consumer. Plugin-backed Clarify and Harness-native Plan cover consecutive parts of one workflow.
Clarify handles the stage where the desired outcome still needs definition. It uses the current Session and draft to ask one focused question at a time, carries accepted decisions forward, and updates a reviewable Draft after every answer. Accepting returns that Draft to the composer. You can edit it and press Enter when it represents what you want.
Plan handles the stage where the requirement is ready for implementation. Harness native /plan turns the submitted requirement into an implementation proposal and opens the normal plan-review flow.
Where /clarify comes from
| Component | Responsibility |
|---|---|
| SeekTTY | Probes the Clarify Remote, dynamically adds /clarify to the local command catalog, renders the terminal interaction, supplies the current Session and composer seed, and returns an accepted Draft to the composer. |
| dsh-plugin-clarify | Publishes start, answer, accept, refine, cancel, and fetchDraft over clarify.wire/1; owns the temporary clarification process and generates questions, options, and evolving Draft previews. |
| dsh-plugin-auxiliary-runtime | Provides Clarify's same-process model execution, limits, cancellation, and separately sourced auxiliary usage. |
The standalone SeekTTY shell presents its core command catalog. Activating the two Host plugins in the same Profile expands that catalog with the complete /clarify workflow.
[Active Session + composer draft]
|
v
+------------------+ clarify Remote +------------------+
| SeekTTY consumer | -----------------------> | Clarify plugin |
| /clarify adapter | <----------------------- | process / model |
+--------+---------+ live Draft preview +--------+---------+
| |
| | same-process run
| v
| +-------------------+
| | Auxiliary Runtime |
| | limits / cancel |
| | usage ledger |
| +---------+---------+
| |
| v
| [official model route]
| off-transcript, no-tools
|
| accept: Draft returns to the composer
v
[review and edit]
|
| press Enter
v
[formal Session message]
|
| /plan when an implementation plan is useful
v
[plan review -> Agent execution]
Auxiliary snapshot ---------------------> SeekTTY /status
Official | Auxiliary | CombinedMain Session transcript
Questions, options, preview revisions, and refine feedback live in a temporary clarification process held in Host memory. It enters stale after 15 minutes without interaction by default and reports staleReason=ttl-expired. The main Session transcript receives the formal user message only after you submit the accepted Draft. Clarification state stays out of the input queue, pending interactions, Plan, Goal, Profile files, and SeekTTY local files.
Auxiliary model usage
Each Clarify model call is recorded by Auxiliary Runtime in the official storageDomain under auxiliary_runtime. Official tokenUsage continues to represent Agent-loop calls. Auxiliary derives Combined values from the four disjoint buckets—uncachedInputTokens, outputTokens, cacheReadTokens, and cacheWriteTokens—at read time, and SeekTTY /status validates and displays the snapshot. The auxiliary ledger stores call identity, purpose, status, token buckets, normalized failures, and timestamps; prompts, message text, model output, custom answers, credentials, and filesystem paths stay outside the ledger.
Start plugin-backed Clarify from the composer
SeekTTY adds /clarify to its local command catalog while the dsh-plugin-clarify Host plugin exposes a compatible six-method Remote with clarify.wire/1. The last jointly accepted Release still installs Clarify 0.2.1; 0.2.0 remains an available rollback artifact. The unpublished trio SeekTTY 1.2.1 + Auxiliary Runtime 0.1.1 + Clarify 0.2.2 has Lane A no-key PTY evidence and 2026-08-22 Lane B live-provider observations on candidate4. This is not a Release or complete joint acceptance. Details are in [Verified scope](#verified-scope).
- Run it from the command palette to keep the whole composer as the seed.
- Type
/clarify some textto use the argument as the seed. - End an existing draft with a standalone
/clarifytoken or line to use the preceding draft as the seed.
Every answer refreshes the live Draft preview. The number of questions follows the unresolved decisions in the current Session: Clarify usually asks one focused question at a time and moves directly to review when the preview is ready to send. You can answer, refine the preview directly, accept it, or cancel. Accepting writes the reviewed Draft into the ordinary composer; Enter remains the explicit send action.
Custom interface and code themes, including VS Code imports
Theme customization is a first-class SeekTTY feature: interface background and text colors are editable, code-block colors and syntax styles are independently editable, and /theme import accepts local VS Code JSON/JSONC themes with portable TextMate token colors. A palette of 3–16 colors can also generate a complete light or dark theme for preview and further adjustment.
TypeScript in the DeepSeek light interface

Tool parameters, file reads, and Diff in the DeepSeek dark interface

Markdown fences disappear into continuous code surfaces. Assistant code, Shell commands, structured tool parameters, file reads, JSON, and Diff use the same active code theme; ordinary conversation text keeps the interface style. Every code background occupies continuous terminal cells and forms one uninterrupted surface.
Harness capabilities available in the TUI
The current release covers these capabilities:
| Area | Available operations |
|---|---|
| Conversation and runs | Streaming responses, Markdown/GFM, fence-free theme-aware syntax-highlighted code blocks, links, tables, reasoning visibility, collapsed/expanded/hidden tool cards, model retries, compaction, output-limit and error states, and Ctrl+C cancellation |
| Sessions | Create, resume, list, full-text search, rename, fork, archive, copy the last answer, export ZIP, or /export md Markdown |
| Workspaces | Start from the current directory; add, select, rename, unregister, reorder, and reorder sessions within a workspace; unregistering never deletes files or session logs |
| Agent modes | Standard, Code/PTC, Minimal, and Cordis/Create baseline modes plus dynamically registered Agent Presets; switching an active conversation creates a new session in the same workspace |
| Models and Providers | Dynamic Provider, model, and supported reasoning-effort discovery; current route display; per-session switching; catalog, credential, and routing diagnostics |
| Permissions and approvals | Inspect and switch Host permission presets, cycle with Shift+Tab, confirm risky upgrades, allow one tool call, skip further prompts for a tool in this session, or reject |
| Input queue and steering | Queue prompts while the Agent runs, inspect/edit/remove entries, steer one entry or the entire queue into the active turn, and send /steer directly |
| Human interaction | Single choice, multi-select, custom answers, skip, cancel, and plan review; submitting an interaction returns to the latest output while the blocked turn resumes, with /pending recovery when retrying is needed |
| Image attachments | Add PNG, JPEG, GIF, or WebP by pasting an image or file path, or with /attach; macOS reads the clipboard via osascript (optional pngpaste), Linux via wl-paste/xclip, Windows via PowerShell; pending images appear under the composer; enforce the live Host imageLimits catalog (count, bytes, pixels, optional side length); render inline when supported and fall back to file metadata otherwise. Image-capable models come from that same live catalog. Official dsh 0.1.1-rc.2 Vision-Exp must be selected explicitly in /model. Lane A observed it listed and selectable; Lane B on candidate4 observed PNG send-and-clear and JFIF via the official Host PNG variant. See [Verified scope](#verified-scope) |
| Plan, Goal, Todo, and compaction | Native /plan, /goal, and /compact commands with plan review, goal state, Todo counts, and compaction records in the transcript |
| Tools and produced files | ◆ action · duration headers with live elapsed time and connected invocation code, dynamic tool catalog, parameters, execution-boundary guidance, line-numbered highlighted file reads, highlighted Shell/JSON/Diff views, safe native terminal ANSI, generic fallback cards, session-wide produced-file listing grouped by turn, in-TUI view, path copy, and confirmed external open |
| Subagents | Inspect direct children, activity, tree state, token use, and duration; open continuable or read-only sessions and stop an active child turn |
| Background jobs and workflows | Job type, status, start/end times, duration, and detail views; workflow phases, members, results, and failure states in the transcript |
| Statistics and trajectory | Per-turn steps, LLM/tool time, first-token latency, throughput, cache hit, input/output tokens, model requests, running calls, and structured trajectory inspection |
| Profiles | List, create, copy, switch, and diagnose terminal compatibility; controlled restart restores the workspace, session, unsent draft, and attachments |
| Settings and credentials | First-run API-key setup when no usable Provider exists; enumerate every Settings namespace in the active Profile; dedicated default-model, permission, Agent-mode, and marketplace-source controls; Schema fallback for all other fields; write-only secrets |
| Plugins and marketplace | /plugin center, installed list, search, details, install, remove, update, Bundle ordering, source management, and diagnostics; npm, Git, tarball, and local-path specs |
| Skills and MCP | Dynamic user-invocable Skill discovery and native command insertion; MCP tools, instances, settings, load state, and separate process/remote-service risk information |
| Feedback | Session feedback plus positive/negative Assistant-message ratings, optional notes, and feedback removal |
| Status and diagnostics | Harness, Node, platform, Profile, workspace, session, mode, model, permission, pnpm, plugin state, and actionable diagnostics |
| Themes | Independent interface and code-block themes; automatic code colors follow DeepSeek dark/light; named custom themes, manual colors, 3–16-color generation, and local VS Code JSON/JSONC import with TextMate colors and portable token styles; live preview, contrast warnings, terminal-color fallbacks, and NO_COLOR |
| Interface language | Live Chinese/English switching through /language; the explicit preference is shared with Harness Web through the official locale.preference Settings value, while auto follows the terminal locale |
Models, Providers, Agent Presets, permissions, Host commands, tools, Settings, Skills, MCP, and marketplace sources are discovered from the running Harness. New capabilities registered by upstream or third-party Bundles enter the dynamic catalogs, with Schema controls, structured details, and actionable diagnostics available while dedicated views evolve.
Quick start
The repositories and GitHub Releases are public. The last jointly accepted Clarify workflow remains official DeepSeek Harness 0.1.0-rc.8 with SeekTTY 1.2.0, Auxiliary Runtime 0.1.0, and Clarify 0.2.1. Install those published tarballs through the native dsh plugin command:
pnpm add --global @deepseek-ai/dsh@0.1.0-rc.8
dsh plugin --profile tui add https://github.com/Hilbert-beinghappy/seektty/releases/download/v1.2.0/seektty-1.2.0.tgz
dsh plugin --profile tui add https://github.com/Hilbert-beinghappy/dsh-plugin-auxiliary-runtime/releases/download/v0.1.0/dsh-plugin-auxiliary-runtime-0.1.0.tgz
dsh plugin --profile tui add https://github.com/Hilbert-beinghappy/dsh-plugin-clarify/releases/download/v0.2.1/dsh-plugin-clarify-0.2.1.tgz
dsh --profile tuiThis path consumes packed artifacts and avoids Git-source prepare / allowBuilds. The first package installs the standalone SeekTTY shell, the second provides Auxiliary model execution, and the third provides the Clarify Host service and Remote. Once both Host plugins are active in the same Profile, SeekTTY discovers the Remote and adds /clarify to the terminal command catalog.
SeekTTY 1.2.1 currently tests official 0.1.1-rc.2. The unpublished trio SeekTTY 1.2.1 + Auxiliary Runtime 0.1.1 + Clarify 0.2.2 has Lane A no-key PTY evidence and 2026-08-22 Lane B live-provider observations on candidate4. This is not a Release or complete joint acceptance. Details are in [Verified scope](#verified-scope). There is no v1.2.1 Release asset yet; install this candidate from a locally packed tarball, or from a future GitHub Release listed at https://github.com/Hilbert-beinghappy/seektty/releases. Do not invent a download URL.
Bare deepseek launcher
SeekTTY supports macOS, Linux, and Windows. Install the same Release tarball globally; on Windows, pnpm add --global creates PATHEXT-aware shims for dsh.cmd.
pnpm add --global https://github.com/Hilbert-beinghappy/seektty/releases/download/v1.2.0/seektty-1.2.0.tgz
export SEEKTTY_SPEC=https://github.com/Hilbert-beinghappy/seektty/releases/download/v1.2.0/seektty-1.2.0.tgz
deepseekPowerShell uses the same URL:
pnpm add --global 'https://github.com/Hilbert-beinghappy/seektty/releases/download/v1.2.0/seektty-1.2.0.tgz'
$env:SEEKTTY_SPEC='https://github.com/Hilbert-beinghappy/seektty/releases/download/v1.2.0/seektty-1.2.0.tgz'
deepseekdeepseek requires dsh on PATH, or DSH_BIN pointing at the executable. SEEKTTY_SPEC pins Profile reconciliation to the same prebuilt tarball. Without that override, this source tree's default spec is github:Hilbert-beinghappy/seektty#v1.2.1; that Git tag exists only after the Release is created. Until then, pack seektty-1.2.1.tgz and set SEEKTTY_SPEC to that file. Later runs boot the same Profile. Initial tasks, workspaces, Session resume, and custom Profiles are supported:
deepseek "check this project"
deepseek --cwd ../project
deepseek --resume
deepseek --resume <sessionId>
deepseek --profile team-tui
deepseek --version
deepseek --updatedeepseek --update force-scans and installs at most one permitted component. Default SEEKTTY_UPDATE=auto: on launch it fetches official dsh npm latest (discovery only; not next or GitHub pre-releases) and the newest SeekTTY GitHub Release. SeekTTY is self-first: a SeekTTY update wins the round and skips dsh. Otherwise dsh installs only when latest is in the peer-aligned auto range (legacy rc.6–rc.8 or the exact current tested Host) and is newer than the installed dsh --version. Future or gap Hosts such as 0.1.1-rc.1 are mentioned but never installed. DSH_BIN pins skip dsh. Local link:/file: installs and SEEKTTY_SPEC overrides are left alone. Network or install failures never block boot. Set SEEKTTY_UPDATE=check to restore a post-session notice, or SEEKTTY_UPDATE=0 to disable.
First-run API key setup
When the active Profile has no usable model Provider, and the official DeepSeek Provider exposes a missing writable credential reference, SeekTTY opens a centered write-only prompt before the first interface frame. An
…