@feimacode/open-design-agent-kit 0.1.8 → 0.3.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.md +3 -2
  2. package/assets/claude-skills/open-design/SKILL.md +79 -4
  3. package/assets/claude-skills/open-design/references/remixable-examples.md +30 -1
  4. package/assets/claude-skills/open-design-campaign/SKILL.md +68 -0
  5. package/assets/claude-skills/open-design-deck-from-source/SKILL.md +43 -0
  6. package/assets/claude-skills/open-design-docs/SKILL.md +52 -0
  7. package/assets/claude-skills/open-design-explore/SKILL.md +50 -0
  8. package/assets/claude-skills/open-design-integrations/SKILL.md +40 -0
  9. package/assets/claude-skills/open-design-new/SKILL.md +39 -0
  10. package/assets/claude-skills/open-design-poster/SKILL.md +81 -0
  11. package/assets/claude-skills/open-design-preview/SKILL.md +15 -0
  12. package/assets/claude-skills/open-design-publish/SKILL.md +48 -0
  13. package/assets/claude-skills/open-design-recurring/SKILL.md +86 -0
  14. package/assets/claude-skills/open-design-social-post/SKILL.md +16 -10
  15. package/assets/codex-skills/open-design/SKILL.md +61 -4
  16. package/assets/codex-skills/open-design/references/remixable-examples.md +30 -1
  17. package/assets/codex-skills/open-design-campaign/SKILL.md +60 -0
  18. package/assets/codex-skills/open-design-deck-from-source/SKILL.md +38 -0
  19. package/assets/codex-skills/open-design-docs/SKILL.md +51 -0
  20. package/assets/codex-skills/open-design-explore/SKILL.md +45 -0
  21. package/assets/codex-skills/open-design-integrations/SKILL.md +39 -0
  22. package/assets/codex-skills/open-design-new/SKILL.md +30 -0
  23. package/assets/codex-skills/open-design-poster/SKILL.md +76 -0
  24. package/assets/codex-skills/open-design-preview/SKILL.md +14 -0
  25. package/assets/codex-skills/open-design-publish/SKILL.md +36 -0
  26. package/assets/codex-skills/open-design-recurring/SKILL.md +81 -0
  27. package/assets/codex-skills/open-design-social-post/SKILL.md +11 -9
  28. package/out/index.js +171251 -110987
  29. package/out/preview/bridge.js +3 -0
  30. package/out/preview/mcp-app.js +209 -0
  31. package/out/preview/shell.js +70 -0
  32. package/package.json +2 -2
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: open-design-campaign
3
+ description: Turn one brief into a whole campaign — one master design exported to every channel size (social, link previews, banners, display ads), plus an optional landing page and email, in every language you need, checked and shown on one campaign sheet — use whenever the user wants a campaign, a launch kit, assets for several channels or sizes at once, ad banners in several sizes, or the same creative in several languages, even if they don't mention Open Design
4
+ ---
5
+
6
+ <!-- generated:open-design-agent-kit -->
7
+
8
+ Build a campaign with Open Design: one message, one visual system, every channel.
9
+
10
+ Brief: the rest of the user's message (if there is none, ask the user: "What is the campaign for, which channels, and which languages?")
11
+
12
+ ## 1. Agree the copy deck
13
+
14
+ Before designing anything, agree the words with the user. Draft them from the brief and show them as a short table:
15
+
16
+ - `headline` (≤ 6 words), `subhead` (one line), `cta` (2–4 words), and `legal` (one short line, if the brief needs one);
17
+ - one row per language (`locale` column: `en`, `de`, `ja`…) or per audience, if the user wants several. Translate faithfully and keep each row's meaning identical.
18
+
19
+ When the user is happy, save it as `copy.csv` in the campaign folder (`<output dir>/<campaign-slug>/copy.csv`), with a header row: `locale,headline,subhead,cta,legal`.
20
+
21
+ ## 2. Build one fluid master
22
+
23
+ Call `prepare_open_design_brief` with `od:prototype:poster-hero` (or a better-fitting poster or social skill from `list_open_design_skills`), the brief, `format: "ig-portrait"` and `fluid: true`, plus `collectionId` (the campaign slug), `collectionName` and `screenRole: "master"`.
24
+
25
+ Build it as the brief says, and also:
26
+
27
+ - every piece of copy is an element with `data-od-field="<column>"` from the copy deck, holding the first row's text;
28
+ - add `data-od-fit` to the headline and subhead, so long translations shrink (to at most 70%) instead of overflowing;
29
+ - design the wide band (`@container (aspect-ratio > 1.2)`) and add a very wide band for banners (`@container (aspect-ratio > 3)`: headline and call to action side by side, everything else hidden with `data-od-priority`).
30
+
31
+ Register it (`register_open_design_artifact` with the same `format`, `collectionId`, `collectionName` and `screenRole: "master"`).
32
+
33
+ ## 3. Pick channels
34
+
35
+ Ask which channels the campaign needs, unless the brief says. Offer this menu (format ids in brackets):
36
+
37
+ | Channel | Formats |
38
+ |---|---|
39
+ | Instagram / Facebook feed | `ig-portrait`, `ig-square` |
40
+ | Stories, Reels, TikTok | `story` |
41
+ | X | `x-image`, `x-header` |
42
+ | LinkedIn | `linkedin-image`, `linkedin-banner` |
43
+ | Link previews (website, Slack) | `og-image` |
44
+ | Display ads (150 KB each) | `banner-mrec`, `banner-leaderboard`, `banner-skyscraper`, `banner-mobile` |
45
+ | Email header | `email-header` |
46
+ | Print | `a4`, `a3`, `letter`… |
47
+
48
+ ## 4. Check every shape
49
+
50
+ Call `export_open_design_artifact` with `presets` set to the chosen formats, `data: "<campaign folder>/copy.csv"`, `nameField: "locale"` and `checkOnly: true`. Fix every **error** in the findings (per shape and per row). For a shape that looks wrong or has errors, call `adapt_open_design_artifact` with those format ids and tune it in the same file. Tiny ad sizes usually need their own `@container` rule: headline and call to action only. Repeat until there are no errors.
51
+
52
+ ## 5. Other pieces (optional)
53
+
54
+ If the user wants a landing page or an email, build each with its own skill (`od:prototype:saas-landing` or `od:prototype:web-prototype`, and `od:prototype:email-campaign`) using the same design system and the first row of the copy deck. Register each with the same `collectionId` and `collectionName`, and `screenRole` `landing` or `email`. Check each with `check_open_design_artifact`.
55
+
56
+ ## 6. Export and show the sheet
57
+
58
+ 1. Export the master: `export_open_design_artifact` with the same `presets`, `data` and `nameField: "locale"`, plus `campaignSheet: true`. This writes one image (or print PDF) per shape per row, named `<name>-<locale>-<format>`, and `exports/campaign-sheet.png`, which shows every shape and every other piece, with a red dot on any that still has errors. If the export says the outputs are over the limit, export one batch of locales at a time.
59
+ 2. If there's an email, export it with `format: "email"` (and `baseUrl` once its images are hosted).
60
+ 3. Show the user the campaign sheet, list the files per channel, and mention anything still flagged. The export also writes `exports/campaign-sheet.json`, which lists each tile in sheet order with its errors.
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: open-design-deck-from-source
3
+ description: Turn a document (a report, spec, spreadsheet, PDF, existing deck, or repository files such as a CHANGELOG) into a deck or one-pager, storyline first, with every number traced back to the source — use whenever the user wants slides, a deck, a presentation or a one-pager made from an existing document, spreadsheet, PDF or deck, or from repository files (CHANGELOG, RFCs, architecture decision records, metrics CSVs), even if they don't mention Open Design
4
+ ---
5
+
6
+ <!-- generated:open-design-agent-kit -->
7
+
8
+ Build a deck (or a one-pager) from existing documents with Open Design, storyline first, keeping every fact traceable to its source.
9
+
10
+ Request: the rest of the user's message (if there is none, ask the user: "Which document should the deck be built from, and for whom?")
11
+
12
+ ## 1. Find the sources
13
+
14
+ Identify the workspace files the request is based on. If it names none, ask which documents to use before doing anything else. Repository files count: `CHANGELOG.md` for a release deck, `docs/adr/*.md` for an architecture review, a metrics CSV or spreadsheet for a board update. Use up to 10 files; for a folder, pick the relevant files.
15
+
16
+ If you're unsure what a document contains, call `read_open_design_source` with its path. It returns an outline, and you can read the extracted Markdown by line range.
17
+
18
+ ## 2. Pick the format
19
+
20
+ Call `list_open_design_skills` with `mode: "deck"` (or a query such as "pitch deck", "weekly report", "board") and choose the skill whose style fits the audience. For a single page instead of slides, choose a page or report skill.
21
+
22
+ ## 3. Prepare the brief with sources
23
+
24
+ Call `prepare_open_design_brief` with the `skillId`, the user's request as `brief`, and the document paths as `sources`. Pass `designSystemId` only if the user names a brand or style.
25
+
26
+ ## 4. Storyline first
27
+
28
+ Follow the returned instructions. Read the parts of the extracted text you need, then write the outline at `outlinePath`, with one entry per slide giving a takeaway headline, supporting points, a visual type and a source reference. **Show the outline to the user and stop** until they approve or change it, unless they already said to just build it.
29
+
30
+ ## 5. Build and check
31
+
32
+ Build from the approved outline. Use numbers, names and quotes exactly as in the sources, never invent a statistic, and put the detail you cut from each slide into its speaker notes, ending with a `Source:` line.
33
+
34
+ Call `register_open_design_artifact` with the same `sources`. For every number its result says it couldn't find in the sources, check it: fix it, or say in that slide's notes how it was derived. Register again after fixing.
35
+
36
+ ## 6. Hand it over
37
+
38
+ Tell the user where the deck and its outline are, mention any images reused from the documents, and offer to export it as PowerPoint or PDF with `export_open_design_artifact`. PowerPoint exports include the speaker notes.
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: open-design-docs
3
+ description: Turn a folder of Markdown documents (ADRs, RFCs, runbooks, notes) into designed HTML pages, one per file, all in one style, and keep them in step when the Markdown changes — use whenever the user wants several Markdown files (a docs folder, ADRs, RFCs, runbooks, meeting notes) turned into HTML pages, or wants HTML versions of existing docs refreshed after edits
4
+ ---
5
+
6
+ <!-- generated:open-design-agent-kit -->
7
+
8
+ Turn existing Markdown documents into designed HTML pages with Open Design, one page per file.
9
+
10
+ Request: the rest of the user's message (if there is none, ask the user: "Which Markdown files should become pages, and in what style?")
11
+
12
+ ## 1. Find the files
13
+
14
+ Resolve the folder or glob in the request with your own file tools (for example `docs/adr/*.md`). List what you found.
15
+
16
+ - More than 20 files: tell the user how many there are and ask whether to do all of them or a subset. Don't start until they answer.
17
+ - No files: say so and stop.
18
+
19
+ ## 2. Pick one template for the set
20
+
21
+ All pages in a set share one template, so they read as one collection. Choose by what the files are, or use the style the user named:
22
+
23
+ | Files | Skill |
24
+ |---|---|
25
+ | Architecture decisions | `od:prototype:adr` |
26
+ | Proposals, design docs | `od:prototype:rfc` |
27
+ | Incident write-ups | `od:prototype:postmortem` |
28
+ | Runbooks | `od:prototype:eng-runbook` |
29
+ | Release notes or changelogs | `od:prototype:changelog-page` |
30
+ | Long-form notes, essays, anything else | `od:prototype:doc-kami-parchment` |
31
+
32
+ Derive a `collectionId` from the folder name (for example `docs-adr`) and a readable `collectionName`.
33
+
34
+ ## 3. On a re-run, only redo what changed
35
+
36
+ If pages from an earlier run exist (look for artifacts in that collection, or call `get_open_design_artifact` on each), compare: a page whose `staleSources` lists its Markdown file is out of date and gets regenerated; a page that isn't stale is skipped; a file with no page yet gets one. Tell the user what you'll regenerate and what you'll skip.
37
+
38
+ ## 4. Build each page
39
+
40
+ For each file, in order:
41
+
42
+ 1. Call `read_open_design_source` with the file. Use only what it returns: never add facts the Markdown doesn't have.
43
+ 2. Call `prepare_open_design_brief` with the chosen skill, a brief naming the file, `collectionId`, `collectionName`, and `screenRole` set to the file's name.
44
+ 3. Write the page, keeping the document's own headings, structure and status (for ADRs and RFCs, its status goes in the `data-od-status` banner). Link to sibling pages in the set where the Markdown links to the sibling `.md` file.
45
+ 4. Call `register_open_design_artifact` with the same collection values and `sources: ["<the .md path>"]`, so a later run can tell when the Markdown changed.
46
+
47
+ Check the first page with `check_open_design_artifact` and fix its errors before doing the rest, so mistakes aren't copied into every page. Check the others at the end.
48
+
49
+ ## 5. Report
50
+
51
+ List each page with its source file, and anything skipped or still flagged. In VS Code, mention the Collections view, where the whole set opens with Prev/Next.
@@ -0,0 +1,45 @@
1
+ ---
2
+ name: open-design-explore
3
+ description: Explore 2–4 deliberately different design directions for one brief, compare them side by side, then build out the one you pick — use whenever the user explicitly asks for several options, directions, alternatives or versions of a design to compare ("show me three directions for…", "a few different takes on…"), even if they don't mention Open Design; not for a single, ordinary design request
4
+ ---
5
+
6
+ <!-- generated:open-design-agent-kit -->
7
+
8
+ Explore several deliberately different design directions with Open Design, compare them side by side, and take the chosen one forward.
9
+
10
+ Brief: the rest of the user's message (if there is none, ask the user: "What should we explore directions for?")
11
+
12
+ ## 1. Plan the directions
13
+
14
+ If the brief is empty, ask the user what to design before doing anything else.
15
+
16
+ Call `list_open_design_skills` to find the skill that fits what's being designed (a landing page, a deck, a dashboard…). Then call `prepare_open_design_exploration` with that `skillId` and the brief:
17
+
18
+ - `count`: the number of directions the user asked for (2–4). Default 3.
19
+ - If the user named what should vary ("three hero concepts", "different pricing layouts"), pass `axis: "custom"` and `customDirections`, one `{ label, brief }` per direction.
20
+ - Otherwise leave `axis` out. The tool picks visual styles when no design system is active, and layout or narrative structures when one is, so the brand is kept.
21
+ - Pass `directionIds` only when the brief's tone clearly calls for specific directions, e.g. `editorial-monocle` for a magazine or `brutalist-experimental` for an art or agency site.
22
+
23
+ If the result says the active design system was set aside, tell the user.
24
+
25
+ ## 2. Generate each direction
26
+
27
+ For each direction in the result, follow `sharedInstructions` followed by that direction's own `instructions`. Write its file at exactly its `suggestedEntryPath`, then call `register_open_design_artifact` with the `explorationId`, the direction's `directionId`, kind, title and `sourceSkillId`.
28
+
29
+ These are **sketches**: one screen, or a cover plus two slides for a deck. Divergence matters more than polish. If you can delegate to sub-agents, generate the directions in parallel and give each one `sharedInstructions` plus its own `instructions`.
30
+
31
+ ## 3. Compare
32
+
33
+ Call `compare_open_design_exploration` with `contactSheet: true`. If you can view images, open the contact sheet and check that the directions look clearly different (layout and hero pattern, not just colour). Regenerate any direction that resembles another, then compare again.
34
+
35
+ ## 4. Present
36
+
37
+ Give the user the comparison page path (it opens in any browser straight from the file system and shows every direction side by side), and the contact sheet path if one was made. In one line each, say how the directions differ. Ask which one to take forward, and whether to:
38
+
39
+ - **build it out** at full fidelity,
40
+ - **merge** in parts of another direction ("B, with A's hero"), or
41
+ - **save it as a design system** for later work.
42
+
43
+ ## 5. Take the choice forward
44
+
45
+ Call `choose_open_design_direction` with the `explorationId`, the chosen `directionId`, `next` (`build-out`, `merge` with `mergeFrom`, or `save-design-system`) and the user's own adjustments as `notes`. Follow the returned `instructions` and register the result as they say.
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: open-design-integrations
3
+ description: Show which services Open Design can use directly (Canva, Figma, Notion, Google Drive, Slack, social posting), whether each is connected, and how to set one up — use whenever the user asks which integrations, connectors or services Open Design can use, what's connected, or how to connect Canva, Figma, Notion, Google Drive, Slack or a social posting service
4
+ ---
5
+
6
+ <!-- generated:open-design-agent-kit -->
7
+
8
+ Show the user Open Design's integrations and whether each one is connected here.
9
+
10
+ Request: the rest of the user's message (if there is none, ask the user: "Anything you'd like to connect? (or leave empty to just see the list)")
11
+
12
+ ## 1. Get the list
13
+
14
+ Call `list_open_design_integrations` with no arguments. It returns every integration grouped by purpose, each with what it does, the tool names that show it's connected on this agent, whether it can be set up here, and how to manage without it.
15
+
16
+ ## 2. Work out each status
17
+
18
+ Use exactly three statuses:
19
+ - 🟢 **Connected**: your own tools include one matching its "Connected if your tools include" hints. Check deferred or on-demand tools too (search for them) before deciding one is missing.
20
+ - 🟡 **Installed, not connected**: it's configured but its tools aren't available (it needs sign-in, failed to connect, or needs a restart). If you can run shell commands, run the read-only `claude mcp list` (Claude Code) or `codex mcp list` (Codex) and look for its server name or URL; a configured server without matching tools is 🟡. Run nothing else.
21
+ - ⚪ **Not installed**: neither of the above.
22
+
23
+ If you can't run those commands, use only 🟢 and ⚪, and say that an integration you've already added may need a restart to show up.
24
+
25
+ ## 3. Reply
26
+
27
+ Show one short table per group (Design, Docs & storage, Team, Social posting), in the order the list gives:
28
+
29
+ | | Integration | What it does in Open Design | Next step |
30
+ |---|---|---|---|
31
+
32
+ - The first column is the dot only.
33
+ - Next step: "Ready to use" for 🟢; "Sign in or restart (`/mcp` in Claude Code, `codex mcp login <name>` in Codex)" for 🟡; "Ask me to set it up" for ⚪ when it can be set up here, otherwise "Manual setup" plus one line from its manual path.
34
+
35
+ End with a one-line legend (🟢 connected · 🟡 installed, not connected · ⚪ not installed) and offer to set up any ⚪ integration the user names.
36
+
37
+ ## 4. Setting one up (only when asked)
38
+
39
+ Don't install anything from the list itself. If the request above, or the user's answer, names an integration to set up: call `list_open_design_integrations` with that `integration`, and follow its setup steps and rules. That means asking for and getting the user's yes before installing anything, and never asking for or writing an API key.
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: open-design-new
3
+ description: Start a new design by picking what to make (prototype, mobile app, slides, document, wireframe, animation, résumé, research, data report, poster, social post, diagram), then build it with the right recipe
4
+ ---
5
+
6
+ <!-- generated:open-design-agent-kit -->
7
+
8
+ Start a new design with Open Design.
9
+
10
+ Request: the rest of the user's message (if there is none, ask the user: "What do you want to make, and what is it for?")
11
+
12
+ ## 1. Pick the surface
13
+
14
+ Call `list_open_design_skills` with `surface: "list"` to get the kinds of thing Open Design can make (each with an id, label and description).
15
+
16
+ - If the request starts with or clearly names one of them (by id or label, e.g. "wireframe", "diagram", "a poster"), use that surface.
17
+ - If it names none, or is empty, show the user the surfaces as a short list (label and description) and ask which one. Stop until they answer.
18
+
19
+ ## 2. Ask what's missing
20
+
21
+ Call `list_open_design_skills` with `surface` set to the chosen id. The result has the surface's `questions` and its `entries`.
22
+
23
+ Ask only the questions the request doesn't already answer, all at once, in one short message. If the request answers them all, don't ask anything.
24
+
25
+ ## 3. Build it
26
+
27
+ - If the surface has a `prompt` (for example `open-design-poster` or `open-design-social-post`), follow that flow from its first step with the user's request as the brief. In Copilot Chat it's the `/` command of the same name; in Claude Code and Codex it's the skill of the same name.
28
+ - Otherwise pick the entry that best fits the request. Entries come in curated order: the recipe first, then its remixable example when there is one. To start from a rendered example (an entry with an `exampleArtifactPath`), call `remix_open_design_example`; otherwise call `prepare_open_design_brief` with its id and the brief, and follow the general Open Design flow: write the files, register the artifact, then check it with `check_open_design_artifact` before saying it's done.
29
+
30
+ Never pick an entry marked `stub: true`.
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: open-design-poster
3
+ description: Design a poster or flyer for print or screen, check it, and export print-ready PDFs or upload-ready images, including other sizes and one version per row of a spreadsheet — use whenever the user wants a poster, flyer, event or gig poster, print piece, handout, certificate or name card set, or wants an existing design in other sizes or as a print-ready PDF, even if they don't mention Open Design
4
+ ---
5
+
6
+ <!-- generated:open-design-agent-kit -->
7
+
8
+ Design a poster with Open Design, check it, and export files that are ready to print or post.
9
+
10
+ Brief: the rest of the user's message (if there is none, ask the user: "What is the poster for, and is it for print (which size) or screens?")
11
+
12
+ ## 1. Pick the medium and a default shape
13
+
14
+ Decide whether this is for **print** or **screens**. If the brief doesn't say, ask the user before doing anything else. Don't guess between print and screen: the units, bleed and type sizes are different.
15
+
16
+ You don't need the final size yet. The poster is built **fluid**: it reflows to any shape, so the user can pick or change the size later, when exporting. Use the size the user names as the default shape; otherwise use `a3` for print and `ig-portrait` for screens, and tell the user they can change it at any time.
17
+
18
+ | Use | Format id | Size |
19
+ |---|---|---|
20
+ | Print, small: flyer, handout | `a4` · `letter` | 210×297 mm · 8.5×11 in |
21
+ | Print, medium: notice-board poster | `a3` · `tabloid` | 297×420 mm · 11×17 in |
22
+ | Print, large: wall poster | `a2` · `a1` · `poster-18x24` · `poster-24x36` | 420×594 mm · 594×841 mm · 18×24 in · 24×36 in |
23
+ | Print, conference or research poster | `a0` | 841×1189 mm |
24
+ | Instagram portrait | `ig-portrait` | 1080×1350 px |
25
+ | Story / Reels / TikTok cover | `story` | 1080×1920 px |
26
+ | X single image | `x-image` | 1600×900 px |
27
+ | Square (Instagram / LinkedIn) | `ig-square` | 1080×1080 px |
28
+
29
+ A handout and a wall poster carry different amounts of text, so if the user says which it is, write the copy for that; the shape itself can still change.
30
+
31
+ ## 2. Generate
32
+
33
+ If the user asked for options ("show me a few directions"), run a design exploration first and build out the direction they pick, with the same `format` and `fluid: true`.
34
+
35
+ Otherwise call `prepare_open_design_brief` with:
36
+
37
+ - a `skillId`: `od:prototype:poster-hero` for a bold marketing poster, `od:prototype:magazine-poster` for an editorial or type-led one, or another skill whose style fits better (`list_open_design_skills` with query "poster");
38
+ - the brief, in the user's words;
39
+ - `format`: the default shape from step 1;
40
+ - `fluid: true`.
41
+
42
+ Call `list_open_design_design_systems` first only if the user names a brand or visual direction.
43
+
44
+ Author the file yourself, following the returned instructions. Their **Canvas** section is authoritative: one `data-od-card data-od-fluid` element sized by `--od-w`/`--od-h`, everything inside sized in container units, and layout rules for wide and tall shapes. Also:
45
+
46
+ - Use real copy from the brief, with no lorem ipsum. A poster is read from a distance: one dominant headline, then the what / when / where, then the call to action.
47
+ - If the user gives a list of names, sessions or locations to make one poster each, mark the changing text with `data-od-field="<column name>"` (and a per-person QR slot with `data-od-qr-field="<column>"`), and fill the design with the first row's values.
48
+ - No external image URLs unless the user supplied them. No emoji as key visuals; draw them as inline SVG.
49
+
50
+ ## 3. Add a QR code, if it needs one
51
+
52
+ Register the artifact first (step 4), then call `create_open_design_qr_code` with the entry path and the URL, and paste the returned inline SVG where the code goes. Never draw a fake or placeholder QR code.
53
+
54
+ ## 4. Register
55
+
56
+ Call `register_open_design_artifact` with the entry path, kind `html`, a title, `sourceSkillId`, and `format` set to the default shape.
57
+
58
+ ## 5. Check and fix
59
+
60
+ Call `check_open_design_artifact` with the entry path. It returns the poster as an image plus preflight findings. Fix every **error** in its findings (text cut off, overlapping or in the bleed, a QR code that doesn't decode), and fix warnings where you reasonably can (sizes that don't scale with the poster, small type, low contrast, low-resolution images). Look at the image too: the headline should dominate and nothing important should be cramped or cut. Check again until there are no errors (at most two fix rounds; tell the user about anything left).
61
+
62
+ ## 6. Other shapes
63
+
64
+ When the user wants other sizes, or before the final export of a print piece, call `export_open_design_artifact` with `shapeSheet: true` and `checkOnly: true` (add `presets` with just the shapes they care about, or leave it out for every shape). It writes one image of the poster at each shape, marking shapes with errors; show it to the user. If you can view images, look at it too: the headline should dominate every shape and nothing important should be cropped.
65
+
66
+ For a shape that has errors or looks wrong, call `adapt_open_design_artifact` with the entry path and those format ids. For a fluid poster it returns **tune** instructions: fix that shape inside the same file with its `@container` rule, then check every shape again with a shape sheet. Don't create new files for other sizes.
67
+
68
+ ## 7. Export
69
+
70
+ - **One shape:** call `export_open_design_artifact` with the entry path and `preset` set to the format id. A print format gives a PDF the size of the bleed box, with trim and bleed boxes set and the bleed added automatically; add `cropMarks: true` if the user's printer wants crop marks. A screen format gives a PNG within the platform's size limit.
71
+ - **Several shapes:** pass `presets` with the format ids instead: one file per shape, named `<name>-<format>`.
72
+ - **One per row of a list:** add `data` with the workspace path of the user's CSV, XLSX or JSON file, and `nameField` with the column to name files by. Images come out one per row; print PDFs come out as one multi-page PDF per shape (add `split: true` for one file per row).
73
+
74
+ ## 8. Report
75
+
76
+ List each exported file's path, size and any remaining warnings. For print files, also give the trim size and bleed, and tell the user the PDF is RGB: most print shops convert it, but they should ask if theirs needs CMYK. Mention that the poster can be exported at any other size later without regenerating it. Don't print, post, upload or order anything yourself.
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: open-design-preview
3
+ description: Open an Open Design artifact in a live browser preview, where you can see it update as it changes, click elements to comment on them, and compare check screenshots before and after — use whenever the user asks to see, show, preview or open an Open Design artifact, or wants to comment on one visually
4
+ ---
5
+
6
+ <!-- generated:open-design-agent-kit -->
7
+
8
+ Show an Open Design artifact in the browser preview.
9
+
10
+ Request: the rest of the user's message (if there is none, ask the user: "Which design should the preview show?")
11
+
12
+ 1. Work out which artifact is meant. Registered artifacts are the files under the Open Design output folder (default `.open-design/`) that have a `.artifact.json` file next to them. Use the one the request names; if it names none, use the one you made or changed most recently in this conversation. If that still doesn't settle it, call `open_open_design_preview` without `entryPath`: the preview then lists every design, and the user picks there.
13
+ 2. Call `open_open_design_preview` with that `entryPath`.
14
+ 3. Tell the user in one or two sentences what happened, using the tool's result: where the preview opened (or the URL to open, when it couldn't open a window), that it reloads by itself when the design changes, and that they can click **Comment**, then an element, to leave a comment, and **Send to agent** when they want you to apply them.
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: open-design-publish
3
+ description: Share an Open Design artifact as a live link (a temporary no-account link, or your own Netlify, Vercel, Cloudflare Pages or GitHub Pages), or as one self-contained HTML file — use whenever the user wants to share, publish, deploy or host an Open Design artifact, or get a link to send to teammates or stakeholders; also when they want a single HTML file to attach or send
4
+ ---
5
+
6
+ <!-- generated:open-design-agent-kit -->
7
+
8
+ Share an Open Design artifact with people who don't have this project open.
9
+
10
+ Request: the rest of the user's message (if there is none, ask the user: "Which design should we share, and how?")
11
+
12
+ ## 1. Find the artifact
13
+
14
+ If the request names a design, find its entry file (`get_open_design_artifact`, or the `.open-design/` folder). If several match or none is named, ask the user which one. It must be registered; if it isn't, register it first with `register_open_design_artifact`.
15
+
16
+ ## 2. A file, or a link?
17
+
18
+ - **A file to attach or send** (email, Slack, a ticket): call `export_open_design_artifact` with `format: "standalone"`. It writes one self-contained `.html` under the artifact's `exports/` folder, with its local CSS, scripts, images and fonts inlined. Give the user the path, and mention anything it still loads from the internet (such as web fonts). Nothing goes online. Stop here.
19
+ - **A link**: continue below.
20
+
21
+ ## 3. Prepare the link
22
+
23
+ Call `publish_open_design_artifact` with the `entryPath`. Pass `provider` only if the user already said where:
24
+
25
+ - `netlify-temporary` or `cloudflare-temporary`: no account, the link lasts about an hour unless claimed
26
+ - `netlify`, `vercel`, `cloudflare-pages` or `github-pages`: the user's own account, a link that lasts
27
+
28
+ Without a provider, the tool returns the choices: show them to the user and call it again with their pick.
29
+
30
+ ## 4. Follow the returned instructions exactly
31
+
32
+ They check the host's CLI, then **stop for the user's explicit yes** before anything goes online. That stop is mandatory: say what goes out, who can see it, how long it lasts, and that the small "Made with Open Design" footer badge is included unless they ask for `badge: false`. Deploy only the bundle folder the tool names.
33
+
34
+ ## 5. Finish
35
+
36
+ Give the user the link. For a temporary link, also give the claim URL and when it expires, for them only. Then record it by calling `publish_open_design_artifact` again with `published`, as the instructions show, so a later publish updates the same site.
@@ -0,0 +1,81 @@
1
+ ---
2
+ name: open-design-recurring
3
+ description: Set up a design that rebuilds itself on a schedule (a weekly report deck, next week's social posts, a refreshed one-pager), or run one such job — one job file, one supervised run, then a one-line prompt for the scheduler — use whenever the user wants a design made again every day, every week or every month, on a schedule, or as a recurring job, or when a prompt says "Run the Open Design job <path>", even if they don't mention Open Design
4
+ ---
5
+
6
+ <!-- generated:open-design-agent-kit -->
7
+
8
+ Recurring Open Design jobs: one job file describes what to make each period, and a scheduler runs it.
9
+
10
+ Request: the rest of the user's message (if there is none, ask the user: "What should be rebuilt, from which sources, and how often?")
11
+
12
+ If the request names a job file (".open-design/jobs/<id>.job.md", usually "Run the Open Design job …"), go to **Run**. Otherwise go to **Set up**.
13
+
14
+ If `start_open_design_job_run` isn't one of your tools (VS Code has no scheduler, so it doesn't offer it), you can still write the job file in **Set up**, but say that scheduled runs need Claude Code or Claude Desktop with the Open Design MCP server, and stop there.
15
+
16
+ ## Run
17
+
18
+ 1. Call `start_open_design_job_run` with the job path (and `runNow: true` only when the person asked for a fresh run in this conversation, never from a scheduled prompt).
19
+ 2. If it returns `skip`, report the reason in one line and stop. Make no changes.
20
+ 3. If it asks you to check out the state branch, do that and call it again.
21
+ 4. Otherwise follow its steps in order. This run is unattended: don't ask questions, never publish publicly and never post to social networks.
22
+ 5. End with `finish_open_design_job_run`, follow the steps it returns, and reply with its summary.
23
+
24
+ ## Set up
25
+
26
+ ### 1. Agree the job
27
+
28
+ With the person, settle:
29
+
30
+ - **What** to make, and with which recipe: `open-design-deck-from-source` for a report deck or one-pager from data, `open-design-social-post` for a batch of posts, `open-design-poster` for a print piece, `open-design-docs` for pages from Markdown.
31
+ - **Sources**: workspace files (a CSV, a CHANGELOG, a report), or data a connector pulls (a sheet in Google Drive, a Notion database). Each connector source needs a `snapshot` workspace path the pulled data is saved to, so every number stays traceable.
32
+ - **How often**: `day`, `week` or `month`, and the time zone (an IANA name such as `Europe/Berlin`).
33
+ - **One file or one per period**: `mode: update` rewrites the same design each period (a living report); `mode: series` keeps one file per period, with `{period}` in the target (a weekly social batch).
34
+ - **Outputs**: export formats (`pdf`, `png`, `pptx`, `standalone` …). PNG, PDF, PowerPoint and video need a browser; runs without one record them as skipped.
35
+ - **Delivery**: `preview` (the private Claude artifact, the default), `pr` (a pull request from the state branch), or a connector action such as "Post the preview link to #design in Slack". Never a public publish or a social post: the scheduler's prompt can't stand in for the person's yes, so the job tools refuse those.
36
+ - **Checks**: `best-effort` (default) or `required`, which holds back the PR and connector deliveries when a run had no browser for the visual check.
37
+
38
+ ### 2. Write the job file
39
+
40
+ Write `.open-design/jobs/<id>.job.md` (the id is lowercase with hyphens and matches the file name):
41
+
42
+ ```markdown
43
+ ---
44
+ id: weekly-kpis
45
+ title: Weekly KPI deck
46
+ recipe: open-design-deck-from-source
47
+ period: week
48
+ timezone: Europe/Berlin
49
+ mode: update
50
+ target: .open-design/weekly-kpis/weekly-kpis.html
51
+ outputs: [pdf]
52
+ sources:
53
+ - data/kpis.csv
54
+ - connector: Pull last week's signups from the "Metrics" sheet in Google Drive
55
+ snapshot: data/snapshots/signups.csv
56
+ deliver: [preview, pr]
57
+ checks: best-effort
58
+ ---
59
+
60
+ A five-slide KPI update for the leadership team: headline numbers first, then
61
+ signups, revenue and churn against last week, with one takeaway per slide.
62
+ ```
63
+
64
+ The brief is the body: write everything a run needs to decide without asking, since nobody answers questions mid-run.
65
+
66
+ ### 3. One supervised run
67
+
68
+ Run it now, with the person watching: call `start_open_design_job_run` and follow **Run**. Here you may ask questions; fold the answers back into the brief so later runs don't need them. If the start result lists problems by field, fix the job file and start again.
69
+
70
+ ### 4. Schedule it
71
+
72
+ Give the person the exact prompt to save, and the steps for where they work:
73
+
74
+ > Run the Open Design job `.open-design/jobs/<id>.job.md`
75
+
76
+ - **Claude Code cloud scheduled task** (claude.ai/code/routines, or `/schedule`): runs without their computer. The repository needs the Open Design MCP server and skills committed (`npx @feimacode/open-design-agent-kit init --tool claude`, then commit `.mcp.json` and `.claude/skills`, and the job file). There's no browser by default, so PNG, PDF and PowerPoint outputs are skipped unless the environment's setup script installs one. The run log lives on the state branch `claude/open-design-job-<id>`. Schedule a few minutes past the hour, mid-period.
77
+ - **Claude Desktop local scheduled task** (Code tab, Routines, New, Local): runs on their computer with local files and Chrome, only while the app is open and the computer is awake; a missed run gets one catch-up run, which the job skips if the period is already done. Tell them to click **Run now** once and approve each tool, so later runs aren't stopped by a prompt.
78
+ - **`/loop`** in an open session: only for trying the job out; it stops when the session closes.
79
+ - **Cowork scheduled tasks** aren't supported yet: the Open Design server runs only on the desktop.
80
+
81
+ Point them to the [recurring jobs guide](https://github.com/feimacode/open-design-agent-kit/blob/main/docs/guides/recurring-jobs.md) for details.
@@ -15,20 +15,22 @@ If the brief names a platform or format, use it. Otherwise ask the user to pick
15
15
 
16
16
  | Format | Canvas | skillId | Export |
17
17
  |---|---|---|---|
18
- | X single image | 1600×900 | `od:prototype:card-twitter` | `selector: "[data-od-card]"`, `maxBytes: 5000000` |
18
+ | X single image | 1600×900 | `od:prototype:card-twitter` | `preset: "x-image"` |
19
19
  | X post mock (for a video overlay or quote) | card element | `od:prototype:social-x-post-card` | `selector: "[data-od-card]"`, `maxBytes: 5000000` |
20
- | Square carousel (Instagram / LinkedIn) | 1080×1080 per card | `od:prototype:social-carousel` | `selector: "[data-od-card]"`, `maxBytes: 8000000` |
21
- | Instagram portrait | 1080×1350 | `od:prototype:poster-hero` | `width: 1080, height: 1350`, `selector: "[data-od-card]"`, `maxBytes: 8000000` |
22
- | Story / Reels / TikTok cover | 1080×1920 | `od:prototype:poster-hero` | `width: 1080, height: 1920`, `selector: "[data-od-card]"`, `maxBytes: 8000000` |
23
- | Xiaohongshu cards | 1080×1440 per card | `od:prototype:card-xiaohongshu` | `selector: "[data-od-card]"` |
24
- | YouTube thumbnail | 1280×720 | `od:prototype:social-youtube-thumbnail` | `width: 1280, height: 720`, `selector: "[data-od-card]"`, `maxBytes: 2000000` |
20
+ | Square carousel (Instagram / LinkedIn) | 1080×1080 per card | `od:prototype:social-carousel` | `preset: "ig-square"` |
21
+ | Instagram portrait | 1080×1350 | `od:prototype:poster-hero` | `preset: "ig-portrait"` |
22
+ | Story / Reels / TikTok cover | 1080×1920 | `od:prototype:poster-hero` | `preset: "story"` |
23
+ | Xiaohongshu cards | 1080×1440 per card | `od:prototype:card-xiaohongshu` | `preset: "xhs-card"` |
24
+ | YouTube thumbnail | 1280×720 | `od:prototype:social-youtube-thumbnail` | `preset: "yt-thumbnail"` |
25
25
  | YouTube video | 1920×1080 MP4 | `od:video:hyperframes` | MP4 via the HyperFrames CLI (see step 4) |
26
26
 
27
+ A preset fills in the canvas size, `selector: "[data-od-card]"` and the platform's upload limit (X 5 MB, Instagram 8 MB, YouTube thumbnail 2 MB).
28
+
27
29
  For several platforms at once, run steps 2–4 once per format and keep each one as its own artifact.
28
30
 
29
31
  ## 2. Generate
30
32
 
31
- Call `prepare_open_design_brief` with the row's `skillId` and the brief. Call `list_open_design_design_systems` first only if the user names a brand or visual direction. In the brief you pass, say the exact canvas size from the table.
33
+ Call `prepare_open_design_brief` with the row's `skillId`, the brief, and `format` set to the row's preset id (leave it out for the X post mock and YouTube video). Call `list_open_design_design_systems` first only if the user names a brand or visual direction. For the X post mock, say in the brief that it is one card element.
32
34
 
33
35
  Author the files yourself with your own file-editing tools, following the returned instructions, and add these rules for social posts:
34
36
 
@@ -39,11 +41,11 @@ Author the files yourself with your own file-editing tools, following the return
39
41
 
40
42
  ## 3. Register
41
43
 
42
- Call `register_open_design_artifact` with the entry path, kind `html`, a title, and `sourceSkillId` set to the row's `skillId`, so the export can find the right size.
44
+ Call `register_open_design_artifact` with the entry path, kind `html`, a title, `sourceSkillId` set to the row's `skillId`, and the same `format` you passed to the brief, so the export can find the right size.
43
45
 
44
46
  ## 4. Export
45
47
 
46
- - **Image formats**: call `export_open_design_artifact` with the entry path and the row's export arguments. If it returns warnings (failed fonts or images, over budget), fix the artifact and export again.
48
+ - **Image formats**: call `export_open_design_artifact` with the entry path and the row's export arguments. If its preflight reports errors (text cut off, a card that isn't the canvas size) or it returns warnings (failed fonts or images, over budget), fix the artifact and export again. Before exporting, call `check_open_design_artifact` to see the post as an image with its preflight findings, without writing files; fix every error first.
47
49
  - **YouTube video**: follow the brief's "Host override" section. Render with `npx hyperframes render … --output <artifact-dir>/exports/<name>.mp4`, and check `ffmpeg -version` first.
48
50
 
49
51
  ## 5. Report