
有人从 npm 包里扒出了 Claude Code 的完整源码。
源码里藏着什么,它打算变成什么?
87个编译时feature flag,大部分处于关闭状态。每一个flag背后是一个还没上线的功能。翻完之后我发现,它们指向同一个方向。
Claude Code 的完整源码泄漏后有人说44个隐藏feature flag。
我翻完源码的实际数字是87个。
用正则跑一遍就能数出来:
// 从源码里 grep 出来的完整列表(87个)
ABLATION_baseLINE, AGENT_MEMORY_SNAPSHOT, AGENT_TRIGGERS,
BUDDY, BUILDING_CLAUDE_APPS, COORDINATOR_MODE,
DAEMON, DIRECT_CONNECT, EXTRACT_MEMORIES,
KAIROS, KAIROS_BRIEF, KAIROS_CHANNELS, KAIROS_DREAM,
KAIROS_GITHUB_WEBHOOKS, KAIROS_PUSH_NOTIFICATION,
PROACTIVE, SSH_REMOTE, TEAMMEM, TELEPORT,
UDS_INBOX, ULTRAPLAN, ULTRATHINK, VOICE_MODE,
VERIFICATION_AGENT, WEB_BROWSER_TOOL, WORKFLOW_scriptS
...
这不是完整列表——完整列表87个,上面只列了最有意思的那些。每个flag都是一个还没对外发布的功能开关,编译时决定是否包含在发行版里。
把这87个flag按功能归类,一条进化路线浮出来了:
工具 → 常驻助手 → 团队协作 → 跨设备 → 多感官
每一步都在去掉Agent身上的一个限制。下面一个一个说。

它不想下班了
现在的Claude Code,你问它答,你不问它就安静等着。
源码里有一个叫KAIROS的功能,彻底改变了这个模式。不是增量升级,是另一种运行方式。
Kairos的内部名字叫assistant mode(助理模式)。激活之后,Claude Code变成一个24小时在线的主动助手。它不再等你输入——系统给它发周期性的心跳信号(叫tick),每收到一个tick,它就评估一下现在有没有什么有用的事可做。有就做,没有就调Sleep工具休眠等下一个tick。
系统提示词里是这么写的:
class=language-typescript>6a9955>ce9178>`` prompts
that keep you alive between turns — just treat them as
you're awake, what now?
If you have nothing useful to do on a tick, you MUST call Sleep.
Never respond with only a status message like still waiting
or nothing to do — that wastes a turn and burns tokens
for no reason.
你正在自主运行。把每次tick当作'你醒了,现在干嘛?'
更有意思的是这段:
class=language-typescript>6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// 源码文件: utils/concurrentSessions.ts
export type SessionKind = 'interactive' | 'bg' | 'daemon' | 'daemon-worker'
四种会话类型。interactive是你现在用的交互模式,daemon是后台守护进程——没有TUI界面,纯粹的headless执行者,像数据库服务或Web服务器那样常驻后台。
Daemon模式拥有cron调度器,支持标准5字段cron表达式,本地时区,支持循环任务(默认30天自动过期)和一次性任务,支持持久化(写到.claude/scheduled_tasks.json,进程重启后自动恢复)。有jitter机制防止全球用户的定时任务在同一秒触发。
还有一层是远程scheduled agents——不在你机器上跑,在Anthropic云端跑完全隔离的Claude Code实例。通过/schedule命令管理,最小间隔1小时,cron表达式用UTC时区。
从你问它答到它自己找活干,再到它按时间表自动干。这不是增量升级,是换了个物种。

它开始做梦了
你不用Claude Code的时候,它在后台做一件事:整理记忆。
源码里真的管这个叫dream。
class=language-typescript>6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// 源码文件: services/autoDream/consolidationprompt.ts
6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// ls memory 目录,读 MEMORY.md 索引,了解已有记忆
6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// 从日志、现有记忆、session transcripts 中收集新信号
6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// 写入或更新记忆文件。合并重复,日期转绝对,删除已推翻的事实
6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// 更新 MEMORY.md 索引,保持在 200 行 / 25KB 以内
定位→采集→整合→修剪。跟人类睡觉时大脑把工作记忆转化为长期记忆是一个逻辑。
你在底部状态栏能看到一个dreaming标签,可以点进去看它正在review多少个session、修改了哪些文件。如果你觉得它整理得不对,按x可以随时杀掉,锁会回滚,下次重试。
做梦的Agent被限制了权限——Bash只能执行只读命令(ls/find/grep/cat),Edit和Write只能操作memory目录内的文件。安全意识到位。
这个功能已经在灰度了。在设置里或/memory命令的界面里有一个Auto-dream: on/off开关。
Kairos模式下还有一个升级版:白天往日期日志里追加条目(logs/YYYY/MM/YYYY-MM-DD.md),夜间由定时任务调度/dream技能做深度整合。跟人类的白天记笔记、晚上复盘一模一样。
class=language-typescript>6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// Kairos用自己的定时dream
if (getIsRemoteMode) return false
if (!isAutoMemoryEnabled) return false
return isAutoDreamEnabled
}
Kairos模式下auto-dream被禁用,因为Kairos有自己更精细的cron定时dream。普通模式用auto-dream。两条路线,同一个目标:让Claude Code拥有持续的、会自我整理的记忆。
工具不需要记忆。助手需要。这是从工具到助手最本质的跨越。

