DeepSeek TUI v0.9.4

DeepSeek TUI is an open source terminal based coding agent designed for DeepSeek AI models. Unlike a simple chatbot, it can interact with your local workspace, execute shell commands, manage git operations, and assist with software development tasks directly from the command line.

The project is written in Rust and focuses on speed, low resource usage, and keyboard driven workflows. It is especially appealing for developers who spend most of their time in the terminal.

DeepSeek TUI is gaining attention among developers who prefer terminal based workflows and want direct access to AI powered coding tools without relying on heavy IDE integrations. Built around DeepSeek models, it transforms the terminal into an interactive coding assistant capable of editing files, running commands, and managing development workflows.

Download DeepSeek TUI v0.9.4 - Software Mirrors

Download DeepSeek TUI v0.9.4 Windows 64bit
codew-windows-arm64.exe | 202.5 kB

Download DeepSeek TUI v0.9.4 Windows 64bit
codew-windows-x64.exe | 217.5 kB

Download DeepSeek TUI v0.9.4 Windows 64bit
codewhale-tui-windows-arm64.exe | 54.33 MB

Download DeepSeek TUI v0.9.4 Windows 64bit
codewhale-tui-windows-x64.exe | 67.15 MB

Download DeepSeek TUI v0.9.4 Windows 64bit
codewhale-windows-arm64-portable.zip | 27.33 MB

Download DeepSeek TUI v0.9.4 Windows 64bit
codewhale-windows-arm64.exe | 12.04 MB

Download DeepSeek TUI v0.9.4 Windows 64bit
codewhale-windows-arm64.zip | 27.33 MB

Download DeepSeek TUI v0.9.4 Windows 64bit
codewhale-windows-x64-portable.zip | 29.42 MB

Download DeepSeek TUI v0.9.4 Windows 64bit
codewhale-windows-x64.exe | 14.78 MB

Download DeepSeek TUI v0.9.4 Windows 64bit
codewhale-windows-x64.zip | 29.42 MB

Download DeepSeek TUI v0.9.4 macOS arm64
codew-macos-arm64 | 329.75 kB

Download DeepSeek TUI v0.9.4 macOS arm64
codewhale-macos-arm64 | 10.57 MB

Download DeepSeek TUI v0.9.4 macOS arm64
codewhale-macos-arm64.tar.gz | 25.73 MB

Download DeepSeek TUI v0.9.4 macOS arm64
codewhale-tui-macos-arm64 | 45.15 MB

Download DeepSeek TUI v0.9.4 macOS x64
codew-macos-x64 | 331.34 kB

Download DeepSeek TUI v0.9.4 macOS x64
codewhale-macos-x64 | 11.72 MB

Download DeepSeek TUI v0.9.4 macOS x64
codewhale-macos-x64.tar.gz | 27.66 MB

Download DeepSeek TUI v0.9.4 macOS x64
codewhale-tui-macos-x64 | 50.24 MB

Download DeepSeek TUI v0.9.4 macOS arm64
codew-macos-arm64 | 329.75 kB

Download DeepSeek TUI v0.9.4 macOS arm64
codewhale-macos-arm64 | 10.57 MB

Download DeepSeek TUI v0.9.4 macOS arm64
codewhale-macos-arm64.tar.gz | 25.73 MB

Download DeepSeek TUI v0.9.4 macOS arm64
codewhale-tui-macos-arm64 | 45.15 MB

Download DeepSeek TUI v0.9.4 Linux x64
codew-linux-x64 | 448.55 kB

Download DeepSeek TUI v0.9.4 Linux x64
codewhale-linux-x64 | 12.9 MB

Download DeepSeek TUI v0.9.4 Linux x64
codewhale-linux-x64.tar.gz | 28.78 MB

Download DeepSeek TUI v0.9.4 Linux x64
codewhale-tui-linux-x64 | 54.42 MB

Download DeepSeek TUI v0.9.4 Linux arm64
codew-linux-arm64 | 324.6 kB

Download DeepSeek TUI v0.9.4 Linux arm64
codewhale-linux-arm64 | 11.53 MB

Download DeepSeek TUI v0.9.4 Linux arm64
codewhale-linux-arm64.tar.gz | 27.03 MB

Download DeepSeek TUI v0.9.4 Linux arm64
codewhale-tui-linux-arm64 | 46.87 MB

DeepSeek TUI v0.9.4 Release Notes:

Codewhale is the public product from Shannon Labs. The codewhale
command, npm package, and release-asset names remain lowercase technical
identifiers. The legacy npm package deepseek-tui is deprecated and
receives no further releases. Users coming from v0.8.x legacy deepseek /
deepseek-tui names should migrate with docs/REBRAND.md.

