agentleFS
atezeratezer/FMCP/skills/figma-prototype-flow/SKILL.md

figma-prototype-flow

Skill10 starsChanged 29 days agoMITView on GitHub

Üretilen Figma ekranları arasında otomatik prototip bağlantıları, animasyonlar ve flow starting point oluşturur. Screen envanteri → navigasyon haritası → reactions → validate → dokümantasyon. "prototip bağla", "ekranları bağla", "prototype connections", "flow oluştur", "navigasyon kur", "animasyon ekle", "interaction ekle" ifadeleriyle tetiklenir. F-MCP Bridge ve figma_create_prototype_connection gerektirir.

The file

Files
SKILL.md

Figma Prototype Flow — Ekranlar Arası Navigasyon ve Animasyon

Otonom çalışma ilkesi (v1.9.9+): Bu skill varsayılan olarak otonom çalışır. Screen envanteri, button text heuristic'i, animasyon eşleme ve bağlantı oluşturma kullanıcı onayı gerektirmeden yürütülür. Kullanıcıya yalnızca kritik dallanma noktalarında sorulur: (1) heuristic hedef çözümleyemediğinde, (2) 50+ bağlantı tespit edildiğinde, (3) orphan/circular overlay bulunduğunda, (4) autonomy_mode=Onaylı seçildiğinde her adımda.

Overview

Bu skill, Figma sayfasındaki ekranlar (FRAME'ler) arasında prototip bağlantıları, animasyonlar ve flow starting point'i otomatik oluşturur. Figma Prototype panel'inin tüm özellikleri (9 trigger, 8 action, 9 transition tipi × 4 yön, 11 easing, scroll behavior, overlay ayarları) desteklenir.

Temel ilke: Kullanıcının ekranlarını tarar, button/link text'lerinden niyeti çıkarır, navigasyon haritasını üretir ve setReactionsAsync ile Figma reactions API'sini çağırır. Her şey plugin context'inde çalışır, REST API gerekmez.

Skill Boundaries

  • Bu skill: prototip bağlantı + animasyon + flow starting point + scroll behavior
  • Ekran üretimi → generate-figma-screen
  • Code Connect eşlemesi → code-design-mapper
  • A11y focus order → figma-a11y-audit
  • Handoff diagram → ai-handoff-export

Prerequisites

  • F-MCP Bridge plugin bağlı (figma_get_status yeşil dönmeli)
  • Hedef sayfada en az 2 FRAME
  • Ekranlar içinde Button/Link instance'ları isimlendirilmiş olmalı (navigasyon haritası için — isimlendirilmemiş jenerik Rectangle'lar yakalanmaz)

F-MCP skill koordinasyonu

  • Önce: generate-figma-screen veya fmcp-screen-recipes ile ekranlar üretilmiş olmalı
  • Birlikte: figma-canvas-ops (her figma_execute öncesi zorunlu)
  • Sonra: figma-a11y-audit (focus sırası cross-check), ai-handoff-export (flow diagram)

Required Workflow

Bu adımları sırayla uygula. Adım atlama.

Step 0: Ön koşullar ve Otonom Mod Ayarı

1. figma_get_status() → plugin bağlı mı?
2. .claude/design-systems/active-ds.md kontrolü (DS context bilgisi için)
3. autonomy_mode girdisini oku:
   - "Otonom" → varsayılan, kritik dallanmalarda sor
   - "Onaylı" → her Step sonunda kullanıcıya özet + AskUserQuestion

Step 1: Screen Envanteri

// Plan A: figma_get_file_data(depth=1) ile üst seviye FRAME listesi
const data = await figma_get_file_data({ depth: 1, verbosity: "standard" });
// Plan B (daha zengin): figma_execute ile page.children filtrele
// return figma.currentPage.children.filter(c => c.type === "FRAME").map(f => ({ id: f.id, name: f.name, width: f.width, height: f.height }));

Çıktı tablosu:

