html-report
Skill0 starsChanged 33 days agoMITView on GitHub
Build single-file, light-only HTML reports for a PI, reviewer or collaborator from a YAML spec — four types - status ("did you do what I asked?" — one table per document the reviewer sent, in their numbering), findings ("what did this one experiment show?" — question, answer, tested, found, limits), update ("what is going on and what do you need from me?" — the periodic email, one tab per area with asks at the foot), brief ("where are things, in one screen?" — for people outside the project). Use when asked for a status/fix report, an email attachment summarising progress, a write-up of a validation, a project update, or a one-page brief.
14 other projects use a version of this.
Adopted by
Most recently taken up by
- dmoreq/agent-grimoiretheir own version, first seen Nov 8, 2026
- TheTiriRiri/ai-review-labtheir own version, first seen Nov 8, 2026
- rodeyseijkens/skillstheir own version, first seen Nov 6, 2026
- anton-abyzov/vskilltheir own version, first seen Nov 1, 2026
- enigmalibs/ClaudeSkillstheir own version, first seen Nov 1, 2026
- yiyu-works/skillstheir own version, first seen Oct 20, 2026
Used with
Projects with it also use code-review.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
GoogleSkillcode-review
Adversarial systems, concurrency, memory-model, and architecture code review protocol. Use this skill whenever asked to review code, PRs, diffs, or branches in Filament.
Also in 3 projects that use this
Other versions14 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 14
- HHU3637kr/skills★ 146same name
- anton-abyzov/vskill★ 47same name
- voidful/claude-html-report-skill★ 19same name
- costiash/eliviz★ 7same name
- rodeyseijkens/skills★ 2same name
- addisonk/skills★ 1same name
- ianneub/claude-skills★ 1same name
- luochang212/skills★ 1same name
- WireCatLabs/cli-docs★ 1same name
- yiyu-works/skills★ 1same name
4 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
We split this skill into the rules it gives an agent
5 rules. 0 are common, 0 are distinctive, and 5 are very specific to this project.
0
Common
Most of the 12 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 12
First: if the project has .claude/html-report.local.md, read it before anything else.
- Very specific: line 25
Do not mix them: an analysis bolted onto a status report is a findings report waiting to be split out.
- Very specific: line 39
Keep the YAML next to the HTML: the next round's status uses it as previous:.
- Very specific: line 43
Numbers come from somewhere real: Every count, rate or result comes from a command run in this session or a summary the user handed over.
- Very specific: line 51
Light only, self-contained: Do not add dark-mode CSS or external fonts/scripts/images.
“Common” is measured: kept by at least 6 in 10 of the 12 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
html-report
Reports are written as a YAML spec and rendered by scripts/report.py into one self-contained HTML
file (CSS inline, figures embedded, no JavaScript, light theme only). They are meant to be attached to
an email, opened offline and printed.
First: if the project has .claude/html-report.local.md, read it before anything else. It holds
the local add-on: who the reports go to, exemplar reports, voice notes, data rules, and extra
identifier patterns ($HTML_REPORT_PATTERNS). Local rules override this file where they conflict.
Pick the type
| Type | Answers | Use when |
status | "Did you do what I asked?" | After a round of fixes, back to the person who gave you the list. One table per document they sent, in their numbering. |
findings | "What did this one experiment show?" | When a single result needs more than a line in a status table; link it from that row. |
update | "What's going on across my projects, and what do you need from me?" | The periodic email. One tab per area, each with its asks at the foot; one area means no tabs. |
brief | "Where are things, in one screen?" | For people outside the project. Plain language, no IDs or hashes, at most 3 boxes and 3 bullets per list. |
Do not mix them: an analysis bolted onto a status report is a findings report waiting to be split out.
Workflow
S=<this skill dir>/scripts
python3 $S/report.py init --type status -o 2026-10-12_status.yaml # skeleton with REPLACE markers
# fill it in
python3 $S/report.py build 2026-10-12_status.yaml # -> 2026-10-12_status.html
python3 $S/check_report.py 2026-10-12_status.html # must exit 0 before handing overHand over the path. Never send, upload or publish the report yourself; the user attaches it.
Name files date-first: YYYY-MM-DD_status.yaml, YYYY-MM-DD_<topic>_findings.yaml, …_update, …_brief.
Keep the YAML next to the HTML: the next round's status uses it as previous:.
Rules
- Numbers come from somewhere real. Every count, rate or result comes from a command run in this
session or a summary the user handed over. If you do not have it, leave
REPLACE(the checker fails on it) and say what is missing. Status tiles are computed from the items, so never type a count. - No patient data, no sample identifiers, no file contents. Pooled aggregates, code, commits and
test results only. Refer to "the pilot sample", "3 of 40". The footer says so by default
(
privacy: falseonly for reports with no human data at all). - Their numbering, their words. Status rows keep the reader's IDs and order. Paraphrase the ask tightly; do not re-grade their priorities.
- Light only, self-contained. Do not add dark-mode CSS or external fonts/scripts/images.
check_report.pyenforces this. Tabs are fine: they are CSS-only, and print or a no-CSS viewer shows every panel. - Be as specific about what is open, reversed or broken as about what is fixed. Use
open,notfound(reported done, not found in the code) anddiscrepancieshonestly.
Spec reference
Common keys: type, title (2–6 words, the browser tab), heading (the <h1>), project, date,
meta (one line: what it answers, branch + commit, supersedes what), tiles ({n, label, kind}),
summary ({headline, body, kind}: the sentence they need if they read nothing else), blocks,
methods ({summary, code}, rendered folded), footer, privacy, demo.
Text fields take **bold**, *italic*, `code`, [text](url); everything else is escaped.
status — kept deliberately small: context (one line: which review, which commit), bottom_line,
previous (last round's file → ● on rows that changed), and sources, one per document they sent:
{name, items: [{id, asked, done, status, commit}]}. Statuses: fixed, progress, open, wontdo.
Count boxes are computed from the items. Nothing else; if a result needs more than a line, write a
findings report and link it from done.
findings — five parts, always in this order: question (the page heading), answer (one or two
sentences with direction and size), tested ([{test, data, n}]; say which data are simulated, public or
real-pooled), found ([{heading, text, table | bars | figure}], one per test), limits and next.
Optional reproduce (commands, folded at the bottom; strip it before sharing outside the lab).
update — summary (a plain string, shown as "In one paragraph"), then areas, one per area:
{label, heading, summary, blocks, asks}. More than one area renders as CSS-only tabs (print shows every
panel); a single area renders without tabs. Keep each area to a few bullets or one table.
brief — tiles (at most 3), bottom_line (two sentences), changed (at most 3 bullets; rename the
heading with changed_title, e.g. "What we found"), next (at most 3), optional asks. No tabs, item IDs or
commit hashes; the checker warns when a brief outgrows one screen.
Blocks: h2 (+sub), h3, p, note (+headline, kind), list (+ordered), tiles,
table ({columns, rows, num, caption}), tabs (list of {label, heading, summary, blocks, asks},
optional numbered), bars ({data: [{label, value, kind}], unit, caption} →
inline SVG), figure ({png, alt, caption}, embedded), details ({summary, code | items}), html (raw).
Kinds: ok info chg bad park dec nf.
Worked examples of every type are in the repo's examples/ directory.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