Install

Recommended — npm (one command, all three entrypoints)

bash
npm install -g codewhale
The wrapper downloads the matched codewhale, codew, and codewhale-tui binaries from this Release and places them in the same directory.

Docker / GHCR

bash
docker run --rm -it \
  -e DEEPSEEK_API_KEY="$DEEPSEEK_API_KEY" \
  -v codewhale-home:/home/codewhale/.codewhale \
  ghcr.io/hmbown/codewhale:v0.9.4
The image ships the codewhale dispatcher, codew shim, and codewhale-tui runtime. The latest tag is also updated on release.

Cargo (Linux / macOS)

bash
cargo install codewhale-cli codewhale-tui --locked
Both crates are required — codewhale-cli produces the codewhale dispatcher and codew shim, while codewhale-tui produces the interactive runtime that the dispatcher delegates to. Installing only one crate will fail at runtime with a MISSING_COMPANION_BINARY error.

Manual download — platform archives (recommended)

Each archive below contains the codewhale dispatcher, codew shim, and codewhale-tui runtime, plus an install script:
  • Linux x64: codewhale-linux-x64.tar.gz | install.sh
  • Linux ARM64: codewhale-linux-arm64.tar.gz | install.sh
  • Android ARM64 (Termux): codewhale-android-arm64.tar.gz | install.sh
  • macOS x64: codewhale-macos-x64.tar.gz | install.sh
  • macOS ARM: codewhale-macos-arm64.tar.gz | install.sh
  • Windows x64 (installer): CodeWhaleSetup.exe | NSIS setup
  • Windows x64: codewhale-windows-x64.zip | install.bat
  • Windows x64 (portable): codewhale-windows-x64-portable.zip | —
  • Windows ARM64: codewhale-windows-arm64.zip | install.bat
  • Windows ARM64 (portable): codewhale-windows-arm64-portable.zip | —
Unix (Linux / macOS):
bash
tar xzf codewhale-.tar.gz
cd codewhale-
./install.sh
Windows:
  • For the installer path, run CodeWhaleSetup.exe; it installs codewhale.exe, codew.exe, and codewhale-tui.exe under %LOCALAPPDATA%\Programs\CodeWhale\bin and adds that directory to the current-user PATH.
  • Extract the archive for your machine: codewhale-windows-x64.zip or
codewhale-windows-arm64.zip
  • Run install.bat (copies to %USERPROFILE%\bin)
  • Add %USERPROFILE%\bin to your PATH
The portable Windows archive skips the install script — extract and run from any directory. The NSIS installer is currently unsigned and may trigger Windows SmartScreen until a signing certificate is wired into the release pipeline. Each platform also has bare, unarchived binaries attached below (codewhale-, codew-, and codewhale-tui-) — the npm wrapper and the in-app codewhale update download the matched runtime binaries, whereas the .tar.gz / .zip archives above are the recommended manual download and additionally bundle an install script. The legacy npm package deepseek-tui is deprecated and is not republished. For migration from v0.8.x legacy binary names, see docs/REBRAND.md.

Verify (recommended)

Download the checksum manifests from this Release and verify:
bash

Linux — archive bundles

sha256sum -c codewhale-bundles-sha256.txt --ignore-missing

Linux — individual binaries

sha256sum -c codewhale-artifacts-sha256.txt --ignore-missing

macOS

shasum -a 256 -c codewhale-bundles-sha256.txt --ignore-missing shasum -a 256 -c codewhale-artifacts-sha256.txt --ignore-missing

What's in v0.9.4

Codewhale v0.9.4 ships the release-train harness work: the familiar Fleet roster/setup face with a clear operator-leader and user/folder scope, a work strip that keeps actionable agents instead of a permanent archive, waiting policy that forbids polling without freezing independent work, calmer tool output and session recovery, account/Workflow-search/ automation/handoff surfaces, a shorter translation-ready website, and release-blocker fixes across permissions, DeepSeek Responses, SQLite, File edits, terminal width, and Windows installation.

Added

  • Memory maintenance: remember gains revise and retire beside the
default append. Both name the exact note they target and both require the evidence for the change. Append-only memory decays — a correction sits behind the note it contradicts and both keep reaching the model — so the model can now keep its own durable notes true instead of only adding to them.
  • An audit trail for durable state the model writes about you. Every