#Frame IDFrame AdıRol TahminiBoyut
11:2"Login / Mobile"Login402×874
21:3"Home / Mobile"Home402×874
31:4"Register"Register402×874

Rol tahmini regex'leri (case-insensitive):

  • Login: /^(login|giriş|sign ?in)/i
  • Home / Dashboard: /^(home|anasayfa|dashboard|main)/i
  • Register: /^(register|kayıt|sign ?up)/i
  • ForgotPassword: /^(forgot|şifre)/i
  • Check Email: /^(check email|e-posta kontrol|onay)/i
  • Settings / Profile: /^(settings|ayarlar|profile|profil)/i
  • Onboarding: /^(onboard|welcome|hoşgeldin)/i

Eşleşme yoksa rol = Generic; heuristic'te kullanıcıya sorulur.

Step 2: Navigasyon Haritası (Heuristic-Based)

2a. Etkileşimli eleman tespiti

Her frame içinde:

frame.findAll(n =>
  (n.type === "INSTANCE" && /button|btn|cta|link|action/i.test((n.mainComponent?.name || n.name))) ||
  (n.type === "TEXT" && n.parent?.type !== "TEXT" && /^(Giriş|Kayıt|Şifre|Devam|Geri|İptal|Tamam|Login|Sign|Back|Cancel|Submit|Continue)/i.test(n.characters || "")) ||
  (n.type === "FRAME" && /clickable|hotspot|tappable/i.test(n.name))
)

Button text'i: button.findOne(t => t.type === "TEXT")?.characters ile okunur.

2b. Button text → hedef heuristic tablosu (TR + EN)

Button text pattern (regex, case-insensitive)Muhtemel hedef rolActionTransition
^(giriş yap|giriş|login|sign ?in)Home | Dashboard | MainNAVIGATESLIDE_IN / RIGHT
^(kayıt ol|kayıt|sign ?up|register)Register | SignUpNAVIGATESLIDE_IN / RIGHT
^(şifremi unuttum|forgot)ForgotPasswordNAVIGATESLIDE_IN / RIGHT
^(gönder|submit|send)Success | Confirmation | CheckEmailNAVIGATESLIDE_IN / RIGHT
^(geri|back|<)— (navigation history)BACKSLIDE_IN / LEFT
^(iptal|cancel|×|✕|kapat|close)— (overlay ise CLOSE, aksi BACK)CLOSE / BACKDISSOLVE
^(devam|continue|ileri|next)Sayfa sıralamasında sonraki frameNAVIGATESLIDE_IN / RIGHT
^(google ile|facebook ile|apple ile|sign in with)Auth overlayOVERLAYDISSOLVE
^(kaydet|save|onayla|confirm)Success | ConfirmationNAVIGATESLIDE_IN / RIGHT
^(çıkış|logout|sign ?out)Login | LandingNAVIGATESLIDE_IN / LEFT
Hedef eşleşmiyor—Kullanıcıya sor (AskUserQuestion — kritik dallanma)—

2c. Frame adı çözümleme

Heuristic'teki "Muhtemel hedef rol" → sayfadaki frame adıyla eşle:

  • Regex: home → /home|dashboard|anasayfa|main/i
  • TR↔EN yaklaşıklığı: home ≈ anasayfa, register ≈ kayıt, success ≈ onay

Eşleşme yoksa → destination: "?" → kullanıcıya sor (kritik dallanma).

2d. Otonom mod davranışı

  • autonomy_mode=Otonom (varsayılan): Heuristic %100 eşleşen bağlantılar otomatik uygulanır. Sadece destination: "?" olan satırlar için AskUserQuestion.
  • autonomy_mode=Onaylı: Tüm harita markdown tablo olarak AskUserQuestion ile sunulur, kullanıcı satır-bazlı onaylar.

Çıktı formatı (her iki modda gösterilir):

