feature-flags.mdx 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. ---
  2. title: "88 个 Feature Flags - 构建时特性门控全解"
  3. description: "深入剖析 Claude Code 的 88+ 个构建时 feature flags:bun:bundle 编译时门控机制,揭示被编译器删除的隐藏功能模块。"
  4. keywords: ["feature flags", "特性标志", "构建时门控", "bun:bundle", "条件编译"]
  5. ---
  6. {/* 本章目标:完整梳理构建时 feature flag 系统的机制和所有 flag 的分类 */}
  7. ## feature() 是什么
  8. Claude Code 使用 Bun 打包器的 `bun:bundle` 模块提供编译时特性门控:
  9. ```typescript
  10. // 源码中的用法(src/tools.ts 等)
  11. import { feature } from 'bun:bundle'
  12. const SleepTool = feature('PROACTIVE') || feature('KAIROS')
  13. ? require('./tools/SleepTool/SleepTool.js').SleepTool
  14. : null
  15. ```
  16. 在 Anthropic 的内部构建中,`feature()` 在打包时被求值——返回 `true` 的代码会被保留,返回 `false` 的代码会被 **Dead Code Elimination (DCE)** 彻底移除。
  17. 在我们的反编译版本中,这个函数被兜底为:
  18. ```typescript
  19. // src/entrypoints/cli.tsx 第 3 行
  20. const feature = (_name: string) => false;
  21. ```
  22. 这意味着所有 88+ 个 feature flag 后的代码**在运行时永远不会执行**,但代码本身完整保留,可以阅读和分析。
  23. ## Flags 分类全景
  24. <CardGroup cols={2}>
  25. <Card title="Agent / 自动化" icon="robot">
  26. **15 个 flags** — 控制 AI 的自主能力边界
  27. `KAIROS` · `KAIROS_BRIEF` · `KAIROS_CHANNELS` · `KAIROS_DREAM` · `KAIROS_GITHUB_WEBHOOKS` · `KAIROS_PUSH_NOTIFICATION` · `PROACTIVE` · `COORDINATOR_MODE` · `FORK_SUBAGENT` · `AGENT_MEMORY_SNAPSHOT` · `AGENT_TRIGGERS` · `AGENT_TRIGGERS_REMOTE` · `VERIFICATION_AGENT` · `BUILTIN_EXPLORE_PLAN_AGENTS` · `MONITOR_TOOL`
  28. </Card>
  29. <Card title="基础设施" icon="server">
  30. **10 个 flags** — 控制运行环境和连接方式
  31. `DAEMON` · `BG_SESSIONS` · `BRIDGE_MODE` · `CCR_AUTO_CONNECT` · `CCR_MIRROR` · `CCR_REMOTE_SETUP` · `DIRECT_CONNECT` · `SSH_REMOTE` · `SELF_HOSTED_RUNNER` · `BYOC_ENVIRONMENT_RUNNER`
  32. </Card>
  33. <Card title="安全 / 分类" icon="shield-halved">
  34. **6 个 flags** — 增强权限判断的智能性
  35. `TRANSCRIPT_CLASSIFIER` · `BASH_CLASSIFIER` · `TREE_SITTER_BASH` · `TREE_SITTER_BASH_SHADOW` · `NATIVE_CLIENT_ATTESTATION` · `ABLATION_BASELINE`
  36. </Card>
  37. <Card title="工具 / 能力" icon="toolbox">
  38. **10 个 flags** — 新增的 AI 能力
  39. `WEB_BROWSER_TOOL` · `TERMINAL_PANEL` · `CONTEXT_COLLAPSE` · `HISTORY_SNIP` · `OVERFLOW_TEST_TOOL` · `WORKFLOW_SCRIPTS` · `VOICE_MODE` · `MCP_RICH_OUTPUT` · `MCP_SKILLS` · `UDS_INBOX`
  40. </Card>
  41. <Card title="UI / 体验" icon="palette">
  42. **8 个 flags** — 界面和交互改进
  43. `MESSAGE_ACTIONS` · `QUICK_SEARCH` · `HISTORY_PICKER` · `AUTO_THEME` · `STREAMLINED_OUTPUT` · `COMPACTION_REMINDERS` · `TEMPLATES` · `BUDDY`
  44. </Card>
  45. <Card title="平台 / 实验" icon="flask-vial">
  46. **10+ 个 flags** — 实验性和平台级功能
  47. `DUMP_SYSTEM_PROMPT` · `UPLOAD_USER_SETTINGS` · `DOWNLOAD_USER_SETTINGS` · `EXPERIMENTAL_SKILL_SEARCH` · `ULTRAPLAN` · `ULTRATHINK` · `TORCH` · `LODESTONE` · `PERFETTO_TRACING` · `SLOW_OPERATION_LOGGING` · `HARD_FAIL` · `ALLOW_TEST_VERSIONS`
  48. </Card>
  49. </CardGroup>
  50. ## 代码中的典型模式
  51. Feature flags 在代码中主要有三种使用模式:
  52. ### 模式一:条件加载工具
  53. ```typescript
  54. // src/tools.ts — 最常见的模式
  55. const MonitorTool = feature('MONITOR_TOOL')
  56. ? require('./tools/MonitorTool/MonitorTool.js').MonitorTool
  57. : null
  58. ```
  59. 当 flag 为 `false` 时,`require()` 调用被 DCE 移除,工具不会出现在可用工具列表中。
  60. ### 模式二:条件注册命令
  61. ```typescript
  62. // src/commands.ts — 注册斜杠命令
  63. if (feature('VOICE_MODE')) {
  64. commands.push({ name: 'voice', description: '...' })
  65. }
  66. ```
  67. ### 模式三:条件启用 API 特性
  68. ```typescript
  69. // src/constants/betas.ts — 控制发送给 API 的 beta header
  70. export const AFK_MODE_BETA_HEADER = feature('TRANSCRIPT_CLASSIFIER')
  71. ? 'afk-mode-2026-01-31'
  72. : ''
  73. ```
  74. <Note>
  75. 由于 `feature()` 在构建时求值,被 DCE 移除的代码不会增加最终打包体积。但在反编译版本中,这些代码全部保留——这正是我们能够进行完整分析的原因。
  76. </Note>
  77. ## 有趣的发现
  78. - **KAIROS 家族**最庞大——6 个相关 flag 控制从核心功能到推送通知的方方面面
  79. - **ABLATION_BASELINE** 是用于"科学对照实验"的——它会关闭 thinking、compaction、auto-memory 等高级功能,测量裸 API 调用的基线性能
  80. - **BUDDY** 是一个 AI 吉祥物/精灵系统——在 `src/buddy/` 目录下有完整实现
  81. - **ULTRAPLAN** 和 **ULTRATHINK** 暗示着比当前 extended thinking 更高级的推理模式