用 Unicode 方块字符绘制的品牌形象,3行高,有 4 个姿势 + 动画。点击会触发蹲跳或左顾右盼动画 (60ms/帧)
18 种物种 × 6 种眼型 × 8 种帽子 × 5 个稀有度 × 1% 闪光。基于 userId 哈希确定性生成,不可作弊
| ID 来源 | 什么时候有 | 换设备会变? | 存在哪 |
|---|---|---|---|
| accountUuid(优先) | /login 登录了 Claude.ai | 不变——同账号同宠物 | ~/.claude.json → oauthAccount.accountUuid |
| userID(备选) | 首次启动自动生成 UUID | 变——新设备新 ID 新宠物 | ~/.claude.json → userID |
| 'anon'(兜底) | 都没有(极少见) | 全球同一个宠物 | 不存储 |
对话气泡 (AI 评论你的代码) + 抚摸爱心特效 + 待机动画序列
15 步循环 @ 500ms/tick:大部分时间静止(frame 0),偶尔扭动(frame 1-2),极少眨眼
4 种加载效果:标准 Spinner → 微光扫光 → 超时变红 → 减少动画模式
3 种交互模式 + Vim + Agent 染色。每种模式有独立的提示符颜色和行为
启动时显示 Clawd + 版本信息 + 多列 Feed 卡片(最近活动、更新日志、新手引导)
Ctrl+O 切换。三层结构:ScrollBox(消息区) + Bottom(输入+宠物) + StatusLine(状态栏)
6 套主题 (dark/light/daltonized/ansi) + auto 跟随系统。70+ 语义色彩变量
启动时状态栏闪现 15 秒
行级 + 词级 Diff 着色,用于 Edit 工具结果展示
不是简单的弹窗问 y/n。每个工具调用经过 7 层检查,越靠近危险操作的层级越不可绕过。即使用户选"全部放行",改 .bashrc 仍然要确认
这些命令可以执行任意代码。即使用户之前允许了 npm install:*,npm run build 仍然要重新确认
所有路径检查大小写不敏感:.cLauDe/Settings.locaL.json 无法绕过
5 层 Agent 架构:从单体主 Agent 到多 Worker 团队编排,包含 Fork 分身、Team Swarm、Coordinator 模式。源码级完整解析
省略 subagent_type 参数时触发。继承父对话完整上下文 + system prompt,共享 prompt cache(关键优化)
通过 TeamCreate / SendMessage / TaskCreate 实现多 Agent 长期协作
Coordinator 是纯编排者,自己不用工具,只指挥 Worker。4 阶段流水线
| 情况 | 选择 | 原因 |
|---|---|---|
| 调研者探索的文件正好要改 | Continue | 文件已在上下文 |
| 调研范围广但实现范围窄 | Spawn | 避免噪音 |
| 纠正失败或扩展工作 | Continue | 保留错误上下文 |
| 验证别人写的代码 | Spawn | 新鲜眼光,避免先入为主 |
| 方向完全错误的重试 | Spawn | 错误上下文会锚定思维 |
| 完全无关的新任务 | Spawn | 无可复用上下文 |
从主 Agent 决定派活到子 Agent 返回结果,每一步的源码位置与数据流
| 规则 | 筛选内容 | 源码 |
|---|---|---|
| ALL_AGENT_DISALLOWED | AgentTool(防递归)、TaskOutputTool、EnterPlanMode、TaskStopTool、WorkflowTool | constants/tools.ts |
| CUSTOM_AGENT_DISALLOWED | 自定义 Agent 额外禁用的工具(安全边界) | constants/tools.ts |
| ASYNC_AGENT_ALLOWED | Read/Glob/Grep/WebSearch/WebFetch + Edit/Write/Bash + Skill/ToolSearch | constants/tools.ts:55-71 |
| IN_PROCESS_TEAMMATE | 额外允许 TaskCreate/Get/List/Update + SendMessage + Cron 工具 | constants/tools.ts:77-88 |
| mcp__* 前缀 | MCP 工具始终放行(不受上述规则限制) | agentToolUtils.ts:82 |
5 层优先级覆盖 + 每种 Agent 的默认模型 + Fast Mode 机制
| Agent | 默认模型 | 原因 | 可覆盖 |
|---|---|---|---|
| Explore | Haiku 4.5 | 快 + 便宜,只需读取/搜索 | ANTHROPIC_SMALL_FAST_MODEL |
| Plan | inherit(继承父) | 需要强推理能力 | input.model |
| Verification | inherit(继承父) | 需要同等能力才能有效对抗 | input.model |
| general-purpose | inherit(继承父) | 通用,需完整能力 | input.model |
| claude-code-guide | inherit(继承父) | 需要理解复杂文档 | input.model |
| statusline-setup | inherit(继承父) | 简单配置 | input.model |
| 变量 | 作用 |
|---|---|
| ANTHROPIC_MODEL | 主循环模型 |
| ANTHROPIC_DEFAULT_OPUS_MODEL | Opus 别名对应的实际模型 ID |
| ANTHROPIC_DEFAULT_SONNET_MODEL | Sonnet 别名对应的实际模型 ID |
| ANTHROPIC_DEFAULT_HAIKU_MODEL | Haiku 别名对应的实际模型 ID |
| CLAUDE_CODE_SUBAGENT_MODEL | 所有子 Agent 统一覆盖 |
| ANTHROPIC_SMALL_FAST_MODEL | Explore Agent 专用模型 |
| CLAUDE_CODE_DISABLE_FAST_MODE | 禁用 Fast Mode |
不是规则引擎,是 LLM 自己通过 tool_use 选择。Agent 工具的 prompt 里嵌入了各子代理的描述
Coordinator 自己只有 4 个工具,不能读文件、不能执行命令。所有实际工作通过 Worker 完成
Anthropic 服务端前缀缓存机制。不是"砍什么上下文",而是"砍了之后怎么保证缓存不崩"。这是 Claude Code 多 Agent 成本比其他框架低 4 倍的核心原因
每次 API 请求,Anthropic 服务器对请求内容的前缀做哈希。如果这次请求的前面部分和上次完全一样(byte-identical),那部分直接用缓存,只计算新增部分
源码 promptCacheBreakDetection.ts 中明确定义了两个 TTL 阈值
源码中有 40 个 querySource 标识不同类型的 API 调用。每种调用的缓存策略不同,分三个级别
白名单控制。典型配置:{ allowlist: ["repl_main_thread*", "sdk", "agent:*"] }
| querySource | 场景 | 为什么需要 1h |
|---|---|---|
| repl_main_thread | 你和 Claude 的主对话 | 你可能中间切出去查资料再回来,5分钟会过期 |
| repl_main_thread:outputStyle:* | 主对话 + 自定义输出风格 | 同上,不同风格是不同的缓存键 |
| sdk | SDK / API 集成调用 | 应用集成场景,请求间隔可能较长 |
| agent:builtin:Explore | Explore 搜索 Agent | 多轮搜索,每轮缓存前面的查询结果 |
| agent:builtin:Plan | Plan 规划 Agent | 规划多步骤,前面的分析不重算 |
| agent:builtin:fork | Fork 分身 | 继承父缓存,必须长 TTL 才有意义 |
| agent:builtin:verification | Verification 验证 Agent | 多步骤验证(build→test→curl→adversarial) |
| agent:custom | 用户自定义 Agent / Skill | 自定义 Agent 的多轮循环 |
| agent:default | 默认通用 Agent | 通用多步骤任务 |
有缓存但不在白名单里,用标准 5 分钟 TTL
源码注释:"short-lived forked agents where cache break detection provides no value — they run 1-3 turns with a fresh agentId each time"
API 响应里的 usage 字段揭示了缓存的三种 token 计费
| 轮次 | cache_creation | cache_read | input_tokens | 等效成本 |
|---|---|---|---|---|
| Round 1 | 10,000 | 0 | 0 | 12,500 |
| Round 2 | 2,000 | 10,000 | 0 | 3,500 |
| Round 3 | 2,000 | 12,000 | 0 | 3,700 |
| ... | ... | ... | ... | ... |
| Round 10 | 2,000 | 26,000 | 0 | 5,100 |
| 合计 | 有缓存 | ~45K token | ||
| 无缓存 (全量计算) | ~190K token | |||
缓存省 ~75% 成本
这是整个 Agent 系统里最精妙的设计。不是简单的"大的截断",而是一个三态状态机,追踪每个 tool_result 的生命周期,确保缓存前缀永远 byte-identical
超预算的 tool_result 被写到磁盘文件,模型收到的是固定格式的预览(确保所有后续轮次 byte-identical)
上下文超限时不是直接报错,而是 4 层压缩依次触发。每层解决不同类型的膨胀
Layer 3 在 Layer 4 之前跑——如果折叠就够了,就不触发代价更高的 AI 摘要
Fork 的核心优势是共享父进程的 prompt cache。任何差异都会导致缓存前缀不匹配
这不是代码优化,是基础设施优势。同样的架构跑在不同 API 上,成本差 4 倍
Claude Code 会主动监控 cache hit 率,发现异常立即上报分析。源码 promptCacheBreakDetection.ts 有完整的检测逻辑
Prompt Cache 是 Anthropic 服务端机制。中转站能否利用取决于它怎么转发请求
Prompt Cache 最多 1 小时,但对话可能持续几个小时。Claude Code 用三层协作解决这个问题:服务端缓存省钱、本地记忆持久化、智能压缩兜底
后台 Fork 子进程定期从对话中提取笔记,写到本地 ~/.claude/projects/<project>/<session>/session-memory.md
上下文接近 200K 时触发。不从零调 AI 做摘要——直接用已有的 session-memory.md
开 3 个终端窗口跑 Claude Code,缓存怎么算?答案是分层的:客户端完全隔离,但云端可以跨会话命中
关键函数 splitSysPromptPrefix() 把 system prompt 切成不同 scope 的块
| 缓存内容 | scope | 跨窗口共享? | 跨用户共享? | 占比 |
|---|---|---|---|---|
| 静态 System Prompt | global | 是 | 是(1P) | ~80% |
| 有 MCP 的 System Prompt | org | 是(同账号) | 否 | ~80% |
| 动态环境信息 | null | 否 | 否 | ~10% |
| 对话内容 | 会话级 | 否 | 否 | ~10% 起递增 |
Prompt cache 不是存文本,是存 Transformer 注意力层的 Key-Value 矩阵。跳过的是计算,不是传输
Claude Code 支持 4 种图片格式 + PDF 文档,不支持视频和音频
| 平台 | 方法 | 速度 | 源码 |
|---|---|---|---|
| macOS | 原生 NSPasteboard(image-processor-napi) | ~5ms 冷启 / <1ms 热 | imagePaste.ts |
| macOS (fallback) | osascript | ~1.5s | imagePaste.ts |
| Linux | xclip / wl-paste | — | imagePaste.ts |
| Windows | PowerShell Get-Clipboard -Format Image | — | imagePaste.ts |
聊天输入框里的完整 Vim 编辑器。用 /vim 命令开关。15 种移动 + 3 种操作符 + 20 种文本对象 + 4 种查找 + 数字前缀组合。写长 prompt 时效率差异巨大
分层设计,用户可通过 ~/.claude/keybindings.json 覆盖
96 个 feature flag 控制功能灰度。双层开关(编译时消除 + 运行时 GrowthBook)。内置沙箱隔离 Bash 命令。GrowthBook 可按用户属性远程控制功能开关
展示 20 / 96 个。完整列表包含遥测、安全、A/B 实验等分类
Claude Code 启动时带着你的用户属性去问 GrowthBook 服务器:"我应该得到什么值?"。你完全不知道自己在被测试
| 控制维度 | 属性字段 | 可以做的事 |
|---|---|---|
| 按订阅类型 | subscriptionType | Pro 用户有 Coordinator,免费用户没有 |
| 按组织 | organizationUUID | 某公司的所有员工开启/关闭特定功能 |
| 按 API 端点 | apiBaseUrlHost | 检测中转站用户,调整功能 |
| 按平台 | platform | macOS 开沙箱,Linux 不开 |
| 按用户 ID | id (deviceId) | A/B 测试:50% 用户有功能 X,50% 没有 |
| 按版本 | appVersion | 旧版本禁用有 bug 的功能 |
Claude Code 内置 @anthropic-ai/sandbox-runtime 包,在你电脑上创建一个隔离环境执行 Bash 命令。macOS 用 sandbox-exec,Linux 用 bwrap(bubblewrap)
Claude Code 内置 665 种遥测事件。源码分析:它收集什么、不收集什么、怎么关闭、以及远程控制能做到什么程度
三个隐私等级,由低到高。每级关闭不同的东西
| 条件 | 效果 | 源码位置 |
|---|---|---|
| 使用 AWS Bedrock | 遥测自动关闭(isAnalyticsDisabled) | analytics/config.ts |
| 使用 Google Vertex | 遥测自动关闭 | analytics/config.ts |
| 使用 Foundry | 遥测自动关闭 | analytics/config.ts |
| NODE_ENV=test | 遥测 + 反馈调查关闭 | analytics/config.ts |
| 遥测关闭(Level 1/2) | GrowthBook 连带关闭(依赖 1P 事件日志) | growthbook.ts:422 |
源码 metadata.ts — 665 种事件类型,每个都携带以下字段
每个事件附带用途说明。点击分类展开。所有事件发送到 Datadog + Anthropic 内部 1P 分析系统。事件本身是被动观察(传感器),不直接控制功能。但观察数据会反馈到 GrowthBook 决策
虽然不发代码内容,但 665 种事件的元数据组合起来可以知道:
基于源码中 GrowthBook 的用户属性字段,以下操作在技术上完全可行
| 操作 | 依赖的字段 | 效果 |
|---|---|---|
| 精确封禁单个用户 | accountUUID | 所有功能静默关闭 |
| 封禁整个组织 | organizationUUID | 公司所有人失去特定功能 |
| 限制中转站用户 | apiBaseUrlHost | 检测到非官方端点 → 降级功能 |
| 成本惩罚(软围剿) | subscriptionType | 关闭 1h 缓存 → 成本涨 4 倍 |
| 免费用户降级 | subscriptionType=free | 关闭 Agent/Coordinator/Voice 等 |
| 按平台限制 | platform | 比如只在 macOS 开沙箱 |
| GrowthBook Flag 名 | 控制什么 | 影响 |
|---|---|---|
| tengu_prompt_cache_1h_config | 1 小时缓存白名单 | 关掉 → 成本涨 4 倍 |
| tengu_amber_stoat | Explore/Plan Agent 是否可用 | false → 没有快速搜索和规划 Agent |
| tengu_amber_quartz_disabled | Voice 模式紧急下线 | true → 全球语音功能立即关闭 |
| tengu_session_memory | Session Memory 是否启用 | false → 无本地记忆持久化 |
| tengu_sm_compact | Session Memory 压缩 | false → 退回传统全量 AI 摘要 |
| tengu_hive_evidence | Verification Agent | false → 无对抗性验证 |
| tengu_agent_list_attach | Agent 列表放在 attachment 而非 tool description | 影响缓存命中率 |
| tengu_cobalt_raccoon | 抑制主动 autocompact | true → 只靠 reactive compact |
| tengu_satin_quoll | 工具结果持久化阈值覆盖 | 按工具名设不同的截断阈值 |
| tengu_max_version_config | 版本锁 — 强制升级或禁止旧版 | 旧版本直接不能用 |
| tengu_sandbox_disabled_commands | 沙箱排除的命令列表 | 远程控制哪些命令不进沙箱 |
| tengu_sm_compact_config | Session Memory 压缩参数 | 远程调整 minTokens/maxTokens |
以上 flag 名均从源码中提取,不是猜测。Anthropic 可以随时在 GrowthBook 后台修改这些值
源码中有 214 个 GrowthBook 读取点,使用 4 种不同的读取 API。每种 API 的行为不同,决定了决策的实时性和可靠性
所有 flag 名使用代号(如 tengu_amber_stoat),故意不用可读名称——防止外部猜测功能含义
| Flag 名 | 类型 | 控制什么 | 默认值 | 影响 |
|---|---|---|---|---|
| tengu_amber_stoat | bool | Explore/Plan Agent | true | false→无搜索/规划Agent |
| tengu_amber_quartz_disabled | bool | Voice 模式紧急下线 | false | true→全球语音关闭 |
| tengu_session_memory | bool | Session Memory | false | true→启用记忆持久化 |
| tengu_sm_compact | bool | SM 压缩 | false | true→用 SM 做压缩 |
| tengu_hive_evidence | bool | Verification Agent | false | true→启用对抗性验证 |
| tengu_agent_list_attach | bool | Agent 列表放 attachment | false | true→减少10%缓存浪费 |
| tengu_prompt_cache_1h_config | object | 1h 缓存白名单 | {} | {allowlist:[...]}控制谁有1h缓存 |
| tengu_satin_quoll | object | 工具结果持久化阈值 | {} | {tool_name:chars}按工具设截断 |
| tengu_sm_compact_config | object | SM 压缩参数 | {} | 远程调整 minTokens/maxTokens |
| tengu_cobalt_raccoon | bool | 抑制主动 autocompact | false | true→只靠 reactive compact |
| tengu_slim_subagent_claudemd | bool | 子 Agent 跳过 CLAUDE.md | true | false→子Agent加载全量CLAUDE.md |
| tengu_scratch | bool | Scratchpad 共享目录 | — | Worker 间共享文件的临时目录 |
| tengu_ultraplan_model | string | UltraPlan 使用的模型 | opus46 | 远程指定云端规划用什么模型 |
| tengu_sandbox_disabled_commands | object | 沙箱排除的命令 | {commands:[],substrings:[]} | 远程控制哪些命令不进沙箱 |
| tengu_max_version_config | object | 版本锁 | — | 强制升级或禁止旧版运行 |
| tengu_auto_background_agents | bool | Agent 自动后台化 | false | true→120s后自动转后台 |
| tengu_destructive_command_warning | bool | 危险命令警告 | — | 额外的危险命令提示 |
| tengu_thinkback | bool | ThinkBack 年度回顾 | — | 控制 /think-back 命令可用性 |
| tengu_lodestone_enabled | bool | Lodestone 功能 | — | 内部功能门控 |
| tengu_chrome_auto_enable | bool | Chrome 扩展自动启用 | — | 控制 Claude in Chrome 自动连接 |
| tengu_desktop_upsell | bool | 桌面版推广 | — | 是否显示桌面 App 推广 |
| tengu_immediate_model_command | bool | /model 命令即时执行 | — | 模型切换命令是否立即生效 |
| tengu_willow_mode | bool | 未知内部功能 | — | 代号功能,源码中无明确注释 |
| tengu_marble_fox | bool | 附件处理实验 | — | attachments.ts 中使用 |
| tengu_amber_flint | bool | Amber 模型变体 A | — | A/B 模型实验 |
| tengu_amber_prism | bool | Amber 模型变体 B | — | A/B 模型实验 |
| tengu_amber_json_tools | bool | JSON 工具格式实验 | — | 工具调用格式变体 |
| tengu_cobalt_harbor | bool | Cobalt 实验 A | — | A/B 实验 |
| tengu_cobalt_lantern | bool | Cobalt 实验 B | — | A/B 实验 |
| tengu_bridge_repl_v2 | bool | REPL Bridge v2 | — | bridgeEnabled.ts 新版远程协议 |
| tengu_bridge_system_init | bool | Bridge 系统初始化 | — | 桥接模式启动参数 |
| tengu_ccr_bridge | gate | CCR 远程桥接 | — | 云端远程执行入口(blocking gate) |
| tengu_ccr_mirror | bool | CCR 镜像模式 | — | 远程执行镜像功能 |
| tengu_ccr_bundle_seed_enabled | gate | CCR Bundle Seed | — | 远程沙箱预打包 |
| tengu_coral_fern | bool | Memory 目录功能 | — | memdir.ts 记忆目录 |
| tengu_herring_clock | bool | Memory 定时功能 | — | memdir.ts 记忆定时提取 |
| tengu_terminal_panel | bool | 终端面板 UI | — | REPL.tsx 终端分屏 |
| tengu_terminal_sidebar | bool | 终端侧边栏 | — | REPL.tsx 侧边栏布局 |
| tengu_kairos_brief | bool | KAIROS 简洁模式 | — | 主动式 AI 的简洁版 |
| tengu_remote_backend | bool | 远程执行后端 | — | UltraPlan 云端后端 |
| tengu_attribution_header | bool | 署名头 | — | system prompt 中的署名行 |
| tengu_pebble_leaf_prune | bool | 会话存储清理 | — | sessionStorage.ts 过期清理 |
| tengu_moth_copse | bool | 附件实验 B | — | attachments.ts 变体 |
| tengu_copper_bridge | bool | Copper 桥接实验 | — | 桥接模式变体 |
| tengu_copper_panda | bool | Copper 实验 B | — | 实验变体 |
| tengu_glacier_2xr | bool | Glacier 实验 | — | 代号功能 |
| tengu_basalt_3kr | bool | Basalt 实验 | — | 代号功能 |
| tengu_jade_anvil_4 | bool | Jade 实验 v4 | — | 代号功能 |
| tengu_lapis_finch | bool | Lapis 实验 | — | 代号功能 |
| tengu_slate_prism | bool | Slate 实验 A | — | 代号功能 |
| tengu_slate_thimble | bool | Slate 实验 B | — | 代号功能 |
| tengu_quartz_lantern | bool | Quartz 实验 | — | 代号功能 |
| tengu_surreal_dali | bool | Surreal 实验 | — | 代号功能 |
| tengu_birch_trellis | bool | Birch 实验 | — | 代号功能 |
| tengu_bramble_lintel | bool | Bramble 实验 | — | 代号功能 |
| tengu_chomp_inflection | bool | Chomp 实验 | — | 代号功能 |
| tengu_collage_kaleidoscope | bool | Collage 实验 | — | 代号功能 |
| tengu_marble_sandcastle | bool | Marble 实验 B | — | 代号功能 |
| tengu_miraculo_the_bard | bool | Miraculo 实验 | — | 代号功能 |
| tengu_strap_foyer | bool | Strap 实验 | — | 代号功能 |
| tengu_turtle_carbon | bool | Turtle 实验 | — | 代号功能 |
| tengu_passport_quail | bool | 认证相关 | — | OAuth/认证实验 |
| tengu_otk_slot_v1 | bool | OTK 插槽 v1 | — | 一次性密钥实验 |
| tengu_cicada_nap_ms | number | Cicada 休眠毫秒数 | — | 远程调轮询间隔 |
| tengu_harbor | gate | Harbor 入口 | — | blocking gate,启动时检查 |
| tengu_harbor_permissions | bool | Harbor 权限 | — | Harbor 功能的权限控制 |
| tengu_trace_lantern | bool | Beta Tracing 门控 | — | 控制 OTLP 详细追踪 |
| tengu_fgts | bool | FGTS 功能 | — | 缩写代号 |
| tengu_trusted_device_gate | string | 可信设备门控 | — | "cached"|"blocking" 变体 |
| tengu_event_sampling_config | object | 事件采样率配置 | {} | 远程调整每种事件的采样率 |
| tengu_auto_mode_config | object | Auto Mode 参数 | {} | 自动模式行为配置 |
| tengu_chair_sermon | gate | Chair 实验 | — | Statsig 迁移 flag |
| tengu_tool_pear | gate | Tool 实验 | — | Statsig 迁移 flag |
| enhanced_telemetry_beta | bool | 增强遥测 Beta | — | OTLP 追踪开关 |
与 GrowthBook 不同,这些在构建时决定。feature('FLAG') 返回 false 时,整个代码块被编译器移除(tree shaking),npm 发布版不包含这些功能的代码
遥测系统"不发代码" ≠ Anthropic 看不到你的代码。你的代码已经通过 API 调用(通道 2)发过去了。两条通道是独立的
你的对话内容走哪条路?源码级逐行验证
之前的分析是从客户端 logEvent() 调用推断发了什么。Protobuf schema 是服务端声明想要接收什么——这是 Anthropic 后端数据库的表结构定义
嵌套在每个事件里。这些字段组合起来可以精确识别一台设备——即使换了账号
| 端点 | 用途 | 含对话? | 可关? |
|---|---|---|---|
| api.anthropic.com/v1/messages | Claude API 推理 | 是 | 否 |
| api.anthropic.com/api/claude_cli_feedback | /bug 反馈 | 是 | 用户主动 |
| api.anthropic.com/api/event_logging/batch | 1P 事件日志 | 否 | 是 |
| http-intake.logs.us5.datadoghq.com | Datadog 分析 | 否 | 是 |
| api.anthropic.com/api/claude_code/metrics | BigQuery 指标 | 否 | 是 |
| api.anthropic.com/api/claude_code/* | GrowthBook flags | 否 | Level 2 |
| api.anthropic.com/api/oauth/account/* | Grove 隐私设置 | 否 | Level 2 |
| OTEL endpoint (自定义) | Beta Tracing | 可选 | 默认关 |
Claude Code 本地没有任何内容检测器。没有 NSFW 过滤、没有暴力分类、没有关键词黑名单。所有安全决策由 Anthropic API 服务端(即 Claude 模型本身)做出
| 产品 | 本地审核 | 云端审核 | 架构 |
|---|---|---|---|
| Claude Code | 无 | 模型内置 + AUP | 透明管道 — 本地不参与安全决策 |
| ChatGPT App | 有(Moderation API 预检) | 模型内置 + Moderation Endpoint | 双层 — 本地预检 + 云端判定 |
| Cursor / Copilot | 有(关键词过滤) | 各家 API 的内置审核 | 混合 — 本地预检 + 云端判定 |
遥测不发内容 ≠ Anthropic 看不到你的内容。每次对话,你的代码、文件、架构、决策过程全部通过推理 API 发给服务端。这套数据的用户画像精度远超任何广告平台
| 画像维度 | 传统广告平台 | 推理 API 天然知道的 |
|---|---|---|
| 技术栈 | Cookie 追踪访问的技术网站 | 精确到框架版本(tool_result 里的代码) |
| 技术水平 | 不知道 | 问题深度 + 代码质量 + 是否需要解释 |
| 项目内容 | 搜索关键词推测 | 完整代码库、数据库 schema、API 设计 |
| 公司/团队 | LinkedIn 自填 | CLAUDE.md 团队规范 + git remote URL |
| 消费力 | 浏览/购买历史推断 | 订阅档位 + 项目规模 + 使用强度 |
| 真实需求 | 搜索关键词猜测 | 你直接告诉 Claude 你需要什么 |
| 决策风格 | 不知道 | 每次选方案 A 还是 B 的对话记录 |
| 痛点 | 不知道 | 反复 debug 什么、什么功能搞不定 |
| 商业机密 | 不可能知道 | 产品规划、未发布功能、内部 API |
GrowthBook 的本质是 A/B 测试 + 功能开关。今天控制 feature flags,但同一套基础设施换个 payload 就是精准推送系统
| 维度 | 属性 | 可做的定向 |
|---|---|---|
| 个人 | email, accountUUID, deviceID | 精确到个人的功能开关 |
| 公司 | organizationUUID | 按公司推不同功能/定价 |
| 付费档 | subscriptionType, rateLimitTier | 按付费能力分层运营 |
| 平台 | platform (darwin/linux/win32) | Mac vs Linux vs Windows 差异化 |
| 生命周期 | firstTokenTime, appVersion | 新用户 vs 老用户不同体验 |
| 部署方式 | apiBaseUrlHost, userType | 直连 vs 企业代理 vs API 用户 |
| CI/CD | github.actor, github.repository | 知道哪个仓库在用 Claude Code CI |
设了 ANTHROPIC_BASE_URL 后,只有推理 API 走中转,所有遥测硬编码直连 Anthropic/Datadog
| 数据 | 中转站 | Anthropic | Datadog |
|---|---|---|---|
| 对话内容 | 能看 | 能看 | 看不到 |
| 遥测元数据 | 看不到 | 能看 | 能看 |
| GrowthBook 用户属性 | 看不到 | 能看 | 看不到 |
| /bug 反馈记录 | 看不到 | 能看 | 看不到 |
| API Key / OAuth Token | 能看 | 能看 | 看不到 |
Claude Code 内置了完整的语音输入系统:按住 Space 录音 → Deepgram STT 实时转文字 → 注入输入框。6 平台原生音频模块、20+ 语言、静默丢包重放、领域词汇增强。代码完整存在于 npm 发布版中,只需 OAuth 登录 + GrowthBook 未远程关闭即可激活
| 搜索项 | cli.js 中出现次数 | 说明 |
|---|---|---|
| voice | 28 | 语音相关代码 |
| voiceEnabled | 7 | 设置开关 |
| voice_stream | 2 | WebSocket 端点路径 |
| speech_to_text | 1 | STT API 路径 |
| deepgram-nova3 | 1 | Deepgram STT 引擎 |
| amber_quartz | 1 | 紧急下线 flag |
| TranscriptText | 1 | STT 响应类型 |
| startRecording | 3 | 录音 API |
| audio-capture | 2 | 原生音频模块 |
| KeepAlive | 10 | WebSocket 心跳 |
| CloseStream | 1 | 流结束信号 |
| VOICE_MODE | 0 | 编译时被替换为字面量,字符串消失 |
没有 i18n 框架。语言切换只是往 system prompt 里注入一句话。UI 永远英文。
| 层 | 语言来源 | 支持范围 | 机制 |
|---|---|---|---|
| 模型回复 | settings.language | 任何语言(模型能力决定) | system prompt 注入一句话 |
| 语音 STT | settings.language → 归一化 | 20 种(Deepgram 限制) | WebSocket 参数 language=xx |
| UI 界面 | 硬编码 | 仅英文 | 无 i18n 框架 |
| 系统语言检测 | Intl.DateTimeFormat | 任何系统语言 | 仅遥测统计,不自动应用 |
| 文件 | 功能 |
|---|---|
| vendor/audio-capture-src/index.ts | 原生音频模块 TS 包装:录音、播放、麦克风权限 |
| vendor/audio-capture/{platform}/ | 6 平台预编译 .node 二进制(CPAL 跨平台音频库) |
| services/voice.ts | 录音后端检测、依赖检查、麦克风权限、静音过滤 |
| services/voiceStreamSTT.ts | WebSocket 流式 STT 连接、协议实现、丢包重放 |
| services/voiceKeyterms.ts | 领域词汇收集(全局 + 项目名 + git 分支 + 文件名) |
| hooks/useVoice.ts | 核心 Hook:录音 + WebSocket + STT + 转写累积 |
| hooks/useVoiceIntegration.tsx | 桥接 STT 到输入框:实时预览 + 文字插入 |
| context/voice.tsx | React 语音状态上下文(idle/recording/processing) |
| commands/voice/voice.ts | /voice 命令:开关 + 5 步前置检查 |
| voice/voiceModeEnabled.ts | 资格判断:OAuth + 编译时 flag + GrowthBook 运行时 flag |
不是你问它才回答的助手,是一个自主运行的后台 AI。接收 tick 心跳自主决定做什么、通过 MCP 接收 Slack/Discord 消息、定期做"梦"整理记忆、GitHub webhook 触发自动响应。完整的自主 Agent 框架
Claude Code 趁你不用的时候,自己回顾最近几天的对话,把有价值的信息整理成笔记。下次对话直接读笔记,不用你重复说项目背景
记忆按项目目录隔离。每个项目有独立的记忆目录、独立的做梦锁、独立的会话计数。项目 A 的对话不会跑到项目 B 的记忆里
| 维度 | 项目级 memory/ | 全局 ~/.claude/memory/ |
|---|---|---|
| 存什么 | 项目技术栈、架构、已知问题、进度 | 个人偏好、通用工作规则、凭证位置 |
| 谁能读 | 只有在该项目目录下启动的 Claude Code | 所有项目都能读 |
| 做梦范围 | 只读该项目的 JSONL 会话,只写该项目的记忆 | 做梦不直接写全局记忆 |
| 锁 | 项目级 .consolidate-lock(项目 A 做梦不影响 B) | 无锁(手动维护) |
| 跨项目 | 完全隔离——法考项目的记忆不会出现在 GitNexus 里 | 共享——"不要猜端口" 所有项目都遵守 |
| 场景 | 终端版 | VS Code 扩展版 |
|---|---|---|
| 进程生命周期 | Ctrl+C 退出 = 进程死 | 关面板 ≠ 退出(VS Code 开着就活着) |
| 做梦检查时机 | 只在下次启动后的对话里 | 每轮对话结束后都检查(进程一直活着) |
| 会话计数方式 | 每次 Ctrl+C 再进 = 新会话 +1 | 每次 /clear 或重启扩展 = +1 不关不算新会话 |
| 一天不关 VS Code | — | 只算 1 个会话(不满 5,不触发) 除非中间 /clear 了 5 次 |
| 跨客户端计数 | 终端和 VS Code 的会话共同计数——看的是同一个 sessions/ 目录下的 JSONL 文件数 | |
| 功能 | 消息方向 | 你需要 | 实际作用 |
|---|---|---|---|
| Channel | 外部 → 本机 | 本机进程在运行 | Slack/Discord 消息推到 Claude 处理 |
| ULTRAPLAN/CCR | 本机 ↔ 云端 | 浏览器(任何设备) | 代码在云端运行,浏览器审批方案 |
| Push Notification | 本机 → 手机 | 手机 | 任务完成/需确认时推送提醒到手机 |
把代码推到 Anthropic 云端容器执行,用 Opus 做多 Agent 规划。浏览器审批 → 本地执行 or 远程继续。Git Bundle 代码同步 + SSE 事件流 + JWT Worker 认证
| 本地 → 云端(上传) | 云端 → 本地(回传) |
|---|---|
| 完整 git 仓库(bundle) | 只有方案文本 |
| 未 commit 的改动(stash) | 不同步修改后的文件 |
| OAuth token | 不传回 git commit |
| 自定义 system prompt | 不下载任何代码 |
不是本地关闭你的程序,是 API 服务器直接返回 429 拒绝。本地只是展示"用量已满"的 UI。即使魔改本地代码去掉所有限制提示,API 依然会拒绝你
Claude Code 本地解析这些 headers,在状态栏画进度条。用量数据是云端告诉本地的,不是本地自己计算的
| 类型 | 显示名 | 窗口 | 说明 |
|---|---|---|---|
| five_hour | session limit | 5 小时 | 短期速率限制 |
| seven_day | weekly limit | 7 天 | 周配额 |
| seven_day_opus | Opus limit | 7 天 | Opus 模型专属周配额 |
| seven_day_sonnet | Sonnet limit | 7 天 | Sonnet 模型专属周配额 |
| overage | extra usage limit | — | 超额使用(另外付费) |
配额用完后可以选择超额使用(额外付费)。但超额也可能被拒绝,源码列出了 12 种原因:
底部信息栏,通过 Hook 可自定义内容