telemetry-inspect 是 OrchestKit 的遥测管道一次性健康检查技能,用于报告写入活动、文件大小、schema 锁定覆盖率、孤儿文件和增长告警。适用场景包括:在风险较高的 hook 重构前后验证遥测是否仍按预期写入;对长期运行的项目做每周健康检查;当分析输出可疑时先检查底层数据;新增遥测文件后确认其已被识别;审计哪些文件受 schema 锁定、哪些易发生漂移。
使用方式: telemetry-inspect telemetry-inspect --session sess-abc123 telemetry-inspect --json
默认模式输出面向终端的 ASCII 报告,--json 输出结构化结果,便于管道传递或上传。
检查内容:
- 写入器活动:对每个已注册的遥测文件,给出近期写入次数(基于 mtime 扫描)和距上次写入的时间差。
- 文件健康:大小(256 KB 警告,1 MB 严重)、行数、mtime。
- Schema 锁定状态:哪些文件在 lib/telemetry-schemas.ts 中有校验器。
- 孤儿检测:.claude/{telemetry,logs,state,feedback}/ 下存在但未登记的文件(可能是过期写入器或需要 schema 的新文件),以及写入器 hook 已不存在于 src/hooks/src/ 的登记行(死写入器 → 孤儿)。
- 增长趋势:自会话开始以来的字节/小时(超过 100 KB/hr 触发告警)。
- 协调层(M168):来自 sessions.db 的实时计数(运行中会话、持有的锁、待处理 worktree 链接、技能调用),以及来自 coordination-metrics.jsonl 的写入吞吐量。
- 运行时触发普查:根据 run-hook.mjs 写入 ~/.claude/analytics/hook-timing.jsonl 的每次调用记录,判断哪些 hook 实际触发。前 4 项回答“文件是否在被写入”,此项回答更上游的问题“写入器是否在运行”。
输出示例(ASCII 模式)包含 Schema 锁定文件段、未锁定遥测文件段、孤儿文件段、运行时触发普查段和汇总段,汇总中给出管道健康(如 GREEN)、schema 覆盖率、最大文件、热点等。
实现计划(供运行该技能的 agent/LLM 参考):
- 列出已知文件:读取 lib/telemetry-schemas.ts 的 SCHEMA_LOCKED 清单获取已锁定路径,并用技能本地 references/telemetry-inventory.md 中列出的未锁定路径扩展。
- 将清单写入器与注册表闭包交叉核对:运行 node src/hooks/scripts/validate-registry.mjs(在 OrchestKit 仓库根目录执行,不在其中时优雅跳过)确认通过;对清单中每个写入器(如 posttool/metrics-bridge)用 test -f src/hooks/src/<writer>.ts 验证源文件存在。任何不是当前 src/hooks/src/ 文件的清单写入器即为孤儿,报告 🔴,绝不标为“预期但为空”;其磁盘文件无论新旧都是孤儿,清单行已过期,标记待移除。
- 对每个文件:用 Glob 解析 .claude/state/ork-metrics-*.json(可能多个);用 Read limit: 10 查看结构,用 Bash wc -l 获取行数;用 Bash stat 获取 mtime 和大小;按规则分类健康:size > 1 MB 为 critical,> 256 KB 为 warn,mtime 超过 7 天为“无近期写入”,行数为 0 为“无写入”。
- 孤儿扫描:用 Bash find .claude/{telemetry,logs,state,feedback} -type f 与已注册路径交叉核对,磁盘上不在清单中的文件即为孤儿;合并第 2 步的死写入器孤儿。
- 运行时触发普查:运行 node src/hooks/scripts/fired-census.mjs --json(仅 OrchestKit 仓库,其它环境优雅跳过——若 ~/.claude/analytics/hook-timing.jsonl 不存在则退出 0 并打印 absent-census 提示)。报告类别计数和 versions.skewed 原文(当为 true 时);普查由已安装插件跨所有项目写入,而闭包来自当前代码树,因此 NEVER 出现在比已安装构建更新的 hook 上是预期现象,不算发现。交叉引用:对第 2 步中每个存活的清单写入器查其普查行;ALIVE 但文件 0 行是真实缺陷;NEVER 属于 #2886 类,需提示但作为参考性建议。切勿仅凭 NEVER 判定 hook 已死:UNOBSERVABLE 行(调度器子项)按构造不会出现,罕见事件(WorktreeRemove、PreCompact)从这里看与坏守卫相同,下结论前应先读守卫。
- 渲染报告:默认 ASCII 表,传入 --json 则输出 JSON。
核心逻辑为确定性且只读,不向任何遥测文件写入,该技能是观察者。
协调层(M168 #1915):SQLite 协调层位于 .claude/ 之外的 ~/.local/state/orchestkit/。sessions.db 提供实时会话/锁/worktree 状态,events.jsonl 为协调事件流(goal_converged、chain_stale 等),coordination-metrics.jsonl 为 sessions.db 写入吞吐量计数器。实时计数可用 sqlite3 只读 SELECT 读取(示例命令见原始资料),DB 不存在时输出“coordination layer idle”。写入吞吐量来自 coordination-metrics.jsonl 的追加行 {ts, metric, count},由 lib/metrics-emitter.ts 在每次 sessions.db 写入时异步发出,可用 tail 与 grep 统计近期 sessions_db_write 行数。若 sqlite3 缺失或文件不存在,报告“coordination layer idle”,不报错;这些同样是只读观察。
上游 OTel 指标说明(当检查 Claude Code 自身 OTel 指标 claude_code.* 时):CC 2.1.129+ 起 claude_code.pull_request.count 也统计通过 MCP 工具提交的 PR/MR,2.1.129 之前构建的仪表盘会在切换点看到阶跃式增长,应标注而非告警;CC 2.1.161+ 起 OTEL_RESOURCE_ATTRIBUTES 值作为标签附加到所有指标数据点,支持按维度切分;CC 2.1.145+ 起 claude_code.tool OTEL span 带有 agent_id + parent_agent_id,后台子代理 span 嵌套在调度方 Agent 工具 span 下,可按 parent_agent_id 构建 trace 树;CC 2.1.174+ 起 /usage 提供 CC 原生的按组件归因(缓存未命中、长上下文、子代理、按技能/代理/插件/MCP 的成本细分,覆盖 24h/7d),可作为健康报告的交叉校验来源;CC 2.1.202+ 起工作流生成的代理遥测带有 workflow.run_id + workflow.name 属性,可按 workflow.run_id 重建整次工作流的扇出。
相关内容:lib/telemetry-schemas.ts 是 schema 锁定路径的事实来源;analytics 跨会话聚合数据(不同用例);M121 “Observability Consolidation” 里程碑。