Skip to content

特性门控系统

Claude Code 使用 编译时特性门控(Feature Gates)实现条件编译,通过 feature() 函数在构建阶段进行 死代码消除(Dead Code Elimination),产出针对不同部署目标的精简构建产物。

工作原理

feature() 函数

typescript
// 构建时由 Bun bundler 内联为 true/false
function feature(flag: FeatureFlag): boolean {
  return FEATURE_FLAGS[flag] === true
}

// 使用示例
if (feature('VOICE_MODE')) {
  // 当 VOICE_MODE=false 时,整个分支被 tree-shake 消除
  const voiceEngine = await import('./voice/voiceEngine')
}

构建时处理

源代码                          构建产物 (VOICE_MODE=false)
─────────                      ──────────────
if (feature('VOICE_MODE')) {    // 整段被消除
  startVoice()                  // 
}                               // 

if (feature('BRIDGE_MODE')) {   if (true) {
  initBridge()                    initBridge()
}                               }

已知特性 Flag 完整列表

项目中使用了 ~47 个 编译时特性 Flag:

核心功能 Flag

Flag用途影响范围
BRIDGE_MODEclaude.ai Web 端 Bridge 通信bridge/ 相关文件
DAEMON守护进程/后台运行模式进程管理、会话持久化
BG_SESSIONS后台会话管理多会话并发
VOICE_MODE语音输入/输出voice/、音频采集
KAIROS高级时间/计划功能定时任务、brief 模式
KAIROS_BRIEFKairos Brief 模式简洁输出
KAIROS_CHANNELSKairos 频道功能频道通信
KAIROS_GITHUB_WEBHOOKSKairos GitHub WebhookPR 订阅
TEMPLATES项目模板系统初始化模板
PROACTIVE主动建议模式SleepTool 启用

工具与功能 Flag

Flag控制的功能说明
AGENT_TRIGGERSCronCreate/Delete/ListToolAgent 触发器
WORKFLOW_SCRIPTSWorkflowTool工作流编排(非 WORKFLOW_TOOL)
WEB_BROWSER_TOOLWebBrowserTool网页浏览器工具
CONTEXT_COLLAPSECtxInspectTool上下文折叠
HISTORY_SNIPSnipTool历史裁剪
UDS_INBOXListPeersToolUDS 收件箱
FORK_SUBAGENTFork 子代理分支代理
TORCHTorch 功能Torch 命令
TOKEN_BUDGETToken 预算系统预算管理
VERIFICATION_AGENT验证代理验证工具

UI Flag

Flag用途
BUDDYBuddy 虚拟宠物系统
MESSAGE_ACTIONS消息操作菜单
STREAMLINED_OUTPUT精简输出模式
CONNECTOR_TEXT连接器文本

企业/高级 Flag

Flag用途
COORDINATOR_MODE多 Agent 协调器
ULTRAPLAN超级计划模式
CCR_AUTO_CONNECT自动连接 CCR
CCR_MIRRORCCR 镜像
CCR_REMOTE_SETUPCCR 远程设置
SELF_HOSTED_RUNNER自托管运行器
BYOC_ENVIRONMENT_RUNNERBYOC 环境运行器
NATIVE_CLIENT_ATTESTATION原生客户端认证
DOWNLOAD_USER_SETTINGS下载用户设置
FILE_PERSISTENCE文件持久化

内部/实验 Flag

Flag用途
ABLATION_BASELINE消融基线测试
AWAY_SUMMARY离开摘要
BASH_CLASSIFIERBash 分类器
BREAK_CACHE_COMMAND缓存破坏命令
CACHED_MICROCOMPACT缓存微压缩
CHICAGO_MCPChicago MCP (含 computer-use)
COMMIT_ATTRIBUTION提交归属
DUMP_SYSTEM_PROMPT转储系统提示
EXPERIMENTAL_SKILL_SEARCH实验性技能搜索
EXTRACT_MEMORIES提取记忆
HOOK_PROMPTSHook 提示
MCP_SKILLSMCP 技能
TRANSCRIPT_CLASSIFIER转录分类器

