* design: export the TUI whale palette instead of re-typing it
crates/tui/src/palette/tokens.rs is the whale palette. The web app repeated
its hexes by hand, the desktop shell ran a separate neutral-gray palette, and
the Android theme a fourth one — four palettes sharing exactly one value
(#08111C). Make the Rust file the source and generate the rest.
scripts/export-design-tokens.py parses the 47 WHALE_*_RGB consts (aliases
included: INFO = ACTION = ACCENT_PRIMARY, SUCCESS = WORKING_GREEN,
ERROR_BORDER = ERROR, ...) and emits web/app/tokens.css, plus — when a
codewhale-apps checkout sits beside this repo — the desktop CSS token file
and a Compose WhaleTokens object. Aliases are emitted as var()/val
references, so the alias structure survives the export instead of flattening
into duplicate literals. --check fails when a generated file is stale; it is
wired in as `npm run check:tokens` and runs in the web workflow.
globals.css keeps its own variable names (--paper, --ink, --indigo — the
component rules and the docs light sheet consume them) and now binds them to
--whale-* rather than re-typing the hex. Only byte-identical values were
rebound; --paper-card, --indigo-deep, --stage-ambient and --stage-hint are
not whale tokens and stayed literal. No rendered color changes.
The two contract tests read hexes straight out of globals.css, so they now
resolve one hop through the generated file (lib/whale-tokens.ts). They still
catch a wrong mapping: pointing --paper at --whale-panel fails with
"expected '#0e1729' to be '#03070d'".
Evidence, in web/:
npm test -> Test Files 42 passed (42), Tests 364 passed (364)
npm run lint -> clean; npx tsc --noEmit -> clean
npm run build -> succeeded; built CSS carries --whale-bg:#03070d
and --paper:var(--whale-bg)
npm run check:tokens -> design tokens up to date (47 tokens)
check:facts, check:docs -> PASS
Perturbing tokens.css makes --check exit 1 with "stale: web/app/tokens.css".
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AdbuqwHAXSDcikPiS6L6Qw
* design tokens: the generator targets the web app only
The desktop and Android targets were rendered and rejected on sight; the
script now writes nothing outside this repository and has no --apps-root.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AdbuqwHAXSDcikPiS6L6Qw
---------
Co-authored-by: CodeWhale Bot <bot@codewhale.net>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Codewhale
Codewhale is an open source coding agent for your terminal, built in Rust and improved in public with the people who use it.
简体中文 · 日本語 · Tiếng Việt · Bahasa Indonesia · 한국어 · Español · Português · Русский · Українська · Français · Deutsch · 繁體中文 · हिन्दी · Türkçe · Italiano · Polski · العربية · Català
Install
npm install -g codewhale
codewhale
The first run helps you connect a provider or stay offline. Codewhale also supports Cargo, Docker, Nix, Scoop, prebuilt archives, Android/Termux, and a CNB mirror. See the installation guide.
Tab completion is one command per shell — codewhale completion bash|zsh|fish|powershell|elvish.
See shell completions.
Use
Talk to Codewhale the same way you would talk to a teammate:
Fix the failing tests and explain what changed.
Or run a task without opening the TUI:
codewhale exec "fix the failing tests and explain what changed"
Codewhale can read your repository, edit files, run commands, inspect results, and keep working toward a goal. You decide how much access it has.
Why Codewhale
- Use the model you want. Connect hosted providers or local models through
Ollama, vLLM, or SGLang. Switch provider and model with
/model. - Stay in control. Plan is read-only. Ask, Auto-Review, and Full Access make
approval behavior visible.
/undoreverts the last turn and/restorereturns the workspace to an earlier snapshot. - Keep long work organized. Save sessions, set a durable
/goal, review workflows before they run, and coordinate agents without turning their internal instructions into your transcript. - Extend the agent you already have. Connect MCP servers and skills, configure hooks, and keep agent roles as readable files in your project or personal settings.
Run /help in the TUI for commands and keyboard shortcuts.
Safety
Codewhale runs on your machine with the access you grant it. Approval modes and repository rules limit what the agent may do; optional OS sandboxing adds a stronger execution boundary where supported. Unknown model prices stay unknown instead of being reported as free.
Read authorization order for the exact policy stack and configuration for local settings.
Documentation
- Providers and local models
- Agent teams
- MCP, hooks, and configuration
- Local web client
- All documentation
Join the community
Codewhale gets better when people use it, report what feels wrong, and help fix it. If a provider is missing, a workflow is awkward, or the terminal UI gets in your way, open an issue. If you know how to improve it, open a pull request. First contributions are welcome, and contributors keep credit for the work that lands.
Join the Discord, or add Hunter on WeChat
(hunterbown) and ask to join the Whale Brothers group.
Project history
Codewhale began as deepseek-tui and still preserves that configuration and
session compatibility. It is now provider-neutral and independently maintained;
it is not affiliated with any model provider.
Thanks to every contributor and to the open source communities that helped the project grow. See the contributor record.
License
MIT. Portions adapted from other open-source projects are recorded in third-party notices.
