Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Package the user's just-finished work as an Open Design plugin without asking for fields the project files already answer, then surface the existing Add-to-My-plugins / Open-Design-PR buttons.
.claude/skills/nexu-io-od-share-to-community/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 64% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 210% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -26% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 249% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 28% | 0% |
Triggered by the post-completion "Share to OpenDesign" submission action. The user just finished a piece of work in this project and wants to ship it as a plugin. They have not been asked any questions yet.
Produce a folder named generated-plugin/ in the active project workspace. At minimum:
SKILL.md with frontmatter and clear agent instructions.open-design.json with valid plugin metadata: specVersion, name, version, description, mode, task kind, inputs, plus any pipeline / context references the workflow needs.plugin.repo is optional during scaffolding, but do not silently omit it: check gh --version and gh auth status, then prefer the local account login printed by auth status. Only use gh api user --jq .login as a fallback when auth status does not expose a login. If gh is missing, not logged in, rate-limited, or cannot resolve a real owner, omit plugin.repo instead of inventing an owner and explicitly report the auth problem with gh auth refresh -h github.com -s repo,workflow, gh auth login -h github.com -s repo,workflow, or od plugin publish-repo generated-plugin --owner <github-login-or-org> as recovery commands. Never write placeholder owners such as open-design-user, <vendor>, example-user, your-org, or your-username into the final manifest.examples/ and assets/ only when they help review or reuse.The agent's CWD is the user's OD project root. Before generating anything, read what's already there and infer the plugin from it. Treat the project files as the source of truth; the user does not need to retype things you can see.
What to read, in this order, and what to take from each:
*.artifact.json (or artifact.json) at the project root — task kind, mode, the prompt the user actually ran, the file the agent produced. This drives od.taskKind, od.mode, the default useCase.query, and the example output path.brand-spec.md / DESIGN.md if present — voice, brand name, audience. Folds into the plugin description and tags.*.html, *.tsx, *.svg, etc. the agent wrote during this session) — pick the most recent / largest one as useCase.exampleOutputs[0].path after copying it under generated-plugin/examples/.description and the default useCase.query.Pick a stable plugin id from what you derived: lowercase letters, numbers, dashes, underscores, dots. Prefer something the brand-spec or artifact metadata suggests over inventing one.
If a field truly cannot be derived (e.g. no artifact.json exists, no brand-spec, the project is too sparse), only then ask the user — and emit one consolidated <question-form> block, not field-by-field prose questions. Default the answers from whatever you did manage to derive so the user can accept the proposed values directly in the rendered form. <question-form> is assistant-text markup rendered by OpenDesign, not a native tool call.
Run od plugin validate on the folder, then od plugin pack for a tarball, then od plugin install --source <absolute-folder-path> to confirm the install path works.
Write a single summary turn covering: files created, od plugin validate status, local install / run status, and od plugin pack output. Then STOP.
Do NOT suggest follow-up CLI commands such as od plugin publish, od plugin publish --to open-design, gh repo create, git init / git remote add / git push, or any other publish / repo wiring. The plugin-folder card under Design Files already exposes three buttons whose prompts drive those flows end-to-end with the right auth gates, fallbacks, and retry rules baked in:
od plugin install --source step.plugin.repo GitHub repo through a gh + git sequence the agent is told exactly how to run.nexu-io/open-design for the community catalog.Point the user at whichever button they want next; do NOT recreate those flows as freeform shell suggestions in this summary. Recreating them drifts from the button prompts' guarantees and is the source of the bug that closed #2332.
jq is on PATHDo NOT assume the standalone jq binary is installed (it is not part of the OD agent runtime baseline and is missing from default macOS / Windows shells). When you need to read the manifest, prefer your built-in file-reading tool, then cat generated-plugin/open-design.json followed by manual JSON parsing, then node -e 'console.log(JSON.parse(require("fs").readFileSync("generated-plugin/open-design.json","utf8")))'. The gh ... --jq flag is fine because gh ships its own embedded library; the brew-installed standalone jq is NOT.
Mirror the user's chat language in any <question-form> titles, labels, descriptions, options, and helper text, as well as status updates and error explanations. Generated artifacts (manifest fields, SKILL.md body, PR / commit messages, branch names) MUST stay English regardless of the chat language — that's the OD plugins-spec convention and matches the existing scenarios under plugins/_official/scenarios/.
textgenerated-plugin/ SKILL.md open-design.json examples/ <copied-from-the-project> assets/ <if-needed>
docs/plugins-spec.mddocs/schemas/open-design.plugin.v1.jsonplugins/_official/scenarios/od-plugin-authoring/SKILL.md for the from-scratch authoring counterpart.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 5,675 | 23,099 | +307% | 1 | 1 | 0% | 216 | 2,281 | +956% | 0 | 0 | — |
case-02 | fail→fail | 4,537 | 6,123 | +35% | 1 | 1 | 0% | 272 | 2,167 | +697% | 0 | 0 | — |
case-03 | fail→fail | 5,601 | 10,277 | +83% | 1 | 1 | 0% | 243 | 1,885 | +676% | 0 | 0 | — |
case-04 | fail→fail | 13,658 | 9,425 | -31% | 1 | 1 | 0% | 1,508 | 2,069 | +37% | 0 | 0 | — |
case-05 | fail→pass | 9,083 | 5,500 | -39% | 1 | 1 | 0% | 1,548 | 2,541 | +64% | 0 | 0 | — |
case-06 | pass→pass | 7,479 | 2,952 | -61% | 1 | 1 | 0% | 1,077 | 2,076 | +93% | 0 | 0 | — |
case-07 | pass→pass | 9,921 | 3,856 | -61% | 1 | 1 | 0% | 1,455 | 2,217 | +52% | 0 | 0 | — |
case-08 | fail→pass | 12,308 | 22,826 | +85% | 1 | 1 | 0% | 1,738 | 5,394 | +210% | 0 | 0 | — |
case-09 | fail→pass | 15,808 | 2,889 | -82% | 1 | 1 | 0% | 2,706 | 2,005 | -26% | 0 | 0 | — |
case-10 | fail→fail | 11,928 | 6,069 | -49% | 1 | 1 | 0% | 1,567 | 1,972 | +26% | 0 | 0 | — |
case-11 | pass→pass | 11,177 | 9,227 | -17% | 1 | 1 | 0% | 2,136 | 2,841 | +33% | 0 | 0 | — |
case-12 | fail→fail | 13,205 | 3,898 | -70% | 1 | 1 | 0% | 1,752 | 2,082 | +19% | 0 | 0 | — |
case-13 | fail→pass | 5,579 | 6,726 | +21% | 1 | 1 | 0% | 709 | 2,473 | +249% | 0 | 0 | — |
case-14 | pass→pass | 5,572 | 4,544 | -18% | 1 | 1 | 0% | 1,003 | 2,287 | +128% | 0 | 0 | — |
case-15 | pass→pass | 6,891 | 3,275 | -52% | 1 | 1 | 0% | 900 | 1,995 | +122% | 0 | 0 | — |
case-16 | fail→pass | 12,370 | 4,443 | -64% | 1 | 1 | 0% | 1,668 | 2,130 | +28% | 0 | 0 | — |
case-21 | pass→fail | 4,501 | 4,778 | +6% | 1 | 1 | 0% | 914 | 1,857 | +103% | 0 | 0 | — |
case-17 | pass→pass | 12,163 | 4,581 | -62% | 1 | 1 | 0% | 1,792 | 2,323 | +30% | 0 | 0 | — |
case-18 | fail→pass | 10,957 | 2,847 | -74% | 1 | 1 | 0% | 1,492 | 1,872 | +25% | 0 | 0 | — |
case-19 | pass→fail | 13,959 | 4,616 | -67% | 1 | 1 | 0% | 2,215 | 2,292 | +3% | 0 | 0 | — |
case-20 | pass→fail | 4,789 | 9,177 | +92% | 1 | 1 | 0% | 837 | 2,031 | +143% | 0 | 0 | — |
case-22 | pass→fail | 3,441 | 6,629 | +93% | 1 | 1 | 0% | 674 | 1,870 | +177% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 14 counted toward the lift figure. The other 8 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +9 percentage points is the difference between those two pass rates over the 14 comparable cases. 6 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.