Add the image-to-design workflow to skills/penpot/SKILL.md #212
Closed
opened 2026-09-14 23:14:25 +00:00 by david
·
1 comment
No Branch/Tag specified
main
feature/issue-264/verify-the-vision-tool-live-against-the-deepseek-a
feature/issue-263/list-the-vision-extension-in-the-repo-root-readme
feature/issue-262/write-extensions-vision-readme-md-the-10-section-p
feature/issue-261/wire-the-vision-extension-into-package-json-manife
feature/issue-260/implement-extensions-vision-index-ts-factory-regis
feature/issue-258/implement-extensions-vision-src-tool-ts-the-vision
feature/issue-257/implement-extensions-vision-src-client-ts-request
feature/issue-256/implement-extensions-vision-src-usage-ts-usage-map
feature/issue-255/implement-extensions-vision-src-images-ts-read-val
feature/issue-254/implement-extensions-vision-src-config-ts-env-reso
feature/issue-253/implement-extensions-vision-src-errors-ts-toolerro
feature/issue-252/penpot-add-text-stages-zero-area-auto-width-text-p
feature/issue-216/add-the-penpot-skill-and-extension-to-the-repo-roo
feature/issue-217/register-the-penpot-tests-in-npm-test-complete-the
feature/issue-215/write-the-penpot-skill-md-core-workflow-token-conv
feature/issue-214/implement-and-run-fetch-penpot-docs-mjs-and-commit
feature/issue-213/validate-screenshot-reconstruction-against-the-liv
feature/issue-212/add-the-image-to-design-workflow-to-skills-penpot
feature/issue-211/validate-svg-import-icon-and-illustration-against
feature/issue-210/implement-the-penpot-add-svg-tool-with-svg-raw-fal
feature/issue-209/implement-the-svg-to-shapes-converter-in-src-svg-t
feature/issue-208/validate-component-instancing-against-the-live-ins
feature/issue-207/implement-penpot-instance-component-with-id-remapp
feature/issue-206/author-and-commit-the-component-library-artifact-u
feature/issue-205/implement-file-library-linking-and-validate-the-ex
feature/issue-204/implement-penpot-export-library-sse-uri-plus-artif
feature/issue-203/implement-penpot-import-library-multipart-upload-p
feature/issue-202/implement-the-transit-decoder-and-sse-stream-parse
feature/issue-201/validate-a-full-composed-screen-one-commit-one-rev
feature/issue-200/implement-penpot-add-image-with-media-upload
feature/issue-199/implement-asset-reference-resolution-plus-penpot-a
feature/issue-198/implement-penpot-add-frame-with-auto-layout-props
feature/issue-197/validate-asset-creation-atomicity-and-write-safety
feature/issue-196/implement-the-designated-target-write-guard-with-a
feature/issue-195/implement-penpot-commit-with-revn-tracking-conflic
feature/issue-194/implement-the-staged-changeset-store-and-the-colou
feature/issue-193/validate-read-primitives-against-the-live-penpot-i
feature/issue-192/implement-the-penpot-list-library-tool-with-name-t
feature/issue-191/implement-the-penpot-get-file-tool-pages-objects-a
feature/issue-190/implement-the-penpot-list-projects-tool-teams-and
feature/issue-189/implement-the-penpot-whoami-tool-and-wire-the-exte
feature/issue-188/implement-the-rpc-client-and-error-decoding-in-src
feature/issue-187/implement-penpot-url-penpot-token-resolution-in-sr
feature/issue-186/scaffold-the-penpot-extension-directory-and-regist
feature/issue-172/add-end-to-end-main-tests-for-the-fj-rg-tool-state
feature/issue-171/make-reminder-report-dynamic-install-skip-counts-r
feature/issue-170/wire-settings-json-filter-rewrite-into-dedupeandre
feature/issue-169/implement-buildpackagefilters-with-exhaustive-unit
feature/issue-168/refactor-preflight-to-skip-warn-for-missing-fj-rg
feature/issue-167/add-fj-rg-tool-detection-helpers-rgavailable-detec
feature/issue-148/reconcile-design-md-and-implementation-plan-with-t
feature/issue-146/verify-extension-load-behavior-with-and-without-mo
feature/issue-145/write-extensions-mongodb-readme-md
feature/issue-144/write-tool-description-promptsnippet-guidance-for
feature/issue-143/implement-index-ts-async-factory-lifecycle-with-te
feature/issue-142/implement-the-mongo-list-collections-tool-with-uni
feature/issue-141/implement-the-mongo-count-tool-with-unit-tests
feature/issue-140/implement-the-mongo-find-tool-with-unit-tests
feature/issue-139/implement-src-errors-ts-with-unit-tests-toolerror
feature/issue-138/implement-src-serialize-ts-with-unit-tests-ejson-t
feature/issue-136/implement-src-env-ts-with-unit-tests-mongodb-uri-r
feature/issue-135/register-the-mongodb-extension-in-the-repo-root-pa
feature/issue-133/initialize-the-extensions-mongodb-package-package
feature/issue-116/src-actions-ts-downloadrunlogs-zip-guarded-unzip-c
feature/issue-115/src-actions-ts-downloadjoblog-cache-first-attempt
feature/issue-114/src-actions-ts-metadata-queries-listactionruns-get
feature/issue-113/src-actionscache-ts-cache-paths-cache-first-read-w
feature/issue-112/add-zip-extraction-dependency-adm-zip-vs-yauzl
feature/issue-111/tracking-forgejo-actions-tooling-read-only-runs-jo
feature/issue-93/add-unit-tests-for-scripts-local-install-mjs-node
feature/issue-92/validate-install-local-end-to-end-on-the-dev-machi
feature/issue-90/implement-pi-registration-with-url-dedupe-and-relo
feature/issue-89/validate-install-local-from-a-scratch-clone-fresh
feature/issue-88/implement-git-pull-and-npm-install-steps-in-script
feature/issue-74/write-victorialogs-readme-md-and-reconcile-design
feature/issue-73/wire-up-index-ts-extension-factory-and-register-al
feature/issue-72/implement-logs-facets-tool-src-tools-facets-ts
feature/issue-71/implement-logs-hits-tool-src-tools-hits-ts
feature/issue-70/implement-logs-search-tool-src-tools-search-ts
feature/issue-69/implement-parsejsonlines-helper-in-src-client-ts
feature/issue-68/implement-victorialogsrequest-in-src-client-ts
feature/issue-67/implement-resolvebaseurl-in-src-env-ts
feature/issue-66/implement-totoolerror-in-src-errors-ts
feature/issue-65/implement-src-defaults-ts-shared-constants-and-app
feature/issue-64/scaffold-the-victorialogs-pi-extension-project
feature/issue-53/skip-issue-creation-for-chore-documentation-commit
feature/issue-45/fix-local-install-preflight-env-var-requirements-s
feature/issue-41/add-npm-run-local-install-script-to-update-and-ins
feature/issue-26/cross-reference-forgejo-list-milestones-from-issue
feature/issue-25/add-forgejo-milestone-delete-tool
feature/issue-24/add-forgejo-milestone-close-and-forgejo-milestone
feature/issue-23/add-forgejo-milestone-edit-tool
feature/issue-22/add-forgejo-milestone-view-tool
feature/issue-21/add-forgejo-list-milestones-tool
feature/issue-20/add-forgejo-milestone-create-tool
feature/issue-18/add-forgejo-label-create-tool
feature/issue-29/bug-forgejo-issue-create-view-edit-close-etc-crash
No results found.
Labels
No labels
bug
chore
documentation
enhancement
feature
ready
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
david/pi-extensions-and-skills#212
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Create
skills/penpot/SKILL.mdwith valid pi skill frontmatter and the image → design creation path: read a screenshot or mockup with pi'sreadtool, reconstruct its structure semantically, and emit Penpot primitives — with an optionalrsvg-convertvisual self-critique step. Vision-only: no tracing dependency, and approximate fidelity is stated as the accepted outcome.Background
Depends on: #201
Image → design is deliberately not a tracing pipeline. PNG→SVG tracing was rejected as the primary mechanism because it produces anonymous path soup with no layer names, no text objects and no asset references — which contradicts the whole point of the feature ("editable, design-system-linked output"). Instead the agent looks at the image, infers structure (what is a card, what is a heading, what is a button), and composes with the same primitives a written spec would use.
The skill is the right home for this: the extension cannot know that a rounded rectangle with a label is a button; that is judgement. What the extension guarantees is that whatever the agent decides is emitted as valid, library-linked shapes.
pi reads images as attachments through the
readtool, so the workflow is:readthe screenshot, describe the structure to yourself, map each region to primitives, commit, then look at the result and iterate.This step creates the skill with its frontmatter and this one path; the remaining skill content (token conventions, composition rules, the Tailwind translation table, the other two paths, the vendored-docs pointer) is written in the following milestone. Do not leave placeholder sections for them.
Documentation Required
A separate process downloads these into the listed folders before this issue is implemented. Check the folders for the actual reference material before starting.
docs/reference/pi-coding-agent/SKILL.mdfrontmatter (name,description), where skills live, how they are discovered, and what makes a description trigger correctly. The new file must pass this validation.readtool's image handling, confirming that an image path is sent to the model as an attachment.docs/reference/penpot-api/docs/reference/tailwindcss/@themetoken block, since screenshots of a coded UI are usually screenshots of a Tailwind design system; the reconstruction should reuse those names.docs/reference/librsvg/rsvg-convert(1)manual for the optional self-critique step (render agent-authored SVG to PNG so the agent can look at its own output).Implementation Details
Create
skills/penpot/SKILL.mdwith:Frontmatter matching the repo's other skills:
The description must be specific enough to trigger on design-creation requests and must name the
penpotextension, mirroringskills/victorialogs-debugging/SKILL.md's style.A short intro stating what the skill does, that it requires the
penpotextension plusPENPOT_URL/PENPOT_TOKEN, and that the extension owns payload correctness while the skill owns judgement.The image → design path section, covering:
read(path to the screenshot) and describe the structure before writing anything: shell/chrome, regions, repeated components, text levels, spacing rhythm.The optional self-critique step: for agent-authored SVG (not for Penpot output), render to PNG with
rsvg-convertandreadit back to compare against intent. State plainly that pi reads SVG as text, so the PNG render is the only way to see an SVG.A "what this path is not" note: no tracing (potrace/vtracer/Inkscape), no HTML/CSS input, no animation.
Keep it operational: short imperative instructions with the concrete tool calls named (
penpot_authorize_target,penpot_add_frame,penpot_add_text,penpot_instance_component,penpot_commit), not abstract advice.Acceptance Criteria
skills/penpot/SKILL.mdexists with valid frontmatter (name: penpot, a specificdescription) and is discovered by pi (/skillslists it).rsvg-convertself-critique step is documented as for agent-authored SVG only, with the reason (pi reads SVG as text).Test Plan
Load the skill in pi:
Frontmatter sanity check:
End-to-end rehearsal of the documented path on a real screenshot is the next issue's job; here, confirm the instructions name only tools that actually exist in the extension.
pi-loop opened and merged a pull request for this issue: #245