codewhale

App New

Terminal UI for open-source and open-weight coding models

Checked · Sources

Downloads
19,483
Dependents
Not applicable
Stars
41,158
Forks
3,565
Contributors
218
Commits
14,393
Latest release
0.10.2 ·

About

From the project README ·

Codewhale

An open-source coding agent for your terminal that works with any model.

Give Codewhale a task and it reads the repository, edits files, and runs commands until the task is done or it needs input from you. It works with more than 40 built-in providers, DeepSeek V4.1 Flash by default, and with models running on your own machine. /receipts lists the files it changed, the commands it ran, and the web and MCP calls it made.

Website · Documentation · Changelog · Contributing

简体中文 · 日本語 · Tiếng Việt · Bahasa Indonesia · 한국어 · Español · Português · Русский · Українська · Français · Deutsch · 繁體中文 · हिन्दी · Türkçe · Italiano · Polski · العربية · Català

A Codewhale terminal session

A 0.10.2 development build with a scripted test model, in Full Access inside a throwaway workspace. The edit, three tests and a sub-agent review ran for real.

Codewhale × OrcaRouter — +30% DeepSeek v4.1 Flash usage

View the Codewhale × OrcaRouter offer. Codewhale earns a referral fee from OrcaRouter.

Install

macOS and Linux:

curl -fsSL https://codewhale.net/install.sh | sh
Read the full README

The installer puts checksum-verified codewhale and its short alias codew in ~/.local/bin. If your shell then says command not found, run the PATH line the installer prints (details). codewhale update upgrades it. These commands install the latest release. This page follows main, so a feature marked with a version arrives in that release; the changelog lists what each release adds.

Windows, npm, Cargo, and other ways to install

winget install HunterBown.CodeWhale  # Windows x64 (or Scoop, or the installer from GitHub Releases)
npm install -g codewhale            # wraps the same release binaries
cargo install codewhale-cli --locked  # crates.io; can trail GitHub Releases

Prebuilt binaries cover Linux, macOS, and Windows on x64 and arm64. Nix, Homebrew on Linux, Android/Termux (preview), and manual downloads are in the installation guide, and containers in Docker. Stick to one install method per machine; otherwise two copies end up on PATH and whichever comes first wins.

Quickstart

  1. Commit or stash your work, then run codewhale from the root of a git repository. By default it asks before each file edit and command; press Shift+Tab once for Accept Edits to let it edit files in the repository without asking.
  2. Run /provider (or press F3), pick a provider, paste its API key, and choose a model. DeepSeek is the default provider. With no key, pick a local runtime instead. If no provider is configured and Ollama is already serving a chat model, Codewhale uses it automatically; from 0.10.2 it offers it when you send your first message.
  3. Type a task:
Fix the failing tests and explain what changed.

Read-only commands run straight away. For any other shell command Codewhale asks first: y runs it once, a allows commands like it for the rest of the conversation, n refuses. /undo takes back your last request and its file changes. /help lists commands and keys.

For scripts and CI, codewhale exec runs one task without the interface. By default, --auto uses Full Access: tools run without asking, shell commands have no Codewhale sandbox, and trust mode lets file tools write outside the workspace. Add --sandbox workspace-write to keep the shell sandbox and file-tool workspace restrictions, with trust mode off:

codewhale exec --auto --sandbox workspace-write "fix the failing tests and explain what changed"

Modes and permissions

A fresh install starts in Work mode with the Ask permission.

Switch withOptions
ModeTab (when the input is empty) or /modePlan reads and searches but changes nothing. Work edits files and runs commands; start a goal with /goal when a request needs more than one turn.
PermissionShift+TabAsk asks before every file edit and every shell command that is not read-only. Accept Edits applies file edits in your git repository without asking and still asks before commands. Auto-Review lets rules and a reviewer model approve routine calls and refuses high-risk ones; switch to Ask to approve those yourself. Full Access never asks and turns off Codewhale's sandbox; repository rules and managed policy still apply.

See the modes and permissions guide for the details.

What it does

