sandbox_architecture

作る前に、各部分のつながりを描きます。アプリ、サービス、データベース、キュー、外部 API ごとに箱を 1 つ、誰が誰を呼ぶかに矢印を 1 本描き、上から下へ自動で並べたすっきりした一般的な構成図(まっすぐな矢印、角の丸い箱、新しいものは青)にして、ツールの結果と人のアプリの設計のページに表示します。ボックスは要りません。

入力 出力
topic(最大 80 文字、どの版でも同じ)、nodes(1–40 個)、任意の edges(最大 80 本)、任意の note(最大 300 文字:この版で変えたこと)、任意の id(ボックス。そのボックスのページにも設計を表示する) ok、designId(dsg_ で始まる、その設計)、reviewId(dsn_ で始まる、この版)、kind(architecture)、topic、version、appUrl、id を渡したときは boxId、imageUrls、next、注意があれば warnings、人がこの会話にメモを残していれば fromHuman。画像は JSON のあとに image content として続く

ツールのタイトル(MCP の title。クライアントによってはこれでツールを表示します)は Draw an architecture diagram です。注釈は readOnlyHint: false(成功するたびに 1 版保存する)、destructiveHint: false、openWorldHint: false です。

いつ使うか

新しく作るもの・変えるものの作業順は、sandbox_draft(画面)→ sandbox_architecture(サービス)→ sandbox_schema(保存するデータ)→ ボックスで作る → sandbox_review です。作業が触れない段階だけを飛ばします。1 つのサービスの中だけの変更には構成図はありません。

作業でサービスを追加・変更するとき(新しいワーカー、キュー、外部 API の呼び出し、あるサービスが別のサービスを呼ぶようになる)、または人が構成図やフロー図(架構圖、構成図)を求めたときに sandbox_architecture を使います。代わりに Mermaid、HTML、SVG、画像ファイルを書かないでください。このツールが描き、すべての版を残し、人が答えるための道具も用意します。

描くもの以外は sandbox_draft と同じです。ボックスは要らず、設計はアカウントとこの会話に属し、ボックスが停止しても残ります。id は任意で、この作業のボックスを渡すと、そのボックスのページにも設計が表示されます。描画はサーバーで行い、凍結したボックスを起こすことはありません。停止していないボックスを id に渡して成功すれば、そのボックスの使用に数えられ、呼んだ会話がボックスを持つ会話になります(sandbox_draft)。

何を描くか

new: true は、今と比べて新しい・違う箱と矢印に付け、青で描かれます。灰色はそのまま残るものです。図に赤は使いません。比べる相手は今のシステムで、前の版ではありません。前の版から変えたことは note に書き、タイトルの下に青字で入ります。右上の凡例(青は新しいもの・変わるもの、黒と灰色はそのまま)と note の前の文字はアカウントの言語に従います(画像に入る決まった文字)。箱にはボックスのサービスに合わせた名前を付け、sub にそのサービスの名前(sandbox_start で宣言した名前。まだ宣言していなければ、これから動かすときの名前)を書くと、人が図とボックスを対応させられます。文字は人が読む言語で書きます。

nodes:

フィールド 必須 上限 内容
id 必須 64 文字、重複不可 edges が指す名前。描かれない
label 必須 40 文字 それが何か、箱に書く名前(「API」「Postgres」)
sub 60 文字 名前の下の小さめの灰色の文字:サービスやボックスの名前(flowday-api)
new 今と比べて新しい・違う箱:青い枠、薄い青の塗り、青い文字

edges:

フィールド 必須 上限 内容
from 必須 node の id 呼ぶ側
to 必須 node の id、from と同じは不可 呼ばれる側
label 40 文字 どうやって、矢印の横の小さな灰色の文字(「HTTPS」「キューに入れる」「1 時間ごと」)
new 今と比べて新しい・違う矢印:太めの青い矢印で、ラベルも青

図は手描き風ではなく、一般的な構成図として描かれます。白い背景、灰色の枠とごく薄い灰色の塗りの角の丸い四角、先が箱の縁に届く塗りつぶしの矢じりの付いたまっすぐな矢印、普通のサンセリフ書体です。座標は渡しません。箱は上から下へ層に分かれます。矢印が入ってこない箱とつながっていない箱が一番上、それ以外は一番上からの最長の道のりの長さで層が決まります。ループする矢印もそのまま描きます。同じ層の並びは矢印の交差が最も少なくなるよう調整され、いくつもの層をまたぐ矢印は箱の間を通り、矢印のラベルは白い下地で線の横に置かれます。画像は最小 1200 px 幅で、2400 px を超えると全体が縮小され、60% を下回ると warnings が 2 枚に分けるよう勧めます。フォントにない文字(絵文字など)は四角で描かれ、warnings に挙がります。置き換えて描き直してください。

