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
Remaining web settings polish and prefab third-party templates move to
v0.9.9.
Changed
- 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
-
/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 a live Coding Plan picker option (/modelafter
/provider zai, ormodel = "GLM-5.3").GLM-5.2stays the default.
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).
Fixed
-
Selecting the
googleprovider kind resolved to theantigravity
TUI identity (and vice versa): the agy provider entry was inserted at
different positions in the config-level enum and the TUI's
discriminant-indexed lookup table. The table now matches the enum, so
provider pickers, sorted display, and kind round-trips are correct. -
The provider picker's key-entry stage accepted typed input and pastes
for OAuth-only providers afterantigravitydeclared OAuth
acquisition; those gates now key off the OAuth acquisition class
instead of a hard-coded provider identity. -
The webhook hook sink no longer panics when its HTTP client fails to
build; it falls back to a default client (#5381, EvanProgramming). -
Session-index JSONL writes are serialized behind a process-wide mutex
so concurrent state stores cannot drop an append during compaction
(#5382, EvanProgramming; complements the cross-process file lock). -
A billed
max_tokensstop followed by a transport error fails the turn
instead of continuing into a second request. A clean output-limit stop
still continues. Mid-size context windows keep the ordinary 65K internal
reservation so compaction does not collapse to the 1K headroom floor
when the catalogue documents a matching output ceiling. -
Thinking cycle,
/effort, and Settings now walk each model's real ladder
instead of the DeepSeek off/high/max shortcut. Grok 4.6 is
auto/low/medium/high/xhigh (cannot disable); Grok 4.5 is
auto/low/medium/high; first-party DeepSeek keeps a documentedlowtier.
/effortpersists and receipts through the same path as Ctrl+T. -
Google Gemini is its own backend (
/provider google) on the official
OpenAI-compatible route with thought-signature capture/replay and
fail-closed replay for thinking models. Antigravity (agy1.1.13) joins
as a separate credential-plane provider: consent-gated read-only import
of the official CLI's login withANTIGRAVITY_API_KEY/AGY_ADC_AUTH
precedence; requests fail closed until the cloud-code wire protocol is
implemented.
Removed
- The source-structure budget ratchet (CI step, checker, baseline JSON).
It measured line counts, not quality: every legitimate feature required
a hand-edited ceiling and the accompanying "review" was self-review, so
it bought ceremony, not protection. Behavior-measuring gates (dead-code,
runtime-contract, persistence-backlog) stay enforced. - DeepSeek can reuse a key already stored by official DeepSeek Harness
(dsh) after
codewhale auth external-consent --provider deepseek --mode read-only.
Codewhale reads onlyDEEPSEEK_API_KEYfrom the exact granted
$DSH_HOME/.credentials.yamland never writes or refreshes that file. - The TUI markdown parser now honors CommonMark fence-length rules: a ````
opener is not closed by a shorter ``` line, so>content inside a longer
fence stays literal code instead of escaping into a quote. - Sub-agents finalize when the parent session id changes, so a closed
session cannot block new children as a live owner (#5372). - Child spawn-route receipts stay live and usage is deduped by response
(#5366). - Doctor keeps persisted setup readiness across first-run / update
checkpoints (#5340). - Approval default selection is applied and explained; agents are told
when approvals are disabled (#5293). - A
/models2xx probe is a connection check, not model readiness. - Site layout uses one container, the ticker no longer implies false
provider readiness, and install links stay in the active locale.