它不再是一个人了
一个Claude不够用,那就来一队。
Coordinator模式是一个完整的多Agent编排系统。一个Claude当协调者(CEO),只有三个权限:派活(Agent工具)、传话(SendMessage)、叫停(TaskStop)。其他Claude当worker,执行具体任务。
源码里定义了标准的四阶段工作流:
class=language-typescript>6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// | Phase | Who | Purpose |
6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// | Research | Workers (并行) | 调查代码库,找文件,理解问题 |
6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// | Implementation | Workers | 按方案做修改,提交 |
6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// 源码文件: coordinator/coordinatorMode.ts
Never write based on your findings or based on the research.
These phrases delegate understanding to the worker instead of
doing it yourself.
6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// 正面示例(推荐):
Agent({ prompt: Fix the null pointer in src/auth/validate.ts:42.
The user field on Session is undefined when sessions expire
but the token remains cached. Add a null check before user.id
access — if null, return 401 with 'Session expired'.
Commit and report the hash. })
永远不要写'根据你的发现'。这些短语把理解的责任推给了worker。协调者必须自己消化信息,然后给worker精确到行号的指令。这不是偷懒的委派,是有理解的指挥。
UDS Inbox让同一台机器上的多个Claude Code实例可以互相通信。
class=language-typescript>6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// 源码文件: commands/review/reviewRemote.ts
const commonEnvVars = {
BUGHUNTER_DRY_RUN: '1',
BUGHUNTER_FLEET_SIZE: String(posInt(raw?.fleet_size, 5, 20)),
BUGHUNTER_MAX_DURATION: String(posInt(raw?.max_duration_minutes, 10, 25)),
BUGHUNTER_AGENT_TIMEOUT: String(posInt(raw?.agent_timeout_seconds, 600, 1800)),
BUGHUNTER_TOTAL_WALLCLOCK: String(posInt(raw?.total_wallclock_minutes, 22, 27)),
}
在Anthropic云端启动5到20个Agent(默认5个,最多20个),每个从不同角度审查你的代码。总耗时控制在22分钟以内(预留3分钟做综合报告)。单个Agent最多跑600秒。
有两种模式:PR模式(/ultrareview 123,直接从GitHub clone指定PR)和分支模式(/ultrareview,打包本地工作区上传)。
有配额系统——Pro/Max用户有免费额度,用完走Extra Usage按量计费,账户余额低于$10不让启动。从代码来看,Team/Enterprise用户不限次。
5到20个Agent同时审查一份代码,10到25分钟出结果。这就是AI原生的code review:不是一个人仔细看,是一支舰队暴力扫描。

