ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

如何看懂 CodeWhale 遥测设计:opt-in 采集、golden 信封与一键 kill switch 完全指南

如何看懂 CodeWhale 遥测设计:opt-in 采集、golden 信封与一键 kill switch 完全指南 如何看懂 CodeWhale 遥测设计opt-in 采集、golden 信封与一键 kill switch 完全指南【免费下载链接】CodewhaleOpen-source coding agent for your terminal, built in Rust and on a journey of continuous community improvement. Issues and PRs welcome.项目地址: https://gitcode.com/GitHub_Trending/de/CodewhaleCodeWhale 是一个用 Rust 编写的开源终端 AI 编码代理。本文带你读懂它遥测设计的三大核心机制opt-in 采集政策、golden 信封封闭 schema和一键 kill switch终止开关——即使统计默认开启你的代码、对话和凭据也永远不会离开本机。一、遥测政策为什么默认开启却敢于公开很多开源工具要么悄悄收集要么把隐私选项藏得很深。CodeWhale 的做法是默认开启 明确告知 随时退出首次交互启动时会显示一条本地化、非阻塞的告知notice version5明确列出 Codewhale 与 PostHog并直接提供关闭入口你此前的明确退出telemetry false跨版本升级持续生效隐私状态不可读时系统失败关闭fail closed——宁可关闭也不猜。一句话显示告知 ≠ 记录同意退出记录才是一票否决。相关规则定义在 crates/telemetry/src/notice.rs。二、golden 信封一次 POST 到底发什么所有界面上报的批次共用同一个信封envelope长这样节选{ schema_version: 3, notice_version: 5, sent_at: 2026-08-03T18:04:11Z, install_id: 3f2a9c1e-…-000000000001, app_version: 0.9.4, git_sha: null, surface: tui, os: macos, arch: aarch64, libc: none, tty: true, events: [ … ] }这个 schema 最狠的三点设计含义 全封闭字段除app_version、git_sha、panic_site三个有界字符串外全部是整数、布尔或封闭枚举——没有自由文本字段也没有开放键映射 六类事件install_or_upgrade、session_start、session_end、panic、product_usage、operations_summary多一个都会被拒绝️ 文档即契约测试直接解析 docs/TELEMETRY.md 里的字段名与实际序列化结构体做集合相等断言文档与代码漂移 构建失败固定样例批次golden snapshot就存放在仓库里crates/telemetry/tests/golden/v3.json接收端还会用客户端自己的 golden 批次做逐字节回灌测试——客户端、文档、服务端三者无法悄悄漂移。 关于git_sha只有发布构建Release CI 打 SHA 戳的二进制才非空本地构建无条件为 null且绝不取用户工作区的提交号——那是一条红线。事件都是计数器不是时间线主力事件session_end一次性汇总整段会话时长分桶、退出类别、提供商类型仅枚举名永不发模型 ID、功能计数器如turns、tool_calls和错误计数器仅变体判别值。没有逐回合、逐工具调用的时间线事件本身不携带任何时间戳。三、一键 kill switch三种关闭方式对比方式命令效果是否擦除本地数据⭐ opt-out持久退出codewhale config set telemetry false停采集 写 tombstone 墓碑✅ 删除 install_id、清空缓冲区擦除失败即关闭 环境变量 kill switchCODEWHALE_TELEMETRY0 codewhale仅本次运行关闭❌ 磁盘什么都不动 命令行 flagcodewhale --telemetry false单条命令关闭❌ 同上设计意图很清晰会删数据的开关必须显式持久而脚本/agent 临时设置的开关绝不能悄悄毁掉机器主人的记录。kill switch 里拼写错误的环境变量值一律解析为 off——终止开关里的 typo 绝不能变成 on。另外两个细节值得点赞仓库无法替你打开遥测仓库本地的.codewhale/config.toml和工作区.env被禁止设置telemetry与telemetry_endpoint别人的仓库不能把遥测指向他们选定的主机dry-run 审计模式把telemetry_endpoint设为空字符串批次会逐字节写入本机$CODEWHALE_HOME/telemetry/dryrun.jsonl与服务端本会收到的完全一致且永不构造任何 HTTP 客户端——这是你对照现实审计文档的方式。四、数据放哪占多少磁盘全部本地状态都在$CODEWHALE_HOME/telemetry/目录0700、文件0600文件作用buffer.jsonl待发送事件每行一个 JSON 对象dryrun.jsonl端点为空时的本地批次落点install_id.json随机 v4 UUID 及铸造时间state.json上次版本与上次 flush 尝试disabledtombstone存在即代表一切停止 两个 JSONL 都是环形缓冲512 条或 256 KiB 先到先截整个目录占用上限约 512 KiB 几百字节元数据 install_id 是纯随机 UUID绝不从主机名、MAC、machine-id、用户名等派生派生 id 设备指纹且每 90 天强制轮换⏱️ 网络发送只在会话退出时尝试一次限时 3 秒失败即丢弃批次不重试、不重排队离线机器永不积压队列。五、永不收集的红线清单docs/TELEMETRY.md 用一整段文字列出永不收集的内容提示词、补全、代码、工具参数、diff、文件内容、文件名/路径/仓库名/分支名、git remote、聊天历史、API 密钥与 token、任意模型 ID、MCP 服务器名/命令/URL、审批规则文本、错误信息原文、panic 消息文本、按键、剪贴板、截图、麦克风、摄像头、位置……接收端 telemetry-ingest/一个完整的 Cloudflare Worker源码就在这个仓库里还会做双重保险封闭字段校验批次里出现任何未知键整批400拒绝——未来客户端 bug 想偷塞一个路径或提示词会被服务端拒收而不是悄悄入库入口即剥离 IP存储行里根本没有 IP/国家/地区列handler 只读content-type与content-length两个请求头全源码无日志调用还有测试no-ip.test.ts读源码文本发现地址/地理字样直接让构建失败保留期 3 个月这是存储引擎的固定窗口是上限而非可调策略。六、想继续深挖关键文件导航资料路径遥测总文档英文即 schema 契约docs/TELEMETRY.md遥测总文档简体中文docs/zh_hans/TELEMETRY.md事件与信封定义crates/telemetry/src/event.rs、crates/telemetry/src/envelope.rs发送前决策逻辑crates/telemetry/src/decision.rs契约测试文档-代码对齐crates/telemetry/src/tests.rs接收端点校验器与说明telemetry-ingest/src/schema.ts、telemetry-ingest/README.mdpanic 事件钩子示例锚点crates/tui/src/lib.rs小结CodeWhale 的遥测设计可以浓缩成三句话默认开启但有明确告知与一键退出发送内容被封闭 schema 和 golden 测试钉死接收端在结构上就存不下 IP 和自由文本。对新手来说最实用的操作只有两条——不想被统计就执行codewhale config set telemetry false想自己验证线上数据形态就设telemetry_endpoint 看本地 dry-run 文件。【免费下载链接】CodewhaleOpen-source coding agent for your terminal, built in Rust and on a journey of continuous community improvement. Issues and PRs welcome.项目地址: https://gitcode.com/GitHub_Trending/de/Codewhale创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进