綴りの違うフィールドや余分なフィールドはエラーになり、使えるフィールドが挙がります。黙って無視されることはありません。呼び出しのうち id、topic、note 以外が描画の仕様で、JSON で最大 64 KB です。

例

{
  "topic": "予約とリマインダー",
  "nodes": [
    { "id": "web", "label": "スマホ向けサイト", "sub": "flowday-web" },
    { "id": "api", "label": "API", "sub": "flowday-api" },
    { "id": "db", "label": "Postgres" },
    { "id": "worker", "label": "リマインダー", "sub": "flowday-worker", "new": true }
  ],
  "edges": [
    { "from": "web", "to": "api", "label": "HTTPS" },
    { "from": "api", "to": "db", "label": "読み書き" },
    { "from": "api", "to": "worker", "label": "予約", "new": true },
    { "from": "worker", "to": "db", "label": "名簿を読む", "new": true }
  ]
}

返り値、人の報告、次の版

  • 画像は JSON のあとに image content として続きます。見てから、どこを見てほしいかを人に 1 行で伝えます。designId(dsg_ で始まる)はその設計で、この topic のどの版でも同じ、reviewId(dsn_ で始まる)はこの版の ID、version はアカウント、種類、topic ごとの番号(どのボックスを渡したか、渡したかどうかには関係しない)、appUrl はアプリのその設計のページ /design/<designId>(リンクを知っていれば誰でも開けます。フィードバックを送れるのはアカウントだけ)、boxId は id に渡したボックス(渡さなければない)、imageUrls は 1 時間有効のダウンロード URL、warnings は図が縮小されたことやフォントにない文字を知らせます。
  • 人はアプリのその設計のページと「設計」一覧で、ボックスの id を渡したときはそのボックスのページの「構成図」でも、これを見ます。画像を押すと全体が大きく開き、2 本指で拡大縮小でき、画像の下の「ここを報告」から報告します。ある版への報告は、ボックスがあってもなくても、その版を描いた会話に確認のフィードバックと同じように戻ってきます。アプリのフィードバックを受け取るよう設定した会話を起こすか、この会話が次に設計ツールかボックスに対するツールを呼んだときに fromHuman として届くか、AI へのメッセージをコピー で届きます。sandbox_report に reportId だけを渡して(id なしで)読みます。メッセージは Feedback on architecture "<topic>" v<n>: … で始まります。囲まれた画像、音声の文字起こし、画像に書き込まれた文字(notes[].labels)を読んでください。メッセージの最後は Change it as asked, then call sandbox_architecture again with the same topic for the next version. です。自動でこの会話に戻るには、アダプターが 0.6.0 以降(ボックスの id を渡したときは 0.5.4 以降)で、Claude Code と Gemini CLI のフィードバック用 hook も 0.5.4 以降で入れたものである必要があります(自動で戻るための条件)。詳しくは sandbox_draft。
  • 承認や確定の手順はありません。言われたとおりに直し、同じ topic(id を渡していたなら同じ id も)でもう一度 sandbox_architecture を呼びます。仕様は全体を渡し、前の版から変えたことを 1 文の note に書きます。それが次の版(v2、v3…)で、どのボックスからでも、ボックスなしでもかまいません。

エラー

呼び出しは、どのフィールドかを示すメッセージで失敗します。何も保存されず、どのボックスの使用にも数えられません:box not found (it must be one of yours; see sandbox_status or GET /v1/boxes)(渡した id がこのアカウントのボックスではありません。ボックスなしで描くなら id を外します)、topic is required: …、topic is at most 80 characters、note is at most 300 characters、spec is at most 64 KB、または描画が受け付けないものを <パス>: <問題> で返します。パスは呼び出しの引数そのものです。

  • edges[0].to: "queue" is not a node id (ids: web, api, db)
  • nodes[1].id: duplicate id "api" (also used by spec.nodes[0]):括弧内の spec.nodes[0] は呼び出しの nodes[0] です
  • edges[2]: from and to are the same node "api"; self-loops are not supported
  • spec: unknown field "edge" (allowed: nodes, edges):余分な、または綴りの違う最上位の引数(id、topic、note 以外の引数はすべて描画に渡り、描画はそれらをまとめて spec と呼びます)

そのフィールドを直して呼び直してください。


すべてのツールとトピックはツールリファレンスに並んでいます。