工具的边界即思维的边界——扩展工作区,就是扩展可能性本身。
附录 V-A:Plan Mode V2(结构化规划)
功能描述
Plan Mode V2 是对基础计划模式的重大升级,引入了多 Agent 并行探索与需求面试阶段。当用户进入计划模式时,系统可以派出多个子 Agent 同时探索不同的实现路径,然后综合各路结果生成更高质量的执行计划。
核心文件
| 文件 | 说明 |
|---|---|
src/utils/planModeV2.ts |
核心逻辑:Agent 数量决策、面试阶段开关 |
src/tools/EnterPlanModeTool/ |
进入计划模式的工具入口 |
src/tools/ExitPlanModeTool/ |
退出计划模式的工具入口 |
工作机制
Agent 并发数决策(getPlanModeV2AgentCount()):
max套餐 +20x速率限制,或enterprise/team计划 → 3 个 Agent- 其余套餐 → 1 个 Agent(退化为经典单路计划)
- 环境变量
CLAUDE_CODE_PLAN_V2_AGENT_COUNT可覆盖,上限 10
探索阶段 Agent 数(getPlanModeV2ExploreAgentCount()):固定返回 3,与用户套餐无关。
需求面试阶段(isPlanModeInterviewPhaseEnabled()):
- Anthropic 内部用户(
USER_TYPE=ant):始终开启 - 外部用户:由
tengu_plan_mode_interview_phase功能 gate 控制 - 开启后,系统先与用户往返几轮确认需求,再触发多 Agent 并行探索
关键常量/配置
// 环境变量覆盖 Agent 数(最大 10)
process.env.CLAUDE_CODE_PLAN_V2_AGENT_COUNT
// Gate 名称(GrowthBook 功能开关)
'tengu_plan_mode_interview_phase'
附录 V-B:Sandbox 沙箱隔离
功能描述
Sandbox 为 Agent 的文件系统操作和网络访问提供运行时隔离层。它不依赖操作系统级沙箱,而是在 Claude Code 层面通过白名单/黑名单规则过滤工具调用,并记录违规行为供后续审计。
核心文件
| 文件 | 说明 |
|---|---|
src/utils/sandbox/sandbox-adapter.ts |
FS 白名单/黑名单、网络 Pattern 匹配、违规拦截 |
src/utils/sandbox/sandbox-ui-utils.ts |
违规记录的 UI 展示辅助函数 |
工作机制
- 文件系统规则:区分"允许读取路径"、"允许写入路径"、"明确禁止路径"三层规则,使用 Glob 模式匹配。
- 网络主机过滤:通过 Glob 匹配目标主机名,阻止 Agent 连接未授权外部服务。
SandboxViolationStore:收集运行时违规记录(工具名称、被拒绝的路径/主机),可通过/doctor命令汇总展示。- 运行时切换:
/sandbox-toggle命令支持在不重启会话的情况下启用/禁用沙箱。
关键常量/配置
// 触发违规日志的环境变量(通常由配置文件中的 sandbox 字段控制)
// 在 CLAUDE.md 或 .claude/settings.json 中配置 allowedPaths / deniedPaths
附录 V-C:Rewind(会话回溯)
功能描述
Rewind 是一个极简的"时光倒流"命令,允许用户将对话历史截断到某个历史节点,从而非破坏性地撤销 Agent 的后续操作。它的实现出人意料地简洁。
核心文件
| 文件 | 说明 |
|---|---|
src/commands/rewind/rewind.ts |
核心实现,不足 20 行有效代码 |
工作机制
整个 Rewind 命令的 call() 方法只做两件事:
async call(context) {
context.openMessageSelector() // 打开消息选择 UI
return { type: 'skip' } // 告知引擎跳过本次响应
}
openMessageSelector() 由 context 层负责:渲染一个时间线 UI,用户选中某条历史消息后,框架将内存中的消息数组截断到该节点之前。截断是内存操作,不修改磁盘上的会话历史文件,因此是非破坏性的。
关键常量/配置
无特殊配置,Rewind 是通用功能,不受功能 gate 限制。
附录 V-D:ultraplan 关键词触发
功能描述
ultraplan 是一个"魔法词"机制:当用户输入中出现特定触发词时,系统自动将其替换为 plan,并进入增强的计划模式。触发词识别算法包含复杂的边界检测逻辑,防止误触发。
核心文件
| 文件 | 说明 |
|---|---|
src/utils/ultraplan/keyword.ts |
关键词位置检测,findKeywordTriggerPositions() |
src/utils/ultraplan/ccrSession.ts |
CCR(Cloud Code Runner)会话集成 |
工作机制
findKeywordTriggerPositions() 扫描用户输入,执行以下过滤:
| 不触发条件 | 说明 |
|---|---|
位于 `、'、" 引号内 |
避免干扰代码/字符串 |
位于 ()、[]、{} 括号内 |
避免干扰表达式 |
紧跟 ? 字符 |
ultraplan? 被视为提问,而非触发 |
以 / 前缀开头 |
/ultraplan 作为 slash 命令单独处理 |
| 出现在路径中 | 防止误替换文件路径里的关键词 |
通过检测后,关键词被替换为 plan,输入转发给 LLM,后续走标准计划模式流程。
关键常量/配置
// 触发词列表(硬编码在 keyword.ts 中)
// 具体关键词内容为内部实现细节
附录 V-E:Teleport(代码库传送到云端)
功能描述
Teleport 允许用户将本地代码库"传送"到 Anthropic 云端环境中运行 Agent,适用于无法在本地运行的复杂任务。它通过 Git Bundle 打包本地仓库(包含未提交的 WIP),上传后在云端 Session 中重建工作环境。
核心文件
| 文件 | 说明 |
|---|---|
src/utils/teleport/environments.ts |
云端环境枚举与获取 |
src/utils/teleport/gitBundle.ts |
Git bundle 打包与上传逻辑 |
src/utils/teleport/api.ts |
Teleport API 调用层 |
工作机制
环境类型(EnvironmentKind):
type EnvironmentKind = 'anthropic_cloud' | 'byoc' | 'bridge'
// anthropic_cloud: Anthropic 托管云
// byoc: 用户自带云(Bring Your Own Cloud)
// bridge: 通过 Bridge 协议连接的 IDE 环境
打包流程(gitBundle.ts):
git stash create→update-ref refs/seed/stash(使 WIP 可达)git bundle create --all(打包 refs/seed/stash 及其所有对象)- 支持三级降级策略:
all(完整历史)→head(仅当前分支)→squashed(单提交快照) - 上传到
/v1/filesAPI,返回fileId - 清理临时 ref
refs/seed/stash
默认 Bundle 大小上限:100 MB(可通过 tengu_ccr_bundle_max_bytes 调整)。
获取环境(fetchEnvironments()):需要有效的 OAuth token + 组织 UUID。
关键常量/配置
// Bundle 大小上限(默认 100MB)
const DEFAULT_BUNDLE_MAX_BYTES = 100 * 1024 * 1024
// GrowthBook gate
'tengu_ccr_bundle_max_bytes'
附录 V-F:Asciicast 会话录制
功能描述
Asciicast 以 .cast 格式录制终端会话,用于回放、调试和分享。该功能仅对 Anthropic 内部用户开放,且需要主动设置环境变量启用。
核心文件
| 文件 | 说明 |
|---|---|
src/utils/asciicast.ts |
录制文件路径生成、缓冲写入器 |
工作机制
启用条件(getRecordFilePath()):
// 必须同时满足两个条件,否则返回 undefined
USER_TYPE === 'ant' // 仅 Anthropic 内部用户
CLAUDE_CODE_TERMINAL_RECORDING === '1' // 显式启用
文件路径格式:
~/.claude/projects/<projectHash>/<sessionId>-<timestamp>.cast
Resume 兼容:使用 --resume 续接会话时,系统自动将旧录制文件重命名以匹配新 Session ID,保持录制连续性。
写入性能:createBufferedWriter() 提供缓冲写入,避免频繁 I/O 影响终端响应。
关键常量/配置
# 启用录制(仅对 USER_TYPE=ant 有效)
export CLAUDE_CODE_TERMINAL_RECORDING=1
附录 V-G:终端截图与对话导出
功能描述
Claude Code 支持将当前终端画面渲染为 PNG/SVG 图片并复制到系统剪贴板,也支持将整条对话导出为纯文本或 Markdown 文件。截图功能完全在进程内完成,零外部依赖。
核心文件
| 文件 | 说明 |
|---|---|
src/utils/ansiToPng.ts |
ANSI 转 PNG,内置位图字体渲染器 |
src/utils/ansiToSvg.ts |
ANSI 解析层(供 PNG 渲染器复用) |
src/utils/screenshotClipboard.ts |
将渲染结果写入系统剪贴板 |
工作机制
ANSI → PNG 渲染(ansiToPng.ts):
- 跳过 SVG 中间格式,直接位图渲染
- 内置 Fira Code Regular 24×48 位图字体(Base64 编码打包在源码中)
- 字体覆盖 ASCII 可打印字符 +
/stats输出使用的 Unicode 字符 - 渲染速度:5–15 ms(对比旧 resvg-wasm 方案的 224 ms)
- 零外部依赖(仅使用 Node.js 内置
zlib)
字体许可:Fira Code Regular(SIL OFL 1.1),Copyright © 2014–2021 The Fira Code Project Authors。
/export 命令:
- 将整条对话历史序列化为纯文本或 Markdown 格式
- 输出到文件或标准输出
- 支持
--format text|markdown参数
关键常量/配置
// 字形尺寸(位图字体渲染分辨率)
const GLYPH_W = 24 // 字形宽度(像素)
const GLYPH_H = 48 // 字形高度(像素)
下一附录
→ appendix-VI-ux.md(用户体验与彩蛋:Buddy 虚拟伴侣、Effort 模式、Chrome 集成、诊断工具)