html-report
Skill48 starsChanged 6 months agoMITView on GitHub
Write work reports, status updates, review results and meeting notes that render as a polished document (property table, serif title, lead, sections, chips) in any host and model: Claude, Codex, Copilot, Gemini, Cursor, OpenCode. Picks the form per host: structured markdown with flat frontmatter for document viewers (Claude desktop, SpecWithCode, Obsidian), or a self-contained HTML page from the bundled template when the report needs screenshots, comparisons or test matrices (SpecWithCode html_render, Claude artifacts, a file on disk). Use only when a result needs a report (several findings, evidence links, screenshots, tables or comparisons) or the user asks for one; a short result, especially under a concise response style, stays a plain 1-3 line message. Fits final reports, summaries, handoffs and release notes, or when the user says 'make it look good', 'pretty report', 'HTML report', 'artifact', 'format this as a document', or complains a report is a wall of text.
We split this skill into the rules it gives an agent
8 rules. 0 are common, 4 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 10 edited versions we read keep these.
4
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 56
Use > [!NOTE], > [!WARNING] or > [!CAUTION] callouts for the one thing the reader must not miss.
- Distinctive: line 58
No raw HTML in markdown; viewers strip it.
- Very specific: line 59
Call the desktop app SpecWithCode on first mention and "the app" after that, never "Studio" or "SpecWeave Studio".
- Distinctive: line 79
Not a blocker: problems you already worked around.
- Very specific: line 87
Keep its structure: dl.props (facts), h1, p.lead, h2 sections, table for results with .pill.ok|bad|warn status, .shots grid of figures for …
- Very specific: line 89
No outer card, banner or border, no 100vh.
- Distinctive: line 102
When a host has no way to show a page, still write the file and give its path.
- Distinctive: line 107
Every claim of success has its evidence: a commit, a path, a command and its result.
“Common” is measured: kept by at least 6 in 10 of the 10 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 that read as documents
A report is read, not parsed. A wall of prose with inline code chips is hard to scan; the same facts as a document (properties first, a title, one lead paragraph, short sections) read in seconds. This skill makes that the default for every model and host.
How the good-looking hosts do it
Claude desktop's polished document look is not an HTML artifact. It is a markdown file that the app renders: flat YAML frontmatter becomes a property table (list values become chips), the # H1 is a serif title, the first paragraph is the lead, ## sections follow. HTML artifacts are kept for interactive or visual content. SpecWithCode renders worker reports the same way, and Obsidian shows the same frontmatter as properties.
So the optimal path is:
- Default: structured markdown. Cheap, works in every model, every host renders it well, and it degrades to clean text anywhere else.
- Visual evidence: a self-contained HTML page built from
template.html, only when screenshots, a comparison, a results matrix or a chart say more than prose.
1. Structured markdown (default)
---
title: Show harness on thread rows
status: done
branch: feat/thread-harness-label
tests: 262/262 pass
blockers: none
tags: [web, sidebar, models]
---
# Show harness on thread rows
Thread rows now show the harness first, then the model: "Claude Code · Opus 5.5", "Copilot · Claude Opus 5.5". Before, native threads showed just "Claude".
## Evidence
- Commit `d7c074f0b` on `feat/thread-harness-label`, not pushed.
- Headless screenshots: `threads-light.png`, `threads-dark.png`.
- The 5 full-suite failures also fail on clean `origin/main`.
## Next
- Push and open the PR once the release branch is cut.Rules (these match what document viewers accept):
- Frontmatter is flat:
key: valuelines, and lists as[a, b]or- alines. No nesting, no|/>block text, no duplicate keys; any of those makes viewers drop the whole table. - Keys are lowercase words (
review_cycleshows as "Review cycle"). Put short facts here: status, branch, version, test totals, blockers, owners, dates. Lists become chips, so use them for tags, people, files. - One
# H1, then one lead paragraph of one to three sentences: the outcome. Then##sections with bullets, one fact per bullet. - Use
> [!NOTE],> [!WARNING]or> [!CAUTION]callouts for the one thing the reader must not miss. - Tables only for real comparisons; numeric columns right-align on their own.
- No raw HTML in markdown; viewers strip it.
- Call the desktop app SpecWithCode on first mention and "the app" after that, never "Studio" or "SpecWeave Studio". Branch, repo, path and tool names stay literal (
feat/studio-plan-progress,studio_thread_list).
Short worker reports (a 5-line "Outcome / Evidence / Blockers" result) skip frontmatter and the H1. Write each part as its own paragraph opening with a bold label:
**Outcome:** Thread rows now show the harness first, then the model.
**Evidence:** commit `d7c074f0b` on `feat/thread-harness-label`, not pushed. Headless screenshots at `threads-light.png`. Unit tests: 262/262 pass.
**Blockers:** none.SpecWithCode shows this as a document: the outcome as the lead, a long Evidence as a bulleted section, a short Blockers as a property.
Blockers are a question, or none
Blockers is either none or the one thing you need from the reader, asked as a question they can answer in one reply: the decision, the options, and your recommendation.
- Good:
**Blockers:** Ship 1.0.20 now without the Windows build, or wait about 2 hours for the signer? I recommend shipping now and following up. - Bad:
**Blockers:** Windows signing is flaky.(a status, not a question; the reader cannot act on it) - Not a blocker: problems you already worked around. Put them in Evidence.
SpecWithCode reads this part: a thread whose last report names a blocker shows as Blocked, waits in "Waiting on you" with the question on hover and on its card, and never auto-resolves until someone writes back.
2. HTML page (visual evidence)
Start from template.html next to this file. examples/worker-report.html is a finished worker report (before/after screenshots, checks table) built from it. It is self-contained (inline CSS, no network), follows the host theme when one is injected (--background, --foreground, --border, --accent, ...) and falls back to its own light and dark palette, so the same file works in a host frame, as an artifact and opened from disk.
- Keep its structure:
dl.props(facts),h1,p.lead,h2sections,tablefor results with.pill.ok|bad|warnstatus,.shotsgrid offigures for screenshots,detailsfor long logs. - Inline images as
data:URLs (resize first; keep the page under about 2 MB). Never hotlink. - No outer card, banner or border, no
100vh; let content set the height. Fluid width, max 680px text column. - Charts: inline SVG, or Chart.js only where the host allows that library.
- Light and dark must both read well. Check contrast of pills and chips in both.
Where to put it, by host
| Host | Markdown report | HTML report |
| SpecWithCode | Your final reply, as above | html_preview, then html_render, before the final reply; the reply adds only what the page doesn't say |
| Claude desktop (Cowork / Code) | Write a .md file, then present_files | Write the .html file, then create_artifact with its html_path |
| claude.ai chat | A text/markdown artifact | A text/html artifact |
| Codex, Copilot, Gemini, Cursor, OpenCode, any CLI | Your final reply, or a .md file whose path you print | Write the file to a scratch or reports folder, print the absolute path |
When a host has no way to show a page, still write the file and give its path; never paste HTML into the chat.
Before you send
- The first two lines answer "what happened". A reader who stops there knows the result.
- Every claim of success has its evidence: a commit, a path, a command and its result.
- Failures, failing tests and security warnings are quoted exactly, never softened.
- Nothing invented to fill the template: drop a property or section you have no fact for.
Other versions12 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 12
- HHU3637kr/skills★ 146same 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
- ammalabbasi/claude-skills★ 0same name
2 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.
In this repository30 other files it gives its agents.
- obsidian-brainSkill
- animejsSkill
- css-animationsSkill
- greet-anton-abyzovSkill
- gsapSkill
- higgsfield-seedanceSkill
- hyperframes-cliSkill
- hyperframes-mediaSkill
- hyperframes-registrySkill
- hyperframesSkill
- lottieSkill
- obsidian-brainSkill
- private-skillSkill
- remotion-to-hyperframesSkill
- scoutSkill
- slack-messagingSkill
- stub-skill-76f6713eSkill
- tailwindSkill
- threeSkill
- waapiSkill
- website-to-hyperframesSkill
- excalidraw-mcpSkill
- greet-anton-abyzovSkill
- greet-elenaSkill
- handoffSkill
- hi-atlantisSkill
- hyperframes-best-practicesSkill
- motion-graphics-promoSkill
- reaSkill
- remotion-best-practicesSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
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.

