关于 report-card
report-card 将 Bullshit Detector 的 Markdown 报告转换为单个 HTML 阅读页面,也适合手机查看。它保留 Markdown 作为事实来源,并在渲染前用 tally.py 检查报告。
主要功能
- 01将 Markdown 报告渲染为独立 HTML
- 02渲染前使用 tally.py 验证报告
- 03添加评分、判定筛选和自适应声明卡片
- 04提供打印样式和链接预览元数据
- 05支持本地浏览器打开及静默脚本模式
适用场景
- 01分享便于阅读的事实核查报告页面
- 02打印带链接的报告 PDF
- 03仅查看有问题或关键声明
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ serhiikorniienko/ bullshit-detector --skill report-card安装后在 Claude Code 中输入/report-card确认已加载。
附带文件scripts/render_report.pyVERSION
详细介绍
report-card
将 bs-report-<slug>-<date>.md 转换为任何人都能打开的单个 HTML 文件。
Markdown 是产物,并且始终是产物——tally.py 会检查它,后续运行会与它进行差异比较,它也会被提交。此工具为同一文件添加面向读者的视图。它只负责渲染,不会编辑、重新计数或添加内容。页面上的每个数字都原样复制自 Markdown。
为什么需要这个工具
BS 报告是一张五列的声明表格。在笔记本电脑上,这没问题。但在手机上——人们实际打开分享链接的地方——Evidence 列无法阅读,而读者的第一个问题(“哪里有问题?”)意味着要滚动查看二十行,才能找到最重要的两行。
用法
uv run <this-skill-dir>/scripts/render_report.py ~/.bullshit-detector/reports/<YYYY>/bs-report-<slug>-<date>.md
会在 Markdown 文件旁写入 bs-report-<slug>-<date>.html。-o <path> 可将文件写到其他位置。无需安装步骤,也没有依赖项——脚本仅使用标准库,在普通的 python3 和 uv run 下都能运行,而且生成的页面不会发出任何网络请求。正是这些特性让它能在代码执行沙箱中运行;在沙箱里,HTML 是用户唯一能带走的内容。
--open会在默认浏览器中显示页面。如果没有浏览器——例如在沙箱或无头主机上——它会说明情况,但仍会写入文件。如果页面已存在,则会跳过此操作,因为重新渲染很常见(首次处理后才会最终确定运行行),而每次打开都会新建一个标签页——连续实际运行三次后,用户就有了两个标签页。文件会原地更新;重新加载已有标签页即可。--reopen即使页面已存在也会打开,适用于在之后的会话中重新查看报告。切勿将此视为失败。--quiet只打印输出路径,便于编写脚本。
交接信息块
默认情况下,脚本会打印检测器运行结束时使用的信息块:
BS score 4/10 · Mostly fine
the macro data is real and mostly checks out; the narrative glue is crypto-Twitter.
Tally: 35 claims extracted, 34 individually source-checked — 22 confirmed, 5 plausible,
5 misleading, 2 false. 1 not checked.
run: 16m30s, searches 35, tools 65, coverage 1, per claim 29s
markdown file:///Users/…/bs-report-japans-money-is-collapsing-2026-07-31.md
page file:///Users/…/bs-report-japans-money-is-collapsing-2026-07-31.html
opened in your browser
直接粘贴,不要重新整理。 所有数字都来自 tally.py 刚刚重新统计的报告。凭记忆重写你所写内容的摘要,会导致结果偏向美化本次运行——这与 tally 和搜索次数的错误模式相同,只不过更进了一层。
这些路径故意使用 file:// URL:终端会自动将裸 URL 转为链接,因此只需按住 Cmd 并单击,就能打开这两个文件。不要将它们缩短为 ~/…,也不要用链接文本隐藏它们。
合规检查
渲染前,脚本会使用检测器的 tally.py 检查报告,并且拒绝渲染未通过检查的报告:
REFUSED: bs-report-our-solar-system-2026-07-31.md does not pass tally.py.
✗ run line: 25 claims individually source-checked from 21 searches — every claim
carrying a verdict needs its own search, so this reports more verification than
was performed
退出码为 3。这正是设置检查关卡的目的:如果报告本身的算术有误,却用它生成一个如此精致的页面,就会把一份有问题的报告包装成看似权威的内容。修复检查指出的问题,然后重新运行。
--force会忽略检查结果并继续渲染,同时将问题作为警告打印出来。--no-check会跳过检查关卡——适用于并非 BS 报告的 Markdown。- 如果无法自动找到
tally.py,可使用--tally <path>或$BULLSHIT_DETECTOR_TALLY指定其路径。
如果根本没有安装 tally.py——此工具可以在未安装检测器的情况下单独安装——脚本会发出警告并继续渲染。验证器缺失应当作为警告,而不是阻止他人查看已有报告的理由。
--og-image <absolute-url> 会添加链接预览图。只有在页面托管到某处后才有用;处理本地文件时请跳过。
托管页面的标签
对于托管页面,脚本还会输出 <link rel="canonical">、Open Graph 和 Twitter 卡片标签,以及 Article 结构化数据。为此,它需要页面的公开 URL:
--canonical <absolute-url>即为该 URL。只要页面有固定地址,就传入它。- 如果不传入,页面就不会包含 canonical,也不会在结构化数据中包含
url。脚本绝不会从--og-image或其他内容中猜测 URL:错误的 canonical 会告诉搜索引擎错误的地址才是真实地址,这比不设置更糟。
--author <name> 和 --author-type Person|Organization 用于设置 Article 作者。默认作者是工具本身,因为这项技能面向所有人运行;发布时请传入你自己的姓名。
datePublished 取自报告自身的 **Checked:** 行,而不是渲染时间。对上个月完成的工作盖上今天的日期,是这份结构化数据绝不能做的事,因此如果无法读取日期,就完全不写日期。
然后告知用户文件路径,并说明可在任意浏览器中打开。在 macOS 上,运行 open <path> 即可打开。
页面相比 Markdown 增加的内容
- 分数主视觉 — 按照它应有的字号展示分数,并根据 RUBRIC 档位着色(可靠 / 基本没问题 / 夸大其词 / 大多胡说 / 捏造),旁边附上一句话结论。
- 结论筛选标签 —
Problems仅显示 ❌ 和 🟠。Load-bearing only会隐藏次要表格。这是让非技术读者读完报告的关键。 - 主张在 900px 以下显示为卡片,超过该宽度则显示为表格。行数、顺序和文本均保持不变。
- 打印样式表 — 按 Cmd-P 可生成整洁的 PDF,并在每个链接后打印 URL。打印时会有意忽略筛选条件:经过筛选的 PDF 会悄悄漏掉行,而这是此工具绝不能生成的产物。
- 链接预览标签 — 粘贴链接时,会显示
<title> — N/10和结论行,而不是裸 URL。
规则
- 渲染,不要重新报告。 如果某个数字看起来不对,说明 Markdown 有误——在 Markdown 中修正后重新渲染。绝不要在 HTML 中修正。
- Markdown 仍然是事实来源。 交付文件时要说明这一点;HTML 只是视图,只有 Markdown 经过了
tally.py验证。 - 不要试图用
--force绕过拒绝。 门禁指出的是报告中的真实缺陷。强行渲染会生成一个看起来比底层内容更可信的页面,而这正是此工具要防止的问题。 - 未经请求,不要发布任何内容。 用户可能会把未发布的草稿、内部文档和他人私下发送的内容交给此工具处理。写入本地文件不算发布;将其放到互联网上是另一项决定,应由用户针对每份报告作出。
- 渲染器有意保持宽松——即使报告缺少分数或版本标记,仍会渲染,并在页面上注明缺少哪些字段。这是查看器的职责。
tally.py才负责严格校验,两者不得互换职责。
已知限制
- 主张表格必须保持
| # | Claim | Type | Verdict | Evidence |的结构——渲染器通过#列识别主张表格,而结论标记只会从其自身单元格读取,绝不会从该行的其他位置读取。 - 任意语言的报告都能正常渲染(使用系统字体,不包含捆绑的 Web 字体)。
- 此处不会生成图片。社交轮播图位于 share。