从「装上、跑通、不翻车」到「把整套工作流稳定下来」——9 章 · 8 个交互演示,每一章都可以点、可以输入、可以拖动。不是博客,是一本"用"的手册。
三步把它跑起来。每步可以在 60 秒内完成,全部不需要你装任何东西——可以现在就在浏览器里试。
Claude Code(终端 agent,长会话,强项目记忆)vs Codex(嵌在 ChatGPT,零配置,一次性查询)。两题给你推荐。
不联网、不计费、不安装。输入 /help、/init、或大白话描述任务,看 CLI 长什么样。
CLAUDE.md / AGENTS.md 是 AI 第一天上班看的备忘录。点开下划线字段看每一行为什么有用。
─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
Claude Code 不是单一 CLI。它是 6 个 surface(终端、VS Code、JetBrains、桌面应用、网页、iOS)的统一引擎。所有 surface 共享同一份 CLAUDE.md / settings / MCP 配置——你只需要选一个开始。
Codex 走的是另一条路:它嵌入 ChatGPT 订阅(Plus / Pro / Business / Edu / Enterprise),浏览器登录就是它,30 秒到第一句对话。两条路线互不冲突,可以并用。
下面 6 张卡片——点击你想用的环境,看对应安装命令。 (选择会记住,下次进站默认这一个)
选了 surface 之后,跟着这 4 步:
claude(Web 版自动登录),浏览器登录你的 Claude / ChatGPT 账号这个项目是干什么的?如果你看到 command not found: claude:那是 PATH 问题。运行 echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc && source ~/.zshrc,再敲一次 — 应该就好。其它常见错误见 ch.09 踩坑。
如果浏览器没自动打开:看终端打印的 URL,手动复制到浏览器。SSH / 远程会话里常见,把 URL 在本地浏览器打开即可。
回答这 2 个问题(随便想想,不需要正确答案):
反思: 想明白了再翻下一章。**理解 mental model 比记命令更重要**——这是 ch.04 上下文管理之前最值得的 30 秒。
CC 有 3 种安装方式,选哪种取决于"自动更新 vs 版本控制":
curl -fsSL https://claude.ai/install.sh | bash — 自动后台更新,无须管brew install --cask claude-code — 不自动更新,要手动 brew upgrade claude-codewinget install Anthropic.ClaudeCode — 同上不自动更新登录:首次跑 claude 自动弹浏览器登录;切账号用 /login。可登录三种账号:
项目初始化:进入仓库根 → 跑 /init。CC 扫描代码库识别 stack / 测试框架 / 入口文件,生成 38 行左右的 starter CLAUDE.md。看一眼,精简到 200 行内,提交 git。
Codex CLI 用 npm 安装(单一方式,Rust 二进制 + npm 包装):
npm i -g @openai/codex codex # 升级: npm i -g @openai/codex@latest
登录:首跑要么用 ChatGPT 账号(Plus / Pro / Business / Edu / Enterprise 都包含 Codex),要么用 API key:
codex login # 浏览器登录 ChatGPT codex login --with-api-key # 从 stdin 读 OpenAI API key
项目初始化:进入仓库 → 跑 /init。Codex 生成 AGENTS.md(结构与 CLAUDE.md 几乎完全一致,只是文件名不同——双轨在这里几乎是相同的概念,Anthropic 团队已经认可 AGENTS.md 兼容)。
多套环境用 ~/.codex/config.toml 的 profile 切换:同一台机器为不同项目配不同 model / sandbox 模式 / MCP server。
团队 / 企业落地 4 个层次,从轻到重:
/Library/Application Support/ClaudeCode/CLAUDE.md(Mac)、 /etc/claude-code/CLAUDE.md(Linux)、 C:\Program Files\ClaudeCode\CLAUDE.md(Windows)。用户无法覆盖——配合 MDM / Group Policy / Ansible 分发,统一公司编码标准 / 安全策略/en/llm-gateway权限管理 3 种模式:auto(分类器自动批)、permission allowlist(白名单命令)、sandbox(OS 级文件系统 + 网络隔离)。/permissions 看当前规则,/sandbox 切沙盒模式。Marcus 团队部署的标配是 managed policy + permissions allowlist + sandbox 三件套。
Codex 把状态显式 surface 化(对比 CC 的 invisible default 风格),进阶能力主要在 4 块:
codex --profile work / --profile personal,每个 profile 独立 model / sandbox / MCP / approval mode--sandbox read-only(只读探索)/ workspace-write(默认 · 仅当前工作树可写)/ danger-full-access(关沙盒,需要 --yolo 才生效)codex app-server --listen ws://0.0.0.0:8080 + 客户端 codex --remote ws://server:8080,本地 TUI 连云端 codex(适合长任务 + 多设备)codex execpolicy -r my-rules.toml <cmd>,先用规则跑过,再决定要不要让 Codex 真执行团队部署:用 ChatGPT Business / Enterprise plan(seat-based 计价,带审计 / SSO / SCIM / no-training-on-data)。Cloud tasks(codex cloud exec)在 OpenAI 云上跑长任务,不占本地资源。
大多数 GUI 把"我能做什么"摆在你眼前。CLI 不一样:你必须 问 它你能做什么。听起来令人沮丧——其实是它的解放。一旦你掌握 /help,整个工具的版图就缓缓展开了。
下面的终端不连真实模型,但它会按 Claude Code 与 Codex CLI 的真实输出格式回应你。先试试 /help,再用大白话描述一个任务看看。
把这些当成 IDE 里的快捷键——头三天不用全记住,但第四天它们会让你飞起来。
记住这 6 个,90% 场景都覆盖了:
claude 或 codex — 启动交互会话/help — 列所有命令(忘了什么都先 /help)/init — 生成 CLAUDE.md / AGENTS.md(项目初始化)/clear — 清空对话历史(任务切换前先清)/cost — 查本次 token 花销(CC 限定;Codex 用 /status)/diff — 看待应用的修改三种模式 1 句话理解:plan = 想 / edit = 改 / agent = 闭环全自动。Shift+Tab 切换。先用 edit(默认),不熟悉时切 plan(只想不动文件)。
在上面假终端里依次敲(不需要任何安装):
/help — 看到命令列表/init — 看到 scanning 输出/cost — 看到 token 花销估算反思:三个命令分别在解决什么问题?(发现 / 启动 / 监控)
除小白 6 个,CC 还有这些常用 slash:
/agents — 列 / 切 plan / edit / agent 模式/commit — Claude 自动写 commit message + push/compact — 摘要式压缩历史(184k → ~40k tokens,保留决策细节)/loop — CLI 内调度,定时重跑同一个 prompt/resume 或 claude -r — picker 选历史会话续/rewind(或按 Esc Esc)— 回滚到任意 checkpoint非交互模式(管道 / CI / 脚本化):
tail -200 app.log | claude -p "Slack me on anomalies" git diff main --name-only | claude -p "review for security issues"
续会话:claude -c 续最近 / claude -r 选历史 / claude --from-pr 1234 续 PR(自动 checkout + 加载 PR 描述作 context)。
Codex 30+ slash 命令(显式状态化 — 把 CC 隐含的状态都暴露成命令):
/personality friendly|pragmatic|none — Codex 独有的"语气"控件/goal "重构登录" — 显式任务目标(支持 pause / resume / clear)/agent — 切 agent thread(多线程并行)/side / /fork / /new — 临时旁路 / 分叉同上下文 / 完全新会话/review — 看工作树变更/permissions — 改本次会话的批准粒度/fast on — 切快速模式(GPT-5-mini,2 credits/msg)Tab 队列:命令运行中按 Tab + 输入下一条 → 排队,跑完自动执行。CC 没等价机制(改用 /loop)。
2 题决策树告诉你 plan / edit / agent 选哪个:
CC 进阶 4 件套:
~/.claude/keybindings.json 覆盖默认 Shift+Tab(切 plan)、Esc Esc(rewind)等claude --statusline ./my-statusline.sh,自定义底栏显示 context 用量 / cost / git branch / 模型claude --worktree feature-auth,每个 worktree 独立 git checkout 不冲突——一边写功能一边修 bug 互不干扰claude --from-pr 1234 自动 checkout 该 PR + 加载 PR 描述作 context;开会回来直接接着干Skills + Hooks 组合:把常用 prompt 打包成 .claude/skills/<name>/SKILL.md(/<name> 触发),关键操作绑 hooks(PostToolUse 跑 lint / PreToolUse 拦截危险命令)。详见 ch.06。
Codex 进阶 5 件套:
codex --profile work / --profile personal,各 profile 独立 model / sandbox / MCP / approval modecodex execpolicy -r rules.toml <cmd>,先用沙盒规则验证命令再决定 Codex 能否真执行codex completion zsh > ~/.codex-completion.zsh,获得 Tab 补全所有命令 + flagcodex cloud exec "重构 authentication",长任务在 OpenAI 云上跑,不占本地;`/apply <task-id>` 把 diff 取回应用─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
"帮我修一下登录" 是大多数 prompt 的样子。它没有错,只是太单薄。模型只能猜你要什么,给你一个"也许还行"的答案。把信息密度往上推一档,结果立刻不同。
一个好提示词是给 AI 同事的"工单",不是搜索框查询。它至少要回答四件事:where(文件、范围)、what(症状或目标)、not(约束)、done(验收)。
下面 4 个框依次填 — 实时给你 0/4 分,缺什么直接告诉你。(这是 Codex 官方推荐的 prompt 框架,CC 用同一思路只是没显式命名)
把你明天要做的真实任务用 4 元素填一遍——不是练习题,就是真任务。
反思:填的过程中,哪个元素卡住了?那个就是你"对自己任务最不清晰"的地方——AI 也猜不到。
CC 官方推荐 explore-plan-implement-commit 4 阶段:
Verification 是最高杠杆事(best-practices 原话):每个 prompt 必须告诉 Claude 怎么验证自己干对了——测试 / 截图 / 期望输出。例:
❌ 实现验证邮箱的函数 →
✅ 写 validateEmail。测试用例:user@example.com=true / invalid=false / user@.com=false。实现完跑测试。
让 Claude 反过来面试你(高级技巧):大任务先用 "... 用 AskUserQuestion 工具面试我,问技术实现 / UI/UX / 边界 / 取舍 / 我没考虑过的难点。问完写 SPEC.md。" — 然后开新会话执行 SPEC.md。
Codex 4 元素 + reasoning level 双控:
codex --reasoning high 或会话内 /personality pragmatic 暗推 reasoning(pragmatic 偏向 low,thorough 偏向 high)PLANS.md 模板(适合多步工作流):在 repo 根放一个 PLANS.md 列出所有"重复 N 次的工作流"模板,Codex /init 时会优先读取。例:
## 修 bug 的标准流程 1. 复现 bug,记录 stack trace 2. 找到第一个相关 commit (git log -p) 3. 写一个失败测试覆盖该 bug 4. 最小改动让测试通过 5. /review 看 diff,合理则 /commit
CC 进阶把 prompt 当代码管理:
"用 subagent 调查我们认证系统怎么处理 token 刷新"claude -p 脚本化:for f in $(cat files.txt); do claude -p "Migrate $f from React to Vue. Return OK or FAIL." --allowedTools "Edit,Bash(git commit *)" ; doneCodex 进阶用 Skills + Automations + Worktree 把工作流变成"按钮":
~/.codex/config.toml 配 model / sandbox / MCP / skills,而不是每次 prompt 重复指定每个会话开始时,CC / Codex 会读取仓库根目录的 CLAUDE.md。把它当作"加入项目第一天给新同事的备忘录"——栈、约定、不要碰的地方。点击下方任意带下划线的字段查看为什么它有用。
# CLAUDE.md ## stack - React 18 + TypeScript, Vite, TanStack Router - Backend: Hono on Cloudflare Workers, D1 - Tests: Vitest + Playwright ## conventions - Imports use "@/..." aliases — never "../../" - Tailwind + cva variants; no styled-components - Co-locate tests as *.test.ts next to source ## do not touch - /migrations/* — generated, edit schema.ts instead - /src/vendor/legacy-*.ts - .env, wrangler.toml secrets ## commands - dev: "pnpm dev" - test: "pnpm vitest run" - deploy: "pnpm wrangler deploy" ## style - Prefer small functions over clever ones - Comment why, never what - Throw early, log structured
click any underlined value
每个被标注的字段都对应一类典型 AI 误解。点开看 CC 在没看到这一行时会发生什么。
写 CLAUDE.md 的诀窍是具体且简短。一个好的项目宪法是 30–80 行,不是 5 页。先写"不要碰的地方"和"测试怎么跑"这两段,剩下的随项目演进慢慢补。
第一次进项目,跑这一句:/init — Claude 扫一遍代码库,识别 stack / 测试框架 / 入口文件,生成 38 行左右的 starter CLAUDE.md。然后:
第一次进项目,跑 /init — Codex 扫代码库生成 AGENTS.md(结构与 CLAUDE.md 几乎完全一致,只是文件名不同)。Codex best-practices 推荐 5 段结构:
Anthropic 已经认可 AGENTS.md 兼容 — CC 也读它(配 @AGENTS.md import 或 symlink)。所以**统一项目用 AGENTS.md 比双写更实际**。
把上面的范例 CLAUDE.md 看完,自己想 1 件这个 repo 必须告诉 AI 的事:
反思:那件事 Claude 自己读代码能猜到吗?能 → 不要写。猜不到 → 必写(这就是 CLAUDE.md 的存在理由)。
CC 4 级 scope(优先级从高到低):
/Library/Application Support/ClaudeCode/CLAUDE.md — 用户无法覆盖(企业 IT 强制)./CLAUDE.md 或 ./.claude/CLAUDE.md — 团队 share,git 提交~/.claude/CLAUDE.md — 你的个人偏好,跨所有项目./CLAUDE.local.md — 项目本地的个人偏好,加 .gitignoreCC 启动时沿目录树往上 walk,所有找到的拼接成 context(filesystem root → cwd 顺序)。子目录 CLAUDE.md 按需加载(Claude 第一次读那个目录文件时)。
@path import:@README.md / @~/.claude/my-prefs.md,5 跳上限,启动时全部展开。
.claude/rules/ 路径作用域:文件 frontmatter paths: ["src/api/**/*.ts"] → 只在 Claude 读匹配文件时加载,不撑爆 context。
Codex 3 级 scope(优先级从高到低):
~/.codex/AGENTS.md — 你的跨项目偏好.codex/AGENTS.md 或 repo 根 AGENTS.md — 团队 shareCodex 没有 CC 的 managed policy 等价(企业级强制)。**用 profile 实现近似效果**:~/.codex/config.toml 多套 profile,每个 profile 配不同 AGENTS.md 路径 / model / sandbox。codex --profile work 切换。
CC 进阶 context 管理 4 招:
~/.claude/projects/<project>/memory/MEMORY.md(前 200 行/25KB 每会话加载)。用户纠错 / 偏好会自动累积,不用手写对比 best-practices 反模式(原话):"如果 CLAUDE.md 太长,Claude 会忽略一半"——所以拆 .claude/rules/ 路径作用域 + 移到 skills 按需加载。200 行硬上限不是建议,是经验值。
Codex 进阶 4 节流杠杆(pricing 文档原话):
/compact 用法和 CC 一致,摘要式压缩统一双轨 mental model:CLAUDE.md = AGENTS.md(概念几乎完全等价),scope 优先级机制双方都从根 walk-up + 子目录覆盖,只是命名学派不同。**写一次 AGENTS.md,CC 用 import 兼容,双轨一套配置。**
建议的顺序在下方——但每一步都可以拖动重排,看看不同顺序会引发什么问题。多数新手把"plan"放在"edit"后面,结果不可避免地返工。
把 plan 提到 edit 前面,等于让 AI 在动文件前先把推理写成自然语言。这通常把"跑题率"从 25% 拉到 5% 以下。
真实的修 bug 不是一次成功——是失败 → 诊断 → 修复。在 ch.02 假终端里敲下面这条命令,看 12 行的"故意失败"演示:
/demo fail-and-fix
看到这个序列:第 1 次假设错(以为是 await 缺失)→ 测试 FAIL → 回头读代码 → 找到 race condition → 加 mutex → ✓ PASS。关键学习:测试失败 → 不要再试,先回头读代码。
回想你最近一次修 bug,是不是第 1 次猜错?
反思:当时如果不再急着试第 2 个修复,而是回头读 30 秒代码,会不会更快?
CC 推荐的 4 阶段循环(也是上面 wf 拖动的优化排列):
verification 是最高杠杆事(best-practices 原话):每个 prompt 必须告诉 Claude怎么验证自己干对了。3 种 verification:
Codex 用 4 元素 + subagent 分解:
"用 subagent 调查 src/auth/Login.tsx 的 race condition"📌 这一节专为测试工程师写。如果你不写 E2E / unit test,可以跳到下一章。
核心问题:AI 写测试有 vanity test 风险——断言永远 pass 但没真测到的逻辑(expect(x).to.be.ok / 测了 mock 没测真实路径 / 等等)。Codex 文档里叫"vanity tests",CC best-practices 同等概念。
审查这个测试文件,标记可能是 vanity test 的断言: 1. 断言只检查"返回值不为 null/undefined"——不算真测 2. 测试 mock 但没测被 mock 的接口的真实行为 3. assert 的值是测试自己 setup 的(循环引用) 4. catch 块吞掉错误后断言 true 5. snapshot 测试但 snapshot 是 AI 自动生成的(没人审过) 对每个被标记的断言: - 解释为什么是 vanity - 给出"真测试"应该写什么(具体代码) - 标注严重度(P0 完全 vanity / P1 弱测 / P2 改进)
CC:在 CLAUDE.md 加一段 ## test framework:
## test framework - Playwright + page object pattern at tests/poms/ - Use LoginPage.login(email, password) instead of raw page.fill() - Custom fixture: authedPage (auto-login as testuser@x.com) - Don't write new fixtures — extend existing ones in fixtures/
这样 Claude 写新 E2E 时,自动用现有 page object 而不是 raw selector(后者 brittle)。
Codex:同样在 AGENTS.md 写,但 Codex 还支持 专属 SDET skill:
# .agents/skills/write-e2e/SKILL.md --- name: write-e2e description: Write Playwright E2E using our page objects --- 1. 读 tests/poms/ 下所有 page object class 2. 用 page object 方法写测试,不要 raw selector 3. 默认用 authedPage fixture(自动登录) 4. 跑 npx playwright test --headed,看是否真在测预期 UI 5. 跑完用 anti-vanity prompt 模板自查
团队 share:把这个 skill 装进 plugin,所有 SDET 一键 codex skill install <your-plugin>。
把上面三件套(CLAUDE.md/AGENTS.md test framework 段 + AI 自查 prompt 模板 + page object 命名约定)打包成你团队的 SDET onboarding zip:新 SDET 第一天克隆,8 个 SDET 都能用同一套生产 AI 测试。
林姐说:这不是用 AI 写测试,这是把"测试工程的范式"喂给 AI,让它做"工程"而不是"代码生成"。
CC / Codex 都是斜杠命令的 CLI。下面把高频命令分了五组,点开任何一个看具体用法。试一次胜过看十次。
速查表只是地图。真正记得住的是你在某次卡壳时第一次发现某个命令救了你——所以从今天开始,遇到一个用一个。
CC 和 Codex 都把"扩展能力"拆成 5 个互补机制:CLAUDE.md / Skill / MCP / Subagent / Hook(+ Plugin 打包层)。下面 1 棵决策树告诉你"我这个需求该用哪个"——这是 features-overview 触发器表的可交互版本。
MCP(Model Context Protocol)把 AI 没法直接看到的外部数据"桥接"进来 — GitHub issues / Slack 消息 / 数据库 / Figma 设计稿。一行命令开通:
claude mcp add github # 然后在 Claude 会话里: "list our open issues with label 'bug'"
codex mcp add github # 或在 Codex 设置 UI 里点"添加 MCP server" # 会话内: "list our open issues with label 'bug'"
没 MCP 时:Claude 看不到 GitHub,你得手动复制 issue 文字给它。有 MCP:它直接拉。这就是"工具扩展"的全部含义。
CC 用 JSON(.claude/settings.json):
{
"mcpServers": {
"context7": {
"command": "npx",
"args": ["-y", "@upstash/context7-mcp"],
"env": { "LOCAL_TOKEN": "..." }
}
}
}
scope 优先级:local > project > user。claude mcp list 看当前激活的。
内置 registry:api.anthropic.com/mcp-registry 列了官方推荐的 MCP servers(Slack / Figma / Playwright / Sentry / GitHub)。claude mcp add <name> 即可,无需手填配置。
Codex 用 TOML(~/.codex/config.toml 或 repo .codex/config.toml):
[mcp_servers.context7] command = "npx" args = ["-y", "@upstash/context7-mcp"] [mcp_servers.context7.env] LOCAL_TOKEN = "..." # HTTP server 用 url + bearer_token_env_var [mcp_servers.figma] url = "https://mcp.figma.com/mcp" bearer_token_env_var = "FIGMA_OAUTH_TOKEN"
OAuth 流:codex mcp login <name>(配 callback port)。STDIO / HTTP / OAuth 三种 server 类型完整支持。
双轨核心差异:CC 用 JSON / Codex 用 TOML — 同一份语义,不同语法。这是 ch.06 最直接的可见对比点(也是为啥不要在双轨之间狂搬配置文件,各自 /init 各自 /init 即可)。
features-overview 的触发器表(我们做了交互版):每种触发场景 → 推荐机制。一句话回答你纠结的"该用 CLAUDE.md 还是 Skill 还是 MCP 还是 Hook 还是 Plugin"。
| 机制 | 何时加载 | context 成本 |
|---|---|---|
| CLAUDE.md | 会话启动 | 每个请求 |
| Skill | 启动(描述)+ 调用时(全文) | 低(描述每请求) |
| MCP | 启动(工具名)+ 用时(schema) | 低(到工具用时) |
| Subagent | spawn 时 | 隔离(0 主会话开销) |
| Hook | 事件触发 | 0(除非返回输出) |
组合模式(常用):CLAUDE.md 写"全局规则" + Skill 装"工作流" + MCP 接"外部数据" + Hook 守"必须发生的事"(如 PostToolUse 跑 lint) + Subagent 隔离"会撑爆 context 的研究"。Plugin 把这一套打成可分享的 unit 给团队。
Codex 对应机制几乎完全相同(只是命名 + 文件位置不同):
.agents/skills/SKILL.md(CC 在 .claude/skills/)/agent 切线程 = CC 的 subagent spawn)双轨 takeaway:5 机制是 industry-emerging standard,概念双轨对应,只在文件位置 / 配置语法 / 命令前缀不同。**学一套 mental model 就能两边用**。
任务:"给 /api/users 加分页,limit 默认 20,cursor 用 base64 编码的 createdAt。" 拖动中间的把手,左半是 Cursor 的 inline diff 视图,右半是 Claude Code 的 plan-then-edit 流。
Cursor 把 AI 嵌进编辑器,diff 优先——你看到代码再决定接不接受。Claude Code 是终端 agent,计划优先——它先把"打算干什么"写出来给你审。前者快,后者稳。复杂改动选后者,体力活选前者。
同一个 PR 任务,三个工具各自跑一遍。拖中间两个手柄看 Cursor / Claude Code / Codex 三方差异 — 蓝色把手切 Cursor↔CC,绿色把手切 CC↔Codex。
不用记 git 命令,一句话搞定:
claude "commit my changes with a descriptive message" claude "create a pr for these changes"
# 在 codex 会话内 /diff # 看变更 /review # AI 审一遍自己的改动 /commit # 提交 + 写 message
AI 会:看你的改动 → 分析意图 → 写 conventional commit message → 创建 PR。不用你想 commit message 怎么写。
下次写 commit message 时,先不要自己想,让 AI 写一版,看它写什么——会不会比你写得更好?(很可能是的)
CC 中级 git 工具链:
gh 后 Claude 自动用它(免 GitHub API rate limit),无需手动配/en/github-actions action,每个 PR 自动跑 review,inline 评论留代码改进建议Codex 中级 git 集成:
/review 让 AI 审自己写的改动 — Writer/Reviewer pattern 同会话内/en/github-enterprise-server 连自托管 GHEcodex apply <task-id> 取回这俩工具不是替代关系。回答下面两个问题,告诉你这次任务该走哪条路。
订阅 / API key / 团队 plan 怎么选?下面计算器实时给你答案。但首先要懂:成本控制本质上是 context 控制 — context 满了 = 性能下降,token 烧光是结果不是原因。
每次会话敲 /cost 看本轮花了多少:
Session · started 14:02 (37 min ago) input tokens 18 422 $0.055 output tokens 9 108 $0.137 cache reads 24 311 $0.007 total $0.199
小白订阅选择:1-2 次/周 → Claude Pro $20(Sonnet 主力 + Haiku 长任务)。每天用 → Claude Max $100(5x quota)。完全够。
Codex 用 /status 看会话状态(包括 token 估算):
/status model: gpt-5 reasoning: medium messages used: 28 / 100 (5h window) cloud tasks: 4 / 60 ChatGPT Plus · $20/mo
小白订阅选择:**ChatGPT Plus $20 已包含 Codex**——不需要单独付。如果你已经订了 Plus,Codex 是免费送的(在订阅 quota 内)。
敲一次 /cost(CC)或 /status(Codex),看你刚才一次会话花了多少。
反思:那个数字让你心安还是慌?如果慌——说明你真在用,该上 plan 了。
CC 4 节流杠杆(best-practices 原话):
Codex 4 节流杠杆(pricing 原话):
双轨节流核心一致:精简 prompt + 模型选择 + 配置文件不要冗余 + 任务隔离,只是命令名不同。
输入团队规模 + 月使用强度 → 实时算出 CC 订阅 / Codex 订阅 / API key 三路月费用估算 + 推荐组合。
注:数字基于 2026-04 Anthropic / OpenAI 官方公开 pricing 估算,5 小时窗口规则简化为月度。Anthropic / OpenAI 都在频繁调整 quota,**真实部署前用计算器估算后,再去 docs.claude.com / developers.openai.com 校准本月数字**。
3 句话总结:
这些都是真实出现过的事故。每张卡片都包含:症状、根因、避免方式。把它当 checklist——开新会话前过一遍。
通常发生在它"猜"了一个工具函数的位置。修复:在 CLAUDE.md 写明真实的目录结构,或先让它 ls src/。
你让它"改这一行",它顺手把整个文件重排了。Plan 模式 + "do not refactor unrelated code" 是首选解药。
收到失败测试时,AI 偶尔会"修测试"。Prompt 里加:"修代码,不要碰 test 文件" 即可避免。
SDK 升级前后最容易出现。让它先 cat node_modules/x/index.d.ts 或贴官方文档。
把整个仓库丢进去 ≠ 帮 AI。用 /compact 或 /clear 重启会话比堆 context 更有效。
永远跑测试。永远 git diff。永远人肉读一遍关键路径。AI 是同事,不是神。
PATH 没加。Native install 把 claude 放在 ~/.local/bin/,默认 zsh 不在 PATH。解药:加一行到 ~/.zshrc 然后 source。
对付公司防火墙 / 不稳定网络。解药:retry 或换 Homebrew/WinGet 路径。corp proxy 设 HTTPS_PROXY 环境变量。
常因系统 CA 证书过期或公司代理做 TLS 拦截。解药:更新 CA(apt install ca-certificates)或指定 corporate CA bundle。
Claude Code 安装需要 ≥4GB RAM。解药:加 2GB swap 文件或升级 instance。
Windows 上 PowerShell 和 CMD 用不同安装命令。看到 'irm' is not recognized 就是在 CMD 里跑了 PS 命令。
WSL1 的 loader 处理不了新版 Claude Code 的程序头。解药:升 WSL2 一行命令搞定。
Claude Code 要 macOS 13.0+。看到 dyld: cannot load 或 Symbol not found _ubrk_clone = 系统库太老。解药:升 macOS。
code 过期或复制不完整。解药:重新打开 OAuth 页,5 分钟内贴。SSH/远程时按 c 复制 URL,在本地浏览器打开。
**Pro/Max 用户**:订阅过期,去 claude.ai/settings 看。**Console 用户**:account 没"Claude Code"或"Developer" role,管理员在 Anthropic Console 给。**proxy**:公司代理拦了,设 NODE_EXTRA_CA_CERTS。
shell profile 里有老 API key 环境变量,优先于订阅 OAuth。**典型 quietly 烧别人的钱场景**。解药:unset 并清理 shell 配置。
WSL2 / SSH / Docker 都会让 OAuth callback 找不到对应浏览器。解药:复制 URL 到本地浏览器,登录后贴 code 回 CLI;或 codex auth login / claude auth login 从 stdin 读。
Codex 默认 workspace-write,工作树外写就拒。解药:确认是否真要写外面 → 是 → /permissions 批准 / 否 → cd 到正确 workspace。
常见原因:hook 路径错 / settings.json 缩进或 JSON 语法错 / hook 脚本没 +x 权限。解药:用 InstructionsLoaded hook 调试,看哪些文件加载了。
context 接近上限时 auto-compact 摘要历史,但摘要本身耗 token,会堆叠。解药:主动 /compact <instructions> 给具体指令,或 /clear 完全重启 + 用 SPEC.md 接力。
看完 20 张卡片,你会发现两条规律(Yuki 教学法:从样本看模式比记单个 case 强):
遇到上面没列的错误:
claude doctor — 自动诊断报告(PATH / Keychain / 网络 / 认证)/feedback — 在 Claude 会话里直接报问题给团队/debug-config — 打印 config 各层 / hooks / sandbox 状态codex execpolicy — 验证 sandbox 规则是否符合预期/feedback — 报 issue 给 OpenAI 团队挑 1 张你真遇到过的卡片(installer 失败 / OAuth 报错 / hooks 没 fire ...)。当时你花了多久才解决?有了这张卡之后,下次同样问题最快几分钟?
反思:这就是"错误博物馆"的价值——错误不是失败,是学习路径上的同行者。把你修过的错误也写成卡片,贴到团队 wiki,你就是别人的"错误博物馆策展人"。