edit-diagram
Skill1.5k starsChanged 9 days agoMITView on GitHub
Create or edit a Hubble diagram: a .tldr file Hubble opens in its built-in tldraw canvas. With this skill installed, any diagram, canvas, whiteboard, or .tldr file is a Hubble diagram: use this skill instead of tldraw-offline, unless the user names the tldraw offline app or the file is a .tldraw archive.
Trending
Steady talk.thin dataabout the whole repository
Who's talking about bholmesdev/hubble.md
- @bholmes.dev“If you want to try it, go to hubble.md ⬇️ And if you want to contribute (there's still a lot missing!), …”Bluesky · Jun 23, 2026 · 11 likes
- @bholmes.dev“And yes, I'm aware I worked on this (and related projects) without shipping them. So... no more. This is …”Bluesky · Feb 23, 2026 · 9 likes
- @bholmes.dev“Open source and ready to try yourself! github.com/bholmesdev/hubble.md ⭐”Bluesky · Feb 26, 2026 · 4 likes
- @bholmes.dev“Not quite ready to release this bad boy, but if you're wondering about the markdown editor... I just added …”Bluesky · Mar 31, 2026 · 3 likes
- bholmesdev/hubble-skills“Document supported review comment shapes”GitHub · Oct 21, 2026
The biggest 5 of 7 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 7
Talked about on Bluesky and GitHub (7 times).
On Bluesky · 4
- Jun 23, 2026If you want to try it, go to hubble.md ⬇️ And if you want to contribute (there's still a lot missing!), it's all open source… — @bholmes.dev11 likes and reposts
- Feb 23, 2026And yes, I'm aware I worked on this (and related projects) without shipping them. So... no more. This is fully open source and ready for… — @bholmes.dev9 likes and reposts
- Feb 26, 2026Open source and ready to try yourself! github.com/bholmesdev/hubble.md ⭐ — @bholmes.dev4 likes and reposts
- Mar 31, 2026Not quite ready to release this bad boy, but if you're wondering about the markdown editor... I just added folder support with a sidebar.… — @bholmes.dev3 likes and reposts
On GitHub · 3
- Oct 21, 2026Document supported review comment shapes — bholmesdev/hubble-skills0 reactions · 1 comment
- Sep 14, 2026chore: sync external skills — UNRULYEON/skills0 reactions
- Jul 6, 2026[Package Request]: Hubble.md — microsoft/winget-pkgs0 reactions
In this repository26 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .agents/skills/AGENTS.mdAGENTS.md
- .agents/skills/vercel-react-best-practices/AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- changelogSkill
- code-commentsSkill
- create-html-appSkill
- create-prSkill
- doneSkill
- embed-html-appSkill
- grill-with-docsSkill
- handoffSkill
- implementationSkill
- merge-riskSkill
- releaseSkill
- review-cycleSkill
- review-markdown-commentsSkill
- simplifySkill
- taste-reviewSkill
- test-desktop-appSkill
- to-issuesSkill
- triageSkill
- vercel-react-best-practicesSkill
- write-product-specSkill
- write-tech-specSkill
- writing-testsSkill
The file
We split this skill into the rules it gives an agent
8 rules. About 0 are common, 2 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 14
Use this skill, not tldraw-offline, for:
- Very specific: line 20
Do not open the tldraw offline app or call its local API for these files, even when its skill is installed.
- Very specific: line 24
Use tldraw-offline instead only when the user names the tldraw offline app, or the file is an existing .tldraw archive.
- Very specific: line 44
Run summary instead of reading the file.
- Very specific: line 46
Read the file, then edit its records array.
- Very specific: line 49
Run fix. It fills defaults, binds arrows, writes the file in Hubble's format, then runs check.
- Distinctive: line 56
Read the file right before writing it.
- Distinctive: line 119
Use color to group related shapes, not to decorate each one.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Edit Diagram
A Hubble diagram is a .tldr file: tldraw's JSON file format. Hubble opens it
in a built-in tldraw canvas and reloads it live when the file changes on disk,
keeping the user's view in place. Edit the file directly.
Routing
Use this skill, not tldraw-offline, for:
- any
.tldrfile - a new diagram, canvas, or whiteboard, created as a
.tldrfile next to the user's notes
Do not open the tldraw offline app or call its local API for these files, even
when its skill is installed. Never create a .tldraw file: that is tldraw
offline's archive format, and Hubble does not open it.
Use tldraw-offline instead only when the user names the tldraw offline app,
or the file is an existing .tldraw archive.
Tool
scripts/diagram.mjs in this skill loads diagrams with the same tldraw version
Hubble ships. The first run installs it into ~/.cache/hubble-skills, which
needs npm and network access once.
node scripts/diagram.mjs summary path/to/file.tldr # shapes, labels, arrows
node scripts/diagram.mjs fix path/to/file.tldr # complete, validate, save
node scripts/diagram.mjs check path/to/file.tldr # validate and lint onlyfix saves nothing if tldraw rejects a record, and prints the field it
rejected.
Workflow
- Run
summaryinstead of reading the file. Image assets embed as base64 and can make the raw JSON very large. - Read the file, then edit its
recordsarray. Write only the fields you need (see below). Keep every record you are not changing as it is, and never editschemaor asset records. - Run
fix. It fills defaults, binds arrows, writes the file in Hubble's format, then runscheck. - Fix every
error. Eachwarningis a heuristic: act on it unless the layout is intentional. - Report what changed by shape id and label. There is no screenshot; if placement matters, ask the user to look in Hubble.
Read the file right before writing it. Hubble saves the user's own canvas edits to the same file, and a write based on an old read discards them.
To create a diagram, write a file with only a records array, then run fix.
An empty .tldr file is also valid: Hubble opens it as a blank diagram.
Records
fix completes shapes, so a new shape needs only id, typeName, type,
position, and the props that matter:
{
"records": [
{ "id": "shape:request", "typeName": "shape", "type": "geo", "x": 0, "y": 0,
"props": { "w": 220, "h": 100, "text": "Request" } },
{ "id": "shape:server", "typeName": "shape", "type": "geo", "x": 400, "y": 0,
"props": { "w": 220, "h": 100, "text": "Server", "color": "blue", "fill": "semi" } },
{ "id": "shape:calls", "typeName": "shape", "type": "arrow",
"props": { "from": "shape:request", "to": "shape:server", "text": "POST /save" } }
]
}- Ids start with
shape:and are readable (shape:server). Never change an existing id: bindings point at it. textis shorthand for a label.fixconverts it to tldraw'srichText. To relabel an existing shape, delete itsrichTextand settext.- Arrows connect shapes with
fromandto.fixturns them into bindings, so the arrow follows the shapes when they move.checkreports an arrow with an unbound end. Mark an intentionally loose arrow with"meta": { "decorative": true }. - To delete a shape, remove its record, every binding whose
toIdis that shape, and arrows that only made sense with it. - A shape inside a
framehas"parentId": "<frame id>"andx/yrelative to the frame.
Shapes
geo: a box with a label.props.geoisrectangle(default),ellipse,diamond,triangle,hexagon,oval,cloud,star,pentagon,octagon,rhombus,trapezoid,arrow-right,x-box, orcheck-box.note: a sticky note, 200×200. Size it withprops.scale, notw/h.text: free-standing words, such as a heading over a group. A label for a box goes in that box'stext, not a separate text shape.frame: a named container (props.name) with children.arrow: a connection, as above.props.bendcurves it.
Shared props:
color:black,grey,light-violet,violet,blue,light-blue,yellow,orange,green,light-green,light-red,red,white.fill:none,semi,solid,pattern.size:s,m,l,xl.font:draw(hand-drawn, the default),sans,serif,mono.dash:draw,solid,dashed,dotted.
Layout
- Match the existing diagram's sizes, colors, and font before adding to it.
- Lay boxes on a grid with equal gaps. A 220×100 box fits a short label at
size
m. Leave 160px or more between boxes joined by a labeled arrow, and 80px or more otherwise. - Use color to group related shapes, not to decorate each one.
- Boxes should not partly overlap. A box fully inside a larger one, like a lane or container, is fine.
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.

