L O A D I N G
↓ 向下滚动进入
ORIZURU

CodeWhale 上手:一个终端智能体,跑遍所有模型

这篇文章假设你从来没写过代码,也没打开过”终端”那个黑框框。 读完并跟着做完,你会拥有一个能真正动手的 AI 助手——它直接在你电脑上建文件、改内容、跑命令、看到报错自己修——而且你可以随时换一个更便宜的模型来驱动它。

全文约 50 分钟,动手部分约 25 分钟。建议边读边做。 后半程有 Fleet、Workflow 这类重型功能,第一次读可以先跳过,用熟了再回来。


零、先看一眼全貌

CodeWhale 是什么:一句话看懂你提需求 · 验收CodeWhale 运行时(装在你自己的终端里)读文件 · 改文件 · 跑命令 · 自检调用模型30+ 家模型供应商DeepSeek · GPT · Claude · GLMKimi · Qwen · 你的本地模型读写文件你的工作文件夹(它唯一能碰的地方)换模型 = 在界面敲一句 /model  ·  换工具 = 不用换

一句话:CodeWhale 是一个装在你电脑终端里的编程智能体,你给它一个”任务”,它自己读文件、改文件、跑命令、验收结果。

它和 Claude Code、Codex 是同一类东西。真正的差别只有一个,但这个差别很大:

  • Claude Code 只能用 Anthropic 的模型,Codex 只能用 OpenAI 的模型。
  • CodeWhale 谁的模型都能用——DeepSeek、Claude、GPT、Kimi、GLM、Qwen、MiniMax……30 多家,甚至你自己笔记本上跑的本地模型。换模型只要在界面里敲一个 /model。

它是 Rust 写的,MIT 开源,代码在 github.com/Hmbown/CodeWhale,全程跑在你自己的机器上。它的前身叫 deepseek-tui,所以你会在很多地方看到 DeepSeek 的影子——DeepSeek 至今仍是它的默认供应商。


一、先搞懂:它和 ChatGPT 到底差在哪

聊天 AI vs 编程智能体:差在"谁动手"普通聊天 AI = 军师你描述问题它给你一段代码你复制粘贴保存运行报错了?你再回去问所有搬运工作都是你的CodeWhale = 能动手的实习生你提需求它自己读文件、改文件它自己跑命令看结果不对就自己改,直到过你只负责提需求和验收所以它需要三样东西:一个工作目录、你的权限批准、一个终端

很多人第一次听说这类工具,反应是”这不就是能写代码的 ChatGPT 吗”。

不是。差别大到需要换一套心智模型。

普通聊天 AI 是”军师”:你描述问题,它给你一段方案或代码,你负责把它搬进现实。中间所有的复制、粘贴、保存、运行、看报错、再回来问——全是你的活。

CodeWhale 是”能动手的实习生”:你把一间办公室(你电脑上的某个文件夹)交给它,它能自己打开文件看、自己改、自己运行、自己看结果对不对、不对就再改。你只需要提需求和验收。

这个差别带来三个后果,先记住:

  1. 它需要一个”工作目录”——一个具体的文件夹。它默认只在这个文件夹里活动,看不见也改不了外面的东西。
  2. 它会请求权限——“我要改这个文件,可以吗?""我要运行这条命令,可以吗?“这不是啰嗦,这是安全阀。
  3. 它跑在终端里——那个黑框框。这是唯一一道门槛,但真的只需要学 5 分钟。

官方文档把这套东西叫 harness(马具/框架):模型只是发动机,harness 是发动机之外的整辆车——工作目录、工具、权限、会话、记录。同一台发动机装在不同的车上,跑出来的效果天差地别。这也是为什么”能换模型”这件事这么重要:车是好车,发动机你随便挑。


二、为什么值得多装一个 CodeWhale

一个运行时,接上所有模型托管直连deepseek / openai / anthropicmoonshot / zai / minimax / xai聚合网关openrouter / siliconflownovita / fireworks / together跑在你自己机器上ollama / vllm / sglang不用 key,不出本地CodeWhale 运行时工具 · 权限 · 会话 · 记忆(换模型时这一层完全不变)你的项目文件夹切换方式/model 或 /provider任务中途也能换Claude Code 绑死 Anthropic,Codex 绑死 OpenAI,CodeWhale 不绑

如果你已经在用 Claude Code 或 Codex,装 CodeWhale 的理由有三个:

2.1 不被单一厂商锁死

Claude Code 涨价了、Codex 限流了、某家模型突然不能用了——这些事在 2025-2026 年发生过不止一次。CodeWhale 把”用哪家模型”变成了一个可以随时换的配置项,而不是一次重新学习工具的成本。

实测本机 codewhale model list 能直接列出的路由包括(节选):

deepseek-v4-pro (deepseek)          deepseek-v4-flash (deepseek)
gpt-5.6 / gpt-5.5-pro (openai)      deepseek/deepseek-v4-pro (openrouter)
moonshotai/kimi-k2.7-code           z-ai/glm-5.2 (openrouter)
qwen/qwen3.6-plus (openrouter)      minimax/minimax-m3 (openrouter)
GLM-5.2 (zai)                       xiaomi/mimo-v2.5-pro (openrouter)

完整的供应商 ID 有 30 多个:deepseek、openai、anthropic、openrouter、moonshot、zai、minimax、siliconflow、volcengine、qianfan、novita、fireworks、together、deepinfra、huggingface、xai、nvidia-nim、arcee、stepfun、longcat、sakana、meta、atlascloud、wanjie-ark、xiaomi-mimo,以及三个跑在你自己机器上的:ollama、vllm、sglang。

2.2 便宜

这是最实际的理由。用 DeepSeek 或 GLM 驱动同一套 harness,成本通常是 Claude 官方 API 的零头。对于”改改文案、整理文件、写个小脚本”这类日常任务,便宜模型完全够用。

具体价格各家随时在变,本文不写死数字,以各家官网为准。CodeWhale 会在界面底部显示本次会话的花费(cost 状态位),价格未知时它显示”未知”,不会假装是 0。

2.3 能力上限更高

Claude Code 和 Codex 都能开子智能体,但 CodeWhale 把这件事做成了一个叫 Fleet 的持久化系统:一群 worker 并行干活,每一步写进只追加的账本,笔记本合盖了、程序崩了,fleet resume 能从断点继续。这是本文第十四节的内容。

什么时候不该用 CodeWhale? 如果你已经买了 Claude 或 ChatGPT 的订阅、只做一个项目、对成本不敏感——那 Claude Code / Codex 的开箱体验更顺,没必要折腾。CodeWhale 的价值在”你想控制成本”或”你想控制一切”的时候才显现。


三、准备工作:终端 5 分钟速成

如果你已经会用终端,直接跳到第四节。

3.1 终端是什么

终端就是用打字代替点鼠标的一个窗口。你点”新建文件夹”,等价于在终端里敲 mkdir 文件夹名。仅此而已,没有更玄的东西。

3.2 怎么打开

  • macOS:按 Command + 空格,输入 terminal,回车。
  • Windows:开始菜单搜 Windows Terminal,打开它。

