present
Skill1 starsChanged 33 days agoMITView on GitHub
Put a finished thing in front of the user as ONE styled HTML page: screenshots become a captioned sheet, a markdown doc becomes a read-only rendered copy. Builds with the bundled `present` engine and delivers to fit the machine (browser tab, or sent as a file when headless, or an Artifact URL), plus a PDF of the same page when it's going to someone who won't open HTML. The one way pictures or documents reach the user; never loose image files. Fire when a skill has images or a deliverable doc to show, or on "show me that file", "open the report", "send me the screenshots", "make a PDF of that to send". NOT /before-after (gathers before/after evidence of a change, then chains this), NOT /mockup (renders an unbuilt UI).
12 other projects use a version of this.
Adopted by
Most recently taken up by
- pietz/skillstheir own version, first seen Nov 8, 2026
- StasPotapov/presenttheir own version, first seen Nov 3, 2026
- grainulation/grainulatortheir own version, first seen Nov 3, 2026
- sassarini-marco/track-to-demotheir own version, first seen Nov 1, 2026
- qwwiwi/agentos-skills-publictheir own version, first seen Nov 1, 2026
- bisque-cloud/presentertheir own version, first seen Oct 25, 2026
Other versions12 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 12
- glebis/claude-skills★ 410same name
- grainulation/grainulator★ 86same name
- bisque-cloud/presenter★ 40same name
- StasPotapov/present★ 16same name
- qwwiwi/agentos-skills-public★ 4same name
- michaelengland/deckwright★ 2same name
- NguyenHuy190303/EEP★ 2same name
- pietz/skills★ 2same name
- godmarch33/power-presentation★ 1same name
- GerardoRdz96/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 repository56 other files it gives its agents.
- autopilotSkill
- before-afterSkill
- bigpictureSkill
- blast-radiusSkill
- brainstormSkill
- compoundSkill
- confidence-checkSkill
- contextualizeSkill
- create-ship-skillSkill
- create-skillSkill
- curateSkill
- debugSkill
- deep-researchSkill
- devtoolsSkill
- distillSkill
- done-checkSkill
- doneSkill
- double-checkSkill
- envsetSkill
- explainSkill
- fortifySkill
- goSkill
- handoffSkill
- harness-auditSkill
- interviewSkill
- matrixSkill
- mockupSkill
- mutateSkill
- notesSkill
- postmortemSkill
- qaSkill
- readableSkill
- recommendSkill
- reportSkill
- retireSkill
- review-planSkill
- scoutSkill
- sec-reviewSkill
- setup-ticketingSkill
- setup-worktreesSkill
- spec-checkSkill
- specSkill
- stepsSkill
- successionSkill
- super-reviewSkill
- tangentSkill
- tddSkill
- tend-memorySkill
- testSkill
- ticketSkill
- tldrSkill
- triageSkill
- waitSkill
- workSkill
- worth-itSkill
- wrap-upSkill
The file
We split this skill into the rules it gives an agent
3 rules. 0 are common, 3 are distinctive, and 0 are very specific to this project.
0
Common
Most of the 10 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 34
Default, decided by the environment:
- Distinctive: line 46
When the user says they're following from another device, send the page as a file as well, whatever else the delivery was.
- Distinctive: line 60
Never summarize the content you just presented.
“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
Present — one page in front of the user
A single styled page reads far more easily than a stack of image cards or raw markdown, and someone running several sessions at once needs every picture and document to arrive the same way: one HTML page, one design, delivered once. Other skills chain this rather than sending files themselves.
Build it — never hand-write the HTML
The engine is bin/present inside this skill's folder (the base directory shown when the skill loads). Its header documents the full manifest schema; read it when building a sheet. Writing the HTML yourself would push base64 through a tool call and drift from the one design. It needs python3; doc mode also needs the markdown and pygments packages.
- A markdown document →
present doc <abs path.md>. It renders a read-only copy under~/.cache/present/, embeds local images, and renders linked.mdfiles so a doc set stays navigable. Pass one index doc to deliver a whole set. - Pictures → write a small JSON manifest beside the frames, then
present sheet <manifest.json>. One section per surface or state, frames in capture order, each labelled (desktop/phone, orbefore/afterfor a pair), and a caption stating the decisions a reader should check. Even a single image goes in a sheet. Real captures only: the engine refuses a missing file, and you never describe a frame you didn't take.
Both print the path of the page. Keep frames where their caller keeps evidence, and throwaway renders in the scratchpad.
Deliver it — to fit the machine
Default, decided by the environment:
- A desktop session (
$DISPLAYor$WAYLAND_DISPLAYis set, or macOS) → add--open. It opens with$PRESENT_OPENERif set, elsexdg-open/open. PointPRESENT_OPENERat a script if pages should land in a particular browser profile. Open pages only through--open(for a page already built, rerun with--openor call$PRESENT_OPENERon it), never a barexdg-open, which skips that routing. - Headless (SSH box, remote session) → send the page to the user as a file if the session has a send-file tool; otherwise hand back the absolute path. Do this every time a page is put in front of the user, an approval preview included. A browser here would show nobody anything.
Caller tokens adjust that:
publish→ an Artifact URL instead of a file. Build a sheet with--linked -o <dir>/index.htmland publishshots/as its supporting files, so the page stays small. A doc publishes as-is. Then emit● Published: <url>. Artifacts are account-bound: one published from one account 404s in a browser signed in to another, which looks like a dead link.open→ withpublish, also open the Artifact now. Without it, stay link-only.noopen→ build and return the absolute path, deliver nothing.pdf→ also print the page to a.pdfbeside it (--pdfon either mode), for emailing or Slacking to someone who won't open an HTML file. It combines with the others: the page still delivers as usual unlessnoopen. A doc's PDF lands in~/.cache/present/, so copy it next to the caller's evidence and give that path. A PDF usually leaves the team, so check the audience before you print: a sheet written for the user (provenance, working notes, session shorthand) needs captions rewritten for its reader, not just a format change. Sometimes the right file isn't this page at all, e.g. the real report pages rather than a sheet about them. It needs Chromium's headless shell or Chrome/Chromium onPATH.
When the user says they're following from another device, send the page as a file as well, whatever else the delivery was.
The one judgment: a tab is not free
Present what the user asked for or needs to judge: the report they requested, the audit, a preview awaiting approval, evidence at the end of a ship. Don't open a byproduct such as notes a skill wrote for its own next step, intermediate findings, or a doc regenerated mid-pipeline while they're away. For those, give the absolute path (noopen) and let them ask. When it's ambiguous, give the path: they can ask for the page, but they can't un-open one. A forked skill never presents; it returns the path, and its caller decides.
Report back one line
● Presented: /abs/path/page.html (opened | sent as a file | path only)With pdf, add the PDF on a second line: PDF: /abs/path/page.pdf (N pages).
Never summarize the content you just presented. If there's a verdict the user needs, it goes in the terminal response too; the page holds the detail, not the answer.
Guardrails
- Never loose images. Individual image files only when the user asks for them by name.
- Never present a file you haven't written or read this session. A stale report from three sessions ago under "here's your report" is worse than nothing.
- Absolute paths, always. A path gets pasted into a fresh terminal or file manager, where a relative one is dead on arrival.
- One design, every project. The engine has no per-repo theming, on purpose. Don't add a project's colors to a page.
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.

