LogoSkills

feature-orchestrator-agent

Full-stack Feature orchestration specialist. Used for complete Feature creation from backend to frontend

ํ•ญ๋ชฉ๋‚ด์šฉ
Invoke/feature:create
Aliases/feature:full, /feature:orchestrate
ToolsRead, Edit, Write, Bash, Glob, Grep
Modelinherit
Skillsfeature

/feature:create โ€” ๊ธฐ๋Šฅ ํ•˜๋‚˜๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋งŒ๋“œ๋Š” ์ด๊ฐ๋…#

ํ•œ๋งˆ๋””๋กœ#

์ƒˆ ๊ธฐ๋Šฅ ํ•˜๋‚˜๋ฅผ ์„œ๋ฒ„(๋ฐฑ์—”๋“œ)๋ถ€ํ„ฐ ํ™”๋ฉด(ํ”„๋ก ํŠธ์—”๋“œ)๊นŒ์ง€ ํ•œ ๋ฒˆ์— ํ†ต์งธ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” "ํ˜„์žฅ ์ด๊ฐ๋…" ์ž…๋‹ˆ๋‹ค. ์ง‘ ํ•œ ์ฑ„๋ฅผ ์ง€์„ ๋•Œ ๊ธฐ์ดˆ ๊ณต์‚ฌยท๊ณจ์กฐยท์ธํ…Œ๋ฆฌ์–ด๋ฅผ ๊ฐ ์ „๋ฌธ ํŒ€์— ์ˆœ์„œ๋Œ€๋กœ ๋งก๊ธฐ๊ณ  ๋งˆ์ง€๋ง‰์— ์ง์ ‘ ์‚ด์•„๋ณด๋ฉฐ ์ ๊ฒ€ํ•˜๋Š” ํ˜„์žฅ์†Œ์žฅ ์—ญํ• ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋ˆ„๊ฐ€ยท์–ธ์ œ ์“ฐ๋‚˜์š”#

  • ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ(์˜ˆ: ๊ฒŒ์‹œํŒ, ์•Œ๋ฆผ, ๊ฒฐ์ œ ๋‚ด์—ญ ๋“ฑ)์„ ๋ฐ์ดํ„ฐ ์ €์žฅ๋ถ€ํ„ฐ ์‚ฌ์šฉ์ž ํ™”๋ฉด๊นŒ์ง€ ์ „๋ถ€ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•  ๋•Œ
  • ๋ฐฑ์—”๋“œ ๋”ฐ๋กœ, ํ”„๋ก ํŠธ์—”๋“œ ๋”ฐ๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ํ•œ ๋ฒˆ์— ์ผ๊ด€๋˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ
  • /feature:create ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ์ด ์ด๊ฐ๋…์ด ๊นจ์–ด๋‚˜ ์ž‘์—…์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋ฌด์—‡์„ ํ•ด์ฃผ๋‚˜์š”#

๊ธฐ๋Šฅ ์ด๋ฆ„๊ณผ ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ ์ด๋ฆ„๋งŒ ์•Œ๋ ค์ฃผ๋ฉด, ์•„๋ž˜ ๊ฒฐ๊ณผ๋ฌผ์ด ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

  • ์„œ๋ฒ„ ์ชฝ: ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ํŒŒ์ผ(*.spy.yaml), ํ†ต์‹  ์ฐฝ๊ตฌ({feature}_endpoint.dart), ์ฒ˜๋ฆฌ ๋กœ์ง({feature}_service.dart), DB ๋ณ€๊ฒฝ๋ถ„(๋งˆ์ด๊ทธ๋ ˆ์ด์…˜)
  • ์•ฑ ์ชฝ: ์—…๋ฌด ๊ทœ์น™(domain), ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ(data), ํ™”๋ฉดยท์ƒํƒœ๊ด€๋ฆฌ(presentation), ์—ฐ๊ฒฐ ์„ค์ •(di/injection.dart)
  • ๋งˆ์ง€๋ง‰์—๋Š” ์‹ค์ œ ์„œ๋ฒ„๋ฅผ ๋„์›Œ ์•ฑ๊ณผ ์„œ๋ฒ„๊ฐ€ ์ง„์งœ๋กœ ์ž˜ ๋งž๋ฌผ๋ ค ๋™์ž‘ํ•˜๋Š”์ง€๊นŒ์ง€ ์ง์ ‘ ํ™•์ธํ•ด ์ค๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ์“ฐ๋‚˜์š”#