打开后你会看到类似这样一行,最后有个闪烁的光标:

wangjinlong@MacBook-Pro ~ %

这行叫提示符,~ 表示”我现在在你的用户主目录”。光标处就是你打字的地方。

3.3 只需要记住 4 条命令

你想干什么敲什么备注
我现在在哪个文件夹pwdprint working directory
这个文件夹里有什么lsWindows 用 dir 也行
进入某个文件夹cd 文件夹名输入前几个字母按 Tab 会自动补全
回到上一层cd ..注意是两个点

3.4 建一个练习用的文件夹

bash
cd ~
mkdir codewhale-练习
cd codewhale-练习
pwd

最后一行会打印出这个文件夹的完整路径。记住它——这就是待会儿要交给 CodeWhale 的”办公室”。


四、安装:四条路,挑一条

装哪一种?照这棵树走你在什么系统上?macOS / Linux只想最快装好Windows或已装 Node.js系统架构特殊或 GitHub 连不上curl -fsSL https://codewhale.net/install.sh | shnpm install -g codewhalecargo install codewhale-cli --lockedcargo install codewhale-tui --locked完全不想让它碰系统?用 Docker 跑ghcr.io/hmbown/codewhale:latest国内 npm 慢:npm config set registry https://registry.npmmirror.com装完验证:codewhale --version 然后 codewhale doctor

4.1 路线 A:官网安装脚本(macOS / Linux,最短)

bash
curl -fsSL https://codewhale.net/install.sh | sh

它会下载配套的三个二进制(codewhale、codew、codewhale-tui),用官方校验和文件核对完整性,默认装到 ~/.local/bin。codew 是 codewhale 的短别名,敲着省事。

4.2 路线 B:npm(跨平台,最通用)

前提是电脑里有 Node.js(nodejs.org 下载 LTS 版一路下一步即可)。

bash
npm install -g codewhale

国内下载慢,先换个镜像源:

bash
npm config set registry https://registry.npmmirror.com
npm install -g codewhale

4.3 路线 C:Cargo(从源码编译,最兜底)

GitHub 被墙、或者你的系统架构比较特殊(老版本 Linux ARM64、FreeBSD 等),走这条:

bash
# 需要先装 Rust 1.88+,见 https://rustup.rs
cargo install codewhale-cli --locked
cargo install codewhale-tui --locked

两个包都要装——codewhale-cli 提供的是调度器,真正干活的运行时在 codewhale-tui 里。

4.4 路线 D:Docker(最隔离)

不想让它碰你的真实系统,用容器:

bash
docker volume create codewhale-home
docker run --rm -it \
  -e DEEPSEEK_API_KEY="$DEEPSEEK_API_KEY" \
  -v codewhale-home:/home/codewhale/.codewhale \
  -v "$PWD:/workspace" \
  -w /workspace \
  ghcr.io/hmbown/codewhale:latest

4.5 验证装好了

bash
codewhale --version

正常输出长这样:

codewhale (npm wrapper) v0.8.41
binary version: v0.8.41
repo: git+https://github.com/Hmbown/CodeWhale.git

⚠️ 一个容易迷惑的点:codewhale --version 显示的是外层调度器的版本,而真正的运行时版本可能不同。跑 codewhale doctor 会看到 codewhale-tui: 0.9.0 这样的行——两个数字不一致是正常的,运行时会自己更新。以 doctor 里的数字为准。

升级:

bash
codewhale update

4.6 平台注意事项

  • macOS / Windows / Linux x64:直接装,没有坑。Linux x64 从 v0.8.65 起是静态编译(musl),任何发行版都能跑。
  • Linux ARM64:v0.8.8 起才有预编译包。如果你在 Ubuntu 22.04 ARM64 上遇到 version 'GLIBC_2.39' not found,改用路线 C 从源码编译。
  • Android / Termux:v0.9.1 仍是预览状态,且 Termux 上没有系统密钥链,API Key 会以明文存在 ~/.codewhale/config.toml(权限 0600)。介意的话用环境变量传 Key。

五、第一次启动:钥匙、模型、体检

同一个设置写了好几处,谁说了算?优先级高↓低① 命令行参数(权威最高)codewhale --provider openrouter --model xxx压过 ↓② 环境变量DEEPSEEK_API_KEY · CODEWHALE_PROVIDERCODEWHALE_MODEL · CODEWHALE_BASE_URL压过 ↓③ 配置档案 profilecodewhale --profile work压过 ↓④ 用户全局配置~/.codewhale/config.toml压过 ↓⑤ 内置默认值(权威最低)DeepSeek + deepseek-v4-pro最常见的怪问题改了 config.toml 不生效?八成是环境变量在压着它codewhale doctor能看出 Key 来自哪一层同名配置,上层永远压下层——排查时从最上层往下查

5.1 先拿一把钥匙(API Key)

CodeWhale 自己不含模型,它需要一把”钥匙”去调别人的模型。默认供应商是 DeepSeek:

  1. 打开 platform.deepseek.com,注册、充值(10 块钱够玩很久)
  2. 在 API Keys 页面创建一个 Key,形如 sk- 开头的一长串
  3. 立刻复制保存,页面关掉就再也看不到了

5.2 把钥匙交给 CodeWhale

bash
codewhale auth set --provider deepseek

它会提示你粘贴 Key,输入时屏幕上不会显示任何字符(这是正常的防偷窥行为),粘贴完直接回车。

也可以用环境变量的方式临时给:

bash
export DEEPSEEK_API_KEY="你的key"
codewhale

管理钥匙的几条命令:

命令作用
codewhale auth list列出所有供应商的配置状态(不会泄露 Key 内容)
codewhale auth status看当前生效的供应商和 Key 来源
codewhale auth get --provider deepseek只回答”配了/没配”,不打印值
codewhale auth clear --provider deepseek删掉某家的 Key

auth list 的输出长这样,一眼看清哪家配好了:

provider     config store env  active
deepseek      yes     n/a      no    config
openrouter    no      no       no    missing
anthropic     no      no       no    missing
ollama        no      no       no    missing

5.3 配置从哪来:优先级链

这是新手最容易困惑的地方。同一个设置可能有四五个地方能写,谁说了算?优先级从高到低:

  1. 命令行参数 —— codewhale --provider openrouter --model xxx
  2. 环境变量 —— DEEPSEEK_API_KEY、CODEWHALE_PROVIDER、CODEWHALE_MODEL、CODEWHALE_BASE_URL
  3. 配置档案(profile) —— codewhale --profile work
  4. 用户全局配置 —— ~/.codewhale/config.toml
  5. 内置默认值 —— DeepSeek + deepseek-v4-pro

🔥 最常见的诡异问题:你明明改了 config.toml,但它就是不生效。90% 的原因是某个环境变量在压着它。codewhale doctor 会明确告诉你”这个 Key 来自 env”,看到就去 unset 掉那个变量。

~/.codewhale/ 目录里都有什么:

