这份附录有四样东西:怎么运行 mini-cc、一张数字速查表、完整代码、继续练手的题目。
懒得跟着每一节拼的话,直接复制这里的代码就能用。
一、怎么运行

bash
# Python 3.9 以上,零依赖:不用装任何包
# 方式一:Anthropic(Claude)
export ANTHROPIC_API_KEY=你的密钥
# 方式二:DeepSeek(国产、便宜,不需要 Claude key)
export MINI_CC_API=deepseek
export DEEPSEEK_API_KEY=你的密钥
# 可选:换模型、用兼容 Anthropic 接口的第三方服务
export MINI_CC_MODEL=deepseek-reasoner
export ANTHROPIC_BASE_URL=https://...
# 在一个练习目录里运行
cd mini-cc-lab
python /你的路径/mini_cc.py⚠️ mini-cc 能执行任意 shell 命令、改任意文件。请在专门的练习目录里运行。
它会读哪些文件
| 文件 | 作用 | 在哪节 |
|---|---|---|
~/.claude/CLAUDE.md,以及从根目录到当前目录每一层的 CLAUDE.md、.claude/CLAUDE.md、CLAUDE.local.md |
项目说明 | 第6节 |
~/.claude/skills/*/SKILL.md、.claude/skills/*/SKILL.md |
Skill | 第7节 |
~/.claude/agents/*.md、.claude/agents/*.md |
自定义子代理 | 第12节 |
.mini-cc/settings.json |
权限、Hook、MCP、插件 | 第4、8、9、10节 |
前三类和 Claude Code 共用,你已有的配置可以直接拿来用。设置单独放在 .mini-cc/ 下,免得和你真正的 Claude Code 配置互相影响。
一份完整的 settings.json

json
{
"permissions": {
"allow": ["Bash(ls *)", "Bash(git status*)", "mcp__shop__read_query"],
"ask": ["Bash(git push *)"],
"deny": ["Read(./.env)", "Bash(*.env*)", "mcp__shop__write_query"]
},
"hooks": {
"PreToolUse": [
{"matcher": "Bash", "hooks": [{"type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/block-push.sh"}]}
]
},
"mcpServers": {
"shop": {"command": "uvx", "args": ["--with", "mcp<2", "mcp-server-sqlite", "--db-path", "./shop.db"]}
},
"plugins": ["./my-plugin"]
}这份是把各节的例子拼在一起,用不到的部分直接删掉,路径按你的实际情况改。比如没有 block-push.sh 却留着那条 Hook,每次调用 Bash 都会提示一次 Hook 出错(不会阻断)。
交互命令
| 命令 | 作用 | 在哪节 |
|---|---|---|
/clear |
开新会话:清空历史,重新读 CLAUDE.md,退出计划模式,清空待办 | 第2、5、6节 |
/context |
看上次请求占了多少上下文、缓存命中多少、加载了哪些 CLAUDE.md 和 Skill | 第5节起 |
/技能名 参数 |
手动调用一个 Skill | 第7节 |
/compact 要求 |
手动压缩,可以带上要保留什么 | 第11节 |
/plan |
进入或退出计划模式 | 第12节 |
/exit |
退出 | 第2节 |
Ctrl+C |
打断当前任务 | 第2节 |
二、数字速查表
书里出现的数字,集中放在这里。Claude Code 更新很快,这些数字随时可能变;改书的时候只改这一张表,再全文搜一下就行。
源码版本:CCB commit
______官方文档核对日期:______系统提示词查阅日期:2026-10-11
| 数字 | 含义 | 源码里的名字 / 出处 | 在哪节 |
|---|---|---|---|
| 3 次 | 输出被截断后,最多补几次「接着写」 | max_output_tokens_recovery |
第2节 |
| 10 个 | 只读工具最多并行几个 | toolOrchestration.ts |
第3节 |
| 2 的 N 次方 | 静态区每多一个 if,缓存变体翻倍 | prompts.ts 注释 |
第5节 |
| 约 2 万 token | 某个设置每切换一次就失效的缓存 | prompts.ts 注释 |
第5节 |
| 2026-08-31 | 在这天及之后注册的账号,改过 thinking 块之前的内容会报 400 | 官方文档 | 第5节 |
| 5 层 | @ 引入最多嵌套几层 |
MAX_INCLUDE_DEPTH |
第6节 |
| 40,000 字符 | 单个 CLAUDE.md 超过就警告(不截断) | MAX_MEMORY_CHARACTER_COUNT |
第6节 |
| 200 行 / 25KB | MEMORY.md 超过就截断 |
第6节 | |
| 50 亿~150 亿 token / 周 | Explore 不带 CLAUDE.md 省下的量(3400 多万次调用) | runAgent.ts 注释 |
第6节 |
| 1% | Skill 目录占上下文窗口的比例 | SKILL_BUDGET_CONTEXT_PERCENT |
第7节 |
| 4 字符 | 1 token 折算多少字符 | CHARS_PER_TOKEN |
第7节 |
| 1,536 字符 | 单条 Skill 描述上限(v2.1.117 从 250 提高) | MAX_LISTING_DESC_CHARS |
第7节 |
| 20 字符 | 平分之后每条描述少于这个数,就只留名字 | formatCommandsWithinBudget() |
第7节 |
| 2,048 字符 | MCP 工具描述上限 | client.ts |
第8节 |
| 25,000 token | MCP 工具输出上限(MAX_MCP_OUTPUT_TOKENS 可调) |
mcpValidation.ts |
第8节 |
| 10,000 token | MCP 输出超过就在界面上警告 | 第8节 | |
| 10% | ENABLE_TOOL_SEARCH=auto 时,工具定义超过上下文的这个比例才延迟加载 |
官方文档 | 第8节 |
| 10 分钟 | 命令型 Hook 默认超时 | TOOL_HOOK_EXECUTION_TIMEOUT_MS |
第9节 |
| 10 轮 | 多久没更新待办就提醒 | todo_reminders |
第11节 |
| 50,000 字符 | 单个工具结果超过就落盘 | toolLimits.ts |
第11节 |
| 200,000 字符 | 一条消息里并行工具结果的总量上限 | toolLimits.ts |
第11节 |
| 2KB | 落盘后给模型的预览长度 | toolResultStorage.ts |
第11节 |
| 60 分钟 / 最近 5 个 | 微压缩的触发条件 / 保留几个工具结果 | microcompact |
第11节 |
| 20,000 token | 给压缩摘要预留的输出空间(p99.99 是 17,387) | autoCompact.ts |
第11节 |
| 13,000 token | 压缩线的缓冲 | autoCompact.ts |
第11节 |
| 167K(约 83%) | 200K 窗口的自动压缩线 | autoCompact.ts |
第11节 |
| 3 次 | 自动压缩连续失败几次就熔断 | autoCompact.ts |
第11节 |
| 5 个 × 5,000 token | 压缩后放回最近读过的文件 | compact.ts |
第11节 |
| 5,000 / 25,000 token | 压缩后每个 Skill / 所有 Skill 的重新注入上限 | POST_COMPACT_* |
第7、11节 |
| 0.01% → 2.79% | 换到 Sonnet 4.6 后,压缩时乱调工具的比例 | compact/prompt.ts 注释 |
第11节 |
mini-cc 用到的模型名:claude-opus-5-5(默认)、claude-sonnet-5-5、claude-haiku-5-5。
三、源码文件索引
| Claude Code 源码 | 讲什么 | mini-cc 里对应的函数 | 在哪节 |
|---|---|---|---|
src/query.ts |
Agent loop | agent_loop()、repair_after_interrupt() |
第2节 |
src/Tool.ts |
工具接口 | make_tool() |
第3节 |
src/services/tools/toolExecution.ts |
七道关 | execute_tool()、validate_input() |
第3节 |
src/services/tools/toolOrchestration.ts |
只读并行 | run_tools() |
第3节 |
FileEditTool |
先读后改 | check_fresh()、remember_read() |
第3节 |
src/utils/permissions/permissions.ts |
权限流程表 | check_permission()、match_rule() |
第4节 |
src/tools.ts |
deny 整个工具就删掉 | setup() |
第4节 |
src/constants/prompts.ts |
系统提示词分区 | build_system_prompt()、STATIC_PROMPT |
第5、13节 |
src/context.ts、src/utils/api.ts |
user context | get_user_context()、prepend_user_context() |
第5节 |
src/utils/claudemd.ts |
CLAUDE.md | get_memory_files()、process_memory_file()、get_claude_mds() |
第6节 |
src/skills/loadSkillsDir.ts、SkillTool/ |
Skill | load_skills()、skill_listing()、run_skill() |
第7节 |
src/services/mcp/ |
MCP | MCPClient、load_mcp_tools()、call_mcp_tool() |
第8节 |
src/utils/hooks.ts、toolHooks.ts |
Hook | run_hooks() |
第9节 |
src/utils/plugins/ |
插件 | load_plugin() |
第10节 |
src/utils/toolResultStorage.ts |
大结果落盘 | apply_tool_result_budget() |
第11节 |
src/utils/attachments.ts |
附件和提醒 | todo_reminder() |
第5、11节 |
src/services/compact/ |
压缩 | compact() |
第11节 |
AgentTool/ |
子代理 | run_agent()、load_agents()、make_agent_tool() |
第12节 |
四、完整代码

保存为 mini_cc.py。每一段都标了在哪一节加入、对应 Claude Code 源码里的哪个文件。