Claude Design Sync
Use this skill to move design systems and design deliverables between a local repo and Claude Design. A project deliverable can be saved into a Claude Design folder you specify, or into a new folder you create for it — both are supported. The skill keeps reusable design systems clean and never writes deliverables into this skill's own install folder.
Core Model
Separate these surfaces every time:
- Design system: reusable brand tokens, typography, components, layout patterns, slide templates, anonymized examples.
- Project deliverable: a specific deck, landing page, prototype, report, or one-pager for a specific customer, campaign, product, or internal task.
- Upload bundle: a newly created folder for one Claude Design upload/return cycle. It is temporary working material, not the source of truth.
Save a project deliverable wherever the user wants it in Claude Design — an existing folder they name, or a new folder created for it. Both are first-class. The one hard rule: never write project files into the installed skill folder such as ~/.codex/skills/claude-design-sync, ~/.agents/skills/claude-design-sync, or this repository's claude-design-sync/ directory. Build the upload bundle inside the working repo or project folder, then upload it to the chosen Claude Design destination.
When a deliverable is saved next to reusable design-system parts, sanitize it first (see "Before You Sync") so customer names, prices, and NDA details do not leak into reusable templates.
Before You Sync
- Identify the source of truth:
- design-system source: tokens, components, templates, brand assets
- deliverable source: the project/client/campaign folder
- Check sensitivity:
- remove or generalize company names, customer names, NDA details, prices, internal notes, and unresolved deal terms before adding examples to a design system
- keep sensitive deliverables inside their project folder unless the user explicitly approves broader sharing
- Choose the direction:
- local repo -> Claude Design
- Claude Design -> local repo
- design system refresh
- one-off visual editing upload bundle
Upload Destination Confirmation
Creating a local upload bundle is low risk and can proceed without interruption. Uploading that bundle to Claude Design is an external transfer and requires an explicit destination check first.
Before any upload, present a short destination plan and wait for confirmation:
Upload destination plan
- Source of truth: <local canonical file/folder>
- Local upload bundle: <path to new folder>
- Claude Design target: <new project/folder name, or existing target>
- Writes into a reusable design system: no / yes (then sanitize)
- Sensitive data handling: <kept, removed, or generalized>
- Return path: <where Claude Design output will be saved locally>
Chosen destination: existing folder "<name>", or a new folder "<artifact-slug>".
Pick the destination with the user:
- If the user names an existing Claude Design folder, save the deliverable there.
- Otherwise, create a new folder for it.
- Either way, sanitize sensitive data before it lands next to reusable design-system parts.
Both destinations are first-class; the confirmation step exists so the destination is chosen on purpose, not to force new folders.
Local Repo -> Claude Design
Use this when local code, HTML, slides, or components need to appear in Claude Design.
- Prefer syncing reusable design-system assets first:
- tokens
- component examples
- templates
- brand assets
- anonymized reference examples
- Keep project-specific deliverables in their original folder.
- Create a new upload bundle folder in the working repo or project folder. Do not create it inside this skill's install folder.
<project-or-client-folder>/
claude-design-uploads/
<artifact-slug>/
index.html
assets/
prompt.md
source-map.md
_ds_manifest.json
returned/
Copy or transform the source files into the upload bundle:
- use
index.html for the primary HTML entrypoint
- put images/fonts/local dependencies in
assets/
- put the Claude Design instruction in
prompt.md
- put source paths and reconstruction notes in
source-map.md
- put any card metadata in
_ds_manifest.json — the file the Design System pane reads its cards from (see step 9)
Use generic names:
client-proposal-v1
campaign-landing-v2
ops-report-v1
product-demo-flow-v1
Avoid company names in reusable card names. Use role/category labels such as:
Client proposal deck
Sales operations report
Service overview deck
Product demo flow
Stop and confirm the upload destination using the plan in "Upload Destination Confirmation".
After confirmation, upload the whole <artifact-slug>/ folder to the chosen Claude Design destination — the existing folder the user named, or a new one. With the DesignSync tool this is finalize_plan (localDir = the bundle, writes = its files, deletes = [] when nothing is removed) then write_files (each file by localPath).
If files uploaded with write_files do not appear in the Design System pane, the card index is the cause, not the upload. The pane builds its cards from _ds_manifest.json, which the app compiles from each preview HTML's first-line <!-- @dsCard group="..." --> marker. When that auto-compile does not run, add the card by hand with the DesignSync tool:
get_file _ds_manifest.json to read the current index
- append one entry to its
cards array (the object below)
finalize_plan with writes including _ds_manifest.json (and deletes = [])
write_files to overwrite it
This object is one element of the _ds_manifest.json cards array, and its viewport is a string:
{
"path": "uploads/client-proposal-v1/index.html",
"group": "Slides",
"viewport": "1280x720",
"subtitle": "temporary upload bundle, not design-system source",
"name": "Client proposal deck"
}
- Adding the
<!-- @dsCard group="Slides" --> first-line marker lets the app's self-check pick the card up on its next scan; editing _ds_manifest.json directly is the reliable fallback when the scan does not run. Treat either as a workaround, not the normal write_files flow.
Claude Design -> Local Repo
Use this when the canvas output needs to become a local artifact or production input.
- Export or hand off from Claude Design as HTML, PDF, PPTX, or a Claude Code handoff bundle.
- Save the raw return under the upload bundle's
returned/ folder.
- Diff against the repo-local source of truth.
- Move only accepted changes into the canonical file.
- Regenerate final outputs locally:
- PDF
- screenshots/page images
- PPTX when required
- Verify visually before calling the work complete.
- If the result contains reusable patterns, extract an anonymized template into the design system. Do not move the customer-specific deliverable itself.
Design System Refresh
Use this when the user wants Claude Design to learn or update a brand/system.
- Sync only reusable sources:
tokens.css, Tailwind config, theme files
- component library examples
- slide templates
- brand guidelines
- logos and approved assets
- Exclude:
- customer folders
- pricing proposals
- contracts
- private research notes
- raw meeting transcripts
- Include one or two anonymized finished examples if they express the brand better than specs alone.
- After syncing, create or inspect a small test project to confirm the system produces on-brand output.
Output Discipline
When reporting a sync plan or result, include:
- source of truth
- sync direction
- files written or expected
- whether any workaround was used
- sensitivity handling
- what still needs visual verification
Tradeoffs
- Saving into an existing Claude Design folder is convenient and fully supported; just sanitize sensitive data so it does not leak into reusable templates in the same folder.
- Creating a new folder keeps a deliverable isolated, at the cost of one extra packaging step.
- Project-specific Claude Design outputs are useful for iteration, but final deliverables should be rebuilt and verified from the local repo when the repo is the operational source of truth.
1---2name: claude-design-sync3description: Use this skill whenever the user mentions Claude Design, /design, /design-sync, DesignSync, design system import/export, pushing local HTML/slides/prototypes into Claude Design, pulling Claude Design output back into a repo, or keeping design work synced with Claude Code/Codex. It preserves the boundary between reusable design systems and project-specific deliverables, sanitizes client/company names, and defines a safe bidirectional workflow.4---56# Claude Design Sync78Use this skill to move design systems and design deliverables between a local repo and Claude Design. A project deliverable can be saved into a Claude Design folder you specify, or into a new folder you create for it — both are supported. The skill keeps reusable design systems clean and never writes deliverables into this skill's own install folder.910## Core Model1112Separate these surfaces every time:1314- **Design system**: reusable brand tokens, typography, components, layout patterns, slide templates, anonymized examples.15- **Project deliverable**: a specific deck, landing page, prototype, report, or one-pager for a specific customer, campaign, product, or internal task.16- **Upload bundle**: a newly created folder for one Claude Design upload/return cycle. It is temporary working material, not the source of truth.1718Save a project deliverable wherever the user wants it in Claude Design — an existing folder they name, or a new folder created for it. Both are first-class. The one hard rule: never write project files into the installed skill folder such as `~/.codex/skills/claude-design-sync`, `~/.agents/skills/claude-design-sync`, or this repository's `claude-design-sync/` directory. Build the upload bundle inside the working repo or project folder, then upload it to the chosen Claude Design destination.1920When a deliverable is saved next to reusable design-system parts, sanitize it first (see "Before You Sync") so customer names, prices, and NDA details do not leak into reusable templates.2122## Before You Sync23241. Identify the source of truth:25 - design-system source: tokens, components, templates, brand assets26 - deliverable source: the project/client/campaign folder272. Check sensitivity:28 - remove or generalize company names, customer names, NDA details, prices, internal notes, and unresolved deal terms before adding examples to a design system29 - keep sensitive deliverables inside their project folder unless the user explicitly approves broader sharing303. Choose the direction:31 - local repo -> Claude Design32 - Claude Design -> local repo33 - design system refresh34 - one-off visual editing upload bundle3536## Upload Destination Confirmation3738Creating a local upload bundle is low risk and can proceed without interruption. Uploading that bundle to Claude Design is an external transfer and requires an explicit destination check first.3940Before any upload, present a short destination plan and wait for confirmation:4142```text43Upload destination plan44- Source of truth: <local canonical file/folder>45- Local upload bundle: <path to new folder>46- Claude Design target: <new project/folder name, or existing target>47- Writes into a reusable design system: no / yes (then sanitize)48- Sensitive data handling: <kept, removed, or generalized>49- Return path: <where Claude Design output will be saved locally>5051Chosen destination: existing folder "<name>", or a new folder "<artifact-slug>".52```5354Pick the destination with the user:55561. If the user names an existing Claude Design folder, save the deliverable there.572. Otherwise, create a new folder for it.583. Either way, sanitize sensitive data before it lands next to reusable design-system parts.5960Both destinations are first-class; the confirmation step exists so the destination is chosen on purpose, not to force new folders.6162## Local Repo -> Claude Design6364Use this when local code, HTML, slides, or components need to appear in Claude Design.65661. Prefer syncing reusable design-system assets first:67 - tokens68 - component examples69 - templates70 - brand assets71 - anonymized reference examples722. Keep project-specific deliverables in their original folder.733. Create a new upload bundle folder in the working repo or project folder. Do not create it inside this skill's install folder.7475```text76<project-or-client-folder>/77 claude-design-uploads/78 <artifact-slug>/79 index.html80 assets/81 prompt.md82 source-map.md83 _ds_manifest.json84 returned/85```86874. Copy or transform the source files into the upload bundle:88 - use `index.html` for the primary HTML entrypoint89 - put images/fonts/local dependencies in `assets/`90 - put the Claude Design instruction in `prompt.md`91 - put source paths and reconstruction notes in `source-map.md`92 - put any card metadata in `_ds_manifest.json` — the file the Design System pane reads its cards from (see step 9)93945. Use generic names:95 - `client-proposal-v1`96 - `campaign-landing-v2`97 - `ops-report-v1`98 - `product-demo-flow-v1`991006. Avoid company names in reusable card names. Use role/category labels such as:101 - `Client proposal deck`102 - `Sales operations report`103 - `Service overview deck`104 - `Product demo flow`1051067. Stop and confirm the upload destination using the plan in "Upload Destination Confirmation".1071088. After confirmation, upload the whole `<artifact-slug>/` folder to the chosen Claude Design destination — the existing folder the user named, or a new one. With the DesignSync tool this is `finalize_plan` (localDir = the bundle, writes = its files, `deletes` = `[]` when nothing is removed) then `write_files` (each file by `localPath`).1091109. If files uploaded with `write_files` do not appear in the Design System pane, the card index is the cause, not the upload. The pane builds its cards from `_ds_manifest.json`, which the app compiles from each preview HTML's first-line `<!-- @dsCard group="..." -->` marker. When that auto-compile does not run, add the card by hand with the DesignSync tool:111 - `get_file _ds_manifest.json` to read the current index112 - append one entry to its `cards` array (the object below)113 - `finalize_plan` with `writes` including `_ds_manifest.json` (and `deletes` = `[]`)114 - `write_files` to overwrite it115116 This object is one element of the `_ds_manifest.json` `cards` array, and its `viewport` is a string:117118```json119{120 "path": "uploads/client-proposal-v1/index.html",121 "group": "Slides",122 "viewport": "1280x720",123 "subtitle": "temporary upload bundle, not design-system source",124 "name": "Client proposal deck"125}126```12712810. Adding the `<!-- @dsCard group="Slides" -->` first-line marker lets the app's self-check pick the card up on its next scan; editing `_ds_manifest.json` directly is the reliable fallback when the scan does not run. Treat either as a workaround, not the normal `write_files` flow.129130## Claude Design -> Local Repo131132Use this when the canvas output needs to become a local artifact or production input.1331341. Export or hand off from Claude Design as HTML, PDF, PPTX, or a Claude Code handoff bundle.1352. Save the raw return under the upload bundle's `returned/` folder.1363. Diff against the repo-local source of truth.1374. Move only accepted changes into the canonical file.1385. Regenerate final outputs locally:139 - PDF140 - screenshots/page images141 - PPTX when required1426. Verify visually before calling the work complete.1437. If the result contains reusable patterns, extract an anonymized template into the design system. Do not move the customer-specific deliverable itself.144145## Design System Refresh146147Use this when the user wants Claude Design to learn or update a brand/system.1481491. Sync only reusable sources:150 - `tokens.css`, Tailwind config, theme files151 - component library examples152 - slide templates153 - brand guidelines154 - logos and approved assets1552. Exclude:156 - customer folders157 - pricing proposals158 - contracts159 - private research notes160 - raw meeting transcripts1613. Include one or two anonymized finished examples if they express the brand better than specs alone.1624. After syncing, create or inspect a small test project to confirm the system produces on-brand output.163164## Output Discipline165166When reporting a sync plan or result, include:167168- **source of truth**169- **sync direction**170- **files written or expected**171- **whether any workaround was used**172- **sensitivity handling**173- **what still needs visual verification**174175## Tradeoffs176177- Saving into an existing Claude Design folder is convenient and fully supported; just sanitize sensitive data so it does not leak into reusable templates in the same folder.178- Creating a new folder keeps a deliverable isolated, at the cost of one extra packaging step.179- Project-specific Claude Design outputs are useful for iteration, but final deliverables should be rebuilt and verified from the local repo when the repo is the operational source of truth.