~/.codewhale/
├── config.toml        # 供应商、模型、Key、项目信任级别
├── settings.toml      # 界面偏好:语言、主题、动画、默认模式
├── sessions/          # 所有历史会话(JSON)
├── skills/            # 装好的技能包
├── secrets/           # 密钥存储
├── catalog/           # 模型目录缓存
├── tasks/             # 后台任务队列
└── audit.log          # 审计日志

一份典型的 config.toml(这是我本机的,Key 已抹掉):

toml
provider = "deepseek"
api_key = "sk-***"
default_text_model = "deepseek-v4-pro"
reasoning_effort = "auto"

[projects."/Users/你的用户名/某个项目"]
trust_level = "trusted"

settings.toml 管界面,常用的几项:

toml
locale = "zh-Hans"           # 界面中文
theme = "system"
default_mode = "agent"       # 启动时的默认模式
auto_compact = false         # 是否自动压缩上下文
show_thinking = true         # 显示模型的思考过程
show_tool_details = true     # 显示工具调用细节
status_indicator = "whale"   # 那只小鲸鱼

不想手改文件的话,进 TUI 后用 /config 和 /settings 图形化改,等价。

5.4 体检

bash
codewhale doctor

这条命令是你以后所有排错的第一步。它会检查版本、更新、配置文件位置、状态目录、首次设置进度、以及每家供应商的 Key 状态。需要给别人看的时候用 codewhale doctor --json。

5.5 启动

先 cd 到你想让它工作的文件夹,再启动:

bash
cd ~/codewhale-练习
codewhale

第一次启动会走一个引导流程:选语言 → 确认供应商和模型 → 确认运行时权限姿态 → 创建或确认你的 “constitution”(宪法,见第十节)。全部可以先按默认走完,以后用 /setup 随时回来改。


六、认识界面

终端界面的五个区,各管什么Header 会话名 · 当前模型 · 当前模式 · 状态Transcript 主区对话内容 · 工具调用 · 命令输出这里就是审计轨迹,它做过什么全在这Sidebar任务状态子智能体上下文信息Composer 输入框打字的地方,也接受 / 开头的斜杠命令Footer 实时活动 · 排队指令 · 花费 · 上下文占用必记 6 个键Tab 切模式Shift+Tab 切审批姿态Ctrl+T 切推理力度Ctrl+O 看这轮走了哪条路由Esc 取消栈Esc Esc 回退上一条提问底栏显示什么可以自己挑:/statusline

TUI 是 “Terminal User Interface” 的缩写——在终端里画出来的图形界面。CodeWhale 的界面分五块:

  • Header(顶栏):当前会话、正在用的模型、当前模式、总体状态
  • Transcript(主区):对话内容、工具调用、命令输出、模型回复。这是审计轨迹——它读了什么文件、跑了什么命令,全在这里,不藏着
  • Composer(输入框):你打字的地方,也接受斜杠命令
  • Sidebar(侧栏):任务状态、正在跑的子智能体、上下文信息
  • Footer(底栏):实时活动、排队的后续指令、快捷键提示

底栏显示哪些信息可以自己挑,/statusline 打开选择器,可选项包括 mode(模式)、model(模型)、cost(花费)、balance(余额,仅 DeepSeek)、context_percent(上下文占用百分比)、git_branch(分支)、tokens 等。

6.1 必须记住的 6 个快捷键

按键作用
Tab输入框空闲时,循环切换模式:Plan → Act → Operate
Shift + Tab循环切换审批姿态:Ask → Auto-Review → Full Access
Ctrl + T循环切换推理力度(思考多深)
Ctrl + O打开 Turn Inspector,看这一轮到底用了哪个模型、走了哪条路由
Esc取消栈:先关菜单 → 再中断当前请求 → 再清空输入框
Esc Esc回退到上一条你的提问,并把它放回输入框让你改

另外两个好用的:

  • Ctrl + G:把当前没写完的草稿”寄存”起来(/stash list 查看,/stash pop 取回)
  • ! 开头:直接跑 shell 命令,走正常审批流程。比如输入 !ls 就是列目录

💡 Shift+Enter 换行:在输入框里想换行不发送,按 Shift + Enter。如果你的终端不支持,试 Alt + Enter。

6.2 常用斜杠命令

在输入框里打 / 会弹出命令菜单。第一次用只需要认识这几个:

命令用途
/model换模型,同时换供应商。/model auto 让它每轮自己挑
/provider只换供应商
/mode换模式,或直接 /mode plan / /mode act / /mode operate
/config改运行时设置(含审批姿态)
/compact压缩上下文,回收 token 预算
/sessions会话列表,恢复以前的对话
/restore把文件回滚到某一轮之前的状态
/review走一遍结构化的代码复查流程
/skills看装了哪些技能包
/mcp配置外部工具服务器
/goal设一个会话目标(可带 token 预算)
/setup回到初始设置向导
/constitution查看/修改长期约束
/fleet配置或查看 worker 团队

完整命令列表变化很快,以 TUI 里打 / 弹出的实时菜单为准,不要背文档。


七、跑通第一个需求

你敲下回车之后,发生了什么① 拼上下文你的话 + 系统提示 + AGENTS.md+ 历史对话 + 相关文件② 发给模型你选的那家供应商③ 模型回复一段话,或者「我要调用工具」④ 执行工具读文件 / 改文件 / 跑命令风险高的先弹审批⑤ 结果回填工具输出接回上下文循环,直到任务完成或需要你介入⑥ 停下,等你下一句所以:上下文越长,每一轮都在重复付费——该 /compact 就 /compact

7.1 一轮对话到底发生了什么

你敲一句话回车之后,内部是这样跑的:

  1. 拼上下文:你的话 + 系统提示 + 项目规矩(AGENTS.md)+ 历史对话 + 相关文件
  2. 发给模型:整包送到你选的那家供应商
  3. 模型回复:可能是一段话,也可能是”我要调用工具”
  4. 执行工具:读文件 / 改文件 / 跑命令。风险高的会先弹审批
  5. 结果回填:工具输出接回上下文,再发给模型
  6. 循环 3-5,直到模型认为任务完成或需要你介入
  7. 停下,等你下一句

理解这个循环,你才知道”上下文占用 80%“意味着什么、为什么长对话会变笨、/compact 在干嘛。

7.2 动手:做一个个人主页

在练习文件夹里启动 CodeWhale,然后输入:

帮我做一个单页个人主页,只用一个 index.html 文件,样式内联,不引任何外部资源。

内容:
- 我叫「王小明」,是一名产品经理
- 三个板块:关于我、我做过的项目(放 3 个占位卡片)、联系方式
- 配色用米白底 + 深灰字 + 一个橙色强调色
- 手机上要能正常看

做完之后请你自己在浏览器里检查一遍:有没有排版错位、有没有引用不存在的资源。
确认没问题再告诉我完成。

注意这条指令的四个零件,缺一个效果都会打折:

  1. 要什么结果:单页个人主页,一个文件
  2. 在哪个范围:只改 index.html
  3. 什么不要:不引外部资源
  4. 怎么算完成:自己先检查排版和引用

