agentsclimarketplace

Code to figma

Skill t4sh/dotfiles/agents/skills/code-to-figma

CI-anchored code-to-Figma token export pipeline for keeping Figma aligned with the codebase. Use when the user asks to "sync code to Figma", "export design tokens to Figma", "set up a Figma sync pipeline", "wire up the tokens-sync-to-figma plugin", "generate a figma-export.json", "create a page walker", or "keep Figma up to date with the codebase".From its SKILL.md

Install
npx -y skills add t4sh/dotfiles --skill code-to-figma

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its file declares

Copied from the file, not written here

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

8.3 KB, ~2.0k tokens by cl100k_base, as published. Nobody here has run it

Code to Figma

Generate a project-specific Figma export pipeline: a walker that reads compiled HTML and CSS, resolves class → token bindings, and pushes a structured JSON artifact to a GitHub Gist that the tokens-sync-to-figma Figma plugin consumes.

The pipeline is intentionally one-directional and CI-anchored. During setup, assess the project once, generate scripts, and wire CI. After that, every push that touches tokens or templates automatically updates the Gist — no agent, no Figma API key, no per-sync friction.

Commands

CommandUse whenOutcome
/code-to-figma setupFirst time; no scripts exist yetWalker + token scripts generated, Gist created, CI wired, config saved
/code-to-figma syncScripts exist; push current state to Gistfigma-export.json built and patched to Gist
/code-to-figma updateStack or token naming changed significantlyScripts regenerated, CI and config updated
/code-to-figma statusCheck pipeline healthGist age, CI status, script presence, config validity

Default to /code-to-figma setup when no figma-sync.config.json or walker scripts are found.


/code-to-figma setup

1 — Assess the project

Read in this order before generating anything:

  1. Package manifestpackage.json, pyproject.toml, etc. Identify the framework (Next.js, Eleventy, SolidJS, plain HTML) and package manager.
  2. CSS / token files — find the compiled output, not the source. Common paths:
    • Tailwind v4: out/assets/css/tailwind.css or equivalent build output
    • Custom CSS: look for a file with --token-name: value; custom property declarations
    • Style Dictionary: tokens.json, variables.css, or generated output in dist/
  3. Component CSS — look for a components.css or utilities.css alongside the main CSS file
  4. Built HTML — the compiled output page, not source templates. Common paths: out/index.html, dist/index.html, _site/index.html. Next.js: a default build emits no single HTML file; require output: 'export' (yields out/index.html) before proceeding — see the Next.js note in references/walker-patterns.md. If no static HTML artifact can be produced, stop and tell the user rather than guessing a path.
  5. Token naming convention — read the CSS custom property names, extract the prefix-to-group mapping (e.g. beige-*palette/beige/, fs-*typography/scale/)
  6. Section structure — scan the HTML for how sections are delimited: <section id="...">, [data-section], <article>, header/footer landmarks, etc.

Ask one focused question if two genuinely different walker shapes are possible (e.g. sections identified by ID vs by class). Otherwise infer and state the choice.

2 — Generate and verify the scaffold

Create or update the project-specific walker, W3C token converter, generic Gist pusher, figma-sync.config.json, package scripts, GitHub Actions workflow, Gist, secrets, first sync, and Figma plugin connection. Load references/setup-scaffold.md for the file specifications and references/ci-and-gist-setup.md for the canonical Gist, secret, CI, and plugin setup commands.

Required local checks before relying on CI:

node scripts/tokens-to-figma/convert-to-w3c.mjs
git status --short -- scripts/tokens-to-figma/*.w3c.json
node scripts/figma-export/walk-<site>.mjs | jq '.sections | length'

Keep the core boundary visible: CI produces figma-export.json and <project>-tokens.w3c.json; the tokens-sync-to-figma plugin consumes those artifacts inside the user-authorized Figma runtime. Do not require a Figma API key in CI.


/code-to-figma sync

  1. Confirm figma-sync.config.json exists and the walker path is valid.
  2. Run: node <walker> > figma-export.tmp.json
  3. Validate: jq '.sections | length' figma-export.tmp.json
  4. Confirm GIST_TOKEN is exported or prefix the pusher command with it.
  5. Push: node scripts/tokens-to-figma/push-to-figma.mjs < figma-export.tmp.json
  6. Delete figma-export.tmp.json when done, then report sections and nodes exported and the Gist URL.

/code-to-figma update

Use this when the framework output, token naming convention, section selectors, or CSS build paths changed enough that the existing walker may be stale.

  1. Re-run the setup assessment against current compiled HTML/CSS and token files.
  2. Update walk-<site>.mjs, convert-to-w3c.mjs, figma-sync.config.json, and CI paths together so tokenPath() and file paths stay aligned.
  3. Regenerate the W3C token artifact: node scripts/tokens-to-figma/convert-to-w3c.mjs.
  4. Validate the walker output: node <walker> > figma-export.tmp.json && jq -e '.sections | type == "array"' figma-export.tmp.json.
  5. Push through /code-to-figma sync or CI after reviewing the script and .w3c.json diffs.

/code-to-figma status

Report:

CheckHow
Walker scriptDoes figma-sync.config.json exist? Does the walker file exist?
Gist freshnessgh api gists/<id> --jq '.updated_at' — report how old the Gist is
CI wiringDoes figma-sync.yml exist? Does it have workflow_dispatch?
Secretsgh secret list --repo <org>/<repo> — confirm GIST_TOKEN and FIGMA_EXPORT_GIST_ID are present
Last rungh run list --workflow=figma-sync.yml --limit=1

Skill Boundaries

User intentUse
Export code tokens and page structure → FigmaThis skill
Import a Figma design → codefigma-to-code skill
Edit Figma variables or components directlyThe project's configured Figma write/design workflow (outside this skill)
Sync an existing Gist manually/code-to-figma sync

This skill does not edit Figma files. The plugin (tokens-sync-to-figma) is the Figma-side consumer — this skill produces the artifact it reads.

Reference Files

FileLoad when
references/walker-patterns.mdGenerating or updating the walker, W3C converter, or generic Gist pusher; adapting tokenPath(), section detection, or Next.js static-export constraints
references/setup-scaffold.mdGenerating setup files, package scripts, Gist commands, GitHub secrets, first sync, or plugin-side contract details
references/figma-export-contract.mdValidating walker JSON output shape (meta, sections, nodes, token references)
references/ci-and-gist-setup.mdWiring figma-sync.yml, GitHub secrets, first Gist push, or tokens-sync-to-figma plugin setup
references/benchmarks.mdComparing peer skills on skills.sh or positioning this pipeline vs alternatives

Operating Principles

  • Read the compiled output, not the source. Token bindings only become resolvable in built HTML+CSS. Source templates may use variables that haven't been substituted yet.
  • tokenPath() is the contract. Both the walker and the W3C converter must use the same function. If they diverge, Figma variable names won't match the sections' token references.
  • Walker is project-specific; pusher is generic. The walker understands the project's HTML shape; the pusher only knows the Gist API. Keep them separate.
  • Commit the W3C JSON. The .w3c.json file is the human-readable diff surface for token changes. It belongs in the repo, not in .gitignore.
  • node not pnpm in CI. pnpm writes a script header to stdout when running a lifecycle script, which corrupts a > file.json redirect. Always invoke the walker with node directly in CI steps.

What ships with it: 6 files

42.4 KB alongside SKILL.md

Keep looking

Skills are one crate of 326,764. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.