New in 0.10.2
  • /pet on turns your terminal into an animated whale that shows what the agent is doing, while the message box stays live. Its 980 particles spell the current step in English, Chinese or Japanese.
  • /workbar terminal shows the shells the agent is running as they run. Type into one, or press Ctrl+N for a shell of your own (macOS and Linux).
  • /undo takes back your whole last request in one step, including every file it changed, and /diff works in folders without Git.
  • When a plan is ready, Codewhale asks whether to start Work with Ask or Auto-Review, or keep planning.
  • /color gives each chat its own composer color, saved with the session.
  • web_search can use DeepSeek's new Search API: set [search] provider = "deepseek" with a DeepSeek key.
  • Outside Full Access, a curl or wget that would upload a credential never runs without your approval, and a command that hides invisible Unicode is refused. write no longer replaces a file the agent has not read, or one that changed after it read it.
Models

More than 40 providers are built in, including Anthropic, OpenAI, DeepSeek, Google, Mistral, Moonshot, OpenRouter, and xAI. Any OpenAI-compatible endpoint works, and so do local models through Ollama, vLLM, or SGLang. The default is DeepSeek's deepseek-flash, which DeepSeek moved to DeepSeek-V4.1-Flash-1017 on 2026-10-17; 0.10.1 runs it without an update (details).

/model switches models between turns, and /model auto picks one for each turn (/router sets up how). /turn inspect shows which model a turn used, what it cost and how long it took. codewhale auth chatgpt lets you use a ChatGPT plan instead of an API key (experimental). See Providers.

Receipts and undo

/receipts, or codewhale receipts --last after you quit, lists the files changed, commands run, web and MCP calls, agents started, approvals and who gave them, and failures. /undo takes back your last request and the files it changed, in one step and without trust mode. /restore rolls the whole workspace back to an earlier snapshot; because that overwrites later edits, it needs /trust on or Full Access. See Receipts.

Exec runs that offer tools are saved in every output format, so codewhale receipts --last works after exec --auto, including --json. Answer-only text and --json runs are saved only when resuming or when conversation compaction starts; use --output-format stream-json to always save them for receipts or exec --continue.

Longer work

/goal sets an objective that carries across turns. Codewhale can split work across sub-agents, run a fleet of agents, or follow a workflow checked into the repository.

Coming from another agent

Codewhale reads AGENTS.md on its own. Instruction files written for other tools, such as CLAUDE.md, .cursorrules, or .github/copilot-instructions.md, load only when you opt in with project_instruction_imports = ["claude"] (or "cursor", "cline", "windsurf", "copilot", "all") in your config; see config.example.toml. Codewhale warns when it finds one it did not load.

/import-claude prepares an import of your Claude Code settings and MCP servers for you to review. /plugin install accepts Claude Code plugins containing skills, commands, agent profiles, and MCP servers, and refuses plugins that need hooks or LSP servers (details).

Extensions

Connect MCP servers, add skills and plugins, and run hooks on session and tool events. Code mode (experimental, on by default) lets the model write one execute_tools program that calls several MCP and plugin tools; each call still meets your approval rules and keeps its receipt. The independently installed Computer Use plugin (experimental, macOS only) can observe and operate other apps. It stays off until you review its access and enable it (guide).

Ways to run it

CommandWhat it does
codewhaleThe interactive terminal app
codewhale exec "…"One task without the interface. On its own it answers without using tools; --auto enables tools with Full Access by default, --sandbox workspace-write restricts them, and --output-format stream-json streams events as JSON
codewhale webA local web UI on 127.0.0.1 (guide)
codewhale review --pr NAn advisory review of a GitHub pull request. The GitHub bot setup generates a pinned workflow for automatic reviews and @codewhale review, using your own model key and optional App identity
codewhale app-server --httpThe Runtime API, a local HTTP API for threads, events, approvals, and each turn's file changes
codewhale serve --acpThe Agent Client Protocol over stdio, for editors such as Zed

The terminal app, exec, web, and the Runtime API share one engine (architecture). A community-maintained VS Code extension connects to it from the sidebar (source). A native desktop app built on the Runtime API is in development; it has no public download yet.

Cost and accounts

Codewhale is free and MIT licensed. With your own API key you pay the provider directly; local models need no key. The footer and /cost show what a session has cost when the price is known, and an unknown price is shown as unknown, never as free.

