Zod
jasonjgardner/blockbench-mcp-plugin
Zod schema validation best practices for type safety, parsing, and error handling.
Upgrade @figma/plugin-typings and absorb what the new version exposes.
$ npx skills add awdr74100/figwright --skill figma-typings-audit -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install awdr74100/figwright figma-typings-audit --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/awdr74100/figwright.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/figma-typings-audit .claude/skills/figma-typings-audit && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "figma-typings-audit" agent skill from https://github.com/awdr74100/figwright/tree/main/.claude/skills/figma-typings-audit into .claude/skills/figma-typings-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figma-typings-audit", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/awdr74100/figwright/tree/main/.claude/skills/figma-typings-auditType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add awdr74100/figwright --skill figma-typings-audit -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install awdr74100/figwright figma-typings-audit --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/awdr74100/figwright.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/figma-typings-audit .agents/skills/figma-typings-audit && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "figma-typings-audit" agent skill from https://github.com/awdr74100/figwright/tree/main/.claude/skills/figma-typings-audit into .agents/skills/figma-typings-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figma-typings-audit", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add awdr74100/figwright --skill figma-typings-audit -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install awdr74100/figwright figma-typings-audit --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/awdr74100/figwright.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/figma-typings-audit .cursor/skills/figma-typings-audit && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "figma-typings-audit" agent skill from https://github.com/awdr74100/figwright/tree/main/.claude/skills/figma-typings-audit into .cursor/skills/figma-typings-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figma-typings-audit", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/awdr74100/figwright.git --path .claude/skills/figma-typings-audit--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add awdr74100/figwright --skill figma-typings-audit -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install awdr74100/figwright figma-typings-audit --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/awdr74100/figwright.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/figma-typings-audit .gemini/skills/figma-typings-audit && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "figma-typings-audit" agent skill from https://github.com/awdr74100/figwright/tree/main/.claude/skills/figma-typings-audit into .gemini/skills/figma-typings-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figma-typings-audit", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install awdr74100/figwright figma-typings-auditInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add awdr74100/figwright --skill figma-typings-audit -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/awdr74100/figwright.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/figma-typings-audit .github/skills/figma-typings-audit && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "figma-typings-audit" agent skill from https://github.com/awdr74100/figwright/tree/main/.claude/skills/figma-typings-audit into .github/skills/figma-typings-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figma-typings-audit", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add awdr74100/figwright --skill figma-typings-audit -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install awdr74100/figwright figma-typings-audit --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/awdr74100/figwright.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/figma-typings-audit .opencode/skills/figma-typings-audit && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "figma-typings-audit" agent skill from https://github.com/awdr74100/figwright/tree/main/.claude/skills/figma-typings-audit into .opencode/skills/figma-typings-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figma-typings-audit", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
figma-typings-auditUpgrade @figma/plugin-typings and absorb what the new version exposes.
Figma Typings Audit is an agent skill from awdr74100/figwright. Upgrade @figma/plugin-typings and absorb what the new version exposes. Diffs the .d.ts between the installed and the target version (that package ships no changelog), sorts the changes into breakage / new API / silently-added fields, maps each onto the sandbox handlers, the hand-written Zod mirrors in shared, and the tool registry — then bumps the package and builds whatever the user picks. Use whenever the user wants @figma/plugin-typings updated or audited, or asks what a new plugin-typings version would break…
Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Forms and validation and Changelog and release notes. It works with Figma, Zod, Model Context Protocol and npm. The repository describes itself as: Free, two-way Figma MCP server. Turn designs into framework-aware code, and push code back to the canvas. Works with Claude Code, Cursor, Codex, and any MCP client. The licence is MIT.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 7e39435. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pnpmnpmnpxtscgitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm, npm, npx and git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Figma Typings Audit loads about 3.3k tokens when it runs. Until then it costs about 151 tokens; SKILL.md has 1,431 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from awdr74100/figwright at commit 7e39435, republished under its MIT licence (© awdr74100). 1,431 words, ~3,331 tokens.
.claude/skills/figma-typings-audit/SKILL.md (or your agent's skills folder).Absorbing a @figma/plugin-typings release into Figwright, end to end: audit → upgrade →
implement what's worth having.
One hard ordering constraint: diff before upgrading. The audit compares the installed version
against the target, so upgrading first destroys the baseline. (Recoverable — the old version is in
git history and npm pack can still fetch it — but don't create the problem.)
Target version: whatever the user named, otherwise the latest on npm.
grep '@figma/plugin-typings' packages/plugin/package.json # the declared range
grep '"version"' packages/plugin/node_modules/@figma/plugin-typings/package.json # what is installed
npm view @figma/plugin-typings version # latest
npm view @figma/plugin-typings versions --json # how many releases are being skippedCompare against the installed version, not the declared range — a caret range can already be satisfied by something newer than what the lockfile pinned.
If installed and target are equal, say so and stop. Don't spend tokens on the rest.
There is no other source. figma/plugin-typings ships no CHANGELOG and no GitHub Releases (the
releases API returns an empty array), and its commit messages are content-free (1.132.0,
Release v1.132 updates). The .d.ts diff is the only ground truth.
Work in the session scratchpad directory ($SCRATCH below):
cd "$SCRATCH" && mkdir -p typings-audit && cd typings-audit
npm pack @figma/plugin-typings@<installed> @figma/plugin-typings@<target> --pack-destination .
for v in <installed> <target>; do
mkdir -p "$v" && tar -xzf "figma-plugin-typings-$v.tgz" -C "$v" --strip-components=1
done
diff -rq <installed> <target> # which files differ at all — start here
diff -u <installed>/package.json <target>/package.json
diff -u <installed>/index.d.ts <target>/index.d.tsdiff -rq first, so the set of changed files is observed rather than assumed. Every file it names
has to be accounted for — including plugin-api-standalone.d.ts, whose trailing export { ... } is
one enormous single line where a removed symbol is easy to miss.
index.d.ts declares the figma global, fetch and timers — small, but high blast radius.
package.json looks irrelevant and isn't: its devDependencies.prettier explains formatting
noise. When that version moves, the .d.ts diff fills with reflowed unions and extends clauses
that mean nothing. Check it before reading a single hunk.
.d.tsNever classify hunks straight out of diff -u. Reformat both versions with the target's own
formatter first, so what survives is guaranteed to be semantic:
mkdir -p norm
for v in <installed> <target>; do
for f in plugin-api.d.ts plugin-api-standalone.d.ts; do cp "$v/$f" "norm/$v.$f"; done
done
cp <target>/.prettierrc norm/.prettierrc # the package ships its own config
npx --yes prettier@<version from target package.json devDeps> --write "norm/*.d.ts"
diff -u norm/<installed>.plugin-api.d.ts norm/<target>.plugin-api.d.ts
diff -u norm/<installed>.plugin-api-standalone.d.ts norm/<target>.plugin-api-standalone.d.tsWatch prettier's own per-file output: the target files should report unchanged. That confirms
you picked the right formatter version, and turns "the noise is upstream reformatting" from a guess
into an observation.
Classify from these normalized diffs. plugin-api.d.ts is the one that matters —
packages/plugin/tsconfig.json sets types: ["@figma/plugin-typings"], whose index.d.ts
references it — and standalone serves as a cross-check that nothing was missed.
Measured on 1.134.0 → 1.135.0: 328 raw lines collapsed to 32, all of them one change. Never estimate the size of a release from raw diff line count — 1.134.0 was smaller (228 lines) and carried three real buckets.
When the jump spans several releases, diff the two endpoints; the cumulative effect is what matters. Go release-by-release only to attribute a specific change to a version.
Drop hunks that are JSDoc-only (comment/example churn, no signature change) — the file is mostly documentation and these dominate the line count without meaning anything.
Sort the rest into three buckets:
@deprecated. Look at - lines first.Paint, Effect, TextStyle, a node interface…). ⚠️ The dangerous bucket. No compiler will
ever flag it and the read path will keep silently omitting the dimension. It is this repo's
recurring bug class: a multi-dimensional Figma property collapsed to one field or dropped on the
way out.The three source trees have completely different exposure. Don't treat them alike:
| Tree | Coupling to typings | Who catches a break |
|---|---|---|
packages/plugin/src/** | Real. The only tree that calls figma.* and loads the global types (tsconfig.json → types: ["@figma/plugin-typings"]) | tsc |
packages/plugin/ui/** | None — the Vue panel never touches the Figma API | n/a, skip |
packages/shared/src/** | ★ None — and that's the trap. serialized-node.ts, styles.ts, queries.ts are hand-written Zod mirrors of Figma shapes; shared/tsconfig.json never loads typings | Nobody but this audit |
packages/plugin/src/ (handlers, serializer.ts,
traverse.ts, reveal.ts). Confirm with Stage 4 rather than reasoning about it.packages/shared/src/ carries
it, and whether serializer.ts or handlers/get-design-context.ts projects it. A miss here is a
real fidelity gap with every gate green.packages/mcp/src/tools/registry.ts (ALL_TOOL_SPECS is the
authority on the tool count; prose in READMEs is hand-written and stale).Type-check the real sandbox sources against the new typings without touching the repo. Never
overwrite the copy in node_modules — pnpm hard-links it into the global store, so writing there
corrupts the store for every project on the machine.
Write $SCRATCH/typings-audit/tsconfig.probe.json:
{
"compilerOptions": {
"target": "ES2023",
"module": "ESNext",
"moduleResolution": "Bundler",
"lib": ["ES2023", "DOM", "DOM.Iterable"],
"strict": true,
"noUncheckedIndexedAccess": true,
"noImplicitOverride": true,
"noFallthroughCasesInSwitch": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"exactOptionalPropertyTypes": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
"resolveJsonModule": true,
"skipLibCheck": true,
"noEmit": true,
"types": []
},
"files": ["./<target>/index.d.ts"],
"include": [
"<REPO_ROOT>/packages/plugin/src/**/*.ts",
"<REPO_ROOT>/packages/plugin/protocol/**/*.ts"
]
}Expand <REPO_ROOT> to git rev-parse --show-toplevel — the tsconfig lives outside the repo, so
those entries have to be absolute. Never hard-code a machine-specific path into a committed file.
types: [] keeps the installed (old) typings out; the files entry pulls the new ones in via its
/// <reference path="./plugin-api.d.ts" />. Module resolution still works because it is anchored to
each source file's own location, not to the tsconfig's.
./node_modules/.bin/tsc -p "$SCRATCH/typings-audit/tsconfig.probe.json"Run the same probe against the installed version first. A clean baseline is what makes a failure on the new version mean something.
pnpm -C packages/plugin add -D @figma/plugin-typings@^<target>
pnpm typecheck && pnpm lint && pnpm format:check && pnpm knip && pnpm build && pnpm testThis is the first step that writes to the repo — packages/plugin/package.json and
pnpm-lock.yaml. Everything before it was read-only.
Report in 繁體中文台灣用語, ordered by consequence:
packages/plugin/src/, probe verdict. Say so explicitly
when the list is empty.shared mirror that lacks it → the projection
that would need to carry it. Flag that no gate catches these.Report only what the diff and the probe actually showed. Don't pad with plausible-sounding changes, and never claim a live verification you didn't run.
Then AskUserQuestion (multi-select) over the items from 2 and 3.
Choosing where a new capability lands is the part worth thinking about:
packages/shared/src/, the
sandbox handler in packages/plugin/src/handlers/, the tool description in
packages/mcp/src/tools/ (it is the LLM's only spec — fix it if it misreports the shape), and a
test.exactOptionalPropertyTypes is on: assign optional fields conditionally
(if (x !== undefined) result.x = x), never result.x = undefined.figma.editorType rather than try/catch, so reads that
deliberately don't assert the editor stay non-throwing in FigJam / Dev Mode without swallowing real
errors.Re-run all six gates when done.
Unit tests don't prove a read path works against real Figma. Before claiming anything:
dist → pnpm build, then the user reconnects the MCP server.Report what was actually run. If the live step didn't happen, say that.
© awdr74100, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/figma-typings-audit of awdr74100/figwright.
Open the folder on GitHubat commit 7e39435
Figma Typings Audit next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Figma Typings Audit this skillawdr74100/figwright | 1k | — | ~3.3k | Automated safety check: Pass | MIT | |
| Zodjasonjgardner/blockbench-mcp-plugin | 500 | 3 repos | ~1.4k | Automated safety check: Pass | GPL-3.0 | |
| Changelogratel-ai/ratel | 471 | — | ~1.6k | Automated safety check: Pass | MIT | |
| Project Docs Maintainerswimmwatch/cloakbrowser-mcp | 164 | — | ~569 | Automated safety check: Pass | MIT | |
| MCP Server Trello Releasedelorenj/mcp-server-trello | 445 | — | ~3.5k | Automated safety check: Pass | MIT | |
| Phoenix Release NotesArize-ai/phoenix | 12k | — | ~6.7k | Automated safety check: Pass | Custom licence |
jasonjgardner/blockbench-mcp-plugin
Zod schema validation best practices for type safety, parsing, and error handling.
ratel-ai/ratel
Update per-package CHANGELOG.md files for a Ratel release. An agent skill from ratel-ai/ratel.
swimmwatch/cloakbrowser-mcp
Maintain, organize, consolidate, or audit the cloakbrowser-mcp documentation set only when the user explicitly requests project documentation maintenance or an authorized public change requires it.
delorenj/mcp-server-trello
Canonical build → release → tag → publish procedure for the @delorenj/mcp-server-trello repo.
Arize-ai/phoenix
Create Phoenix release documentation grounded in actual code changes.
yangtaihong59/siyuan-plugins-mcp-sisyphus
Publish the SiYuan Sisyphus plugin, standalone CLI, or both.
awdr74100/figwright
Upgrade @modelcontextprotocol/server (the MCP TypeScript SDK v2) and prove the wire contract survived.
awdr74100/figwright
Build a Figma design from code or a description — the reverse of figma-codegen.
awdr74100/figwright
Generate framework-aware code from a Figma design. An agent skill from awdr74100/figwright.
Works with
Categories
Upgrade @figma/plugin-typings and absorb what the new version exposes. Figma Typings Audit is an agent skill from awdr74100/figwright. Upgrade @figma/plugin-typings and absorb what the new version exposes.
Figma Typings Audit fits situations like: the user wants @figma/plugin-typings updated; asks what a new plugin-typings version would break; newly enable — including a Renovate bump PR for that package.
Run `npx skills add awdr74100/figwright --skill figma-typings-audit -a claude-code`. Or copy the skill folder (.claude/skills/figma-typings-audit in awdr74100/figwright) into .claude/skills/figma-typings-audit in your project. Claude Code loads it when a task matches its description.
Run `npx skills add awdr74100/figwright --skill figma-typings-audit -a codex`. Or copy the skill folder (.claude/skills/figma-typings-audit in awdr74100/figwright) into .agents/skills/figma-typings-audit in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add awdr74100/figwright --skill figma-typings-audit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/figma-typings-audit, .gemini/skills/figma-typings-audit, .github/skills/figma-typings-audit and .opencode/skills/figma-typings-audit in your project.
Going by SKILL.md and its folder, Figma Typings Audit needs the command-line tools its instructions call (pnpm, npm, npx, tsc and git). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use npm, npx and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Figma Typings Audit is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Figma Typings Audit: Zod (jasonjgardner/blockbench-mcp-plugin, 500 stars), Changelog (ratel-ai/ratel, 471 stars), Project Docs Maintainer (swimmwatch/cloakbrowser-mcp, 164 stars) and MCP Server Trello Release (delorenj/mcp-server-trello, 445 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
awdr74100 (a GitHub user) maintains it in awdr74100/figwright, which has 1,011 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 10, 2026.
Source: awdr74100/figwright on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.