Ky Markdown Rebuilder
KyrieCheungYep/ky-markdown-rebuilder
Rebuild visual documents into reliable Markdown by combining text extraction with page or screenshot alignment.
Render a finished BS report as a self-contained HTML page — score hero, filterable claims, readable on a phone, prints to a clean PDF.
$ npx skills add SerhiiKorniienko/bullshit-detector --skill report-card -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install SerhiiKorniienko/bullshit-detector report-card --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/SerhiiKorniienko/bullshit-detector.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/publishing/report-card .claude/skills/report-card && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "report-card" agent skill from https://github.com/SerhiiKorniienko/bullshit-detector/tree/main/skills/publishing/report-card into .claude/skills/report-card/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "report-card", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/SerhiiKorniienko/bullshit-detector/tree/main/skills/publishing/report-cardType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add SerhiiKorniienko/bullshit-detector --skill report-card -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install SerhiiKorniienko/bullshit-detector report-card --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SerhiiKorniienko/bullshit-detector.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/publishing/report-card .agents/skills/report-card && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "report-card" agent skill from https://github.com/SerhiiKorniienko/bullshit-detector/tree/main/skills/publishing/report-card into .agents/skills/report-card/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "report-card", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add SerhiiKorniienko/bullshit-detector --skill report-card -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install SerhiiKorniienko/bullshit-detector report-card --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SerhiiKorniienko/bullshit-detector.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/publishing/report-card .cursor/skills/report-card && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "report-card" agent skill from https://github.com/SerhiiKorniienko/bullshit-detector/tree/main/skills/publishing/report-card into .cursor/skills/report-card/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "report-card", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/SerhiiKorniienko/bullshit-detector.git --path skills/publishing/report-card--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add SerhiiKorniienko/bullshit-detector --skill report-card -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install SerhiiKorniienko/bullshit-detector report-card --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SerhiiKorniienko/bullshit-detector.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/publishing/report-card .gemini/skills/report-card && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "report-card" agent skill from https://github.com/SerhiiKorniienko/bullshit-detector/tree/main/skills/publishing/report-card into .gemini/skills/report-card/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "report-card", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install SerhiiKorniienko/bullshit-detector report-cardInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add SerhiiKorniienko/bullshit-detector --skill report-card -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/SerhiiKorniienko/bullshit-detector.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/publishing/report-card .github/skills/report-card && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "report-card" agent skill from https://github.com/SerhiiKorniienko/bullshit-detector/tree/main/skills/publishing/report-card into .github/skills/report-card/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "report-card", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add SerhiiKorniienko/bullshit-detector --skill report-card -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install SerhiiKorniienko/bullshit-detector report-card --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SerhiiKorniienko/bullshit-detector.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/publishing/report-card .opencode/skills/report-card && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "report-card" agent skill from https://github.com/SerhiiKorniienko/bullshit-detector/tree/main/skills/publishing/report-card into .opencode/skills/report-card/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "report-card", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
report-cardRender a finished BS report as a self-contained HTML page — score hero, filterable claims, readable on a phone, prints to a clean PDF.
Report Card is an agent skill from SerhiiKorniienko/bullshit-detector. Render a finished BS report as a self-contained HTML page — score hero, filterable claims, readable on a phone, prints to a clean PDF. Use when the user wants to open, share, print, or show a report to someone who is not going to read a markdown table, or asks for "the HTML version", "something I can send", "a shareable page", or "make this readable".
Its SKILL.md is about 2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including scripts (for example `scripts/render_report.py`).
It sits in Documents & Office, covering HTML artifacts and Markdown. The repository describes itself as: Agent skills that fact-check the internet: claim-by-claim verification with sources and a 0-10 BS score for any YouTube video, article, tweet, or PDF. The licence is MIT.
Read from SKILL.md and the folder at commit d5f6156. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
uvFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use uv, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Report Card loads about 2k tokens when it runs. Until then it costs about 91 tokens; SKILL.md has 1,090 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from SerhiiKorniienko/bullshit-detector at commit d5f6156, republished under its MIT licence (© SerhiiKorniienko). 1,090 words, ~1,990 tokens.
.claude/skills/report-card/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.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.
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.
uv run <this-skill-dir>/scripts/render_report.py ~/.bullshit-detector/reports/<YYYY>/bs-report-<slug>-<date>.mdWrites 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.
--open shows 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.--reopen opens even when the page existed — for picking a report back up in a later session. Never treat that as a failure.--quiet prints only the output path, for scripting.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 browserPaste 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.
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 performedExit 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.
--force renders anyway and prints the failures as warnings.--no-check skips the gate — for markdown that isn't a BS report.--tally <path> or $BULLSHIT_DETECTOR_TALLY if 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.
For a hosted page the script also emits <link rel="canonical">, Open Graph and Twitter card
tags, and Article structured data. It needs the page's public URL to do that:
--canonical <absolute-url> is that URL. Pass it whenever the page has a fixed address.url in the structured data. The script never
guesses one from --og-image or anything else: a wrong canonical tells search engines the wrong
address is the real one, which is worse than none.--author <name> and --author-type Person|Organization set the Article author. The default is
the tool itself, since this skill runs for everyone; pass your own name when you publish.
datePublished comes from the report's own **Checked:** line, never from the render time. A
fact-check that stamps today's date on work done last month is the one thing this structured data
must not say, so a date it cannot read produces no date at all.
Then tell the user the path and that it opens in any browser. On macOS open <path> does it.
Problems shows only ❌ and 🟠. Load-bearing only hides the
incidental table. This is the whole reason a non-technical reader gets through the report.<title> — N/10 and the verdict line instead of a
bare URL.tally.py validated.--force to 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.tally.py is
the strict one, and the two must not swap roles.| # | 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.© SerhiiKorniienko, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files (scripts) in skills/publishing/report-card of SerhiiKorniienko/bullshit-detector.
Open the folder on GitHubat commit d5f6156
Report Card next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Report Card this skillSerhiiKorniienko/bullshit-detector | 154 | — | ~2k | Automated safety check: Pass | MIT | |
| Ky Markdown RebuilderKyrieCheungYep/ky-markdown-rebuilder | 117 | — | ~5.7k | Automated safety check: Pass | None | |
| Mindmap Renderai4s-research/ai4s-skills | 237 | 1 repos | ~3.1k | Automated safety check: Pass | MIT | |
| Markdown PRD to HTML Rendererowainlewis/blueprint | 412 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Render HTMLwanshuiyin/Auto-claude-code-research-in-sleep | 17k | 1 repos | ~5.4k | Automated safety check: Notes | MIT | |
| Markdown HTML Orchestratoralirezarezvani/claude-skills | 28k | — | ~2.7k | Automated safety check: Pass | MIT |
KyrieCheungYep/ky-markdown-rebuilder
Rebuild visual documents into reliable Markdown by combining text extraction with page or screenshot alignment.
ai4s-research/ai4s-skills
Generate beautiful, high-resolution mindmaps from Markdown unordered lists.
owainlewis/blueprint
Converts a complete Markdown PRD or technical design into one verified, static HTML reading page without changing what it says.
wanshuiyin/Auto-claude-code-research-in-sleep
Render an ARIS Markdown / JSON artifact (IDEAREPORT, AUTOREVIEW, KILLARGUMENT, PAPERPLAN, research-wiki state, etc.) into a single-file HTML view designed for human reading.
alirezarezvani/claude-skills
A skill your agent uses when a user wants to convert any markdown file in their Claude project into a single-file, lightly-interactive HTML — long-form documents (specs, plans, RFCs, reports…
thatrebeccarae/claude-marketing
Transform audit data, performance reports, and structured analyses into polished visual deliverables.
SerhiiKorniienko/bullshit-detector
Count how many independent origins are behind news coverage of a claim, instead of counting URLs.
SerhiiKorniienko/bullshit-detector
Fetch and normalize any content source into clean text with metadata — YouTube video transcripts, TikTok captions, web articles, PDFs, tweets/X posts, local files.
SerhiiKorniienko/bullshit-detector
Turn a BS report (or any analysis result) into ready-to-paste posts for X/Twitter, LinkedIn, Facebook, Reddit, Hacker News, or a newsletter issue — plus a branded image carousel (PNGs + PDF) for…
SerhiiKorniienko/bullshit-detector
Fact-check and hype-audit content. An agent skill from SerhiiKorniienko/bullshit-detector.
SerhiiKorniienko/bullshit-detector
Produce a structured summary of a video, article, tweet thread, or PDF — TLDR, key points with timestamps/locations, notable quotes, and who should read/watch it.
SerhiiKorniienko/bullshit-detector
Explain content or any concept inside it at the depth the user needs — ELI5, practitioner level, or expert deep-dive — with a jargon glossary and context the original assumes.
Categories
Render a finished BS report as a self-contained HTML page — score hero, filterable claims, readable on a phone, prints to a clean PDF. Report Card is an agent skill from SerhiiKorniienko/bullshit-detector. Render a finished BS report as a self-contained HTML page — score hero, filterable claims, readable on a phone, prints to a clean PDF.
Report Card fits situations like: the user wants to open; show a report to someone who is not going to read a markdown table; asks for the HTML version; something I can send.
Run `npx skills add SerhiiKorniienko/bullshit-detector --skill report-card -a claude-code`. Or copy the skill folder (skills/publishing/report-card in SerhiiKorniienko/bullshit-detector) into .claude/skills/report-card in your project. Claude Code loads it when a task matches its description.
Run `npx skills add SerhiiKorniienko/bullshit-detector --skill report-card -a codex`. Or copy the skill folder (skills/publishing/report-card in SerhiiKorniienko/bullshit-detector) into .agents/skills/report-card in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add SerhiiKorniienko/bullshit-detector --skill report-card -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/report-card, .gemini/skills/report-card, .github/skills/report-card and .opencode/skills/report-card in your project.
Going by SKILL.md and its folder, Report Card needs Python for the scripts in its folder and the command-line tools its instructions call (uv). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use uv, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Report Card is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2k tokens (SKILL.md is roughly 8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Report Card: Ky Markdown Rebuilder (KyrieCheungYep/ky-markdown-rebuilder, 117 stars), Mindmap Render (ai4s-research/ai4s-skills, 237 stars), Markdown PRD to HTML Renderer (owainlewis/blueprint, 412 stars) and Render HTML (wanshuiyin/Auto-claude-code-research-in-sleep, 17k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
SerhiiKorniienko (a GitHub user) maintains it in SerhiiKorniienko/bullshit-detector, which has 154 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on September 29, 2026.
Source: SerhiiKorniienko/bullshit-detector on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.