# ๊ธฐ๋ณธ ํ˜•ํƒœ (๋А๋‚Œ์ƒ): ๊ธฐ๋Šฅ ์ด๋ฆ„๊ณผ ๋ฐ์ดํ„ฐ ์ด๋ฆ„์„ ์ง€์ •
/feature:create   # ์‹คํ–‰ํ•˜๋ฉด feature_name, entity_name ๋“ฑ์„ ๋ฌผ์–ด๋ด…๋‹ˆ๋‹ค

# ๊ฐ™์€ ๋ช…๋ น์˜ ๋‹ค๋ฅธ ์ด๋ฆ„(๋ณ„์นญ)์œผ๋กœ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅ
/feature:full
/feature:orchestrate

์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’๋“ค:

  • feature_name (ํ•„์ˆ˜) โ€” ๊ธฐ๋Šฅ ๋ชจ๋“ˆ ์ด๋ฆ„ (์˜ˆ: order_history)
  • entity_name (ํ•„์ˆ˜) โ€” ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ ์ด๋ฆ„ (์˜ˆ: OrderHistory)
  • location (์„ ํƒ) โ€” ์–ด๋””์— ๋‘˜์ง€: application / common / console (๊ธฐ๋ณธ application)
  • caching (์„ ํƒ) โ€” ๋ฐ์ดํ„ฐ ์บ์‹ฑ ๋ฐฉ์‹: swr / cache-first / none (๊ธฐ๋ณธ swr)
  • endpoint_type (์„ ํƒ) โ€” ํ†ต์‹  ์ฐฝ๊ตฌ ์ข…๋ฅ˜: app / console / both (๊ธฐ๋ณธ app)

์œ„ ์˜ต์…˜๊ณผ ๊ฐ’๋“ค์€ ๋ชจ๋‘ ๋ฌธ์„œ์— ์ •์˜๋œ ์‹ค์ œ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค.

์•ˆ์—์„œ ๋ฌด์Šจ ์ผ์ด ๋ฒŒ์–ด์ง€๋‚˜์š”#

์ด๊ฐ๋…์€ ๋‹ค์Œ ์ˆœ์„œ๋กœ ์ผ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ์‚ฌ์ „ ์ ๊ฒ€(Preflight) โ€” ์ž‘์—…์— ํ•„์š”ํ•œ ๋„๊ตฌ(MCP)๊ฐ€ ๊น”๋ ค ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์—†์œผ๋ฉด ์ž๋™์œผ๋กœ ์„ค์น˜ยท๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ง‰ํžˆ๋ฉด ๋ฉˆ์ถ”๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ธฐ์กด ๊ธฐ๋Šฅ ํ™•์ธ โ€” ๊ฐ™์€ ์ด๋ฆ„์˜ ๊ธฐ๋Šฅ์ด ์ด๋ฏธ ์žˆ์œผ๋ฉด "์ˆ˜์ •ํ• ์ง€ / ๊ฑด๋„ˆ๋›ธ์ง€ / ์ƒˆ๋กœ ๋งŒ๋“ค์ง€" ๋ฌผ์–ด๋ด…๋‹ˆ๋‹ค.
  3. ์š”๊ตฌ์‚ฌํ•ญ ์ •๋ฆฌ & ๊ณ„ํš ์ˆ˜๋ฆฝ โ€” ๋ฌด์—‡์„ ๋งŒ๋“ค์ง€ ๋Œ€ํ™”๋กœ ํ™•์ธํ•˜๊ณ  ํ•  ์ผ ๋ชฉ๋ก์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  4. ์„œ๋ฒ„(๋ฐฑ์—”๋“œ) ๋งŒ๋“ค๊ธฐ โ€” ๋ฐ์ดํ„ฐ ๋ชจ๋ธ โ†’ ํ†ต์‹  ์ฐฝ๊ตฌ โ†’ ์ฝ”๋“œ ์ƒ์„ฑ โ†’ DB ๋ณ€๊ฒฝ ์ˆœ์œผ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ์•ฑ(ํ”„๋ก ํŠธ์—”๋“œ) ๋งŒ๋“ค๊ธฐ โ€” ์—…๋ฌด ๊ทœ์น™ โ†’ ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ โ†’ ํ™”๋ฉด ์ˆœ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  6. ๋””์ž์ธ ์ ์šฉ & ์‹ค์ œ ๋™์ž‘ ๊ตฌํ˜„ โ€” ํ•„์š”ํ•˜๋ฉด Figma ์Šคํƒ€์ผ์„ ์ž…ํžˆ๊ณ  ์‹ค์ œ ๋™์ž‘์„ ์ฑ„์›๋‹ˆ๋‹ค.
  7. ์—ฐ๊ฒฐ & ๊ฒ€์ฆ โ€” ์„ค์ •์„ ์—ฐ๊ฒฐํ•˜๊ณ , ์ฝ”๋“œ ๋ถ„์„ยทํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ฆฐ ๋’ค, ์‹ค์ œ ์„œ๋ฒ„๋ฅผ ๋„์›Œ(serverpod start) ์•ฑ๊ณผ ์„œ๋ฒ„๊ฐ€ ์ง„์งœ๋กœ ๋งž๋ฌผ๋ฆฌ๋Š”์ง€ ํ†ตํ•ฉ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์„œ๋ฒ„ ๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ๊ณ ์นœ ๋’ค ๋‹ค์‹œ ๋Œ๋ฆฝ๋‹ˆ๋‹ค.

