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 both 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.61The image ships the codewhale dispatcher 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 codewhale-tui produces the interactive runtime that the dispatcher delegates to. Installing only one binary will fail at runtime with a MISSING_COMPANION_BINARY error.
Manual download — platform archives (recommended)
Each archive below contains both the codewhale dispatcher 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 |
| Linux RISC-V | codewhale-linux-riscv64.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 installs both binaries under%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> and codewhale-tui-<platform>) — these are what the npm wrapper and the in-app codewhale update download, 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.61
This release lands the runtime control plane for multi-agent work: the TUI stays
responsive while sub-agents run, sub-agents converge toward fleet-style durable workers
with per-role model routing, and provider/model routes are isolated per session. It also
folds in several community contributions.
Added
- WhaleFlow runtime foundations — worker runtime profiles (role / permissions / shell /
tools / model-route, with non-escalating child derivation), a cross-provider model registry
with offline catalog hydration, and provider-readiness / context-budget / provider-adapter /
resource-telemetry services. (#3217, #3071, #3072, #3073) - Per-role, heterogeneous-model sub-agent routing — sub-agents can be assigned a model and
provider per role (e.g. scout vs. synthesis; verifiers route to a fast model). (#2027, #1768) - Durable goal mode — cross-turn goal progress with token/time accounting and a
verifier-as-judge gate before a goal may complete. (#3215, #891, #1976, #2058, #2029) - Parent-visible worker interaction contract — a recommended action per worker. (#3226)
- Maintainer GitHub workflow skills; ACP registry submission prepared. (#3192)
- OpenAI-compatible
/v1/chat/completionsendpoint on the legacy app-server HTTP transport,
provider-neutral, with model registry resolution and configured-credential forwarding.
Changed
- Sub-agents converge toward fleet-style durable workers — real worker lifecycle states are
projected to the sidebar instead of a hardcoded "running", and a sub-agent returns a structured
needs-input checkpoint instead of parking. (#3226, #3096, #3154) - The per-turn runtime tag exposes capability posture instead of human-facing mode labels. (#3213)
- Independent shell and verifier work defaults to background jobs with nonblocking waits and a
completion notification; blocking now requires an explicit wait. (#3212) - Sub-agent launches now expose explicit
model_strengthandthinkingcontrols to the model
instead of hidden child-model auto-routing;explorework is documented as a good fit for
faster models andthinking: "off". - Plan mode is strictly read-only (no shell tools), consistent with its runtime posture.
/swarmis gated behind the durable worker substrate. (#3218)- Legacy
deepseekinstall/update path resolves tocodewhale. (#2960, #2924, #2917)
Fixed
- TUI freeze when multiple sub-agents spawn (launch blocker) — the terminal input pump runs
off the render thread, AgentProgress events are coalesced, and sub-agents no longer park on
input with no orchestrator to answer; a six-worker stress test guards input/render/cancel
liveness. (#3216, #3096) - Idle sub-agent completion notifications now resume the parent turn instead of waiting for a
later user message; thanks @giovanni-paolilla for the deadlock report (#3266). - Provider/model route isolation — provider and model state is session-local, and a
mismatched provider+model tuple is rejected at the route boundary. (#3227) - Route-effective context-window metadata, over-limit preflight, and bounded recovery from
context_length_exceededinstead of re-looping. (#3204) - Synchronous tools (
file_search,grep_files,list_dir) are cancellable and no longer hold
a turn open against cancellation. (#1791) - MCP stdio proxy startup prompts no longer strand YOLO / non-interactive runs. (#2475)
- Stalled / failed background-shell recovery; configurable sub-agent API timeout. (#1737, #1786, #1806)
- Composer: reliable queued steering + Ctrl+S send (#3203, #3224); footer busy/idle indicator
(#2982); CJK word-wrap (#963); clickable sidebar stop targets (#3028); live token throughput
(#3190); auto-expiring terminal sub-agent cards (#3078). - Linux glibc preflight in the installer/update path with a clear error. (#3207, #1067)
- Self-update retries transient GitHub metadata/asset failures and falls back from the GitHub
REST API to the publicreleases/latestredirect before constructing release asset URLs. (#3232) - Provider picker lists providers in neutral alphabetical order instead of hard-coding DeepSeek first; the active provider stays pre-selected. (#3076)
- Work sidebar no longer shows stale
phase now:/phase next:strategy rows once the checklist
is 100% complete. - Plan mode no longer shortcuts investigation for requests that name a repository, URL, version,
release, build state, benchmark, bug, PR, issue, API surface, or local code path. - Oversized pasted text stays editable in the composer, with a file backup appended at submit
time for model access; thanks @idling11 (#3267, closes #3263). - Bare digit keys
1-8now insert text instead of firing hotbar slots; useAlt+digitfor
hotbar actions. Thanks @wjq2026 for the report and @DieMoe233 for the paste-path note (#3243). - Kimi/Moonshot tool schemas normalize empty function parameters to a root object schema; thanks
@jghwwnq for the provider repro (#3265). - Novita defaults to its OpenAI-compatible
/openai/v1endpoint so chat completions no longer
404 out of the box; thanks @buko for the report and endpoint verification (#3255). - Dependency security:
wspinned to 8.21.0 across npm packages to close remote memory-exhaustion
DoS (dependabot).
Community contributions
- Non-DeepSeek model pricing — thanks @mvanhorn (#3201)
- Telegram polling transport — thanks @cyq1017 (#3195)
- Mobile event history — thanks @RobertEmprechtinger (#3220)
- Runtime-API session save — thanks @gaord (#3199)
- Whale-accent rename — thanks @nightt5879 (#3197)
DEEPSEEK_BASE_URL/MODELhonored inexec— thanks @hongchen1993 (#3221)- VS Code read-only API documentation — thanks @cyq1017 (#3013)
- Atomic ask-only permission rule persistence — thanks @greyfreedom (#3233)
- DeepInfra provider support and release-surface follow-through — thanks @idling11 (#3235, closes #3231) and @nightt5879 (#3236)
- Editable oversized paste composer flow — thanks @idling11 (#3267, closes #3263)
- WeChat bridge (
integrations/weixin-bridgevia Feishu + Tencent OpenClaw) — thanks @VincentCorleone (#3206) - Config robustness: atomic permission-rule save, one-time config
.bakbackup before the first changed write,CODEWHALE_HOMEas primary config home, and accepting the dispatcher-written config shape (camelCase aliases +[features.enabled]table) so legacy/dual-written configs parse cleanly - Dependency/CI bumps: docker login/qemu actions, softprops gh-release, download-artifact, vitest, @opennextjs/cloudflare, form-data, js-yaml, dompurify, ws
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.