excalidraw
Create Excalidraw diagrams in Obsidian using the ExcalidrawAutomate (EA) API.
Skill by hamchowderr
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/hamchowderr-excalidraw
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents, backend, data, productivity
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 26, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/excalidraw
What's inside
- Skill name
excalidraw- Description
- Create Excalidraw diagrams in Obsidian using the ExcalidrawAutomate (EA) API. Generates .excalidraw files saved directly to the vault — no external tools needed, Obsidian renders them natively. Two modes: (1) Single diagram on demand for any workflow, architecture, process, or data model — trigger on "diagram this", "draw a flowchart", "create an architecture diagram", "visualize this", "make an Excalidraw". (2) Full codebase walkthrough — autonomously reads a codebase and produces a complete visual system documentation (architecture, data flow, sequence, ER) plus interlinked Markdown notes — trigger on "document this codebase", "walk through this system", "diagram this app", "map out this repo", "create documentation for this project".
- License
- MIT
- Instructions
- 358 lines in SKILL.md · view on GitHub
Files (5)
- SKILL.md
- excalidraw-api.md · reference/
- color-palette.md · references/
- element-templates.md · references/
- json-schema.md · references/
SKILL.md (first lines)
# Excalidraw Diagram Creator
Generate Excalidraw diagrams using the ExcalidrawAutomate (EA) API. Output is a
compressed-Markdown drawing file saved directly to the Obsidian vault — Obsidian
renders it natively.
> [!important] On-disk filename — read this first
> `ea.create({ filename: "foo" })` does **not** write `foo.excalidraw`. It writes
> **`foo.excalidraw.md`** (Excalidraw stores drawings as compressed Markdown).
> Throughout this skill, when you call `ea.create({ filename: "name", ... })`:
> - The actual file on disk is **`<foldername>/name.excalidraw.md`**.
> - Embeds stay **`![[name.excalidraw]]`** — Obsidian resolves the `.excalidraw`
> basename to the real `name.excalidraw.md` file (do **not** write
> `![[name.excalidraw.md]]`).
> - **Verify success by the on-disk path `name.excalidraw.md`, not
> `name.excalidraw`.** A headless agent that `stat`s `name.excalidraw` will
> never find it and will falsely report failure.
**Before writing any diagram code**, read the bundled EA API reference at:
`${CLAUDE_PLUGIN_ROOT}/skills/excalidraw/reference/excalidraw-api.md`
For the full upstream plugin source, clone https://github.com/zsviczian/obsidian-excalidraw-plugin.
This skill has **two modes** depending on the request:
- **Single Diagram Mode** — user wants ONE diagram of a specific concept. Output: one `<name>.excalidraw.md` file.
- **Codebase Walkthrough Mode** — user wants to document an entire codebase visually. Output: 4-6 `<name>.excalidraw.md` files + interlinked markdown notes.
If the request mentions "document the codebase", "walk through this system", "map out this repo", or similar, jump to the **Codebase Walkthrough Mode** section. Otherwise stay in Single Diagram Mode.
---
## Core Philosophy
**Diagrams should ARGUE, not DISPLAY.**
A diagram isn't formatted text. It's a visual argument that shows relationships,
causality, and flow that words alone can't express. The shape should BE the meaning.
**The Isomorphism Test**: If you removed all text, would the structure alone communicate
the concept? If not, redesign.
For technical diagrams, use real names from the codebase — never "Service A" or "Handler".
---
## How to Generate a Diagram
Every diagram is a JavaScript script that uses the EA API. A **headless agent
runs it via `Obsidian.com eval`** (see "Headless Execution" below) — this is the
default path for Claude. Templater or a vault EA script is only for a human
running it interactively inside Obsidian; do not assume Templater is available.
### Script Pattern
```javascript
const ea = ExcalidrawAutomate;
ea.reset(); // Always call first
// Set global styles
ea.style.roughness = 0;
ea.style.strokeWidth = 2;
ea.style.fontFamily = 1; // 1=Virgil, 2=Helvetica, 3=Cascadia
// Add elements
const rectId = ea.addRect(x, y, width, height);
const textId = ea.addText(x, y, "Label", { box: true, boxPadding: 15, width: 200 });
const ellipseId = ea.addEllipse(x, y, width, height);
const diamondId = ea.addDiamond(x, y, width, height);
// Connect elements
ea.connectObjects(idA, "right", idB, "left", {
label: "arrow label",
startArrowHead: null,
endArrowHead: "arrow",
});
// Save to vault. NOTE: this writes "2. Areas/Excalidraw/diagram-name.excalidraw.md"
// (filename has NO extension here; EA appends ".excalidraw.md"). ea.create() is
// async — always `await` it, and verify the .excalidraw.md file on disk
// afterward (see "Verifying a Diagram Was Written").
await ea.create({
filename: "diagram-name",
foldername: "2. Areas/Excalidraw",
onNewPane: true,
});
```
### Headless Execution (the default path for an agent)
You do **not** have Templater. Run an EA script from the command line via the
`obsidian` CLI's `eval` command. Obsidian must be running with the vault open
(the plugin exposes `window.ExcalidrawAutomate`).
**Procedure:**
1. **Write the EA script body to a temp file** (not inline — the Obsidian CLI
arg parser silently fails on `word:` sequences and `[` / `]`, which appear
in any non-trivial script). Use a normal file write to e.g.
`${TMPDIR}/ea-diagram.js`. The file contains only the *body* — the code that
uses `ea` (and optionally `utils`), starting at `ea.reset()`. Do **not**
include `const ea = ExcalidrawAutomate;` (the wrapper injects `ea`).
2. **Run it through `Obsidian.com eval`** with an async `new Function` wrapper that
binds `ea` to `window.ExcalidrawAutomate` and awaits the script. Reading the
script from disk inside the eval avoids all CLI-arg-parser escaping issues:
```bash
Obsidian.com eval code="(async () => {
const fs = require('fs');
const body = fs.readFileSync('/abs/path/to/ea-diagram.js', 'utf8');
const ea = window.ExcalidrawAutomate;
const utils = this.app ? { app: this.app } : {};
const fn = new Function('ea', 'utils',
'\"use strict\"; return (async () => { ' + body + ' })();');
await fn(ea, utils);
return 'ea-script-done';
})()"
```From hamchowderr/braynee, MIT.
More from hamchowderr/braynee
- 0.603score
settings-viewer
hamchowderr
Opens a live visual dashboard of your Claude Code configuration and usage analytics.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
clients
hamchowderr
Client relationship management.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
comms
hamchowderr
Sync client communication history (email + Slack) into Obsidian weekly rollup files.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
daily
hamchowderr
Open, create, or update today's daily note.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
health
hamchowderr
Run a Brain Check — audit your second brain across Setup, Connections, Beads, Memory, Rules, and Inbox.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
prd
hamchowderr
Author and manage Product Requirements Documents (PRDs) under "2.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
setup
hamchowderr
Second brain onboarding wizard.
SkillAFreshness: A★ 2Claude Code - 0.603score
recap
hamchowderr
Load context from previous Claude Code sessions and vault notes.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
board
hamchowderr
Build or refresh a repo's beads board — one published Artifact per repo that shows the backlog visually: status tiles, open PRs and deploys, epic progress, a…
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
sessions
hamchowderr
Export Claude Code sessions to Obsidian markdown.
SkillAFreshness: A★ 2Claude Code +9 - 0.599score
session-backfill
hamchowderr
Backfill structured session summaries from Claude Code .jsonl transcripts into the vault's per-project Sessions folder.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
query
hamchowderr
Search your vault using QMD (semantic + BM25).
SkillAFreshness: A★ 2Claude Code +9
Signals
- Stars
- 2
- Forks
- 0
- Open issues
- 1
- Last commit (this folder)
- Sep 21, 2026 (1 month ago)
- Last release
- Oct 12, 2026 (16 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/hamchowderr/braynee
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from hamchowderr
- 0.603score
clients
hamchowderr
Client relationship management.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
comms
hamchowderr
Sync client communication history (email + Slack) into Obsidian weekly rollup files.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
daily
hamchowderr
Open, create, or update today's daily note.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
health
hamchowderr
Run a Brain Check — audit your second brain across Setup, Connections, Beads, Memory, Rules, and Inbox.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
prd
hamchowderr
Author and manage Product Requirements Documents (PRDs) under "2.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
board
hamchowderr
Build or refresh a repo's beads board — one published Artifact per repo that shows the backlog visually: status tiles, open PRs and deploys, epic progress, a…
SkillAFreshness: A★ 2Claude Code +9
Cite this page
excalidraw skill. Agent Mart. https://agentmart.dev/skills/hamchowderr-excalidraw (last updated 2026-10-24)