in-place memory edit is journalled to memory/JOURNAL.md, and every continual-harness refine / remove to a JOURNAL.md beside its state, each with before, after, and evidence. Harness removal previously left no record at all even though the entry leaves state entirely, so the journal is now the only place its content survives.
  • A first-run tip that says so: the first time Codewhale saves something
durable it points at /memory, translated into all fifteen complete locale packs. This state shaped later sessions and nothing ever mentioned it existed.
  • Sub-agent checkpoint resume: agents/followup resumes an
interrupted_continuable child from its checkpoint into a fresh agent loop — new agent id, original prompt plus the prior conversation tail — when a runtime is attached, and otherwise keeps queue-only semantics with the continuation_handle returned; a second followup on the same interrupted id returns the existing resumed target instead of spawning a duplicate (PR #5242).
  • MCP Registry discovery with Registry-first tool selection: registry_sync
surfaces the eligible local stdio catalog as a complete model-side candidate set, connect-failure messages classify early-exit and usage-help output and point recovery at the next Registry candidate, and a bundled mcp-discovery skill documents the flow (PR #5238).
  • Progressive fresh-context disclosure: fresh sessions ship a minimal
constitutional kernel — ground truth, user intent and scope, truthful completion, guarantees in mechanism, and precedence — with procedural playbooks disclosed on demand, an opt-in project context pack (project_context_pack_enabled) counted in context reports, and load_skill catalogue discovery via name="list"; the measured fresh-context budget drops by roughly 40% (PR #5077).
  • Named Fleet store v2: one self-contained TOML Fleet per configuration
(schema = "fleet"), with scope-explicit selection (user-global default vs folder override), migration receipts from legacy role profiles, and atomic saves that refuse to clobber a different Fleet on the same slug.
  • Scout replaces the user-facing "faster" control: catalog-verified fast
siblings only, never a guessed model name; pinned Scout survives operator changes.
  • Truthful model-picker rows: vision/tools/limits chips only when the catalog
knows, with provider → family → exact model grouping.
  • Opt-in product telemetry, off by default. A first-run notice asks once, on
a terminal, with declining pre-selected — Enter declines. Nothing is collected unless both telemetry = true and a recorded "Enable" answer are present, so a telemetry = true written before this release stays inert: the key has been settable and inert for a long time, and setting it was never consent. An enabled session sends its batches to the first-party ingest endpoint, https://telemetry.codewhale.net/v1/telemetry, which is the shipped default for telemetry_endpoint. That is a Cloudflare Worker whose complete source is in this repository under telemetry-ingest/; it writes to Workers Analytics Engine, whose row is exactly _sample_interval, blob1blob20, dataset, double1double20, index1, and timestampthere is no IP, country, or geo column, so storing one is structurally impossible rather than merely disabled. The handler reads two request headers, never touches the request's geo properties, logs nothing, and validates against a closed field set that rejects an entire batch carrying any unpublished key. Cloudflare's retention for that data is a fixed three months. Setting telemetry_endpoint = "" instead writes each batch to $CODEWHALE_HOME/telemetry/dryrun.jsonl and constructs no HTTP client at all, so you can read exactly what would have been sent. Turning it off is an answer, not a flag: it deletes the random install id, truncates every buffered event, and leaves a permanent tombstone that a session already running re-checks before it appends and before it sends. A failed wipe fails closed. CODEWHALE_TELEMETRY=0 is a hard floor that beats --telemetry true and the config key, and a value the parser cannot read also resolves to off. Fleet workers are hard-off. A repo-local .codewhale/config.toml can set neither key. Never collected: prompts, completions, tool arguments, diffs, file contents, filenames, paths, git remotes, repo or branch names, memory entries, chat history, credentials (not even a boolean asserting one exists), model ids, custom provider table names, MCP server names, error or panic message bodies, per-event timestamps, keystrokes, clipboard, screenshots, or location. The full schema is docs/TELEMETRY.md, and a test parses the field names out of that file and asserts set equality with the structs the serializer uses. This supersedes the roadmap's previous "no Codewhale product telemetry" entry, which moves from "Ruled out" to an opt-in framing. What stays ruled out: always-on or silent telemetry, per-keystroke or per-tool-call phone-home, and any third-party ad or analytics SDK in the runtime binary.
  • Registered GLM-5.3 (direct Z.ai) and z-ai/glm-5.3 (OpenRouter) as
selectable GLM routes, with their aliases (glm-5.3, glm-5-3, zai-glm-5.3, zai-glm-5-3). Z.ai had not released GLM-5.3 as of 2026-08-03 — the ids are registered so they resolve to the Z.ai/OpenRouter routes instead of being rewritten to another vendor's model, and they will fail upstream until Z.ai ships the model. Metadata (context, output, reasoning controls) is inherited wholesale from GLM-5.2 pending official Z.ai release metadata; pricing is intentionally absent, and GLM-5.2 remains the default Z.ai model. No third-party gateway roster gained the model: OpenCode Zen, OpenCode Go, Alibaba Model Studio, and TelecomJS publish no glm-5.3 entry, so Codewhale advertises none.
  • Managed Codewhale account commands (account login, status, logout, and
keys) with browser device flow, profile- and origin-scoped secure sessions, refresh/revocation, redacted BYOK-vault management, and a token-free Runtime account receipt. Provider authentication remains separate, and cloud remains a compatibility alias.
  • /automation operator controls to list, inspect, pause, resume, delete, and
run durable automations. Creation remains on the approval-gated model-visible automation tool.
  • A provider-neutral WorkflowSearchSpec authoring and freeze boundary, plus
structured 2–16-candidate experimental search in the best-of-N Workflow starter. It freezes baseline, route, evidence, evaluator, gate, score, budget, and review policy before admission; it validates gate/scoring commands but does not execute or certify them itself.
  • The bundled generation-9 handoff skill for compact, decision-ready
continuation across sessions.
  • Expanded terminal LaTeX rendering for aligned and matrix environments,
cases, arrays, text/font/accent commands, brackets, symbols, and command-aware scripts (PR #4981).
  • Exact 40-character build provenance and secure account-session capability
receipts on /v1/runtime/info; unknown source provenance continues to fail closed.
  • Acceptance-level Gherkin coverage locking the existing user-command
precedence, alias shadowing, fallback, and invalid-command error contract (PR #4992).
  • Agent Plugins v1.0.0: consume, publish, and slugify packaged sub-agent
briefs, with an install/update/uninstall on-ramp in the TUI (PR #5182). A plugin bundles a prompt, posture, and routing as one shareable artifact; on-disk migration of the older plugin.toml scaffold is deliberately out of scope for this train.
  • send_later: a model-callable one-shot delayed continuation tool, so the
model can schedule a single future nudge without an operator-approved durable automation (PR #5138).
  • /advisor: an opt-in background advisor watcher for live turns (PR #5139).
  • Notification quiet mode with per-category switches and action-first copy
(PR #5066).
  • Automation scheduling forms — one-shot ONCE, five-field cron, and honest
watcher modes — created through the approval-gated automation tool (PR #5183).
  • Sub-agent resume_from continuation chains (PR #5142), child-result
diff-tainting when a claimed diff is not visible to git, per-turn usage receipts on the exec stream-json stream, and spawn receipts that report the model each sub-agent actually ran on.
  • Transport resilience: sub-agent exec transport retries with a 600 s
default (PR #5210), SSE header stalls retryable instead of fatal, and headless turn resume after mid-stream network drops with an EX_TEMPFAIL exit.
  • Session durability and control: a deterministic compaction continuation
contract (PR #5064), persisting interrupted output (PR #5206), stop-word cancellation (PR #5207), token-counter refresh (PR #5204), deny-by-default approval cards (PR #5090), and the Operate completion gate (PR #5067).
  • zh-Hant promoted to a full shipped locale with complete en.json parity
(PR #5143).
  • A persistent update-available chip in the header, with the startup update
check throttled and naming the right command.
  • RLM static intent extraction for code blocks (rlm_block_intent.rs)
landed as groundwork for a future code-mode approval flow; it is not yet wired into the turn pipeline and ships dormant by design.

Changed

  • /fleet is the familiar roster/setup face again. The operator row is the
Fleet leader (session model); the header names the selected saved Fleet and whether it is user-global or folder-scoped. Named-Fleet switching lives under /fleet fleets (Enter selects in the row's own scope). Session route changes stay temporary until /fleet save, /fleet save-as, or /model save-default.
  • Waiting-for-subagents directions forbid peek/status polling and sleep-as-wait,
but allow independent work that does not depend on a child's result — the parent no longer freezes mid-turn with useful non-conflicting work available.
  • workflow run no longer requires --fleet; a saved Fleet is an optional pin
layer over roles + the session route.
  • Homepage and getting-started copy is shorter and scannable across locales,
with dictionary key and {brand} token parity preserved.
  • Tool results now render as ordinary bounded previews with real expansion;
storage, retention-ledger, and internal evidence language no longer leak into normal transcripts.
  • Prose wrapping, goal state, modal questions, composer-tail behavior, and
ambient motion now follow one deterministic interface contract across narrow terminals and fast streams.
  • Scout and reviewer Fleet roles gain network access and the bounded
verification surface for real reconnaissance while retaining the no-write, no-raw-shell security floor.
  • Workflow runs may describe up to 1,000 tasks while admitting at most 16 live
tasks at once through the host concurrency gate. Tournament ordering now supports explicit score-first selection while retaining its cost-first default.
  • Runtime permission compatibility inputs resolve to one live
permission_posture. Auto-Review can proceed without approval or structured question modals, unresolved holds fail closed, and a call planned under stale authority is retried after a posture change (PR #5025).
  • Duplicate and drifting per-turn metadata has been removed in favor of
runtime-owned authority, and large inline account and skill tests now live in owned test seams.
  • Pinned Ratatui to 0.30.0 and ratatui-core to 0.1.0. ratatui-core 0.1.1+
makes Terminal::clear() issue a blocking cursor-position report that raced the TUI input loop and could kill first launch; both pins are load-bearing, because 0.30.0 declares ratatui-core ^0.1 and would otherwise resolve forward on its own (PR #5192 by @bistack; upstream ratatui/ratatui#2640).
  • Updated globset to 0.4.19, clap-complete to 4.6.8,
futures-util to 0.3.33, libc to 0.2.189, actions/stale to 11.0.0, and docker/login-action to 4.5.2. The locked graph also includes the event-listener 5.4.2 fix for RUSTSEC-2026-0221.
  • The progress surface now speaks plainly everywhere: the last user-visible
"Work update is pending" notices say "To-do list", the tool constructor and the docs name todo_write as the single canonical progress tool, and work_update, TodoWrite, and todo stay registered as hidden compatibility aliases so saved transcripts keep replaying.
  • Sub-agent and agents/wait waits stay short by default and by cap:
blocking waits default to 30 s and refuse to block past 120 s, because a blocked wait deafens the session to typed input and settled children already report back as sentinels.
  • Bash action=wait honors timeout_secs (seconds) and bare timeout
(milliseconds) alongside canonical timeout_ms, and block as an alias for wait, so a habit formed on other wait tools gets the duration it asked for instead of silently falling back to the 30 s default; the result metadata reports the real wait_timeout_ms applied.

Fixed

  • The memory journal is no longer indexed as memory. It is Markdown in the
memory tree, so the source walk collected it and every retired note re-entered the searchable set under its before: line — putting the exact facts a revision had just removed back into the prompt.
  • memory_path pointed at an already-native store no longer derives a
second store nested inside it, which silently wrote somewhere other than the file the user named.
  • muse and muse-spark resolved to muse-spark-1.1 in the agent
registry while config had defaulted to muse-spark-1.2, so the CLI and app-server routed those aliases somewhere the configured default never pointed. The registry now carries 1.2 and the contributor variant.
  • An explicit type=builder (or its implementer alias) plus
write_authority=read_only now fails closed at spawn instead of launching a labeled write role that silently had only recon tools and then self-BLOCKED after burning a turn (#5123). The check is deliberately narrow, because two neighbouring combinations are legitimate and stay legal:
  • type=worker + read_only — worker is the unnamed default (it renders as
-- general) and takes its capability from authority, not from its name, so a -- read-only worker is an ordinary general-purpose child. Worker, scout, -- reviewer, and verifier remain the four canonical read-only Fleet roles.
  • any role + read_onlyrole is an identity for roster resolution, not
-- a capability claim, so an acceptance Workflow can still resolve -- implementer to its saved profile while scoping that child to verification. Callers that spelled a read-only narrowing as type: "implementer" should move it to role: "implementer".
  • User-global credentials survive an explicit workspace CODEWHALE_CONFIG_PATH
that selects a route with no local key — readiness probes the user-global provider table before concluding a key is missing.
  • Sub-agent token figures on the work bar accumulate input+output (the same
total the worker budget uses) instead of completion tokens alone; elapsed time still freezes when the child settles.
  • Live work-bar rows for sub-agents show how many to-dos they still have
left (N left) when the child's own ledger has unsettled items — never a fabricated zero when no list exists.
  • Surfaces no longer claim an OS sandbox on platforms that cannot enforce one.
The policy resolver takes no platform input, so on default Linux (bubblewrap is opt-in) and on all Windows the header chip read files: workspace and /status read sandbox workspace-write while nothing was restricted. Both now resolve the real backend and say (unenforced).
  • tool_category hook conditions matched only retired tool names, so a
category = "shell" deny hook — the security control docs/HOOKS.md documents — silently never fired. Categories now use the registered names, and multi-action tools classify by action.
  • A Retry-After header of -5, nan, or 1e300 crashed the request task
(Duration::from_secs_f64 panics on a negative). Parsing is now guarded and bounded to one hour.
  • Bearer tokens no longer leak into operator-visible receipts. `Authorization:
Bearer ` split into two tokens and the JWT matched no redaction rule; prefix matching was also case-sensitive, so SK-live-… survived.
  • prune_older_than destroyed the NEWEST rollback snapshots and kept the old
ones — on every boot, for any workspace with snapshots spanning the retention window. Both prune paths now share one orphan-chain rebuild and preserve each survivor's real timestamp.
  • An absolute or relative command path no longer defeats every execpolicy deny
rule (/bin/rm -rf / did not match a rm -rf / rule), and a typed Allow rule no longer auto-approves a chained suffix such as git log ; curl … | sh.
  • Wrong types on File read range params and Bash stdin/cwd/task_id are now
errors instead of silent defaults — a start_line:"1200" string used to return the head of the file, and a non-string stdin ran the command with no stdin and reported success.
  • Multibyte tool ids no longer panic the context inspector, wide (CJK) text no
longer overflows the decision card, and a hostname like 127.evil.example.com is no longer treated as loopback.
  • Refusals name calls the model can actually make (rlm action='open' rather
than a retired rlm_open; Bash rather than exec_shell).
  • Sub-agent dispatch no longer aborts the process. The Tokio runtime was built
by #[tokio::main], leaving every worker thread on the 2 MiB default while only the owner thread received the explicit 16 MiB stack — and the engine runs on a worker. A debug-build agent dispatch exceeded that stack and raised SIGABRT, which is not a panic and so could not be caught; the process died mid-spawn with no child request ever issued. Release builds were unaffected.
  • Fleet profiles that pin a provider no longer leak a bare model id onto the
session route. model_overrides exported each role's model while dropping its provider, so a scout pinned to another provider's model was dispatched against the active client and denied at the wire — visible as an instant auth failure on the first sub-agent of a fan-out.
  • The rail's Pinned panel no longer spends four rows saying "No active work".
An empty panel now collapses like the Tasks panel always has, and the settings migration no longer folds the default sidebar_focus = "auto" into a pinned always-on strip, which had silently handed that panel to every user who had a settings file at all. (An empty panel collapses; a panel holding settled to-dos or finished workers is not empty — see the standing-register entry below.)
  • The work bar keeps settled to-dos and an honest Subagents header, while
completed/cancelled workers collapse out of the Top strip so fan-outs do not permanently eat the transcript. Failed or interrupted workers stay visible (they still need attention). Settled agents remain reachable through the Agents panel and catalog. To-do rows say their state in words (pending / in progress / completed / cancelled), and sub-agent rows carry type, objective, elapsed, and input+output tokens. Every work row is a door in every rail panel and placement: click and Enter open the row's world (work inspector / agent details — finished agents included) instead of doing nothing. A click after the detail pager closed itself reopens the detail rather than being swallowed by a stale toggle.
  • The rail strip yields its rows to the transcript when the terminal cannot
seat both, so the idle ocean survives at 24 rows instead of being evicted.
  • code_execution and js_execution no longer describe themselves to the model
as sandboxed. Both are ordinary local subprocesses with no seccomp, jail, or container (PR #5221 by @h3c-hexin and @asto18089).
  • Model Studio reasoning controls now fail closed on the host rather than on the
provider enum, so a custom base_url no longer receives Alibaba-specific enable_thinking fields, and qwen3.8-max is no longer sent a thinking switch it does not accept (PR #5233 by @Inference1, closing #5203).
  • config.example.toml no longer claims Shift+Tab cycles the reasoning tier.
Shift+Tab cycles the permission posture; Ctrl+T cycles reasoning (found by @vFONGv, PR #5229).
  • Alibaba Model Studio reasoning controls are now route- and model-scoped
instead of provider-wide (#5203, harvested from #5233 by @Inference1). Codewhale sends enable_thinking / preserve_thinking / reasoning_effort only when the configured base_url is a verified Alibaba Chat Completions host, so pointing a modelstudio-* provider ID at a custom gateway no longer injects DashScope's dialect into it. qwen3.8-max and qwen3.8-max-preview are thinking-only and no longer receive an enable_thinking: false they cannot honor; preserve_thinking is sent for the models documented to accept it, so their reasoning trace survives into the next turn; and deepseek-v4* / glm-5.x map the reasoning tier onto the documented high / max ladder.
  • xAI device login now recovers from a config that points at a missing
Codewhale-owned credential generation instead of failing every attempt with a generic activation error, and finalize failures report the full error chain (#5032).
  • API keys saved to the secret store no longer read as unconfigured for
providers that are not currently active; a configured Kimi/Moonshot key survives provider switches and restarts without re-entry (#5033).
  • Switching to the Codex provider with no saved model now lands on the live
roster's flagship model instead of a stale static default (#5034).
  • Worktree-isolated Fleet builders no longer contend on the per-workspace
delegated-coordination lock, and a failed lock acquisition is retried on use instead of being memoized for the life of the process (#5036).
  • Fleet dispatch now rebinds the child client when the resolved profile
model requires a different wire protocol (DeepSeek flash on Responses), instead of failing deterministically on the worker's first request (#5042).
  • DeepSeek Responses now sends reasoning.effort: "none" for the Off tier,
shows a truthful notice instead of silently discarding server-side web_search_call items, and parses cache-hit, cache-miss, cache-write, and pricing telemetry while retaining the OpenAI-style nested fallback.
  • File edits now explain no-op and missing-search failures, reject newly
unbalanced C/C++ preprocessor replacements, handle the reported CRLF/non-ASCII cases, and safely relocate stale unified-diff hunks only when whole-file context is unique (PRs #5008 and #5030).
  • Circled digits, enclosed alphanumerics, and keycap graphemes use consistent
two-column measurement in Codewhale, Ratatui, and CJK terminals, preventing missing-character and phantom-space corruption (PR #5001).
  • SQLite connections install their busy timeout before locking setup and avoid
rewriting persistent WAL mode on every open, removing the concurrent-open release-gate failure.
  • The Windows installer preserves long current-user PATH values, their
registry type, and unrelated entries across install and uninstall (PR #5006).
  • Provider configuration no longer contains user-reachable panic paths when
metadata or prior credential state is missing.
  • Resuming a session restores composer text only from a same-session persisted
draft; submitted prompts and internal background-runtime envelopes remain in history instead of appearing in the composer (PR #5029).
  • Shared CI now handles bot-authored issue-link checks, provisions cargo-deny's
toolchain, and fetches the locked test graph before offline runtime-budget validation.
  • Re-quote each linker argument in the Windows OpenHarmony clang launcher so a
spaced SDK path (e.g. the default D:\DevEco Studio\... install) keeps its --sysroot intact through the final Rust link, and extend the no-SDK release guard to keep the re-quoting contract (PR #5095).
  • The shell tool reports the real elapsed wait time in its result content
instead of echoing the requested timeout (PR #5240).
  • Transcript wheel scrolling under iTerm2: xterm alternate-scroll (DECSET
1007) now stays off while mouse capture is active, so wheel events arrive as mouse events instead of being converted into arrow keys (#5223, PR #5234).
  • A stalled model stream no longer ends the turn as Completed over a
frozen reasoning block: a mid-stream chunk-timeout now counts toward the stream-error budget, so a stall with nothing streamed retries the request transparently, and a stall that exhausts the retry budget fails the turn with the real reason instead of reporting success.
  • A finished background shell task now wakes the engine even when no goal is
active: the idle loop starts an ordinary runtime turn so the completion reaches the model immediately instead of sitting unclaimed until the user types (a dead provider route claims the completion once and reports where the output lives instead of re-arming the same error every tick).
  • Sub-agent final reports that exceed the summary budget are now spilled to
a session artifact, and the truncation footer names the retrieve_tool_result ref for the elided middle instead of telling the model the bytes are unrecoverable; write failures degrade to the honest no-ref footer.
  • An interactive mid-stream network drop after partial output no longer fails
the turn: the partial reply is preserved as a committed assistant message, a runtime continuation message is appended, and the request is re-issued bounded by the stream-retry budget.
  • Large pasted input is no longer sent to the model twice as inline text and
as a backup .md paste file; the submitted message now carries only the @-mention so the model reads the file once.
  • A builder sub-agent can run ordinary shell writes again. Write claims
outlive the agents that register them, so a workspace accumulated one per builder that ever ran — six completed agents left four standing claims in testing — and the shared-checkout gate counted those long-finished children as live contenders. Every later builder was refused Bash writes with "cannot prove a bounded file target" and pushed toward worktree isolation, which puts the work in a checkout the operator never looks at. The gate now asks the question it meant to ask: is another running child writing in this shared checkout. Concurrent writers are still gated; a lone builder writes in the workspace you are actually watching.
  • Ctrl-C during the first moments of startup no longer kills Codewhale
outright. The terminating-signal handlers were registered inside the task that waits on them, and a spawned task does not run until the scheduler first polls it, so a SIGINT arriving in that window hit the default disposition — the process died with no exit code, no terminal restore, and no session record. The handlers are now installed synchronously, before the telemetry notice and before arming, so the window is closed.
  • The documented tool list on the docs site named update_plan and
work_update as coordination tools. Neither is callable by the model — update_plan replays older Plan artifacts and work_update is a hidden compatibility alias — so the page listed two tools a reader cannot use and omitted todo_write, the one they can.

Security

  • Bumped nanoid past GHSA-2v37-7h3g-55p8 (a custom generator given size
zero could loop indefinitely), restoring a zero-advisory npm audit for the website.

Removed

  • The default model-facing SlopLedger implementation, its storage-oriented
transcript language, and the /debt, /cleanup, /slop, and /canzha command surface.

Contributors

  • Sh1Zuku (@SparkofSpike) contributed
LaTeX rendering in PR #4981, completed circled-digit/keycap width handling in PR #5001, and delivered actionable File-edit recovery in PR #5008; for this train he resumed interrupted sub-agents from checkpoints in PR #5242, surfaced real shell wait elapsed time in PR #5240, and kept alternate-scroll off while mouse capture is active in PR #5234. Windows user-PATH preservation in PR #5006. user-command dispatch acceptance contract in PR #4992. multilingual, CRLF-heavy File-edit failure report in issue #5003.
  • An Ziwu (@MuRongMoQing) reported the
Windows PATH-overwrite defect in issue #4685. fixed the Windows OpenHarmony linker re-quoting for spaced SDK paths in PR #5095.
  • bistack (@bistack) contributed MCP Registry
discovery with Registry-first tool selection in PR #5238.
  • vFONGv (@vFONGv) wrote the zh-CN Windows
beginner guide with screenshots in PR #5229, harvested after its base branch was accidentally deleted during maintainer cleanup.
  • mky (@mky) fixed the FreeBSD build (PR #5254, rquickjs bindgen on FreeBSD).
  • cacdcaecawae (@cacdcaecawae) contributed embedder-owned sub-agent state roots (PR #5252).
See CHANGELOG.md for full notes and docs/CHANGELOG_ARCHIVE.md for older releases.

Key Features of DeepSeek TUI

  • Terminal Native Workflow
    DeepSeek TUI operates entirely within the terminal, allowing developers to work without switching between browser windows or external interfaces.

  • AI Assisted Coding
    The assistant can read and edit files, generate code, explain logic, and help automate development tasks.

  • Shell Command Execution
    It supports running terminal commands directly through the interface, streamlining development workflows.

  • Git Integration
    Developers can manage repositories, review changes, and handle version control related tasks from inside the tool.

  • Multiple Work Modes
    DeepSeek TUI includes modes like Plan, Agent, and YOLO, offering different levels of automation and approval control.

  • Large Context Handling
    The tool is built around DeepSeek V4 capabilities, including support for extremely large context windows that help with understanding bigger codebases.

User Experience

DeepSeek TUI is designed for developers comfortable with terminal environments. The interface is keyboard focused and efficient, though beginners may need time to adapt.

The workflow feels closer to tools like Claude Code or Codex style assistants rather than traditional chat applications. Community feedback on Reddit and GitHub discussions highlights its speed and practical coding workflow.

Performance and Compatibility

Because it is written in Rust, DeepSeek TUI is lightweight and responsive. It supports Linux, macOS, and Windows, with installation available through npm, Cargo, or direct binaries.

Performance depends heavily on the connected DeepSeek models and API configuration, but the local interface itself remains fast and efficient.

Pros

  • Fast terminal native workflow

  • AI powered coding and automation

  • Lightweight Rust based architecture

  • Supports file editing and shell execution

  • Open source and actively developed

Cons

  • Requires familiarity with terminal workflows

  • Depends on external AI APIs

  • Advanced automation modes may feel risky for inexperienced users

DeepSeek TUI is ideal for developers, DevOps engineers, and terminal focused power users who want AI assistance integrated directly into their command line workflow. It is especially attractive for users seeking a lightweight alternative to browser based AI coding tools.

DeepSeek TUI combines AI coding assistance with the efficiency of terminal workflows. Its fast performance, flexible automation, and developer focused design make it one of the most interesting open source AI terminal tools currently gaining traction.

DeepSeek TUI v0.9.4
Free
Software Informations:
Developer:

Operating System:
Windows / macOS / Linux
Date Added:
2026-08-08T16:02:07.134Z
Categories:

Post a Comment/Report Broken Link: