From learning-loop
Generates Excalidraw diagrams for concepts, mechanisms, and system architectures. Saves .excalidraw.md files to the vault's Excalidraw folder. Invoke via /learning-loop:diagram.
How this skill is triggered — by the user, by Claude, or both
Slash command
/learning-loop:diagramThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generate an Excalidraw diagram and save it to the vault. Handles the full pipeline: determine what to diagram, build the JSON, write the file, and optionally embed it in a note.
Generate an Excalidraw diagram and save it to the vault. Handles the full pipeline: determine what to diagram, build the JSON, write the file, and optionally embed it in a note.
/learning-loop:diagram "concept or mechanism" -- user specifies what to diagram/learning-loop:diagram -- infer from conversation contextIf args provided: Use as the concept description.
If no args: Read recent conversation. Identify the most diagram-worthy concept -- a mechanism, pathway, feedback loop, multi-step process, or system architecture where relationships between parts matter more than the parts themselves.
Diagram gate -- check BEFORE proceeding:
If the answer to all three is no, tell the user: "This works better as text/table -- no diagram needed." and stop.
Read the diagram-rules agent file to get the full Excalidraw construction spec:
PLUGIN/agents/_skills/diagram-rules.md
Follow every rule in that file. Key points:
.excalidraw.md format with empty ## Text Elements section#a5d8ff (blue), #b2f2bb (green), #ffec99 (yellow), #ffc9c9 (red), #d0bfff (purple)fontFamily: 5, roughness: 1frameId, index, versionNonce, or rawText fieldsBefore writing JSON, plan on paper:
Build the full Excalidraw JSON following diagram-rules exactly. Write to:
{{VAULT}}/Excalidraw/{slug}.excalidraw.md
Where {slug} is a descriptive kebab-case name (e.g., thalen-engagement-loop-tiers).
File format:
---
excalidraw-plugin: parsed
tags: [excalidraw]
---
==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving'
# Excalidraw Data
## Text Elements
%%
## Drawing
```json
{JSON here}
%%
### Step 5: Validate
Check the generated JSON:
1. No overlapping positions (30px minimum between edges)
2. Container text fits (text width < container width - 60px)
3. Arrow first point is `[0, 0]`, width/height match point bounding box
4. All IDs unique
5. No `frameId`, `index`, `versionNonce`, or `rawText` fields present
### Step 6: Report
Diagram: "{title}" -> Excalidraw/{slug}.excalidraw.md Embed with: ![[{slug}]]
If the conversation has an obvious note to embed it in, suggest which note. Otherwise just report the path.
## Key Principles
- **Connections carry meaning.** If you remove the arrows and it still works, it was a layout, not a diagram.
- **Focused scope.** One mechanism per diagram. Split complex systems.
- **Follow diagram-rules exactly.** Read the agent file every time. Don't rely on memory.
- **No extra elements.** Default to free-floating text. Only add containers when the shape itself carries meaning.
- **Calculate widths.** Never hardcode text widths. Compute from character count every time.
npx claudepluginhub robinslange/learning-loop --plugin learning-loopGenerates Excalidraw JSON diagram files (.excalidraw) for visualizing workflows, architectures, and concepts as visual arguments with evidence artifacts for technical diagrams.
Generates Excalidraw JSON diagram files (.excalidraw) for visualizing workflows, architectures, and concepts as visual arguments with evidence artifacts for technical diagrams.
Generates hand-drawn Excalidraw diagrams for concepts, architectures, mind maps, flows, and comparisons. Enforces accessibility and cognitive limits; auto-renders JSON to SVG.