mcpField
C
cc-canary

cc-canary

github.com/delta-hq测试与质量7646 次安装27 周前更新
代码仓库

关于 cc-canary

cc-canary 是一项用于分析 Claude 是否在特定用户工作中出现回归的技能。它通过脚本汇总会话数据,并按模型因素、用户因素和不确定因素分类,生成待补充叙述的 Markdown 报告框架。

主要功能

  1. 01按指定时间窗口汇总会话
  2. 02检测趋势转折并比较版本
  3. 03分析提示词与推理深度变化
  4. 04生成含数据表的 Markdown 框架
  5. 05按三类因素归纳发现

适用场景

  1. 01检查 Claude 近期表现是否下降
  2. 02对比模型版本在相同工作中的结果
  3. 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。

分析框架 — 三类判断

  1. 模型侧 — 相同用户/任务的结果变差;跨版本表现变差;推理深度下降
  2. 用户侧 — 项目构成发生变化;提示词变短或更像指令;出现新代码库;快捷表达词汇增多
  3. 结论不明 — 存在多重混杂因素,效应大小处于临界范围,或两种解释都说得通

你的 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 时会发生除零;注明这一混杂因素。

评论

支持 Markdown