You don't need an account. Keys you add with /provider stay on your machine.

Safety and privacy

In Ask and Auto-Review, commands run in an OS sandbox where the system has one: Seatbelt on macOS, and bubblewrap on Linux when it is installed. Windows has no OS sandbox yet, and Full Access turns the sandbox off. Inside the sandbox, shell commands cannot read credential stores such as ~/.ssh, ~/.aws and .env files; from 0.10.2 the same rule covers terminal sessions and more file tools. /preview-request shows a redacted preview of the next request without sending it.

Telemetry is on by default. It sends aggregate counts (version and platform, session length and outcome, which built-in providers you used, feature and error counts) with a random install ID that rotates every 90 days, and never conversations, code, prompts, model names, file or repository names, or credentials. codewhale config set telemetry false turns it off. At startup Codewhale also checks GitHub for a new release; set CODEWHALE_NO_UPDATE_CHECK=1 to skip that. More in authorization order, sandboxing, and telemetry.

Documentation

Community

If a provider is missing or a workflow is awkward, open an issue or send a pull request. Contributors keep credit for the work that lands, and the repository layout shows where things live.

Chat on Discord, or add the maintainer, Hunter, on WeChat (hunterbown) and ask to join the Whale Brothers group.

History and license

Codewhale started as deepseek-tui and still reads that project's configuration and sessions. It is independently maintained and not affiliated with DeepSeek or any other model provider. Thanks to everyone who has contributed.

Codewhale contributors

MIT. Code adapted from other open-source projects is listed in the third-party notices.

Runs on
GPU support unknown
What shows it
  • no dependency or feature matches a backend row
Native code
Required
  • Binds native code: aws-lc-rs, ring, liblzma-sys, libsqlite3-sys, rquickjs-sys and 1 more
Python bindings
No Python binding crate found
License
MIT

Compare with similar projects

Order: strongest tier first, then most downloads, then name, with unmeasured values last. A library counts downloads over 30 days. An app counts binary downloads per release. An app with none counts its crate downloads over 30 days. ML Rust runs this catalogue, so its closest project always gets a row.

codewhale beside the projects that share a topic with it
ProjectDownloadsDependentsStarsLatest releaseRuns on (GPU)Native codeLicense
codewhale This page App New

Terminal UI for open-source and open-weight coding models

19,483 binary downloads per release Not applicable 41,158 0.10.2 GPU support unknown Binds native code: aws-lc-rs, ring, liblzma-sys, libsqlite3-sys, rquickjs-sys and 1 more MIT
goose App Featured

an open source, extensible AI agent that goes beyond code suggestions - install, execute, edit, and test with any LLM

63,795 binary downloads per release Not applicable 56,377 Not measured Not measured Apache-2.0
adk-rust Listed

Rust Agent Development Kit - Build AI agents in Rust with modular components for models, tools, memory, and more.

5,419 downloads over 30 days 25 743 2.3.0 CUDA, Metal Binds native code: alsa-sys (feature desktop-audio), audiopus_sys (feature openai-webrtc), cxx (feature livekit), espeak-rs-sys (feature kokoro), libsqlite3-sys (feature sqlite) and 4 more Apache-2.0
opendev App Listed

Open-Source Coding Agent in the terminal

740 binary downloads per release Not applicable 853 0.1.4 GPU support unknown No native code found MIT
octomind App Listed

Open-source AI coding agent and agent runtime: one binary, any model, MCP-native. Runs in terminal, CI, or as a daemon — guardrails in scripts, not approval popups.

110 binary downloads per release Not applicable 624 0.69.0 GPU support unknown Binds native code: zstd-sys Apache-2.0
axp App Listed

An open protocol that gives AI agents a secure, sandboxed place to run code and use tools — with lean context usage. AXP works alongside MCP

Not measured Not applicable 3 Not measured Not measured Not measured Apache-2.0
cua App New

Scale computer-use 2.0 with open-source drivers, cross-OS sandboxes, and benchmarks for training, evaluation, and data generation.

