昨天測完 Assistant Plugins,四種整合方式已經走過三種。今天進入最後一種:Project Instructions。它是四種裡唯一不需要安裝任何東西的做法——不裝套件、不設 MCP、不裝外掛,只要把官方寫好的指令貼進 Claude Project 就能開始用。今天先完成設定並看懂這段指令在做什麼,實際產圖留到明天。
前三種方式雖然形式不同,但骨架是一樣的:AI 呼叫某個工具,工具負責把圖表內容變成 draw.io 看得懂的東西。App Server 和 Tool Server 是 MCP 工具,Assistant Plugins 是外掛帶進來的指令與程式。
Project Instructions 沒有這一層。它的做法是:把一段夠詳細的指令放進 Claude Project 的專案指令裡,教會 Claude 自己算出一個 draw.io 網址。整件事靠的是 Claude 本身的程式碼執行能力,而不是外接的工具。
這也決定了它的適用範圍:官方明確標示它是 Claude.ai 搭配 Projects 的做法,前三種可以在 Claude Code、Codex CLI 等環境使用,這一種不行。換句話說,它不是前三種的替代品,而是「什麼都不能裝的環境」下還能用的方案——公司電腦不給裝 npm 套件、不給改設定檔的情況,這種做法就有意義。
官方把指令放在 repo 的 project-instructions/ 資料夾。設定方式是把兩份文件的內容,一起貼進 Claude Project 的專案指令欄位:
claude-project-instructions.txt:主指令,教 Claude 怎麼判斷格式、怎麼產生網址、怎麼輸出結果。shared/xml-reference.md:draw.io XML 的參考資料,涵蓋連線走向、容器、圖層、標籤、metadata、深色模式等寫法。第二份文件值得多看一眼。它的存在是為了讓 Claude 知道 draw.io 的 XML 應該怎麼寫。今天先注意一件事:官方之所以要附這份參考,等於承認了「AI 知道 draw.io 是什麼」和「AI 寫得出正確的 draw.io XML」是兩回事,中間需要有人把規則寫下來。這個結構,跟這個系列後面要做的事情其實是同一套邏輯。
讀過主指令後,它的運作流程大致是三段:選格式 → 用程式算出網址 → 輸出成 HTML。
第一段是選格式。 指令給了 Claude 一張對照表,讓它依圖表類型挑輸入格式:Mermaid 適合流程圖與循序圖,CSV 適合階層式資料,XML 則用在版面較複雜、需要精細控制的場合。這三種輸入格式,和 Day 10 提到 MCP Tool Server 支援的三種是同一組。
第二段是把圖表內容變成網址。 指令要求 Claude 執行 Python,依序做三件事:先用 zlib 壓縮圖表內容,再做 base64 編碼,最後把格式、壓縮標記與資料組成參數,接在 draw.io 網址的 # 之後。
這裡的技術細節和 Day 11 是一致的:圖表內容編碼在 # 之後,這段內容不會隨請求送到伺服器,瀏覽器載入 draw.io 時才在本地還原成圖面。所以 Day 11 提過的那個雙面性也一樣成立——資料不進伺服器,但網址本身就帶著整張圖,轉傳連結等於把圖表內容一併傳出去。
第三段是輸出。 Claude 不會把網址打在回覆裡,而是產生一個內含按鈕的 HTML 頁面,讓使用者點按鈕開啟 draw.io。
第三段初看有點多此一舉——算出網址直接貼出來不就好了?
指令裡寫得很直接:語言模型會默默地把 base64 字串弄壞,而這種字串只要錯一個字元,整條連結就報廢。所以指令明文禁止 Claude 在回覆中輸入、重打或重現產生出來的網址,改用 HTML 產出物把連結送出去,讓網址「永遠不經過 Claude 的文字生成」。
這一段我覺得是今天最值得記下來的部分。它處理的不是 draw.io 的問題,是 AI 本身的問題:AI 產生長字串時會出錯,所以要設計一條路徑讓那段字串繞過 AI 的輸出。這是一種很典型的約束思路——不是要求 AI 更小心,而是把容易出錯的環節從 AI 手上拿走。
同一份指令裡還有幾條類似性質的規則,例如 XML 裡絕對不能出現任何註解、特殊字元必須跳脫。它們共同說明了一件事:即使是官方提供的做法,也需要靠一長段明確的規則,才能讓產出穩定。這正好呼應 Day 17 要開始談的失敗模式——AI 畫圖會出什麼錯,以及為什麼需要約束。
實際操作的步驟不多:
project-instructions/ 資料夾,取得 claude-project-instructions.txt 與 shared/xml-reference.md 兩份文件的內容。
需要留意的是,這種做法依賴 Claude 執行 Python 來完成壓縮與編碼,因此設定完成後值得先確認這個 Project 的程式碼執行功能可以正常運作,否則指令走到第二段就會卡住。
到這裡完成了兩件事:把官方的兩份指令貼進 Claude Project,並看懂這段指令的運作邏輯——選格式、用 Python 壓縮編碼算出網址、再用 HTML 把連結送出去。
跟前三種比,這是設定門檻最低的一種:沒有安裝、沒有設定檔、沒有環境依賴,複製貼上就結束。但它也是最「靠 prompt 撐著」的一種——沒有工具保證行為,一切取決於那段指令寫得夠不夠明確。這個取捨值得實測過再下結論。
明天進入下篇,一樣用「電商購物網站登入」子流程實際產圖,看看網址與 HTML 按鈕的呈現方式,整理 Project Instructions 的優點與限制,並把四種整合方式放在一起做總結,說明我最後為什麼選了其中一種。