1仕組みと動作原理
スキルパッケージには Stitch クライアントが同梱されておらず、実行時にホストの list_tools を使用して MCP プレフィックスを動的に検出し、[prefix]:ツール名 で呼び出します。そのため、同一の指示で異なるホストに対応できます。
1. **Namespace discovery**: Run `list_tools` to find the Stitch MCP prefix. Use this prefix (e.g., `stitch:`) for all subsequent calls.
MCP からデザインの署名付き URL が返された後、モデル組み込みのフェッチではなく、同梱の curl スクリプトによるダウンロードを強制します。これは Google Cloud Storage ドメインでの取得失敗を回避するためです。
4. **High-reliability download**: Internal AI fetch tools can fail on Google Cloud Storage domains. You MUST use the provided script.
ダウンロードされた HTML 内の tailwind.config からデザイントークンを抽出し、**スキル同梱の** resources/style-guide.json に上書きします。これにより、該当ファイルが今回のコンポーネント生成における唯一のカラーパレット情報源となります。
2. **Sync `resources/style-guide.json`**: Overwrite the file with the extracted tokens from THIS project. The style guide MUST match the Stitch project being converted.
生成結果は正規表現ではなく AST で検証されます。Props で終わるインターフェースが必須であり、className 内にハードコードされた16進カラー値を含めることは禁止されています。
if (node.type === 'TsInterfaceDeclaration' && node.id.value.endsWith('Props')) hasInterface = true;
アップロードでは意図的に MCP ツールをバイパスしています。Base64 エンコードがモデルの出力トークンを圧迫するため、Python スクリプトがプロセス内でエンコードを行い、Stitch REST API へ直接 HTTP POST します。
a 53KB PNG becomes ~71K chars of base64). The output gets truncated
code-to-design は純粋なオーケストレーション型スキルです。自身は変換を行わず、順序に従って3つの兄弟スキルにタスクを委譲します。
This skill orchestrates three other skills in sequence:
stitch-loop は .stitch/next-prompt.md をバトンファイルとして使用して無人での複数ページサイトループを実現し、各ラウンドで必ずバトンを更新する必要があります。
1. Reads the current task from a baton file (`.stitch/next-prompt.md`)
静的 HTML 抽出の主力は Puppeteer スクリプトです。ヘッドレス Chrome を起動してレンダリング後の DOM をキャプチャし、CSS と画像をインライン化して単一ファイルにまとめます。
* snapshot.ts — Production-grade Puppeteer-based full-page HTML snapshot
デザインシステムの唯一の信頼できる情報源(Single Source of Truth)は DESIGN.md です。アップロード後はプロジェクト単位でトークンが保持されるため、生成プロンプトにカラーやフォントを再記述しないよう求められます。
After generating `.stitch/DESIGN.md`, make sure to also create or update the
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| api | Stitch API 默认 base URL |
| api | BatchCreateScreens 端点 |
| cli | curl 下载 MCP 返回的签名资产 |
| network | 远程 Stitch MCP(URL 由用户填) |
| cli | npx tsx 运行 TypeScript 脚本 |
| cli | python3 运行上传脚本 |
| package | puppeteer(未在任何 package.json 声明,由 npx tsx 运行时解析) |
| package | @swc/core(已声明依赖,用于 AST 解析) |
| cli | npx shadcn CLI 拉取组件源码 |
| package | @google/design.md linter |
| cli | npm 安装 Remotion 依赖 |
| cli | npx remotion render 出片 |
4推奨統制措置と判定根拠
- SKILL.md: コンプライアンスおよびプラットフォーム利用規約の厳格な規制対象に該当
- scripts/: ローカルスクリプトまたはコマンドの実行: `bash scripts/fetch-stitch.sh` による HTML/スクリーンショットのダウンロード(指示箇所: react-components/SKILL.md および r
- scripts/ 或 SKILL.md: 外部言語パッケージ依存関係の動的インストールの宣言
- 网络端点: 外部ネットワークアクセスの宣言: MCP が返した署名付き URL(Google Cloud Storage ドメイン)を curl で取得: fetch-stitch.sh 内の curl 行; re
- 本地工作目录: ファイル読み書きおよび成果物の出力: .stitch/designs/{page}.html および .png の書き込み(fetch-stitch.sh の2つのコマンド)。
5二重目の独立検証
- [ok] skill.path 的选取 — 重读 .agents/plugins/marketplace.json 与三个 plugin.json:仓库根与 plugins/ 直属层都没有 SKILL.md 或 manifest,故条目只能落在插件级或插件内的具体技能上。根 README 与 marketplace 都把它当『库』对待(displayName=Stitch Skills、三条 source.path),而 brief 要求 official_desc 取 SKILL.md frontmatter 原文——plugins/stitch-design 本身没有 SKILL.md,故选其中承载设计主流程的入口技能目录 plugins/stitch-design/skills/generate-design(name: stitch::generate-design,frontmatter 有完整 description)。
- [ok] official_desc 逐字与折行 — 重读 generate-design/SKILL.md L1-9:description 用 YAML 折叠符 `>-`,跨 5 行;已按折叠后单行逐字收录,未改动用词。另注意 plugins/stitch-design/plugin.json 的插件级 description 与 .codex-plugin/plugin.json 的文案不同(前者用破折号、后者更短),属两处清单不一致,非本 skill 的 description。
- [ok] external_deps:Stitch REST 端点与请求头 — 重读 upload_to_stitch.py:默认 base 为 https://stitch.googleapis.com,URL 拼接为 `{api_url}/v1/projects/{project_id}/screens:batchCreate`,请求头 `X-Goog-Api-Key` 与 `--api-key required=True` 均在位;三处行号与首遍一致。
- [ok] external_deps:curl 调用点与两处重复脚本 — 对 plugins 全量二次检索 curl:react-components 与 react-native 的 fetch-stitch.sh 是同一语句的两个副本,remotion 的 download-stitch-asset.sh 额外做 mkdir -p 与失败 rm -f。三处均为极简包装,不读凭证。
- [ok] security.credential_reads 的三条配置路径 — 重读 upload-to-stitch/SKILL.md 的『Get the API Key』段:Antigravity / Gemini CLI / Claude Code 三条配置路径、X-Goog-Api-Key 取值说明、找不到时必须向用户索要的强约束,以及脚本调用处的 `--api-key <API_KEY>`,逐字与首遍一致。
- [ok] security:任意模块执行分支 — 重读 snapshot.ts 的 auth-script 分支:打印 Running authentication script from 后 `path.resolve(process.cwd(), opts.authScript)` 再 `await import(authPath)`,若导出为函数则以 page 调用。确认这是无校验的本地模块执行入口,参数由调用方(agent)填入。
- [ok] security:SSL 处理是否属安全降级 — 重读 upload_to_stitch.py 的 ssl 相关行与 SKILL.md 的 Troubleshooting 段:脚本用 certifi 提供的 CA 建默认上下文,SKILL.md 建议通过 SSL_CERT_FILE 指定 CA——是修正缺失根证书,不是 disable verification;故未把它计入降级行为。
- [ok] security.file_writes 的路径清单 — 重读 react-components/SKILL.md 与 stitch-loop/SKILL.md 的写入段:.stitch/designs、.stitch/metadata.json、resources/style-guide.json 覆盖写、site/public 迁移、.stitch/next-prompt.md 强制更新均有原文;另补 post_process.ts 与 snapshot.ts 的脚本级写入。写入目标全部位于当前项目或技能自身目录。
6結論
88df56fdbec37bb5…