关于 cc-canary
cc-canary 是一项用于分析 Claude 是否在特定用户工作中出现回归的技能。它通过脚本汇总会话数据,并按模型因素、用户因素和不确定因素分类,生成待补充叙述的 Markdown 报告框架。
主要功能
- 01按指定时间窗口汇总会话
- 02检测趋势转折并比较版本
- 03分析提示词与推理深度变化
- 04生成含数据表的 Markdown 框架
- 05按三类因素归纳发现
适用场景
- 01检查 Claude 近期表现是否下降
- 02对比模型版本在相同工作中的结果
- 03追踪项目或提示词变化对指标的影响
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ delta-hq/ cc-canary --skill cc-canary安装后在 Claude Code 中输入/cc-canary确认已加载。
附带文件scripts/compute_stats.py
详细介绍
cc-canary — 长篇回归分析报告
核心问题:Claude 在这位用户的工作中是否出现了退化?何时出现?
捆绑脚本 scripts/compute_stats.py 可在约 2.5 秒内完成约 95% 的工作:
扫描 JSONL 文件,运行拐点与转变日期检测,生成前后期汇总、跨版本比较、一天中的时段分析、词频、三阶段思考深度、可见性转变、逐轮比率和异常项——随后生成完整的 Markdown 框架,并填充所有表格。叙述内容的位置以 `` 标记。
默认时间窗口:60d。接受 7d / 14d / 30d / 60d / 90d / 180d。
分析框架 — 三类判断
- 模型侧 — 相同用户/任务的结果变差;跨版本表现变差;推理深度下降
- 用户侧 — 项目构成发生变化;提示词变短或更像指令;出现新代码库;快捷表达词汇增多
- 结论不明 — 存在多重混杂因素,效应大小处于临界范围,或两种解释都说得通
你的 3 个步骤
1. 运行脚本
Bash(python3 <SKILL_DIR>/scripts/compute_stats.py --window {window} --render-md /tmp/cc-canary-skeleton-{window}.md > /dev/null 2>&1)
<SKILL_DIR>:.claude/skills/cc-canary/ → 若无则使用 ~/.claude/skills/cc-canary/。
标志:--window {Nd}(必需);--include-agents(包括子 Agent 会话);--min-user-words N(默认 10)。
如果脚本失败:报告错误,使用 --include-agents 重试一次;若仍失败,则停止。绝不要改为手动计算——那是耗时的做法。
2. 阅读框架
Read /tmp/cc-canary-skeleton-{window}.md
3. 填写所有 `` 占位符并保存
Write ./cc-canary-{YYYY-MM-DD}.md
在回复末尾写上绝对路径:Wrote /Users/.../cc-canary-{date}.md · paste-ready.
叙述占位符
每个占位符的行内注释都已说明应填写的内容。概要如下:
verdict-line— HOLDING / SUSPECTED REGRESSION / CONFIRMED REGRESSION / INCONCLUSIVE + 简要理由summary— 2–4 句话:结论 + 拐点 + 最大的前后期差值。不要用反向证据来弱化结论。timeline— 用 1–2 段描述每日序列的形态xv-para— 用 1 段描述跨版本情况(若存在 §3)finding-N-class× 最多 5 项 — 行内分类标签finding-N-reason× 最多 5 项 — 最多 2–3 句话,先陈述证据。以最有力的数字开头(跨版本 Δ、§2 数值、附录比率)。不要重述信号行,也不要铺陈修辞root-cause— 用 3–5 段串联最有力的信号what-would-help— 2–4 条具体建议appendix-a1…a4, b, c, d, e, f, g, h— 每项 1 段(参见框架中的表格上下文)meta-note— 2–5 句话,使用第一人称,坦诚,不声称自己有感受,并承认这种递归关系
结论校准
- HOLDING:模型侧信号 ≤1 个
- SUSPECTED REGRESSION:模型侧信号 2–3 个
- CONFIRMED REGRESSION:模型侧信号 ≥3 个 + 存在非空的跨版本数据且显示下降 +
session_count ≥ 15+ 至少 2 个模型 +inflection.gap_sigma ≥ 1.0 - INCONCLUSIVE:
session_count < 15,或inflection.method == "fallback_split_half"且存在相互重叠的混杂因素
仅在以下情况时,结论最多为 SUSPECTED:只有一个模型;会话少于 15 个;只有一个项目且该项目在时间窗口中途才开始;拐点与明显的用户侧事件同时出现。
所需数据(session_count、模型构成、拐点检测方法、是否存在跨版本数据)都以纯文本形式呈现在框架中。
依据示例(用于 finding-N-reason)
分类:模型侧。读后写比率从 9.0 降至 1.0(-89%,令人担忧),同时跨版本数据显示,在这位用户相同的工作负载下,opus-4-7 为 0.39,而 opus-4-6 为 1.00。拐点附近没有项目构成变化——模型开始默认优先编辑。
硬性规则
- 绝不读取、grep 或 glob
~/.claude/projects/**/*.jsonl。绝不对会话文件运行jq/awk/wc。这些操作都由脚本负责。 - 绝不修改表格或数字——它们来自真实数据。
- 每个发现都必须有分类标签。
- 跨版本数据为空或
session_count < 15时,务必保留不确定性。 - 不得在未满足完整清单的情况下判定为 CONFIRMED REGRESSION。
- 不要原样保存框架——先替换每个 `` 占位符。
失败模式
- 脚本导入错误 → 检查
python3 -V是否 ≥ 3.8;使用--include-agents重试一次;否则停止。 - Skeleton < 5KB → 窗口内可能没有会话。检查脚本错误。
inflection.method == fallback_split_half→ 说明这一点;最高标为 SUSPECTED。- 跨版本 Δ 为
None→ model-A 值为 0 时会发生除零;注明这一混杂因素。