附录 V:工作区扩展与运行模式

工具的边界即思维的边界——扩展工作区,就是扩展可能性本身。


附录 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 展示辅助函数

工作机制

  1. 文件系统规则:区分"允许读取路径"、"允许写入路径"、"明确禁止路径"三层规则,使用 Glob 模式匹配。
  2. 网络主机过滤:通过 Glob 匹配目标主机名,阻止 Agent 连接未授权外部服务。
  3. SandboxViolationStore:收集运行时违规记录(工具名称、被拒绝的路径/主机),可通过 /doctor 命令汇总展示。
  4. 运行时切换/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):

  1. git stash createupdate-ref refs/seed/stash(使 WIP 可达)
  2. git bundle create --all(打包 refs/seed/stash 及其所有对象)
  3. 支持三级降级策略:all(完整历史)→ head(仅当前分支)→ squashed(单提交快照)
  4. 上传到 /v1/files API,返回 fileId
  5. 清理临时 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 集成、诊断工具)