文档修正说明

原文档列出的 REPL_TOOLSLEEP_TOOLNOTEBOOK_TOOLPOWERSHELL_TOOLCOMPUTER_USEDREAMPASSESBUGHUNTERSTICKERSQUICK_SEARCHVIM_MODETEAM_MEMORYSWARMTELEPORTSANDBOXSTRUCTURED_DIFFDEEP_LINKCLAUDE_IN_CHROMEANT_SPECIFIC 等 Flag 在实际代码中不存在

  • REPLTool 通过 process.env.USER_TYPE === 'ant' 控制
  • SleepTool 通过 feature('PROACTIVE') || feature('KAIROS') 控制
  • NotebookEditTool 始终导入(非 feature-gated)
  • PowerShellTool 通过 isPowerShellToolEnabled() 函数控制

GrowthBook 运行时门控

除编译时 feature() 外,还有 运行时 门控通过 GrowthBook 实现:

typescript
// 运行时特性检查(不被编译消除)
const isEnabled = growthbook.isOn('feature_name')

// 带缓存的特性检查
const cached = getCachedFeature('feature_name', {
  staleMs: 5 * 60 * 1000,  // 5 分钟缓存
  fallback: false
})

GrowthBook 与 feature() 的区别

维度feature()GrowthBook
时机编译时运行时
产物影响代码被消除代码保留
变更方式重新构建远程配置刷新
用途构建变体(如 Mobile/Desktop)A/B 测试、灰度发布
回退无回退(固化)有默认值和缓存

对代码结构的影响

CLI 路由 (cli.tsx)

cli.tsx 中约有 30 个 feature-gated 路径。在 main() 函数内使用 if (feature('FLAG')) 分支条件导入对应模块:

  • BRIDGE_MODE → 导入 bridge 模块
  • DAEMON → 导入 daemon 模块
  • BG_SESSIONS → 导入会话管理模块
  • 等等

当 Flag 为 false 时,整个 if 分支(包括 import())会被 Bun bundler 通过 tree-shaking 消除。

工具注册 (tools.ts)

getTools() 函数返回工具列表,内部通过多种门控方式注册工具:

  • 始终包含:FileReadTool, FileEditTool, FileWriteTool, BashTool, GlobTool, GrepTool, AgentTool, WebFetchTool, WebSearchTool 等
  • 环境变量门控process.env.USER_TYPE === 'ant' 时添加 REPLTool, SuggestBackgroundPRTool
  • Feature Flag 门控
    • feature('PROACTIVE') || feature('KAIROS') → SleepTool
    • feature('AGENT_TRIGGERS') → CronCreateTool, CronDeleteTool, CronListTool
    • feature('WEB_BROWSER_TOOL') → WebBrowserTool
    • feature('WORKFLOW_SCRIPTS') → WorkflowTool
    • feature('UDS_INBOX') → ListPeersTool
    • feature('HISTORY_SNIP') → SnipTool
    • feature('CONTEXT_COLLAPSE') → CtxInspectTool
    • 等等

快捷键定义 (keybindings)

部分快捷键仅在特定 Feature Flag 启用时生效,通过条件判断注册。例如 KAIROS、VOICE_MODE 等 Flag 会控制是否注册对应的快捷键绑定。

注意:实际代码中不存在 registerKeybinding 函数,快捷键通过 src/keybindings/ 目录中的模块管理。

构建变体

不同部署目标使用不同的 Feature Flag 组合:

构建目标启用的 Flag说明
CLI (标准)大部分 Flag完整 CLI 体验
SDK (-p 模式)最小集无 UI、无 Bridge
MCP ServerMCP 相关仅 MCP 协议
Bridge ClientBRIDGE_MODE + 基础claude.ai 桥接
Enterprise全部 + TEAM_MEMORY企业全功能