它会开始动,可能弹出”我要创建 index.html,可以吗?“——按提示确认。

完成后:

bash
open index.html      # macOS
start index.html     # Windows

7.3 关键:迭代,而不是重来

第一版一般不完美。不要重新描述一遍整个需求,那样它会推倒重做,你之前调好的部分全丢了。正确的做法是提增量修改:

橙色太艳了,换成砖红色。其他都别动。
项目卡片在手机上挤成一坨了,改成竖排。只改这一处的样式。

“只改这一处""其他别动”这类话很重要——它是在给 AI 划改动边界。不划边界,AI 很容易”顺手”重构一堆你没让它碰的东西。

7.4 让它自己验收

这是拉开差距最大的一个习惯。人类验收之前,先让 AI 自己查一遍:

提交前先自查:
1. 所有引用的文件路径都真实存在吗?
2. 有没有写了但没用上的代码?
3. 在 375px 宽度下排版会不会坏?
逐条回答,有问题就直接修掉。

这叫 Loop 工程——让它自己跑一个”做 → 检 → 修”的小循环,而不是每次都等你来当质检员。


八、模式:Plan / Act / Operate

三种模式:Plan / Act / Operate按 Tab 循环切换Plan 计划模式只能看,不能改不能跑 shell 命令会给一份结构化计划书目标 · 关键文件 · 风险 · 验证方案Act 执行模式(默认)能读能写能跑命令文件写入默认不弹窗shell 命令默认弹窗日常干活用这个Operate 统筹模式权限和 Act 完全一样区别只在“更爱派活”把独立任务丢给后台 worker输入框保持可用进入不熟的项目想先要一份方案正常改代码、改文案绝大多数时候一个任务能拆成几摊互不干扰的活常见误解:Operate 不是“权限更大”,它不放宽任何审批和沙箱

CodeWhale 有三个可见模式,按 Tab 循环切换,或者 /mode plan 直接跳。

8.1 Plan(计划模式)

只读。 它能看文件、能搜索、能诊断,但不能改文件、不能跑 shell 命令。

用在:进入一个不熟的项目、想让它先出方案、需要一份可以review 的计划。

Plan 模式在确认时会给出一份结构化的计划书:目标、上下文、用到的资料、关键文件、约束、方案、验证计划、风险、交接说明。哪一项是空的你一眼就能看见,可以直接要求它补,而不是稀里糊涂地放它去动手。

8.2 Act(执行模式,也叫 Agent)

默认模式,日常工作用这个。 能读能写能跑命令,风险操作走审批门。文件写入默认不弹窗,shell 命令默认弹窗。

想彻底关掉 shell 能力,在配置里写 allow_shell = false,工具列表里就不会出现 shell 了。

8.3 Operate(统筹模式)

权限和 Act 完全一样,区别只在调度倾向:它会更主动地把独立的、可并行的、耗时长的活派给后台 worker 去做(就是第十四节的 Fleet),而你的输入框保持可用,可以继续发新指令。

⚠️ 一个常见误解:Operate 不是”权限更大的模式”。它不放宽任何审批、沙箱、仓库保护。它只是更爱派活。

8.4 选哪个

  • 不熟的项目 → Plan
  • 正常干活 → Act
  • 一个任务能拆成好几摊互不干扰的活 → Operate

九、权限与沙箱:这一节最重要

审批姿态:一条风险轴上的四档never 最保守只放行只读工具其他一律拦suggest = Ask(默认)工具调用会弹审批涉及权限/成本/范围的选择会问你auto = Auto-Review全自动,从不问你自己挑一个可逆的安全解释或报告“没法安全继续”bypass = Full Access普通工具不再弹窗同时打开信任模式硬性安全红线仍然直接拒绝越安全 / 越啰嗦越省事 / 越危险按 Shift+Tab 循环切换,或 /config 里改 approval_mode新手前两周固定在 Ask。动手前先 git init + git commit——这是你唯一的后悔药。

9.1 四档审批姿态

按 Shift + Tab 循环,或者 /config 里改 approval_mode:

档位配置值行为
Ask(默认)suggest工具调用会弹审批;遇到影响权限/成本/范围的选择会问你
Auto-Reviewauto全自动。从不问你问题,模型自己从上下文推断、选一个可逆的安全解释,或者报告”我没法安全地继续”
Full Accessbypass普通工具调用不再弹窗。但硬性安全red line、仓库法规、管理策略仍然直接拒绝,不会用弹窗来跟你商量
(最保守)never只放行安全的只读工具,其他一律拦

新手前两周固定在 Ask。你需要用这段时间建立直觉:它想干什么、什么该批什么不该批。

Full Access 会同时打开信任模式(允许访问工作目录以外的文件)和自动审批。只在你完全信任的仓库里用。

9.2 操作系统级沙箱

沙箱:就算你批了,系统层面也拦得住吗macOSSeatbeltLinuxLandlock + seccomp / bwrapWindowsJob Object(v1)能拦文件写入能能部分能拦网络能不能不能只有 macOS 能在沙箱层面阻止联网。Linux 和 Windows 上,被你批准的命令可以自由访问网络。沙箱明确挡不住的:内核漏洞 · 时序侧信道 · CPU 与磁盘资源耗尽供应链攻击(能限制下载下来的代码干什么,但拦不住“下载”本身)审批是“问你”,沙箱是“就算你批了也拦住”——两道锁,别只依赖一道

审批是”问你”,沙箱是”就算你批了,系统层面也拦住”。这是最后一道防线,各平台能力不一样,必须知道差别:

平台机制能拦文件写入能拦网络
macOSSeatbelt✅✅
LinuxLandlock + seccomp / bwrap✅❌
WindowsJob Object(v1)部分❌

只有 macOS 能在沙箱层面阻止网络访问。 Linux 和 Windows 上,被批准的命令可以自由联网。这一点在你让 AI 跑一段来路不明的脚本时非常关键。

沙箱明确挡不住的东西:内核漏洞、时序侧信道、CPU/磁盘资源耗尽、供应链攻击(它能限制下载下来的代码能干什么,但拦不住”下载”这个动作本身)。

9.3 三条硬规矩

  1. 动手之前先 git init + git commit。 这是你唯一的后悔药。CodeWhale 有 /restore 能从快照回滚文件,但 git 更可靠、更通用。
  2. 不要在家目录 ~ 直接启动它。 永远 cd 到具体项目文件夹再开。工作目录就是它的活动边界,边界越小越安全。
  3. 看不懂的命令不要批。 尤其是含 rm -rf、sudo、curl xxx | sh、git push --force 的。不确定就问它”这条命令会造成什么后果、可逆吗”。

9.4 工作目录边界与信任

默认情况下,文件工具只能碰启动时所在的那个目录。想让它访问外面:

text
/trust

或者在 config.toml 里给某个项目标记 trust_level = "trusted"。Full Access 会自动打开信任模式。

明确告诉它边界,比依赖设置更保险:

只检查和修改这个仓库里的文件。不要碰上级目录,不要动全局配置。

十、让它记住你的规矩