528 binary downloads per release Not applicable 32,010 0.10.1 GPU support unknown Binds native code: ring MIT
Why NewIts first release on 23 May 2026 is under 180 days old.

The check tests the Featured gates once the first release passes this age limit.

What else the check found

  • The last activity is on 9 Nov 2026, 0 days ago. The rules expect an update within 365 days. Dormancy rule

Exact rules: New. The check on applied thresholds version 9.

Every rule outcome, as the check records it
  • expected-interval: app: E = 365 days
  • dormancy: last activity 2026-11-09, 0 days ago, E = 365: active
  • new: new: first release 2026-05-23 is under 180 days old
Crates29 crates

Measurements and sources

Each signal row shows the raw value, its source and the fetch date. The Sources list gathers every distinct source on this page. Movement needs more history.

Sources6 sources
Adoption19,483 binary downloads per release4 not measured
Adoption measurements
SignalValueSourceFetchedCounts
Active dependentsNot measuredYes
New dependents (365 days)Not measuredYes
Peak active dependentsNot measuredYes
Active dependents as a share of the peakNot measuredYes
Binary downloads per release19483GitHub releasesYes
MaintenanceLatest human commit: on the check date4 not measured
Maintenance measurements
SignalValueSourceFetchedCounts
Latest human commit2026-11-09GitHub repositoryYes
Latest release2026-10-24GitHub releasesYes
First release2026-05-23crates.io database dumpYes
Latest version0.10.2crates.io database dumpNo
Days the oldest outside issue waits for a reply9GitHub repositoryYes
Maintainer replies over 365 days86GitHub repositoryYes
Repository archivedfalseGitHub repositoryYes
Repository gonefalseGitHub repositoryYes
Release commit or manifest in the repotruecrates.io packageNo
Published docsNot measuredYes
Latest release fails cargo checkNot measuredYes
Build check dateNot measuredYes
Build check toolchainNot measuredYes
SecurityNot measured
Security measurements
SignalValueSourceFetchedCounts
Unpatched vulnerabilities past the grace windowNot measuredYes
RustSec unmaintained advisoryNot measuredYes
Deprecation noticeNot measuredYes
Deprecated requirementNot measuredYes
Distribution41 releases, 306 downloads over 30 days6 not measured
Distribution measurements
SignalValueSourceFetchedCounts
Releases41crates.io database dumpNo
Downloads over 30 days306crates.io database dumpNo
Binary downloads over the last 3 releases58450GitHub releasesYes
Homebrew installs on request over 365 daysNot measuredYes
Repology repository familiesNot measuredYes
Docker pull growth over 90 daysNot measuredYes
Docker pulls at the growth baselineNot measuredYes
Every version a prereleasefalsecrates.io database dumpYes
Every version 0.0.xfalsecrates.io database dumpYes
Every version yankedNot measuredYes
Crate deleted from crates.ioNot measuredYes
Repository41,158 stars, 3,565 forks, 218 contributors, 14,393 commits. Stars alone never qualify a project.
Repository measurements
SignalValueSourceFetchedCounts
GitHub stars41158GitHub repositoryYes — one part of the repository route
GitHub forks3565GitHub repositoryYes — one part of the repository route
Contributors with a GitHub account218GitHub contributorsYes — one part of the repository route
Commits on the default branch14393GitHub repositoryNo
Repository's main crate left out of the entrynonecrates.io database dumpYes
Facts that never count
Facts that never count measurements
SignalValueSourceFetchedCounts
LicenseMITcrates.io database dumpNo
Runs on, from listed crates and their direct dependenciesGPU support unknowncrates.io database dumpNo
What shows each backendno dependency or feature matches a backend rowcrates.io database dumpNo
Native code, from listed crates and their dependenciesBinds native code: aws-lc-rs, ring, liblzma-sys, libsqlite3-sys, rquickjs-sys and 1 morecrates.io database dumpNo
Python bindings, from direct dependencies of listed cratesNo Python binding crate foundcrates.io database dumpNo
Crates that depend on a listed crate directlyNot measuredNo

Corrections and review history

Report a correction

No correction applies to this entry.

Judgments

A judgment enters only through an approved issue and a merged pull request.

No judgment applies to this entry.