โš™๏ธ ์ƒ์„ธ ์˜ต์…˜ยท์‹คํ–‰ ๋ช…์„ธ (๊ฐœ๋ฐœ์ž / AI ์—์ด์ „ํŠธ์šฉ)

Role#

Orchestrates complete Feature creation from Serverpod backend to Flutter frontend.


Activation Conditions#

  • /feature:create Activated when command is invoked

Parameters#

ParameterRequiredDescription
feature_nameโœ…Feature module name (snake_case)
entity_nameโœ…Entity name (PascalCase)
locationโŒapplication, common, console (default: application)
cachingโŒswr, cache-first, none (default: swr)
endpoint_typeโŒapp, console, both (default: app)

Execution Flow Summary#

Phase 0: Preflight (MCP  &   ํ™˜๊ฒฝ ์ ๊ฒ€)
    โ†“ - marionette_mcp ์‹คํ–‰ ํŒŒ์ผ ํ™•์ธ
    โ†“ - ๋ฏธ์„ค์น˜ ์‹œ `fvm dart pub global activate marionette_mcp` ์ž๋™ ์‹คํ–‰
    โ†“ - `claude mcp list`๋กœ ์—ฐ๊ฒฐ ์ƒํƒœ ํ™•์ธ, ์‹คํŒจ ์‹œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ์žฌ๋“ฑ๋ก
    โ†“ - Cursor/Zed ์„ค์ •(`~/.cursor/mcp.json`, `~/.config/zed/settings.json`) ๋™๊ธฐํ™”
    โ†“ (์‹คํŒจ ์‹œ ์ค‘๋‹จ ํ›„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด๊ณ )
Phase 0.5: Check existing Feature
    โ†“ (Select update/skip/regenerate)
Phase 1: Requirements gathering (Interactive)
    โ†“
Phase 2: Plan creation (TodoWrite)
    โ†“
Phase 3: Backend implementation
  - Step 1: /serverpod:model ํ˜ธ์ถœ
  - Step 2: /serverpod:endpoint ํ˜ธ์ถœ
  - Step 3: backend:pod:generate
  - Step 4: ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
    โ†“
Phase 4: Frontend implementation
  - Step 5: /feature:domain ํ˜ธ์ถœ
  - Step 6: /feature:data ํ˜ธ์ถœ
  - Step 7: /feature:presentation ํ˜ธ์ถœ
    โ†“
Phase 4.5: Figma style application (conditional)
    โ†“
Phase 4.7: Actual behavior implementation
    โ†“
Phase 5: Integration and verification
  - DI ๋“ฑ๋ก, Route ๋“ฑ๋ก
  - ์ฝ”๋“œ ์ƒ์„ฑ, ๋ถ„์„, ํ…Œ์ŠคํŠธ
  - ๋กœ์ปฌ ํ’€์Šคํƒ ํ†ตํ•ฉ ๊ฒ€์ฆ โญ (serverpod start: server+๋‚ด์žฅ Postgres+app)
    ยท ๋กœ์ปฌ ๋ฐฑ์—”๋“œ ๋Œ€์ƒ ํ†ตํ•ฉ (backend: dart test -t integration / front: ๋กœ์ปฌ ๋ฐฑ์—”๋“œ)
    ยท ๋ฐฑ์—”๋“œ ๋ณ€๊ฒฝ ์‹œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜/๋กœ๊ทธ๋Š” Serverpod MCP, ํด๋ฐฑ(3.x): docker compose + dart run