让它记住你的规矩:四层,谁压谁本轮指令 权威最高你这次说的话。可以覆盖下面所有层。压过 ↓constitution 仓库宪法文件:项目里的 .codewhale/constitution.json回答两件事:信息冲突时先信谁 / 完成前必须验证什么protected_invariants 会编译成写入拦截,Full Access 也跳不过压过 ↓AGENTS.md 项目说明文件:项目根目录 AGENTS.md(行业通用格式,Codex 也认)codewhale init 生成骨架写“不要做什么”比写“要做什么”更有效压过 ↓memory 记忆 权威最低跨会话回忆起来的状态。有用,但可能过时。/memory 管理。权威高↓低其他工具的项目规则是“建议”,CodeWhale 的宪法是“硬约束”

每次开新对话都要重复”用中文回复""不要加注释""改完跑一遍测试”,很烦。把这些写进文件,它每次自动读。

CodeWhale 有四层,权威从高到低:

10.1 第一层:本轮指令

你这次说的话权威最高。它可以覆盖下面所有层。

10.2 第二层:constitution(宪法)

文件位置:仓库里的 .codewhale/constitution.json(和 .github/ 同级)。

它回答两个问题:当各方信息冲突时,先信谁? 和 宣布任务完成之前必须验证什么?

json
{
  "schema_version": 1,
  "authority": [
    "current user request",
    "live code and tests",
    "GitHub issue/PR details",
    "AGENTS.md",
    "memory",
    "old handoffs"
  ],
  "protected_invariants": [
    "不要破坏历史会话的回放能力"
  ]
}

protected_invariants(受保护的不变量)会被编译成写入拦截——连 Full Access 都跳不过去。这是 CodeWhale 比 Claude Code / Codex 强硬的地方:其他工具的项目规则是”建议”,这里的宪法是”硬约束”。

用 /constitution 在 TUI 里查看和修改。

10.3 第三层:AGENTS.md(项目说明)

这是行业通用格式(agents.md),Codex 也认。放在项目根目录。

生成一份骨架:

bash
codewhale init

该往里写什么:

markdown
# 项目说明

## 这是什么
一个个人博客网站,用 Astro 框架,部署在 Vercel。

## 硬性要求
- 所有回复用中文
- 不要引入新的依赖包,除非我明确同意
- 改完 CSS 之后跑一遍 `npm run build` 确认没报错
- 不要碰 `content/` 目录里的文章内容

## 我的偏好
- 代码里不要写注释,除非逻辑真的绕
- 提交信息用中文,一句话说清改了什么

写作要点:写”不要做什么”比写”要做什么”更有效,因为 AI 的默认行为已经覆盖了大部分”要做什么”。

10.4 第四层:memory(记忆)

跨会话回忆起来的状态。有用,但权威最低——因为它可能过时。/memory 查看和管理。


十一、会话管理:别把一个对话用到死

长对话会变笨,这是所有 AI 编程工具的通病。原因是上下文窗口被塞满了无关的历史。

11.1 上下文压缩

CodeWhale 默认开启自动压缩:上下文用到 80% 时自动总结前面的内容,把摘要带进下一轮。想手动控制:

text
/compact

不想让它自动压缩,在 settings.toml 里写 auto_compact = false。

11.2 会话的四种操作

想干什么怎么做
看历史会话codewhale sessions 或 TUI 里 /sessions
接着上次继续codewhale -c / codewhale --continue
恢复指定会话codewhale resume <会话ID前几位>
岔开一条新路又不想毁掉原对话codewhale fork <ID> 或 codewhale fork --last

codewhale sessions 的输出:

Saved Sessions
==============
  * 40d2191d | uptate | 4 msgs | 2026-06-25 05:38 UTC (3w ago)
    d3a76e1d | https://github.com/... | 10 msgs | 2026-06-18 07:37 UTC (4w ago)

/sessions 默认只显示当前工作目录的会话,按 a 显示所有目录的。

11.3 三种”后悔”方式,别搞混

你想撤销什么用什么影响
想换个问法重来Esc Esc 回退只改对话,不动文件
想探索另一条路,保留原路codewhale fork复制出新会话,两条都在
文件被改坏了/restore从快照恢复文件,不改对话历史

/restore list 10 会列出最近 10 个可回滚的快照点。

11.4 什么时候该开新对话

  • 换了一个完全不相关的任务
  • 上下文占用超过 70% 且当前任务快结束了
  • 它开始反复犯同一个错、听不懂人话了

开新对话时给一句交接:「上一轮我们做完了 X,现在要做 Y,注意 Z。」


十二、Skills 与 MCP:给它装技能和外挂

Skills 和 MCP,到底差在哪Skill 教它“怎么做事”本质:一段写好的工作流说明书纯文字,一个 SKILL.md 文件装在 ~/.codewhale/skills/兼容 Claude Code 的 skill 格式TUI 里:/skills 看列表 /skill 激活官方自带示例delegate · pdf · spreadsheets · presentationsmcp-builder · skill-creator · fleet-managerMCP 给它“新的手”本质:一个外部程序提供它原本没有的能力配置在 ~/.codewhale/mcp.json两种接法:本地 stdio / 远程 HTTPTUI 里:/mcp 查看和体检工具名形如 mcp_服务器名_工具名反向也成立CodeWhale 自己能当 MCP 服务器codewhale mcp-server两者都走同一套审批流程:只读的可能自动放行,有副作用的必须你批准

这两个东西经常被搞混,一句话区分:

  • Skill 教它”怎么做事” —— 是一段写好的工作流说明书,纯文字
  • **MCP 给它”新的手” ** —— 是一个外部程序,提供它原本没有的能力(查数据库、发飞书消息、控制浏览器)

12.1 Skills(技能包)

一个 skill 就是一个文件夹,里面一个 SKILL.md,写明:遇到什么情况用、按什么步骤做、要收集什么证据、不要做什么。

装在 ~/.codewhale/skills/ 下。我本机装的这些是官方/社区包:

delegate          fleet-manager     mcp-builder       skill-creator
documents         pdf               plugin-creator    skill-installer
feishu            presentations     spreadsheets      v4-best-practices

TUI 里的操作:

  • /skills 列出装了哪些
  • /skill 激活某个技能

好的 skill 是窄的:只讲一个重复性流程。别写成万能手册,那等于没写。

CodeWhale 兼容 Claude Code 的 skill / plugin 格式(见官方 CLAUDE_PLUGIN_COMPAT.md),所以社区里现成的 Claude skills 大多能直接用。

12.2 MCP(外部工具服务器)

MCP 全称 Model Context Protocol,是一套”给 AI 接外设”的开放协议。两种接法:

  • stdio:本地启一个程序,通过标准输入输出通信
  • HTTP:连一个远程服务器(支持 OAuth 登录)

配置文件在 ~/.codewhale/mcp.json,也可以放项目级的。初始化:

bash
codewhale setup --mcp
# 或
codewhale mcp init

TUI 里 /mcp 查看状态和健康检查。MCP 工具在模型眼里叫 mcp_<服务器名>_<工具名>,走和内置工具完全一样的审批流程——只读的可能自动放行,有副作用的必须你批准。

