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 supportedspec: unknown field "edge" (allowed: nodes, edges):余分な、または綴りの違う最上位の引数(id、topic、note以外の引数はすべて描画に渡り、描画はそれらをまとめてspecと呼びます)
そのフィールドを直して呼び直してください。
すべてのツールとトピックはツールリファレンスに並んでいます。