@feimacode/open-design-agent-kit 0.1.7 → 0.1.8
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.
- package/README.md +71 -20
- package/assets/claude-skills/card-twitter/SKILL.md +14 -0
- package/assets/claude-skills/open-design/SKILL.md +18 -0
- package/assets/claude-skills/open-design-social-post/SKILL.md +52 -0
- package/assets/claude-skills/poster-hero/SKILL.md +14 -0
- package/assets/claude-skills/social-carousel/SKILL.md +14 -0
- package/assets/claude-skills/social-youtube-thumbnail/SKILL.md +14 -0
- package/assets/codex-skills/card-twitter/SKILL.md +12 -0
- package/assets/codex-skills/card-twitter/agents/openai.yaml +3 -0
- package/assets/codex-skills/open-design/SKILL.md +18 -0
- package/assets/codex-skills/open-design-social-post/SKILL.md +51 -0
- package/assets/codex-skills/poster-hero/SKILL.md +12 -0
- package/assets/codex-skills/poster-hero/agents/openai.yaml +3 -0
- package/assets/codex-skills/social-carousel/SKILL.md +12 -0
- package/assets/codex-skills/social-carousel/agents/openai.yaml +3 -0
- package/assets/codex-skills/social-youtube-thumbnail/SKILL.md +12 -0
- package/assets/codex-skills/social-youtube-thumbnail/agents/openai.yaml +3 -0
- package/out/index.js +130071 -83
- package/package.json +8 -4
- package/out/claudeSetup.js +0 -91
- package/out/claudeSetup.js.map +0 -1
- package/out/codexSetup.js +0 -89
- package/out/codexSetup.js.map +0 -1
- package/out/env.js +0 -47
- package/out/env.js.map +0 -1
- package/out/index.js.map +0 -1
- package/out/skillWriter.js +0 -88
- package/out/skillWriter.js.map +0 -1
- package/out/toolSelection.js +0 -38
- package/out/toolSelection.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,25 +1,60 @@
|
|
|
1
1
|
# @feimacode/open-design-agent-kit
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**Give Claude Code and Codex the skills to design, not just code.**
|
|
4
|
+
|
|
5
|
+
Run one command in your project and your agent can build decks, landing pages, dashboards, prototypes, social posts, and videos that look designed rather than generated. It works by writing [Open Design](https://github.com/nexu-io/open-design)'s skills straight into your repo, in each agent's own native skill format, plus the MCP server that goes with them — drawing on 163 skills, 114 design templates, 152 brand design systems, and 167 remixable examples so your agent has real design taste to work from instead of guessing.
|
|
6
|
+
|
|
7
|
+
- **No desktop app, no daemon, no account.** Nothing runs in the background — the skills are plain files in your repo.
|
|
8
|
+
- **No API keys or model settings.** Your agent's own model does all the generation.
|
|
9
|
+
- **No marketplace add or manual copying.** Modeled on `openspec init`: pick your agents, and it writes the files.
|
|
10
|
+
- **Shareable.** Commit the generated `.claude/skills/`, `.agents/skills/`, and MCP config, and everyone who clones the repo gets the same design skills.
|
|
11
|
+
|
|
12
|
+
## See what it builds
|
|
13
|
+
|
|
14
|
+
Four of the ~280 vendored skills and templates, rendered exactly as-is:
|
|
15
|
+
|
|
16
|
+
<table>
|
|
17
|
+
<tr>
|
|
18
|
+
<td width="50%" valign="top">
|
|
19
|
+
<img src="https://raw.githubusercontent.com/feimacode/open-design-agent-kit/main/docs/screenshots/examples/dating-web.png" alt="Consumer dating-app dashboard, editorial typography" width="100%"/><br/>
|
|
20
|
+
<sub><b>"Design a dating-site dashboard — mutuals, match rate, a 30-day trend."</b></sub>
|
|
21
|
+
</td>
|
|
22
|
+
<td width="50%" valign="top">
|
|
23
|
+
<img src="https://raw.githubusercontent.com/feimacode/open-design-agent-kit/main/docs/screenshots/examples/gamified-app.png" alt="Gamified habit-tracking mobile app, three phone frames" width="100%"/><br/>
|
|
24
|
+
<sub><b>"A habit-tracking app with daily quests and XP."</b></sub>
|
|
25
|
+
</td>
|
|
26
|
+
</tr>
|
|
27
|
+
<tr>
|
|
28
|
+
<td width="50%" valign="top">
|
|
29
|
+
<img src="https://raw.githubusercontent.com/feimacode/open-design-agent-kit/main/docs/screenshots/examples/deck-swiss-international.png" alt="Board strategy deck, Swiss International style" width="100%"/><br/>
|
|
30
|
+
<sub><b>"A board-ready strategy deck, Swiss International style."</b></sub>
|
|
31
|
+
</td>
|
|
32
|
+
<td width="50%" valign="top">
|
|
33
|
+
<img src="https://raw.githubusercontent.com/feimacode/open-design-agent-kit/main/docs/screenshots/examples/card-xiaohongshu.png" alt="Xiaohongshu-style swipeable knowledge card" width="100%"/><br/>
|
|
34
|
+
<sub><b>"5 tips, as a Xiaohongshu-style swipeable card carousel."</b></sub>
|
|
35
|
+
</td>
|
|
36
|
+
</tr>
|
|
37
|
+
</table>
|
|
38
|
+
|
|
39
|
+
## Install
|
|
40
|
+
|
|
41
|
+
Nothing to install ahead of time — run it with `npx` (requires Node.js 18+):
|
|
4
42
|
|
|
5
43
|
```bash
|
|
6
44
|
npx @feimacode/open-design-agent-kit init
|
|
7
45
|
```
|
|
8
46
|
|
|
9
|
-
That's the whole setup
|
|
47
|
+
That's the whole setup: it prompts you to pick Claude Code, Codex, or both (both are pre-selected), then writes the skills and registers the MCP server.
|
|
10
48
|
|
|
11
|
-
|
|
12
|
-
- **No API keys or model settings.** Your agent's own model does all the generation.
|
|
13
|
-
- **No marketplace add or manual copying.** It's modeled on `openspec init`: pick your agents, and it writes the files.
|
|
14
|
-
- **Shareable.** Commit the generated `.claude/skills/`, `.agents/skills/`, and MCP config, and everyone who clones the repo gets the same design skills.
|
|
49
|
+
## Use it
|
|
15
50
|
|
|
16
|
-
|
|
51
|
+
### 1. Set up your project
|
|
17
52
|
|
|
18
53
|
```bash
|
|
19
54
|
npx @feimacode/open-design-agent-kit init
|
|
20
55
|
```
|
|
21
56
|
|
|
22
|
-
|
|
57
|
+
For scripted or CI use, skip the interactive prompt:
|
|
23
58
|
|
|
24
59
|
```bash
|
|
25
60
|
npx @feimacode/open-design-agent-kit init --tools all
|
|
@@ -30,25 +65,41 @@ npx @feimacode/open-design-agent-kit init --tools codex
|
|
|
30
65
|
|
|
31
66
|
`init [path]` defaults to the current directory; pass a path to target a different project.
|
|
32
67
|
|
|
33
|
-
|
|
68
|
+
What it writes:
|
|
69
|
+
|
|
70
|
+
- **Claude Code:** skills in `.claude/skills/`, and an `open-design` entry merged into `.mcp.json`. Other servers are kept.
|
|
71
|
+
- **Codex:** the same skills in `.agents/skills/`, and `.codex/config.toml` if you don't have one yet. If you do, the snippet to add is printed instead.
|
|
34
72
|
|
|
35
|
-
|
|
36
|
-
- `.claude/skills/open-design/SKILL.md` — the overview skill (auto-triggers on design requests), plus one explicit-only skill per curated entry (`.claude/skills/<id>/SKILL.md`), same generated content as the [Claude Code plugin](https://github.com/feimacode/open-design-agent-kit#claude-code).
|
|
37
|
-
- `.mcp.json` — merges an `open-design` entry into `mcpServers`. Any other servers you already have configured are preserved; the file is created fresh if it doesn't exist yet.
|
|
73
|
+
Both point at [`@feimacode/open-design-agent-kit-mcp`](https://www.npmjs.com/package/@feimacode/open-design-agent-kit-mcp). Full details are in the [`init` reference](https://github.com/feimacode/open-design-agent-kit/blob/main/docs/reference/cli.md#init).
|
|
38
74
|
|
|
39
|
-
|
|
40
|
-
- `.agents/skills/open-design/` and one skill per curated entry (with a sibling `agents/openai.yaml` marking it explicit-only) — Codex's own skill-discovery convention.
|
|
41
|
-
- `.codex/config.toml` — created fresh with the `open-design` MCP server registration **only if the file doesn't already exist**. If it does, nothing is touched — the exact snippet to add by hand is printed instead, since no TOML library round-trips an existing file's comments/formatting losslessly.
|
|
75
|
+
It's safe to re-run: generated skill files are always fully refreshed, with no stale entries left behind from a previous run. A skill directory *you* created by hand under the same location is never touched or deleted — only directories this tool generated itself get replaced. `.mcp.json` only ever has its own `open-design` entry updated; an existing `.codex/config.toml` is never rewritten at all.
|
|
42
76
|
|
|
43
|
-
|
|
77
|
+
### 2. Ask your agent to design something
|
|
44
78
|
|
|
45
|
-
|
|
79
|
+
Once `init` has run, just talk to your agent — no further CLI commands needed. Try prompts like:
|
|
80
|
+
|
|
81
|
+
- "Build a landing page for [product]"
|
|
82
|
+
- "Make a pitch deck for [idea]"
|
|
83
|
+
- "Design a dashboard for [data]"
|
|
84
|
+
- "Create a social card announcing [thing]"
|
|
85
|
+
|
|
86
|
+
The agent picks a matching skill and produces a real design, saved into your project as plain HTML/JSX/CSS you can keep editing.
|
|
87
|
+
|
|
88
|
+
### 3. Export or render from a script (optional)
|
|
89
|
+
|
|
90
|
+
Once an artifact exists, export it to an image, PDF, or PowerPoint, or render a HyperFrames composition to video — no agent needed:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
npx @feimacode/open-design-agent-kit export .open-design/launch/launch.html --max-bytes 5000000
|
|
94
|
+
npx @feimacode/open-design-agent-kit export .open-design/pitch/pitch.html --format pptx
|
|
95
|
+
npx @feimacode/open-design-agent-kit render-video .open-design/promo --output .open-design/promo/exports/promo.mp4
|
|
96
|
+
```
|
|
46
97
|
|
|
47
|
-
|
|
98
|
+
Every option is in the [CLI reference](https://github.com/feimacode/open-design-agent-kit/blob/main/docs/reference/cli.md), and a full scripted setup is in [Social media pipeline](https://github.com/feimacode/open-design-agent-kit/blob/main/docs/automation/social-pipeline.md).
|
|
48
99
|
|
|
49
|
-
##
|
|
100
|
+
## Learn more
|
|
50
101
|
|
|
51
|
-
|
|
102
|
+
[Documentation](https://github.com/feimacode/open-design-agent-kit/blob/main/docs/README.md): getting started for [Claude Code](https://github.com/feimacode/open-design-agent-kit/blob/main/docs/getting-started/claude-code.md) and [Codex](https://github.com/feimacode/open-design-agent-kit/blob/main/docs/getting-started/codex.md), guides, and [troubleshooting](https://github.com/feimacode/open-design-agent-kit/blob/main/docs/troubleshooting.md).
|
|
52
103
|
|
|
53
104
|
## License
|
|
54
105
|
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "od-prototype-card-twitter"
|
|
3
|
+
description: Twitter Share Card (Open Design) — use only when the user explicitly runs this skill
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
argument-hint: a brief describing what to build (optional — defaults to a starting example)
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- generated:curated-entry -->
|
|
9
|
+
|
|
10
|
+
Use the Open Design skill `od:prototype:card-twitter` (Twitter Share Card).
|
|
11
|
+
|
|
12
|
+
Brief: "$ARGUMENTS", or if empty: "Use the Twitter Share Card template to turn my content into a Twitter quote or data card designed to pair with a post. Preserve the template's visual signature, use real content and data, and avoid lorem ipsum or placeholder images."
|
|
13
|
+
|
|
14
|
+
Call `prepare_open_design_brief` (the open-design MCP server's tool) with skillId "od:prototype:card-twitter" and this brief — call `list_open_design_design_systems` first only if the user names a brand or visual direction. Author the files yourself with your own file-editing tools per the returned instructions, then call `register_open_design_artifact`.
|
|
@@ -13,6 +13,12 @@ All Open Design content (skill/template text, design system tokens, example brie
|
|
|
13
13
|
|
|
14
14
|
Follow this flow:
|
|
15
15
|
|
|
16
|
+
0. **Check the tools are wired up.** This skill does nothing on its own — every step below calls a tool the `open-design` MCP server provides. If `list_open_design_skills` (or any other tool named below) isn't available to you right now, the server hasn't been registered in this project yet. Set it up, then retry from step 1:
|
|
17
|
+
- **Claude Code:** run `npx @feimacode/open-design-agent-kit init --tools claude` in the project root, or `claude mcp add open-design -- npx -y @feimacode/open-design-agent-kit-mcp`.
|
|
18
|
+
- **Codex CLI:** run `npx @feimacode/open-design-agent-kit init --tools codex` in the project root.
|
|
19
|
+
- **Any other MCP-capable agent** (Cursor, etc.): register `npx -y @feimacode/open-design-agent-kit-mcp` as a stdio MCP server using this agent's own MCP config mechanism.
|
|
20
|
+
|
|
21
|
+
Run the command yourself if you have shell access; otherwise tell the user the exact command to run and wait for their confirmation before continuing. Skip this step entirely once the tools are available.
|
|
16
22
|
1. Call `list_open_design_skills` (optionally with a `query` and/or an exact `mode`) to find a skill or design template that matches what the user wants. Pick the best match by name/description/triggers, and prefer a result's `examplePrompt` (adapted to the user's specifics) over inventing your own brief when one is present and closely fits.
|
|
17
23
|
2. There is an **active design system**, persisted per project (a local `.open-design/config.json` file). If the user mentions a brand, company, industry, or visual style that differs from what's active, call `list_open_design_design_systems` (optionally with a `query` and/or an exact `category` — call with no arguments first to see categories, and check each result's `active` flag) to find the right one, and pass its id explicitly to `prepare_open_design_brief` — doing so also makes it the new active one going forward, so you don't need to re-specify it on later requests in this project. If the user hasn't mentioned any direction, just omit `designSystemId` from `prepare_open_design_brief` and it will silently use whatever is currently active (or none). Only call `set_active_design_system` directly when the user wants to pin a look before generating anything ("let's use the Starbucks look from now on").
|
|
18
24
|
3. Call `prepare_open_design_brief` with the chosen `skillId`, optional `designSystemId` (per step 2), and the user's `brief` (their request, in their own words). This returns `instructions` to follow, a `suggestedEntryPath`, and the `designSystemId`/`designSystemName` actually used (whether explicit or defaulted from active) — mention which one it was if it wasn't obvious from the conversation. It does NOT write any files.
|
|
@@ -27,3 +33,15 @@ If the user wants to start from or riff on an existing example rather than build
|
|
|
27
33
|
If the user wants a brand/style that isn't one of the ~150 bundled design systems ("use our own brand colors", "match our website", "set up a custom design system for..."), call `create_open_design_design_system` with a `name`, a `brief` describing the brand, and an optional `sourceUrl` if they gave you a website to match. It returns `instructions` for writing a new `DESIGN.md` yourself (same file shape as every bundled design system) plus, when a `sourceUrl` was given, a best-effort extracted starting palette/font list to incorporate — treat that as a rough starting point, not ground truth. It does NOT write any files. After writing the file, call `set_active_design_system` with the returned `id` — there's no separate "register" step for design systems; a written `DESIGN.md` is immediately selectable, the same way generated artifacts are immediately visible once written.
|
|
28
34
|
|
|
29
35
|
Once the user is happy with a generated or refined artifact and wants it turned into real, working code in this app ("turn this into a real component", "add this to the app", "wire this into my codebase"), call `port_open_design_artifact_to_app` with the artifact's `entryPath`. It returns `instructions` for reproducing the artifact's design as idiomatic code in this project's actual application — read the returned instructions carefully: they'll tell you to find and follow a real existing component in this codebase as your pattern reference (its styling approach, conventions, file organization) rather than copying the artifact's HTML/CSS verbatim, and to leave routing/navigation wiring as a separate step for the user. It does NOT write any files itself.
|
|
36
|
+
|
|
37
|
+
When the artifact is meant to be posted or uploaded as an image (an X/Twitter post, Instagram or LinkedIn image, Xiaohongshu cards, a YouTube thumbnail, a poster), call `export_open_design_artifact` with its `entryPath` after registering it. It renders the artifact in a headless browser and writes PNG/JPEG file(s) under the artifact's own `exports/` folder, sized from the source skill automatically unless you pass `width`/`height`. For multi-card designs, give each card a `data-od-card` attribute and pass `selector: "[data-od-card]"` to get one numbered image per card. Pass `maxBytes` with the platform's upload limit (X 5000000, YouTube thumbnail 2000000, Instagram 8000000). Tell the user the exported file paths. For any social-post request ("make an X post…", "an Instagram carousel…", "a YouTube thumbnail…"), load the `open-design-social-post` skill first. It maps each platform and format to the right canvas size, skillId and export arguments (and asks the user which platform when that's unclear), then walks through generate → register → export. Videos (HyperFrames) aren't exported with this tool: the brief's own instructions say how to render them to MP4 with the HyperFrames CLI. After registering a slide deck, offer to export it as PowerPoint or PDF, and when the user wants that, call `export_open_design_artifact` with `format: "pptx"` or `"pdf"` (one full-bleed image per slide; not editable text). `format: "pdf"` on an ordinary page prints it as a vector PDF.
|
|
38
|
+
|
|
39
|
+
## Help
|
|
40
|
+
|
|
41
|
+
When the user asks how something works, or a tool reports an error, point them to the relevant page:
|
|
42
|
+
|
|
43
|
+
- Documentation index: https://github.com/feimacode/open-design-agent-kit/blob/main/docs/README.md
|
|
44
|
+
- Troubleshooting (export errors, missing browser or FFmpeg, blank slides, MCP connection): https://github.com/feimacode/open-design-agent-kit/blob/main/docs/troubleshooting.md
|
|
45
|
+
- Social media posts: https://github.com/feimacode/open-design-agent-kit/blob/main/docs/guides/social-posts.md
|
|
46
|
+
- Export images: https://github.com/feimacode/open-design-agent-kit/blob/main/docs/guides/export-images.md · Export decks and PDFs: https://github.com/feimacode/open-design-agent-kit/blob/main/docs/guides/export-decks.md
|
|
47
|
+
- Tools reference: https://github.com/feimacode/open-design-agent-kit/blob/main/docs/reference/tools.md
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "open-design-social-post"
|
|
3
|
+
description: Design a social media post (X, Instagram, LinkedIn, Xiaohongshu, Stories/Reels, YouTube thumbnail or video) and export upload-ready files — use whenever the user wants something to post on social media (an X/Twitter image, Instagram or LinkedIn post or carousel, Xiaohongshu cards, a Story/Reels cover, a YouTube thumbnail or video), even if they don't mention Open Design
|
|
4
|
+
argument-hint: what to post, and optionally where (e.g. "X post announcing our v2 launch")
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!-- generated:curated-entry -->
|
|
8
|
+
|
|
9
|
+
Design a social media post with Open Design and export files that are ready to upload.
|
|
10
|
+
|
|
11
|
+
Brief: "$ARGUMENTS" — or, if that is empty, the user's request in this conversation (ask them what to post and where if it isn't clear)
|
|
12
|
+
|
|
13
|
+
## 1. Pick the platform and format
|
|
14
|
+
|
|
15
|
+
If the brief names a platform or format, use it. Otherwise ask the user to pick one of the rows below before doing anything else. Don't guess.
|
|
16
|
+
|
|
17
|
+
| Format | Canvas | skillId | Export |
|
|
18
|
+
|---|---|---|---|
|
|
19
|
+
| X single image | 1600×900 | `od:prototype:card-twitter` | `selector: "[data-od-card]"`, `maxBytes: 5000000` |
|
|
20
|
+
| X post mock (for a video overlay or quote) | card element | `od:prototype:social-x-post-card` | `selector: "[data-od-card]"`, `maxBytes: 5000000` |
|
|
21
|
+
| Square carousel (Instagram / LinkedIn) | 1080×1080 per card | `od:prototype:social-carousel` | `selector: "[data-od-card]"`, `maxBytes: 8000000` |
|
|
22
|
+
| Instagram portrait | 1080×1350 | `od:prototype:poster-hero` | `width: 1080, height: 1350`, `selector: "[data-od-card]"`, `maxBytes: 8000000` |
|
|
23
|
+
| Story / Reels / TikTok cover | 1080×1920 | `od:prototype:poster-hero` | `width: 1080, height: 1920`, `selector: "[data-od-card]"`, `maxBytes: 8000000` |
|
|
24
|
+
| Xiaohongshu cards | 1080×1440 per card | `od:prototype:card-xiaohongshu` | `selector: "[data-od-card]"` |
|
|
25
|
+
| YouTube thumbnail | 1280×720 | `od:prototype:social-youtube-thumbnail` | `width: 1280, height: 720`, `selector: "[data-od-card]"`, `maxBytes: 2000000` |
|
|
26
|
+
| YouTube video | 1920×1080 MP4 | `od:video:hyperframes` | MP4 via the HyperFrames CLI (see step 4) |
|
|
27
|
+
|
|
28
|
+
For several platforms at once, run steps 2–4 once per format and keep each one as its own artifact.
|
|
29
|
+
|
|
30
|
+
## 2. Generate
|
|
31
|
+
|
|
32
|
+
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
|
+
|
|
34
|
+
Author the files yourself with your own file-editing tools, following the returned instructions, and add these rules for social posts:
|
|
35
|
+
|
|
36
|
+
- Each card or canvas is a fixed-size element at exactly the table's size with `overflow: hidden`, and carries a `data-od-card` attribute. For multi-card formats, stack the cards vertically in one HTML file, one `data-od-card` element per card.
|
|
37
|
+
- Use real copy from the brief, with no lorem ipsum. Keep text inside a 48px safe margin, and make the hook readable at thumbnail size.
|
|
38
|
+
- No external image URLs unless the user supplied them.
|
|
39
|
+
- No emoji as key visuals. They render from the exporting machine's fonts and can come out as empty boxes. Draw icons and subjects as inline SVG.
|
|
40
|
+
|
|
41
|
+
## 3. Register
|
|
42
|
+
|
|
43
|
+
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
|
+
|
|
45
|
+
## 4. Export
|
|
46
|
+
|
|
47
|
+
- **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
|
+
- **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.
|
|
49
|
+
|
|
50
|
+
## 5. Report
|
|
51
|
+
|
|
52
|
+
List each exported file's path, pixel size, and file size, and remind the user of the post's copy (caption and hashtags) if you wrote any. Don't post anything anywhere yourself.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "od-prototype-poster-hero"
|
|
3
|
+
description: Marketing Poster (Open Design) — use only when the user explicitly runs this skill
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
argument-hint: a brief describing what to build (optional — defaults to a starting example)
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- generated:curated-entry -->
|
|
9
|
+
|
|
10
|
+
Use the Open Design skill `od:prototype:poster-hero` (Marketing Poster).
|
|
11
|
+
|
|
12
|
+
Brief: "$ARGUMENTS", or if empty: "Use the Marketing Poster template to turn my content into a vertical poster or Moments-style share image with strong visual impact. Preserve the template's visual signature, use real content and data, and avoid lorem ipsum or placeholder images."
|
|
13
|
+
|
|
14
|
+
Call `prepare_open_design_brief` (the open-design MCP server's tool) with skillId "od:prototype:poster-hero" and this brief — call `list_open_design_design_systems` first only if the user names a brand or visual direction. Author the files yourself with your own file-editing tools per the returned instructions, then call `register_open_design_artifact`.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "od-prototype-social-carousel"
|
|
3
|
+
description: social-carousel (Open Design) — use only when the user explicitly runs this skill
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
argument-hint: a brief describing what to build (optional — defaults to a starting example)
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- generated:curated-entry -->
|
|
9
|
+
|
|
10
|
+
Use the Open Design skill `od:prototype:social-carousel` (social-carousel).
|
|
11
|
+
|
|
12
|
+
Brief: "$ARGUMENTS", or if empty: "Design a 3-card cinematic social carousel — ‘onwards.’, ‘to the next one.’, ‘looking ahead.’. 1080×1080 squares, drop-into-Instagram ready."
|
|
13
|
+
|
|
14
|
+
Call `prepare_open_design_brief` (the open-design MCP server's tool) with skillId "od:prototype:social-carousel" and this brief — call `list_open_design_design_systems` first only if the user names a brand or visual direction. Author the files yourself with your own file-editing tools per the returned instructions, then call `register_open_design_artifact`.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "od-prototype-social-youtube-thumbnail"
|
|
3
|
+
description: YouTube Thumbnail (Open Design) — use only when the user explicitly runs this skill
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
argument-hint: a brief describing what to build (optional — defaults to a starting example)
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- generated:curated-entry -->
|
|
9
|
+
|
|
10
|
+
Use the Open Design skill `od:prototype:social-youtube-thumbnail` (YouTube Thumbnail).
|
|
11
|
+
|
|
12
|
+
Brief: "$ARGUMENTS", or if empty: "Use the YouTube Thumbnail template to design a thumbnail for my video. Make the promise of the video readable in under a second: one short hook line, one strong focal subject, high contrast. Use real content from my brief and avoid lorem ipsum or placeholder images."
|
|
13
|
+
|
|
14
|
+
Call `prepare_open_design_brief` (the open-design MCP server's tool) with skillId "od:prototype:social-youtube-thumbnail" and this brief — call `list_open_design_design_systems` first only if the user names a brand or visual direction. Author the files yourself with your own file-editing tools per the returned instructions, then call `register_open_design_artifact`.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: card-twitter
|
|
3
|
+
description: Twitter Share Card (Open Design) — use only when explicitly invoked, not for general design requests
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- generated:open-design-agent-kit -->
|
|
7
|
+
|
|
8
|
+
Use the Open Design skill `od:prototype:card-twitter` (Twitter Share Card).
|
|
9
|
+
|
|
10
|
+
Treat the rest of the user's message as the brief. If nothing more specific was given, use: "Use the Twitter Share Card template to turn my content into a Twitter quote or data card designed to pair with a post. Preserve the template's visual signature, use real content and data, and avoid lorem ipsum or placeholder images."
|
|
11
|
+
|
|
12
|
+
Call `prepare_open_design_brief` (the open-design MCP server's tool) with skillId "od:prototype:card-twitter" and this brief — call `list_open_design_design_systems` first only if the user names a brand or visual direction. Author the files yourself with your own file-editing tools per the returned instructions, then call `register_open_design_artifact`.
|
|
@@ -15,6 +15,12 @@ All Open Design content (skill/template text, design system tokens, example brie
|
|
|
15
15
|
|
|
16
16
|
Follow this flow:
|
|
17
17
|
|
|
18
|
+
0. **Check the tools are wired up.** This skill does nothing on its own — every step below calls a tool the `open-design` MCP server provides. If `list_open_design_skills` (or any other tool named below) isn't available to you right now, the server hasn't been registered in this project yet. Set it up, then retry from step 1:
|
|
19
|
+
- **Claude Code:** run `npx @feimacode/open-design-agent-kit init --tools claude` in the project root, or `claude mcp add open-design -- npx -y @feimacode/open-design-agent-kit-mcp`.
|
|
20
|
+
- **Codex CLI:** run `npx @feimacode/open-design-agent-kit init --tools codex` in the project root.
|
|
21
|
+
- **Any other MCP-capable agent** (Cursor, etc.): register `npx -y @feimacode/open-design-agent-kit-mcp` as a stdio MCP server using this agent's own MCP config mechanism.
|
|
22
|
+
|
|
23
|
+
Run the command yourself if you have shell access; otherwise tell the user the exact command to run and wait for their confirmation before continuing. Skip this step entirely once the tools are available.
|
|
18
24
|
1. Call `list_open_design_skills` (optionally with a `query` and/or an exact `mode`) to find a skill or design template that matches what the user wants. Pick the best match by name/description/triggers, and prefer a result's `examplePrompt` (adapted to the user's specifics) over inventing your own brief when one is present and closely fits.
|
|
19
25
|
2. There is an **active design system**, persisted per project (a local `.open-design/config.json` file). If the user mentions a brand, company, industry, or visual style that differs from what's active, call `list_open_design_design_systems` (optionally with a `query` and/or an exact `category` — call with no arguments first to see categories, and check each result's `active` flag) to find the right one, and pass its id explicitly to `prepare_open_design_brief` — doing so also makes it the new active one going forward, so you don't need to re-specify it on later requests in this project. If the user hasn't mentioned any direction, just omit `designSystemId` from `prepare_open_design_brief` and it will silently use whatever is currently active (or none). Only call `set_active_design_system` directly when the user wants to pin a look before generating anything ("let's use the Starbucks look from now on").
|
|
20
26
|
3. Call `prepare_open_design_brief` with the chosen `skillId`, optional `designSystemId` (per step 2), and the user's `brief` (their request, in their own words). This returns `instructions` to follow, a `suggestedEntryPath`, and the `designSystemId`/`designSystemName` actually used (whether explicit or defaulted from active) — mention which one it was if it wasn't obvious from the conversation. It does NOT write any files.
|
|
@@ -29,3 +35,15 @@ If the user wants to start from or riff on an existing example rather than build
|
|
|
29
35
|
If the user wants a brand/style that isn't one of the ~150 bundled design systems ("use our own brand colors", "match our website", "set up a custom design system for..."), call `create_open_design_design_system` with a `name`, a `brief` describing the brand, and an optional `sourceUrl` if they gave you a website to match. It returns `instructions` for writing a new `DESIGN.md` yourself (same file shape as every bundled design system) plus, when a `sourceUrl` was given, a best-effort extracted starting palette/font list to incorporate — treat that as a rough starting point, not ground truth. It does NOT write any files. After writing the file, call `set_active_design_system` with the returned `id` — there's no separate "register" step for design systems; a written `DESIGN.md` is immediately selectable, the same way generated artifacts are immediately visible once written.
|
|
30
36
|
|
|
31
37
|
Once the user is happy with a generated or refined artifact and wants it turned into real, working code in this app ("turn this into a real component", "add this to the app", "wire this into my codebase"), call `port_open_design_artifact_to_app` with the artifact's `entryPath`. It returns `instructions` for reproducing the artifact's design as idiomatic code in this project's actual application — read the returned instructions carefully: they'll tell you to find and follow a real existing component in this codebase as your pattern reference (its styling approach, conventions, file organization) rather than copying the artifact's HTML/CSS verbatim, and to leave routing/navigation wiring as a separate step for the user. It does NOT write any files itself.
|
|
38
|
+
|
|
39
|
+
When the artifact is meant to be posted or uploaded as an image (an X/Twitter post, Instagram or LinkedIn image, Xiaohongshu cards, a YouTube thumbnail, a poster), call `export_open_design_artifact` with its `entryPath` after registering it. It renders the artifact in a headless browser and writes PNG/JPEG file(s) under the artifact's own `exports/` folder, sized from the source skill automatically unless you pass `width`/`height`. For multi-card designs, give each card a `data-od-card` attribute and pass `selector: "[data-od-card]"` to get one numbered image per card. Pass `maxBytes` with the platform's upload limit (X 5000000, YouTube thumbnail 2000000, Instagram 8000000). Tell the user the exported file paths. For any social-post request ("make an X post…", "an Instagram carousel…", "a YouTube thumbnail…"), load the `open-design-social-post` skill first. It maps each platform and format to the right canvas size, skillId and export arguments (and asks the user which platform when that's unclear), then walks through generate → register → export. Videos (HyperFrames) aren't exported with this tool: the brief's own instructions say how to render them to MP4 with the HyperFrames CLI. After registering a slide deck, offer to export it as PowerPoint or PDF, and when the user wants that, call `export_open_design_artifact` with `format: "pptx"` or `"pdf"` (one full-bleed image per slide; not editable text). `format: "pdf"` on an ordinary page prints it as a vector PDF.
|
|
40
|
+
|
|
41
|
+
## Help
|
|
42
|
+
|
|
43
|
+
When the user asks how something works, or a tool reports an error, point them to the relevant page:
|
|
44
|
+
|
|
45
|
+
- Documentation index: https://github.com/feimacode/open-design-agent-kit/blob/main/docs/README.md
|
|
46
|
+
- Troubleshooting (export errors, missing browser or FFmpeg, blank slides, MCP connection): https://github.com/feimacode/open-design-agent-kit/blob/main/docs/troubleshooting.md
|
|
47
|
+
- Social media posts: https://github.com/feimacode/open-design-agent-kit/blob/main/docs/guides/social-posts.md
|
|
48
|
+
- Export images: https://github.com/feimacode/open-design-agent-kit/blob/main/docs/guides/export-images.md · Export decks and PDFs: https://github.com/feimacode/open-design-agent-kit/blob/main/docs/guides/export-decks.md
|
|
49
|
+
- Tools reference: https://github.com/feimacode/open-design-agent-kit/blob/main/docs/reference/tools.md
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: open-design-social-post
|
|
3
|
+
description: Design a social media post (X, Instagram, LinkedIn, Xiaohongshu, Stories/Reels, YouTube thumbnail or video) and export upload-ready files — use whenever the user wants something to post on social media (an X/Twitter image, Instagram or LinkedIn post or carousel, Xiaohongshu cards, a Story/Reels cover, a YouTube thumbnail or video), even if they don't mention Open Design
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- generated:open-design-agent-kit -->
|
|
7
|
+
|
|
8
|
+
Design a social media post with Open Design and export files that are ready to upload.
|
|
9
|
+
|
|
10
|
+
Brief: the rest of the user's message (if there is none, ask the user: "What should the post say, and for which platform?")
|
|
11
|
+
|
|
12
|
+
## 1. Pick the platform and format
|
|
13
|
+
|
|
14
|
+
If the brief names a platform or format, use it. Otherwise ask the user to pick one of the rows below before doing anything else. Don't guess.
|
|
15
|
+
|
|
16
|
+
| Format | Canvas | skillId | Export |
|
|
17
|
+
|---|---|---|---|
|
|
18
|
+
| X single image | 1600×900 | `od:prototype:card-twitter` | `selector: "[data-od-card]"`, `maxBytes: 5000000` |
|
|
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` |
|
|
25
|
+
| YouTube video | 1920×1080 MP4 | `od:video:hyperframes` | MP4 via the HyperFrames CLI (see step 4) |
|
|
26
|
+
|
|
27
|
+
For several platforms at once, run steps 2–4 once per format and keep each one as its own artifact.
|
|
28
|
+
|
|
29
|
+
## 2. Generate
|
|
30
|
+
|
|
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.
|
|
32
|
+
|
|
33
|
+
Author the files yourself with your own file-editing tools, following the returned instructions, and add these rules for social posts:
|
|
34
|
+
|
|
35
|
+
- Each card or canvas is a fixed-size element at exactly the table's size with `overflow: hidden`, and carries a `data-od-card` attribute. For multi-card formats, stack the cards vertically in one HTML file, one `data-od-card` element per card.
|
|
36
|
+
- Use real copy from the brief, with no lorem ipsum. Keep text inside a 48px safe margin, and make the hook readable at thumbnail size.
|
|
37
|
+
- No external image URLs unless the user supplied them.
|
|
38
|
+
- No emoji as key visuals. They render from the exporting machine's fonts and can come out as empty boxes. Draw icons and subjects as inline SVG.
|
|
39
|
+
|
|
40
|
+
## 3. Register
|
|
41
|
+
|
|
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.
|
|
43
|
+
|
|
44
|
+
## 4. Export
|
|
45
|
+
|
|
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.
|
|
47
|
+
- **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
|
+
|
|
49
|
+
## 5. Report
|
|
50
|
+
|
|
51
|
+
List each exported file's path, pixel size, and file size, and remind the user of the post's copy (caption and hashtags) if you wrote any. Don't post anything anywhere yourself.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: poster-hero
|
|
3
|
+
description: Marketing Poster (Open Design) — use only when explicitly invoked, not for general design requests
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- generated:open-design-agent-kit -->
|
|
7
|
+
|
|
8
|
+
Use the Open Design skill `od:prototype:poster-hero` (Marketing Poster).
|
|
9
|
+
|
|
10
|
+
Treat the rest of the user's message as the brief. If nothing more specific was given, use: "Use the Marketing Poster template to turn my content into a vertical poster or Moments-style share image with strong visual impact. Preserve the template's visual signature, use real content and data, and avoid lorem ipsum or placeholder images."
|
|
11
|
+
|
|
12
|
+
Call `prepare_open_design_brief` (the open-design MCP server's tool) with skillId "od:prototype:poster-hero" and this brief — call `list_open_design_design_systems` first only if the user names a brand or visual direction. Author the files yourself with your own file-editing tools per the returned instructions, then call `register_open_design_artifact`.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: social-carousel
|
|
3
|
+
description: social-carousel (Open Design) — use only when explicitly invoked, not for general design requests
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- generated:open-design-agent-kit -->
|
|
7
|
+
|
|
8
|
+
Use the Open Design skill `od:prototype:social-carousel` (social-carousel).
|
|
9
|
+
|
|
10
|
+
Treat the rest of the user's message as the brief. If nothing more specific was given, use: "Design a 3-card cinematic social carousel — ‘onwards.’, ‘to the next one.’, ‘looking ahead.’. 1080×1080 squares, drop-into-Instagram ready."
|
|
11
|
+
|
|
12
|
+
Call `prepare_open_design_brief` (the open-design MCP server's tool) with skillId "od:prototype:social-carousel" and this brief — call `list_open_design_design_systems` first only if the user names a brand or visual direction. Author the files yourself with your own file-editing tools per the returned instructions, then call `register_open_design_artifact`.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: social-youtube-thumbnail
|
|
3
|
+
description: YouTube Thumbnail (Open Design) — use only when explicitly invoked, not for general design requests
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- generated:open-design-agent-kit -->
|
|
7
|
+
|
|
8
|
+
Use the Open Design skill `od:prototype:social-youtube-thumbnail` (YouTube Thumbnail).
|
|
9
|
+
|
|
10
|
+
Treat the rest of the user's message as the brief. If nothing more specific was given, use: "Use the YouTube Thumbnail template to design a thumbnail for my video. Make the promise of the video readable in under a second: one short hook line, one strong focal subject, high contrast. Use real content from my brief and avoid lorem ipsum or placeholder images."
|
|
11
|
+
|
|
12
|
+
Call `prepare_open_design_brief` (the open-design MCP server's tool) with skillId "od:prototype:social-youtube-thumbnail" and this brief — call `list_open_design_design_systems` first only if the user names a brand or visual direction. Author the files yourself with your own file-editing tools per the returned instructions, then call `register_open_design_artifact`.
|