CodeWhale is the canonical project, command, npm package, and
release-asset name. The legacy npm packagedeepseek-tuiis
deprecated and receives no further releases. Users coming from
v0.8.x legacydeepseek/deepseek-tuinames should migrate
withdocs/REBRAND.md.
Install
Recommended — npm (one command, both binaries)
npm install -g codewhaleThe wrapper downloads the matched runtime binaries from this Release and places them in the same directory.
Docker / GHCR
docker run --rm -it \
-e DEEPSEEK_API_KEY="$DEEPSEEK_API_KEY" \
-v ~/.deepseek:/home/codewhale/.deepseek \
ghcr.io/hmbown/codewhale:v0.8.67The image ships the codewhale dispatcher, codew shim, and codewhale-tui runtime. The latest tag is also updated on release.
Cargo (Linux / macOS)
cargo install codewhale-cli codewhale-tui --lockedBoth 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:
| Platform | Archive | Install script |
|---|---|---|
| Linux x64 | codewhale-linux-x64.tar.gz |
install.sh |
| Linux ARM64 | codewhale-linux-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 |
— |
Unix (Linux / macOS):
tar xzf codewhale-<platform>.tar.gz
cd codewhale-<platform>
./install.shWindows:
- For the installer path, run
CodeWhaleSetup.exe; it installscodewhale.exe,codew.exe, andcodewhale-tui.exeunder%LOCALAPPDATA%\Programs\CodeWhale\binand adds that directory to the current-user PATH. - Extract
codewhale-windows-x64.zip - Run
install.bat(copies to%USERPROFILE%\bin) - Add
%USERPROFILE%\binto 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-<platform>, codew-<platform>, and codewhale-tui-<platform>) — 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:
# Linux — archive bundles
sha256sum -c codewhale-bundles-sha256.txt
# Linux — individual binaries
sha256sum -c codewhale-artifacts-sha256.txt
# macOS
shasum -a 256 -c codewhale-bundles-sha256.txt
shasum -a 256 -c codewhale-artifacts-sha256.txtWhat's in v0.8.67
Added
- The model you select in
/modelis now the operator: fleet workers whose
task spec and roster profile pin no model inherit the active session route
instead of a hardcodedautosentinel, matching the pinned operator row in
/fleet roster. Task-level and profile model overrides still win, and
route receipts record which source applied (task.model,
agent_profile.model, orrun.model). - Added the
/workflowcommand (aliases/workflows,/wf) as the user
opt-in to workflow orchestration. Bare/workfloworchestrates the current
work — the model synthesizes the objective from the conversation context;
/workflow <objective>narrows the run;/workflow status [run_id]and
/workflow cancel <run_id>relay typed run receipts without starting new
runs. - Bare
/goalwith no active goal now declares a goal from the conversation
context viacreate_goalinstead of printing usage; with an active goal it
remains the status readout, and explicit/goal <objective>is unchanged. - Added the constitution-first setup wizard: a unified
/setupshell with
resume, back navigation, and skip-retry state; provider/model readiness
cards with a custom-provider form and provider-picker detail layout; a
runtime posture card with preset application and project-override warnings;
a setup verification report; and transactional setup persistence with
secret redaction and rollback (#3402, #3403, #3404, #3405, #3406, #3410,
#3411). - Added a structured user-global constitution with a deterministic renderer,
prompt-block injection, guided principle authoring with preview and preset
save, and a/constitutionmanager command as the primary constitution
management surface, with file state shown in setup and actions surfaced in
diagnostics (#3793, #3806, #3811). - Added model-assisted constitution and fleet-profile drafting behind an
explicit ratify gate, with untrusted-draft provenance recorded so
model-authored text is never applied silently. Updating users keep their
existing constitution unchanged, and a localized constitution checkpoint is
required after update (#3794). - Added the Hotbar route editor v1 with route-switch slot actions and support
for custom model routes, plus a configured-provider route manager for
/providerand/modelwith a missing-auth handoff into provider key
entry (#2066, #3830, #3831). - Added auto-discovery of
.codewhale/rules/and.claude/rules/
directories as project context, with a total byte-budget cap on the
assembled rules block. Contributed by maple (@yekern). - Exposed
context_input_budget_for_routefrom the engine so external
integrations can reuse route budget math. Contributed by hexin
(@h3c-hexin). - Added GUI config persistence to the runtime API. Contributed by @gaord.
- Added a website localization matrix with a locale registry and drift
checks. Harvested from #3763 by @idling11 (#3090). - Added
doctordetection of half-applied setup state, and startup milestone
tracing for boot-performance diagnosis. - Added a v0.8.67 computer-use dogfood prompt that covers the Cursor-terminal
QA flow, headless gates, setup, sub-agent completion, Fleet, Workflow, model
pricing, and release evidence collection. - Fleet: local worker memory usage is now reported, including retained memory
while a task is in Running status. Contributed by @cyq1017 (#3901). - Website: community hub, constitution thesis page and constitution-centered
homepage, models page generated from the provider registry, docs dark mode
and full SEO metadata/sitemap coverage, terminal player for real
constitution traces, and a live star badge and version. - Added Meituan LongCat as a first-class OpenAI-compatible provider
(longcat, withlong-cat,meituan-longcat, andmeituanaliases),
LONGCAT_API_KEYdiscovery, theLongCat-2.0default model, provider
picker wiring, model completions, provider docs, and web provider facts. - Fleet: added per-provider setup cards (Persistence, Constitution, Hotbar,
Tools/MCP, Remote Runtime) with a unified setup catalog and provider-specific
credential links. Provider setup progress is persisted transactionally with
rollback guards, Codex OAuth is kept out of provider key storage, and a
headless QA contract verifies setup readiness across providers. - Fleet: added Fleet starter profiles with role-aware loadouts (scout→Fast,
manager→Inherit, etc.),/fleet setupprofile-authoring wizard, Fleet
effective-permission recording, and route intent-source tracking. - Fleet: added 'operator' as a built-in Fleet roster member — the preferred
helm Fleet slot for workflow coordination. Operator plans, routes, reviews
outputs, and calls other Fleet slots as needed. This is a roster role, not a
separate app mode. The full Operation/Operate-mode architecture is deferred
to 0.9.0. - Workflow: declarative workflows now run through the production driver, the
workflow tool is wired to sub-agent dispatch, public Workflow surfaces are
renamed, and typed workflow-run and status receipts are emitted for
debugging and verification. - Added provider-agnostic Fleet rosters and loadouts: provider-specific
subagent limits, launch concurrency, and admission caps are derived from
config without hardcoding any single provider. - Added Workflow runtime foundations: the internal JS authoring/runtime crates
compile and replay example workflows. 0.8.67 ships the/workflowopt-in,
production-driver dispatch path, sub-agent task handoff, and typed run/status
receipts; richer authoring UX and the full TUI run view remain tracked for
v0.8.68 (#2974, #4038).
Changed
- Clarified the Fleet coordination hierarchy and made roles carry real
doctrine: the operator (the session's/modelselection) runs the
operation and assigns managers to workflows; a manager is the middle
manager of exactly one workflow. The built-in reviewer is now explicitly
adversarial (assume the change is broken, try to refute it), and the review
sub-agent intro adopts the same framing. Built-inmanager/operator/
reviewerroster members now ship roleinstructionsthat flow into worker
prompts on both the Fleet task-spec and agent/workflowprofile:spawn
paths; custom profiles override them via the sameinstructionsfield. - Removed the decorative Fleet vocabulary that never routed differently:
thetool-heavyslot and thestrong/balanced/deep-reasoning/code/
review/tool-heavyloadout tiers.inherit(the operator's route) and
fast(the provider's faster class) remain; retired names in existing
configs keep parsing (as custom labels) with identical auto routing, and
the/fleet setupmodel-class step now offers only the real choices. - Raised the default subagent concurrency for high-throughput fanout:
max_subagentsdefault 20 → 64 (config ceiling 128) and the queued+running
admission cap 200 → 1024. Users on metered plans who want the old behavior
can setmax_subagents = 20in config.toml. - Renamed the internal
whaleflowsubsystem toworkflowacross the
workspace: thecodewhale-whaleflow/codewhale-whaleflow-jscrates become
codewhale-workflow/codewhale-workflow-js, Rust identifiers and JS bridge
symbols are renamed, theCODEWHALE_WHALEFLOW_JS_*environment variables
becomeCODEWHALE_WORKFLOW_JS_*, and the authoring/RFC docs move to
WORKFLOW_AUTHORING.mdandWORKFLOW_EXTERNAL_MEMORY.md. Historical
changelog and retro-ledger entries keep the old name as a record. - Documented the Homebrew rollout strategy and added a distribution-channel
check to the release checklist. Harvested from #3760 by @idling11 (#3489). - Paused Linux RISC-V prebuilt release and nightly artifacts because
rquickjs-sys0.12.0 does not shipriscv64gc-unknown-linux-gnubindings;
installers, docs, and update paths now treat RISC-V as unsupported until
upstream bindings or a bindgen-enabled build lands. - Made the approval prompt calm, compact, and honest, and centered the
first-run follow-up on the constitution; first-run onboarding now hands off
into the setup wizard, and the language picker offers every shipped locale
(#3929). - Startup performance: boot janitors and store scans no longer block the
first frame,@mentioncompletion no longer re-walks the workspace per
keystroke, and idle offline-queue clones and duplicate tool-output hashing
were eliminated. - Clarified the misleading "Ctrl+B backgrounds this command" shell wording
(#3859) and the hotbar help shortcuts. Docs contribution by Chanhyo Jung
(@roian6). - Documented the enforced repo-law invariants, the constitution flow, and the
/fleet setupprofile-authoring wizard; alignedpermissions.tomlaction
docs. Docs contribution by @greyfreedom. - Bumped web dependencies: wrangler 4.103.0 → 4.107.0, mermaid 11.15.0 →
11.16.0, vitest 4.1.8 → 4.1.9 (@dependabot). - Backfilled v0.8.67 regression coverage across sub-agent completion, budget
exhaustion, delegate ordering, provider onboarding, setup scroll, model
catalog pricing, Fleet routing, and Workflow gates (#4076). - Split the large TUI debug command group and palette/theme internals into
smaller modules without changing user-visible behavior (#4078, #4081).
Fixed
- Fixed the goal sidebar elapsed timer so completed and blocked goals freeze
their "completed in {elapsed}" readout instead of ticking forever. Goal state
now records afinished_atinstant that both sidebar render paths and the
engine snapshot clamp elapsed against;/goal resumeclears the freeze and
the timer ticks again. - Fixed paused goals silently un-freezing their sidebar timer: usage keeps
accruing while paused, and the next goal snapshot used to clear the frozen
instant. Paused goals now stay frozen until an explicit resume. - Fixed durable
/goalprogress accounting so usage and continuation updates
release the shared SQLite connection before re-reading the updated goal,
unblocking resumed goal loops and full workspace release tests. - Fixed a scheduled-automation race where deleting an automation while its
run was being enqueued left the already-created task running untracked;
the run record is now persisted unconditionally. - Removed
panic = "abort"from the release profile: it disabled unwinding
and broke the panic supervision that keeps one failing tool call from
taking down the whole session. Thelto/strip/codegen-unitssize and
speed tuning is unchanged. - Fixed session save/load to persist and restore the active model provider
across restarts. Previously sessions created under one provider (e.g.
DeepSeek) would silently load under a different active provider. Provider,
subagent limits, fallback chain, context window, and reasoning effort are now
restored from saved session metadata, with"deepseek"as the default for
legacy sessions. - Raised the streamed model-response idle timeout and matched the TUI stall
watchdog to the configured stream budget so long reasoning pauses are not
recovered as stalled turns (#2487, #3998). - Fixed Codex OAuth/sub-agent release diagnostics so
auth listreports an
active Codex OAuth file, Responses API child requests encode inherited tool
names safely, rate-limited child requests checkpoint as resumable provider
interruptions, and failure records surface the real Responses API error
(#3884). - Fixed fresh launch/setup testing with an explicit
CODEWHALE_HOMEso
config, settings, theme prefs, and doctor legacy-state diagnostics do not
inherit unrelated ambient~/.deepseekfiles (#4001, #4002). - Sub-agent state now persists to
.codewhale/instead of the lingering
pre-rebrand.deepseek/path (#3864). Contributed by Stime (@yekern). /plugin enable|disablenow persists across restarts (#3918), and the
plugin command is hidden from the root slash menu and kept canonical after
the scanner merge. Contributed by Nightt (@nightt5879)./config ask-rulesnow shows ask rule actions with improved diagnostics,
with file-rule action precedence under test. Contributed by @greyfreedom.- Fleet/sub-agents: enforced an absolute recursion-depth ceiling and widened
task-id entropy, gave each atomic state write a unique temp path, kept
sub-agent tool catalogs in parent parity (#3836), and made the Agents
sidebar reconcile sub-agent completion and cancellation live (#3837). - Fixed apply_patch mangling newlines, defaulted fuzz to 3, and made writes
atomic; fixed compaction to preserve pins on emergency compaction, harden
the summary fallback, and count image tokens; corrected backtrack boundary,
checkpoint clear ordering, prune guard, and durable rename. - Fixed the SSE client to flush the final frame, join multi-line data fields,
and stop corrupting multibyte UTF-8 split across network reads. - Kept review-only turns read-only, aliased
automode to the agent policy,
showed the mode-derived safety policy in status (contributed by @cyq1017),
and stopped the durable-review floor from holding routine YOLO work
(#3883). - Fixed self-update to prefer exact binary release assets. Contributed by
@LI-Jialu. - UI polish: stopped constitution and fleet-profile model drafts from
freezing the event loop, scoped the context-menu backdrop to the popup
rect, stacked model-picker panes on narrow modals, unified display-width
helpers on one contract (#3924), removed misleading success toasts,
issue-number leaks, and dead-end empty states, and repaired the onboarding
trust and api-key keys. - Fixed the onboarding Trust step so plain Enter no longer silently grants
workspace trust; users must choose the explicit trust or exit keys. - Fixed same-root skill-name collisions being silently shadowed; duplicate
normalized skill names now warn while keeping discovery deterministic
(#3919). - Normalized discovered skill names, removed unenforced trust copy, and
surfaced the gated constitution override in prompts. - Fixed a parallel
subagent::suite flake where one test's process-wide
Retry-Afterpause could strand unrelated budget-capped workers for the
full stale window; requests now re-poll the global pause in bounded slices
and the rate-limit test clears the window on drop. - Sub-agent and Fleet reliability now fail empty, step-limited, and
budget-exhausted children with explicit diagnostics instead of silent
Completed (no output)success; budget exhaustion preserves partial output,
worktree: truediscovers one-level nested repos from harness directories,
and completion-before-start delegate events recover into named rows instead
of ellipsis-only identities (#4050, #4051, #4052, #4053). - Goal-mode writing and research tasks can complete with
verification.status = "not_applicable"without triggering continuation
loops (#4054). - First-run onboarding routes API keys through the selected provider, setup
wizard bodies scroll with PageUp/PageDown, shipped locale packs are back to
en.jsonparity with zh-Hant explicitly partial, stable feature flags stay
out of Experimental, and model/provider rows include current LongCat and
sourced-pricing hints (#4056, #4057, #4058, #4062, #4063). - Running tool rows animate while a lone foreground tool is active, and
workflow receipts render run/status/failure cards instead of one-line or
null-success output (#4059). - Model-facing turn metadata now includes a compact git workspace snapshot and
escalates context pressure at the same thresholds as the TUI, helping agents
narrow scope or compact before truncation (#4071, #4073). - Successful child sub-agent completions inline the child's
EVIDENCEblock
before the completion sentinel, so parents can cite child findings without
re-running tools (#4072). - Deferred tools hydrate and execute in the same batch when the original
arguments are valid, and[tools].always_loadnow keeps configured MCP tools
active instead of forcing the first-call retry. Thanks @SparkofSpike for the
hot-path MCP report (#4074, #4027). - New commit-range co-author checks reject bot/tool trailers on newly pushed
commits; historical release-range cleanup remains a separate maintenance
concern (#4075). - Fixed fuzzy
edit_filematching so matches that begin with multibyte UTF-8
characters, including CJK text, advance on character boundaries instead of
panicking. Contributed by Nightt (@nightt5879), reported by Taixin Guo
(@taixinguo) (#3971, #4045). - Fixed Unix dispatcher/TUI output under early-closing pipes such as
codewhale doctor | headby restoring the defaultSIGPIPEhandler before
printing and propagating signal exits quietly. Contributed by @aznikline,
reported by @BrathonBai (#4030, #4043). - Suppressed dead_code warnings in the unused plugin registry module and
fixed formatting across the command-group files. Contributed by Paulo Aboim
Pinto (@aboimpinto). - Pointed the website Community nav link at the community hub.
Security
- MCP client hardening: closed an SSE-endpoint SSRF, bounded the HTTP
response body via Content-Length instead of a streaming read, bounded stdio
line reads to prevent OOM denial of service, fixed a dead timeout, and
removed an unbounded buffer. - Made execpolicy deny/trust rules segment-aware, closing a command-chaining
bypass. - Closed repo-law and safety-floor bypasses found by adversarial review:
protected invariants are now enforced as mechanism, the destroyer gap in
the safety floor is closed, a catalog-present tool with no execution path
now fails closed,web_runopen/click is classified as destructive, and
the allow-list gained wildcard and case handling. - Refused symlinked rules directories to prevent workspace escape via
discovered rules. Contributed by maple (@yekern). - Bounded Fleet sub-agent worker output so fanout cannot exhaust TUI memory
(#3882), and preserved event headroom for progress. Contributed in part by
@cyq1017. - Added an untrusted constitution-draft gate with authoring provenance so
model-drafted constitutions require explicit human ratification.
Removed
- Removed unused model-registry helpers. Harvested from #3872 by @cyq1017.
- Removed unused request-tuning metadata. Harvested from #3871 by @cyq1017.
- Removed dead fleet task helpers (#3894 by @cyq1017), the unused
approval-cache container (#3845) and localization QA metadata (both by
@nightt5879), the dormant tab collaboration subsystem (#3838), the legacy
flash auto-router (#3839), the stale project_doc loader (#3840), ignored
mock LLM placeholders (#3841), dead model-catalog helpers (#3842), the
unused execpolicy amend module, and dead MCP/client retry helpers. - Retired the deprecated
WHALE.mdcontext fallback (#3798).
Contributor credits for this release live in the changelog entry above —
thank you to everyone whose reports, PRs, reviews, and reproductions shaped it.
See CHANGELOG.md for full notes and docs/CHANGELOG_ARCHIVE.md for older releases.