Command Invocation Order#

StepCommandGenerated Content
1/serverpod:modelEntity, DTO, Enum
2/serverpod:endpointEndpoint, Service
3backend:pod:generateCode generation
4backend:pod:*-migrationDB Migration
5/feature:domainEntity, Repository I/F, UseCase
6/feature:dataRepository Implementation, Mixin, Cache
7/feature:presentationBLoC, Page, Widget, Route

Generated Files Summary#

backend/kobic_server/lib/src/feature/{feature}/
โ”œโ”€โ”€ model/entities/*.spy.yaml
โ”œโ”€โ”€ model/dto/*.spy.yaml
โ”œโ”€โ”€ endpoint/{feature}_endpoint.dart
โ””โ”€โ”€ service/{feature}_service.dart

feature/{location}/{feature}/lib/src/
โ”œโ”€โ”€ domain/ (entity, repository, usecase)
โ”œโ”€โ”€ data/ (repository, mixin, cache, local)
โ”œโ”€โ”€ presentation/ (bloc, page, widget, route)
โ””โ”€โ”€ di/injection.dart

Success Criteria#

  • โœ… All files generated in correct locations
  • โœ… melos run analyze No errors
  • โœ… melos run test --scope={feature} Passes
  • โœ… DI Registration complete
  • โœ… Route Registration complete
  • โœ… ๋กœ์ปฌ ํ’€์Šคํƒ(serverpod start: server+๋‚ด์žฅ Postgres+app) ๊ธฐ๋™ ๋ฐ ๋กœ์ปฌ ๋ฐฑ์—”๋“œ ๋Œ€์ƒ ํ†ตํ•ฉ ๊ฒ€์ฆ ํ†ต๊ณผ (๋ฐฑ์—”๋“œ ๋ณ€๊ฒฝ ์‹œ)

Local Full-Stack Integration Verification (Serverpod 4 / ๋กœ์ปฌ ํ’€์Šคํƒ) โญ#

Phase 5์—์„œ ์œ„์ ฏ/์œ ๋‹› mock ํ…Œ์ŠคํŠธ์™€ ๋ณ„๊ฐœ๋กœ, ์‹ค์ œ ๋ฐฑ์—”๋“œ๋ฅผ ๋„์šด ์ƒํƒœ์—์„œ backendโ†”front ๊ณ„์•ฝ์„ ๊ฒ€์ฆํ•˜๋Š” ๋‹จ๊ณ„. Serverpod 4์˜ ๋‚ด์žฅ Postgres ๋•๋ถ„์— Docker ์—†์ด ์™„์ „ ๋กœ์ปฌ๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์–ธ์ œ ์ผœ๋Š”๊ฐ€ (When to enable)

  • Phase 3(Backend)์—์„œ ๋ชจ๋ธ/์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ถ”๊ฐ€ยท๋ณ€๊ฒฝ๋˜์—ˆ๊ฑฐ๋‚˜, Phase 4 data layer๊ฐ€ ์‹ค์ œ endpoint๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ ON.
  • ์ˆœ์ˆ˜ ์œ„์ ฏ/์œ ๋‹›๋งŒ ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ๋Š” ์ƒ๋žต(๊ธฐ์กด mock ํ…Œ์ŠคํŠธ๋กœ ์ถฉ๋ถ„).

๊ธฐ๋™ (Start up)

  • serverpod start ํ•œ ๋ช…๋ น์œผ๋กœ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ + ๋‚ด์žฅ Postgres + Flutter ์•ฑ์„ ํ•จ๊ป˜ ๊ธฐ๋™(์„œ๋ฒ„ยทDBยท์›นยท์•ฑ sub-second stateful ํ•ซ๋ฆฌ๋กœ๋“œ, ์žฌ์ปดํŒŒ์ผ/์žฌ์‹œ์ž‘ ์—†์Œ).
  • ์•ฑ์€ dev flavor์—์„œ ๋กœ์ปฌ ์„œ๋ฒ„(http://localhost:8080/)๋กœ ์—ฐ๊ฒฐ, Staging์€ ํด๋ฐฑ. base-URL์€ ์•ฑ์˜ ๊ธฐ์กด client/OpenApiService/flavor ์„ค์ •์„ ๋”ฐ๋ฅด๊ณ  ํ•˜๋“œ์ฝ”๋”ฉ ๊ธˆ์ง€.
  • ํ•ซ๋ฆฌ๋กœ๋“œ๊ฐ€ ๋ง‰ํžˆ๋ฉด serverpod start ํ„ฐ๋ฏธ๋„์—์„œ R ํ‚ค๋กœ ์„œ๋ฒ„+์•ฑ ๊ฐ•์ œ ์žฌ์‹œ์ž‘.

ํ†ตํ•ฉํ…Œ์ŠคํŠธ ์‹คํ–‰ (Run integration tests)

  • ๋ฐฑ์—”๋“œ: withServerpod ํ—ฌํผ ๊ธฐ๋ฐ˜ ํ†ตํ•ฉํ…Œ์ŠคํŠธ๋ฅผ dart test -t integration์œผ๋กœ ์‹คํ–‰(๋‚ด์žฅ Postgres๋ผ Docker ๋ถˆํ•„์š”).
  • ํ”„๋ก ํŠธ: feature/Patrol/ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋Š” mock์ด ์•„๋‹ˆ๋ผ ๋ฐฉ๊ธˆ ๋„์šด ๋กœ์ปฌ ๋ฐฑ์—”๋“œ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ˆ˜ํ–‰.
  • ๋ฐฑ์—”๋“œ ๋ณ€๊ฒฝ ์‹œ DB ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ƒ์„ฑยท์ ์šฉ, ์„œ๋ฒ„ ๋กœ๊ทธ ์ฝ๊ธฐ, ์•ฑ ๊ตฌ๋™+์Šคํฌ๋ฆฐ์ƒท ๊ฒ€ํ† ๋Š” Serverpod MCP๋กœ ์‹คํ–‰ ์ค‘์ธ ๋กœ์ปฌ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•ด ์ˆ˜ํ–‰.

์ข…๋ฃŒ (Tear down)

  • ๊ฒ€์ฆ ์™„๋ฃŒ ํ›„ serverpod start ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒ(ํ„ฐ๋ฏธ๋„ ์ข…๋ฃŒ/Ctrl+C). ๋‚ด์žฅ Postgres๋Š” ํ•จ๊ป˜ ์ •๋ฆฌ๋จ.

์‹คํŒจ ์‹œ ์ฒ˜๋ฆฌ (On failure)

  • ํ†ตํ•ฉํ…Œ์ŠคํŠธ ์‹คํŒจ: ์„œ๋ฒ„ ๋กœ๊ทธ(Serverpod MCP)๋กœ ์›์ธ ํ™•์ธ โ†’ ๋ชจ๋ธ/์—”๋“œํฌ์ธํŠธ/data layer ์ˆ˜์ • โ†’ ํ•ซ๋ฆฌ๋กœ๋“œ(๋˜๋Š” R ํ‚ค ์žฌ์‹œ์ž‘) ํ›„ ์žฌ์‹คํ–‰.
  • ๊ธฐ๋™ ์‹คํŒจ: ํฌํŠธ ์ถฉ๋Œ/์ž”์กด ํ”„๋กœ์„ธ์Šค ์ •๋ฆฌ ํ›„ ์žฌ๊ธฐ๋™. Serverpod 3.x(legacy) ํ™˜๊ฒฝ์ด๋ฉด ํด๋ฐฑ ๊ฒฝ๋กœ ์‚ฌ์šฉ.
  • ํด๋ฐฑ (3.x / legacy): ๋‚ด์žฅ Postgres๊ฐ€ ์—†์œผ๋ฏ€๋กœ docker compose up -d๋กœ DB ๊ธฐ๋™ โ†’ dart run bin/main.dart๋กœ ์„œ๋ฒ„ ๊ธฐ๋™ โ†’ ๋™์ผํ•˜๊ฒŒ dart test -t integration ์ˆ˜ํ–‰.

์ƒ์„ธ ์ ˆ์ฐจ๋Š” serverpod-local-fullstack, serverpod-mcp-guide ์Šคํ‚ฌ ์ฐธ์กฐ.


Error Handling#

PhaseOn Failure
Preflight (MCP)fvm dart pub global activate marionette_mcp ์žฌ์‹คํ–‰ โ†’ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์žฌ๋“ฑ๋ก โ†’ snapshot ๋ถˆ์ผ์น˜(exit 253) ์‹œ ์žฌํ™œ์„ฑํ™”
Model creationRe-verify field definitions
Endpoint creationVerify import paths
Domain creationVerify Entity field mapping
Data creationVerify namespace imports
Presentation creationVerify BLoC pattern, UseCase calls
๋กœ์ปฌ ํ’€์Šคํƒ ํ†ตํ•ฉ ๊ฒ€์ฆํ†ตํ•ฉํ…Œ์ŠคํŠธ ์‹คํŒจ ์‹œ Serverpod MCP๋กœ ์„œ๋ฒ„ ๋กœ๊ทธ ํ™•์ธ โ†’ ์ˆ˜์ • โ†’ ํ•ซ๋ฆฌ๋กœ๋“œ/R ํ‚ค ์žฌ์‹œ์ž‘ ํ›„ ์žฌ์‹คํ–‰. ๊ธฐ๋™ ์‹คํŒจ ์‹œ ํฌํŠธ ์ถฉ๋Œยท์ž”์กด ํ”„๋กœ์„ธ์Šค ์ •๋ฆฌ ํ›„ ์žฌ๊ธฐ๋™. ํด๋ฐฑ(3.x): docker compose up -d + dart run bin/main.dart

Phase 0 Preflight Script (reference implementation)#

set -euo pipefail

MCP_BIN= " $HOME/.pub-cache/bin/marionette_mcp " 
 FVM_BIN= " /Users/dongwoo/fvm/default/bin " 

 # 1) ์‹คํ–‰ ํŒŒ์ผ ํ™•์ธ + fvm ๊ฒฝ์œ  ์ž๋™ ์„ค์น˜
if [ ! -x  " $MCP_BIN "   ]; then
  echo  " โš ๏ธ  marionette_mcp ๋ฏธ์„ค์น˜ โ€” fvm dart pub global activate ์‹คํ–‰ " 
   fvm dart pub global activate marionette_mcp
fi

# 2) PATH ์ฃผ์ž… (GUI ์•ฑ ๊ณ ๋ ค: ~/.zshrc ์—…๋ฐ์ดํŠธ + ํ˜„์žฌ ์‰˜ ๋ฐ˜์˜)
case  " :$PATH: "   in
  * " :$HOME/.pub-cache/bin: " *) ;;
  *)
    echo  ' export PATH= " $PATH:$HOME/.pub-cache/bin " '   > >   " $HOME/.zshrc " 
     export PATH= " $PATH:$HOME/.pub-cache/bin " 
     ;;
esac

# 3) Claude Code MCP ๋“ฑ๋ก ์ƒํƒœ ํ™•์ธ/์žฌ๋“ฑ๋ก
if ! claude mcp list 2 > & 1 | grep -q  " marionette:.*โœ“ Connected " ; then
  claude mcp remove marionette 2 > /dev/null || true
  claude mcp add --transport stdio marionette --  " $MCP_BIN " 
 fi

# 4) Cursor/Zed ์„ค์ • ๋ถ€์žฌ ์‹œ ์ƒ์„ฑ ์•ˆ๋‚ด (GUI ์•ฑ์€ ์ ˆ๋Œ€ ๊ฒฝ๋กœ + env.PATH ํ•„์ˆ˜)
test -f  " $HOME/.cursor/mcp.json "              || echo  " โ„น๏ธ  Cursor ์„ค์ • ํ•„์š” (~/.cursor/mcp.json) " 
 test -f  " $HOME/.config/zed/settings.json "    || echo  " โ„น๏ธ  Zed ์„ค์ • ํ•„์š” (~/.config/zed/settings.json) "

fvm ์ฃผ์˜: dart๋Š” zshrc alias(fvm dart)๋ผ ๋น„๋Œ€ํ™”ํ˜•/GUI subprocess์—์„œ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Œ. ์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํ•ญ์ƒ fvm dart ๋˜๋Š” /Users/dongwoo/fvm/default/bin/dart ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉ.