skills/open-pencil-design-editor/SKILL.md
AI-native open-source Figma alternative with CLI, MCP server, and Vue SDK for reading/writing .fig files programmatically.
npx skillsauth add aradotso/trending-skills open-pencil-design-editorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Skill by ara.so — Daily 2026 Skills collection.
OpenPencil is an open-source, AI-native design editor that reads and writes native Figma (.fig) files, provides a headless CLI, an MCP server for AI agents, and a Vue SDK for building custom editors. It is MIT-licensed and runs in the browser, as a desktop app (Tauri/macOS/Windows/Linux), or fully headlessly.
Visit app.openpencil.dev/demo.
brew install open-pencil/tap/open-pencil
Or download from releases.
bun add -g @open-pencil/cli
bun add -g @open-pencil/mcp
git clone https://github.com/open-pencil/open-pencil
cd open-pencil
bun install
bun run dev # Web app at localhost:1420
bun run tauri dev # Desktop (requires Rust)
The open-pencil CLI operates on .fig files headlessly. When the desktop app is running, omit the file argument to connect to the live canvas via RPC.
# Print the full node tree
open-pencil tree design.fig
# Find nodes by type
open-pencil find design.fig --type TEXT
open-pencil find design.fig --type FRAME
# Get a specific node by ID
open-pencil node design.fig --id 1:23
# File metadata
open-pencil info design.fig
# All frames
open-pencil query design.fig "//FRAME"
# Frames narrower than 300px
open-pencil query design.fig "//FRAME[@width < 300]"
# Text nodes whose name contains "Button"
open-pencil query design.fig "//TEXT[contains(@name, 'Button')]"
# Nodes with rounded corners
open-pencil query design.fig "//*[@cornerRadius > 0]"
# Text inside sections
open-pencil query design.fig "//SECTION//TEXT"
# PNG (default)
open-pencil export design.fig
# JPG at 2x scale, quality 90
open-pencil export design.fig -f jpg -s 2 -q 90
# SVG
open-pencil export design.fig -f svg
# WEBP
open-pencil export design.fig -f webp
# JSX with Tailwind v4 utility classes
open-pencil export design.fig -f jsx --style tailwind
Example Tailwind output:
<div className="flex flex-col gap-4 p-6 bg-white rounded-xl">
<p className="text-2xl font-bold text-[#1D1B20]">Card Title</p>
<p className="text-sm text-[#49454F]">Description text</p>
</div>
open-pencil analyze colors design.fig
open-pencil analyze typography design.fig
open-pencil analyze spacing design.fig
open-pencil analyze clusters design.fig # Repeated structures / component candidates
eval)# Read: count children on the current page
open-pencil eval design.fig -c "figma.currentPage.children.length"
# Read: get all text node contents
open-pencil eval design.fig -c "figma.currentPage.findAll(n => n.type === 'TEXT').map(n => n.characters)"
# Write: set opacity of all selected nodes (-w writes back to file)
open-pencil eval design.fig -c "figma.currentPage.selection.forEach(n => n.opacity = 0.5)" -w
# Write: rename all frames on the page
open-pencil eval design.fig -c "figma.currentPage.findAll(n => n.type === 'FRAME').forEach((f, i) => f.name = 'Frame ' + i)" -w
# Connect to the live running desktop app (no file arg)
open-pencil eval -c "figma.currentPage.name"
open-pencil tree
open-pencil export -f png
All commands support --json for machine-readable output:
open-pencil find design.fig --type TEXT --json
open-pencil analyze colors design.fig --json
The MCP server exposes 90 tools (87 core + 3 file management) for AI agents to read and write .fig files.
bun add -g @open-pencil/mcp
Add to your MCP client config (e.g. ~/.claude/mcp.json or Cursor settings):
{
"mcpServers": {
"open-pencil": {
"command": "openpencil-mcp"
}
}
}
openpencil-mcp-http
# Listens at http://localhost:3100/mcp
npm i -g @zed-industries/claude-agent-acp
~/.claude/settings.json:
{
"permissions": {
"allow": ["mcp__open-pencil"]
}
}
Ctrl+J → select Claude Code from the provider dropdown.npx skills add open-pencil/skills@open-pencil
⌘J (macOS) or Ctrl+J (desktop/web).Configure via the provider dropdown in the chat panel:
| Provider | Env var |
|---|---|
| Anthropic | ANTHROPIC_API_KEY |
| OpenAI | OPENAI_API_KEY |
| Google AI | GOOGLE_AI_API_KEY |
| OpenRouter | OPENROUTER_API_KEY |
| Any compatible endpoint | Custom base URL |
No server, no account. Peer-to-peer via WebRTC.
app.openpencil.dev/share/<room-id>.packages/
core/ @open-pencil/core — engine: scene graph, renderer, layout, codec
cli/ @open-pencil/cli — headless CLI
mcp/ @open-pencil/mcp — MCP server (stdio + HTTP)
docs/ Documentation site
src/ Vue 3 app — components, composables, stores
desktop/ Tauri v2 (Rust + config)
tests/ E2E (188 tests) + unit (764 tests)
| Layer | Technology | |---|---| | Rendering | Skia (CanvasKit WASM) | | Layout | Yoga WASM (flex + CSS Grid) | | UI | Vue 3, Reka UI, Tailwind CSS 4 | | File format | Kiwi binary + Zstd + ZIP | | Collaboration | Trystero (WebRTC P2P) + Yjs (CRDT) | | Desktop | Tauri v2 | | AI/MCP | Anthropic, OpenAI, Google AI, OpenRouter; MCP SDK; Hono |
bun run dev # Start web dev server (localhost:1420)
bun run tauri dev # Start desktop app (requires Rust)
bun run check # Lint + typecheck
bun run test # E2E visual regression tests
bun run test:unit # Unit tests
bun run format # Code formatting
bun run tauri build # Production desktop build
Desktop prerequisites: Rust + Tauri v2 platform deps.
open-pencil eval design.fig \
-c "figma.currentPage.findAll(n => n.type === 'TEXT').forEach((t, i) => t.name = 'Text_' + i)" \
-w
open-pencil analyze colors design.fig --json > colors.json
for id in $(open-pencil find design.fig --type FRAME --json | jq -r '.[].id'); do
open-pencil export design.fig --id "$id" -f png -o "frames/$id.png"
done
# Find all nodes named with a "btn-" prefix
open-pencil query design.fig "//*[starts-with(@name, 'btn-')]"
When the desktop app is open, the MCP stdio server can connect to the live canvas. No file path needed — all reads and writes go to the open document.
{
"mcpServers": {
"open-pencil": {
"command": "openpencil-mcp"
}
}
}
open-pencil export design.fig --id 1:23 -f jsx --style tailwind
openpencil-mcp not found after install
bun's global bin dir is on your PATH: export PATH="$HOME/.bun/bin:$PATH"npx openpencil-mcp as the MCP command value.Desktop app CLI connection fails
Tauri dev build errors
rustup update.fig file won't open
.fig backup or plugin artifact).open-pencil info design.fig to check if the codec can parse the header.AI chat returns no response
Collaboration peers not connecting
development
```markdown --- name: compose-performance-skills description: Install and use the skydoves/compose-performance-skills agent skill library to diagnose and fix Jetpack Compose performance issues including stability, recomposition, lazy layouts, modifiers, side effects, and build configuration. triggers: - "my composable recomposes too often" - "LazyColumn drops frames during scroll" - "diagnose Compose stability issues" - "fix unnecessary recomposition in Jetpack Compose" - "optimize Com
development
Headless iOS Simulator manager with host-side HID input injection, 60fps streaming, and device farm web UI for iOS 26
development
```markdown --- name: claude-code-game-studios description: Turn Claude Code into a full 49-agent game dev studio with 72 workflow skills, automated hooks, and a real studio hierarchy for Godot, Unity, and Unreal projects. triggers: - "set up claude code game studios" - "use ai agents for game development" - "set up game dev studio with claude" - "add game studio agents to my project" - "how do I use claude code for game dev" - "set up godot unity unreal ai workflow" - "49 agents g
development
```markdown --- name: xq-py-quantum-vm description: Python implementation of the Quip Network's quantum virtual machine (xqvm) triggers: - quantum virtual machine python - xqvm quip network - quantum circuit simulation python - xq-py quantum vm - quip network quantum python - simulate quantum gates python - quantum vm xqvm - xqvm-py quantum circuit --- # xq-py Quantum Virtual Machine > Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection. `xqvm-py` is a Python impl