特性标志系统
概述
Claude Code 使用 feature() 函数实现特性标志,控制实验性功能的开关。在正式构建中,这些标志由 bun:bundle 在构建时决定;在反编译版本中,全部返回 false。
feature() 函数
typescript
// Source: src/entrypoints/cli.tsx:2
const feature = (_name: string) => false;构建时 vs 运行时
在正式构建中,Bun 打包器会在构建时将 feature() 调用替换为常量 true/false,然后通过 Dead Code Elimination (DCE) 移除未启用的代码分支。
在反编译版本中,polyfill 使所有标志返回 false,相关代码变成死代码但仍存在于源码中。
已知特性标志
| 标志名 | 功能 | 状态 |
|---|---|---|
BRIDGE_MODE | 远程桥接模式(Always-On) | 禁用 |
DAEMON | 后台守护进程 | 禁用 |
BG_SESSIONS | 后台会话管理 (ps/logs/attach) | 禁用 |
TEMPLATES | 模板任务 (new/list/reply) | 禁用 |
KAIROS | 助手模式 | 禁用 |
SSH_REMOTE | SSH 远程执行 | 禁用 |
LODESTONE | 深度链接 URI (cc://) | 禁用 |
ABLATION_BASELINE | A/B 测试基线 | 禁用 |
COORDINATOR_MODE | 协调器/编排器模式 | 禁用 |
PROACTIVE | 主动建议 | 禁用 |
WEB_BROWSER_TOOL | 浏览器自动化工具 | 禁用 |
CHICAGO_MCP | Computer Use MCP | 禁用 |
TOKEN_BUDGET | Token 预算管理 | 禁用 |
HISTORY_SNIP | 历史消息裁剪 | 禁用 |
VOICE_MODE | 语音模式 | 禁用 |
SELF_HOSTED_RUNNER | 自托管运行器 | 禁用 |
BYOC_ENVIRONMENT_RUNNER | BYOC 环境运行器 | 禁用 |
使用模式
条件工具加载
typescript
// Source: src/tools.ts
if (feature('WEB_BROWSER_TOOL')) {
tools.push(WebBrowserTool); // 永远不会执行
}
if (feature('PROACTIVE')) {
tools.push(REPLTool); // 永远不会执行
}快速路径分支
typescript
// Source: src/entrypoints/cli.tsx
if (feature('BRIDGE_MODE')) {
// 远程桥接逻辑 — 死代码
await bridgeMain(args);
}
if (feature('DAEMON')) {
// 守护进程逻辑 — 死代码
await daemonMain(args);
}条件导入
typescript
// Source: src/bootstrap/state.ts
if (feature('VOICE_MODE')) {
const { VoiceProvider } = await import('./voice.js');
// 永远不会执行
}与 GrowthBook 的关系
在正式版本中,部分特性标志通过 GrowthBook(远程特性管理平台)控制:
typescript
// Source: src/entrypoints/init.ts:94-106
const { refreshGrowthBook } = await import('./growthbook.js');
// GrowthBook 可以远程开关特性在反编译版本中,GrowthBook 是空实现,不影响任何标志。
对代码理解的启示
当你看到 feature() 调用时:
- 它控制的代码是死代码 — 在反编译版本中永远不会执行
- 但代码仍然存在 — 可以阅读了解 Anthropic 的功能规划
- 不要试图启用它 — 可能依赖未包含的服务/基础设施
下一步
- Agent 工具 — 子代理系统的实现