Releases: Hmbown/Codewhale
Release list
v0.9.12
Codewhale is the public product from Shannon Labs. The
codewhale
command, npm package, and release-asset names remain lowercase technical
identifiers. 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 — official GitHub release
New macOS/Linux install (checksummed binaries from this release):
curl -fsSL https://codewhale.net/install.sh | CODEWHALE_VERSION="v0.9.12" sh
"$HOME/.local/bin/codewhale" --versionFor Windows, use the matching installer or archive below. For an existing
direct install, run codewhale update; it prints the executable path and
keeps newer builds. If the install directory is occupied by a different build,
use the fresh-directory migration in the installation guide.
Secondary packaging — npm and Cargo
npm install -g codewhale
# or build from source
cargo install codewhale-cli --lockedThe wrapper downloads the matched codewhale and codew command assets
from this Release. Both contain the same compiled runtime.
Docker / GHCR
docker run --rm -it \
-e DEEPSEEK_API_KEY="$DEEPSEEK_API_KEY" \
-v codewhale-home:/home/codewhale/.codewhale \
ghcr.io/hmbown/codewhale:v0.9.12The image exposes the same runtime as both codewhale and codew. The
latest tag is also updated on release.
Cargo (Linux / macOS)
cargo install codewhale-cli --lockedThe Cargo package installs codewhale. Cargo cannot create a second command
alias from one binary target; users who want the shorter spelling can add a
codew symlink to that installed executable. The npm, Homebrew, archive,
shell-installer, and container channels install both command names directly.
Manual download — platform archives (recommended)
Each archive below contains the same runtime under the codewhale and
codew command names, 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 |
| 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):
tar xzf codewhale-<platform>.tar.gz
cd codewhale-<platform>
./install.shWindows:
- For the installer path, run
CodeWhaleSetup.exe; it installs
codewhale.exe,codew.exe, andcodewhale.batunder
%LOCALAPPDATA%\Programs\CodeWhale\bin, adds that directory to the
current-user PATH, and creates a Start Menu shortcut that prefers
Windows Terminal (wt.exe) when it is installed. - Extract the archive for your machine:
codewhale-windows-x64.zipor
codewhale-windows-arm64.zip - Double-click
codewhale.bat(not the raw.exe) to launch - Run
install.batto copy the binaries and launcher to%USERPROFILE%\bin - Add
%USERPROFILE%\binto your PATH
The portable Windows archive skips the install script — extract and run codewhale.bat 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 codewhale-<platform> and
codew-<platform> assets. The seven codewhale-tui-<platform> filenames
attached to v0.9.5 are byte-identical compatibility copies used only to let
already-installed v0.9.4 clients discover and cross this single-binary
transition; current installers do not expose a third runtime. 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 --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-missingWhat's in v0.9.12
Codewhale v0.9.12 puts computer use in the binary, opens two new routes —
Alibaba Model Studio through the data-driven provider table and Concentrate
as an opt-in BYOK Responses gateway — and adds cloud dispatch plus a
config-gated per-session control socket. The shell is the other half of the
release: a new launch card, the work surface docked under the composer, one
focus owner for Tab, tool cells that carry their own state, and fleet as
the public word for the live collective. The complete item-level change
record is retained below the categorized release highlights.
Added
- Computer use ships with the binary. The
computer-useplugin — 38 tools
across macOS, Windows, Linux and HarmonyOS, accessibility-first observation
with pixel fallback, screenshots, zoom, screen recording, and registered
remote computers over ssh and hdc — is embedded in Codewhale and written to
$CODEWHALE_HOME/builtin-pluginson first run, so every install channel
carries it. It lists asbuiltin · not-reviewedand stays disabled until
you review and enable it: shipping it is not consenting to it. The
stdlib-Python computer-use server it replaces is gone. - Alibaba Model Studio joins the data-driven provider table as an
openai-compatibledescriptor: international compatible-mode endpoint,
DASHSCOPE_API_KEYcredential, live/v1/modelsdiscovery. Qwen 3.8
Flash and Qwen 3.8 Max arrive through the catalog authority — never a
hard-coded id. - Concentrate: first-class opt-in BYOK Responses gateway with live models
discovery and typed SSE streaming (#5725). - Cloud dispatch: remote runner offloads coding agent tasks to isolated
cloud sandboxes with machine token auth and structured job tracking
(#5701, #5712). - Per-session control socket: config-gated
[control_socket]table binds
<sessions-dir>/<session-id>/control.sockper running session, exposing
message, interrupt, relaunch, and status JSON-RPC verbs (#5533, #5831).
Changed
-
Anonymous usage counting is on by default. The 0.9.11 release asked
first; 0.9.12 counts the same aggregate version/platform, session, feature
and error totals unless you turn it off, and says so once at first launch
(policy notice version 5, schema 3,notice_versionreplacing
consent_version). Every recorded opt-out stays off: a durable
telemetry = false, a decline recorded under the old opt-in notice,
unreadable privacy state, and theCODEWHALE_TELEMETRY=0/--telemetry falsekill switches. Showing the disclosure records only that it was
shown, never an acceptance.codewhale config set telemetry falseturns
it off and wipes queued counts;codewhale config set telemetry true
deliberately re-enables it. Nothing new is collected: no conversations,
code, prompts, files, names, model content, credentials, or IP. -
The launch screen is our own card take: a thin top line
⑂ branch path; a centred bordered card with the whale mark,
Codewhale+ version, one announcement line only when it is true (the
no-model warning, or MCP news), and the menu New worktree / Resume
session / Changelog / Quit with their real chords right-aligned. Enter
runs the highlighted entry, Up/Down move it, and typing goes straight to
the composer. The card dissolves on the first keystroke or command
(≤240 ms, instant under reduced motion) (#5826, #5801, #5815, #5286). -
The work surface sits under the composer by default, keeping history
readable and leaving the stage unencumbered (#5809). -
Skills command shapes: FEAT-022 command shapes and retained-host
validation (#5825, #5829). -
After the card dissolves, the working screen shows
⑂ branch pathwith
⋮ MCP n/mon the right, the transcript starts with the
◆ session_startreceipt (naming the configured session-start hooks),
and the composer's bottom rule carriesmodel (effort) · permission—
the route's one launch reading. The posture bar and metrics line appear
only once a session exists. -
Vocabulary:
fleetis the public term andPodis retired from copy —
roster, setup, detail, worker-runtime and managed-API messages now say
Fleet (/fleetcanonical,/podalias). The workflow wire accepts the
canonical role spellings (general/explore/planner/reviewer/implement/
test/advisor) with the pre-rename ones kept as load-time aliases, and
serializes canonical names. -
The Operate mode-picker hint is shortened to fit 80 columns.
-
The footer always shows the permission posture; when only one chip
fits, the permission chip outranks the mode word (#5796). -
Local Ollama: the header names a model only when the local catalog can
serve it, and saysunknownuntil it knows. The startup mark, web and
app icon carry the new side-view prompt-eye whale (#5795). -
One focus owner: Tab and Shift+Tab work regardless of what is in the
composer; Alt shortcuts survive mid-draft; Ctrl+Tab no longer cycles the
mode by accident (#5798). -
Tool cells carry their own state: a running, failed or warned tool
reads as such in the transcript itself, with per-entry rail dots and
family-coloured glyphs (#5799). -
Web: docs hub with task search, shared empty/loading/error states, an
offline-to-back-online banner,/changelogin ever...
v0.9.11
Codewhale is the public product from Shannon Labs. The
codewhale
command, npm package, and release-asset names remain lowercase technical
identifiers. 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 entrypoints)
npm install -g codewhaleThe wrapper downloads the matched codewhale and codew command assets
from this Release. Both contain the same compiled runtime.
Docker / GHCR
docker run --rm -it \
-e DEEPSEEK_API_KEY="$DEEPSEEK_API_KEY" \
-v codewhale-home:/home/codewhale/.codewhale \
ghcr.io/hmbown/codewhale:v0.9.11The image exposes the same runtime as both codewhale and codew. The
latest tag is also updated on release.
Cargo (Linux / macOS)
cargo install codewhale-cli --lockedThe Cargo package installs codewhale. Cargo cannot create a second command
alias from one binary target; users who want the shorter spelling can add a
codew symlink to that installed executable. The npm, Homebrew, archive,
shell-installer, and container channels install both command names directly.
Manual download — platform archives (recommended)
Each archive below contains the same runtime under the codewhale and
codew command names, 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 |
| 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):
tar xzf codewhale-<platform>.tar.gz
cd codewhale-<platform>
./install.shWindows:
- For the installer path, run
CodeWhaleSetup.exe; it installs
codewhale.exe,codew.exe, andcodewhale.batunder
%LOCALAPPDATA%\Programs\CodeWhale\bin, adds that directory to the
current-user PATH, and creates a Start Menu shortcut that prefers
Windows Terminal (wt.exe) when it is installed. - Extract the archive for your machine:
codewhale-windows-x64.zipor
codewhale-windows-arm64.zip - Double-click
codewhale.bat(not the raw.exe) to launch - Run
install.batto copy the binaries and launcher to%USERPROFILE%\bin - Add
%USERPROFILE%\binto your PATH
The portable Windows archive skips the install script — extract and run codewhale.bat 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 codewhale-<platform> and
codew-<platform> assets. The seven codewhale-tui-<platform> filenames
attached to v0.9.5 are byte-identical compatibility copies used only to let
already-installed v0.9.4 clients discover and cross this single-binary
transition; current installers do not expose a third runtime. 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 --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-missingWhat's in v0.9.11
Codewhale v0.9.11 tightens the long-running agent loop, makes workflow
failures visible instead of successful-looking, adds an experimental
vision-capable DeepSeek route, and prepares reproducible Codewhale-versus-Pi
evaluation without publishing a result before a real run. The complete
item-level change record is retained below the categorized release highlights.
Added
- Added first-party
deepseek-v4-flash-vision-expdiscovery and selection for
DeepSeek, including theflash-visionalias, bundled offline metadata,
registry and picker entries, and image-input capability on the chat route.
Context and output limits inherit from V4 Flash until DeepSeek publishes
distinct values; pricing remains unknown rather than guessed. - Added a provider-controlled Codewhale-versus-Pi parity harness with three
hermetic coding tasks, route and reasoning-effort receipts, doctor/dry-run
modes, and bounded result artifacts. The repository ships the harness, not a
benchmark verdict; comparable real runs remain an acceptance gate. - Added portable, secret-free config export/import with a reviewable plan,
explicit headless consent, backup and rollback, and idempotent re-import. - Added bounded multi-file diagnostics through the existing model-facing
lsp
tool without increasing the tool-catalog count. Thanks to Isabel Wu
(@wuisabel-gif) for PR #5524. - Added portable presentation, media-attachment, and operation-digest facets to
the command contract, then moved all seven utility handlers onto the
contract-backed dispatch path. Thanks to Paulo Aboim Pinto
(@aboimpinto) for PR #5525.
Changed
- Sub-agent, Fleet-worker, workflow-task, and thread-runtime model turns no
longer inherit a hidden role-based step ceiling. An omitted or zero
max_stepsis unbounded; a positive user/config value remains an explicit
cap and is still clamped to the runtime safety ceiling. Wall-clock, provider,
heartbeat, cancellation, and admission safeguards are unchanged. /rcnow mirrors one shared session rather than transferring terminal
ownership: local and web prompts remain available while idle, approvals use
first-decision-wins semantics, and transport/integrity failures remain
fail-closed.- The terminal status rows around the composer are now two stable bands:
provider · model · thinking levelis the persistent identity row below
the composer in every phase, and a separate activity row above the
composer carries the live phase, notices, and cost/metrics. Sending a
prompt no longer relocates the route identity above the composer, and
neither row ever duplicates it. - The embedded local Web client now uses the current CWC Ocean hierarchy and
readable control sizing, follows the shared Enter/Shift+Enter composer
grammar, and chooses a provider plus model per new thread without mutating
Runtime defaults. Exact image-input capability is labelled honestly; a
vision-capable route does not imply that browser attachments exist. - The runtime now has one authoritative model-turn loop. The placeholder
crates/coreengine tree is gone, while the active TUI loop and its extracted
tool-call stages retain existing policy, hook, cancellation, and budget
behavior. Thanks to Sun Zhenyuan
(@bistack) for PR #5523.
Fixed
- Chat Completions streams now require terminal proof from
[DONE]or a
non-emptyfinish_reason. Protocol-only frames no longer count as answer
content or time-to-first-token, and a provider continuation that ends after
tool results with no answer or tool call fails durably instead of producing
a falseCompletedreceipt. - A selected v2 Fleet now drives one bounded, deterministic Agent roster across
terminal and runtime surfaces. Fleet operator/member/explicit-route
precedence, resolved member identity, and exactvisionrequirement
admission now fail visibly instead of silently falling back, first-matching,
or rerouting. - A workflow whose
task()dispatch was rejected no longer loses that failure
inside aparallel()null slot or presents a successful-looking run. Rejected
dispatches now fail the run, persist as typed bounded receipts with an exact
count, and appear in transcript, activity detail, and workflow-panel views. - Provider readiness, credential-source explanations, focused-agent scrolling,
compact/statusand/helprendering, shell/web output bounds, MCP
lifecycle reporting, and narrow-terminal onboarding received the detailed
fixes recorded below. - Portable config import/export now preserves typed tables, arrays, numbers,
booleans, and datetimes without stringifying them, while refusing
machine-bound trust overlays, credential readers, automatically executable
hooks/LSP definitions, local-path authority, machine-local network proxy
routes, cookies, redaction placeholders, and nested or camel/dotted
credential keys. Project and global bundle operations now load and validate
the document for their actual scope in both directions, including a
workspace whose document still lives under the legacy app directory. codewhale loginnow means Codewhale account sign-in (the same browser
device flow ascodewhale account login, with--no-openand
--timeout-seconds); provider API keys are configured exclusively through
codewhale auth set --provider <provider>, and the hidden legacy
--api-key/--providerflags redirect loudly instead of silently writing
a key.- Account sessions prefer the OS credential manager and now fall back
automatically to the private0600Codewhale secrets file on headless
hosts, SSH boxes, and containers; theCODEWHALE_CLOUD_ALLOW_FILE_SESSION_STORE
opt-in is deprecated and ignored. /updategained aCtrl+Shift+Uinstall chord (catalogued...
v0.9.10
Codewhale is the public product from Shannon Labs. The
codewhale
command, npm package, and release-asset names remain lowercase technical
identifiers. 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 entrypoints)
npm install -g codewhaleThe wrapper downloads the matched codewhale and codew command assets
from this Release. Both contain the same compiled runtime.
Docker / GHCR
docker run --rm -it \
-e DEEPSEEK_API_KEY="$DEEPSEEK_API_KEY" \
-v codewhale-home:/home/codewhale/.codewhale \
ghcr.io/hmbown/codewhale:v0.9.10The image exposes the same runtime as both codewhale and codew. The
latest tag is also updated on release.
Cargo (Linux / macOS)
cargo install codewhale-cli --lockedThe Cargo package installs codewhale. Cargo cannot create a second command
alias from one binary target; users who want the shorter spelling can add a
codew symlink to that installed executable. The npm, Homebrew, archive,
shell-installer, and container channels install both command names directly.
Manual download — platform archives (recommended)
Each archive below contains the same runtime under the codewhale and
codew command names, 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 |
| 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):
tar xzf codewhale-<platform>.tar.gz
cd codewhale-<platform>
./install.shWindows:
- For the installer path, run
CodeWhaleSetup.exe; it installs
codewhale.exe,codew.exe, andcodewhale.batunder
%LOCALAPPDATA%\Programs\CodeWhale\bin, adds that directory to the
current-user PATH, and creates a Start Menu shortcut that prefers
Windows Terminal (wt.exe) when it is installed. - Extract the archive for your machine:
codewhale-windows-x64.zipor
codewhale-windows-arm64.zip - Double-click
codewhale.bat(not the raw.exe) to launch - Run
install.batto copy the binaries and launcher to%USERPROFILE%\bin - Add
%USERPROFILE%\binto your PATH
The portable Windows archive skips the install script — extract and run codewhale.bat 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 codewhale-<platform> and
codew-<platform> assets. The seven codewhale-tui-<platform> filenames
attached to v0.9.5 are byte-identical compatibility copies used only to let
already-installed v0.9.4 clients discover and cross this single-binary
transition; current installers do not expose a third runtime. 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 --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-missingWhat's in v0.9.10
- Show the full slash-command or
/modelcompletion row in a bounded, wrapping hover popover whenever narrow terminals truncate it, closing the remaining scoped gap from #998. Thanks @AiurArtanis and @formp3 for identifying the affected surfaces. registry_syncno longer ships the full MCP Registry catalog into the
conversation. It takes a required query, scores the local snapshot
host-side, and returns at most eight matches; the complete catalog stays on
disk, and the compaction and spillover exemptions that let a multi-hundred-
kilobyte dump reach the model unchanged are gone.- Providers that mirror the outgoing
(reasoning omitted)replay placeholder
back as a reasoning delta no longer have that echo ingested as real
thinking: the exact transport placeholder is dropped on arrival, so live
sessions stop showing a stream of placeholder reasoning blocks and saved
transcripts stay free of them. - Mid-stream connection drops during an interactive turn no longer persist a
synthetic[runtime]user message. Retry state is a typed engine-internal
descriptor; a thinking-only drop re-issues the request without claiming a
partial reply was preserved, the retry budget is enforced in mechanism, and
recovery produces exactly one authoritative final answer.
Codewhale v0.9.10 is a retention, identity, and product-clarity release: the shell and
transcript can no longer retain unbounded tool output in memory or on disk,
mid-turn history inserts no longer strand in-flight tool rows, every agent
that ran this session is visible from /agents list, the PTY acceptance
lane has a stall watchdog and bounded CI steps, approval outcomes are
durable and fail closed (cyq1017, #5360), and three $HOME disk leaks are
reclaimed. Extension surfaces now name their real state and act only
through the reviewed install and trust flows, and sub-agent, shell, task,
and workflow state is owned by the session that created it (#5518). Test
threads get an 8 MiB stack so the lib suite can no longer
abort under load.
Fixed
- First run starts on the welcome screen again. A missing key no longer
skips Welcome and auto-opens the local-provider list: Enter walks to the
calm provider explanation, then Enter opens the picker so a first API key
can be set. Returning missing-key recovery still opens the picker on
launch. - A foreground
bashcommand that named no timeout is bounded again. The
model-facingbashtool left an omittedtimeout_msat the internal
ceiling (~24.8 days) instead of the 120 s default its own schema
advertises, so a CLI that blocked on an interactive prompt or a hung
network call held the turn open indefinitely — one report sat on a single
unauthenticated CLI call for over two hours with the tool row simply
counting seconds. The advertised default now applies, which arms the
existing recovery: the process is killed and the model is told to rerun
withbackground=trueand poll withaction="https://github.com/wait". An explicit
timeout_msis still honored for genuinely long foreground work, and
background and interactive runs keep their own lifetimes. - The Extensions (
/plugin) Marketplace is no longer a read-only list.
Every recommendation and stored candidate names its truthful state and
primary action — Add, Enable, Configured, or Unavailable — and Enter or a
mouse click runs that action through the existing reviewed/mcp add recommended,/mcp enable, and/plugininstall/trust controllers, so
no second trust path exists. Browser Use and Sandbox Runtime stay
honestly Unavailable with their real setup routing instead of implying an
install Codewhale cannot perform. - The Extensions MCP tab now renders one honest inventory: the header count
and the visible rows derive from the same configured-server set, so
MCP (6)can no longer sit above two rendered rows. Disabled servers
stay visible and labeled disabled instead of silently disappearing, and
configured servers absent from the live snapshot list as not-yet-inspected
with their own explicit reload affordance through the MCP command
controller. - Installed plugin rows now act on their real state: Enter opens an active
bundle (/plugin show), offers Enable for a trusted-but-disabled bundle,
or routes an untrusted bundle to the existing trust review — through the
same confirmation and persistence controllers as the slash commands. - Sub-agent handoffs and rosters, background shell jobs, durable tasks,
delayed continuations, and workflow controls are now scoped to the
session that owns them. Records carry immutable root-session ownership,
stale completion-channel payloads are rejected before deduplication,
background work drains and reports only to its owning session, and
legacy ownerless jobs fail closed (#5518 failure class reported by
@hxfhd; the report's exact JavaScript provenance was not claimed as
reproduced). - The resolved route envelope now reaches every outbound model call: all
wire dialects and auxiliary calls clamp at the shared transport seam
under one wire/reservation budget, provider input limits are honored, and
switching models on the same protocol no longer inherits the previous
model's limits (#5516, #5518). - First-run continuity: the chosen onboarding provider persists across
restarts, a missing first-run config no longer interrupts the flow, and
the automatic working-agreement checkpoint renders as a standalone setup
handoff instead of regressing the onboarding rail to the full wizard's
4/10 progress. - Explicitly worded natural-language
/goaldeclarations now create a
durable goal in the provider-neutral engine before model dispatch, while
ordinary tasks and quoted transcripts stay out of goal mode and prose
acknowledgemen...
v0.9.9
Codewhale is the public product from Shannon Labs. The
codewhale
command, npm package, and release-asset names remain lowercase technical
identifiers. 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 entrypoints)
npm install -g codewhaleThe wrapper downloads the matched codewhale and codew command assets
from this Release. Both contain the same compiled runtime.
Docker / GHCR
docker run --rm -it \
-e DEEPSEEK_API_KEY="$DEEPSEEK_API_KEY" \
-v codewhale-home:/home/codewhale/.codewhale \
ghcr.io/hmbown/codewhale:v0.9.9The image exposes the same runtime as both codewhale and codew. The
latest tag is also updated on release.
Cargo (Linux / macOS)
cargo install codewhale-cli --lockedThe Cargo package installs codewhale. Cargo cannot create a second command
alias from one binary target; users who want the shorter spelling can add a
codew symlink to that installed executable. The npm, Homebrew, archive,
shell-installer, and container channels install both command names directly.
Manual download — platform archives (recommended)
Each archive below contains the same runtime under the codewhale and
codew command names, 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 |
| 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):
tar xzf codewhale-<platform>.tar.gz
cd codewhale-<platform>
./install.shWindows:
- For the installer path, run
CodeWhaleSetup.exe; it installs
codewhale.exeandcodew.exeunder
%LOCALAPPDATA%\Programs\CodeWhale\binand adds that directory to the
current-user PATH. - Extract the archive for your machine:
codewhale-windows-x64.zipor
codewhale-windows-arm64.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 codewhale-<platform> and
codew-<platform> assets. The seven codewhale-tui-<platform> filenames
attached to v0.9.5 are byte-identical compatibility copies used only to let
already-installed v0.9.4 clients discover and cross this single-binary
transition; current installers do not expose a third runtime. 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 --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-missingWhat's in v0.9.9
Codewhale v0.9.9 is a truth-and-resilience release: the shell tool can no
longer wedge a session when the host runs out of disk or descriptors,
unverified context windows and output ceilings are labeled honestly at every
surface, DeepSeek V4 is priced on the published peak/off-peak tiers, SSE
UTF-8 fails closed in every dialect, Fleet shadowing is visible, bwrap gets
container essentials and extra roots, the dsh skin rides the bundle
profile, the agent tool schema is down to 12 fields, and README/website
locales grow to 18 and 8.
Fixed
- The lowercase
bashtool no longer wedges when its complete-output spill
file cannot be created: a full temp volume or exhausted descriptor table
used to fail every call —echo okincluded — with the harness-internal
"Failed to create streaming shell output" and never recover until the
host was cleaned up. The spill is now best-effort (the bounded tail is
still returned and the truncation notice says why the full-output path is
missing), and any remaining spawn/stream failure names the exhausted
resource — disk, file descriptors, memory — and says the next call is safe
to retry (#5465; the wedge that took out the owner's own 0.9.9 session). - A concrete route/offering output limit now outranks the conservative
8,192-token compatibility guess for an uncatalogued model. Routes that
publish no output limit remain fail-closed, documented model ceilings stay
authoritative, and a route limit can never raise the requested cap (#5460). - Context-window honesty at every surface (#5239, #5441): the
model-name hintandfallbackrungs of the context-window ladder are
guesses, and every surface that renders one now says so — the status line,
/status,/config, the context-pressure message, the model picker chips,
and the auto-router inventory. Unverified windows still drive real budgets
(compaction trigger, context meter, output reservation); they just stop
reading as capabilities anyone checked. A window parsed from an_Nk
model-name suffix (qwen3-32b-256k→ 256K) is now its own
model-name hintrung belowcatalog, because it is optimistic rather
than conservative — a catalog or provider-reported value beats it. The
[providers.<name>] context_windowoverride remains the hard fix and
renders asconfiguredwith no marker. - Output-ceiling honesty (#5440): an Anthropic-family model the catalog does
not describe keeps the 64K Messages floor as its clamp and the ChatGPT/
Codex OAuth route keeps its 4K policy, butOutputCeilingSourcegained an
unverifiedrung for both, so exec-stream receipts and the model picker
label themunverified/"assumed floor" instead ofdocumented. Clamp
values are unchanged. - Telemetry default-on is visible (#5441):
codewhale doctor's
runtime-posture section gained atelemetry=on (default)-style row with
the source that decided it (cli | env | config | default), and
codewhale config get telemetryreports the resolved consent with its
source instead ofkey not foundon a machine whose batches ship. Truth
change only; resolution and behavior are untouched. - Fleet: a scout's read-only shell carve-out (#5428) is now honored by both
the posture gate and the execution envelope, sogit log,find | head,
npm viewand the other bounded read-only commands run in-place instead
of being refused as "Executes" (#5426). Delegation still never widens
authority: the role-isolation test and docs/SUBAGENTS.md pin that a child
cannot exceed its parent's posture (#5426, #5435). /renameand/titlenow apply mid-first-turn: the session file does
not exist until the first autosave, so the rename fell through with
NotFound; the shared path now prefers the per-session checkpoint and
rebuilds from App state, with a PTY regression test through the live
event loop (#5430).integrations dsh planno longer refuses DeepSeek's default
Responses-dialect route (deepseek-v4-flash); Responses and
Anthropic-Messages routes are carried through pi-ai
openai-responses/anthropic-messagesinstead of being approximated
or refused; only credentialed base URLs are still refused, with an error
that names provider and model (#5434).- Session cost no longer sits at
unverified_live_pricingwhen live pricing
cannot be verified (control-plane 503, Models.dev capabilities-only
overlays): provider-docs bundled fallback rates for the DeepSeek V4
family on Fireworks / OpenCode Zen restore a usable figure, live
per-provider rows still win, andkimi-k3stays unpriced until a
published rate exists (#5241; harvested from #5402). - Release assets:
release.ymlasset-freshness checks compare against the
release job's ownstarted_at, so job-level reruns of the npm step are no
longer poisoned by earlier uploads (#5429). - macOS CI: the
agent_focus_ptyauto-review receipt test waited on a
worker that had already completed and raced the rail's focus; it now holds
the child's wrap-up and waits for a settled live row (refs #5056, #5403). - DeepSeek V4 pricing follows the published peak/off-peak tiers (peak
01:00–04:00 and 06:00–10:00 UTC; off-peak is half of peak) for
deepseek-v4-flashanddeepseek-v4-proin USD and CNY, resolved from
each turn's recorded time; the stale single-tier rows understated cost up
to ~4×. Because every direct DeepSeek first-party rate is now
time-windowed, the scorecard fails closed (missing_recorded_time) on an
undated DeepSeek turn instead of guessing a tier (#5470; #5241 follow-up,
verified against api-docs.deepseek.com on 2026-08-17). - SSE UTF-8 split across HTTP/2 DATA frames now fails closed in every
streaming dialect: a shared strict decoder, tail flush, and
decode_failedpropagation (InvalidSseUtf8) replace the per-dialect
approximations, with byte-chunk decoder tests (#5374; supersedes draft
#5404). - CI:
release_four_read_only_fleet_roles_launch_with_canonical_prompts
answered Fleet children with SSE while they call the blocking JSON path;
the parse failure was retried and double-count...
v0.9.8
Codewhale is the public product from Shannon Labs. The
codewhale
command, npm package, and release-asset names remain lowercase technical
identifiers. 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 entrypoints)
npm install -g codewhaleThe wrapper downloads the matched codewhale and codew command assets
from this Release. Both contain the same compiled runtime.
Docker / GHCR
docker run --rm -it \
-e DEEPSEEK_API_KEY="$DEEPSEEK_API_KEY" \
-v codewhale-home:/home/codewhale/.codewhale \
ghcr.io/hmbown/codewhale:v0.9.8The image exposes the same runtime as both codewhale and codew. The
latest tag is also updated on release.
Cargo (Linux / macOS)
cargo install codewhale-cli --lockedThe Cargo package installs codewhale. Cargo cannot create a second command
alias from one binary target; users who want the shorter spelling can add a
codew symlink to that installed executable. The npm, Homebrew, archive,
shell-installer, and container channels install both command names directly.
Manual download — platform archives (recommended)
Each archive below contains the same runtime under the codewhale and
codew command names, 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 |
| 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):
tar xzf codewhale-<platform>.tar.gz
cd codewhale-<platform>
./install.shWindows:
- For the installer path, run
CodeWhaleSetup.exe; it installs
codewhale.exeandcodew.exeunder
%LOCALAPPDATA%\Programs\CodeWhale\binand adds that directory to the
current-user PATH. - Extract the archive for your machine:
codewhale-windows-x64.zipor
codewhale-windows-arm64.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 codewhale-<platform> and
codew-<platform> assets. The seven codewhale-tui-<platform> filenames
attached to v0.9.5 are byte-identical compatibility copies used only to let
already-installed v0.9.4 clients discover and cross this single-binary
transition; current installers do not expose a third runtime. 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 --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-missingWhat's in v0.9.8
Codewhale v0.9.8 ships the remaining assigned finish. Remaining web
settings polish moves to v0.9.9. Prefab third-party templates that have
a published OpenAI-compatible host ship here (#5350).
Fixed
-
sudo(andsu/setuid helpers) work again for wheel-group administrators
who want Codewhale to be able to escalate: the Linux startup hardening's
irreversiblePR_SET_NO_NEW_PRIVSflag — inherited by every child process —
is now skippable withCODEWHALE_NO_NEW_PRIVS=0(#5413). The flag stays on
by default; the no-ptrace and no-core-dump measures are never skipped. -
Abort-class process deaths no longer poison the terminal (#5424). A
stack overflow, allocation failure, or double panic skips the panic hook
and every cleanup guard, which is how a v0.9.7 user's mid-turn exit left
mouse capture leaking SGR sequences into their shell. An
async-signal-safe handler now restores the terminal modes and appends a
one-line cause marker to~/.codewhale/crashes/last-fatal-signal.log
before re-raising, keeping the honest 128+signal wait status. A SIGKILL
(OOM killer) remains uninterceptable by design.
Changed
-
Prompt-cache prefix is pinned for the session. The tool loop no longer
recomposes the system prompt from disk on every model step, so an agent
writing a file no longer busts the provider KV prefix cache mid-turn. The
system prompt and tool catalog are re-composed only on a declared header
change (/model, mode, goal, session resume), which re-pins under a logged
reason; an undeclared change is reported as drift and the original pin is
kept instead of silently becoming the new baseline. Workspace, AGENTS.md,
skills, memory, and goal drift now reaches the model as one bounded
<context_update>user message at the next user turn — a history append,
not a header rewrite./cache statsshows the pin reason, the last-miss
reason, the undeclared-drift count, and the context-update count. See
docs/CACHE.md. -
Plugin compatibility is now per-component. A reviewed, trusted, enabled
bundle that mixes Skills or MCP with unsupported commands, agents, hooks,
LSP, native, filesystem-roots, or lifecycle-mutation declarations keeps the
supported adapters active and reports the rest as inactive (full/
partial/unsupported). All-unsupported bundles still cannot be enabled.
The capability hash is now v2 and binds this build's activation policy, so
older v1 receipts and any later adapter-enablement change fail closed as
needs-review. Skills and each MCP transport re-request their own capability
at the consumption boundary.
Added
-
Composer multiline mode is available in
/settings. When enabled, Enter inserts a new line and Shift+Enter sends the message (#5345, reported and tracked by @AiurArtanis). -
/plugin marketplace add|list|show|remove|installcompletes the
federated marketplace journey (#5311).addreads one LOCAL catalog
document in the real published schemas (Kimi, Claude, Codex, or
Codewhale native) — no network, regular files only — and persists it
beside the plugin state with the same hardened, fail-closed store.
list/showrender every candidate with per-entry diagnostics,
display-only tiers, and honest install plans that say when Codewhale
cannot fetch a source;installroutes through the existing reviewed
installer, so installed bundles still enter disabled and untrusted.
Foreign auto-install policy (CodexINSTALLED_BY_DEFAULT) is visibly
ignored; nothing is auto-installed, auto-trusted, or granted vendor
trust. -
/rcattach now includes an observedowner/namegit remote when the
folder has a GitHub, CNB, or Gitee origin, so CWC can label the paired
session. Paths stay off the wire. Reconnect after both this client and
CWC #202 land to backfill existing empty rows. -
The local Runtime web client keeps the thread rail clipped so New
thread cannot paint over the session fact chips. Chips wrap instead
of sliding under the rail. -
Z.ai
GLM-5.3is live on the Coding Plan and is now the default direct
Z.ai model:DEFAULT_ZAI_MODELresolves toGLM-5.3in both
codewhale-tuiandcodewhale-config, and it is the first/modelrow
after/provider zai. ExplicitGLM-5.2selections (model = "GLM-5.2"
and itsglm-5.2aliases) keep their own id — only the default moved.
Limits and reasoning options still inherit fromGLM-5.2until Z.ai
publishes distinct 5.3 numbers. No USD price is claimed. A live call
can still 429 with entitlement code 1311 on accounts that are not
provisioned for 5.3. -
The TUI transcript renders Markdown blockquotes (
>lines) with a quote
rail — nested quotes, inline bold/code/links, wrapped continuation rows, and
selection copy that keeps the quote text and skips the rail chrome. -
Sub-agent details show the resolved model, fleet role, and type. Labels
use the session/role name instead of a generic Agent N (#5371, #5287). -
Documented catalogue output ceilings (DeepSeek V4 384K) are honored on
the request. A clean output-limit stop continues the turn instead of
killing it (#5373). -
Ollama Cloud is a first-class hosted provider (
/provider ollama-cloud)
on the official OpenAI-compatiblehttps://ollama.com/v1route. Local
Ollama stays keyless. The exact releasedollama+ Cloud URL tuple keeps
a bounded compatibility path across saved sessions, Fleet, and nested
subagents; neighboring remotes stay custom and fail closed against
inherited official credentials. -
Homebrew ships a
codewhaleformula.brew tap Hmbown/deepseek-tui && brew install codewhaleis the install path;brew upgrade codewhale
updates it. The legacydeepseek-tuiformula remains a deprecated alias
for one overlap release. -
Terminal tab/window titles now carry the existing saved session name before
the live state (Codewhale,reasoning…,using tool…,done), so parallel
sessions are identifiable at a glance without a second title setting.
/title <name>is a discoverable alias for/rename; both update the ...
v0.9.7
Codewhale is the public product from Shannon Labs. The
codewhale
command, npm package, and release-asset names remain lowercase technical
identifiers. 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 entrypoints)
npm install -g codewhaleThe wrapper downloads the matched codewhale and codew command assets
from this Release. Both contain the same compiled runtime.
Docker / GHCR
docker run --rm -it \
-e DEEPSEEK_API_KEY="$DEEPSEEK_API_KEY" \
-v codewhale-home:/home/codewhale/.codewhale \
ghcr.io/hmbown/codewhale:v0.9.7The image exposes the same runtime as both codewhale and codew. The
latest tag is also updated on release.
Cargo (Linux / macOS)
cargo install codewhale-cli --lockedThe Cargo package installs codewhale. Cargo cannot create a second command
alias from one binary target; users who want the shorter spelling can add a
codew symlink to that installed executable. The npm, Homebrew, archive,
shell-installer, and container channels install both command names directly.
Manual download — platform archives (recommended)
Each archive below contains the same runtime under the codewhale and
codew command names, 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 |
| 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):
tar xzf codewhale-<platform>.tar.gz
cd codewhale-<platform>
./install.shWindows:
- For the installer path, run
CodeWhaleSetup.exe; it installs
codewhale.exeandcodew.exeunder
%LOCALAPPDATA%\Programs\CodeWhale\binand adds that directory to the
current-user PATH. - Extract the archive for your machine:
codewhale-windows-x64.zipor
codewhale-windows-arm64.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 codewhale-<platform> and
codew-<platform> assets. The seven codewhale-tui-<platform> filenames
attached to v0.9.5 are byte-identical compatibility copies used only to let
already-installed v0.9.4 clients discover and cross this single-binary
transition; current installers do not expose a third runtime. 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 --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-missingWhat's in v0.9.7
Codewhale v0.9.7 keeps the catalog ordinary. Grok 4.6 lands as a normal catalog
row instead of a provider-shaped pile of special cases, OrcaRouter joins as a
named provider, and a panic-safety advisory in lru is cleared by lifting the
pin that caused it rather than living around it.
Added
- Grok 4.6 is the direct xAI default, with the
grokalias moving onto it and
grok-4.5still explicitly selectable. Its 500K context, text/image input,
tool and structured-output support,low/medium/high/xhighreasoning
efforts (defaulthigh), and server-side web search all come from the
Models.dev-shaped catalog rather than model-specific code.reasoning_effort
reaches the wire only on the exact first-partyhttps://api.x.ai/v1route,
and the usage-aware 200K-token pricing boundary is scoped to direct xAI so
aggregator routes reusing the model slug cannot inherit xAI billing. - OrcaRouter is a first-class named provider:
ORCAROUTER_API_KEY, default base
URLhttps://api.orcarouter.ai/v1,deepseek/deepseek-v4-prodefault,
orcarouter/autorouting, CLI--providerselector, and TUI picker entries
(#5321).
Changed
- Reasoning-effort normalization and the model picker read a model's published
reasoning_optionslist from the catalog instead of collapsing every route to
the historic Low/Medium ladder. Any catalog row that publishes an effort list
keeps its own vocabulary. - Docs record DeepSeek's live
DeepSeek-V4-Pro-0813backend label while the
callable API ID staysdeepseek-v4-pro. No aliases are remapped and no
deepseek-v4-pro[1m]selector is sent.
Fixed
- Copying a user or assistant message takes its canonical content instead of
reserialized transcript lines, keeping role glyphs, continuation rails, and
visual wrapping out of the clipboard while preserving authored Unicode,
Markdown, and hard line breaks. Tool and Thinking cells stay on the existing
full-transcript path (#5319). load_sessionno longer runs crash recovery on every read. Snapshot reads go
through a side-effect-freeload_session_snapshotand recovery is explicit
viarecover_session_for_resume, so an embedding host inspecting a durable
session while a tool is still running no longer gets a spurious crash repair
(#5320).
Security
lrumoves to 0.18 to clear RUSTSEC-2026-0253, whereLruCache::pop()was
not panic-safe and could leave dangling list pointers. Theratatui-core
=0.1.0pin that transitively forcedlru^0.16 is lifted, so
ColorCompatBackendnow answersget_cursor_position()from tracked cursor
state — the upstream-recommended workaround for the startup CPR race
(ratatui/ratatui#2483, ratatui/ratatui#2640) that the pin originally worked
around.ratatuiitself stays pinned at=0.30.0, so the API surface is
unchanged.
Known issues
- The integration test
exec_persistent_service::failed_exec_kills_pending_service_and_exits_nonzero
is a confirmed flake under parallel load ("service pid file never appeared").
It passes in isolation and is unrelated to any v0.9.7 change.
Contributors
- XhesicaFrost (@XhesicaFrost) — canonical message copy (#5319).
- h3c-hexin (@h3c-hexin) — session snapshot and crash-recovery split (#5320).
- XiaoHuo888-hue (@XiaoHuo888-hue) — OrcaRouter provider registration (#5321).
See CHANGELOG.md for full notes and docs/CHANGELOG_ARCHIVE.md for older releases.
v0.9.6
Codewhale is the public product from Shannon Labs. The
codewhale
command, npm package, and release-asset names remain lowercase technical
identifiers. 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 entrypoints)
npm install -g codewhaleThe wrapper downloads the matched codewhale and codew command assets
from this Release. Both contain the same compiled runtime.
Docker / GHCR
docker run --rm -it \
-e DEEPSEEK_API_KEY="$DEEPSEEK_API_KEY" \
-v codewhale-home:/home/codewhale/.codewhale \
ghcr.io/hmbown/codewhale:v0.9.6The image exposes the same runtime as both codewhale and codew. The
latest tag is also updated on release.
Cargo (Linux / macOS)
cargo install codewhale-cli --lockedThe Cargo package installs codewhale. Cargo cannot create a second command
alias from one binary target; users who want the shorter spelling can add a
codew symlink to that installed executable. The npm, Homebrew, archive,
shell-installer, and container channels install both command names directly.
Manual download — platform archives (recommended)
Each archive below contains the same runtime under the codewhale and
codew command names, 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 |
| 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):
tar xzf codewhale-<platform>.tar.gz
cd codewhale-<platform>
./install.shWindows:
- For the installer path, run
CodeWhaleSetup.exe; it installs
codewhale.exeandcodew.exeunder
%LOCALAPPDATA%\Programs\CodeWhale\binand adds that directory to the
current-user PATH. - Extract the archive for your machine:
codewhale-windows-x64.zipor
codewhale-windows-arm64.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 codewhale-<platform> and
codew-<platform> assets. The seven codewhale-tui-<platform> filenames
attached to v0.9.5 are byte-identical compatibility copies used only to let
already-installed v0.9.4 clients discover and cross this single-binary
transition; current installers do not expose a third runtime. 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 --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-missingWhat's in v0.9.6
Codewhale v0.9.6 is a subtractive release: fewer runtime guards, one stable
prompt, truthful provider endings, and a smaller compaction path that preserves
the provider cache. The changes were grounded by matched Terminal-Bench 2.1
runs against Pi 0.8.41 and by dogfooding repeated manual compaction.
Added
web_searchdefaults to Firecrawl Cloud without an API key; keyless requests
are headerless and quota-bounded, while an optional user key raises limits.- Green web builds on
mainnow emit an actionable manual-deploy reminder, so
site changes cannot quietly appear shipped while Cloudflare still serves an
older revision. - Mistral AI is a first-class provider route, including Codestral models,
first-party reasoning support, authentication, picker entries, and aliases. - Headless
Bashcan transfer explicitly requested persistent Unix services
out of an exec run, with ownership and cleanup receipts. /remote-envopens hosted Work from the current GitHub or CNB branch tip and
states exactly which unpushed, dirty, ignored, secret, and session state stays
local.- Linux ARM64 release and nightly assets are static musl builds with native
launch checks. - Maintainers can report observed daily active installs from the same anonymous,
aggregate telemetry dataset; no additional client data is collected. - Fleet-dispatched members under a read-only evidence (no-network) ceiling now
keep theWebtool's read-onlysearchandfetchactions — parity with an
ordinary scout — while every reaching surface (web.run,fetch_url,
github, MCP) stays denied and the sentinel-backed capability envelope
remains the fail-closed backstop. /fleet setupcan show an optional, deterministic, unratified role-to-model
advisory built only from configured ready routes. Accept, edit, and reject
all remain inside the existing human-reviewed profile save boundary; the
advisory never launches a Fleet or writes a second configuration./updatechecks for a newer Codewhale release and installs it from inside
the TUI, whiletui_helpgives agents the same command and key map users see.- Markdown file paths render as OSC 8 links where the terminal supports them,
and every agent row can open that agent's transcript directly. - ACP editor sessions can execute multi-round file, search, Git, patch, and
explicitly enabled shell tool calls through the shared Runtime registry.
Shell access requires both the client's terminal capability and Codewhale's
headless shell opt-in, and cancellation stops an in-flight tool before the
turn returns (#5225 by @rafaelcavalheri). - Lowercase
readreturns bounded typed PNG, JPEG, GIF, and WebP results to
image-capable Chat, Responses, Anthropic, and ACP routes. Text-only routes
receive an explicit omission receipt; image bytes never spill into ordinary
transcript, export, compaction, or relay text.
Changed
- Anonymous usage counting is on by default for fresh installs and disclosed in
a native first-run Codewhale modal with an immediate opt-out. Prior declines
remain off. Codewhale does not collect conversations, code, prompts, files,
repo or branch names, credentials, model content, or per-turn activity
timelines. - Wide terminals use a responsive, full-screen ocean canvas with modest
gutters: prose keeps a readable measure while tools, diffs, work surfaces,
the composer, and status chrome can use the available width. Turn and major
activity seams breathe without padding every call inside a tool group. - Root CLI help describes product actions directly instead of exposing internal
TUI/runtime layers. Bash action="https://github.com/wait"now blocks by default when a wait is requested; callers
can still ask for a nonblocking snapshot, and persistent service ownership
remains explicit.- Compaction is one cache-stable summary request followed by one committed
replacement summary and a bounded recent-message tail. Older saved sessions
still restore. - Ask, Work, Auto-Review, and Full Access share one stable base prompt. Modes
continue to differ through permissions and the live tool catalog; the former
Act label is now Work throughout the product and shipped locales. - Full Access now auto-approves non-bypassable tools consistently, and the
default choice shown on ordinary approval cards is configurable. - Model, context-window, dispatch-name, and nested-agent spawn receipts report
the route and limits actually used rather than silently substituting a
guessed identity. - Child-agent launches mint one immutable route receipt before admission and
preserve it through status, interruption, completion, resume, Work Graph,
and ledger projections, so provider/model attribution cannot drift (#5305). - Goal runs no longer stop because of internal continuation, repeated-gap, or
unanswered-question guards. Explicit user limits and terminal goal states
remain authoritative. - Account-owned
/rcremote control now keeps exclusive ownership and a
crash-recoverable delivery journal until the server acknowledges terminal,
approval, failure, and snapshot state. todo_writeis an optional progress surface rather than required model
ceremony.- New turns use one small, stable toolbox:
read,write,edit,bash,
agent,todo_write, andtool_search. The optional progress tool stays
visible as familiar working memory; specialized native, Web, MCP, plugin,
memory, task, and verification tools are policy-filtered and searchable;
activated schemas stay in a bounded per-conversation cache. Every sub-agent
keeps its own search and cache, including policy-allowed Web research, while
forked context and parent activations remain warm starts rather than allowlists. - The direct file and shell schemas follow Pi's deliberately small contract:
bounded complete-line reads, hash-free writes, unambiguous multi-edit with
BOM/CRLF preservation and conservative fuzzy matching, and one foreground
bashcommand with a bounded chronological output tail. Modes change
execution authority, not those primitive names. - Codewhale n...
v0.9.5
Codewhale is the public product from Shannon Labs. The
codewhale
command, npm package, and release-asset names remain lowercase technical
identifiers. 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 entrypoints)
npm install -g codewhaleThe wrapper downloads the matched codewhale and codew command assets
from this Release. Both contain the same compiled runtime.
Docker / GHCR
docker run --rm -it \
-e DEEPSEEK_API_KEY="$DEEPSEEK_API_KEY" \
-v codewhale-home:/home/codewhale/.codewhale \
ghcr.io/hmbown/codewhale:v0.9.5The image exposes the same runtime as both codewhale and codew. The
latest tag is also updated on release.
Cargo (Linux / macOS)
cargo install codewhale-cli --lockedThe Cargo package installs codewhale. Cargo cannot create a second command
alias from one binary target; users who want the shorter spelling can add a
codew symlink to that installed executable. The npm, Homebrew, archive,
shell-installer, and container channels install both command names directly.
Manual download — platform archives (recommended)
Each archive below contains the same runtime under the codewhale and
codew command names, 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 |
| 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):
tar xzf codewhale-<platform>.tar.gz
cd codewhale-<platform>
./install.shWindows:
- For the installer path, run
CodeWhaleSetup.exe; it installs
codewhale.exeandcodew.exeunder
%LOCALAPPDATA%\Programs\CodeWhale\binand adds that directory to the
current-user PATH. - Extract the archive for your machine:
codewhale-windows-x64.zipor
codewhale-windows-arm64.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 codewhale-<platform> and
codew-<platform> assets. The seven codewhale-tui-<platform> filenames
attached to v0.9.5 are byte-identical compatibility copies used only to let
already-installed v0.9.4 clients discover and cross this single-binary
transition; current installers do not expose a third runtime. 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 --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-missingWhat's in v0.9.5
Codewhale v0.9.5 consolidates the terminal application into one compiled
runtime while preserving the familiar codewhale and codew commands. It
also expands the managed Runtime API, makes session and Fleet work easier to
inspect and resume, and removes the hidden local continuation backstop that
could end productive work without a final assistant response.
Added
model = "auto"for prompt-based tier selection: When set, the
dispatcher analyses the user's prompt before delegating to the TUI and
selectsdeepseek-v4-profor complex tasks ordeepseek-v4-flashfor simple
tasks (PR #5257).- Runtime API controls for persistent goals, bounded memory inspection, MCP
server and skill lifecycle management, and durable Fleet receipt evidence. - Append-only session-tree history with
/tree,/branch,/fork, and
/resume, plus/rcremote control and managed login. - A unified Fleet roster for built-in dispatch postures and a pinned indicator
that keeps active background work visible above the composer. - Incremental MCP registry refreshes that return the local snapshot immediately
and update it in the background. - Scout and Reviewer agents can use a bounded direct-command evidence shell for
read-only workspace, Git, and GitHub inspection, and can keep private working
notes in their own To-do while the durable transcript retains their evidence.
Changed
codewhale-clinow contains the terminal runtime directly. Release installers
expose byte-identicalcodewhaleandcodewcommands without a separate TUI
executable. The v0.9.5 asset set alone retains deprecated
codewhale-tui-*filenames as byte-identical compatibility copies so
installed v0.9.4 clients can discover and complete this upgrade.- Startup release checks cache successful lookups for one hour. The updater
downloads and verifies the primary runtime once, then refreshes any existing
codewor legacycodewhale-tuicommand paths from the same bytes. - Headless
codewhale execruns and verifier benchmark rollouts no longer
impose a 100-step default.--max-turnsremains available as an explicit
opt-in ceiling; Fleet workers retain their separately configured budget. - Goal token and time budgets are telemetry rather than default stop
conditions, and automatic goal continuation is unlimited unless the user
explicitly configures a continuation ceiling. - Command-palette and slash-completion shadowing now share one alias-aware
discovery contract. - The website install guidance, localized product copy, navigation controls,
social metadata, and Cloudflare build pipeline now describe and deploy the
same one-runtime release contract.
Fixed
- The hidden 20-step no-user-input backstop no longer ends productive turns.
Tool results, queued steering, child completions, REPL feedback, and goal
continuations can all reach the next provider step and a final assistant
response; explicit user-configured limits and genuine stuck-loop guards remain. - Complete error details are directly inspectable after a failure instead of
leaving the terminal with a clipped, unrecoverable error fragment. - A newly minted OAuth credential is adopted in the same provider-selection
flow instead of requiring a second picker trip. - Fresh session titles can replace a stale cached
New Sessionplaceholder,
unknown model context limits fail loudly, and release/source-install fallbacks
no longer request binaries removed by the single-runtime conversion.
Contributors
- Sh1Zuku (
@SparkofSpike) fixed stale
cached session titles that could pin theNew Sessionplaceholder. - Paulo Aboim Pinto (
@aboimpinto) built the
shared alias-aware command discovery contract and acceptance coverage. - Sun Zhenyuan (
@bistack) contributed the
background incremental MCP Registry refresh. - SKY ZHAO (
@skyzhao1223) contributed
prompt-basedmodel = "auto"routing in PR #5257.
See CHANGELOG.md for full notes and docs/CHANGELOG_ARCHIVE.md for older releases.
v0.9.4
Codewhale is the public product from Shannon Labs. The
codewhale
command, npm package, and release-asset names remain lowercase technical
identifiers. 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, all three entrypoints)
npm install -g codewhaleThe wrapper downloads the matched codewhale, codew, and codewhale-tui
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 codewhale-home:/home/codewhale/.codewhale \
ghcr.io/hmbown/codewhale:v0.9.4The 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 |
| 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):
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 the archive for your machine:
codewhale-windows-x64.zipor
codewhale-windows-arm64.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 --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-missingWhat'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:
remembergainsreviseandretirebeside the
defaultappend. 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 tomemory/JOURNAL.md, and every
continual-harnessrefine/removeto aJOURNAL.mdbeside 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/followupresumes an
interrupted_continuablechild 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_handlereturned; 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 bundledmcp-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, andload_skill
catalogue discovery vianame="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 bothtelemetry = trueand a recorded "Enable" answer are present, so
atelemetry = truewritten 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
fortelemetry_endpoint. That is a Cloudflare Worker whose complete source is
in this repository undertelemetry-ingest/; it writes to Workers Analytics
Engine, whose row is exactly_sample_interval,blob1–blob20,dataset,
double1–double20,index1, andtimestamp— there 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. Settingtelemetry_endpoint = ""
instead writes each batch to$CODEWHALE_HOME/telemetry/dryrun.jsonland
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=0is a hard floor that beats
--telemetry trueand the config key, and a value the parser cannot read
also resolves to off. Fleet workers are hard-off. A repo-local
.codewhale/config.tomlcan 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 isdocs/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:
a...
v0.9.3
Codewhale is the public product from Shannon Labs. The
codewhale
command, npm package, and release-asset names remain lowercase technical
identifiers. 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, all three entrypoints)
npm install -g codewhaleThe wrapper downloads the matched codewhale, codew, and codewhale-tui
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 codewhale-home:/home/codewhale/.codewhale \
ghcr.io/hmbown/codewhale:v0.9.3The 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 |
| 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):
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 the archive for your machine:
codewhale-windows-x64.zipor
codewhale-windows-arm64.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 --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-missingWhat's in v0.9.3
This is the Codewhale v0.9.3 source candidate. It is not a published release
until the matching tag, packages, checksums, and release assets exist.
DeepSeek V4 Flash is now a first-class Codewhale route, and the agent-facing
tool surface has been reduced to the canonical action tools that current
models actually need. This release also hardens credential, authorization,
durability, compaction, and macOS File Provider boundaries while deleting
stale runtime and dependency surface.
Added
- Native
deepseek-v4-flashsupport over DeepSeek's Responses API, including
stateless reasoning-item replay, semantic SSE terminal events, structured
function calls and outputs,apply_patch, and model-aware wire-format
selection. Exact current Flash IDs use Responses; future direct
deepseek-vN-*model IDs inherit that route conservatively, while custom
DeepSeek-compatible endpoints retain Chat Completions unless configured
otherwise. - A pipe-only
codewhale auth print-api-keyhandoff for explicitly selected
providers. It shares Codewhale's home-scoped credential authority, refuses
terminal output, and prevents sentinel placeholders from becoming live
credentials. - Per-turn
max_tool_callsenforcement at the engine admission gate, plus a
named-file write scope with a separate read seam. The runtime now rejects
over-budget calls before execution and keeps the operator's write boundary
explicit (#4415). - Runtime-contract, source-structure, and persistence-backlog ratchets that
name drift instead of allowing large ownership surfaces to grow silently
(#3921, #4785).
Changed
- Model-visible built-ins now use the canonical
Bash,File, andRun
action schemas.apply_patchremains available as the one direct custom
edit tool supported by DeepSeek Responses. The bundled stop-ship workflow,
Fleet fixtures, shell shortcut, and engine tests use the same canonical
vocabulary. - Canonical
File { action: "write" }requests now pass through the same
semantic repo-law checks as the former write path. Approval, Full Access,
and workflow execution cannot bypass the repository safety floor by choosing
the canonical schema. - Codewhale home resolution is shared across the CLI, TUI, state, and secret
stores.doctoris offline by default, distinguishes credential source from
availability, and reports one consistent path snapshot. - Durable runtime event writes are serialized across simultaneous processes,
blocking history waits move off async workers, and provider quota exhaustion
remains typed and retryable through compaction (#4522). - Skill discovery caches the merged catalog behind watched-mtime validation;
large skill, engine, subagent, UI, and ambient-ocean test blocks now live in
owned test seams. - Reasoning summaries stay in the user's language, complete jellyfish
silhouettes relocate around transcript text, and cached ocean frames include
their palette identity (#4807). - The authorization-order contract now documents and tests how modes, hooks,
permission rules, safety floors, repo law, approvals, and sandboxing compose
(PR #4980).
Fixed
- macOS sandbox extensions cover CloudStorage/File Provider workspaces without
broadening unrelated paths; thanks @Watcher24 for the #4085 report and
reproduction. - Foreground shell state detaches before steering, so an interrupted command
cannot keep owning the composer (PR #4979). - MCP application-level failures and malformed error envelopes fail closed
instead of looking like successful tool output. - Optional PDF failures are truthful and PDF classification no longer misses
supported inputs. - Bracketed-paste contents are redacted from traces, and credential diagnostics
never treat placeholder sentinels as usable keys.
Removed
- The legacy callable aliases
exec_shell,run_shell_command,read_file,
write_file,list_dir,grep_files,file_search, and the duplicate
Work/RLM registrations. Historical transcript and policy semantics remain
readable, but new model turns receive only the canonical action surface. - The bundled PDF parser dependency chain, replacing it with the smaller
optional extraction boundary tracked by #4382.
Contributors
- Turisla (
@greyfreedom) documented and
locked the authorization-order contract in PR #4980. - Nightt (
@nightt5879) fixed foreground
shell detachment before steering in PR #4979. - Watcher24 (
@Watcher24) provided the macOS
File Provider report and reproduction for #4085. - Fred Leitz (
@fleitz) retains required
source-candidate credit for the canonicalBashworkspace fix from PR #4673
and issue #4674.
See CHANGELOG.md for full notes and docs/CHANGELOG_ARCHIVE.md for older releases.