sandbox_architecture
動手做之前先畫各部分怎麼接:每個 app、服務、資料庫、佇列或外部 API 一個方塊,誰呼叫誰一條箭頭,自動由上往下排成一張乾淨的一般架構圖(直線箭頭、圓角方塊,新的是藍色),圖回到工具結果,也出現在人的 app 裡這份設計的頁面。不需要箱子。
| 輸入 | 輸出 |
|---|---|
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,人在 app 留話給這個對話時有 fromHuman;圖以 image content 接在 JSON 後面 |
工具標題(MCP 的 title,有的 client 用它顯示這個工具)是 Draw an architecture diagram;註記為 readOnlyHint: false(成功一次就存一版)、destructiveHint: false、openWorldHint: false。
什麼時候用
新做或要改的東西,開發順序是:sandbox_draft(畫面)→ sandbox_architecture(服務)→ sandbox_schema(存的資料)→ 在箱子裡做 → sandbox_review。只有這次工作碰不到的那一步才跳過:只改一個服務裡面的東西就沒有架構圖。
這次工作會加或改服務(新的 worker、佇列、呼叫外部 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」「排程」「每小時」) | |
new |
跟現在比起來新的或不一樣的箭頭:比較粗的藍色箭頭,標籤也是藍字 |
畫法是一般的專業架構圖,不是手繪風:白底、灰外框加很淡灰底的圓角方塊、直線加實心箭頭(尖端碰到方塊邊)、一般的無襯線字。不用給座標。方塊由上往下分層:沒有箭頭指進來的、沒接線的放最上層,其他照從最上層走過來最長要幾步決定第幾層。繞圈的箭頭照樣畫。同一層的順序會調成交叉最少,跨好幾層的箭頭從方塊之間的空隙穿過,箭頭標籤墊白底放在線旁邊。整張圖最窄 1200 px;超過 2400 px 寬就整張縮小,縮到 60% 以下時 warnings 會建議拆成兩張。字型裡沒有的字(例如 emoji)會畫成方框,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 }
]
}
回傳、人的回報與下一版
- 圖以 image content 接在 JSON 後面:先看過圖,再用一句話告訴人要看哪裡。
designId(dsg_開頭)是這份設計,這個topic的每一版都一樣,reviewId(dsn_開頭)是這一版的 id,version照帳號、種類、topic各自編號(不管傳哪個箱子或沒傳),appUrl是 app 裡這份設計的頁面/design/<designId>(拿到連結就打得開,只有帳號本人能回報),boxId是你傳的id那個箱子(沒傳就沒有),imageUrls是一小時有效的下載網址,warnings會說圖被縮小了或有字型沒有的字。 - 人在 app 裡這份設計的頁面和「設計」清單看到它,有傳箱子
id時也在那個箱子頁的「架構圖」那一格;點圖會整張放大、可以兩指縮放,圖底下的「回報這裡」用來回報。人對某一版的回報會回到畫那一版的對話,照驗收回饋的方式回來,有沒有箱子都一樣:叫醒設定好接收 app 回饋的對話,或在這個對話下一次呼叫設計工具或對任何箱子呼叫工具時以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,規格整份重給,加一句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)
改好那個欄位再呼叫一次。
所有工具與主題都列在工具參考。