| # | Kaynak | Button | → Hedef | Action | Transition | Mod |
|---|--------|--------|---------|--------|------------|-----|
| 1 | Login  | "Giriş Yap" | Home     | NAVIGATE | SLIDE_IN/RIGHT | auto |
| 2 | Login  | "Kayıt Ol"  | Register | NAVIGATE | SLIDE_IN/RIGHT | auto |
| 3 | Login  | "Devam"     | ?        | ?        | ?              | ask  |

Step 3: Reactions Oluştur (Chunking Kuralı)

3a. Ölçek tespiti

Bağlantı sayısıStrateji
≤ 20Tek seferde hepsi, her 5 bağlantıda 1 micro-report
21-5010'lu chunk'lara böl, her chunk sonrası figma_capture_screenshot + progress
> 50Kritik dallanma — kullanıcıya sor: "Önce kritik flow'ları mı (Auth/Onboarding/Ana akış)?"
> 100HARD STOP — "Bu ölçekte batch modu gelecekte. Şimdi en kritik 50 bağlantıyı seç."

3b. Animasyon standartları (FUTURE.md:232-241)

GeçiştransitionTypedirectiondurationeasingmatchLayers
İleri navigasyonSLIDE_INRIGHT300EASE_OUT—
Geri navigasyonSLIDE_INLEFT300EASE_OUT—
Push ileriPUSHRIGHT300EASE_OUT—
Modal açmaDISSOLVE—200EASE_IN—
Modal kapamaDISSOLVE—150EASE_OUT—
Smart variantSMART_ANIMATE—300EASE_IN_AND_OUTtrue
Hover stateSMART_ANIMATE—150EASE_INtrue
Press stateSMART_ANIMATE—100EASE_OUTtrue
AnlıkINSTANT————

3c. Her bağlantı için tool çağrısı

await figma_create_prototype_connection({
  sourceNodeId: button.id,
  destinationNodeId: homeFrame.id,
  trigger: "ON_CLICK",
  action: "NAVIGATE",
  transitionType: "SLIDE_IN",
  direction: "RIGHT",
  duration: 300,
  easing: "EASE_OUT"
});

Çoklu trigger: Aynı node'a birden fazla reaction gerekiyorsa (hover + click aynı button'da), default replace: false sayesinde append edilir.

Step 4: Flow Starting Point

// autonomy_mode=Otonom: starting_screen="auto" ise ilk Login/Onboarding/Home tipi frame seçilir
const start = startingScreen === "auto"
  ? screens.find(s => ["Login","Onboarding","Home"].includes(s.role)) || screens[0]
  : screens.find(s => s.id === startingScreen);

await figma_set_flow_starting_point({
  nodeId: start.id,
  name: flowName,
  description: `Auto-generated by figma-prototype-flow skill on ${new Date().toISOString()}`
});

Step 5: Scroll Behavior (Opsiyonel)