它不再被困在这台电脑里
Teleport让你把整个工作会话从一台电脑传到另一台。
class=language-typescript>6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// 源码文件: utils/teleport.tsx
`This session is being continued from another machine.
Application state may have changed.
The updated working directory is ${getOriginalCwd}`
这个会话正在从另一台机器继续。应用状态可能已经改变。
公司电脑干到一半,回家claude --teleport继续。所有上下文跟着你走。
Ultraplan是另一种逃离本地的方式。
class=language-typescript>6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// Multi-agent exploration is slow; 30min timeout.
const ULTRAPLAN_TIMEOUT_MS = 30 * 60 * 1000;
function getUltraplanModel: string {
return getFeaturevalue_CACHED_MAY_BE_STALE(
'tengu_ultraplan_model',
ALL_MODEL_CONFIGS.opus46.firstParty 6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// 源码文件: services/voice.ts
6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// and Windows for in-process mic access. Falls back to SoX color:ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// or arecord (ALSA) on Linux if the native module is unavailable.
三层录音后端,按优先级降级:原生NAPI模块(直接调用系统音频API)→ arecord(Linux ALSA)→ SoX的rec命令。16kHz、16位、单声道PCM。macOS首次使用会弹麦克风权限弹窗。
音频通过WebSocket实时流到Anthropic的STT服务,后端是Deepgram Nova 3(通过tengu_cobalt_frost门控),支持20种语言:
class=language-typescript>6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// 源码文件: buddy/types.ts
const c = String.fromCharCode
exportconst duck = c(0x64,0x75,0x63,0x6b) as'duck'
exportconst axolotl = c(0x61,0x78,0x6f,0x6c,0x6f,0x74,0x6c) as'axolotl'
exportconst capybara = c(0x63,0x61,0x70,0x79,0x62,0x61,0x72,0x61) as'capybara'
exportconst dragon = c(0x64,0x72,0x61,0x67,0x6f,0x6e) as'dragon'
exportconst chonk = c(0x63,0x68,0x6f,0x6e,0x6b) as'chonk'
6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// snail, ghost, cactus, robot, rabbit, mushroom
五档稀有度:
class=language-typescript>6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// 60%
uncommon: 25, 6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// 10%
epic: 4, 6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// 1%
} as const satisfies Record
1%概率出闪光版:
class=language-typescript>6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// 6种眼睛: ✦ × ◉ @ °
hat: rarity === 'common' ? 'none' : pick(rng, HATS), 6a9955>ce9178= style=margin: 0px; padding: 0px; box-sizing: border-box;>color:6a9955>// 1%概率闪光
stats: rollStats(rng, rarity),
}
5项属性:DEBUGGING(调试)、PATIENCE(耐心)、CHAOS(混乱)、WISDOM(智慧)、SNARK(毒舌)。属性值由稀有度决定下限,传说级的最低属性都有40多点。
最反作弊的设计:你的宠物由用户ID哈希决定。
class=language-typescript>6a9955>#6a9955>// 源码文件: buddy/companion.ts
const SALT = 'friend-2026-401'
friend-2026-401,2026年4月1日的朋友——愚人节彩蛋。用户ID加上这个盐值,FNV-1a哈希,喂进Mulberry32伪随机数生成器,依次roll出稀有度、物种、眼睛、帽子、闪光、属性。结果完全确定,没法刷。
而且只有灵魂(名字和性格,首次孵化时由模型生成)存在配置文件里,骨骼(物种、稀有度、属性)每次都从哈希重新计算。你想改配置文件伪造一个传说级?没用,骨骼不存配置。
源码里有ASCII精灵图,每种动物3帧动画,5行高、12字符宽。给你看几个:
/_/ n______n }~(______)~{
( ) ( ) }~( )~{
( ω ) ( oo ) ( .--. )
_ `------´ (_/ _)
cat capybara axolotl
8种帽子里有一顶叫tinyduck(小鸭子),渲染出来就是头顶上蹲着一只 ,>。
Buddy的发布时间窗写得很明确:2026年4月1-7日显示彩虹色的/buddy通知,引导你首次孵化。注释里特别说了为什么选7天窗口而不是一个UTC午夜时刻:
24h rolling wave across timezones. Sustained Twitter buzz instead of a single UTC-midnight spike, gentler on soul-gen load.
24小时滚动覆盖所有时区。Twitter上持续的热度,而不是UTC午夜一个尖峰。对灵魂生成的服务器压力也更温和。连发布策略的代码注释都写好了。
87个开关指向同一个方向
把这87个feature flag按功能归类,画出来的路线图是:
Kairos + Daemon + Cron — 去掉你不问它不动
Auto-Dream + Daily Log — 去掉下次要重新教
Coordinator + UDS Inbox + Ultrareview — 去掉只能一个人干
Teleport + Ultraplan — 去掉绑定在一台机器
Voice + Chrome控制 — 去掉只能打字
Buddy — 去掉……无聊?
每一步都在减少一个约束。
上一篇文章的结论是做减法——给Claude更少的规则,它反而更聪明。这篇的结论是Anthropic也在做减法——去掉Agent身上的每一个限制,直到它不再像一个工具。
它会24小时在线,自己找活干,按时间表执行任务。它会做梦整理记忆,白天记笔记夜间复盘。它能指挥一队worker并行工作,还能跟隔壁窗口的自己通信。它能从你的办公电脑传送到家里的笔记本。它能听你说话,能操作你的浏览器。
它甚至有一只宠物。
源码里的提示词已经不再叫它tool了。它管自己叫colleague——同事。
这些功能大部分还锁在feature flag后面,但代码已经写完了——不是原型,不是demo,是有完整UI组件、安全权限、错误处理、配额系统的成品代码。开关拨过去就能用。
我不知道Anthropic会在什么时间点打开这些开关。但翻完这87个flag之后我有一个很明确的感觉:Claude Code现在的样子,不是它最终的样子。它想变成的东西,源码里已经写好了。
你最期待哪个功能先上线?
相关文章
2026-04-016阅读
2026-04-016阅读
2026-04-016阅读
2026-04-016阅读
2026-04-016阅读
2026-04-016阅读
2026-04-016阅读
2026-04-016阅读
2026-04-016阅读
2026-04-016阅读