Claude Code ist ein leistungsfähiger Coding-Agent. Geben Sie ihm einen Screenshot eines Figma-Screens, erzeugt er etwas, das ungefähr stimmt. Geben Sie ihm ein strukturiertes Context-Bundle — typisierte design tokens, eine Layout-IR, Referenz-Renders und eine maschinenlesbare Spezifikation — erzeugt er Code, den Sie tatsächlich ausliefern können.
figmascope generiert dieses Bundle clientseitig, vollständig in Ihrem Browser. Kein Backend, kein Upload, kein zwischengeschalteter Dienst mit Zugriff auf Ihre Figma-Dateien. Dieser Leitfaden führt Sie durch den vollständigen Workflow Figma → figmascope → Claude Code mit realen CLI-Beispielen. Wenn Sie Cursor statt Claude Code verwenden, finden Sie den Cursor-spezifischen Workflow unter Figma zu Cursor.
Voraussetzungen
- Claude Code installiert:
npm install -g @anthropic-ai/claude-code(oder die aktuelle Installationsmethode gemäß docs.anthropic.com/claude-code) - Eine Figma-Datei-URL
- Ein Figma Personal Access Token mit dem Bereich File content: read-only
Context-Bundle aus figmascope exportieren
Öffnen Sie figmascope.dev, fügen Sie die Figma-Datei-URL und Ihr Token ein, klicken Sie auf Agentenkontext exportieren. Sie erhalten ein Zip wie figmascope-ABC123.zip.
Entpacken Sie es in ein Verzeichnis design/ in Ihrem Projekt:
unzip figmascope-ABC123.zip -d design/
Die resultierende Verzeichnisstruktur:
design/
├── CONTEXT.md
├── tokens.json
├── _meta.json
├── components/
│ └── inventory.json
├── screens/
│ ├── Home.json
│ ├── Home.png
│ ├── Settings.json
│ └── Settings.png
└── strings.json
Committen Sie es in die Versionskontrolle. Das Manifest _meta.json speichert den Export-Zeitstempel und den Figma-Datei-Schlüssel, sodass das Team immer weiß, welcher Designstand dem Bundle entspricht.
Wie Claude Code das Context-Bundle liest
CONTEXT.md ist der Einstiegspunkt. Es ist ein strukturiertes Spezifikationsdokument, das dem Agenten mitteilt:
- Welche Frames exportiert wurden und in welcher Reihenfolge
- Die verwendeten Token-Benennungskonventionen
- Umfangshinweise — z. B. welche Screens außerhalb des Umfangs lagen, weil es sich um Nicht-Frame-Knoten handelte, oder welche Komponenten ausgeschlossen wurden
- Ausgearbeitete Beispiele, die zeigen, wie eine Token-Referenz wie
{ "$ref": "color.accent" }zu einem Wert intokens.jsonaufgelöst wird - Alle beim Export ausgegebenen Warnungen (Kollision bei String-Schlüsseln, inferierter Layout-Modus bei Containern)
Claude Code liest Dateien, bevor es handelt. Eine Sitzung mit CONTEXT.md zu beginnen, orientiert den Agenten, bevor er irgendeinen Screen-JSON anfasst.
Eine Claude Code-Sitzung starten
Der direkteste Ansatz — starten Sie claude im Projekt-Root und verweisen Sie auf das Design-Verzeichnis:
claude
Dann in der interaktiven Sitzung:
Read design/CONTEXT.md, then implement the Home screen as a React component.
Use:
- design/tokens.json for all design token values
- design/screens/Home.json for the layout tree
- design/screens/Home.png as visual reference
- design/strings.json for all copy (use dot-notation keys as i18n identifiers)
Constraints:
- Tailwind CSS for styles, mapping token values to theme config
- TypeScript
- No hardcoded color or spacing values — all values must come from tokens
Claude Code liest die Dateien sequenziell, löst Token-Referenzen aus der IR auf und generiert eine Komponente, die Ihr tatsächliches Design-System widerspiegelt statt eine generische Annäherung.
Einmalige Prompts mit --print
Für CI-Pipelines oder geskriptete Codegenerierung verwenden Sie den nicht-interaktiven Modus --print:
claude --print "$(cat <<'EOF'
Read design/CONTEXT.md. Then implement design/screens/Home.json as
src/screens/Home.tsx (React + Tailwind + TypeScript).
- All tokens from design/tokens.json
- All strings from design/strings.json using dot-notation keys
- Visual reference: design/screens/Home.png
- Component names from design/components/inventory.json
EOF
)"
Das Heredoc hält den Prompt in Shell-Skripten lesbar. --print schreibt Claudes Antwort auf stdout, sodass Sie sie weiterleiten oder nach Bedarf erfassen können.
Claude Code arbeitet am besten, wenn Sie ihm einen Screen auf einmal geben. Die Layout-IR für einen einzelnen Screen ist bereits dicht; halten Sie Sitzungen fokussiert.
Mehrseitige Projekte — ein sinnvoller Ansatz
Bei Dateien mit vielen Frames arbeiten Sie inkrementell vor. Eine Schleife über Screen-Dateien:
for screen_json in design/screens/*.json; do
screen=$(basename "$screen_json" .json)
echo "Implementing $screen..."
claude --print "$(cat <
Die Anweisung „do not re-implement components that already exist" ist wichtig, wenn das Komponenteninventar geteilt wird. Claude Code kann design/components/inventory.json lesen, um festzustellen, welche Komponenten bereits implementiert sind, und diese importieren statt sie neu zu generieren.
Design Tokens verdrahten
Das von figmascope exportierte tokens.json verwendet eine W3C-ähnliche verschachtelte Struktur mit $value- und $type-Feldern:
{
"color": {
"surface": { "$value": "#f6f2ea", "$type": "color" },
"ink": { "$value": "#1f1d1a", "$type": "color" },
"accent": { "$value": "#d96a3a", "$type": "color" }
},
"spacing": {
"1": { "$value": "4px", "$type": "dimension" },
"2": { "$value": "8px", "$type": "dimension" },
"4": { "$value": "16px", "$type": "dimension" },
"8": { "$value": "32px", "$type": "dimension" }
},
"typography": {
"body": {
"fontFamily": { "$value": "Inter", "$type": "fontFamily" },
"fontSize": { "$value": "14px", "$type": "dimension" },
"lineHeight": { "$value": 1.45, "$type": "number" }
}
}
}
Bitten Sie Claude Code als ersten Schritt, noch bevor Sie einzelne Screens implementieren, einen tailwind.config.ts-Theme-Extension-Block aus dieser Datei zu generieren. So können alle nachfolgenden Screen-Implementierungen die Tailwind-Token-Aliase konsistent nutzen:
claude --print "Read design/tokens.json and generate a tailwind.config.ts
theme.extend block. Map color tokens to theme.extend.colors,
spacing tokens to theme.extend.spacing, and typography to
theme.extend.fontFamily / fontSize. Output only the config object."
Einen tiefen Einblick in das Token-Format und den Häufigkeitsinferenz-Fallback finden Sie unter Design Token Export für KI-Agenten.
Die Strings-Schicht verwalten
Jeder Textknoten in der Figma-Datei erhält einen Eintrag in strings.json. Die Schlüssel verwenden Punkt-Notation, die aus der Frame-Hierarchie abgeleitet wird:
{
"home.hero.title": "Everything you need",
"home.hero.subtitle": "Ship faster with structured context",
"home.cta.primary": "Get started",
"settings.account.heading": "Account settings"
}
Weisen Sie Claude Code an, diese Schlüssel als i18n-Identifier zu verwenden. Statt den String "Everything you need" direkt in JSX einzubetten, ruft die generierte Komponente t('home.hero.title') (oder das Äquivalent Ihrer i18n-Bibliothek) auf. Die Ressourcendatei liegt bereits in strings.json vor — Sie müssen sie nur importieren oder mit Ihrem i18n-Setup verdrahten.
Erkennt figmascope eine Kollision — zwei Knoten, die zum selben Schlüssel gehasht werden —, gibt es eine strings-collision-Warnung in _meta.json aus und hängt ein numerisches Suffix zur Unterscheidung an. Prüfen Sie _meta.json, bevor Sie eine Sitzung starten, damit Sie wissen, was Sie erwartet.
CLAUDE.md-Integration
Wenn Sie eine CLAUDE.md-Projektkontextdatei verwenden, fügen Sie einen kurzen Abschnitt hinzu, der den Agenten auf das Design-Verzeichnis hinweist. Das ergänzt den Ansatz aus AI Design Handoff und passt gut zu dem, was figmascope von Figma-Inspector-Plugins unterscheidet.
Fügen Sie folgenden Design-Abschnitt hinzu:
## Design context
Design tokens, layout IR, reference renders, and strings live in `design/`.
Always read `design/CONTEXT.md` before implementing any screen.
Token values are in `design/tokens.json` — never hardcode color or spacing.
Component canonical names are in `design/components/inventory.json`.
Damit verfügt jede Claude Code-Sitzung im Projekt automatisch über den Design-Kontext als Teil ihres Arbeitswissens, ohne dass Sie ihn in jedem Prompt wiederholen müssen.
Was der Agent zuverlässig richtig macht
Mit strukturiertem Kontext liefert Claude Code verlässlich:
- Abstandswerte — weil sie in
tokens.jsonalsspacing.4 → 16pxstehen, nicht aus einem Screenshot geschätzt werden - Farben — exakte Hex-Werte, nicht „sieht aus wie ein warmes Orange"
- Typografie — Schriftfamilie, Größe, Gewicht, Zeilenhöhe, alles typisiert
- Layout-Richtung — Stack-Knoten haben ein explizites
direction- undgap-Feld - Komponentenbenennung — inventory.json ist die kanonische Quelle, keine erfundenen Namen
- Texte — strings.json verhindert, dass der Agent Texte umformuliert oder Platzhalter erfindet
Was weiterhin menschliche Überprüfung erfordert: Interaktionszustände (Hover, Fokus, Aktiv), die in statischen Figma-Frames nicht sichtbar sind, Animations-Timing sowie responsive Breakpoints, die nicht explizit in der Datei gestaltet wurden. Die IR erfasst statisches Layout; dynamisches Verhalten liegt außerhalb des Umfangs.
--dangerously-skip-permissions in kontrollierten Umgebungen
Für automatisierte Pipelines, in denen Claude Code ohne interaktive Genehmigungsabfragen arbeiten soll — beispielsweise in einem CI-Schritt, der nach einem Design-Update Komponenten-Stubs generiert —, können Sie --dangerously-skip-permissions verwenden. Dies ist nur in Sandbox-Umgebungen ohne Produktionszugang angemessen.
claude --dangerously-skip-permissions --print "$(cat <<'EOF'
Read design/CONTEXT.md. Generate component stub files for any components
in design/components/inventory.json that don't already exist in src/components/.
Use TypeScript + React functional component format. Include a TODO comment
for each component referencing the relevant screen JSON.
EOF
)"
In produktiven Entwickler-Workflows lassen Sie die Berechtigungen interaktiv. Die Abfragen haben ihren Grund — Claude Code schreibt Dateien, und Sie möchten wissen, welche, bevor es das tut.
Export-Warnungen vor dem Prompten prüfen
figmascope schreibt Warnungen in _meta.json für Bedingungen, die die Ausgabequalität beeinflussen könnten. Prüfen Sie sie, bevor Sie eine Claude Code-Sitzung starten:
python3 -c "
import json
meta = json.load(open('design/_meta.json'))
for w in meta.get('warnings', []):
print(f\"{w['code']}: {w['message']}\")
print(f\"Frames exported: {meta['frameCount']}\")
print(f\"Tokens source: {meta.get('tokensSource', 'variables')}\")
"
Zwei Warnungen verdienen besondere Aufmerksamkeit:
layout-mode-none-inferred— ein Frame hatte kein Auto-Layout. figmascope hat das Layout aus den absoluten Kindpositionen inferiert, was weniger zuverlässig ist. Weisen Sie in Ihrem Prompt auf den betreffenden Screen hin: „Dieser Screen verwendet absolute Positionierung; generieren Sie entsprechend."strings-collision— zwei Textknoten haben denselben Ressourcenschlüssel ergeben. figmascope disambiguiert mit einem numerischen Suffix, aber Sie sollten die Strings instrings.jsonüberprüfen, bevor der Agent i18n-Aufrufe generiert.
Android- und iOS-Workflows
Claude Code ist nicht auf Web-Frameworks beschränkt. Das Context-Bundle ist framework-agnostisch — Layout-IR und Tokens sind Daten, kein CSS. Für Jetpack Compose:
claude --print "$(cat <<'EOF'
Read design/CONTEXT.md and design/tokens.json.
Implement design/screens/Home.json as a Jetpack Compose screen.
- Map color tokens to a MaterialTheme ColorScheme
- Map spacing tokens to Dp values (strip 'px' suffix, use .dp)
- Map typography tokens to MaterialTheme.typography
- Use the component names from design/components/inventory.json as Composable names
- Reference design/screens/Home.png for visual accuracy
EOF
)"
Die stack-Knoten der IR lassen sich in Compose natürlich auf Column (direction: vertical) und Row (direction: horizontal) abbilden. leaf-Knoten mit type: "text" werden zu Text-Composables; type: "image" wird zu Image oder einem Platzhalter. Das vollständige Muster einschließlich MaterialTheme-Integration finden Sie unter Jetpack Compose from Figma.
Das Design-Bundle versionieren
Behandeln Sie das Verzeichnis design/ wie jede andere Projektabhängigkeit. Wenn sich das Design wesentlich ändert, exportieren Sie erneut von figmascope.dev, committen Sie und vermerken Sie die Änderung im PR:
# Check when the bundle was last exported vs when Figma file was last modified
python3 -c "
import json
from datetime import datetime
meta = json.load(open('design/_meta.json'))
exported = datetime.fromisoformat(meta['exportedAt'].replace('Z', '+00:00'))
modified = datetime.fromisoformat(meta['figmaLastModified'].replace('Z', '+00:00'))
delta = modified - exported
if delta.total_seconds() > 0:
print(f'WARNING: Figma file was modified {delta} after last export')
else:
print('Bundle is current')
"
Ein veraltetes Bundle bedeutet, dass der Agent auf Basis eines überholten Designs arbeitet. Die Zeitstempelprüfung erkennt das, bevor Sie Zeit in eine Codegen-Sitzung investieren, die auf supersedierten Spezifikationen basiert.