Figma Use
shepherdjerred/monorepo
This skill should be used when the user asks to "create a Figma design", "design in Figma", "make a Figma mockup", "create an app icon", "design UI", "render JSX to Figma", "export from Figma"…
Single owner of the connection between Figma Desktop and the figma-console MCP Desktop Bridge plugin, alias-agnostic, across every project.
$ npx skills add hashgraph-online/awesome-codex-plugins --skill figma-bridge-doctor -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install hashgraph-online/awesome-codex-plugins figma-bridge-doctor --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/hashgraph-online/awesome-codex-plugins.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/thiagoxikota/figma-maxxing/skills/figma-bridge-doctor .claude/skills/figma-bridge-doctor && 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-bridge-doctor" agent skill from https://github.com/hashgraph-online/awesome-codex-plugins/tree/main/plugins/thiagoxikota/figma-maxxing/skills/figma-bridge-doctor into .claude/skills/figma-bridge-doctor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figma-bridge-doctor", 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/hashgraph-online/awesome-codex-plugins/tree/main/plugins/thiagoxikota/figma-maxxing/skills/figma-bridge-doctorType 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 hashgraph-online/awesome-codex-plugins --skill figma-bridge-doctor -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install hashgraph-online/awesome-codex-plugins figma-bridge-doctor --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hashgraph-online/awesome-codex-plugins.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/thiagoxikota/figma-maxxing/skills/figma-bridge-doctor .agents/skills/figma-bridge-doctor && 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-bridge-doctor" agent skill from https://github.com/hashgraph-online/awesome-codex-plugins/tree/main/plugins/thiagoxikota/figma-maxxing/skills/figma-bridge-doctor into .agents/skills/figma-bridge-doctor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figma-bridge-doctor", 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 hashgraph-online/awesome-codex-plugins --skill figma-bridge-doctor -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install hashgraph-online/awesome-codex-plugins figma-bridge-doctor --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hashgraph-online/awesome-codex-plugins.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/thiagoxikota/figma-maxxing/skills/figma-bridge-doctor .cursor/skills/figma-bridge-doctor && 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-bridge-doctor" agent skill from https://github.com/hashgraph-online/awesome-codex-plugins/tree/main/plugins/thiagoxikota/figma-maxxing/skills/figma-bridge-doctor into .cursor/skills/figma-bridge-doctor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figma-bridge-doctor", 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/hashgraph-online/awesome-codex-plugins.git --path plugins/thiagoxikota/figma-maxxing/skills/figma-bridge-doctor--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 hashgraph-online/awesome-codex-plugins --skill figma-bridge-doctor -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install hashgraph-online/awesome-codex-plugins figma-bridge-doctor --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hashgraph-online/awesome-codex-plugins.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/thiagoxikota/figma-maxxing/skills/figma-bridge-doctor .gemini/skills/figma-bridge-doctor && 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-bridge-doctor" agent skill from https://github.com/hashgraph-online/awesome-codex-plugins/tree/main/plugins/thiagoxikota/figma-maxxing/skills/figma-bridge-doctor into .gemini/skills/figma-bridge-doctor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figma-bridge-doctor", 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 hashgraph-online/awesome-codex-plugins figma-bridge-doctorInstalls 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 hashgraph-online/awesome-codex-plugins --skill figma-bridge-doctor -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/hashgraph-online/awesome-codex-plugins.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/thiagoxikota/figma-maxxing/skills/figma-bridge-doctor .github/skills/figma-bridge-doctor && 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-bridge-doctor" agent skill from https://github.com/hashgraph-online/awesome-codex-plugins/tree/main/plugins/thiagoxikota/figma-maxxing/skills/figma-bridge-doctor into .github/skills/figma-bridge-doctor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figma-bridge-doctor", 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 hashgraph-online/awesome-codex-plugins --skill figma-bridge-doctor -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install hashgraph-online/awesome-codex-plugins figma-bridge-doctor --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hashgraph-online/awesome-codex-plugins.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/thiagoxikota/figma-maxxing/skills/figma-bridge-doctor .opencode/skills/figma-bridge-doctor && 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-bridge-doctor" agent skill from https://github.com/hashgraph-online/awesome-codex-plugins/tree/main/plugins/thiagoxikota/figma-maxxing/skills/figma-bridge-doctor into .opencode/skills/figma-bridge-doctor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figma-bridge-doctor", 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-bridge-doctorSingle owner of the connection between Figma Desktop and the figma-console MCP Desktop Bridge plugin, alias-agnostic, across every project.
Figma Bridge Doctor is an agent skill from hashgraph-online/awesome-codex-plugins. Single owner of the connection between Figma Desktop and the figma-console MCP Desktop Bridge plugin, alias-agnostic, across every project. Use on any intent to open, activate, restart or check Figma or the bridge, and before any figma-console tool call. Trigger phrases: "open the Figma file", "is the bridge connected?", "restart the bridge", "abre o figma", "liga a bridge". Probes state, takes the minimum action, verifies with figmagetstatus and escalates at most 4 times. Always Figma Desktop, never the browser…
Its SKILL.md is about 6.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 18 other files, including scripts and reference files (for example `references/deep-recovery.md`, `references/layer1-recovery.md` and `references/plugin-version-drift.md`). Compatibility notes: macOS only for the scripts (bash, osascript, lsof, pgrep, launchctl), with the Accessibility permission for the app that runs them and the English Figma UI…
It sits in Frontend & Design. It works with Figma, Model Context Protocol and macOS. The repository describes itself as: A curated list of awesome OpenAI Codex / ChatGPT plugins, skills, and resources. The 1 Codex Marketplace. See live plugins at: https://hol.org/plugins/best-codex-plugins. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 3e1456a. 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.
Ships 10 files in scripts/ (Shell, Python and JavaScript), which the agent can run.
Shell commands in SKILL.md call:
bashosascriptnpxclaudecurlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
figma.comAlso links to:
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
FIGMA_ACCESS_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
macOS only for the scripts (bash, osascript, lsof, pgrep, launchctl), with the Accessibility permission for the app that runs them and the English Figma UI. Needs Figma Desktop, figma-console-mcp (Southleft) with its Desktop Bridge plugin, Node.js 18+ and Python 3. It repairs the figma-console connection only; the official Figma MCP server does not go through it.
From compatibility in the SKILL.md frontmatter.
Figma Bridge Doctor loads about 6.7k tokens when it runs, and up to ~13k if it reads all its reference files. Until then it costs about 143 tokens; SKILL.md has 3,404 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); the scripts in this folder are not scanned.
The full file from hashgraph-online/awesome-codex-plugins at commit 3e1456a, republished under its MIT licence (© hashgraph-online). 3,404 words, ~6,657 tokens.
.claude/skills/figma-bridge-doctor/SKILL.md (or your agent's skills folder). This skill also uses 15 other files; get the full folder from GitHub.Domain owner for everything Figma Desktop + Bridge. When the user mentions opening a Figma file, activating the bridge, or any bridge issue, this skill picks the right action and verifies it worked.
Commands below call the scripts as "${CLAUDE_SKILL_DIR}/scripts/<name>". Claude Code replaces ${CLAUDE_SKILL_DIR} with this skill's directory (the folder that holds this file) when it loads the skill. Other agents: if the text still shows ${CLAUDE_SKILL_DIR}, put the absolute path of that folder in its place before running; never run a command with the variable empty, which would point at /scripts/. In the files under references/, scripts/... means this skill's scripts/ directory.
Everything below happens on this machine. The scripts in scripts/ make no network calls themselves; opening a file hands its figma.com URL to Figma Desktop. One diagnostic in references/layer1-recovery.md runs npx -y figma-console-mcp@latest, which downloads that package from npm.
figma-bridge-reset.sh kills the figma-console-mcp server that belongs to THIS agent session, found by a process-tree check (see "Critical preconditions"). When it cannot tell which server is this session's, it kills nothing. Servers of other sessions are skipped unless the user sets FIGMA_KILL_OTHER_SESSIONS=1, which is for a solo setup only. In deep recovery, orphan servers whose session is gone are killed by pid, only the pids figma-status.sh lists under orphans=, and another session's server is killed only after the user says yes to a question that names its port and pid (references/deep-recovery.md).FIGMA_FULL_RESET=1 (Step 5). Never killall Figma.Plugins > Development > Figma Desktop Bridge, through osascript and System Events. That needs the Accessibility permission, which only the user grants.${FIGMA_MAXXING_STATE_DIR:-$HOME/.config/figma-maxxing} (alias registry, last URL, signal file).scripts/mcp-direct/ daemon, a loopback HTTP proxy with a bearer token, starts only after the user says yes (references/layer1-recovery.md).Tool names are written as base names (figma_get_status). Your client may add a prefix: in Claude Code, with the server registered under the name figma-console, they appear as mcp__figma-console__figma_get_status. If you registered it under another name, use that name wherever this skill writes figma-console.
open, osascript, launchctl, lsof, pgrep and ps. On any other OS each macOS-only script prints a short manual checklist and exits 1: follow the "Manual checklist" section with the user instead.osascript click failed. Granting it is a user action.Plugins > Development > Figma Desktop Bridge. If Figma runs in another language the names do not match and the click fails. Ask the user to switch Figma to English or to run the plugin by hand.figma-console-mcp, by Southleft) registered in the agent, and its Desktop Bridge plugin imported once from ~/.figma-console-mcp/plugin/manifest.json.State files live under the state dir, ${FIGMA_MAXXING_STATE_DIR:-$HOME/.config/figma-maxxing}, written <state-dir> below. The scripts create it on first run.
| File | What it holds |
|---|---|
<state-dir>/figma-files.json | Alias registry. Starts as an empty JSON object ({}); entries live under the files key. The user grows it, nothing ships in it. |
<state-dir>/figma-bridge-last-url | One line: the last URL opened. Starts empty. |
<state-dir>/figma-reconnect-signal | Exists only while a plugin trigger is pending for the optional watchdog. |
<state-dir>/mcp-direct-<HTTP_PORT>.token | Exists only while the scripts/mcp-direct/ daemon runs: its bearer token, mode 0600. |
| Variable | Used by | Effect |
|---|---|---|
FIGMA_MAXXING_STATE_DIR | all scripts | Moves the state dir. |
FIGMA_ACCESS_TOKEN | the MCP server | Figma personal access token for REST backed tools. The same variable figma-console-mcp reads. Never print it, never write it to a file. |
FIGMA_FULL_RESET=1 | figma-bridge-reset.sh | Quit and relaunch Figma. Without it the script never quits Figma. Set it only after the user said yes to a restart (Step 5). |
FIGMA_NO_PLUGIN=1 | figma-open.sh, figma-bridge-reset.sh | Skip the plugin trigger. |
FIGMA_KILL_OTHER_SESSIONS=1 | figma-bridge-reset.sh | Also kill the MCP servers of other sessions. Only when solo. |
FIGMA_AGENT_PROCESS | figma-status.sh, figma-bridge-reset.sh | Process name of the agent that spawns the MCP servers (default claude, the Claude Code process). Used to tell this session's server from the others. |
FIGMA_BRIDGE_DEFAULT_URL | figma-bridge-reset.sh | Target when no argument is given (wins over the cached URL). |
WS_PORT, HTTP_PORT, FIGMA_MCP_ENTRY | scripts/mcp-direct/ | Ports and server entry of the direct client (defaults 9231 and 8791). |
The figma-console MCP server needs the Bridge plugin running inside Figma Desktop to do writes. Bridge = a WebSocket connection between a figma-console-mcp node process (port 9223-9232) and the in-Figma plugin. It breaks for predictable reasons: plugin not yet launched after Figma opens, stale MCP server on the wrong port, Figma in a 0-window state, Accessibility permission missing on the terminal. Recovery is a small set of mechanical steps; this skill executes them and verifies.
The field notes below disagree on how the plugin attaches when several servers are alive. Notes from 2026-05 and 2026-06 saw it serve ONE server at a time (first or lowest port, last trigger wins). Notes from 2026-08 and 2026-09 saw one WebSocket per live server in the range. The two were never reconciled, so never assume which session the plugin is serving: read figma_get_status.
The user prompts in natural language. They do not type commands or remember flags. You figure out intent + current state + the minimum action that gets them what they need. Pick the CHEAPEST action that achieves the goal.
Before any action, snapshot state:
bash "${CLAUDE_SKILL_DIR}/scripts/figma-status.sh" # local: my MCP port, other sessions, cached URLThen call figma_get_status for the bridge view: is the WebSocket up, which file is paired, what port.
The user might give:
<state-dir>/figma-files.json.https://www.figma.com/design/<fileKey>/... or /board/<fileKey>/): extract the key, look it up in the registry by key.<state-dir>/figma-bridge-last-url, or surface "which file?" if the cache is empty.figma_get_status returned.If the user pastes a figma.com/(design|board|file)/<fileKey> URL and the key is NOT in <state-dir>/figma-files.json:
bash "${CLAUDE_SKILL_DIR}/scripts/figma-add.sh" "<url>" [optional-alias] [optional-label]. The script extracts the key, derives the alias from the URL filename if none is given, and sets validated=null. Idempotent.figma-open.sh <alias>.If the user gives the URL WITH a clear name, like "open this one from the Acme project: https://...", you can pass the alias as arg 2: bash "${CLAUDE_SKILL_DIR}/scripts/figma-add.sh" "<url>" acme. Do not ask the question if the project name is unambiguous in the message.
Never hardcode a project alias in your dispatch logic. The registry is a JSON file the user grows. Every project is equal. <state-dir>/figma-files.json is the source of truth at any moment: re-read it each turn.
Based on state + target:
| State | Target file | Action |
|---|---|---|
| Bridge UP, paired with target | (same) | No-op. Report "PASS already on <file>, port <N>". Done. |
| Bridge UP, paired with a different file | switch to <X> | figma_navigate if Figma has a tab for <X>, else figma-open.sh <X> to open + navigate |
| Bridge DOWN, Figma running with a file open | <X> | osascript menu click (Step T below) if last-opened was <X>, else figma-open.sh <X> |
| Bridge DOWN, Figma running but no file | <X> | figma-open.sh <X> |
| Bridge DOWN, Figma not running | <X> | figma-open.sh <X> (it opens Figma + waits + clicks) |
| Bridge UP but acting flaky / stale data | <X> | figma_reconnect, then verify; if still bad, bash "${CLAUDE_SKILL_DIR}/scripts/figma-bridge-reset.sh" <X> (gentle by default) |
As of figma-console-mcp v1.40.8, figma_reconnect is informational: it does not repair a dead connection, and figma_get_status is the only proof of a live connection. The last row still calls it first; figma_get_status decides whether to move on to the reset.
sleep 3
figma_get_status probe:true
connected to target file -> DONE, report briefly: "bridge on <file>, port <N>, latency <ms>"
disconnected -> escalate:
attempt 1: figma-bridge-reset.sh <alias> (gentle by default, Figma stays open)
attempt 2: consent-gated full reset: ask first, then FIGMA_FULL_RESET=1
figma-bridge-reset.sh <alias> (quit + relaunch); on no, go to attempt 3
attempt 3: consent-gated tight-loop atomic re-attach (multi-session race fix, below)
attempt 4: manual checklist to user, STOPNever quit Figma Desktop without asking. The user may be working in it right now. figma-bridge-reset.sh never quits Figma unless FIGMA_FULL_RESET=1 is set. Any step that quits Figma, today only the full reset of attempt 2, first asks one short question and waits for an explicit yes:
"The bridge is still down. Can I quit and reopen Figma Desktop? Your open tabs come back after the relaunch."
Anything but an explicit yes counts as no: skip to attempt 3. Ask once per recovery, not before every retry.
If a reset prints WARN: no MCP listener on 9223-9232 after 15s and Skipping click, it stopped before the plugin click on purpose because no server was listening. Typically it just killed this session's server (the only one when you work solo), and that server only respawns on the next MCP call, which cannot happen while the script runs. Do what the script says: call figma_get_status once (that respawns the server), run Step T, then verify. This completes the same attempt; it is not a new one.
Cap at 4 escalations. Nothing enforces this for you: count the attempts and stop after the fourth. Do NOT loop further.
Tight-loop atomic re-attach (multi-session race), respawn-low (win the attach without killing other sessions) and orphan-MCP port exhaustion live in references/deep-recovery.md. Load it at escalation attempt 3 (attempt 1 failed and attempt 2 failed or was declined, with other Claude Code sessions alive), or when the ports are exhausted after a long session.
figma-bridge-reset.sh defaults to killing ONLY this session's MCP server. Other Claude Code sessions on 9223-9232 are SKIPPED by a process-tree check: a server is this session's when its nearest ancestor named claude (or $FIGMA_AGENT_PROCESS) is the same process as the script's. Comparing whole ancestor chains is not enough, because every session started from the same terminal app shares the terminal's ancestors. If the script finds no such ancestor it kills nothing and says so. figma-status.sh uses the same check for my_mcp_port, and splits every other listener in two: orphans= (no live owner: the server and its own npx wrapper lead straight to launchd, so the session that started it is gone) and other_sessions= (anything else, such as another agent session). Set FIGMA_KILL_OTHER_SESSIONS=1 to kill all of them (only when solo).FIGMA_FULL_RESET=1, which needs the user's yes first (Step 5). Never killall Figma: that leaves Figma in a 0-window state where no plugin can attach.figma-status.sh + figma_get_status BEFORE asking them anything. Often you can answer "is it connected?" without any further input.Field note, 2026-09. The plugin panel can show Plugin update available. Never re-import because of that banner without measuring first: run figma-status.sh and read plugin_drift. true means the disk is NOT the newest bundle: a server started from an old npx cache can rewrite ~/.figma-console-mcp/plugin/ with its own, older bundle, and following the banner would install that downgrade for good. Connected to N AI apps counts live servers in 9223-9232, not files, and is not a sign of a problem.
The three version layers, the trap, the five rules and the full fix recipe: references/plugin-version-drift.md. Load it whenever the banner appears or plugin_drift=true.
osascript <<'OSA'
tell application "Figma" to activate
delay 0.5
tell application "System Events"
tell process "Figma"
set frontmost to true
delay 0.5
click menu item "Figma Desktop Bridge" of menu 1 of menu item "Development" of menu 1 of menu bar item "Plugins" of menu bar 1
end tell
end tell
OSA
sleep 4Idempotent. Validated 2026-05-23. macOS only, needs the Accessibility permission, assumes the English Figma UI.
Field note, 2026-06: during the disconnect window the plugin may have served ANOTHER Claude Code session, which wrote into the file. After reconnecting in the middle of write work, run the audit in references/rival-write-audit.md before the next write: compare page.children with your inventory from before the drop, archive rival debris (never delete it), do not adopt a rival write into a deliverable, and treat a write that re-injects after you archive it as a live loop that only closing the other window stops.
Field note, 2026-08. With two files paired at the same time, the active target changes without you asking (the designer clicks another tab, another Claude Code session re-triggers the plugin). Symptoms, in the order they appear:
figma_execute dies with in setCurrentPageAsync: Expected node, got undefined, because figma.root.children.find(p => p.name === '<your page>') returned undefined: you are in the wrong file, the page was not deleted. Always check fileContext.fileName in the return value.figma_take_screenshot falls to REST and returns 403 Invalid token, which looks like an expired personal access token (see "Failure surface to track" below) but here it is only a consequence of the wrong target.Fix in two steps, in this order:
fileKey to figma_execute. It runs against that file without touching the active target, so it works even with the bridge pointing somewhere else.figma_navigate({url, lock: true}). The lock PINS the target; without it the drift comes back. After pinning, figma_capture_screenshot (plugin, exportAsync) works with no token at all.Before any conclusion about a leak: sweep the intruder file for nodes with the names from YOUR plan before assuming damage. In the incident of 2026-08-17 the write died at setCurrentPageAsync, which comes BEFORE any create*, and nothing leaked into the other file, confirmed by a sweep of its 8 pages, not by assumption.
Surface this when auto-recovery has exhausted its retries:
Bridge still down after 4 attempts. Manual steps:
1. Figma DESKTOP (not browser) running with a file open
2. Plugins > Development > "Figma Desktop Bridge" (the one WITHOUT the warning icon) > Run
- If not listed, import from ~/.figma-console-mcp/plugin/manifest.json
3. Leave the plugin window OPEN
4. Reply "bridge is up" and I will re-probe.After the user confirms, re-probe ONCE. Do not loop further.
When a session opens and the first user message implies Figma work (mentions Figma, a Figma URL, a known alias, or "open" + a project name), proactively run PROBE (Step 1) before the user has to.
If disconnected, run figma-open.sh with the most recent cached URL (<state-dir>/figma-bridge-last-url) or ask which file.
When the user mentions a new project (e.g. "open the Figma file for new-project") and the alias is not in <state-dir>/figma-files.json:
files with "validated": null (figma-add.sh does exactly this):"new-project": {
"url": "https://www.figma.com/design/<fileKey>/<name>",
"key": "<fileKey>",
"label": "New Project - <short desc>",
"type": "design",
"validated": null
}figma-open.sh <alias>."validated" to today's date.Before running any recovery script, if figma_get_status returns disconnected, glance at:
pgrep -x Figma: is Figma even running?claude mcp list | grep figma-console (Claude Code, server registered as figma-console): is the MCP server installed?lsof -t -i tcp:9223-9232 -s TCP:LISTEN: which servers hold which ports?If pgrep shows zero Figma, the recovery is just OPEN (not RESTART). If the MCP server is not listed, surface the install instructions (https://github.com/southleft/figma-console-mcp) and stop. If multiple servers hold ports across the range, read figma-status.sh: pids under orphans= are leftovers with no live owner (deep recovery clears them), pids under other_sessions= are the multi-session race: close the other Claude Code windows.
Not every Figma failure is the bridge: REST token vs OAuth (validated 2026-06-14). figma_take_screenshot (figma-console) renders via the Figma REST API, which uses the MCP server's FIGMA_ACCESS_TOKEN (the personal access token). When that token expires it returns 403 "Invalid token" / 403 "Token expired": this is NOT a bridge failure, do NOT run resets. The WebSocket bridge (writes and figma_capture_screenshot) and the official Figma MCP server (remote, OAuth, separate auth) keep working. To screenshot or export anyway, use the official server: download_assets(fileKey,nodeId,defaultScale:2) or get_screenshot(fileKey,nodeId) return a short-lived figma.com/api/mcp/asset/... URL, then curl -o file.png "<url>" (no token, no base64). whoami confirms the OAuth identity even with the token dead. Refreshing the token (Figma > Settings > Security) is the long-term fix but is a USER action.
As of figma-console-mcp v1.40.8, figma_take_screenshot uses the Desktop Bridge plugin when it is connected and falls back to the REST API, so the 403 shows up when the call goes through REST (bridge down, or pointing at another file). figma_capture_screenshot always uses the plugin runtime and needs the bridge.
figma_get_comments is also gated by the REST token: same 403 when the token expires (seen 2026-06-18). Worse: comments are NOT in the Figma Plugin API at all, so the bridge and figma_execute can never read them. To read comments with a dead token: the official Figma MCP server (OAuth) if it is connected, else ask the user to paste the comments or refresh the token. Do not promise to read a stakeholder's comments without checking the token first.
This skill mostly fixes layer 2. Layer 1 failures look identical from the user's chair ("the bridge will not connect") but have a different fix and cannot be fixed mid-session by this skill, because this skill works THROUGH the figma-console tools, which do not exist if layer 1 failed.
figma-console crashed at boot, its tools are absent for the whole session, and re-registration requires the USER to run /mcp and reconnect, or to restart Claude Code.figma_get_status, figma-open.sh and the osascript menu click own. The agent CAN fix this layer itself.When the figma-console tools are entirely missing (not just disconnected), load references/layer1-recovery.md: how to confirm a layer 1 boot crash, the corrupted npx cache fix, the opt-in scripts/mcp-direct/ fallback and what to tell the user. Do NOT loop the plugin-trigger osascript for a layer 1 failure: the plugin layer was never the problem.
scripts/figma-watchdog.sh polls <state-dir>/figma-reconnect-signal every 2 seconds and clicks the plugin menu when the file appears. It is meant to run as a LaunchAgent with the label com.figma-maxxing.bridge-watchdog; the template is scripts/com.figma-maxxing.bridge-watchdog.plist.template.
It is optional and off by default. figma-open.sh and figma-bridge-reset.sh check launchctl list for that label: if it is loaded they touch the signal file, if not they click directly with osascript. Installing it is a user decision; never load or unload it on your own initiative. Install, permissions and removal: references/watchdog.md.
figma_get_status: probefigma_list_open_files: which Figma files the bridge seesfigma_reconnect: cheap reconnect attempt (informational as of v1.40.8, see Step 4)scripts/figma-status.sh: local snapshot (ports, sessions, cached URL, plugin drift)scripts/figma-open.sh <alias|url|list>: open the file + trigger the pluginscripts/figma-add.sh <url> [alias] [label]: register an aliasscripts/figma-bridge-reset.sh <alias|url>: kill this session's server + open + trigger; gentle by default; FIGMA_FULL_RESET=1 only after the user agreed to a Figma restartscripts/mcp-direct/: direct client for the layer 1 fallback (opt-in, references/layer1-recovery.md)scripts/figma-watchdog.sh + the plist template: optional watchdog<state-dir>/figma-files.json: canonical alias registry<state-dir>/figma-bridge-last-url: cache of the most recent targetopen calls use open -a "Figma" <url>.figma_get_status after dispatch. Script exit 0 != bridge connected.The full recipe is self-contained in THIS skill and the scripts in its scripts/ directory: when the recipe changes (the user validates a new approach, a Figma version breaks the current method), the skill and the scripts change together. Tell the user and propose the edit to both (or a pull request upstream); do not silently edit an installed copy, which the next install may overwrite.
© hashgraph-online, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 15 other files (scripts, references) in plugins/thiagoxikota/figma-maxxing/skills/figma-bridge-doctor of hashgraph-online/awesome-codex-plugins.
Open the folder on GitHubat commit 3e1456a
Figma Bridge Doctor 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 Bridge Doctor this skillhashgraph-online/awesome-codex-plugins | 1.3k | — | ~6.7k | Automated safety check: Pass | MIT | |
| Figma Useshepherdjerred/monorepo | 112 | — | ~946 | Automated safety check: Pass | GPL-3.0 | |
| Figma use_figma Plugin API Ruleswarpdotdev/warp | 65k | 4 repos | ~4.4k | Automated safety check: Pass | AGPL-3.0 | |
| Figma Design to Codewarpdotdev/warp | 65k | 4 repos | ~2.9k | Automated safety check: Pass | AGPL-3.0 | |
| Figma Code Connect Componentswarpdotdev/warp | 65k | 2 repos | ~4.2k | Automated safety check: Pass | AGPL-3.0 | |
| Figma Screen Generatorwarpdotdev/warp | 65k | 2 repos | ~5k | Automated safety check: Pass | AGPL-3.0 |
shepherdjerred/monorepo
This skill should be used when the user asks to "create a Figma design", "design in Figma", "make a Figma mockup", "create an app icon", "design UI", "render JSX to Figma", "export from Figma"…
warpdotdev/warp
Required groundwork before any use_figma call: the rules and reference files for running JavaScript in a Figma file through the Plugin API without common failures.
warpdotdev/warp
Turns a Figma frame or component into production code that matches the design, using the Figma MCP server and the project's own design system.
warpdotdev/warp
Maps published Figma components to their code implementations with Code Connect, using the Figma MCP suggestion and mapping tools.
warpdotdev/warp
Builds or updates full Figma screens from code or a description by reusing the file's published design system components, variables and styles.
ethanplusai/jarvis
A skill your agent uses when helping someone install, configure, or debug a fresh clone of JARVIS (this repo) — especially "the mic doesn't work", "JARVIS says his language systems are down", any…
hashgraph-online/awesome-codex-plugins
Create original anime-style reaction stickers as looping GIFs and MP4 previews, using generated character pose sheets and timed key poses.
hashgraph-online/awesome-codex-plugins
Manage and query Calibre libraries with the calibredb CLI (local paths or Calibre Content server URLs).
hashgraph-online/awesome-codex-plugins
A skill your agent uses when adding, changing, testing, or debugging Rust HTTP APIs and services, especially when Codex needs black-box integration tests, random-port app startup, real database test…
hashgraph-online/awesome-codex-plugins
Make a studio's game look like something at build time — a cover from a real frame of the game (free), painted covers, backdrops, textures and character plates from image models through the…
hashgraph-online/awesome-codex-plugins
Use CALL-E from Codex through the calle CLI. An agent skill from hashgraph-online/awesome-codex-plugins.
hashgraph-online/awesome-codex-plugins
Balance game difficulty, resources, rewards, probability, progression, economies, and dominant strategies.
Works with
Categories
Single owner of the connection between Figma Desktop and the figma-console MCP Desktop Bridge plugin, alias-agnostic, across every project. Figma Bridge Doctor is an agent skill from hashgraph-online/awesome-codex-plugins. Single owner of the connection between Figma Desktop and the figma-console MCP Desktop Bridge plugin, alias-agnostic, across every project.
Figma Bridge Doctor fits situations like: phrases: open the Figma file; is the bridge connected?; restart the bridge.
Run `npx skills add hashgraph-online/awesome-codex-plugins --skill figma-bridge-doctor -a claude-code`. Or copy the skill folder (plugins/thiagoxikota/figma-maxxing/skills/figma-bridge-doctor in hashgraph-online/awesome-codex-plugins) into .claude/skills/figma-bridge-doctor in your project. Claude Code loads it when a task matches its description.
Run `npx skills add hashgraph-online/awesome-codex-plugins --skill figma-bridge-doctor -a codex`. Or copy the skill folder (plugins/thiagoxikota/figma-maxxing/skills/figma-bridge-doctor in hashgraph-online/awesome-codex-plugins) into .agents/skills/figma-bridge-doctor 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 hashgraph-online/awesome-codex-plugins --skill figma-bridge-doctor -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-bridge-doctor, .gemini/skills/figma-bridge-doctor, .github/skills/figma-bridge-doctor and .opencode/skills/figma-bridge-doctor in your project.
Going by SKILL.md and its folder, Figma Bridge Doctor needs a shell, Python and JavaScript for the scripts in its folder, the command-line tools its instructions call (bash, osascript, npx, claude and curl) and credentials named FIGMA_ACCESS_TOKEN. Our summary lists: Python 3; Node.js; A Bash shell; A credential in FIGMA_ACCESS_TOKEN. Compatibility (from SKILL.md): macOS only for the scripts (bash, osascript, lsof, pgrep, launchctl), with the Accessibility permission for the app that runs them and the English Figma UI. Needs Figma Desktop, figma-console-mcp (Southleft) with its Desktop Bridge plugin, Node.js 18+ and Python 3. It repairs the figma-console connection only; the official Figma MCP server does not go through it..
SKILL.md names 2 domains. In commands or code: figma.com; the agent is likely to contact it when it follows the instructions. As links in the text: github.com. 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Figma Bridge Doctor is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.7k tokens (SKILL.md is roughly 27k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 6k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Figma Bridge Doctor: Figma Use (shepherdjerred/monorepo, 112 stars), Figma use_figma Plugin API Rules (warpdotdev/warp, 65k stars), Figma Design to Code (warpdotdev/warp, 65k stars) and Figma Code Connect Components (warpdotdev/warp, 65k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
hashgraph-online (a GitHub organization) maintains it in hashgraph-online/awesome-codex-plugins, which has 1,267 GitHub stars. The repository holds 716 skills in this directory. The repository was last updated on October 10, 2026.
Source: hashgraph-online/awesome-codex-plugins on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.