marginalia
Skill1 starsChanged 52 days agoMITView on GitHub
Publish an annotatable screenshot review board as a Claude artifact — the user sticks draggable post-it notes on each screenshot, saves them into the page, and Claude reads them back as structured input. Use when the user wants to mark up screenshots, UI captures, or mockups with positioned feedback ("let me add notes", "screencap I can annotate", "review board").
2 other projects use a version of this.
Adopted by
Most recently taken up by
- howells/skillstheir own version, first seen Nov 6, 2026
- Y2Kwastaken/Marginaliatheir own version, first seen Aug 8, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- howells/skills★ 5same name
- Y2Kwastaken/Marginalia★ 0same name
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
Files
Marginalia — annotatable screenshot boards
Turn a set of screenshots into a published artifact the user annotates with positioned post-it notes. Saved notes embed into the page itself; any session reads them back.
How it works
The page declares the artifact runtime capability. Save regenerates the
document with the notes embedded (a marginalia-notes JSON block + a plain-text
"NOTES LEDGER") and calls artifact.publish(html) — the artifact republishes
itself. The publishing session gets an artifact-changed notification when
that happens; any session can read the notes back with WebFetch.
Build one
- Compress screenshots into a working directory (the artifact budget is
16MB total; base64 adds ~33%).
sips -Z 1600 -s format jpeg -s formatOptions 80 in.png --out key.jpgfor desktop shots; resample phone shots to ~720w. (Linux:convert in.png -resize 1600x1600\> -quality 80 key.jpg.) - Write
manifest.jsonnext to the images — schema documented at the top of assets/build.py. One board per screenshot: stablekey, humantitle, optional provenancechip/ stalenesscaveat,phone: truefor narrow portrait shots. Give the artifact a product-style name intitle. - Build:
python3 ~/.claude/skills/marginalia/assets/build.py manifest.json - Publish the output file with the Artifact tool:
capabilities: {"artifact": {}}, favicon📌(keep it stable across redeploys). Load theartifact-capabilitiesskill first if this session hasn't already. - Tell the user: click a screenshot to stick a note, drag to move, click to edit, ⚑ marks issues, Save notes writes them back for Claude.
Read notes back
WebFetch the artifact URL (it saves the full HTML locally), then parse:
import re, json, html
t = open(saved_html_path, encoding="utf-8").read()
m = re.search(r'<script type="application/json" id="(?:marginalia-notes|ww-notes-data)">(.*?)</script>', t, re.S)
state = json.loads(html.unescape(m.group(1)))
# state["notes"]: [{id, board, x, y, text, flag, ts}] — x/y are % of the image boxThe visible "NOTES LEDGER" <pre> block carries the same data as plain text
(#id [Board title] (x%, y%) ⚑ISSUE — text) and survives HTML→text conversion.
Update boards without losing notes
A tool republish overwrites the user's saved state. To refresh screenshots or
add boards: WebFetch the current version first, extract state (above), write
it to a file, rebuild with --state state.json, then republish. Board keys
and %-coordinates are stable, so a same-aspect screenshot swap keeps existing
notes aligned. Never rebuild from the empty default over a board that has
saved notes.
Constraints (inherited from the artifact runtime)
- Viewers who aren't the owner (or in an unauthenticated view) can't save — the page shows a banner and the read-only board still renders.
- A save conflict (two views saving) drops the loser; the page says so and asks for a reload. No auto-retry by design.
- Everything must stay self-contained: images are data URIs; only Google Fonts may load externally.
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.