Sayfada scroll gereken ekranlar varsa (uzun content, header'ı sticky yapılacak element):

// Ana frame vertical scroll
await figma_set_scroll_behavior({ nodeId: frame.id, overflowDirection: "VERTICAL" });
// Header sticky
await figma_set_scroll_behavior({ nodeId: header.id, scrollBehavior: "FIXED" });

Otonom modda: frame height > viewport height ise otomatik overflowDirection: "VERTICAL" öner.

Step 6: Validasyon

const audit = await figma_get_prototype_connections({ pageScope: true });

Kontroller:

  • Haritadaki her kaynağın audit.connections[] içinde en az 1 reaction'ı var mı?
  • Tüm destinationId'ler hâlâ çözülüyor mu? (silinen frame → orphan)
  • audit.flowStartingPoints doldu mu?
  • Circular overlay var mı? — OVERLAY graph DFS, A→B→A kontrolü

Orphan veya circular bulunursa → kritik dallanma, kullanıcıya rapor.

Step 7: Dokümantasyon

  • figma_capture_screenshot({ nodeId: pageRoot, scale: 1 }) ile flow overview
  • JSON özet → ai-handoff-export ile uyumlu şekilde prototypeFlow anahtarı altında
  • Mermaid graph TD diagram (handoff entegrasyonu için)

Final Türkçe rapor:

✅ Flow "Login Akışı" oluşturuldu
   - 12 bağlantı (11 auto, 1 manual)
   - Flow starting point: Login / Mobile
   - Orphan reaction: 0
   - Circular overlay: 0
   - Screenshot: ~/.fmcp/screenshots/<timestamp>-<nodeId>.png

Türkçe Karakter Kuralı (ZORUNLU)

Tüm çıktılarda Türkçe karakterler (ş, ç, ğ, ö, ü, ı, İ) doğru kullanılmalı. Her Write sonrası bozuk encoding kontrolü:

grep -P "[ÃÄ]" <dosya>

Hata Yonetimi

Err prefixNedenNe yap
SOURCE_NOT_FOUNDsourceNodeId geçersizNode ID'yi doğrula, sayfa değişmiş olabilir
DESTINATION_NOT_FOUNDdestinationNodeId geçersizHedef frame silinmiş olabilir — haritayı yeniden oluştur
DESTINATION_REQUIREDNAVIGATE/OVERLAY vb. için hedef verilmemişBACK/CLOSE/URL dışında destinationNodeId zorunlu
NAVIGATE_REQUIRES_FRAMENAVIGATE hedefi FRAME değilHedef node'u FRAME'e çevir
UNSUPPORTED_NODE_TYPESource reactions desteklemiyor (SLICE/CONNECTOR)FRAME/INSTANCE/COMPONENT/GROUP/SECTION kullan
KEYCODES_REQUIREDON_KEY_DOWN trigger için keyCodes eksikEn az 1 tuş kodu (örn. [13]=Enter) ver
DIRECTION_REQUIREDDirectionalTransition için direction eksikLEFT/RIGHT/TOP/BOTTOM ver
NO_COMPONENT_SETVariant değişimi için COMPONENT_SET context yokInstance'ın main component'i COMPONENT_SET içinde olmalı
VARIANT_NOT_FOUNDtargetVariantName set içinde yokfigma_get_component_for_development ile variant adlarını doğrula
FLOW_REQUIRES_FRAMEFlow starting point FRAME olmalınodeId'yi FRAME olarak seç
MISSING_SCOPEfigma_get_prototype_connections'a ne nodeId ne pageScope verilmişEn az birini belirt
OVERFLOW_REQUIRES_FRAME_LIKEoverflowDirection FRAME benzeri node gerektirirFRAME/COMPONENT/COMPONENT_SET/INSTANCE kullan
SCROLL_BEHAVIOR_UNSUPPORTEDscrollBehavior node tipi desteklemiyorSceneNode subtype kullan
MISSING_PARAMfigma_set_scroll_behavior — en az bir param gereklioverflowDirection veya scrollBehavior ver

Çıktı Formatı

Her oturum sonunda kullanıcıya:

  • Toplam bağlantı sayısı (auto + manual ayrımı)
  • Flow starting point: ad + node id
  • Validasyon raporu: orphan reactions, circular overlays, eksik bağlantılar
  • Screenshot path: flow overview
  • Animasyon kullanım özeti: kaç SLIDE_IN, kaç DISSOLVE, kaç SMART_ANIMATE

Evolution Triggers

  • Figma Plugin API yeni Transition tipi eklerse → transitionType enum'a ekle
  • SET_VARIABLE / CONDITIONAL action v2'de desteklenecek → ayrı tool adı önerisi: figma_create_prototype_variable_action (gelecek sürüm, henüz YOK)
  • ON_KEY_DOWN gamepad desteği gerekirse → device enum zaten mevcut (XBOX_ONE/PS4/SWITCH_PRO)
  • batch modu eklenirse → 100+ bağlantı için performans iyileşir (şu an her çağrı tek reaction = N roundtrip)
  • Smart Animate için otomatik child matching heuristics → kullanıcı matchLayers seçmek zorunda kalmaz
  • Overlay preset konumlar (centered/top/bottom) — şu an sadece manual overlayRelativePosition

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.