fmcp-intent-router
Skill10 starsChanged 29 days agoMITView on GitHub
F-MCP ile ilgili herhangi bir kullanıcı talebinin ilk giriş noktası. Kullanıcının niyetini analiz eder, hangi hedef SKILL'in çalıştırılacağına karar verir, o SKILL için gereken eksik input'ları tek turda toplar, özet+onay alır ve ondan sonra hedef SKILL'i çalıştırır. "figma", "ekran oluştur", "tasarım yap", "component üret", "DS denetle", "token sync", "kod üret", "design system" gibi her F-MCP-tetiklemesiyle aktive olur. Claude hiçbir figma_* yazma tool'u çalıştırmadan ÖNCE bu protokolü uygulamak zorundadır.
In this repository28 other files it gives its agents.
- ai-handoff-exportSkill
- apply-figma-design-systemSkill
- audit-figma-design-systemSkill
- code-design-mapperSkill
- component-documentationSkill
- design-drift-detectorSkill
- design-system-rulesSkill
- design-token-pipelineSkill
- ds-change-trackerSkill
- ds-impact-analysisSkill
- extract-contractSkill
- figjam-diagram-builderSkill
- figma-a11y-auditSkill
- figma-canvas-opsSkill
- figma-prototype-flowSkill
- figma-screen-analyzerSkill
- fix-figma-design-system-findingSkill
- fmcp-ds-audit-orchestratorSkill
- fmcp-project-rulesSkill
- fmcp-screen-orchestratorSkill
- fmcp-screen-recipesSkill
- fmcp-token-sync-orchestratorSkill
- generate-figma-librarySkill
- generate-figma-screenSkill
- implement-designSkill
- inspiration-intakeSkill
- ux-copy-guidanceSkill
- visual-qa-compareSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 1 is distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 74
Test geçmişinde gözlenen hata: benchmark Figma dosyasının 24+ library component'i enumere edildi, sonra "hangi DS?" soruldu.
- Very specific: line 550
Doğru: generate-figma-library (DS kütüphane inşası, içinde token creation var)
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
F-MCP Intent Router — Universal Entry Gate
Neden Var?
F-MCP Bridge'in 20+ SKILL'i var. Her biri farklı bir iş yapar (ekran oluşturma, denetim, kütüphane inşası, vb.) ve her biri farklı input'lar ister. Claude kullanıcı "figma'da ekran yap" dediğinde:
- Hangi SKILL lazım? (
generate-figma-screenmigenerate-figma-librarymi?) - Hangi bilgiler eksik? (device? DS? benchmark? içerik bölümleri?)
- Kullanıcı ne onay verdi?
Bu SKILL bu üç soruyu upstream çözer. Claude intent'i netleştirmeden hiçbir figma_execute, figma_create_frame, figma_clone_screen_to_device çalıştırmaz. "Hızlı ve doğru" kuralı: yanlış varsayım yapmaktansa 1 soru sormak her zaman daha hızlıdır.
Protokol (9 Adım — v1.9.1+)
Kullanıcı F-MCP ile ilgili herhangi bir talep yaptığında Claude bu 9 adımı SIRAYLA uygular. Hiçbir adım atlanmaz.
🚨 Adım 0 — DS GATE + BLANK FILE CHECK (v1.9.7+ MUTLAK İLK KAPI)
Herhangi bir intent analysis veya figma_ tool çağrısından ÖNCE:*
figma_get_statusçağır — plugin bağlı mı, response'ta_bootstrapvarsa direktifleri OKU (v1.9.7).claude/design-systems/active-ds.mddosyasını okuStatus:alanını kontrol et:✅ Aktif→ DS net, Blank File Sub-Check'e geç (madde 5)❌ Henüz seçilmediVEYA dosya yok → kullanıcıya DS sorusu sor (madde 4)
- DS Sorusu (klasik): "Aktif bir design system belirlenmemiş. Hangi DS ile ilerlemek istersiniz? (örn. Material / Apple HIG / Tailwind UI / kendi library'niz)"
BLANK FILE SUB-CHECK (v1.9.7, ZORUNLU):
figma_get_design_system_summaryçağır.components === 0 && componentSets === 0 && variableCollections.length === 0ise BOŞ DOSYA tespit edildi._nextStep: "BLANK_FILE_DIALOG_REQUIRED"response'ta görünüyorsa, kullanıcıya 4 seçenek sun (AskUserQuestion tek call, 4 option):Q: "Bu dosyada henüz Design System yok. Nasıl ilerleyelim?" (a) Team library import — "Hangi library? Örn. Material 3, iOS HIG, Tailwind UI, veya kendi library'niz" (b) Mini DS kur otomatik — figma_create_mini_ds tool'u çağrılır (12 color + 8 sizing + 3 text style + Button/Input/Card) (c) Referans DS kopyala — "Material 3 template / iOS HIG template" (d) DS'siz ilerle — linter tolerant mode, hardcoded değerler kabul (explicit acceptance)- Seçim yapılmadan
figma_execute createFrameYASAK. Claude ham createFrame denerse plugin_DESIGN_SYSTEM_VIOLATIONS_BLOCKINGflag'i döndürür, retry zorunlu olur. - Kullanıcı "(b)" derse Claude
figma_create_mini_ds({ primaryColor, fontFamily, name })tek tool çağrısı yapar, sonra ekran üretimine geçer. - Kullanıcı "(a)" derse Claude
figma_get_library_variables(libraryName)ile listeleme yapar, seçenek sunar.
⚠️ v1.9.9+ (G26c — Token Setup Öneri): DS seçili VE component cache boşsa VE
FIGMA_REST_TOKENenv yoksa Claude kullanıcıya tek özet soruda 3 yol önerir:"Component discovery hızlandırma yolları: (1) Hızlı: Figma Assets panel'den 1 Button + 1 NavigationTopBar sürükle Page X'e, ben oradan mainComponent.key alırım (Hybrid Quick-Start) (2) Otonom:
FIGMA_REST_TOKENsetup et (/setup-rest-tokenkomutu), tüm component'leri REST ile çekerim (Rule 24.1) (3) Bekle:figma_search_componentsile instance scan yapayım (~30-60sn, Rule 24.2)"Kullanıcı seçer → ilgili path: (1) G26b Hybrid Quick-Start, (2)
/setup-rest-token+ Rule 24.1, (3) G19 Step 3.1 cache populate.- Seçim sonrası
active-ds.md'yi güncelle (Status: ✅ Aktif,Primary Library: <isim>), sonra Adım 1'e geç. - Multi-Library Parse (v1.9.8+):
active-ds.md'de "Secondary Libraries" bölümü varsa parse et:- Tabloda 1+ satır varsa, her library için
~/.claude/data/fcm-ds/<file-key>/dizinini listele (cache mevcut mu kontrol). - Eksik cache varsa kullanıcıya bildir: "Secondary library
<X>için cache yok —/ds-sync <X>veya/add-libraryile populate edin." - User-local
~/.claude/data/fcm-ds/active.mdv2 multi-library schema'sı (Primary + Secondary liste) destekleniyor — eski single-key format da geriye uyumlu.
- Tabloda 1+ satır varsa, her library için
Neden bu kadar katı:
- DS belirsizken
figma_search_assets,figma_get_file_data,figma_get_library_variablesçağırmak = kullanıcının istemediği library'leri enumere etmek = token israfı + UX bozulması - Test geçmişinde gözlenen hata: benchmark Figma dosyasının 24+ library component'i enumere edildi, sonra "hangi DS?" soruldu. Bu sıra YASAK.
Bu adımda çağrılabilen tek Figma tool'u:
- ✅
figma_get_status()— plugin bağlantı kontrolü, DS bağımsız - Başka HİÇBİR figma_ YASAK.*
figma_get_file_data,figma_search_assets,figma_search_components,figma_get_library_variables,figma_get_variables,figma_get_styles— hepsi YASAK ta ki Adım 0 geçilene kadar.
Adım 1 — Intent Analysis
Kullanıcı talebini oku. Anahtar kelimeleri tara:
| Kullanıcı ifadesi | Olası SKILL adayı |
| "ekran yap", "tasarım oluştur", "ui çiz", "UI'ı Figma'ya aktar", "landing page", "mobil ekran" | generate-figma-screen |
| "DS hizala", "Ana-DS'ye uygula", "design system uygula", "token'lara bağla" | apply-figma-design-system |
| "denet", "audit", "DS sağlığı", "token bağlı mı", "ne kadar DS uyumlu" | audit-figma-design-system |
| "kütüphane yap", "component set üret", "DS kütüphane inşa" | generate-figma-library |
| "Figma'dan kod üret", "implement design", "SwiftUI/Compose/React kodu" | implement-design |
| "kod ↔ figma eşleştir", "Code Connect", "design mapping" | code-design-mapper |
| "görsel karşılaştır", "visual diff", "QA screenshot" | visual-qa-compare |
| "token sync", "design tokens export", "CSS/Swift/Kotlin token" | design-token-pipeline |
| "figjam diyagram", "flowchart", "mind map" | figjam-diagram-builder |
| "ekran özeti", "analiz et", "ne içeriyor" | figma-screen-analyzer |
| "accessibility", "a11y", "WCAG", "contrast check" | figma-a11y-audit |
| "drift", "kod/tasarım sapması", "out of sync" | design-drift-detector |
| "DS'de ne değişti", "değişiklik takibi", "token ne değişti", "sürümler arası fark", "değişiklik raporu" | ds-change-tracker |
| "UX copy", "microcopy", "buton metni", "empty state" | ux-copy-guidance |
| "bu görselden ilham al", "şu resim gibi", "link'teki tasarımdan", "dribbble/behance", "benchmark'tan varyasyon" | inspiration-intake → generate-figma-screen |
| "prototip bağla", "ekranları bağla", "prototype connections", "flow oluştur", "navigasyon kur", "animasyon ekle", "interaction ekle", "geçiş animasyonu", "scroll behavior" | figma-prototype-flow |
Not (v1.8.3+): inspiration-intake bir ön-işleme skill'idir. Kullanıcı bir Figma benchmark linki, internet görsel linki veya sohbete yüklenmiş görsel ile gelirse önce bu skill çalıştırılır (structural_intent JSON üretir, DEĞER çıkarmaz), sonra çıktısı generate-figma-screen'in reference_benchmark parametresine beslenir. v1.8.2 build-from-scratch kuralı ile tam uyumludur — clone değil, inspiration.
Mode tespiti:
- Figma URL pattern (
figma.com/file/...?node-id=) →inspiration-intake(source_type: figma_url) - Dribbble/Behance/genel HTTP URL →
inspiration-intake(source_type: image_url, WebFetch fallback'li) - Kullanıcı mesajında görsel attachment →
inspiration-intake(source_type: image_uploaded)
Adım 2 — State Files Check
Claude her seferinde üç state dosyasını okur:
1. .claude/design-systems/active-ds.md
→ Aktif DS belirtilmiş mi? (örn "❖ Ana-DS")
2. .claude/design-systems/last-intent.md
→ Son tamamlanan intent nedir? (device, ds, skill, inputs)
3. .claude/design-systems/intent-history.md
→ Son 5 intent nedir? (LRU)Bu dosyalar Claude'un "öncekiyle aynı mı?" sorusu sormasını sağlar.
⚠️ v1.9.9+ Tool Budget Disiplini (G23 — Defensive Exploration Yasağı):
- ✅ 3 state dosyasını TEK
Read Multiple Filesçağrısında aç. Ayrı ayrıRead Text Fileçağrıları YASAK. - ✅ Cache dizinlerini (
.claude/design-systems/,~/.claude/data/fcm-ds/) tekList Directoryile gör. Sequential alt-dizin traversal (A → A/B → A/B/C) YASAK — tek recursive list +Read Multiple Filesile gerekli dosyalar.
Red flag patterns (BLOCKING — Adım 6 özetine geç, discovery'yi durdur):
- Aynı dizin 2+ kez list edilirse → defensive exploration → budget exhaustion riski
- Aynı dosya 2+ kez read edilirse → state yeterince bilgi veriyor, yeterli
figma_get_*+figma_search_*toplam 8+ çağrı (discovery-counter WARN threshold) → uretime gec
Claude bu pattern'lerden birini tespit ederse, eksik input varsa Adım 6 özet + onay'a geç; yoksa Adım 7 execute'a geç. Daha fazla keşif YASAK.
Adım 3b — Approach Karar Mantığı (v1.8.2+)
Target skill generate-figma-screen ise, yaklaşım ayrımı yap.
Kullanıcının cümlesinde şu keyword'leri ara ve approach input'unu doldur:
| Keyword | Yaklaşım | Tool Önerisi |
| "alternatif", "varyasyon", "farklı", "yeni", "tasarla", "redesign", "iyileştir" | build-from-scratch ⭐ | figma_execute + Step 5, figma_clone_screen_to_device KULLANMA |
| "aynı ekranı X device'a migrate et", "boyut değiştir", "iPhone 13→17", "klonla" | clone-to-device | figma_clone_screen_to_device |
| "mevcut ekranı DS'ye hizala", "tokenize et", "tokens bind et" | apply-ds-to-existing | apply-figma-design-system SKILL |
| Hiçbiri net değil | Kullanıcıya sor | — |
⭐ ÖNEMLİ: Eğer kullanıcı "3 alternatif" veya "varyasyon" derse, approach = build-from-scratch DEFAULT'tur. figma_clone_screen_to_device tool'u ASLA önerilmez. Clone tool'u kopyalama yaparken benchmark'ın mevcut yanlışlıklarını (hardcoded rectangle, missing token binding, non-responsive layout) kopyalar. Bu kullanıcının istediği gerçek varyasyon yaratmaz.
Eğer approach = build-from-scratch ise, Claude'un akış haritası:
figma_search_assets ile Ana-DS bileşenlerini bul
↓
figma_get_library_variables ile DS token key'lerini topla
↓
figma_execute ile bölüm bölüm inşa et:
- figma.createFrame() + layoutMode + padding (variable binding)
- importComponentByKeyAsync + createInstance (DS instance'lar)
- setBoundVariableForPaint (fills token bind)
- setBoundVariable (padding/itemSpacing/cornerRadius token bind)
- importStyleByKeyAsync + setTextStyleIdAsync (text style bind)
- appendChild sonrası layoutSizingHorizontal/Vertical = FILL
↓
figma_validate_screen ile skor kontrolü (≥80)Özet + Onay ekranında göster:
📋 Yaklaşım: build-from-scratch ⭐
Bu kullanıcının "alternatif tasarım" isteğine uygun doğru yol.
Clone tool kullanılmayacak. Her alternatif sıfırdan Ana-DS bileşenleriyle inşa edilecek.
Benchmark (139:xxx) sadece ilham kaynağı — kopyalanmayacak.⚠️ v1.9.9+ Approach Otomatik Parse (G25):
Eğer reference_benchmark input dolu ise (görsel upload, Figma URL veya node ID), approach otomatik belirlenir — kullanıcıya "A 1:1 mı B referans mı?" SORMA:
| Reference tipi | Approach | Neden |
| Figma node ID (aynı DS) | clone-to-device | Birebir kopya, sadece device preset değişir |
| Figma node ID (farklı DS) | build-from-scratch + DS rebind | Yapı aynı, tokens yeni DS'e bağlanır |
| Upload görsel (harici chat'ten) | build-from-scratch + reference override | İlham referans, content/layout override (G20 Recipe Content Override) |
| URL (Figma dışı, dribbble vb.) | build-from-scratch + reference override | İlham, yapı mantıklı ihtimal |
Tablodan seç, Adım 6 özetine direkt yaz (örn. "Yaklaşım: build-from-scratch + reference override").
Override: Kullanıcı explicit "birebir kopyala" / "klonla" / "aynısı olsun" derse clone-to-device'a override. Explicit "referans al" / "ilham" / "değiştir" derse build-from-scratch + reference override.
Adım 3 — Decide Target Skill
Adım 1'deki keyword eşleşmesi + Adım 2'deki state bilgisi → tek bir SKILL seç.
Karar mantığı:
IF user request EXACTLY matches one keyword pattern
→ Select that skill (single match, no question)
ELSE IF user request matches 2+ patterns (ambiguous)
→ Ask user: "Şunlardan hangisini yapayım?"
→ Use AskUserQuestion with matched skills as options
ELSE IF user request is generic ("figma'da bir şey yap")
→ Ask user: "Tam olarak ne yapmak istiyorsun?"
→ Offer top 5 common skills as options
ELSE (no match)
→ Ask user to clarify intent in natural language⚠️ v1.9.9+ Hybrid Quick-Start (G26b):
Target skill generate-figma-screen veya apply-figma-design-system ise VE user prompt'ta şu pattern'lerden biri varsa component discovery hızlandırılır:
- "seed component var" / "manuel yerleştirdim" / "X'i zaten ekledim" / "button/appbar sürükledim"
Bu durumda:
- ❌ G19 Step 3.1 Cache Populate ATLA (full scan gereksiz)
- ✅ PRIMARY (v3.3+):
figma_enumerate_published_components(libraryFileKey, filter)← registry'deki file key ile REST'ten canlı liste (dosya açıksafigma_enumerate_library_componentsdaha hızlı). Tek call'da componentKey listesi. - ✅ FALLBACK (registry boş / REST token yok):
figma_search_assets(currentPageOnly=false)→ mevcut instance'lardanmainComponent.keytopla - Discovery mini-mode: 1-3 call
Component discovery öncelik sırası (Rule 24 köprüsü):
- Rule 24.0 Live Enumerate (
figma_enumerate_published_components/figma_enumerate_library_components— v3.3+ ana yol) — G26c - Hybrid Quick-Start (seed varsa — 2-3 tool call) — G26b
- Rule 24.1 REST API (
FIGMA_REST_TOKENsetup ise — 1-2 call) - Rule 24.2 Cache (G19 Step 3.1 auto-populate — 3-5 call)
- Rule 24.3 Primitives fallback (G17 ADVISORY — BLOCKING değil)
Adım 4 — Read Target Skill Metadata
Seçilen SKILL'in frontmatter'ını oku. required_inputs bloğunu parse et:
required_inputs:
- name: device
type: enum
options: ["iPhone 17", "iPhone 16 Pro Max", ...]
question: "Hangi device boyutunda olsun?"
required: true
default_source: ".claude/design-systems/last-intent.md#device"
- name: design_system
type: from_state
source: ".claude/design-systems/active-ds.md#Library Name"
required: true
- name: reference_benchmark
type: node_id_or_none
question: "Referans benchmark node var mı?"
required: false
affects: ["screen_type", "sections"] # verilirse bunlar atlanır
- name: screen_type
type: enum
...
skip_if: "reference_benchmark != none"Input türleri:
enum— Kullanıcı seçenekten seçerfrom_state— State dosyasından oku, yoksa fallback_question sornode_id_or_none— Figma node ID veya "yok"string— Serbest metinstring_list— Virgülle ayrılmış listeboolean— Yes/No
Özellikler:
required: true/false— Zorunlu mu?default_source— State'ten default çekilirdefault— Sabit default değerskip_if— Koşullu atlamak (başka input'un değerine bağlı)affects— Bu input verilirse atlanacak diğer input'ları belirtir
Adım 5 — Gather Missing Inputs (Smart Skipping)
Claude her required_inputs girdisini şu mantıkla işler:
FOR each input in required_inputs:
IF input has default_source AND state file value exists:
→ USE state value, don't ask
IF input has default:
→ USE default, don't ask
IF user request already mentions this input (parse from prompt):
→ USE parsed value, don't ask
IF another input has affects: [this_input_name] AND that input was set:
→ SKIP this input (will be derived from affecting input)
IF input has skip_if AND condition evaluates true:
→ SKIP this input
ELSE:
→ ADD to missing listMissing list'teki tüm soruları TEK AskUserQuestion çağrısında toplayıp sor. Max 4 soru/çağrı (AskUserQuestion limiti). 5+ soru gerekiyorsa 2 ayrı çağrı yap, ama ÖNCE kritik 4'ü sor, sonra kalanları.
v1.9.5 Elicitation Kuralı (SERT)
- Maks 1
AskUserQuestionçağrısı tüm oturum boyunca. Tekrar soru sormak yasak — state'ten veya context'ten çıkar. - "devam et" / "tamam" / "ok" / "yap" sonrası soru YASAK. Kullanıcı onay verdi → üretime geç.
- User prompt'u anlamlıysa (spesifik ekran adı, boyut, DS veriliyorsa) hiç sorma, direkt planla ve göster.
- "Sen seç" cevabı alırsan: mantıklı default kullan (iPhone 17, mobile, single variant, active DS).
- Sorulan her soru ≤30 kelime — uzun elicitation yasak.
- Soruyu sormanın context maliyeti ≥ yanıtın değeri mi? Değilse sorma.
v1.9.9+ User Memory Uyum Kuralı (SERT — G21)
Kullanıcının MEMORY.md'sinde "verify assumptions" / "doğrula" / "sorma önce" / "assumption yapma" gibi bir feedback memory varsa:
- ❌ YANLIŞ: Her input için ayrı AskUserQuestion → 4 ayrı soru ile memory'ye uymaya çalışma. Bu tool-use israfıdır, Claude Desktop'ta session başına tool limit'e erken çarpar.
- ✅ DOĞRU: Tek özet soru (Adım 6 formatı) bu memory'yi TAM karşılar. "Verify assumption" gereksinimi tek özet + onay ile sağlanır. Kullanıcı özeti görüp [✅ Evet / ✏️ Değiştir / ❌ İptal] seçtiğinde "assumption verify" edilmiş sayılır.
Priority resolution: User memory kuralı ne diyor değil, ne gerektiriyor üzerinden yorumlanır. "Verify" gereksinimi tek özet onayla karşılanır; birden fazla AskUserQuestion çağrısı memory'ye fazladan uymak değil, verim kaybıdır.
Örnek (doğru davranış):
User memory: "Do not assume anything, verify with me first." User prompt: "Ana-DS ile iOS ödeme sayfası" (device/mode belirsiz)
❌ YANLIŞ: 4 ayrı soru (Q1 device, Q2 mode, Q3 approach, Q4 ölçek) ✅ DOĞRU: Tek Adım 6 özet: "Anladım — Ana-DS + iOS payment. Netleştirmem gereken: device (iPhone 17 default), mode (Light default), approach (build-from-scratch + reference override), ölçek (tek scroll). Onaylıyor musun? [✅ Bunlarla başla / ✏️ Değiştir / ❌ İptal]"
v1.9.6 Negative Intent Detection (KRITIK)
Kullanıcı şu paternlerle negatif/dışlayıcı talimat verebilir — bunları ZORUNLU parse et:
| Kullanıcı paterni | Anlam | Nasıl handle et |
| "X'i atla" / "X'i kullanma" / "X'ten bahsetme" | X referansını DIŞLA | exclude_references: ["X"] state'e yaz, o node/page/frame'e referans verme |
| "X'e bakma" / "X yok say" / "X'i unut" | X sıfır-referans | Aynı |
| "Y benzetme" / "Y gibi olmasın" | Y anti-pattern | anti_pattern_refs: ["Y"] — Y'ye ters tasarım yap |
| "X dışında" / "X hariç" | Whitelist exclusion | exclude_references: ["X"] |
| "Sıfırdan" / "baştan" / "yeni tasarım" | Mevcut iterasyonları atla | start_fresh: true, ideation/iterasyon referansları atla |
Örnek:
Kullanıcı: "Ana-DS Alt 3'e bakma, sıfırdan yeni bir Anasayfa tasarla"
PARSE:
- exclude_references: ["Ana-DS Alt 3", "12:400"] (Ana-DS Alt 3 frame ID'si de dahil)
- start_fresh: true
- target_screen: "Anasayfa"
- DS: active-ds.md'den çek
SONUÇ:
- Ana-DS Alt 3 sayfası referans alınmaz
- Mevcut "Ana-DS Alt 3 — Anasayfa" frame'i açılmaz, screenshot alınmaz
- ideation sayfası (ilham) kullanılabilir ama Ana-DS Alt 3 bölümü atlanırAnti-pattern: Kullanıcı "Ana-DS Alt 3 atla" dedikten sonra onu screenshot alıp referans göstermek. v1.9.6'da bu explicit yasak — pre-flight'ta exclude_references kontrolü yapılır.
State persist: exclude_references last-intent.md'ye yazılır; aynı oturum boyunca geçerli.
Örnek — generate-figma-screen:
Kullanıcı: "Ana-DS ile ekran yap"
State okuma:
- active-ds.md → "❖ Ana-DS" ✓ (design_system sorulmaz)
- last-intent.md → yok
Missing inputs:
1. device (zorunlu)
2. reference_benchmark (opsiyonel ama soruyu sor)
3. screen_type (zorunlu, reference'a bağlı)
4. sections (zorunlu, reference'a bağlı)
5. variants (opsiyonel, default "single")
AskUserQuestion (tek çağrı, 4 soru):
Q1: Hangi device? (iPhone 17 / 16 Pro Max / Android / iPad / Custom)
Q2: Referans benchmark var mı? (Evet node ID / Hayır template kullan)
Q3: Ekran tipi? (dashboard / list / detail / form / login)
Q4: Ana bölümler? (kısa liste yaz)Adım 6 — Summary + Explicit Confirmation Gate
Tüm input'lar toplandıktan sonra Claude AYRI bir AskUserQuestion çağrısıyla onay ister:
"Anladım, şunu yapacağım:
🎯 Skill: generate-figma-screen
📱 Device: iPhone 17 (402×874)
🎨 DS: ❖ Ana-DS
📋 Reference: 12:345 (Vadesiz TL Hesabı)
🧩 Yaklaşım: clone-to-device with Ana-DS token binding
📊 Çıktı: 1 ekran 'Vadesiz TL - iPhone 17'
⏱️ Tahmini süre: 20 saniye
Onaylıyor musun?"
Seçenekler:
[✅ Evet, başla]
[✏️ Değiştir (hangi alan?)]
[❌ İptal]Bu adım ATLANMAZ. Fast path dahil HER durumda onay sorusu sorulur. İstisna: sadece "önceki ile aynı" cevabı gelen repeat path, tek adım onay.
⚠️ v1.9.9+ Kural (G22 — Single-Question Consolidation):
Eksik input'lar varsa özet + eksik input'lar AYNI AskUserQuestion call'ında sunulur. Birden fazla AskUserQuestion çağrısı YASAK (G21 ile uyumlu). Örn:
"Anladım: Ana-DS + iOS payment + build-from-scratch + reference override.
Netleştirmem gereken: (a) Device: iPhone 17 (default, Ana-DS tablosundan) / 16 Pro / 16 / 13-14 (b) Mode: Light (default) / Light+Dark
Onaylıyor musun? [✅ Default'larla başla / ✏️ Değiştir (a veya b) / ❌ İptal]"
Kullanıcı "Değiştir" derse sadece o seçim için tek follow-up AskUserQuestion — yine tek call. Default'larla onay → Adım 7 execute.
Adım 7 — Execute Target Skill
Onay alındıktan sonra:
- Seçilen SKILL'in
SKILL.mddosyasını yükle (Skill tool ile) - Kullanıcıdan topladığın input'ları context'te tut
- SKILL'in kendi Step 1-N akışını çalıştır
ÖNEMLİ: Target SKILL zaten Step 0 (DS context check), Step 1-N (iş), Step N+1 (self-audit via figma_validate_screen) yapacak. Intent router'ın işi sadece input gathering ve onay — execution target SKILL'e bırakılır.
Adım 8 — Persist Intent
SKILL tamamlandıktan sonra (başarılı veya başarısız):
1. .claude/design-systems/last-intent.md güncelle:
# Last Intent
**Updated:** 2026-04-14 14:23
## Selected Skill
generate-figma-screen
## Inputs
- device: iPhone 17
- design_system: ❖ Ana-DS
- reference_benchmark: 12:345
- (other inputs)
## Result
- output_node: 12:500
- validation_score: 95/100
- duration: 18s
- status: ✅ Success
## User Confirmation
✅ Onaylandı 14:232. .claude/design-systems/intent-history.md başına yeni entry ekle (LRU 5, eskisi silinir).
Fast Paths (Akıllı Kısayollar)
Fast Path 1 — Detaylı Talep
Kullanıcı talebi zaten tüm input'ları içeriyorsa (örn. "12:345'yi iPhone 17'ye Ana-DS ile klonla"), Adım 5 atlanır. Direkt Adım 6 (onay) → Adım 7 (execute).
Örnek:
Kullanıcı: "12:345'yi iPhone 17'ye Ana-DS ile klonla"
Parse:
- skill: generate-figma-screen (klonla keyword)
- device: iPhone 17 (explicit)
- ds: Ana-DS (explicit + active-ds.md confirm)
- reference: 12:345 (explicit)
- variants: single (default)
→ Direkt Adım 6: onay sor
→ Kullanıcı "Evet" → Adım 7: executeFast Path 2 — Repeat
Kullanıcı "bir tane daha yap" / "aynısını yap" derse, last-intent.md'yi oku ve tek bir soruyla onay al:
"Öncekiyle aynı ayarlarla mı devam edeyim?
• Skill: generate-figma-screen
• Device: iPhone 17
• DS: ❖ Ana-DS
• Yaklaşım: clone-to-device
[✅ Aynı]
[✏️ Değiştir]
[❌ İptal]"Fast Path 3 — Partial Reuse
Kullanıcı "aynı ama Android'de" derse, last-intent.md'nin çoğunu reuse et, sadece değişen alanları sor:
State'ten reuse: ds, reference, type, sections, variants
Kullanıcıdan sor: device = Android (hangisi? - Compact/Medium)Ambiguity Handling
Durum 1 — Belirsiz talep
Kullanıcı: "figma'da bir şey yap"
Router: Tek SKILL eşleşmedi.
AskUserQuestion:
"Ne yapmak istediğini netleştirebilir misin?
(a) Yeni ekran oluştur
(b) Mevcut ekranı DS'ye uydur (reconcile)
(c) Dosyayı denetle / rapor çıkar
(d) Figma → kod üret
(e) Başka — açıklayarak yaz"Durum 2 — Çoklu eşleşme
Kullanıcı: "Ana-DS ile bir şey yap"
Router: 4 SKILL match (create, apply, audit, library).
AskUserQuestion:
"Ana-DS ile ne yapmak istiyorsun?
(a) Yeni ekran oluştur (generate-figma-screen)
(b) Mevcut ekrana Ana-DS uygula (apply-figma-design-system)
(c) Ana-DS uyumu denet (audit-figma-design-system)
(d) Ana-DS library'ye component ekle (generate-figma-library)"Durum 3 — Yanlış SKILL seçme riski
Kullanıcı "token oluştur" derse:
- Yanlış:
generate-figma-screen(token yok o) - Doğru:
generate-figma-library(DS kütüphane inşası, içinde token creation var) - Alternatif:
design-token-pipeline(external token sync)
Router sorar:
"Token işi için:
(a) Figma'da yeni variable/token oluştur (library)
(b) Kod tarafındaki token'ları Figma'ya sync et (pipeline)
(c) Figma token'larını CSS/Swift/Kotlin'a export et (pipeline)"Tool Failure Recovery Protocol (v1.8.2+)
Tool çağrısı başarısız olursa (timeout, error, unexpected result), şu protokolü izle. ASLA körü körüne retry yapma — çöp birikir.
Retry Kuralları
- İlk hata (timeout/error): 1 kez retry et, farklı parametre ile:
figma_clone_screen_to_devicetimeout → küçük source node dene veya farklı targetDevicefigma_executetimeout → kod parçalarına böl, timeout param artır (max 30000)figma_validate_screentimeout → minScore düşür veya daha küçük alt-node'a uygula
- İkinci hata (aynı tool): DUR. Kullanıcıya git, strateji iste.
- ASLA aynı tool + aynı param ile 3 kez çağırma.
Orphan Cleanup (ZORUNLU)
Clone/create tool'ları timeout aldıysa dosyada yarım iş kalmış olabilir. Her başarısız write-tool denemesi sonrası Claude cleanup protokolünü çalıştırır:
figma_get_file_data(depth=1, verbosity="summary")ile hedef sayfayı tara- Son 5 dakikada oluşmuş, beklenmedik isimde veya duplicate node'ları tespit et
- Her şüpheli node için
figma_get_design_contextile detayına bak (content sağlamı mı?) - Kullanıcıya listele:
⚠️ Timeout sonrası şu orphan node'ları buldum: 1. 12:600 "Hesaplarım — Hero Card — iPhone 17" (yarım, child count: 4) 2. 12:601 "Hesaplarım — Hero Card — iPhone 17" (yarım, child count: 8) Silmemi ister misin? [✅ Sil] [👁️ Önce screenshot göster] [❌ Kalsın] - Onay sonrası
figma_executeilenode.remove()uygula
Failure Escalation Template
2+ retry sonrası kullanıcıya şu formatla git:
⚠️ Alternatif N ({name}) oluşturulamadı.
**Denenen:**
- figma_clone_screen_to_device (2 timeout)
- figma_execute manual fallback (failed)
**Orphan node'lar (dosyada kaldı):** [list of IDs]
**Seçenekler:**
[A] Orphan'ları sil ve farklı kaynak node ile yeniden dene
[B] Orphan'ları sil ve bu alternatifi atla, Turn N+1'e geç
[C] Dur, test iptal — orphan'ları manuel sileyimBenchmark Selection Validation (v1.8.2+)
Kullanıcı benchmark node ID verdiğinde, Claude HEMEN klonlamaya geçme. Önce benchmark'ı DOĞRULA:
Adım 1: Node Tipini Kontrol Et
figma_get_design_context(nodeId=<user_input>) çağır ve node.type'ı kontrol et:
Eğer tip PAGE ise → Altındaki child'ları listele, kullanıcıya sor
Verdiğin node bir sayfa (PAGE). Altında şu adaylar var:
1. Vadesiz TL — Ana-DS v10 (Hero Card) — 4 child (temiz, hızlı clone)
2. Vadesiz TL — Ana-DS v11 (Segmented) — 5 child (temiz, hızlı clone)
3. Vadesiz TL — Ana-DS v12 (Dark Header) — 3 child (temiz, hızlı clone)
4. Hesaplarım — 14 child (kaba draft, yavaş)
Hangisi asıl benchmark? Önerim: 1/2/3 (temiz v-numaralı alternatifler).Eğer tip FRAME ise → childCount kontrol et
- ≤ 5 child: Kullan, hızlı
- 5-15 child: Kullan ama kullanıcıyı bilgilendir: "Benchmark orta büyüklükte, clone ~30s sürebilir"
- 15-25 child: Uyar:
⚠️ Benchmark {N} child içeriyor. Clone 60+ saniye sürebilir. Önerim: [A] Yine de kullan (sabırlı ol) [B] Parent'ın siblings'ini tara, daha küçük bir alternatif öner [C] Farklı bir benchmark seç - 25+ child: DUR. Otomatik parent'ın siblings'ini tara, daha küçük alternatifler öner. Büyük benchmark'ı onaysız kullanma.
Eğer tip başka ise (INSTANCE, COMPONENT, vs.) → Hata
"Benchmark FRAME olmalı. {type} tipinde node benchmark olarak kullanılamaz."
Adım 2: Siblings Tara (PAGE/FRAME için)
Parent'ta sibling node'lar varsa, ✦, v10, v11, alternative, variant
gibi keyword'lerle filtrele ve kullanıcıya alternatif öner:
Verdiğin benchmark: Hesaplarım (14 child)
Aynı parent'ta daha küçük ve temiz alternatifler var:
- v10 Hero Card (4 child)
- v11 Segmented (5 child)
Bunlardan birini kullanmak ister misin?Adım 3: Responsive/Auto-Layout Ön-Kontrol
Benchmark'ı klonlamadan önce onun zaten responsive olup olmadığını kontrol et:
// Claude figma_execute ile çalıştırır:
var n = await figma.getNodeByIdAsync(benchmarkId);
return {
layoutMode: n.layoutMode,
primaryAxisSizingMode: n.primaryAxisSizingMode,
counterAxisSizingMode: n.counterAxisSizingMode,
hasAutoLayout: n.layoutMode !== 'NONE',
};Eğer layoutMode === 'NONE' ise uyar:
⚠️ Bu benchmark'ın auto-layout'u yok (layoutMode=NONE).
Clone yaparsan yeni ekran da responsive olmayacak.
Önerilen: clone yerine Step 5 "Build from Scratch" akışı kullan.Anti-Patterns (Claude'un Yapmaması Gerekenler)
❌ YANLIŞ: Kullanıcı "ekran yap" deyince direkt figma_create_frame çağırmak.
✅ DOĞRU: Önce Adım 1-6 uygula, onay al, sonra target SKILL'i çalıştır.
❌ YANLIŞ: 4 ayrı AskUserQuestion ile tek tek sormak. ✅ DOĞRU: Mümkün olan en az sayıda AskUserQuestion çağrısı (tek çağrıda 4 soru).
❌ YANLIŞ: "Default iPhone 13 kullanayım" diye kendi kendine varsayım yapmak. ✅ DOĞRU: Device bilgisi yoksa sor. Varsayım yapma.
❌ YANLIŞ: Onay aşamasını atlamak ("zaten açık") diye execute'a geçmek. ✅ DOĞRU: Her zaman Adım 6'yı uygula. Fast path bile onay sorusu sorar.
❌ YANLIŞ: last-intent.md'yi görmezden gelip her seferinde baştan sormak.
✅ DOĞRU: Aynı session'da ikinci talep → repeat path.
❌ YANLIŞ: Bir SKILL'i yükleyip sonra metadata'sını okumamak.
✅ DOĞRU: Target SKILL'in required_inputs'ını ALWAYS parse et.
Referanslar
- Her F-MCP SKILL'in
required_inputsmetadata'sı — bu router'ın kullandığı shape .claude/design-systems/active-ds.md— DS context (v1.8.0+).claude/design-systems/last-intent.md— son tamamlanan intent.claude/design-systems/intent-history.md— son 5 intent LRUsrc/core/instructions.ts— FMCP_INSTRUCTIONS "INTENT ROUTER ENTRY" bölümü (v1.8.1+)
Evolution Triggers
- Yeni F-MCP SKILL eklendiğinde: Adım 1 keyword tablosuna ekle
- SKILL'e yeni input eklendiğinde: Adım 4'ün parse mantığı metadata'yı otomatik yakalar, router'ı güncellemeye gerek yok
- Kullanıcı geri bildirim verirse ("çok soru soruyorsun"): Fast path'lerin aktivasyon eşiklerini düşür
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

