关于
The report-card skill converts BS report markdown files into self-contained HTML pages optimized for sharing and readability. It creates mobile-friendly, filterable reports that cleanly print to PDF without altering the original markdown data. Use this when users need to share reports with non-technical audiences or request HTML versions for better presentation.
快速安装
Claude Code
推荐npx skills add SerhiiKorniienko/bullshit-detector -a claude-code/plugin add https://github.com/SerhiiKorniienko/bullshit-detectorgit clone https://github.com/SerhiiKorniienko/bullshit-detector.git ~/.claude/skills/report-card在 Claude Code 中复制并粘贴此命令以安装该技能
技能文档
report-card
Turn bs-report-<slug>-<date>.md into one HTML file anybody can open.
The markdown is the artifact and stays the artifact — it is what tally.py checks, what gets
diffed against a later run, and what gets committed. This skill adds a reader-facing view of
that same file. It renders; it never edits, recounts, or adds. Every number on the page is copied
from the markdown verbatim.
Why this exists
A BS report is a five-column claims table. On a laptop that is fine. On a phone — which is where a shared link is actually opened — the Evidence column is unreadable, and the reader's first question ("what's wrong with it?") means scrolling twenty rows to find the two that matter.
Usage
uv run <this-skill-dir>/scripts/render_report.py ~/.bullshit-detector/reports/<YYYY>/bs-report-<slug>-<date>.md
Writes bs-report-<slug>-<date>.html beside the markdown. -o <path> puts it elsewhere. No install
step, no dependencies — the script is stdlib-only, runs under plain python3 as well as uv run,
and the page it produces makes no network requests. That combination is what lets it work in a
code-execution sandbox, where the HTML is the only thing the user can take away.
--openshows the page in the default browser. Where there is no browser — a sandbox, a headless host — it says so and the file is still written. It is skipped when the page already exists, because re-rendering is normal (the run line gets finalised after a first pass) and every open spawns another tab — three consecutive real runs left the user with two. The file updates in place; reload the tab you have.--reopenopens even when the page existed — for picking a report back up in a later session. Never treat that as a failure.--quietprints only the output path, for scripting.
The handoff block
By default the script prints the block that ends a detector run:
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
Paste it; don't rebuild it. Every figure came out of the report that tally.py had just
recounted. A summary retyped from memory of what you wrote is wrong in the direction that flatters
the run — the same failure mode as the tally and the search count, one level up.
The paths are file:// URLs on purpose: terminals linkify a bare URL, so both files are one
cmd-click from opening. Don't shorten them to ~/… or hide them behind link text.
The compliance gate
Before rendering, the script runs the report through the detector's tally.py and refuses to
render a report that fails it:
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
Exit 3. This is the point of the gate: a page this presentable, built from a report that fails its own arithmetic, launders a broken report into something that looks authoritative. Fix what the gate names and re-run.
--forcerenders anyway and prints the failures as warnings.--no-checkskips the gate — for markdown that isn't a BS report.--tally <path>or$BULLSHIT_DETECTOR_TALLYif it can't be found automatically.
If tally.py isn't installed at all — this skill can be installed without the detector — the
script warns and renders. A missing validator is a reason to warn, not a reason to stop someone
viewing a report they already have.
--og-image <absolute-url> adds a link-preview image. Only useful once the page is hosted
somewhere; skip it for local files.
Then tell the user the path and that it opens in any browser. On macOS open <path> does it.
What the page adds over the markdown
- Score hero — the number at the size it deserves, coloured by the RUBRIC band (Solid / Mostly fine / Hype-heavy / Mostly bullshit / Fabricated), with the one-line verdict beside it.
- Verdict filter chips —
Problemsshows only ❌ and 🟠.Load-bearing onlyhides the incidental table. This is the whole reason a non-technical reader gets through the report. - Claims as cards under 900px, as a table above it. Same rows, same order, same text.
- Print stylesheet — Cmd-P gives a clean PDF with the URLs printed after each link. Filters are deliberately ignored when printing: a filtered PDF is a report that quietly dropped rows, which is the one artifact this tool must never produce.
- Link-preview tags — a pasted link shows
<title> — N/10and the verdict line instead of a bare URL.
Rules
- Render, don't re-report. If a number looks wrong, the markdown is wrong — fix it there and re-render. Never correct it in the HTML.
- The markdown is still the source of truth. Say so when handing over the file; the HTML is a
view, and only the markdown is what
tally.pyvalidated. - Don't reach for
--forceto make a refusal go away. The gate is naming a real defect in the report. Rendering past it produces a page that looks more trustworthy than the thing behind it, which is the failure this whole tool exists to catch. - Don't publish anything without being asked. People point this tool at unpublished drafts, internal docs and things they were sent in confidence. Writing a local file is not publishing; putting it on the internet is a separate decision that belongs to the user, per report.
- The renderer is deliberately lenient — a report missing its score or version stamp still renders,
with a note on the page saying which fields were missing. That is a viewer's job.
tally.pyis the strict one, and the two must not swap roles.
Known limits
- The claims table must keep its
| # | Claim | Type | Verdict | Evidence |shape — the#column is how the renderer tells a claims table from any other table, and the verdict glyph is read from its own cell, never from anywhere else in the row. - Reports in any language render fine (system fonts, no bundled webfont).
- Images are not generated here. The social carousel lives in share.
GitHub 仓库
常见问题
什么是 report-card Skill?
report-card 是一个 Claude Skill,作者为 SerhiiKorniienko。Skill 将 Claude 按需加载的说明和资源打包,让 Claude 无需额外提示即可执行与 report-card 相关的任务。
如何安装 report-card?
使用本页的安装命令:将 report-card 作为插件添加到 Claude Code,或将其仓库克隆到 skills 目录,然后重启 Claude 以加载该 Skill。
report-card 属于哪个分类?
report-card 属于文档分类。
report-card 可以免费使用吗?
可以。report-card 已收录在 AIMCP,可免费安装。
相关推荐技能
Railway Docs Skill可实时获取最新的Railway官方文档,确保回答的准确性。当开发者询问Railway功能特性、工作原理或分享docs.railway.com链接时,应优先使用此技能。它通过专门的LLM优化文档源提供最新信息,避免依赖过时记忆来回答技术问题。
该Skill为在n8n平台的Python代码节点中编写代码提供专家指导,特别适用于需要使用_input/_json/_node语法、Python标准库或了解n8n中Python限制的场景。它强调JavaScript应作为首选方案,仅当需要特定Python功能或对Python语法更熟悉时才使用Python。Skill提供了快速入门模板和关键注意事项,帮助开发者在n8n中高效编写Python代码。
Archon Skill为开发者提供了基于RAG的语义搜索和项目任务管理功能,可通过REST API访问知识库。它支持文档搜索、网站爬取、文件上传和版本控制,适用于技术文档查询和项目管理场景。首次使用时需要配置Archon主机地址,建议在处理外部文档时优先使用该Skill。
这个Skill为n8n工作流中的JavaScript代码节点提供专业指导,涵盖数据处理、HTTP请求和日期操作等核心场景。它详细解释了如何正确使用n8n特有的`$input`/`$json`语法、`$helpers`工具以及DateTime对象,并包含关键的错误排查和模式选择建议。开发者通过该Skill能快速掌握Code节点的正确返回格式、数据访问方法和常见陷阱解决方案。
