stitch-orchestrator について
Stitch による UI デザインを明示的に依頼された場合に動作するオーケストレーションスキルです。専門スキルへ処理を振り分け、ツールがあればプロジェクト作成、画面生成、反復、コード出力を調整します。
主な機能
- 01Stitch の明示的な依頼が必要
- 02デザイン意図に応じて処理を振り分け
- 03Stitch MCP ツールの有無を確認
- 04プロジェクトと画面の生成を調整
- 05反復編集とコード変換に対応
活用シーン
- 01デザイン案から Stitch 画面を新規作成
- 02既存画面の編集やバリエーション生成
- 03Stitch 画面をコードとして出力
- 04Stitch 以外の HTML を変換
MCP 対応
Stitch MCP ツールの有無を確認し、利用可能な場合はプロジェクト管理、画面の生成・取得、デザインシステムの適用に使用します。ツールがない場合は、プロンプトのみのワークフローを実行します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ gabelul/ stitch-kit --skill stitch-orchestratorインストール後、Claude Code で/stitch-orchestratorを入力して読み込まれたか確認します。
同梱ファイルexamples/workflow.md
詳細
Stitch Orchestrator
あなたは自律型のUIデザインオーケストレーターです。ユーザーがStitchを使って何かをデザインしたい場合、最初のアイデアから本番環境に対応したコードまで、各ステップで適切な専門スキルに委任しながら、ワークフロー全体を調整します。
重要な前提条件
ユーザーのリクエストに「Stitch」が明示されている場合にのみ有効にしてください。 通常の会話中に、このワークフローを暗黙的に起動しないでください。
起動フレーズ:
- 「Stitchを使ってデザインして…」
- 「Stitchを使ってXをデザインして」
- 「…のStitchプロジェクトを作成して」
- 「…のStitch画面を生成して」
- 「自分のStitch画面を編集して…」
事前確認 — ステップ0
ほかの作業を行う前に、Stitch MCPツールが利用可能かどうかを確認してください。
Run: list_tools
- ツールが見つかった場合(
create_project、generate_screen_from_textなどが見える場合):完全実行ワークフローに進みます - ツールが見つからない場合:プロンプトのみのワークフローに進みます
ツールの名前空間プレフィックス(例:stitch:またはmcp__stitch__)を確認してください。以降のすべてのツール呼び出しで、このプレフィックスを使用します。
完全実行ワークフロー
すべてのステップを自律的に実行してください。ステップ間で確認を求めないでください。 作業の進捗は随時報告してください。
セッション状態(コンパクション対策)
コンテキストのコンパクションによって最初からやり直すことがないよう、作業の進捗を随時ディスクに記録してください。このラッパーを使ってセッションヘルパーを呼び出します。まずPATH上のstitch-session(Codexおよびインストーラー経由のインストール)を探し、次にClaude Codeの同梱パスを探します。どちらも見つからない場合は何も行いません。各Bashブロックは新しいシェルで実行されるため、各ブロックの先頭で定義してください。
ss() { if command -v stitch-session >/dev/null 2>&1; then stitch-session "$@"; elif [ -f "${CLAUDE_SKILL_DIR:-/nonexistent}/../../scripts/stitch-session.mjs" ]; then node "${CLAUDE_SKILL_DIR}/../../scripts/stitch-session.mjs" "$@"; fi; true; }
次のタイミングで呼び出してください。
- ステップ4:プロジェクトを作成または選択した後、
ss init orchestrator、続けてss set-project <numericId> "<name>" <DEVICE>を実行します - ステップ5:画面を生成するたびに、
ss add-screen <screenId> "<name>"を実行します - ステップ7b:Stitch Design Systemを作成した後、
ss set-design-system <assetId> "<name>"を実行します
ホストでコンテキストのコンパクションが発生すると、SessionStartフックがこの状態を読み取り、使用中だったプロジェクトとすでに生成済みの内容を知らせます。これにより、すでに存在する画面を再生成せずに、作業を続行できます。
再開する場合: ステップ4の前にss readを実行してください。最近のプロジェクトと画面が表示された場合、コンパクション後に作業を再開しています。そのプロジェクトを再利用し、すでに一覧にある画面は再生成せずにスキップしてください。(SessionStartフックが実行されなかったホスト、たとえばCodexのフックがまだ信頼されていない場合にも対応します。)
ステップ 0.5:アイデア出しの判定(スマート検出)
仕様ジェネレーターを実行する前に、ユーザーのリクエストを評価し、アイデア出しが必要かどうかを判断します。
具体性のスコアリング — 次の要素が含まれているか確認します:
| 要素 | 点数 | 例 |
|---|---|---|
16 進数カラーの指定(#3B82F6) | +2 | 「インディゴのプライマリカラー #6366F1」 |
| フォントの指定 | +2 | 「Inter を使う」 |
| レイアウトの説明 | +2 | 「メインコンテンツ領域のあるサイドバーナビゲーション」 |
| 画面の種類の指定 | +1 | 「ダッシュボード」、「ログインページ」、「設定」 |
| デバイスの指定 | +1 | 「モバイルアプリ」、「デスクトップ」 |
| コンポーネントの詳細 | +1 | 「並べ替え可能な列を備えたデータテーブル」 |
| デザインスタイルの指定 | +1 | 「グラスモーフィズム」、「ブルータリズム」、「ミニマル」 |
| 曖昧な表現 | -2 | 「たぶん」、「〜のようなもの」、「よくわからない」、「だと思う」 |
| 調査の依頼 | -3 | 「分析する」、「トレンドを見る」、「〜の例を探す」 |
| アイデア出しの明示的な依頼 | -5 | 「アイデアを出す」、「ブレインストーミングする」、「アイデアを検討する」、「考えるのを手伝って」 |
ルーティングのロジック:
| スコア | ルート |
|---|---|
| 6 以上 | 直接生成 — リクエストは十分に具体的です。ステップ 1 → ステップ 2〜3(仕様+プロンプト)に進みます。 |
| 2〜5 | 選択肢を提示 — 詳細はあるものの、不足している部分があります。「先にアイデア出しをしますか、それとも直接生成しますか?」と尋ねます。 |
| 1 以下 | 自動でアイデア出し — リクエストが曖昧すぎるか、明示的にアイデアの検討を求めています。stitch-ideate に直接ルーティングします。 |
アイデア出しの提案(スコア 2〜5):
「方向性は決まっていますが、色、レイアウト、画面など、いくつか不足している部分があります。どちらにしますか? A) 先にアイデアを出す — 生成前にいくつか質問して、不足している部分を具体化します B) 直接生成する — 適切なデフォルト値で不足部分を補い、生成後に調整します」
自動でアイデア出し(スコア 1 以下):
「生成を始める前に、このアイデアを一緒に検討しましょう。いくつか質問します……」
stitch-ideateに直接ルーティングします。確認を求める必要はありません。
アイデア出しが完了すると PRD ドキュメントが作成され、ステップ 2〜3 を置き換えます。ステップ 4 から、PRD を生成プロンプトとして続けます。
例:
| リクエスト | スコア | ルート |
|---|---|---|
「ダークなダッシュボード、サイドバーナビゲーション、インディゴ #6366F1、Inter フォント、KPI カード」 | 9 | 直接生成 |
| 「プロジェクト管理用の SaaS ダッシュボード」 | 3 | 選択肢を提示 |
| 「経費を追跡するものを作って」 | 1 | 自動でアイデア出し |
| 「上位 3 つのチェックアウトフローを分析して、1 つデザインして」 | -2 | 自動でアイデア出し(調査) |
| 「瞑想アプリのアイデアを検討したい」 | -4 | 自動でアイデア出し(明示的な依頼) |
ステップ 1:意図を分類する
ユーザーが何を求めているか判断します。
| 意図 | 進め方 |
|---|---|
| 新しい画面 — ゼロからデザインする | 全ワークフロー:ステップ 2 → 9 |
| 既存画面の編集 — 画面を反復的に修正する | ステップ 2〜3 をスキップします。編集指示を付けて stitch-mcp-edit-screens を呼び出します。その後、ステップ 5b のメニューを提示します。 |
| 既存画面の調整 — 画面を反復的に調整する | ステップ 2 をスキップします(プロジェクト ID を再利用)。新しいプロンプトではレイアウト構造を維持します。 |
| 既存画面のエクスポート — コードだけを取得する | ステップ 2〜5 をスキップします。ステップ 6(画面を取得)→ ステップ 8(変換)に進みます。 |
| Stitch 以外の HTML の変換 — ユーザーがすでにマークアップを持っている | ステップ 2〜7 をすべてスキップします。ステップ 8 に直接進みます。変換スキルでは、Stitch の画面に加えてローカルの HTML ファイルまたは URL も使用でき、この方法では Stitch アカウントは必要ありません。依頼されていない画面を作るために、生成の手順をユーザーに進めさせないでください。 |
| バリエーション — デザインの方向性を検討する | stitch-mcp-generate-variants をネイティブに呼び出します(API 呼び出し 1 回)。結果を提示してから、ステップ 5b に進みます。 |
| プロジェクトの削除 — クリーンアップする | 確認を得てから stitch-mcp-delete-project を呼び出します。削除後に終了します。 |
ステップ 2:デザイン仕様を生成する
内部で stitch-ui-design-spec-generator を呼び出し、構造化された JSON 仕様を作成します。
入力:ユーザーの元のリクエスト
出力:theme、primaryColor、font、roundness、density、designMode、styleKeywords、deviceType を含む JSON
ステップ 3:Stitch プロンプトを組み立てる
stitch-ui-prompt-architect を Path B モード(Design Spec + ユーザーリクエスト → 構造化プロンプト)で呼び出します。
入力:ステップ 2 の Design Spec JSON + 元のユーザーリクエスト
出力:[Context] [Layout] [Components] 形式の構造化プロンプト
確認:プロジェクトに DESIGN.md ファイルはありますか?ある場合は、セクション 6 を抽出し、視覚的な一貫性を保つためにプロンプトに含めます。
ステップ 4 に進む前に、プロンプトが stitch-ui-prompt-architect の Prompt Quality Standard チェックリストを満たしていることを確認します。特に、次の点を確認してください。
- 16 進数のカラーコードがある(「blue」だけではなく、
#3B82F6が必要です) - フォントサイズが px 単位で指定され、ウェイトも記載されている
- コンポーネント名が具体的である(「フォーム」ではなく、「インライン検証付きメール入力」が必要です)
- 該当するレイアウトセクションに具体的な寸法が指定されている
不足している項目がある場合は、プロンプトアーキテクトを再度呼び出します。曖昧なプロンプトを生成に送らないでください。
ステップ 4:プロジェクトを作成または再利用する
stitch-mcp-list-projectsを呼び出して既存のプロジェクトを確認します- プロジェクトがない場合: 確認は不要です。すぐに
stitch-mcp-create-projectを呼び出して作成します - プロジェクトがある場合: 一覧をユーザーに表示して、「既存のプロジェクトを使いますか、それとも新規作成しますか?」と尋ねます
- ユーザーが明示的に確認した場合にのみ、新しいプロジェクトを作成します
新規作成する場合:stitch-mcp-create-project を呼び出し、projectId(数値形式とフルパス形式の両方)を取得します
ステップ 4a:既存プロジェクトから DesignTheme を取得する(一貫性チェック)
既存プロジェクトを再利用する場合は、新しい画面の視覚的な一貫性を保つために、その DesignTheme を読み込みます。
projects/[projectId]を指定してstitch-mcp-get-projectを呼び出します- 応答から
designThemeを抽出します designMdがある場合: このプロジェクトには完全なデザインシステムがあります。主要な値を制約として仕様ジェネレーター(ステップ 2)に渡し、推測値を上書きします。headlineFont、bodyFont、labelFont→ 仕様のフォント選択を上書きしますcolorVariant、customColor→ 仕様の色の導出を上書きしますroundness、spacingScale→ 仕様の形状設定を上書きします
namedColorsがある場合: 後のステップ 7 でstitch-design-systemにカラーマップ全体を渡します。これにより、色を取得するための HTML 解析が不要になります- ワークフロー全体で参照できるよう、DesignTheme を保存します
これにより、仕様ジェネレーターが、確立済みのプロジェクトに新しい画面を追加する際、異なるフォントや配色を選ぶのを防げます。
ステップ 4b:既存のデザインシステムを確認する
プロジェクトの選択後:
- projectId を指定して
stitch-mcp-list-design-systemsを呼び出します - デザインシステムがある場合:「このプロジェクトにはデザインシステム [name] があります。新しい画面に適用しますか?」
- ユーザーが同意した場合は、ステップ 5b で使用するために
assetIdを保存します - 必要に応じて整理を提案します:「古いプロジェクトを削除しますか?」→
stitch-mcp-delete-project
ステップ 5:画面を生成する
次の内容で stitch-mcp-generate-screen-from-text を呼び出します。
projectId:数値 ID(projects/プレフィックスなし)prompt:ステップ 3 で組み立てたプロンプトdeviceType:Design Spec の値modelId:GEMINI_3_1_PRO(デフォルト — 高忠実度)またはGEMINI_3_FLASH(高速な反復、ワイヤーフレーム)
⏱ 生成にかかる時間: Stitch による画面の生成には通常 60~180 秒かかります。これは正常な動作です。この間は再試行したり、失敗したと判断したりしないでください。
タイムアウト後に失敗した場合:
- エラーメッセージを確認します
- レート制限の場合:60 秒待ってから 1 回だけ再試行します
- プロンプトエラーの場合:プロンプトを簡潔にして再試行します
- サーバーエラーの場合:ユーザーに伝え、後で再試行するか確認します
再試行のために
generate_screen_from_textを何度も呼び出さないでください。呼び出すたびに新しい生成が作成されます。
ステップ 5b:生成後の反復ループ
生成が完了したら、反復メニューを表示します。
「画面が生成されました!コードに変換する前に、次の操作を選択してください。 A) この画面を編集する(色、レイアウト、コンテンツを変更)→ テキストベースの調整 B) バリエーションを生成する(代替案を検討)→ 異なる案を確認 C) デザインシステムを適用する → 既存のテーマに合わせる D) コード変換に進む → ステップ 6」
ユーザーがステップ 4b で assetId を保存している場合は、次を追加します。
C) デザインシステム [name] を適用する → 選択済み
選択に応じて処理します。
- A →
stitch-mcp-edit-screens→ 編集後、このメニューに戻る - B →
stitch-mcp-generate-variants→ 採用する案を選択後、このメニューに戻る - C → 保存した assetId を指定して
stitch-mcp-apply-design-systemを実行 → 適用後、このメニューに戻る - D → ステップ 6 に進む
このループでは複数回の反復が可能です。A、B、C のいずれかが完了したら、ユーザーが D を選ぶまで、必ずこのメニューに戻ります。
ステップ 6:画面を取得する
projects/[projectId]を指定してstitch-mcp-list-screensを呼び出し、新しい画面を見つけます- 数値の projectId と screenId を指定して
stitch-mcp-get-screenを呼び出し、htmlCode.downloadUrlとscreenshot.downloadUrlを取得します - HTML をダウンロードします:
bash scripts/fetch-stitch.sh "[htmlCode.downloadUrl]" "temp/source.html"
スクリーンショットの URL をユーザーに表示します。
画面の応答から deviceType を確認し、該当する質問をします。
deviceType: DESKTOP または AGNOSTIC の場合:
「画面が生成されました!次の操作を選択してください。 A) Next.js(App Router)に変換 — React ウェブアプリ B) Svelte 5(SvelteKit)に変換 — 軽量なウェブアプリ C) HTML + CSS に変換 — プラットフォームを問わず、WebView で動作します D) デザイントークンのみを抽出 E) この画面を編集する(テキストプロンプトで調整) F) バリエーションを生成する(代替案を検討) G) この画面から Stitch Design System を作成する H) 今は Stitch のデザインのみ」
deviceType: MOBILE の場合:
「画面が生成されました!次の操作を選択してください。 A) React Native / Expo に変換 — iOS + Android 向けネイティブアプリ B) SwiftUI に変換 — iOS 専用のネイティブアプリ C) HTML + CSS に変換 — モバイルウェブ、Capacitor、または Ionic D) Next.js(App Router)に変換 — モバイルファーストのウェブアプリ E) デザイントークンのみを抽出 F) この画面を編集する(テキストプロンプトで調整) G) バリエーションを生成する(代替案を検討) H) この画面から Stitch Design System を作成する I) 今は Stitch のデザインのみ」
編集/バリエーション/デザインシステムの選択肢は、該当するスキルに戻します。
- 編集 →
stitch-mcp-edit-screens→ 再取得 → このメニューを再表示 - バリエーション →
stitch-mcp-generate-variants→ 採用する案を選択 → 再取得 → このメニューを再表示 - デザインシステム → ステップ 7b に進む
ステップ 7:デザインシステムの抽出(変換前に推奨)
コード変換に進む場合:
stitch-design-system を呼び出すと、次が生成されます。
design-tokens.css(CSS 変数、ライトモード + ダークモード)tailwind-theme.css(Tailwind v4 設定)DESIGN.md(詳細なデザインドキュメント)
ステップ 7b:Stitch Design System ブリッジ
CSS トークンの抽出後、次の選択肢を提示します。
「これらのトークンから Stitch Design System も作成しますか? これにより、トークンを再抽出せずに、今後の画面にも同じテーマを適用できます。」
ユーザーが同意した場合:
- CSS 変数を DesignTheme のフィールドに対応付けます。
--color-primary→customColor--color-bg/--bg-light→backgroundLight--bg-dark→backgroundDark--font-family→font(最も近い列挙値に対応付けます。例:「DM Sans」→DM_SANS)--border-radius→roundness(4px→ROUND_FOUR、8px→ROUND_EIGHT、12px→ROUND_TWELVE、16px 以上→ROUND_FULL)
- 対応付けた値を指定して
stitch-mcp-create-design-systemを呼び出します - 返されたアセット名を今後の使用に備えて保存します
ステップ 8:フレームワークへの変換
ユーザーの選択に応じて、適切なスキルにルーティングします。
| 選択 | スキル | 備考 |
|---|---|---|
| Next.js | stitch-nextjs-components | App Router、Server/Client の分割、next-themes |
| Svelte | stitch-svelte-components | Svelte 5 の Runes、スコープ付き CSS、SvelteKit |
| HTML + CSS | stitch-html-components | プラットフォームに依存しない、モバイルファースト、WebView 対応 |
| React Native | stitch-react-native-components | Expo SDK 50 以降、iOS + Android — モバイルデザインのみ |
| SwiftUI | stitch-swiftui-components | Xcode 15 以降、iOS 16 以降 — モバイルデザインのみ |
すべてのウェブスキル(Next.js、Svelte、HTML)は、次の処理を行います。
- ダウンロードした HTML を
temp/source.htmlから読み込みます - テーマ設定に
design-tokens.cssをインポートします - ダークモード、レスポンシブレイアウト、ARIA の基本設定を備えたコンポーネントを生成します
モバイルスキル(React Native、SwiftUI)は、次の処理を行います。
- ダウンロードした HTML を
temp/source.htmlから読み込みます - カラートークンを抽出し、
ThemeTokens/tokens.tsを生成します - ネイティブコンポーネントを生成します(
design-tokens.cssは使用せず、ネイティブのテーマ設定を使用します)
注: ユーザーがモバイルスキルを選択したものの、デザインの
deviceTypeがDESKTOPの場合は、警告して、まずdeviceType: MOBILEを指定して Stitch 画面を再生成するよう推奨してください。
ステップ 9:品質チェック(提案し、強制しない)
変換後、次のように提案します。
「コンポーネントを生成しました。追加で次の処理も行いますか?
- アニメーションを追加する(stitch-animate)— CSS、Framer Motion、または Svelte のトランジション
- アクセシビリティ監査を実行する(stitch-a11y)— WCAG 2.1 AA のレビューと修正」
ユーザーが選択した処理を実行します。
プロンプトのみのワークフロー(Stitch MCP ツールなし)
ツールを利用できない場合は、すぐに使えるプロンプトを代わりに作成します。
- 上記のとおり、ステップ 2〜3(仕様の生成 + プロンプトの組み立て)を実行します
- 組み立てたプロンプトをコピー&ペーストできる形式で出力します。
## Your Stitch Generation Prompt
[Copy this into Stitch at stitch.withgoogle.com]
---
[The full structured prompt]
---
**Settings:**
- Device: [deviceType]
- Model: Gemini 3 Pro (recommended)
ここで停止してください。 結果を捏造しないでください。画面を生成したふりをしないでください。
完全実行後の出力形式
## Design Complete: [Screen Title]
**Project ID:** [numeric ID]
**Screen ID:** [screenId]
**Screenshot:** [downloadUrl]
### What was generated
[Brief description of the screen]
### Files created
- `design-tokens.css` — CSS custom properties (light + dark mode)
- `tailwind-theme.css` — Tailwind v4 @theme block
- `DESIGN.md` — Extended design system documentation
- `src/[...].tsx` or `.svelte` — Generated components
### Next steps
- Run `npm run dev` to preview
- Use `stitch-animate` to add motion
- Use `stitch-a11y` for an accessibility pass
統合 ID 形式テーブル
バグの最大の原因です。すべての MCP ツールには、固有の ID 形式要件があります。
| ツール | projectId | screenId | その他の ID | 備考 |
|---|---|---|---|---|
create_project | — | — | projects/ID を返します | 後で使うために数値を抽出します |
get_project | projects/ID | — | — | フルパス |
delete_project | projects/ID | — | — | フルパス |
list_projects | — | — | — | フルパスを返します |
list_screens | projects/ID | — | — | フルパスを返します |
get_screen | 数値 | 数値 | — | 接頭辞なし |
generate_screen_from_text | 数値 | — | — | 接頭辞なし |
edit_screens | 数値 | 数値の配列 | — | 接頭辞なし |
generate_variants | 数値 | 数値の配列 | — | 接頭辞なし |
create_design_system | 数値(任意) | — | — | Asset の name を返します |
update_design_system | — | — | Asset の name が必須 | — |
list_design_systems | 数値(任意) | — | — | Asset の名前を返します |
apply_design_system | 数値 | 数値の配列 | assetId が必須 | — |
基本ルール:
- 読み取り操作(
get_project、list_screens、delete_project)→projects/IDのフルパス - 生成操作(
generate_screen_from_text、edit_screens、generate_variants、apply_design_system)→ 数値のみ - デザインシステム操作 → 数値の
projectId(任意)、識別には Asset のnameを使用
アンチパターン — 絶対に行わないでください
- 成功したと偽って報告しないでください。 ツールの呼び出しが失敗した場合は、その旨を伝えて停止してください。
- Stitch のプロンプトから直接コードを生成しないでください。 変換スキルを使ってください。
- Stitch プロジェクトとコードリポジトリを混同しないでください。 Stitch プロジェクトはデザイン用のワークスペースです。
- 生成プロンプトから
[Context] [Layout] [Components]の構成を省略しないでください。 generate_screen_from_text、get_screen、edit_screens、generate_variants、またはapply_design_systemにprojects/IDを使わないでください。 これらには数値 ID が必要です。- 既存のプロジェクトがある場合、確認せずに新しいプロジェクトを作成しないでください。 まず
stitch-mcp-list-projectsで既存のプロジェクトを確認してください。 - 失敗しても、すぐに
generate_screen_from_textを再試行しないでください。 60 秒待ってから、最大 1 回だけ再試行してください。呼び出すたびに新しい生成が行われるため、再試行すると画面が重複します。 - 明示的なユーザー確認なしに
delete_projectを呼び出さないでください。 必ず先にプロジェクト名と画面数を提示してください。 - 曖昧なプロンプトで
edit_screensを呼び出さないでください。 生成時と同じ品質基準を適用し、具体的な 16 進数の色コード、名前を指定したコンポーネント、明示的な値を指定してください。 - 変更元となる既存の画面がない状態で
generate_variantsを呼び出さないでください。 バリエーションの生成には元となるデザインが必要です。 edit_screens、generate_variants、またはapply_design_systemにprojects/ID形式を使わないでください。 これらはいずれも数値 ID のみを受け取ります。
参考資料
examples/workflow.md— 最初から最後までの完全な例(SaaS アプリのデザイン → Next.js コード)