12.3 反向用法:把 CodeWhale 当成别人的 MCP

CodeWhale 自己也能当服务器,被别的 AI 工具调用:

bash
codewhale mcp-server          # 以 MCP stdio 模式运行
codewhale serve               # 本地运行时服务

三种服务模式的区别:

模式协议用途
serve --mcpMCP stdio给 MCP 客户端当工具服务器
serve --httpHTTP/SSE JSON-RPC给应用程序当运行时 API
serve --acpACP stdio给 Zed 等编辑器当智能体

十三、exec:把它塞进脚本和 CI

TUI 是给人用的,exec 是给脚本用的——不开界面,跑完就退出。

bash
# 一次性问答,不动文件
codewhale exec "解释一下这个函数在干什么"

# 带工具、自动批准,真的动手
codewhale exec --auto "修好那个失败的测试"

# 输出结构化 JSON,方便程序解析
codewhale exec --auto --output-format stream-json "修好那个失败的测试"

# 接着上次的会话继续
codewhale exec --continue "再把文档也更新一下"
codewhale exec --resume 40d2191d "继续"

注意 --auto 的分量:不加它,exec 只是一次纯模型问答,不碰文件;加了它,就是无人值守地动手。在 CI 里用之前先在本地确认过它的行为。

其他好用的非交互命令:

bash
codewhale review              # 对当前 git diff 做一次代码复查
codewhale apply patch.diff    # 把补丁打到工作区
codewhale metrics             # 从审计日志出一份用量汇总
codewhale models              # 拉取供应商的实时模型列表
codewhale model list          # 列出内置模型注册表
codewhale model set pro       # 设默认模型

十四、Fleet:一群智能体同时干活

Fleet:一群智能体同时干活,还丢不了指挥官(你的主会话)用贵模型,如 deepseek-v4-pro监控命令fleet statusfleet inspect <worker-id>fleet logs / artifactsfleet interrupt / restart / stop --allworker 1角色 explore只读摸结构worker 2角色 review找 bugworker 3角色 implementer执行一个改动worker 4角色 verifier跑检查给证据每个 worker 本质上就是一个后台跑的 codewhale exec可以单独钉便宜模型,如 deepseek-v4-flash账本:.codewhale/fleet.jsonl(只追加)每一步都写进去 → 笔记本合盖、程序崩溃、终端关掉codewhale fleet resume 从断点接着跑铁律:绝对不要让两个 worker 同时改同一批文件

到这里开始是重型功能。第一次读可以跳过,等你遇到”这个活一个 AI 干太慢了”的时候再回来。

14.1 Fleet 是什么

Fleet 是一个持久化的多 worker 控制台。它不是另一个执行引擎——每个 worker 本质上就是一个后台跑的 codewhale exec,只是 Fleet 帮你把它们记账、监控、恢复。

关键词是持久:每一步写进只追加的账本 .codewhale/fleet.jsonl。笔记本合盖、程序崩溃、你手滑关了终端,fleet resume 都能从断点接着跑。这是它和”临时开几个子智能体”的本质区别。

14.2 最省事的用法:直接说人话

绝大多数情况下,你不需要写任何配置文件。切到 Operate 模式,直接说:

开两个只读的探查员,一个看 config 模块,一个看 TUI 的供应商选择器。
两边都要给我文件位置和风险点,然后我们再定方案。

它会自己派 worker,界面上出现 worker 卡片,你能看到每个在干嘛。

内置角色:

角色擅长
general多步骤任务,不指定时的默认值
explore只读地摸清代码结构
plan设计与迁移方案
review针对某次改动找 bug
implementer执行一个定义清楚的改动
verifier跑检查、给出通过/失败的证据

别滥用:小改动不要派 worker,也绝对不要让两个 worker 同时改同一批文件。

14.3 手动路径:写任务规格

需要可复查、可提交进仓库的规格时,走手动路径。

第一步,初始化账本:

bash
codewhale fleet init

第二步,写一份 tasks.json(JSON 或 TOML 都行):

json
{
  "name": "docs readiness check",
  "security_policy": {
    "default_trust_level": "sandbox",
    "max_trust_level": "sandbox",
    "allowed_secrets": [],
    "capability_grants": [],
    "require_identity_verification": true
  },
  "tasks": [
    {
      "id": "map-docs",
      "name": "Map current docs",
      "objective": "找出描述 Fleet 和 Workflow 的文档。",
      "instructions": "读 docs/FLEET.md 和 docs/WORKFLOW_AUTHORING.md,报告命令面、当前限制、以及任何讲不清的地方。",
      "worker": {
        "role": "reviewer",
        "profile": "reviewer",
        "tools": ["rg", "sed", "git"],
        "model": "deepseek-v4-flash"
      },
      "workspace": {
        "required_files": ["docs/FLEET.md", "docs/WORKFLOW_AUTHORING.md"],
        "writable_paths": []
      },
      "expected_artifacts": ["log", "report"],
      "scorer": { "kind": "manual" },
      "retry_policy": { "max_attempts": 1 }
    }
  ]
}

几个字段的意思:

字段作用
objective / instructionsworker 的目标和具体操作说明
worker.role角色,如 reviewer、builder、read-only
worker.profile引用一份保存好的 worker 档案
worker.model给这个 worker 单独指定模型
workspace.writable_paths它能写哪些路径,空数组=只读
expected_artifacts期望产出:log、report、patch、test_result、checkpoint、receipt
scorer验收规则,manual 是人工验

security_policy 里 default_trust_level: "sandbox" 是保守默认;allowed_secrets: [] 表示不给任何密钥。这些字段的存在本身就是提醒你:派出去的 worker 也是有权限边界的。

第三步,跑起来并监控:

bash
codewhale fleet run tasks.json --max-workers 4

# 另开一个终端
codewhale fleet status              # 各状态的计数
codewhale fleet inspect <worker-id> # 单个 worker 的详情
codewhale fleet logs <worker-id>    # 日志
codewhale fleet artifacts <worker-id>

出问题时的干预手段:

bash
codewhale fleet interrupt <worker-id>   # 打断
codewhale fleet restart <worker-id>     # 重来
codewhale fleet resume <run-id>         # 从账本恢复整个运行
codewhale fleet stop --all              # 全停

14.4 可复用的 worker 档案

TUI 里跑:

text
/fleet setup

选角色、决定这个档案是继承当前模型还是钉死一个供应商/模型、检查权限和工具、保存。

  • 项目级档案存 .codewhale/agents/<角色>.toml
  • 个人级档案(跨仓库可用)在预览前按 s 保存到 $CODEWHALE_HOME/agents/<角色>.toml
  • 同名时项目级优先

模型继承是字面意义的:你在 /model 里选的模型就是”指挥官”,任何没有钉死模型的 worker 都跑在这个模型上。常见的省钱布局是——指挥官用贵模型(deepseek-v4-pro),干活的 worker 用便宜模型(deepseek-v4-flash)。


十五、Workflow 与 Lane:把编排写进仓库

Workflow / Fleet / Lane,用看戏来理解Workflow = 剧本写明有几个阶段哪些并行、结果怎么汇总提交进 git,可复查、可重跑文件:workflows/xxx.workflow.js决定谁来演Fleet = 演员和后勤真正干活的 worker它们的模型、权限、日志账本:.codewhale/fleet.jsonl跑起来就是一个 LaneLane = 这一场演出Workflow 跑起来的一个实例有 ID,能查状态、看日志能中途接管现场命令对照codewhale workflow run <id> --fleet <档案> --runtime tmux --goal 目标codewhale lane list / status / attach / logs / stop什么时候真的需要写 Workflow?只有这四种:有序的阶段 · 闸门 · 共享预算 · 确定性的汇总普通的多智能体活儿,直接说人话让 Operate 派 Fleet worker 就行它不是通用 JavaScript 运行时import / 文件读写 / 网络请求 / eval / async / await 全部被拒绝——这是安全设计

15.1 三个词的关系

这是最容易绕晕的一组概念,一句话各自定位:

  • Workflow = 剧本。写明有几个阶段、哪些并行、结果怎么汇总。可以提交进 git,可以复查,可以重跑。
  • Fleet = 演员和后勤。真正干活的 worker、它们的模型、权限、日志、账本。
  • Lane = 这一场演出。Workflow 跑起来的一个具体实例,有 ID,能查状态、看日志、中途接管。

一句话串起来:Workflow 描述怎么演,Fleet 提供谁来演,Lane 是正在演的这一场。

15.2 写一个 Workflow

放在仓库里,比如 workflows/docs_readiness.workflow.js:

js
export default workflow({
  "id": "docs-readiness",
  "goal": "检查 Fleet 和 Workflow 文档,然后综合出一份就绪报告",
  "nodes": [
    {
      "branch": {
        "id": "parallel-docs-audit",
        "parallel": true,
        "children": [
          {
            "agent": {
              "id": "fleet-docs",
              "prompt": "检查 docs/FLEET.md 的命令与任务规格覆盖度。",
              "agent_type": "review",
              "mode": "read_only",
              "profile": "reviewer",
              "file_scope": ["docs/FLEET.md"]
            }
          },
          {
            "agent": {
              "id": "workflow-docs",
              "prompt": "检查 docs/WORKFLOW_AUTHORING.md 的编写指引覆盖度。",
              "agent_type": "review",
              "mode": "read_only",
              "profile": "reviewer",
              "file_scope": ["docs/WORKFLOW_AUTHORING.md"]
            }
          }
        ]
      }
    },
    {
      "reduce": {
        "id": "readiness-summary",
        "inputs": ["fleet-docs", "workflow-docs"],
        "prompt": "总结确切的文档缺口,以及最安全的下一步修改。"
      }
    }
  ]
});

可用的节点类型:agent(一个智能体)、branch(分支/并行)、sequence(顺序)、reduce(汇总)、teacher_review(复审)、loop_until(循环到满足条件)、cond(条件)、expand(展开)。

⚠️ 它不是一个通用 JavaScript 运行时。 import、进程访问、读写文件、网络请求、eval、async/await 全部被拒绝。它只是一种声明式的写法,最终会被编译成 Rust 里的类型化结构。这个限制是安全设计,不是缺陷。

15.3 跑起来

bash
codewhale workflow run docs-readiness --fleet reviewer --runtime tmux --goal 检查文档就绪度
codewhale workflow run docs-readiness --fleet reviewer --runtime inline --verify

--runtime 有四种后端:tmux(可断开重连,长任务首选)、inline(就在当前进程里跑)、vm、ci。

15.4 管理 Lane

bash
codewhale lane list              # 列出所有 lane,最新的在前
codewhale lane status <lane-id>  # 状态和接管信息
codewhale lane attach <lane-id>  # 接管一个 tmux lane,去现场看
codewhale lane logs <lane-id>    # 跟踪日志
codewhale lane stop <lane-id>    # 停掉并清理工作树

Lane 记录存在 $CODEWHALE_HOME/lanes/。

15.5 什么时候真的需要 Workflow

大多数时候不需要。 官方明确说了:普通的多智能体活儿,直接说人话让 Operate 派 Fleet worker 就行,不用写文件。

只有当你需要这几样时,Workflow 才有价值:

  • 有序的阶段(必须 A 做完才能做 B)
  • 闸门(某个条件不满足就不许往下走)
  • 共享预算(整个流程总共不许超过多少 token)
  • 确定性的汇总(结果必须按固定方式合并)

15.6 一个好用的过渡提示词

不知道怎么写规格时,让它先给你起草、但别跑:

帮我为这个目标起草一份 Fleet 任务规格,但先不要执行。
把你打算派的任务、worker 档案、可写路径、期望产出、验收规则和安全策略都列出来给我看。
除非我明确授权,否则不要开启任何密钥。

这一步复查是故意设计的:它逼你在持久 worker 真正启动之前,把模型路由、可写路径、网络访问、密钥使用全部摆到台面上。


十六、省钱:模型路由策略

CodeWhale 最大的实用价值就在这一节。

16.1 三层路由思路

场景建议模型理由
日常改文案、整理文件、简单脚本deepseek-v4-flash 或同级便宜模型够用,快,便宜
需要想清楚的架构、debug、复杂重构deepseek-v4-pro / GLM / Kimi推理质量差别在这里才体现
真正卡住的硬骨头Claude / GPT 顶配单次贵,但省下的时间更值钱

任务中途可以随时 /model 切换——这是 CodeWhale 独有的。前面用便宜模型探索,卡住了切贵的,解决了再切回来。

16.2 /model auto

让它每轮自己挑模型和思考深度。

它的工作方式值得知道:会把你最新的请求(截断到 4000 字符)加上最近最多 6 条上下文摘要(每条 900 字符),发给 deepseek-v4-flash 做一次分类。你的凭证、端点、供应商错误信息不会被发送。 如果没有这个路由模型,它会退回到本地启发式规则,不发任何分类请求。

需要严格控制成本或做可重复对比时,用固定模型,不要用 auto。

Ctrl + O 打开 Turn Inspector,能看到这一轮的具体路由:用了哪个供应商/模型、选了哪个档位、为什么这么选。

16.3 推理力度

Ctrl + T 循环切换,或者在配置里写 reasoning_effort。可选 auto 以及不同的档位。

简单任务把力度调低,省钱且更快。这个旋钮的收益经常被低估。

16.4 其他省钱习惯

  1. 让它先给方案再动手 —— Plan 模式一次规划,比反复推翻重做便宜得多
  2. 管住上下文 —— 长对话每一轮都在重复付费。及时 /compact 或开新会话
  3. 给 Fleet worker 钉便宜模型 —— 指挥官用 pro,干活的用 flash
  4. 用 /goal 设预算 —— 给会话设一个 token 上限,超了它会停

十七、出问题时怎么排查

