The pager already carries per-surface copy payloads (`c`/`y` body, `e` turn handoff), but no path copied just the final assistant answer: Ctrl+Y copies whatever cell is focused and `c` in a details pager copies the rendered body with glyph/label scaffolding. Add an answer-only payload to the existing mechanism: - `HistoryCell::is_completed_assistant_answer` is the typed "final answer only" projection in the history module: only a completed (non-streaming) assistant cell qualifies, so reasoning/thinking blocks, tool calls and results, sub-agent transcripts, runtime status, and archived-context seams are excluded by construction. - Serialization reuses `history_cell_to_clipboard_text`, the canonical clean-copy path that returns the authored assistant Markdown. - `PagerView`/`PagerPage` gain `with_copy_answer`; `a` copies it with a visible `a copy answer` footer hint (inert where no answer is attached). - Attached on the Turn Inspector pages (each turn's latest completed answer, so the latest page carries the latest completed answer), on the raw tool-details pager when the focused cell is a completed assistant answer, and on the last-message pager. Clipboard writes stay on the existing ViewEvent::CopyToClipboard -> app.clipboard path; no new clipboard mechanism. Signed-off-by: Hunter Bown <hmbown@gmail.com>
Codewhale
An open source coding agent for your terminal — bring your own model.
Codewhale started as a native experience for DeepSeek. It has since grown into a community-driven project: one coding harness that fits a growing international community and supports as many models and providers as possible — open models first, hosted or local, none privileged over the rest.
Give it a provider, a model, and a task. It reads your code, edits files, runs
commands, and checks its own work, then stops when the job is done or it needs
you. Switch models mid-task with /model. Work interactively in the TUI, or run
codewhale exec in scripts and CI. It's written in Rust, licensed MIT, and runs
on your machine.
The parts that aren't like other harnesses: you pick the model for each
role — and they don't have to match — and agents in Codewhale talk to each
other, across models. A fleet pins a provider, a model, and a reasoning tier
per role, so a cheap fast model can direct an expensive reasoning one, or a
GLM builder can work the same job as a Kimi reviewer. While they run, message
any of them mid-flight, peek at its transcript, or interrupt it — and it isn't
just parent-to-child: separate Codewhale tasks in the same workspace exchange
durable, restart-safe Agent Mail, delivered once at a safe boundary, with
credentials redacted. A /goal holds a long objective across turns until it's
actually done. Roles are files you edit, and the whole harness stays yours.
We're always looking for contributors and ways to improve. If a model or provider you use is missing, or something breaks, telling us is one of the most useful things you can do — see Contributing.
简体中文 · 日本語 · Tiếng Việt · Bahasa Indonesia · 한국어 · Español · Português · Русский · Українська · Français · Deutsch · 繁體中文 · हिन्दी · Türkçe · Italiano · Polski · العربية · Català · codewhale.net · Docs · Changelog · Discord
Install
npm install -g codewhale
Cargo, Docker, Nix, Scoop, prebuilt archives, Android/Termux, and a CNB mirror
for anyone who can't reach GitHub are covered in
docs/INSTALL.md. Coming from deepseek-tui? Your config and
sessions carry over — see docs/REBRAND.md.
Use
codewhale auth set --provider deepseek # or export ANTHROPIC_API_KEY, etc.
codewhale # open the TUI
codewhale exec "fix the failing test" # headless
codewhale web # local browser client on 127.0.0.1
In the TUI: /model switches provider and model together, /fleet builds and
runs the team — one role at a time, each with its own model — /undo reverts
the last turn, and /restore <N> rolls the workspace back to an earlier
snapshot (bare /restore lists them). Tab
cycles Plan / Work / Operate when the composer is empty — with text in it, Tab
completes slash commands and @ mentions instead. Shift+Tab cycles the
Ask / Auto-Review / Full Access permission posture at any time. ! runs a
shell command through the normal approval path.
What it does
- Any model, any provider — and any mix of them. DeepSeek, Claude, GPT,
Kimi, GLM, and 30+ providers, plus your own vLLM, SGLang, or Ollama with no
key, all through one runtime and one toolset. The catalog tracks each
provider's live lineup — DeepSeek's V4 Pro backend (labeled
DeepSeek-V4-Pro-0813) stays callable asdeepseek-v4-pro, Grok 4.6 is the direct xAI default, and OrcaRouter routes throughorcarouter/auto. A saved role records itsprovider,model, and reasoning tier explicitly, so a fleet can span vendors in a single run and a role's route never depends on whichever provider happens to be active. Context limits and prices come from the real route, and an unknown price shows as unknown rather than $0. - Agents that talk to each other — across models. Every agent in Codewhale
is reachable while it works:
messagequeues a note to a running sub-agent,followupwakes it with your note at its next safe boundary,peekreads its transcript, and an interrupt stops just its turn. It goes further than the parent-child tree: separate tasks in the same workspace exchange durable Agent Mail — a queued handoff summary that survives restart, delivers exactly once at the recipient's safe boundary, and redacts credentials and paths — so a GLM session and a Kimi session can coordinate in two terminals with you out of the relay loop. Each side can be a different model; Codewhale carries the conversation either way. - A harness you author. Roles are files you can read and edit — a model, a tool posture, and standing instructions per role — kept in the project so the team shares them, or beside your other personal settings so they follow you between repos. A constitution records how you want the agent to behave across every session, so the harness matches your practice instead of ours.
- Read-only until you allow more. Plan mode can't change files, and
approvals gate risky commands. When an OS sandbox actually wraps a command,
Codewhale says so: Seatbelt on macOS where available, opt-in bubblewrap on
Linux. A repo's
constitution.jsoncompiles into write holds that even Full Access can't skip. - Work you can resume. A fleet records every step to an append-only ledger,
so
fleet resumepicks up where you left off./goalholds a persistent objective the agent keeps working toward across turns — pausable, resumable, and restored with the session on restart — and/workflowsopens a live dashboard over every run this workspace's journal keeps.
Integrations
- DeepSeek Harness (dsh) — connected through Codewhale.
codewhale integrations dsh connectlinks an existing@deepseek-ai/dshinstall to your Codewhale provider route, permissions, and workspace, andintegrations dsh install-bundleadds the opt-in DSH plugin bundle sodsh --profile codewhalecarries that identity on its own. Codewhale owns permissions and lifecycle authority; dsh keeps its own sessions, profiles, and credentials untouched. See docs/INTEGRATIONS_DSH.md. - VS Code. The official extension scaffold (
extensions/vscode) opens Codewhale in an integrated terminal and exposes a read-only Agent View over the local runtime. It is a local-development preview, not a marketplace release yet.
Learn more
- docs/PROVIDERS.md — every provider route: hosted, gateway, and local
- docs/FLEET.md — fleets, the ledger, and resume
- docs/WORKFLOW_EXPERIMENTAL_SEARCH.md — frozen, provider-neutral experimental search within Workflow
- docs/CONFIGURATION.md —
config.toml, hooks, and the constitution - docs/AUTHORIZATION_ORDER.md — how modes, hooks, permission rules, safety floors, repo law, approvals, and sandboxing compose
- docs/HOOKS.md — the eleven TUI lifecycle hook events, their
payloads, and which three of them can steer a turn (
codewhale execand the CLI subcommands do not fire hooks) - docs/WEB.md — the loopback-only browser client and its one-time authentication boundary
Everything else — modes, keybindings, sandbox details, MCP, the runtime API, and architecture — lives in docs and on codewhale.net.
Contributing
Issues, PRs, repro steps, logs, and feature requests are all real project work, and first contributions are welcome. When a PR can't merge as-is, maintainers harvest what works and keep the author credited — in the commit, the changelog, and docs/CONTRIBUTORS.md.
- Open issues — good first contributions live here
- CONTRIBUTING.md — dev setup and PR flow
- docs/CONTRIBUTORS.md — everyone who has shaped this
- Buy me a coffee
Thanks to DeepSeek for the models and support that started the project, DataWhale 🐋 for welcoming us into the Whale Brother family, and OpenWarp and Open Design for collaborating on the terminal-agent experience.
License
MIT. An independent community project, not affiliated with any model provider.

