skills/penpot-workflow/SKILL.md
Manage design work in Penpot — create projects, organize pages, build components, export assets, review designs visually, and handle design-to-code handoff. Use when asked to create designs, manage Penpot projects, build components, export tokens, set up a new design project, review a design, take screenshots, or show what something looks like.
npx skillsauth add espennilsen/pi penpot-workflowInstall 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.
Step-by-step workflows for managing design work in Penpot via the pi-penpot extension.
When starting a new design project:
Design System — shared components, tokens, and stylesWireframes — low-fidelity layouts and flowsDashboard, Settings, Onboarding)Use penpot_page tool actions. All shapes support fills, opacity, and rotation on creation.
Rectangles and frames also support r1-r4 for border radius on creation:
penpot_page add-rectangle fileId=X pageId=Y x=0 y=0 width=200 height=100
fills=[{fillColor: "#1E293B", fillOpacity: 1}]
r1=12 r2=12 r3=12 r4=12
Text supports fontSize, fontWeight, fontFamily, fontColor on creation:
penpot_page add-text fileId=X pageId=Y x=0 y=0 width=200 height=40
text="Hello World"
fontSize="24" fontWeight="700" fontFamily="sourcesanspro" fontColor="#FFFFFF"
sourcesanspro — Source Sans Pro (default, always available)create-font-variantAlways pass fontSize and fontWeight as strings: "24" not 24, "700" not 700.
After creation, use modify-shape to add advanced styling. First-class params:
penpot_page modify-shape fileId=X pageId=Y shapeId=Z r1=16 r2=16 r3=16 r4=16
r1 = top-left, r2 = top-right, r3 = bottom-right, r4 = bottom-leftpenpot_page modify-shape fileId=X pageId=Y shapeId=Z
shadow=[{
style: "drop-shadow",
color: {color: "#000000", opacity: 0.3},
offsetX: 0, offsetY: 4, blur: 12, spread: 0
}]
drop-shadow, inner-shadowpenpot_page modify-shape fileId=X pageId=Y shapeId=Z
blur={type: "layer-blur", value: 4}
layer-blur, background-blurpenpot_page modify-shape fileId=X pageId=Y shapeId=Z
strokes=[{strokeColor: "#7C3AED", strokeOpacity: 0.5, strokeWidth: 2, strokeAlignment: "inner"}]
inner, center, outersolid, dotted, dashed, mixed, nonepenpot_page modify-shape fileId=X pageId=Y shapeId=Z
textContent={
type: "root",
children: [{type: "paragraph-set", children: [{type: "paragraph", children: [{
text: "Updated text",
fontFamily: "sourcesanspro",
fontSize: "32",
fontWeight: "700",
fontStyle: "normal",
fillColor: "#FFFFFF",
fillOpacity: 1
}]}]}]
}
Use attrs as a catch-all for any shape property not covered above:
penpot_page modify-shape fileId=X pageId=Y shapeId=Z
attrs={hidden: true, blocked: false}
penpot get-file before manual API calls| Feature | Create | Modify | Notes | |---------|--------|--------|-------| | Position & size | ✅ | ✅ | x, y, width, height | | Fills | ✅ | ✅ | Array of fill objects | | Border radius | ✅ | ✅ | r1, r2, r3, r4 params | | Shadows | ❌ | ✅ | shadow param, UUID auto-generated | | Blur | ❌ | ✅ | blur param, UUID auto-generated | | Strokes | ✅ | ✅ | strokes param | | Text styling | ✅ | ✅ | fontSize/fontWeight/fontColor on create; textContent on modify | | Opacity | ✅ | ✅ | 0-1 number | | Rotation | ✅ | ✅ | degrees |
When you need to review your own work or the user asks you to review a design, capture actual rendered screenshots from Penpot's viewer.
penpot get-file fileId=<fileId>
penpot create-share-link fileId=<fileId> pages=[<pageId1>, <pageId2>] whoInspect="all"
Share links are required — Penpot's viewer won't render without either authentication or a share token.
The Penpot viewer URL format is:
https://penpot.e9n.dev/#/view?file-id=<fileId>&page-id=<pageId>§ion=interactions&index=0&share-id=<shareId>
Use Playwright to screenshot each page URL. Penpot is a complex ClojureScript SPA — wait 6+ seconds after navigation for it to render.
Cleanup: Always close the Playwright browser after capture to prevent leaking Chromium processes:
await browser.close();
Save screenshots to /tmp/penpot-<page-name>.png, then read them to view inline. After viewing, delete the temporary file to avoid accumulating disk usage:
rm /tmp/penpot-<page-name>.png
After viewing the screenshot, evaluate:
Follow atomic design methodology:
Use slash-separated categories: category/component-name/variant
buttons/primary/defaultbuttons/primary/hoverforms/text-input/fillednavigation/sidebar/collapsedEvery interactive component needs these states:
Design at these breakpoints (aligned with Tailwind):
Use Penpot's grid and layout features:
When preparing designs for developer handoff:
Export design tokens as JSON:
{
"colors": { "primary-500": "#7c6ff0", ... },
"spacing": { "1": "4px", "2": "8px", ... },
"typography": { "heading-1": { "size": "36px", "weight": 700, "lineHeight": 1.2 } },
"radii": { "sm": "4px", "md": "8px", "lg": "12px" },
"shadows": { "sm": "0 1px 2px rgba(0,0,0,0.05)", ... }
}
Map components to shadcn-svelte — document which Penpot component maps to which shadcn component and what customization is needed
Annotate specs — add notes on each page for:
Export assets — SVGs for icons and illustrations, optimized images
Use the pi-penpot extension's three tools:
penpot — org-level: projects, files, teams, libraries, webhooks, snapshots, share linkspenpot_page — design: pages, shapes (create/modify/delete/move), componentspenpot_comment — collaboration: comment threads and repliespenpot get-file returns pageIds and file featuresget-file must be passed back in update-filetools
# pi-a2a Long-Running Tasks Skill ## Overview The pi-a2a extension supports **long-running tasks** that can execute for hours or days without timeouts. This is essential for: - Data processing pipelines - Batch operations - Research and aggregation tasks - External API jobs with unpredictable duration - Any A2A task that exceeds the standard timeout ## When to Use **Use long-running tasks when:** - Task execution time is unpredictable or known to exceed 10 minutes - The remote agent is proc
development
Orchestrate cmux terminal panes — split terminals, run parallel processes, read output from other panes, and use the built-in browser. Use when working inside cmux and you need to run a dev server, watch tests, spawn sub-agents, or preview web pages.
testing
Review UI designs and implementations for accessibility, consistency, usability, and visual quality. Use when asked to review a design, audit accessibility, check UI consistency, compare implementation against mockups, or evaluate a user interface.
tools
Create, review, and improve skills for Pi agents. A skill is a folder with a SKILL.md that teaches an agent specialized workflows, domain knowledge, or tool integrations. Use when asked to create a new skill, improve an existing skill, review a skill for quality, scaffold a skill from a workflow, or convert documentation into a skill. Also triggers on "make a skill for", "build a skill", "skill for [topic]", "teach the agent to", or "package this workflow as a skill".