agentleFS
ammalabbasiammalabbasi/claude-skills/skills/html-report/SKILL.md

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

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.
  • GoogleSkill

    code-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

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
  1. Very specific:

    First: if the project has .claude/html-report.local.md, read it before anything else.

    line 12
  2. Very specific:

    Do not mix them: an analysis bolted onto a status report is a findings report waiting to be split out.

    line 25
  3. Very specific:

    Keep the YAML next to the HTML: the next round's status uses it as previous:.

    line 39
  4. Very specific:

    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.

    line 43
  5. Very specific:

    Light only, self-contained: Do not add dark-mode CSS or external fonts/scripts/images.

    line 51

“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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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

TypeAnswersUse 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 over

Hand 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

  1. 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.
  2. 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: false only for reports with no human data at all).
  3. Their numbering, their words. Status rows keep the reader's IDs and order. Paraphrase the ask tightly; do not re-grade their priorities.
  4. Light only, self-contained. Do not add dark-mode CSS or external fonts/scripts/images. check_report.py enforces this. Tabs are fine: they are CSS-only, and print or a no-CSS viewer shows every panel.
  5. 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) and discrepancies honestly.

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.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.