出问题时,按这个顺序查① 先跑 codewhale doctor版本 · 配置路径 · Key 状态 · 状态目录八成问题这一步就定位了② 判断是哪一层的问题模型笨?→ 换模型信息不够?→ 补上下文被权限拦了?→ 看审批姿态环境坏了?→ 回到 doctor③ 看 Transcript 主区它读了什么、跑了什么、报了什么错把报错原文喂回去,不要重新描述一遍需求④ 还不行就开新会话带一句交接:上轮做完了 X,现在要做 Y,注意 Z高频问题速判改了 config.toml 不生效 → 环境变量在压着Unsupported architecture → 改用 cargo 装GLIBC_2.39 not found → 同上,源码编译npm 卡住 → 换 npmmirror 源开始胡说 → /compact 或开新会话不肯跑命令 → 在 Plan 模式,Tab 切到 Act改了不该改的 → git 回滚或 /restore界面全英文 → settings.toml 设 locale报 issue 时带上 codewhale doctor --json,但绝不要粘贴 API Key

17.1 固定的四步

  1. codewhale doctor —— 先看版本、配置路径、Key 状态。八成问题这一步就定位了
  2. 看是哪一层的问题 —— 是模型笨(换模型)、还是没给够信息(补上下文)、还是权限被拦(看审批姿态)、还是环境坏了(看 doctor)
  3. 看 Transcript —— 它到底读了什么、跑了什么、报了什么错。不要重新描述需求,把报错原文喂回去
  4. 实在不行开新会话 —— 带一句交接说明

17.2 高频问题对照

症状大概率原因怎么办
改了 config.toml 不生效环境变量在压着codewhale doctor 看 Key 来源,unset 掉那个变量
Unsupported architecture你的平台没有预编译包改用 cargo install 从源码装
version 'GLIBC_2.39' not foundLinux ARM64 上系统 glibc 太老同上,源码编译
npm 安装卡住国内网络npm config set registry https://registry.npmmirror.com
它开始胡说、反复犯错上下文太长太脏/compact 或开新会话
它不肯跑 shell 命令在 Plan 模式,或 allow_shell = falseTab 切到 Act;检查配置
它改了不该改的文件工作目录选太大 / 没划边界git 回滚或 /restore;下次 cd 到更小的目录,指令里写清”只改 X”
看到 ~/.deepseek 相关警告从旧版 deepseek-tui 迁移遗留正常启动一次触发自动迁移,再跑 doctor
界面全是英文没设语言settings.toml 里 locale = "zh-Hans"

17.3 提 issue 时该带什么

CodeWhale 是社区项目,维护者很积极。报 bug 时附上:版本、安装方式、操作系统和终端、供应商和模型、确切的命令或提示词、codewhale doctor --json 的输出、以及”在全新的空目录里会不会复现”。

不要粘贴 API Key、私有代码或任何密钥。


十八、速查表

18.1 命令行

你想干什么命令
启动 TUIcodewhale(或短别名 codew)
接着上次继续codewhale -c
恢复指定会话codewhale resume <ID>
复制一份会话codewhale fork <ID> / --last
一次性问答codewhale exec "问题"
无人值守干活codewhale exec --auto "任务"
结构化输出codewhale exec --auto --output-format stream-json "任务"
存 API Keycodewhale auth set --provider deepseek
看 Key 状态codewhale auth list / auth status
体检codewhale doctor / doctor --json
升级codewhale update
生成 AGENTS.mdcodewhale init
初始化 MCP / skillscodewhale setup
列会话codewhale sessions
列模型codewhale model list / codewhale models
设默认模型codewhale model set deepseek-v4-pro
读写配置codewhale config get/set/list/path
代码复查codewhale review
打补丁codewhale apply patch.diff
用量汇总codewhale metrics
当 MCP 服务器codewhale mcp-server
Fleetfleet init / run tasks.json --max-workers 4 / status / inspect / logs / resume / stop --all
Workflowworkflow run <id> --fleet <档案> --runtime tmux
Lanelane list / status / attach / logs / stop

18.2 TUI 里

你想干什么怎么做
切模式Tab 或 /mode plan|act|operate
切审批姿态Shift + Tab
切推理力度Ctrl + T
换模型/供应商/model、/provider、/model auto
看这轮走了什么路由Ctrl + O
压缩上下文/compact
回退提问Esc Esc
回滚文件/restore、/restore list 10
跑 shell 命令输入 !命令
寄存草稿Ctrl + G,/stash pop 取回
输入框换行Shift + Enter
允许访问工作目录外/trust
设会话目标和预算/goal
技能/skills、/skill
外部工具/mcp
Worker 团队/fleet、/fleet setup、/fleet status
长期约束/constitution
回到设置向导/setup
底栏显示什么/statusline

18.3 关键文件位置

文件位置作用
用户配置~/.codewhale/config.toml供应商、模型、Key
界面偏好~/.codewhale/settings.toml语言、主题、默认模式
会话~/.codewhale/sessions/历史对话
技能~/.codewhale/skills/装好的技能包
MCP 配置~/.codewhale/mcp.json外部工具服务器
项目说明项目根目录 AGENTS.md项目规矩
项目宪法项目里 .codewhale/constitution.json硬约束
Worker 档案项目里 .codewhale/agents/<角色>.toml可复用的 worker
Fleet 账本项目里 .codewhale/fleet.jsonl运行记录
Workflow 源码项目里 workflows/*.workflow.js编排剧本

十九、最后

装好 CodeWhale 大概 15 分钟。但这只是入场券。

用下来最真实的体会是:工具的上限很高,大部分人卡住的地方是”不会提需求”。

同样一句”帮我做个网站”,有人得到一坨垃圾,有人得到能直接上线的东西,差别在于后者说清楚了:给谁看、什么风格、参考哪个站、必须有什么、绝对不要什么、做完怎么算合格。

这套能力和写代码无关,和你能不能把脑子里模糊的想法说成一份清晰的需求有关。这恰恰是不懂代码的人也能练、甚至更容易练好的东西。

CodeWhale 额外给你的,是不用为这份能力支付垄断价格。同一份需求,你可以先用便宜模型试,不行再换贵的;可以今天用 DeepSeek,明天用 GLM,后天用自己电脑上的本地模型——而你的工作方式、配置文件、项目规矩,一行都不用改。

所以最后的建议还是那句:别停在教程里,今晚就找一个你真正想做的小东西,从头做到能打开为止。


延伸阅读


信息核实说明(2026 年 7 月 22 日)

  • 项目地址:https://github.com/Hmbown/CodeWhale
  • 官网:https://codewhale.net/
  • 官方文档:仓库 docs/ 目录,重点看 GUIDE.md、INSTALL.md、PROVIDERS.md、MODES.md、FLEET.md、FLEET_WORKFLOW_TUTORIAL.md
  • 本文的命令输出均来自本机实测(codewhale v0.8.41 / 运行时 v0.9.0,macOS)

CodeWhale 迭代很快,命令、模型名、界面细节可能变化。遇到对不上的地方,以 codewhale --help、codewhale doctor 的实际输出和官方 docs/ 为准。

笔记属性
readtime
35
wordcount
9114