<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Maguyva 部落格</title><description>深入探討 MCP 程式碼智慧、AI 代理架構，以及打造多語言程式碼搜尋平台的心得。</description><link>https://maguyva.ai/zh-hant/blog</link><language>zh-hant</language><atom:link href="https://maguyva.ai/zh-hant/rss.xml" rel="self" type="application/rss+xml"/><item><title>會隨行的上下文</title><link>https://maguyva.ai/zh-hant/blog/context-that-travels</link><guid isPermaLink="true">https://maguyva.ai/zh-hant/blog/context-that-travels</guid><description>Cursor 的索引器在 Cursor 裡非常出色。Maguyva 是同一個代理可以從其他編輯器、CLI 和 CI 中查詢的託管 MCP 地圖。</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Cursor 的索引器在 Cursor 裡非常出色。Tab 補全、行內編輯、聊天，以及那個視窗裡的代理，都已經建立在 Cursor 為開啟的工作區維護的專案索引之上。如果 Cursor 是你唯一寫程式碼的介面，而那個索引已經能找到正確的檔案，那就留在那裡。這是誠實的「原地不動」情形，也理應是本文的第一句話。&lt;/p&gt;
&lt;p&gt;這篇文章講的是普通一週中的另一半。同一個儲存庫也會在 Claude Code 中開啟，被 Codex CLI 詢問，在第二台機器上被審查，或者被在 CI 中執行的代理查詢。問題不是「哪個索引器更好」。問題是，代理在一個視窗裡信任的地圖，和它在下一個視窗裡信任的地圖，是不是同一張。&lt;/p&gt;
&lt;p&gt;Maguyva 就是那張會隨行的地圖。它是一個遠端 MCP 程式碼庫上下文層。代理查詢它的方式，和查詢其他任何 MCP 工具一樣。結果會以附行號的排序路徑傳回。Cursor 仍然是編輯器。移動的是上下文。&lt;/p&gt;
&lt;h2 id=&quot;cursor-的索引器是做什麼用的&quot;&gt;Cursor 的索引器是做什麼用的&lt;/h2&gt;
&lt;p&gt;Cursor 內建的索引存在的目的，是讓編輯器內的聊天、代理和搜尋能夠檢索相關程式碼，而不只是依賴模型原始上下文視窗所能容納的內容。這對 IDE 來說是正確的設計。這個索引是 Cursor 原生的。它不是 MCP 伺服器，也無法從任何其他用戶端存取。&lt;/p&gt;
&lt;p&gt;它的工作方式，按照撰寫本文時 Cursor 公開文件和 Cursor 自身說法的描述是這樣的：主要的搜尋路徑不再是雲端 embedding 索引。Cursor 團隊在其社群論壇上表示，專門的語意／基於 embedding 的搜尋正在逐步淘汰，改採基於 grep 的檢索，因為現今的模型不靠它，自己就能把即時的程式碼樹搜尋得夠好。取而代之的是 Instant Grep，一個由 n-gram、倒排串列和布隆過濾器建構的本機搜尋索引，存放在一張記憶體對應的查找表中，因此查詢是在開發者自己的機器上解析的，而不是在伺服器上。&lt;/p&gt;
&lt;p&gt;索引本身存放在儲存庫自己的 &lt;code&gt;.git/cursor/&lt;/code&gt; 目錄中，錨定在某個特定的 git 提交上；自那次提交以來的編輯會疊加在其之上，而不是觸發重新掃描，只有當本機狀態與索引建置時的狀態嚴重偏離時，索引才會重建。因為它位於 &lt;code&gt;.git&lt;/code&gt; 內部，它永遠不會被追蹤，也永遠不會被推送——刪除該資料夾，索引就消失了。&lt;code&gt;.gitignore&lt;/code&gt; 在設計上就自動受到遵守，因為只有受 git 追蹤的內容才符合條件，&lt;code&gt;.cursorignore&lt;/code&gt; 則在讀取路徑上被強制執行。這條路徑上已經沒有伺服器端的 embedding 步驟，也沒有遠端向量資料庫。早先的文件描述了一種雲端輔助設計——分塊加密、Merkle 樹同步、團隊成員間的索引重複使用——而 Cursor 自己的團隊後來表示這種設計正在被淘汰，所以本文不再把它描述為當前狀態。&lt;/p&gt;
&lt;p&gt;編輯器內一個突出的亮點是 Cursor 的 Explore 子代理。它可以在自己的上下文視窗中，用一個更快的模型發起多路平行搜尋，只傳回相關的發現，這樣主對話就不會被搜尋結果撐大。這是編輯器內部一項真正的優勢。保留它。&lt;/p&gt;
&lt;p&gt;多根工作區也受支援：每個開啟的資料夾的上下文都對 Agent 可用。一些依賴 git 的功能，比如 worktree，在多根設定中會被停用，而 Cloud Agents 完全不支援多根工作區。&lt;/p&gt;
&lt;p&gt;這些都不是離開 Cursor 的理由。這只是對一張地圖的準確描述——它在自己所處的地方非常出色。&lt;/p&gt;
&lt;h2 id=&quot;隨行到底意味著什麼&quot;&gt;「隨行」到底意味著什麼&lt;/h2&gt;
&lt;p&gt;當同樣的問題在不止一個用戶端上傳回同樣類型的答案，並帶有你可以開啟檢視的引用時，一張地圖就算是會隨行的。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 Cursor 中：「&lt;code&gt;parseConfig&lt;/code&gt; 定義在哪裡，誰呼叫了它？」&lt;/li&gt;
&lt;li&gt;在 Claude Code 中，同一個儲存庫：同樣的問題。&lt;/li&gt;
&lt;li&gt;在 Codex CLI 中，一台從未開啟過 Cursor 視窗的審查機器上：同樣的問題。&lt;/li&gt;
&lt;li&gt;在一個會說 MCP 的 CI 代理中：同樣的問題，針對同一個託管的快照。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果每個介面都建置自己的私有索引，你擁有的就不是一張地圖，而是幾份彼此漂移的快取。編輯器索引可能對磁碟上的程式碼樹是最新的。CLI 工作階段可能落後一天。CI 任務可能看的是另一份簽出的程式碼。而代理聽起來照樣自信滿滿。&lt;/p&gt;
&lt;p&gt;Cursor 的索引器本來就不該解決這個問題。因為它活在編輯器內部，它建立的上下文就是為那個編輯器服務的。同時還需要 CLI、CI 管線或另一個編輯器的讀者，需要一個針對這些介面的獨立工具。這是一個範圍事實，不是缺陷。Maguyva 就是那個獨立的工具。&lt;/p&gt;
&lt;p&gt;Cursor 索引器公開的語言數量，在本文可以使用的資料中沒有說明。Maguyva 公開支援 279 種以上的語言和基於文字的技術。Cursor 的定價這裡也沒有照搬；請參考他們的定價頁面。Maguyva 按工作區計費，而不是按席位，公開的方案為 $0、$19、$49 和 $149，取決於已索引的規模和工作區大小。&lt;/p&gt;
&lt;h2 id=&quot;一張託管地圖每個-mcp-用戶端&quot;&gt;一張託管地圖，每個 MCP 用戶端&lt;/h2&gt;
&lt;p&gt;Maguyva 是一個遠端 MCP 伺服器。你連接 GitHub，選擇儲存庫，雲端管線會建立符號、圖邊和一張排序後的地圖。你把一個 API 金鑰新增到你已經在用的用戶端的 MCP 設定中。Maguyva 為 24 個有文件記錄的 MCP 用戶端（包括 Cursor）提供設定指南，也可以連接其他支援標準設定的 MCP 相容用戶端。&lt;/p&gt;
&lt;p&gt;如果你在 Cursor 中工作，&lt;a href=&quot;https://maguyva.ai/zh-hant/for-cursor&quot;&gt;Cursor 設定頁面&lt;/a&gt; 是特定於該編輯器的路徑。同一個伺服器也服務於 Claude Code、VS Code、Windsurf、Codex CLI 等。你不需要更換編輯器。你為每個代理提供同樣的工具介面：11 個面向客戶的 MCP 工具，涵蓋搜尋、符號、依賴分析、檔案檢索、儲存庫上下文和確定性實用工作流程。語意、結構、圖和文字檢索被融合成排序結果。&lt;/p&gt;
&lt;p&gt;這就是可移植性帶來的好處。你今天早上在 Cursor 中核實過的引用，和 Codex CLI 今晚傳回的引用形式相同。檔案路徑和行號。開啟它們。如果錯了，你會看到。如果對了，下一次編輯就有地方落腳。被認可的說法是更少的幻覺編輯，而不是承諾每一次編輯都正確。&lt;/p&gt;
&lt;p&gt;新鮮度是公開的。快照帶有時間戳，因此代理知道自己讀到的是哪個版本的程式碼樹。重建節奏是：免費方案每天一次，付費方案每小時一次。誠實的限制是未同步的本機工作：只存在於工作樹中的編輯，還沒有進入託管地圖。無論你從哪個用戶端查詢，這個限制都是一樣的，而這正是重點所在。用戶端之間的漂移不再是第二個隱藏的限制。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/zh-hant/docs&quot;&gt;文件&lt;/a&gt;給出了適用於每個用戶端的啟用迴圈：索引一個你已經瞭解的儲存庫，連接用戶端，問一個你能核實的問題。先在 Cursor 中做一次。再從你在審查那天真正會用的 CLI 中做一次。如果兩次回答引用的是同一個處理函式，就代表地圖確實隨行了。&lt;/p&gt;
&lt;h2 id=&quot;兩張地圖如何並存&quot;&gt;兩張地圖如何並存&lt;/h2&gt;
&lt;p&gt;兩個都用。它們不是比較頁那種意義上的替代關係。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;讓 Cursor 的索引器繼續為磁碟上的專案工作。讓 Explore、Instant Grep 和編輯器內的代理使用它。這個迴圈是原生且快速的。&lt;/li&gt;
&lt;li&gt;在 Cursor 中把 Maguyva 新增為 MCP 伺服器，讓同一個工作階段也能查詢託管的工作區地圖。Cursor 是一個有文件記錄的 Maguyva 用戶端。你不是在兩個索引之間二選一、刪掉另一個。&lt;/li&gt;
&lt;li&gt;把同一個 Maguyva 伺服器新增到 Claude Code、Codex CLI，或任何接觸該儲存庫的其他 MCP 用戶端。一種 API 金鑰形式。一個工作區。&lt;/li&gt;
&lt;li&gt;如果某個 CI 代理相容 MCP，把它指向同一個伺服器。它會讀到和膝上型電腦一樣的、帶時間戳的快照。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;編輯器索引仍然是回答「此刻這個視窗裡磁碟上有什麼」的最佳工具。託管地圖則是回答「今天要接觸這個工作區的每一個代理眼中它是什麼樣子」的最佳工具。這兩句話並不衝突。&lt;/p&gt;
&lt;p&gt;工作區配額公布在&lt;a href=&quot;https://maguyva.ai/zh-hant/pricing&quot;&gt;定價頁面&lt;/a&gt;上：儲存庫數、已索引行數和使用者數，按工作區計費。代理和人類共享同一個使用者數。先用一個你能自己評判的儲存庫免費開始。等引用經受住了與程式碼樹接觸的考驗之後，再提升工作區規模。&lt;/p&gt;
&lt;h2 id=&quot;本文不主張的事&quot;&gt;本文不主張的事&lt;/h2&gt;
&lt;p&gt;本文不主張 Cursor 的索引器薄弱、不完整，或是更換編輯器的理由。本文的第一句話恰恰相反。&lt;/p&gt;
&lt;p&gt;本文不主張 Maguyva 取代了 Instant Grep 或 Explore 子代理。那些是 Cursor 的功能。它們留在 Cursor 裡。&lt;/p&gt;
&lt;p&gt;本文不為任何一個產品編造語言數量、延遲數字或 token 節省數字。未知的數字保持未公開。&lt;/p&gt;
&lt;p&gt;本文不假裝未推送的本機工作已經在託管地圖裡。帶時間戳的快照讓這個限制變得可見，而不是消除它。&lt;/p&gt;
&lt;p&gt;測試很普通。索引一個你已經瞭解的儲存庫。問一個你能核實的問題，先在 Cursor 中，再在第二個 MCP 用戶端中。會隨行的上下文，就是兩處得到同一條引用。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// same map, wherever you opened it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>MCP</category><category>Portability</category></item><item><title>先地圖，後審查</title><link>https://maguyva.ai/zh-hant/blog/map-first-review-second</link><guid isPermaLink="true">https://maguyva.ai/zh-hant/blog/map-first-review-second</guid><description>在編碼代理動筆之前，先讓它紮根於一張儲存庫地圖。之後再讓 Greptile 審查這個提取要求。這是互補的搭檔，不是替代關係。</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;在一個提取要求的兩端，坐著兩項不同的工作。在代理動筆之前，它需要一張即將修改的程式碼樹的地圖。在代理開啟 PR 之後，應該有什麼東西對照系統的其餘部分來讀這個變更，並留下人類可以據以行動的評論。&lt;/p&gt;
&lt;p&gt;這兩項工作從遠處看很相似，因為二者都涉及「理解程式碼庫」。但它們不是同一個產品。一個回答的是「這個改動應該落在哪裡？」。另一個回答的是「這個 diff 破壞了什麼，而逐行檢查的程式碼檢查工具會漏掉？」。把它們混為一談，只會產出更差的初稿和更嘈雜的審查。&lt;/p&gt;
&lt;p&gt;這篇文章是一份聯合工作流程指南。Maguyva 是代理首先查詢的地圖。Greptile 是隨後為 PR 新增評論的審查代理。這個搭檔在設計上就是互補的：Maguyva 不審查提取要求，Greptile 也不會取代代理用來撰寫這些改動的上下文層。&lt;/p&gt;
&lt;h2 id=&quot;為什麼這種分工有用&quot;&gt;為什麼這種分工有用&lt;/h2&gt;
&lt;p&gt;一個從訓練先驗加上幾個貼上檔案出發的編碼代理，會編造一條看似合理的路徑並編輯它。這就是錯誤檔案的失敗模式，是一個檢索問題。Maguyva 是一個遠端 MCP 程式碼庫上下文層：語意、結構（AST）、圖／依賴和文字檢索融合成排序結果，再加上符號查詢和檔案擷取。有依據的答案以 &lt;code&gt;path/file.ext:line&lt;/code&gt; 的形式傳回，讓你能在補丁存在之前就拒絕一個錯誤的結果。這個主張保持謙遜：更少的幻覺編輯。模型仍然可能猜測。只是第一步不再是猜測。&lt;/p&gt;
&lt;p&gt;Greptile 是一個 AI 程式碼審查代理。用他們自己的話說，它以對程式碼庫的完整理解自動審查每一個提取要求，並將這與孤立檢查檔案、而非整個系統的傳統程式碼檢查工具相對照。它的設定就是安裝 GitHub 或 GitLab 應用程式並選擇儲存庫。沒有需要你維運的本機索引。託管方式是 Greptile Cloud（他們表示符合 SOC 2 Type II，並可應要求提供報告），也為企業提供自託管選項。&lt;/p&gt;
&lt;p&gt;他們自己的編號流程是：連接儲存庫，並為每個函式、類別和依賴建置依賴圖；在每個提取要求上，使用那張完整儲存庫圖分析變更，並在大約三分鐘內以附修復建議的 PR 評論形式發布結果；每條評論都可以把問題移交給團隊已經在用的編碼代理。他們還表示會持續閱讀先前人類留下的 PR 評論，以學習團隊的編碼標準並減少嘈雜的建議。據他們所說，這套學習系統需要 2 到 3 週來適應。&lt;/p&gt;
&lt;p&gt;這是審查，不是起草。Greptile 的突出之處在於，針對已經落地到 PR 中的變更提供完整儲存庫圖上下文，隨後是一個閉環，把發現結果發給 Claude Code、Codex、Conductor、Cursor 或 Devin。Maguyva 的突出之處在於代理在那次變更被寫下之前查詢的排序地圖。兩者都用。不要要求任何一方去做另一方的工作。&lt;/p&gt;
&lt;p&gt;Maguyva 與 Greptile 之間沒有宣布任何官方第一方產品整合。你也不需要。Maguyva 透過 MCP 與代理對話。Greptile 透過自己的應用程式與 GitHub 或 GitLab 對話。它們在提取要求處相遇。沒有黏合用的腳本，也沒有把一個工具接到另一個工具的排程任務。這個搭檔不需要 bash，因為每個產品都已經站在自己應有的位置上。&lt;/p&gt;
&lt;h2 id=&quot;這不是什麼&quot;&gt;這不是什麼&lt;/h2&gt;
&lt;p&gt;這不是對 Greptile 的拆解。這不是一篇「換個審查工具」的文章。Greptile 於 2024 年 3 月 5 日作為 Y Combinator W24 公司在 Hacker News 上發表，那篇貼文是很多人第一次瞭解這款產品的方式。如果你也是這樣發現他們的，那就繼續用。這個頁面補上的是那個迴圈中缺失的前半段：先讓代理紮根，使 Greptile 看到的那個 PR 一開始就瞄準了正確的檔案。&lt;/p&gt;
&lt;p&gt;Greptile 的行銷材料主打審查速度和抓 bug 能力的說法。請把這些當作 Greptile 自己的說法，而不是獨立核實過的數字。本文不會把它們當作事實重複。&lt;/p&gt;
&lt;p&gt;語言覆蓋也是同樣的誠實問題。Greptile 把支援範圍表述為覆蓋所有程式語言，而不是一份列舉清單；沒有給出精確的數字。Maguyva 公開支援 279 種以上的語言和基於文字的技術，並在涉及技術問題時，在網站上給出技術上的細分（有解析器支援的 AST 與純文字）。這是兩個不同的產品，做出不同的聲明。不要把它們混為一談。&lt;/p&gt;
&lt;p&gt;Greptile 的定價沒有出現在本文可以使用的資料中。付費方案是存在的；請參考他們的定價頁面。Maguyva 按工作區計費，而不是按席位。方案從免費開始。如果你需要工作區數字，&lt;a href=&quot;https://maguyva.ai/zh-hant/pricing&quot;&gt;定價頁面&lt;/a&gt; 上列出了公開的方案。&lt;/p&gt;
&lt;h2 id=&quot;工作流程&quot;&gt;工作流程&lt;/h2&gt;
&lt;p&gt;三個有名字的階段。按這個順序執行。第一次嘗試這個搭檔時，一個都不要跳過。&lt;/p&gt;
&lt;h3 id=&quot;1-maguyva-上下文&quot;&gt;1. Maguyva 上下文&lt;/h3&gt;
&lt;p&gt;索引一個你已經瞭解的儲存庫。連接你已經在用來寫程式碼的 MCP 用戶端——Claude Code、Cursor、Codex CLI、VS Code、Windsurf，或者其他 MCP 相容用戶端。Maguyva 為 24 個有文件記錄的 MCP 用戶端提供設定指南，也能連接支援標準 MCP 設定的其他用戶端。&lt;/p&gt;
&lt;p&gt;在任何人寫下一行程式碼之前，先問一個你能評判的問題。「工作階段過期在哪裡處理，什麼在呼叫它？」比「修一下認證」是更好的第一步。要求引用。開啟 &lt;code&gt;file.ext:line&lt;/code&gt; 結果。跟著符號走。確認你即將觸碰的依賴關係。&lt;/p&gt;
&lt;p&gt;Maguyva 提供 11 個面向客戶的 MCP 工具，涵蓋搜尋、符號、依賴分析、檔案檢索、儲存庫上下文和確定性實用工作流程。四種檢索模式融合成排序結果；當你已經知道名字時，&lt;code&gt;find_symbol&lt;/code&gt; 是一個獨立的工具。&lt;a href=&quot;https://maguyva.ai/zh-hant/docs&quot;&gt;文件&lt;/a&gt; 描述了最短路徑：先免費開始，索引一個你已經瞭解的儲存庫，連接用戶端，然後問一個你能核實的問題。&lt;/p&gt;
&lt;p&gt;快照帶有時間戳，因此代理能判斷自己讀到的是哪個版本的程式碼樹。誠實的限制是未同步的本機工作。如果編輯只存在於工作樹中，還沒有被推送，託管地圖就還不包含它。指令檔案（&lt;code&gt;CLAUDE.md&lt;/code&gt;、&lt;code&gt;AGENTS.md&lt;/code&gt;）在這裡依然有它們的位置，用來記錄慣例和不該觸碰的東西。它們不是一張活的地圖。用它們來規範行為。用 Maguyva 來核實事實。&lt;/p&gt;
&lt;p&gt;在引用經受住與儲存庫接觸的考驗之前，不要讓代理開啟 PR。這道關卡就是這個階段的全部意義所在。&lt;/p&gt;
&lt;h3 id=&quot;2-代理-pr&quot;&gt;2. 代理 PR&lt;/h3&gt;
&lt;p&gt;同一個代理現在會在你已經付費使用的用戶端裡寫下這個改動。Maguyva 既不是編輯器，也不是審查者。代理仍然負責生成 diff。你仍然像以前一樣，在 GitHub 或 GitLab 上開啟提取要求。&lt;/p&gt;
&lt;p&gt;應該不同的是第一個檔案。這個 PR 應該點明實際實作該行為的處理函式、將會被破壞的呼叫端，以及在改動出錯時會失敗的測試。如果第一階段被跳過了，第三階段就會把評論花在一個落在錯誤套件裡的改動上。Greptile 依然能發現系統性的問題。但它不應該還要從一條幻覺出來的路徑中恢復過來。&lt;/p&gt;
&lt;p&gt;把 PR 的範圍控制好。一個有依據的第一個檔案，不是重寫整個模組的許可證。這個互補的搭檔之所以有效，是因為代理先帶著地圖完成了一項工作，然後請審查者在一個有邊界的 diff 上完成另一項工作。&lt;/p&gt;
&lt;h3 id=&quot;3-greptile-審查&quot;&gt;3. Greptile 審查&lt;/h3&gt;
&lt;p&gt;Greptile 已經透過 GitHub 或 GitLab 應用程式連接到儲存庫。在新的提取要求上，它使用自己建置的完整儲存庫圖分析改動，並以附修復建議的評論形式發布結果。他們自己的材料把這個過程的時長定在大約三分鐘。&lt;/p&gt;
&lt;p&gt;像讀一位仔細的隊友那樣讀這些評論：開啟被引用的位置，判斷這個發現是否真實，然後再行動。當 Greptile 提供「Fix with your Agent」時，它會把問題——檔案路徑、行號、建議程式碼——傳送給 Claude Code、Codex、Conductor、Cursor 或 Devin。「Fix All」會一次性傳送審查中的所有問題。他們還為這次移交提供了 Greptile MCP 和一個 Claude Code 外掛。Maguyva 不在那份具名的目標清單上；這種缺席不是問題。Maguyva 已經在第一階段完成了自己的工作。寫下這個 PR 的編碼代理，才是應該接收修復負載的那一方。&lt;/p&gt;
&lt;p&gt;在最初的 2 到 3 週裡，預期會有一些噪音，因為 Greptile 的學習系統正在適應你團隊實際留下的評論。這是他們公布的時間表，不是這個搭檔的缺陷。人類審查依然在這個迴圈裡。Greptile 是自動化的第一道關卡，不是合併按鈕。&lt;/p&gt;
&lt;p&gt;如果一條 Greptile 評論指向了代理在第一階段從未查詢過的檔案，這是一個有用的訊號。要麼是地圖漏掉了一個呼叫端，要麼是代理跳過了一次引用。針對這條評論修正草稿。不要關掉審查者。&lt;/p&gt;
&lt;h2 id=&quot;如何保持這種互補關係的誠實&quot;&gt;如何保持這種互補關係的誠實&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Maguyva 永遠在先。對一個錯誤檔案的 PR 進行審查，依然是在審查錯誤的檔案。&lt;/li&gt;
&lt;li&gt;Greptile 永遠在後。一份引用充分的草稿，依然需要一次系統層面的 diff 通讀。&lt;/li&gt;
&lt;li&gt;不要要求 Maguyva 發布 PR 評論。它不會這麼做。&lt;/li&gt;
&lt;li&gt;不要要求 Greptile 在代理還在選擇路徑時，充當它的第一層檢索工具。這不是他們的 GitHub 或 GitLab 應用程式被設計來做的事。&lt;/li&gt;
&lt;li&gt;不要編造一個「同步」兩者的 bash 管線。PR 就是介面。&lt;/li&gt;
&lt;li&gt;獨立地驗證兩端。索引一個你已經瞭解的儲存庫。問一個你能核實的問題。然後開啟一個小的 PR，看看 Greptile 實際上評論了什麼。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一旦被命名，這個迴圈就很普通了。先地圖。再代理 PR。再審查。每個產品都留在自己擅長的那一側提取要求上。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// map first. review second. in that order.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>Workflow</category><category>Code Review</category></item><item><title>在沒有本地索引器的情況下，給 AI 代理大型儲存庫的上下文</title><link>https://maguyva.ai/zh-hant/blog/large-repo-context-without-a-local-indexer</link><guid isPermaLink="true">https://maguyva.ai/zh-hant/blog/large-repo-context-without-a-local-indexer</guid><description>如何在不在膝上型電腦上執行本地索引器的情況下，從雲端為編碼代理提供一張大型儲存庫的可查詢地圖。</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;一個大型儲存庫放不進上下文視窗，而如果你曾經把膝上型電腦上的索引器指向一個真正的 monorepo，你就知道它在那裡也放不舒服——記憶體飆升，第一次索引要花一個小時，而你的代理在下一個工作階段開始時，依然在猜哪些檔案重要。&lt;/p&gt;
&lt;p&gt;通常的答案是在編輯器旁邊執行一個索引器，對於能舒服放進一台機器的儲存庫來說，這是個不錯的答案。如果你的 monorepo 在 Cursor 中已經索引得很快，而那也是你唯一需要這張地圖的地方，那麼這篇文章沒有什麼可以補充的——跳過它就好。&lt;/p&gt;
&lt;p&gt;這篇文章講的是另一種情況——當一個代理需要一張大型儲存庫的可查詢地圖，而你又不想為此執行本地索引器時。&lt;/p&gt;
&lt;h2 id=&quot;什麼時候本地索引器是錯誤的工具&quot;&gt;什麼時候本地索引器是錯誤的工具&lt;/h2&gt;
&lt;p&gt;本地索引假定程式碼存在於查詢它的那台機器上，而在真正的 monorepo 規模下，即便在單個編輯器內部，這個假設也會變得吃緊。這個儲存庫單純就是大到你不想一直在膝上型電腦上保持熱索引：你在一個套件裡工作，而影響範圍卻在三個目錄之外，一次針對兩百萬行程式碼樹的冷啟動首次索引，不是你想經歷兩次的事——無論是在你自己的機器上，還是在一個從未複製過這棵程式碼樹的 CI 執行器上。或者，某個同事應該能查詢你在用的同一張地圖，而不必等自己的機器吃力地跑完同一個索引。&lt;/p&gt;
&lt;p&gt;這些都不是丟棄一個好的編輯器索引器的理由。這是一個理由，說明你還應該擁有一張任何代理都能透過 MCP 查詢的託管地圖。&lt;/p&gt;
&lt;p&gt;而規模問題比「檔案太多沒法貼上」要深得多。在一棵大程式碼樹上，有意思的問題幾乎從來不是「給我看這個檔案」——而是哪個檔案、哪個符號、哪些呼叫端、哪些測試。一個從列出 &lt;code&gt;src/&lt;/code&gt; 並讀取前三個結果開始的代理，會心安理得地漏掉 &lt;code&gt;apps/api&lt;/code&gt; 裡的處理函式和 &lt;code&gt;packages/sdk&lt;/code&gt; 裡生成的用戶端。你需要的是從整棵程式碼樹建置、再排序、並附上引用的檢索。&lt;/p&gt;
&lt;h2 id=&quot;大型儲存庫的上下文到底意味著什麼&quot;&gt;「大型儲存庫的上下文」到底意味著什麼&lt;/h2&gt;
&lt;p&gt;把檔案一股腦塞進提示詞不是上下文——那只是程式碼樹更小、更差的一份副本。你的代理真正需要的是提出問題，並得到帶引用的答案：這個符號定義在哪裡、誰在呼叫它，我即將修改的模組有什麼依賴它，哪個測試檔案覆蓋了這個行為，以及程式碼樹&lt;em&gt;現在&lt;/em&gt;是什麼樣子，而不是上個季度的樣子。&lt;/p&gt;
&lt;p&gt;這些答案必須來自一個根據你的儲存庫建置的索引，而不是模型對別人儲存庫的記憶，而且這個索引必須存在於代理上下文視窗之外的某個地方。對這個問題來說，它也應該存在於你膝上型電腦之外的某個地方。&lt;/p&gt;
&lt;p&gt;還有一件事，指令檔案替你做不到：&lt;code&gt;CLAUDE.md&lt;/code&gt; 和 &lt;code&gt;AGENTS.md&lt;/code&gt; 是放置慣例和行為規範的正確地方，但它們不是一張兩百萬行程式碼樹的、活的、經過排序的、可查詢的地圖。行為用規則，事實用儲存庫智慧。&lt;/p&gt;
&lt;h2 id=&quot;在雲端建置地圖從任何用戶端查詢它&quot;&gt;在雲端建置地圖，從任何用戶端查詢它&lt;/h2&gt;
&lt;p&gt;Maguyva 是一個遠端 MCP 程式碼庫上下文層。你連接 GitHub，選擇你的儲存庫，然後就可以放手，讓雲端管線解析程式碼樹、建立符號和圖邊、維護一張排序後的地圖——永遠不需要本地索引器。&lt;/p&gt;
&lt;p&gt;當你推送程式碼時，變更的檔案會被增量解析，圖和排序層會按排程重建：免費方案每天一次，付費方案每小時一次。每份快照都帶有時間戳，讓你的代理能分辨自己讀到的是哪個版本的程式碼樹。這裡誠實的限制是未同步的本機工作——只存在於你工作樹中、從未推送過的編輯，還不在託管地圖裡。&lt;/p&gt;
&lt;p&gt;然後，你把 API 金鑰新增到你已經在用的用戶端的 MCP 設定中，就完成串接。這裡有 24 個有文件記錄的 MCP 用戶端的設定指南，任何支援標準設定的其他 MCP 相容用戶端也都能連接。如果 Cursor 是你的主場，&lt;a href=&quot;https://maguyva.ai/zh-hant/for-cursor&quot;&gt;Cursor 頁面&lt;/a&gt; 會帶你走完那條路；同一個伺服器也服務於 Claude Code、VS Code、Windsurf、Codex CLI 等等。&lt;/p&gt;
&lt;p&gt;你不需要更換編輯器。你給代理的是一整套工具介面——11 個 MCP 工具，涵蓋搜尋、符號、依賴分析、檔案檢索和儲存庫上下文——覆蓋 279 種以上的語言和基於文字的技術，這在一個早已不再是單一語言的 monorepo 上，比你想像的更重要。&lt;/p&gt;
&lt;p&gt;答案會附上依據傳回，以帶行號的檔案路徑形式呈現。語意、結構、圖和文字檢索被融合成排序結果，所以像「什麼依賴 parseConfig」這樣的問題，得到的既不是一大堆 grep 輸出，也不是單一的語意片段，而是真正重要的那一小撮位置。&lt;/p&gt;
&lt;h2 id=&quot;一份具體的操作指南&quot;&gt;一份具體的操作指南&lt;/h2&gt;
&lt;p&gt;不要一上來就索引整個公司。以下是行之有效的路徑：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;選一個你已經很熟悉的儲存庫——一個你能手動評判的套件，勝過你手頭最大的程式碼樹。&lt;/li&gt;
&lt;li&gt;免費開始：3 個儲存庫，5 萬行索引額度，全部 11 個工具，沒有每月查詢配額。如果你的代表性儲存庫比這更大，&lt;a href=&quot;https://maguyva.ai/zh-hant/pricing&quot;&gt;定價頁面&lt;/a&gt; 按已索引規模——而不是按席位數——列出了工作區方案（$0、$19、$49、$149）。&lt;/li&gt;
&lt;li&gt;連接 GitHub，等待首次索引完成。你沒有在本機編譯任何東西。&lt;/li&gt;
&lt;li&gt;接上 MCP 用戶端——幾行設定。Maguyva 是一個遠端 MCP 伺服器，所以沒有外掛、沒有擴充套件，也不需要採用第二個編輯器。&lt;/li&gt;
&lt;li&gt;問一個你能核實的問題。「什麼依賴 parseConfig？」或者「登入工作階段過期在哪裡處理？」然後開啟被引用的 &lt;code&gt;file.ext:line&lt;/code&gt; 結果，對照眼前的程式碼樹核對。&lt;/li&gt;
&lt;li&gt;只有在引用經受住那次核對之後，才讓代理去編輯。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果第一個儲存庫合適，而你的程式碼樹很大，就按你的已索引行數和重建節奏提升工作區規模。人類和代理共享同一個使用者數——Maguyva 按工作區計費，而不是按席位——所以往這個迴圈裡再加一個代理不會多花你一分錢。&lt;/p&gt;
&lt;p&gt;啟用測試和&lt;a href=&quot;https://maguyva.ai/zh-hant/docs&quot;&gt;文件&lt;/a&gt;為任何首次執行推薦的一樣：索引一個你已經瞭解的儲存庫，問一個你能核實的問題。大型儲存庫不會改變這個測試，只會讓第一個選錯的檔案代價更高。&lt;/p&gt;
&lt;h2 id=&quot;串接之後要留意什麼&quot;&gt;串接之後要留意什麼&lt;/h2&gt;
&lt;p&gt;留意三件事。新鮮度：付費方案每小時重建，免費方案每天重建，未推送的本機工作不會出現在地圖裡——這是你接受的權衡。範圍：索引一組有代表性的儲存庫，而不是每一個被歸檔的分叉儲存庫；免費方案是刻意設計成這個規模，讓你先弄清楚這些答案值不值得留下。以及驗證：一張無法引用路徑和行號的大型儲存庫地圖，只是一台更慢的猜測機器，所以在代理交付補丁之前，讓它先展示位置。&lt;/p&gt;
&lt;p&gt;然後執行你在小儲存庫上會執行的同一個測試。索引一個你已經瞭解的儲存庫。問一個你能核實的問題。如果這張地圖是真實的，你的代理就不會再從一棵冷程式碼樹開始。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// no laptop got hot building this map.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>MCP</category><category>Indexing</category><category>Monorepos</category></item><item><title>為什麼你的 AI 編碼代理會產生檔案路徑幻覺</title><link>https://maguyva.ai/zh-hant/blog/why-ai-coding-agents-hallucinate-file-paths</link><guid isPermaLink="true">https://maguyva.ai/zh-hant/blog/why-ai-coding-agents-hallucinate-file-paths</guid><description>當 AI 編碼代理沒有儲存庫的真實地圖時，就會編造檔案路徑。本文說明這為何發生，以及紮根依據如何帶來更少的幻覺編輯。</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;破綻不是一個寫錯的函式體。而是一次自信滿滿的編輯，針對一個不存在的檔案，或者一個存在但並非實作該行為的檔案。&lt;/p&gt;
&lt;p&gt;你要求修復工作階段過期問題。代理開啟了 &lt;code&gt;src/auth/session.ts&lt;/code&gt;。這條路徑看起來合理。但它也是錯的。真正的處理函式在 &lt;code&gt;apps/api/src/middleware/expiry.ts&lt;/code&gt; 裡，兩次重構之前被重新命名過。代理沒有對你撒謊。它是用訓練先驗加上上下文視窗裡已經有的內容，補全了一個路徑形狀的字串。&lt;/p&gt;
&lt;p&gt;這是真實儲存庫中常見的失敗模式。模型會寫程式碼。失誤在於選錯了寫程式碼的地方。&lt;/p&gt;
&lt;h2 id=&quot;為什麼代理會編造路徑&quot;&gt;為什麼代理會編造路徑&lt;/h2&gt;
&lt;p&gt;編碼代理是一個帶工具的下一個 token 預測模型。當你說「修一下工作階段過期」時，它必須先指定一個檔案，才能讀取或修補任何東西。如果它還沒有一張有依據的地圖，它就會從以下來源拼湊出一條路徑：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;它在其他儲存庫裡見過的命名慣例。&lt;code&gt;src/auth/session.ts&lt;/code&gt; 是一種常見形態。&lt;/li&gt;
&lt;li&gt;已經出現在對話裡的檔案，那可能是你上週貼上過的檔案，而不是現在真正重要的檔案。&lt;/li&gt;
&lt;li&gt;它碰巧執行過的目錄清單，在大型程式碼樹上是不完整的。&lt;/li&gt;
&lt;li&gt;指令檔案。&lt;code&gt;CLAUDE.md&lt;/code&gt; 和 &lt;code&gt;AGENTS.md&lt;/code&gt; 告訴代理該如何表現。它們不是符號、呼叫端或當前路徑的活索引。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;這些來源沒有一個是今天這個儲存庫的地圖。模型填補空白的方式，和它填補任何空白的方式一樣：用一個高機率的延續。這個延續常常看起來像一條真實的路徑。有時那個檔案確實存在，而且就在正確檔案旁邊。有時它曾經存在於上個月已合併的一個分支上。有時它從來就不存在。&lt;/p&gt;
&lt;p&gt;如果代理從未搜尋過正確的字串，grep 在這裡救不了你。代理猜了一條路徑，然後讀了那條路徑傳回的內容，然後編輯了它。第一個錯誤的步驟是路徑，不是補丁。&lt;/p&gt;
&lt;p&gt;讀檔案也不等於找到正確的檔案。Claude Code、Cursor、Codex 以及類似的工具，可以開啟你指向的任何東西。問題在於，它們能否在編輯之前，可靠地找到正確的檔案、重要的符號、依賴關係、測試，以及影響範圍。沒有地圖的檔案存取，依然是從猜測開始的。&lt;/p&gt;
&lt;h2 id=&quot;錯誤檔案的編輯是一個檢索問題&quot;&gt;錯誤檔案的編輯是一個檢索問題&lt;/h2&gt;
&lt;p&gt;把編造出來的路徑當作一次檢索失敗來處理，而不是當作性格缺陷。&lt;/p&gt;
&lt;p&gt;如果代理在被允許編輯之前必須傳回 &lt;code&gt;path/file.ext:line&lt;/code&gt;，會發生兩件事。第一，你可以開啟這條引用，在十秒內拒絕這次工作。第二，代理必須去查詢某個真正瞭解這棵程式碼樹的東西。&lt;/p&gt;
&lt;p&gt;這就是程式碼庫上下文層的工作。僅靠語意搜尋是不夠的。一個「聽起來像工作階段過期」的片段，依然可能落在一個已廢棄的套件裡。當你知道字串時，你還需要精確文字；當你知道名字時，你需要符號查詢；當你知道形狀時，你需要結構化搜尋；當你需要呼叫端和影響範圍時，你需要依賴圖。&lt;/p&gt;
&lt;p&gt;Maguyva 就是為相容 MCP 的編碼代理提供的這一層。它不是編輯器。Claude Code、Cursor、Codex CLI、VS Code、Windsurf 以及其他 MCP 用戶端，都留在它們原本的位置。代理在觸碰任何一行程式碼之前，先查詢一張排序過的地圖。&lt;/p&gt;
&lt;p&gt;這個主張刻意保持謙遜：更少的幻覺編輯。Maguyva 並不會剝奪模型猜測的能力。它改變的是預設的第一步，從「編造一條看似合理的路徑」變成「請求排序過、帶引用的位置」。&lt;/p&gt;
&lt;h2 id=&quot;一份有依據的答案是什麼樣子&quot;&gt;一份有依據的答案是什麼樣子&lt;/h2&gt;
&lt;p&gt;對「工作階段過期在哪裡處理」這個問題，一個有用的答案不是一段話。而是一份簡短的位置清單：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;apps/api/src/middleware/expiry.ts:48&lt;/code&gt; - 處理函式&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/web/src/lib/auth-client.ts:112&lt;/code&gt; - 呼叫端&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/api/tests/expiry.test.ts:20&lt;/code&gt; - 如果這次改動出錯就會失敗的測試&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;你可以開啟這些行。如果錯了，你就停下。如果對了，代理就可以編輯。重點在於驗證，而不是一句口號。&lt;/p&gt;
&lt;p&gt;Maguyva 提供 11 個面向客戶的 MCP 工具，涵蓋搜尋、符號、依賴分析、檔案檢索、儲存庫上下文和確定性實用工作流程。四種檢索模式（語意、結構、圖／依賴和文字）融合成排序結果；符號查詢是一個獨立的 MCP 工具（&lt;code&gt;find_symbol&lt;/code&gt;）。有依據的答案會附上檔案路徑和行號傳回，方便你對照眼前的程式碼樹來評判。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/zh-hant/docs&quot;&gt;文件&lt;/a&gt; 描述了最短路徑：先免費開始，索引一個你已經瞭解的儲存庫，連接用戶端，然後問一個你能核實的問題。&lt;/p&gt;
&lt;h2 id=&quot;一個改變第一次編輯的迴圈&quot;&gt;一個改變第一次編輯的迴圈&lt;/h2&gt;
&lt;p&gt;你不需要一套新的工作流程信條。你需要的是在第一次落筆之前多加一步。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;問一個你已經能評判的問題。「哪段程式碼處理登入和工作階段過期」比「修一下認證」更好。&lt;/li&gt;
&lt;li&gt;要求引用。檔案路徑和行號，而不是「認證模組」的一段摘要。&lt;/li&gt;
&lt;li&gt;開啟被引用的檔案。跟著符號走。確認你即將觸碰的依賴關係。&lt;/li&gt;
&lt;li&gt;只有到那時，才讓代理去打補丁。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果第二步沒有傳回任何有用的東西，代理就沒有資格臨時編造一條路徑。它要麼再搜尋一次，要麼由你來指路。正是這一道關卡，產生了更少的幻覺編輯。模型還是同一個模型。變了的是地圖。&lt;/p&gt;
&lt;p&gt;指令檔案依然重要。保留它們。用它們來記錄慣例、審查規則，以及不該觸碰的東西。不要要求它們充當索引。一個列出三個重要目錄的 &lt;code&gt;CLAUDE.md&lt;/code&gt;，在一次套件拆分之後的那一週就會過時。而一張可查詢的地圖，會隨著儲存庫的更新而更新。&lt;/p&gt;
&lt;p&gt;一個相關的失敗是「幾乎對」的檔案：當行為其實在 &lt;code&gt;auth-client.ts&lt;/code&gt; 裡時，代理卻開啟了 &lt;code&gt;auth.ts&lt;/code&gt;；或者補丁打在了一個生成的檔案上，而不是原始檔；或者因為名字匹配，編輯了 &lt;code&gt;packages/legacy&lt;/code&gt; 裡的那份複製。引用不會讓這些錯誤變得不可能發生。它們只是讓這些錯誤在 diff 落地之前變得可見。&lt;/p&gt;
&lt;h2 id=&quot;一張地圖不會為你修復的東西&quot;&gt;一張地圖不會為你修復的東西&lt;/h2&gt;
&lt;p&gt;對自己得到的東西保持清醒。一張有依據的地圖不會讓每一次編輯都變得正確——你的代理依然可能在完全正確的檔案裡寫出一個糟糕的補丁。如果你的程式碼庫依賴動態派發、反射或猴子補丁，一些符號查詢傳回的結果會比你希望的更單薄，因為執行時的間接性對任何靜態索引都會造成這種效果。而如果你在期待一個百分比——「幻覺路徑減少了 X%」——你在這裡找不到，因為除了你自己，沒有人能為你的儲存庫誠實地測出這個數字。&lt;/p&gt;
&lt;p&gt;你可以期待的東西範圍更窄，也更有用：代理不再用一條猜測出來的路徑來開始它的編輯。這第一步會紮根於一張真實的地圖，而更少的幻覺編輯正是由此而來。引用之後的一切——閱讀 diff、判斷補丁——依然是你的工作，和以往一樣。&lt;/p&gt;
&lt;p&gt;這個測試幾乎不花你什麼成本：索引一個你已經瞭解的儲存庫，問一個你能核實的問題。從一條曾經讓你吃過虧的路徑開始。如果引用錯了，你會立刻看出來。如果對了，你代理的下一次編輯就有了一個更好的落腳點。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// it doesn&apos;t know the file. it knows how to find it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>Hallucination</category><category>Retrieval</category><category>MCP</category></item><item><title>我們為何將程式碼搜尋升級至 voyage-4-large</title><link>https://maguyva.ai/zh-hant/blog/upgrading-code-search-to-voyage-4-large</link><guid isPermaLink="true">https://maguyva.ai/zh-hant/blog/upgrading-code-search-to-voyage-4-large</guid><description>我們將程式碼嵌入模型換成了 voyage-4-large — 目前在公開的 RTEB 程式碼檢索排行榜上排名第一。這是誠實的版本：我們做了什麼取捨、我們實際索引的是什麼，以及我們為何願意為高階嵌入模型付費。</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;本文中的基準測試數字，反映發布當下（2026 年 6 月）的 RTEB 排行榜狀態。排行榜會變動，請將這些排名視為某一時間點的快照，而非永久不變的事實。&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;語意搜尋的品質，取決於其底層嵌入模型的品質。&lt;/p&gt;
&lt;p&gt;當代理向 Maguyva 提問「我們在哪裡處理重試機制」時，它並不是在用 grep 搜尋「retry」這個字，而是在尋求&lt;em&gt;意義&lt;/em&gt; — 退避迴圈、斷路器，或是任何包裹了不穩定呼叫的機制。這個問題，是由一個向量模型負責回答的：它會把程式碼轉化為空間中的一個點，再找出相鄰的點。換一個更好的模型，產品中每一次語意查詢都會悄悄變得更精準。&lt;/p&gt;
&lt;p&gt;因此我們換了模型。自 2026 年 6 月起，Maguyva 的程式碼嵌入運行於 &lt;strong&gt;&lt;code&gt;voyage-4-large&lt;/code&gt;&lt;/strong&gt;，取代了 &lt;code&gt;voyage-code-3&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&quot;基準測試&quot;&gt;基準測試&lt;/h2&gt;
&lt;p&gt;我們做這個決定不是憑感覺。公開的&lt;a href=&quot;https://embedding-benchmark-rteb.hf.space/code&quot;&gt;檢索嵌入基準測試（RTEB）&lt;/a&gt;會依真實檢索任務為嵌入模型排名，而在其 &lt;strong&gt;Code&lt;/strong&gt; 排行榜上，&lt;code&gt;voyage-4-large&lt;/code&gt; 高居 &lt;strong&gt;總排名第一（90.86 分）&lt;/strong&gt;，領先 &lt;code&gt;gemini-embedding-2-preview&lt;/code&gt;（90.26 分），也值得一提的是，領先了我們原本使用的模型 &lt;code&gt;voyage-code-3&lt;/code&gt;（89.73 分，第 3 名）。&lt;/p&gt;
&lt;p&gt;這是一個很小的絕對差距，但它是朝正確方向的差距，出現在一份公開的基準測試上，而且正是在我們最在乎的任務上：依意義檢索程式碼。&lt;/p&gt;
&lt;h2 id=&quot;我們接受的取捨二元量化&quot;&gt;我們接受的取捨：二元量化&lt;/h2&gt;
&lt;p&gt;以下是多數「我們升級了模型」這類文章不會提到的部分。&lt;/p&gt;
&lt;p&gt;Maguyva 並不儲存全精度向量，我們儲存的是&lt;strong&gt;二元量化&lt;/strong&gt;後的嵌入：每個 2048 維的向量，會被壓縮成一個 2048 位元的簽章 — &lt;strong&gt;每個向量僅 256 位元組&lt;/strong&gt;。這些簽章會以漢明距離進行搜尋，並依租戶分別索引與分割。&lt;/p&gt;
&lt;p&gt;這是一項刻意做出的取捨。二元量化犧牲了部分檢索精確度，換來大幅縮小的儲存空間，以及快速、低成本的距離運算，且不需要另外操作獨立的向量資料庫。對於一款每個工作區都要索引整個程式碼庫的產品來說，這樣的經濟效益，比在基準測試上多擠出最後一絲分數更重要。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;voyage-4-large&lt;/code&gt; 完全契合這套設計，不需要強行遷移儲存層：它產生的輸出同樣是 2048 維，與 &lt;code&gt;voyage-code-3&lt;/code&gt; 相同，因此我們的 &lt;code&gt;bit(2048)&lt;/code&gt; 欄位與漢明距離搜尋路徑都不需要更動。模型變好了，結構描述則原封不動。&lt;/p&gt;
&lt;h2 id=&quot;程式碼只是起點&quot;&gt;程式碼只是起點&lt;/h2&gt;
&lt;p&gt;Maguyva 是一款程式碼智慧工具，但我們自己同時也是「零號客戶」，並把它指向了另一種內容：與程式碼並存於我們儲存庫中的 Markdown 文件。架構決策紀錄、操作手冊、合約、財務與政策文件 — 全都以 Git 進行版本控管，全都藏在同一個 MCP 伺服器背後，是一份針對&lt;em&gt;文件&lt;/em&gt;本身、而不只是原始碼的語意索引。&lt;/p&gt;
&lt;p&gt;這正是為何 voyage-4-large 的廣度如此重要。在同一個 RTEB 系列排行榜上，它在&lt;strong&gt;金融領域排名第一、醫療保健領域排名第一，整體文字檢索也排名第一&lt;/strong&gt; — 領先 Google 的 Gemini Embedding、Cohere 的 Embed v4，以及 OpenAI 的 text-embedding-3-large。（Voyage 是 RTEB 的共同創建者之一，因此我們將這視為一項有力的公開訊號，而非完全中立的裁判結果 — 但它確實是在私有的保留測試集上，與每個主要商業模型正面較量得出的結果。）能為代理找到正確函式的那套索引，同樣也能找到合約中正確的條款、或政策中正確的那一行 — 而在這些領域，voyage-4-large 並非退而求其次的選擇，而是當之無愧的領先者。&lt;/p&gt;
&lt;h2 id=&quot;我們為何願意為高階嵌入模型付費&quot;&gt;我們為何願意為高階嵌入模型付費&lt;/h2&gt;
&lt;p&gt;搜尋還有更便宜的做法，而且很多都是免費的。詞彙搜尋 — BM25 及其同類方法 — 靠關鍵字比對，可在本機執行，完全不花錢。像 BGE、Nomic、embeddinggemma 這類開源嵌入模型，能提供貨真價實、還算&lt;em&gt;不錯&lt;/em&gt;的語意檢索能力，你甚至可以只花一張 GPU 的錢就自行架設。Maguyva 也同樣運用這免費的一面：每一次查詢都會融合文字、AST、圖形與語意搜尋。我們唯一不肯省的，是語意這一層。&lt;/p&gt;
&lt;p&gt;我們選擇按 token 計費、為高階嵌入模型 — &lt;code&gt;voyage-4-large&lt;/code&gt; — 付費，而不是自架一個免費模型，原因有二。第一，當程式碼寫的是 &lt;code&gt;backoff&lt;/code&gt; 和 &lt;code&gt;circuit breaker&lt;/code&gt;、卻從未出現「retry」這個字時，單靠關鍵字搜尋根本回答不了「我們在哪裡處理重試機制」這個問題 — 掌握語意正是嵌入模型的核心價值，而在我們服務的這些領域中，開源模型確實落後於高階模型：在一般文字上落後個幾分，在程式碼、合約、金融這類利基領域則落後得更多。第二，就我們的經驗而言，檢索品質對最終答案的影響，遠大於另一端所使用的模型本身 — 一個強大的代理，若拿到錯誤的情境資訊，依然會答錯；而它從未被交付的文件，它也永遠看不見。&lt;/p&gt;
&lt;p&gt;因此，高階嵌入模型是一筆隨著我們索引的每個儲存庫與每份文件而持續增加的按 token 計費帳單 — 而我們是刻意選擇支付這筆費用的。為了讓使用者得到正確的函式、或正確的條款這樣的結果，我們認為這筆取捨值得。&lt;/p&gt;
&lt;h2 id=&quot;誠實的部分&quot;&gt;誠實的部分&lt;/h2&gt;
&lt;p&gt;Voyage 自家的文件，目前仍將 &lt;code&gt;voyage-code-3&lt;/code&gt; 標示為程式碼最佳化模型。那我們為什麼還要換？&lt;/p&gt;
&lt;p&gt;因為我們參考的是公開的基準測試，而不只是廠商自己的模型比較表，而基準測試顯示，在程式碼檢索上排名第一的是 &lt;code&gt;voyage-4-large&lt;/code&gt;。這是一個前瞻性的決定：採用更新、整體表現更強的模型，並依公開排行榜、針對真正重要的任務加以驗證。我們之所以敢下這個賭注，是因為證據相當充分 — voyage-4-large 不只在程式碼上獲勝，在金融、醫療保健與整體檢索表現上也同樣領先。&lt;/p&gt;
&lt;h2 id=&quot;那個默默支撐一切的基礎&quot;&gt;那個默默支撐一切的基礎&lt;/h2&gt;
&lt;p&gt;我們對外提供的每一項工具 — 語意搜尋、任務情境蒐集、有憑有據的問答 — 最終都仰賴檢索作為基礎。當檢索器變得更好，另一端的代理就能得到更好的佐證、少走幾步冤枉路，並將答案扎根於正確的程式碼 — 或是正確的條款，或是正確的政策。更精準的嵌入模型並不是一項華麗的功能，它是支撐其他一切的基礎，而我們剛剛把它墊高了一些。你不會注意到這件事，而這正是重點所在。&lt;/p&gt;
</content:encoded><category>Embeddings</category><category>Search</category><category>Architecture</category></item><item><title>語言遞迴自我改進：在近 280 種語言中打磨程式碼智慧</title><link>https://maguyva.ai/zh-hant/blog/autonomous-quality-loops-language-grind</link><guid isPermaLink="true">https://maguyva.ai/zh-hant/blog/autonomous-quality-loops-language-grind</guid><description>我們為近 280 種語言提供程式碼智慧支援，沒有人力能逐一手動稽核。因此我們打造了一套語言遞迴自我改進迴圈 — 抽查、LLM 擔任評審、修正單一問題、重新驗證 — 並以一支隔離代理艦隊持續執行，直到擷取結果真正正確，而不只是綠燈通過。</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;本文中的數字反映發布當下（2026 年 5 月）的系統狀態。目前最新數字請參見我們的&lt;a href=&quot;https://maguyva.ai/zh-hant/team&quot;&gt;團隊頁面&lt;/a&gt;。&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Maguyva 會從大約 280 種語言的原始碼中擷取符號、參照關係與依賴關係圖。每種語言都對應一套自訂的 tree-sitter 處理器 — 查詢、啟發式規則、邊界案例 — 而每個處理器都可能以自己獨特的方式微妙地出錯：方法呼叫被誤判為讀取、函式被歸屬到錯誤的外層作用域、或是一段根本不存在的關係。&lt;/p&gt;
&lt;p&gt;這種問題無法靠人力逐一稽核。沒有任何團隊能讀完橫跨 280 種文法的擷取輸出，並揪出其中的錯誤邊。因此，真正有意思的問題不是「我們的擷取結果正確嗎」，而是「在這樣的規模下，你要如何&lt;em&gt;發現&lt;/em&gt;它出錯了，同時不必讓人力介入每一個迴圈」。我們的答案是語言遞迴自我改進：一套由語言代理驅動的品質迴圈，搭配擔任評審的 LLM，以及一條我們不斷重新學到的規則 — 綠燈不等於正確。&lt;/p&gt;
&lt;h2 id=&quot;綠燈不等於正確&quot;&gt;綠燈不等於正確&lt;/h2&gt;
&lt;p&gt;每種語言都有一套固定測試集，發布關卡會依五個面向為其評分 — 準確度、結構完整性、涵蓋度、品質與效能。唯有在固定測試集上精確率 ≥ 0.95、召回率 ≥ 0.99、F1 ≥ 0.97，且預期關係邊數至少達 20 筆以取得統計信心，該語言才會判為&lt;strong&gt;綠燈&lt;/strong&gt;。低於此標準即為黃燈或紅燈，不予發布。&lt;/p&gt;
&lt;p&gt;這道關卡是必要條件，卻不是充分條件。固定測試集是拿&lt;em&gt;我們自己寫的&lt;/em&gt;測試案例來驗證，只涵蓋我們已經想到的情境。一個處理器可能在固定測試集上完美無瑕，卻在只出現於真實程式碼中的模式上出包 — 一個巨集慣用法、一個帶有泛型型別限制的方法、一個沒人為它寫過測試案例的語言特性。綠燈只代表固定測試集通過，不代表真實程式碼庫能乾淨地被擷取。所以這套迴圈必須跳脫固定測試集，正視真實世界的狀況。&lt;/p&gt;
&lt;h2 id=&quot;內層迴圈抽查評審修正驗證&quot;&gt;內層迴圈：抽查、評審、修正、驗證&lt;/h2&gt;
&lt;p&gt;核心迴圈一次處理一種語言：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ┌──────────────────────────────────────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  1. corpus run ── clone real-world repos, extract relationships   │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  2. spot-check 100 edges (seed 42, then seed 123 to cross-check)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  3. LLM judge classifies every sampled edge:                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        CORRECT · FALSE_POSITIVE · TYPE_ERROR ·                    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        SCOPE_ERROR · METADATA_ERROR                               │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  4. fix ONE thing — handler .py, .scm query, or config           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  5. re-validate — F1 + re-classify + manifest diff (no regressions)│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   better? ──no──► revert, try a different fix ────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │ yes                                                       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  6. promote the fix into fixtures (a permanent regression guard) ──┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;有幾個關鍵設計，讓這套機制真正發揮作用，而不是原地打轉。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;評審者是代理本身，不是一次 API 呼叫。&lt;/strong&gt; 我們所謂的「LLM 擔任評審」，指的是語言代理親自對照真實原始碼，逐一檢視每筆取樣的關係邊，並依固定的五類量規進行分類：這條邊是正確的、是誤判、關係正確但類型錯誤、歸屬到錯誤的作用域，還是攜帶了錯誤的中繼資料？這套量規正是整套機制的關鍵所在 — 在你知道「23% 錯誤率」究竟是真實缺陷還是評審誤判之前，這個數字毫無意義。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一次只修正一件事，然後證明它有效。&lt;/strong&gt; 每次迭代只變更一項可編輯的資產，接著針對固定的測試機制重新執行，唯有 F1 分數提升、且重新分類結果變好時才保留這項變更；若沒有，就回復原狀。不做批次的臆測性修改，也不接受「應該會變好」這種說法。一項變更必須靠實績留下，否則就出局。而一旦修正真正站穩腳步，就會被納入固定測試集 — 讓它修正的錯誤再也無法悄悄重現。這一步「納入測試集」的動作，正是讓這套迴圈成為&lt;em&gt;遞迴&lt;/em&gt;、而不只是重複的關鍵：每一輪都會強化下一輪據以驗證的基準。&lt;/p&gt;
&lt;h2 id=&quot;我們不斷重新學到的教訓指標會誇大問題&quot;&gt;我們不斷重新學到的教訓：指標會誇大問題&lt;/h2&gt;
&lt;p&gt;這裡有個陷阱，而我們就曾一頭栽進去。次要的語料庫指標 — 例如擷取出的目標有多少比例找不到可解析的符號、有多少符號看起來「孤立」等等 — 會大幅誇大問題的嚴重程度。這些多半是&lt;em&gt;語言典範本身的產物&lt;/em&gt;，而不是真正的錯誤。&lt;/p&gt;
&lt;p&gt;最清楚的例子是：&lt;code&gt;llvm&lt;/code&gt; 曾一度顯示 73% 的「有來源卻無符號」比例，並因此被貼上「災難性」的標籤。我們深入追查後發現，真實準確度其實是 &lt;strong&gt;98.5%&lt;/strong&gt;。那些「缺少的符號」幾乎全是合理的外部參照 — 呼叫標準函式庫、呼叫框架、或呼叫存在於程式碼庫之外的程式碼。這項指標量測的其實是該語言本身的特性，而不是處理器的缺陷。像 Zig、COBOL、Odin 這類語言都出現 65% 到 70% 的「孤立」比例，卻完全正確無誤 — COBOL 甚至沒有任何真實錯誤。&lt;/p&gt;
&lt;p&gt;如果我們當初任由這些數字主導工作方向，恐怕會花上好幾週去「修正」原本就沒問題的處理器，同時忽略那些真正暗藏錯誤的語言。結論很直白：彙總指標充其量只是粗略的分診訊號。&lt;strong&gt;真正的品質訊號來自搭配關係邊分類的抽查&lt;/strong&gt; — 逐一檢視真實程式碼庫中的實際關係邊並加以判斷。用資料取代直覺沒錯，但前提是你得先知道哪些資料才是真話。&lt;/p&gt;
&lt;h2 id=&quot;外層迴圈靠艦隊而不是靠一場馬拉松&quot;&gt;外層迴圈：靠艦隊，而不是靠一場馬拉松&lt;/h2&gt;
&lt;p&gt;若一次只處理一種語言，280 種語言跑下來將遙遙無期，因此內層迴圈外面還包了一層外層迴圈，讓多個語言得以平行處理。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   pick a wave of near-GREEN / high-error languages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   fan out 10–15 agents, each ISOLATED in its own git worktree,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   each grinding ONE language, committing to its own branch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   orchestrator integrates serially: file-scoped apply, then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   `manifest diff` — any cross-language regression blocks the batch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   gated push (reviewed and confirmed) ──► rotate to the next wave&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;每個代理都在一個用完即丟的工作樹中作業，彼此互不干擾。協調器會逐一整合各代理的修正，每一項都要通過完整清單的迴歸檢查：如果一項變更改善了自己的語言，卻悄悄弄壞了另外三種語言，就不會被採納。整合會先經過關卡把關、確認無誤，才會推送出去 — 迴歸關卡決定什麼是&lt;em&gt;安全&lt;/em&gt;的，但要不要&lt;em&gt;正式發布&lt;/em&gt;，仍由人來決定。之後，代理池會輪替到下一批語言，整套流程再跑一輪。&lt;/p&gt;
&lt;h2 id=&quot;仍不完美之處&quot;&gt;仍不完美之處&lt;/h2&gt;
&lt;p&gt;評審者也可能出錯，而且出錯是有方向性的：脈絡資訊不足的代理往往會&lt;em&gt;誇大回報&lt;/em&gt;問題。曾有一批任務中，8 種語言被標記為 5% 到 20% 的錯誤率；深入檢視後，真正屬於該語言本身的錯誤只有一項 — 其餘都是評審者因未掌握該語言自身語意而產生的誤判（例如一行原始碼合理地產生多條關係邊、參數繫結被建模成賦值、以每個識別碼為單位建立參照關係的語言）。這正是我們以兩組不同種子取樣並交叉核對的原因，也是為什麼評審者與固定測試集之間出現分歧時，我們會將其視為&lt;em&gt;最&lt;/em&gt;值得關注的訊號，而不是定論 — 有時候，出錯的其實是固定測試集本身。&lt;/p&gt;
&lt;p&gt;我們對目標也很誠實。目標是零真實錯誤，一點都不打折 — 但「零」是我們一種語言接著一種語言持續打磨、朝其邁進的方向，而不是打勾了事的檢查項目。永遠會有下一個程式碼庫、帶著下一種慣用寫法。&lt;/p&gt;
&lt;h2 id=&quot;靠實績贏得而非憑空宣稱&quot;&gt;靠實績贏得，而非憑空宣稱&lt;/h2&gt;
&lt;p&gt;Maguyva 為代理所做的每一件事 — 找出一個符號、追蹤一項依賴關係、以附上程式碼佐證的方式回答問題 — 都仰賴底層擷取結果的正確性。橫跨 280 種語言，「正確」無法憑空宣稱，必須不斷對照真實程式碼&lt;em&gt;贏得&lt;/em&gt;。這套迴圈正是我們贏得正確性的方式：一個自主的抽查與修正循環，對自己產出的指標抱持懷疑，證明每一項變更確實有效，並讓每一次修正都成為抵禦下一次迴歸的守衛。這件事並不光鮮亮麗，卻是讓我們能夠說出「我們支援你的語言」、而且說到做到的那份工夫。綠燈很容易，正確得靠實績贏得。&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Languages</category><category>Agents</category></item><item><title>多模態融合搜尋：為每個查詢挑選正確的檢索方式</title><link>https://maguyva.ai/zh-hant/blog/multi-modal-fusion-search</link><guid isPermaLink="true">https://maguyva.ai/zh-hant/blog/multi-modal-fusion-search</guid><description>像「parseConfig 定義在哪裡」這樣的查詢，需要的搜尋方式和「auth 是如何運作的」截然不同。Maguyva 會先分類查詢意圖，據此為四種檢索模式加權，再以加權版的 Reciprocal Rank Fusion（倒數排名融合）演算法整合結果。</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;歷史設計說明：這篇 2026 年 4 月的文章描述的是當時的路由設計，並非目前的預設行為。下方 9 月的更正僅針對一項測量聲明。關於目前的路由、預設組態與明確的檢索模態控制，請參閱&lt;a href=&quot;https://maguyva.ai/zh-hant/docs/how-it-works&quot;&gt;運作原理&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;搜尋查詢從來不是單一種東西。&lt;/p&gt;
&lt;p&gt;「&lt;code&gt;parseConfig&lt;/code&gt; 定義在哪裡」想要的是精確的符號 — 一個精準的位置，而且要快。「authentication 是如何運作的」想要的是意義 — 是能解釋一個概念的相關程式碼分佈全貌。「如果我修改這個函式會壞掉什麼」想要的是依賴關係圖。「找出字串 &lt;code&gt;ECONNREFUSED&lt;/code&gt;」想要的是字面比對，不需要耍任何花招。&lt;/p&gt;
&lt;p&gt;Grep 在字面比對上表現優異，對某些參照搜尋也很有用，但它不是依賴關係圖，也不理解意義。嵌入模型涵蓋了語意層面，但對精確字串比對與影響分析來說，卻是用錯了工具。多數程式碼搜尋工具只會選定一種引擎，讓每個查詢都得將就這個選擇。Maguyva 不做這種取捨，而是先判斷你提出的是哪一類問題，再依該問題應得的比例，混合四種檢索方式。&lt;/p&gt;
&lt;h2 id=&quot;四種模式&quot;&gt;四種模式&lt;/h2&gt;
&lt;p&gt;在底層，有四種各自獨立的方式可以找到程式碼：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;語意（semantic）&lt;/strong&gt; — 對 Voyage 二元嵌入向量進行向量搜尋，依意義找出程式碼。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文字（text）&lt;/strong&gt; — 三字元片段（trigram）比對，找出字面值、錯誤字串、精確識別碼。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;結構（structural）&lt;/strong&gt; — AST 查詢，找出定義、簽章與語言結構。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;圖形（graph）&lt;/strong&gt; — 依賴關係圖，找出呼叫端、被呼叫端與影響範圍。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;每一種模式各擅長不同類型的問題，關鍵在於：針對眼前這個查詢，該給予每一種多少信任。&lt;/p&gt;
&lt;h2 id=&quot;意圖分類&quot;&gt;意圖分類&lt;/h2&gt;
&lt;p&gt;在任何檢索執行之前，一個輕量分類器會先將查詢歸入六種意圖之一，並附上信心分數。這個分類器刻意做得很精簡 — 依序套用啟發式規則，第一個命中者勝出 — 因為它運作在關鍵路徑上，只能增加一兩毫秒的延遲：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;以 &lt;code&gt;def &lt;/code&gt;、&lt;code&gt;class &lt;/code&gt;、&lt;code&gt;func &lt;/code&gt;、&lt;code&gt;import &lt;/code&gt;⋯⋯ 開頭 → &lt;strong&gt;find_definition&lt;/strong&gt;（信心 0.95）&lt;/li&gt;
&lt;li&gt;「who calls」「usages of」「references to」→ &lt;strong&gt;find_references&lt;/strong&gt;（0.90）&lt;/li&gt;
&lt;li&gt;「impact」「blast radius」「what depends on」→ &lt;strong&gt;impact_analysis&lt;/strong&gt;（0.90）&lt;/li&gt;
&lt;li&gt;加了引號的 &lt;code&gt;&quot;string&quot;&lt;/code&gt; 或像 &lt;code&gt;traceback&lt;/code&gt; 這樣的錯誤相關詞彙 → &lt;strong&gt;exact_match&lt;/strong&gt;（0.85–0.90）&lt;/li&gt;
&lt;li&gt;一個 &lt;code&gt;CamelCase&lt;/code&gt; 或 &lt;code&gt;snake_case&lt;/code&gt; 形式的識別碼 → &lt;strong&gt;find_definition&lt;/strong&gt;（0.60–0.80）&lt;/li&gt;
&lt;li&gt;「how」「why」「explain」「architecture」→ &lt;strong&gt;understand_code&lt;/strong&gt;（0.75）&lt;/li&gt;
&lt;li&gt;都不符合 → &lt;strong&gt;understand_code&lt;/strong&gt;，低信心（0.40）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;每種意圖在四種模式上都有各自的權重設定，以下是實際數值：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;意圖&lt;/th&gt;
&lt;th&gt;語意&lt;/th&gt;
&lt;th&gt;文字&lt;/th&gt;
&lt;th&gt;結構（AST）&lt;/th&gt;
&lt;th&gt;圖形&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;find_definition&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_references&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;understand_code&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_similar&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.3&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;impact_analysis&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.7&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;exact_match&lt;/td&gt;
&lt;td&gt;0.0&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.9&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;因此「&lt;code&gt;parseConfig&lt;/code&gt; 定義在哪裡」會大幅偏重 AST（0.6）；「auth 是如何運作的」會偏重語意向量（0.5）；「什麼依賴這個」幾乎完全倚重圖形（0.7）；「找出 &lt;code&gt;ECONNREFUSED&lt;/code&gt;」則幾乎完全倚重三字元片段比對（0.9），並完全關閉嵌入模型 — 因為對精確字串來說，語意相似度正是用錯了工具。&lt;/p&gt;
&lt;h2 id=&quot;快速路徑以及融合路徑&quot;&gt;快速路徑，以及融合路徑&lt;/h2&gt;
&lt;p&gt;當分類器信心足夠 — 分數 ≥ 0.85 — 且查詢屬於一般情形時，Maguyva 會完全跳過融合，直接路由到單一主導模式。「X 定義在哪裡」不需要四種檢索器，它現在就需要的是 AST 索引。這條直達路徑會回報為 &lt;code&gt;fusion_strategy: &quot;direct&quot;&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;其餘一切模糊不清的查詢，都會經過融合程序。四種（或在預設集下為三種）模式會並行執行，各自回傳自己的排名清單，再由我們加以整合。&lt;/p&gt;
&lt;h2 id=&quot;加權版-reciprocal-rank-fusion&quot;&gt;加權版 Reciprocal Rank Fusion&lt;/h2&gt;
&lt;p&gt;融合異質的檢索器，比聽起來還要困難：0.82 的餘弦相似度、137 的三字元片段分數，以及 0.004 的圖形中心性，彼此並不在同一個量尺上，因此不能直接相加。Reciprocal Rank Fusion（倒數排名融合）繞過了這個問題 — 捨棄原始分數，只保留每個引擎所給出的&lt;strong&gt;排名&lt;/strong&gt;。某項結果來自某一種模式的貢獻值為：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;contribution = weight × 1 / (k + rank + 1)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其中 &lt;code&gt;rank&lt;/code&gt; 是它在該模式清單中的位置，&lt;code&gt;k&lt;/code&gt; 則是一個平滑常數。若某項結果被一種以上的引擎找到，各模式的貢獻值就會加總 — 檢索器之間的共識，自然會浮上頂端。我們在預設集中使用 &lt;strong&gt;k = 40&lt;/strong&gt;，在 &lt;code&gt;thorough&lt;/code&gt; 中則使用 60（&lt;code&gt;quick&lt;/code&gt; 僅執行語意搜尋，因此融合機制在那裡從不啟動）。RRF 原始研究對一般用途檢索採用 k = 60；我們的預設值更偏重前列結果，讓多種模式都排在前列的結果獲得稍高的權重 — 而我們不建議手動調整這個數值。&lt;/p&gt;
&lt;p&gt;除此之外，結果還會帶有一項&lt;strong&gt;圖形重要性加成&lt;/strong&gt;。一個樞紐節點 — 整個程式碼庫都仰賴的函式 — 即使在相同的文字相關性下，也應該排在不起眼的葉節點之前，因此我們會將每項貢獻值乘以：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;boost = min(1 + 0.3 × ln(1 + centrality), 1.5)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;中心性數值來自管線預先計算好的 PageRank／度數指標，且此加成上限鎖定在 1.5 倍，避免一個熱門函式完全蓋過另一個相關性更高、卻較不起眼的函式。最後，我們會將來自 vendor、build 與 archive 路徑的結果降權，並針對每個檔案去除重複，只保留最佳片段。&lt;/p&gt;
&lt;h2 id=&quot;仍不完美之處&quot;&gt;仍不完美之處&lt;/h2&gt;
&lt;p&gt;意圖分類器是一組正規表示式，而不是經過訓練的模型。它以啟發式方法處理常見的查詢形式，遇到模糊的查詢時，會退回 &lt;code&gt;understand_code&lt;/code&gt; 與偏重語意的混合檢索。本文的早期版本曾將無結果查詢比例從約 15% 降至低於 5% 描述為已實現的改善。實際上，2025 年 12 月的提案列出的是估計基準與目標，並未提供支持此結果的查詢集或測量紀錄。我們撤回這項已實現改善的聲明；參見&lt;a href=&quot;https://maguyva.ai/evidence/search-quality.md&quot;&gt;來源證據與更正（英文）&lt;/a&gt;。我們尚未以訓練過的模型取代這個分類器，因為低成本版本對於預定的路由用途而言夠快、也夠好，而且一個自信卻錯誤的分類器，比一個坦誠的備援方案更糟。這些權重是手動選定的先驗值，並非從我們沒有收集的點擊資料中學習而來。&lt;/p&gt;
&lt;h2 id=&quot;問問題而不是選工具&quot;&gt;問問題，而不是選工具&lt;/h2&gt;
&lt;p&gt;代理不該需要自己判斷該用 grep、嵌入模型還是呼叫圖 — 它應該用直白的方式提出問題，並得到正確的答案。多模態融合，正是讓 &lt;code&gt;find_symbol&lt;/code&gt;、語意搜尋與依賴分析，能共同藏身於單一查詢介面之後的原因：系統會讀懂問題的形狀，靜靜地為它組出正確的檢索方式。負責為嵌入向量評分的模型固然重要，但知道&lt;em&gt;何時不該&lt;/em&gt;使用它們同樣重要。為每個查詢挑選正確的工具，本身就是一種品質，而這正是我們寧可自己扛下、也不願丟給呼叫端處理的事。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// you bring the question. it brings the tools.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Search</category><category>Architecture</category></item><item><title>代理可觀測性：Hooks、Alloy 與 Grafana</title><link>https://maguyva.ai/zh-hant/blog/agent-observability-hooks-alloy-grafana</link><guid isPermaLink="true">https://maguyva.ai/zh-hant/blog/agent-observability-hooks-alloy-grafana</guid><description>我們將 Claude Code 與 Codex 接入同一套 Grafana 技術堆疊，搭配 OpenTelemetry 與 Alloy，再運用追蹤與日誌，從源頭找出並修正代理的行為問題。</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;代理系統會以各種奇怪的方式失敗。&lt;/p&gt;
&lt;p&gt;有時問題出在模型本身，有時出在工具，有時你的 MCP 伺服器一切正常，但代理選錯了專家、或是把半個工作階段都花在你意料之外的殼層操作上、又或是在一個表面上看起來很有生產力的迴圈中悄悄燒掉預算。&lt;/p&gt;
&lt;p&gt;如果你看不出這些差異，你就不是真的在「操作」一套代理系統，你只是在瞎猜。&lt;/p&gt;
&lt;p&gt;因此我們為自己的工作流程打造了一套可觀測性技術堆疊：Claude Code、Codex、Claude 的 hook 事件、Codex 的 notify 事件、原生 OpenTelemetry、Grafana Alloy，以及另一端的 Grafana Cloud。&lt;/p&gt;
&lt;p&gt;真正有趣的地方，不是「我們做了一個儀表板」，而是我們必須把遙測資料拆成兩條不同的串流，因為沒有任何單一資料來源能給我們完整的全貌。&lt;/p&gt;
&lt;h2 id=&quot;問題所在代理遙測資料是零散的&quot;&gt;問題所在：代理遙測資料是零散的&lt;/h2&gt;
&lt;p&gt;現代程式開發代理已經會發出一些遙測資料，這有幫助，但還不夠。&lt;/p&gt;
&lt;p&gt;原生 OTEL 很擅長回答這類問題：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;我們發出了多少次請求？&lt;/li&gt;
&lt;li&gt;一個工作階段花費多少成本？&lt;/li&gt;
&lt;li&gt;span 與 trace 分布在哪裡？&lt;/li&gt;
&lt;li&gt;延遲是否飆高？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但它在回答這類問題時就弱得多：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;代理倚重了哪個 MCP 伺服器？&lt;/li&gt;
&lt;li&gt;這次失敗是出在 &lt;code&gt;Bash&lt;/code&gt;、某個內建檔案工具，還是某次 MCP 呼叫？&lt;/li&gt;
&lt;li&gt;實際觸發的是哪個技能？&lt;/li&gt;
&lt;li&gt;被派出去的是哪一類子代理？&lt;/li&gt;
&lt;li&gt;這個工作階段究竟是在做有用的工作，還是原地空轉？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;第二類問題，比較貼近 hook，而不是 trace。&lt;/p&gt;
&lt;p&gt;但反過來說也成立：一些最重要的效能問題，反而更貼近 trace，而不是 hook。&lt;/p&gt;
&lt;p&gt;如果你想知道延遲究竟累積在哪裡、哪些 span 拖慢了速度、或工作階段的時間究竟花在模型呼叫還是工具執行上，你同樣需要 trace 資料，而不只是語意事件。&lt;/p&gt;
&lt;h2 id=&quot;我們最終採用的架構&quot;&gt;我們最終採用的架構&lt;/h2&gt;
&lt;p&gt;我們並行運作兩條遙測路徑。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Claude Code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  hooks        -&amp;gt; send_event.py -&amp;gt; Grafana Cloud Loki&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Codex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  notify hook -&amp;gt; codex_notify.py -&amp;gt; shared Loki schema&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這樣的拆分是刻意設計的。&lt;/p&gt;
&lt;p&gt;它同時也是不對稱的。Claude Code 提供了豐富得多的生命週期 hook 介面；Codex 提供的則是原生 OTEL 加上一個 notify 介面，因此我們會將較單薄的回合完成事件正規化進同一套日誌結構描述，而不是假裝兩個執行環境提供了相同的控制能力。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;原生 OTEL&lt;/strong&gt; 提供了基準串流：來自執行環境本身的日誌與 trace，以及該環境確實會發出的指標。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hook 與 notify 事件&lt;/strong&gt; 提供了語意層：像是 &lt;code&gt;PreToolUse&lt;/code&gt;、&lt;code&gt;PostToolUse&lt;/code&gt;、&lt;code&gt;PostToolUseFailure&lt;/code&gt;、&lt;code&gt;UserPromptSubmit&lt;/code&gt;、&lt;code&gt;SubagentStop&lt;/code&gt;、&lt;code&gt;SkillActivated&lt;/code&gt;，以及我們在除錯代理行為時真正在乎的分類後中繼資料。這部分較豐富的事件串流由 Claude Code 提供，Codex 則提供較單薄、但仍然有用的正規化串流。&lt;/p&gt;
&lt;h2 id=&quot;hook-存在的理由&quot;&gt;Hook 存在的理由&lt;/h2&gt;
&lt;p&gt;我們的 hook 管線會在事件抵達 Loki 之前先加以擴充。&lt;/p&gt;
&lt;p&gt;我們不會只說「有一個工具執行了」，而是會將事件分類到以下這些欄位：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tool_type&lt;/code&gt;：builtin、mcp、skill、agent、bash&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mcp_server&lt;/code&gt;：由哪個 MCP 後端處理這次呼叫&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bash_cli&lt;/code&gt;：殼層指令的類型&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subagent_type&lt;/code&gt;：派出的是哪一類專家&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent_tool&lt;/code&gt;：來源是 Claude Code 還是 Codex&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這代表我們能提出真正具有營運意義的問題：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | agent_tool=&quot;codex-cli&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | tool_type=&quot;mcp&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | json | bash_cli=&quot;git&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這些都不是花俏的欄位，它們正是「這個代理感覺變慢了」與「這個代理過去十分鐘都花在殼層密集的 git 操作上，而且工具失敗率偏高」之間的差別。&lt;/p&gt;
&lt;p&gt;有一個看起來比實際情況更奇怪的實作細節：即使事件來自 Codex，共用的 Loki 串流仍會使用 &lt;code&gt;service_name=&quot;claude-code-hooks&quot;&lt;/code&gt; 作為標籤。執行環境之間真正的區分，發生在 &lt;code&gt;agent_tool&lt;/code&gt; 上。&lt;/p&gt;
&lt;h2 id=&quot;為何-alloy-位居中樞&quot;&gt;為何 Alloy 位居中樞&lt;/h2&gt;
&lt;p&gt;在這套系統中，Grafana Alloy 不只是一個轉發器，而是套用遙測處理規則的關卡。&lt;/p&gt;
&lt;p&gt;我們將來自 Claude Code 與 Codex 的原生 OTEL 串流，指向 &lt;code&gt;localhost:4318&lt;/code&gt; 上的一個本機 Alloy 代理，讓 Alloy 先清理過酬載內容，才轉發給 Grafana Cloud。&lt;/p&gt;
&lt;p&gt;這一點很重要，因為原始的代理遙測資料，充斥著對分析有用、卻極不適合當作已索引標籤的高基數欄位：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;session_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prompt_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;token 數量&lt;/li&gt;
&lt;li&gt;耗時&lt;/li&gt;
&lt;li&gt;工具參數區塊&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你把每樣東西都索引起來，就會遇上標籤爆炸，然後迎來悲慘的一天。&lt;/p&gt;
&lt;p&gt;所以 Alloy 為我們做了三件事：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;只讓一小組低基數標籤維持索引狀態。&lt;/li&gt;
&lt;li&gt;把雜訊多、但仍有用的欄位移進結構化中繼資料。&lt;/li&gt;
&lt;li&gt;徹底捨棄純粹的雜訊。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;背後的核心理念很簡單：&lt;strong&gt;觀察得更多，索引得更少&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&quot;為何-hook-串流會繞過-alloy&quot;&gt;為何 Hook 串流會繞過 Alloy&lt;/h2&gt;
&lt;p&gt;Hook 串流本身早已針對 Loki 塑形完成。&lt;/p&gt;
&lt;p&gt;在 &lt;code&gt;send_event.py&lt;/code&gt; 推送一筆事件之前，我們早已決定好哪些欄位值得當作標籤處理、哪些該歸入結構化的 JSON 內容主體。這條串流會直接送往 Grafana Cloud 的 OTLP 閘道，不會再經過 Alloy。&lt;/p&gt;
&lt;p&gt;因此整套系統的分工非常清楚：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Alloy&lt;/strong&gt; 馴服原始的原生 OTEL 串流。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hook 擴充&lt;/strong&gt; 讓語意事件變得可查詢。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這讓整體架構，比起硬要把所有東西塞進同一條路徑，簡單得多。&lt;/p&gt;
&lt;h2 id=&quot;儀表板實際呈現了什麼&quot;&gt;儀表板實際呈現了什麼&lt;/h2&gt;
&lt;p&gt;下方的截圖，取自支撐我們代理工作流程的其中一個可觀測性儀表板。它不是一次基準測試，這些數字也只是某個時間點的切片。重點在於資料的樣貌：活動動態、工具呼叫、失敗紀錄、提示內容，以及依代理、內建工具、MCP 使用情形、殼層指令與技能所做的細分。&lt;/p&gt;
&lt;p&gt;真正有用的地方，在於這個儀表板與其餘代理遙測資料，共用同一套 Grafana 技術堆疊。我們可以依來源代理與工具類別篩選，橫跨不同執行環境查看，而不必為每套系統另外發明一套可觀測性敘事。&lt;/p&gt;
&lt;figure class=&quot;feature-figure feature-figure--wide&quot;&gt;
  &lt;a
    href=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
    target=&quot;_blank&quot;
    rel=&quot;noreferrer&quot;
    aria-label=&quot;以完整解析度開啟可觀測性儀表板截圖&quot;
  &gt;
    &lt;img
      src=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
      alt=&quot;Grafana 儀表板顯示代理工作流程的活動動態、工具呼叫次數、失敗紀錄、提示內容，以及依代理、內建工具、MCP 使用情形、CLI 指令與技能所做的細分。&quot;
    /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    支撐我們代理工作流程的其中一個即時儀表板。這張截圖只是共用 Grafana 技術堆疊中的一個切片，這套技術堆疊同時也接收來自我們其他代理執行環境與系統的遙測資料。點選圖片可查看完整解析度版本。
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;為何-trace-比表面上看起來更重要&quot;&gt;為何 Trace 比表面上看起來更重要&lt;/h2&gt;
&lt;p&gt;日誌告訴我們發生了哪一類工作，Trace 則告訴我們這項工作是如何隨時間展開的。&lt;/p&gt;
&lt;p&gt;這個區別在代理系統中格外重要，因為「慢」這個詞太籠統，派不上什麼用場。&lt;/p&gt;
&lt;p&gt;一筆 trace 能告訴我們，痛點究竟來自：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;模型延遲&lt;/li&gt;
&lt;li&gt;工具執行時間&lt;/li&gt;
&lt;li&gt;重複重試&lt;/li&gt;
&lt;li&gt;某一次特別昂貴的 MCP 互動&lt;/li&gt;
&lt;li&gt;一長串個別看起來無害、加總起來卻拖慢速度的小型操作&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;實務上，我們會同時運用 hook 串流與 Tempo trace。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hook 日誌&lt;/strong&gt; 回答：發生了什麼類型的事？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trace&lt;/strong&gt; 回答：時間都花到哪裡去了？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;正是這樣的組合，讓可觀測性從一個儀表板，變成一份真正的解釋。&lt;/p&gt;
&lt;h2 id=&quot;codex-適合放在哪裡&quot;&gt;Codex 適合放在哪裡&lt;/h2&gt;
&lt;p&gt;Codex 是同一套技術堆疊的一部分，但它與 Claude Code 並不完全相同。&lt;/p&gt;
&lt;p&gt;針對 Codex，我們接入了兩個部分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;來自 Codex 的原生 OTEL 資料，接入 Alloy&lt;/li&gt;
&lt;li&gt;一個 notify webhook，接入 &lt;code&gt;codex_notify.py&lt;/code&gt;，將回合完成事件對應到我們用於 hook 事件的同一套 Loki 結構描述&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這讓我們能在同一條日誌串流中，使用像 &lt;code&gt;agent_tool=&quot;codex-cli&quot;&lt;/code&gt; 這樣的統一篩選條件。&lt;/p&gt;
&lt;p&gt;誠實地說，Codex 目前的 notify 酬載，內容仍比 Claude Code 的 hook 酬載單薄，因為它並非同一種整合介面。以我們目前的設定來說，Codex 的回合完成事件可以被正規化進共用的結構描述，但逐一工具層級的豐富擷取，目前仍然是原生 OTEL 串流做得比 notify 橋接更好。&lt;/p&gt;
&lt;p&gt;這並不是要迴避這篇文章要談的重點，反而正是重點所在：真正的可觀測性系統，是由不完美的訊號拼組而成的。&lt;/p&gt;
&lt;h2 id=&quot;透過-mcp-使用-grafana改變了整個局面&quot;&gt;透過 MCP 使用 Grafana，改變了整個局面&lt;/h2&gt;
&lt;p&gt;更大的轉變在於，Grafana 不再只是人類用瀏覽器造訪的地方。&lt;/p&gt;
&lt;p&gt;在這個儲存庫中，我們同時透過 MCP 提供 Grafana 的存取介面。這代表代理可以直接查詢 Loki、Prometheus 與 Tempo，而不必等人類先手動檢視儀表板。&lt;/p&gt;
&lt;p&gt;這讓可觀測性從被動的回報介面，變成了工作流程的主動輸入。&lt;/p&gt;
&lt;p&gt;代理可以提出這樣的問題：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;過去一小時裡，哪些工具類別失敗最多？&lt;/li&gt;
&lt;li&gt;哪個 MCP 伺服器主導了某個工作階段？&lt;/li&gt;
&lt;li&gt;近期的變更究竟減少了工具失敗，還是只是把同樣的錯誤，搬到了更依賴殼層的路徑上？&lt;/li&gt;
&lt;li&gt;哪些 trace 顯示出最高的延遲，或反覆重試？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一旦擁有這些能力，你就已經非常接近一套自我改進迴圈了。&lt;/p&gt;
&lt;h2 id=&quot;從儀表板到回饋迴圈&quot;&gt;從儀表板到回饋迴圈&lt;/h2&gt;
&lt;p&gt;這是我們認為最有意思的部分。&lt;/p&gt;
&lt;p&gt;一旦可觀測性技術堆疊可以從代理層級被查詢，遙測資料就不再只是被動的回報介面，而會變成一種控制訊號。&lt;/p&gt;
&lt;p&gt;這個迴圈的樣貌如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;代理活動產生 trace、指標，以及擴充後的 hook 日誌。&lt;/li&gt;
&lt;li&gt;Grafana 將這些證據儲存在 Loki、Tempo，以及有指標存在的 Prometheus 中。&lt;/li&gt;
&lt;li&gt;代理透過 Grafana MCP 查詢這些證據。&lt;/li&gt;
&lt;li&gt;系統辨識出不良的工具組合、脆弱的技能、薄弱的路由，或不斷產生可避免錯誤的殼層密集工作流程。&lt;/li&gt;
&lt;li&gt;代理或操作者調整提示、代理的設定、技能說明、路由規則，或工具存取權限。&lt;/li&gt;
&lt;li&gt;下一個工作階段會產生新的遙測樣貌，循環繼續進行。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;這正是從「有趣的儀表板」邁向「可衡量的改進系統」的方式。&lt;/p&gt;
&lt;p&gt;目標並不是把某一類工具的使用量最大化，而是為實際進行的工作，找出 CLI、內建工具、MCP 呼叫與技能之間正確的比例組合。&lt;/p&gt;
&lt;h2 id=&quot;這讓我們能回答哪些問題&quot;&gt;這讓我們能回答哪些問題&lt;/h2&gt;
&lt;p&gt;一旦兩種執行環境都落在同一套 Grafana 技術堆疊中，我們就能更快回答營運面的問題：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;失敗是否集中在某一個工具類別？&lt;/li&gt;
&lt;li&gt;依賴殼層的工作流程，是否正在造成本可避免的錯誤，而其實該有更高階的工具存在？&lt;/li&gt;
&lt;li&gt;哪些 MCP 伺服器承擔了大部分工作量？&lt;/li&gt;
&lt;li&gt;我們是否正在為沒有產生實質進展的代理活動付費？&lt;/li&gt;
&lt;li&gt;一個工作階段不健康，究竟是因為模型、工具，還是協調層本身？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這在多代理工作流程中格外有用，因為「代理很忙」這句話幾乎什麼都沒說明。&lt;/p&gt;
&lt;p&gt;如果某一位專家不斷被派出去、卻不斷產生高失敗率，那就是路由或提示設計上的問題。&lt;/p&gt;
&lt;p&gt;如果某個 MCP 伺服器主導了所有呼叫，這可能代表架構良好，也可能代表其他部分全是多餘的負擔。&lt;/p&gt;
&lt;p&gt;如果工具失敗率飆升、成本卻居高不下，那就是營運面的問題，而不是品質問題。&lt;/p&gt;
&lt;p&gt;如果殼層工作持續以可預期、本可避免的方式失敗，而其實該有更高階的工具存在，那就是一個產品訊號。&lt;/p&gt;
&lt;p&gt;如果某個技能不斷被觸發、卻沒有改善結果，那就是提示或路由訊號。&lt;/p&gt;
&lt;h2 id=&quot;真正的教訓&quot;&gt;真正的教訓&lt;/h2&gt;
&lt;p&gt;這裡更深層的教訓在於：代理可觀測性同時需要&lt;strong&gt;執行環境遙測&lt;/strong&gt;與&lt;strong&gt;工作流程遙測&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;執行環境遙測告訴你系統做了什麼。&lt;/p&gt;
&lt;p&gt;工作流程遙測告訴你代理「以為」自己在做什麼。&lt;/p&gt;
&lt;p&gt;兩者我們都需要。&lt;/p&gt;
&lt;p&gt;如果你只保留 trace 與計數器，你就會錯過語意層；如果你只保留 hook 事件，你就會錯過延遲、span，以及更完整的執行環境全貌。&lt;/p&gt;
&lt;p&gt;而如果你兩者都保留，卻從未將其回饋給代理層，你得到的只是監控，而不是調適。&lt;/p&gt;
&lt;p&gt;正是這樣的組合，讓整套系統既足夠可解釋以供操作，也足夠可調整以持續改進。&lt;/p&gt;
&lt;h2 id=&quot;仍不完美之處&quot;&gt;仍不完美之處&lt;/h2&gt;
&lt;p&gt;仍有一些粗糙的邊角。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;並非每個 hook 事件都包含我們希望有的耗時與 token 資料。&lt;/li&gt;
&lt;li&gt;有些最好的時間分析視角，仍來自 Tempo trace，而不是 hook 日誌。&lt;/li&gt;
&lt;li&gt;在擴充後的事件串流中，Codex 目前在語意豐富度上仍不及 Claude Code。&lt;/li&gt;
&lt;li&gt;這張儀表板截圖，是一個真實的營運介面，而不是一件精心打磨的行銷素材。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最後這一點是刻意為之的。我們寧可展示真實的儀表面板，也不願假裝代理系統會神奇地自我解釋一切。&lt;/p&gt;
&lt;h2 id=&quot;這對-maguyva-為何重要&quot;&gt;這對 Maguyva 為何重要&lt;/h2&gt;
&lt;p&gt;Maguyva 的核心，是要為代理提供更好的程式碼智慧。但一旦代理真正開始做有用的工作，一項新的需求會立刻浮現：你需要看見它們的行為表現。&lt;/p&gt;
&lt;p&gt;搜尋品質、路由品質、工具選擇，以及情境使用效率，全都會變成可觀測的問題。&lt;/p&gt;
&lt;p&gt;這正是我們認為值得寫下這篇文章的原因。未來的代理技術堆疊，不會只是提示與工具，而是提示、工具，再加上告訴你這整套機制是否真正運作正常的監測層。&lt;/p&gt;
&lt;p&gt;如果你正在認真打造代理工作流程，可觀測性就不是可有可無的基礎設施，它就是產品本身的一部分。&lt;/p&gt;
</content:encoded><category>Observability</category><category>Grafana</category><category>OpenTelemetry</category><category>Architecture</category></item><item><title>挖掘迴圈：變更如何化為組織記憶</title><link>https://maguyva.ai/zh-hant/blog/mining-workflow-closing-the-loop</link><guid isPermaLink="true">https://maguyva.ai/zh-hant/blog/mining-workflow-closing-the-loop</guid><description>Git 提交會轉化為結構化的變更日誌條目與架構決策紀錄，再回饋給 AI 代理，成為可查詢的組織記憶。</description><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;本文中的數字反映發布當下（2026 年 2 月）的系統狀態。目前最新數字請參見我們的&lt;a href=&quot;https://maguyva.ai/zh-hant/team&quot;&gt;團隊頁面&lt;/a&gt;。&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;每個工程團隊都面臨同樣的難題：變更不斷發生，但這些變更背後的&lt;em&gt;原因&lt;/em&gt;卻不斷流失。六個月後，有人問「我們當初為什麼在 pipeline 各階段採用 DuckDB？」而答案只存在於當初做出這個決定的人腦中 — 前提是那個人還在團隊裡。&lt;/p&gt;
&lt;p&gt;我們打造了一套挖掘工作流程，補上了這個缺口。變更透過 git 提交流動，經我們的挖掘管線處理後，化為結構化的變更日誌條目與架構決策紀錄，再透過 CLI 查詢回饋給我們的 AI 代理。結果就是：人類與 AI 都能存取的組織記憶。&lt;/p&gt;
&lt;h2 id=&quot;問題所在決策會蒸發&quot;&gt;問題所在：決策會蒸發&lt;/h2&gt;
&lt;p&gt;想想一個典型情境。某位開發者提交了：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;feat(canonical): add DuckDB runtime for pipeline stages&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這筆提交代表了一項重大的架構抉擇。團隊評估了多個選項、權衡了各種取捨，最終基於特定原因選擇了 DuckDB。但這些脈絡全都存在於：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;某個 Slack 討論串中（大概已經被刪掉了）&lt;/li&gt;
&lt;li&gt;某人的記憶裡（肯定正在淡去）&lt;/li&gt;
&lt;li&gt;程式碼中的一則註解（也許有，如果你夠幸運的話）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;三個月後，一位新加入的團隊成員問道：「這個新階段該用 DuckDB 還是 SQLite？」若沒有組織記憶，他們要嘛重新發明輪子，要嘛做出不一致的選擇。&lt;/p&gt;
&lt;h2 id=&quot;這個迴圈從提交到情境&quot;&gt;這個迴圈：從提交到情境&lt;/h2&gt;
&lt;p&gt;我們的挖掘工作流程，會將 git 歷史轉化為可查詢的知識：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Git Commits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine sync          │  ← Build index from git history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine candidates    │  ← Surface commits for review&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  Classification     │  ← Human or LLM assessment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  (changelog or ADR) │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├──────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Changelog   │    │ Decisions     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Ledger      │    │ Registry      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ (JSONL)     │    │ (YAML files)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ CHANGELOG.md│    │ orkestra CLI  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ per package │    │ queries       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └──────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ AI Agents     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ (via CLI)     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      └───────────────┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;關鍵洞察在於：變更日誌與架構決策都源自同一份 git 歷史，經由統一的管線處理。這確保了不會有任何內容遺漏。&lt;/p&gt;
&lt;h2 id=&quot;挖掘機制如何運作&quot;&gt;挖掘機制如何運作&lt;/h2&gt;
&lt;h3 id=&quot;步驟一同步索引&quot;&gt;步驟一：同步索引&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;此指令會掃描 git 歷史，為所有提交建立索引，並從每筆提交中擷取結構化訊號：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Conventional Commits 提交類型（&lt;code&gt;feat&lt;/code&gt;、&lt;code&gt;fix&lt;/code&gt;、&lt;code&gt;chore&lt;/code&gt;、&lt;code&gt;docs&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;範圍（屬於哪個套件或領域）&lt;/li&gt;
&lt;li&gt;不相容變更標記&lt;/li&gt;
&lt;li&gt;異動檔案與複雜度指標&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;步驟二檢查涵蓋率狀態&quot;&gt;步驟二：檢查涵蓋率狀態&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我們目前的狀態如下：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Mining Status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;=============&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Extracted:       476&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:       15161&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Changelog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Released:       6799&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:        8838&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;已處理 15,637 筆提交，其中 476 筆成為架構決策，6,799 筆成為變更日誌條目，每一筆提交都已完成分類。&lt;/p&gt;
&lt;h3 id=&quot;步驟三取得待審核候選項目&quot;&gt;步驟三：取得待審核候選項目&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; candidates&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --full&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這會列出尚未處理的提交，並附上供分類使用的完整脈絡：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;90571786d99166c0039ca2e80e4d9cd96184bd85&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;date&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;subject&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(canonical): add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;signals&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;commit_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;scope&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;canonical&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;breaking&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;is_releasable_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;domains_affected&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;pipeline&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;data-architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;body&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Establishes DuckDB as canonical in-process analytical database...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;files_changed&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/canonical/pipelines/stages/duckdb_runtime.py&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;stats&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;files&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;insertions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;450&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;deletions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;120&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這些訊號有助於引導分類：&lt;code&gt;is_releasable_type: true&lt;/code&gt; 顯示這應該出現在變更日誌中；較大的新增行數與基礎架構檔案，則顯示它也可能是一項架構決策。&lt;/p&gt;
&lt;h3 id=&quot;步驟四為提交分類&quot;&gt;步驟四：為提交分類&lt;/h3&gt;
&lt;p&gt;從這裡開始分成兩條路徑：變更日誌條目，以及架構決策。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;針對變更日誌條目：&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; added&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這會記錄提交 &lt;code&gt;abc123&lt;/code&gt; 應出現在變更日誌的「新增」類別下。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;針對架構決策：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;首先，取得一個真實的決策編號：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --domain&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pipeline&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Returns: DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接著使用該決策編號進行分類：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --decision&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這會將該提交連結到一份即將建立或更新的決策紀錄。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;針對批次處理（我們實際採用的方式）：&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Generate classifications file with LLM assistance&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --input&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classifications.jsonl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;JSONL 格式讓兩種領域能一次處理完成：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonl&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;release&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;added&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;extract&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;decision_id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-PL-142&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;def456&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;skip&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;reason&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Chore: dependency update&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;步驟五渲染輸出&quot;&gt;步驟五：渲染輸出&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --package&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pk&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這會依帳本內容產生各套件專屬的 &lt;code&gt;CHANGELOG.md&lt;/code&gt; 檔案。變更日誌屬於衍生產物 — 就算刪除它們，也能從來源帳本完美重新生成。&lt;/p&gt;
&lt;h2 id=&quot;決策紀錄的結構&quot;&gt;決策紀錄的結構&lt;/h2&gt;
&lt;p&gt;擷取出的決策會化為附帶豐富中繼資料的 YAML 檔案：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-PL-142&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adopt DuckDB as Canonical Processing Runtime for Pipeline Stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;domain&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;active&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;created&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Establishes DuckDB as the canonical in-process analytical database for pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  stage transformations. Provides a shared runtime module that resolves settings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  from pipeline defaults with stage-level overrides.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Pipeline stages performing data transformations each independently configured&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  DuckDB connections. This led to inconsistent settings, duplicated configuration&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  code, and no way to tune DuckDB globally for a pipeline run.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DuckDB provides efficient in-process OLAP with zero configuration deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Centralized runtime module eliminates duplicated DuckDB setup across stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Hierarchical settings enable global tuning with stage-level overrides&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Memory limits and thread counts can be adjusted per-pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;impact&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  positive&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Consistent DuckDB configuration across all pipeline stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Single point of control for memory/thread tuning&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Reduced code duplication in conversion and export stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  negative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adds dependency on shared runtime module&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Stages must adopt new configuration pattern&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;source_commits&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;sha&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;90571786d99166c0039ca2e80e4d9cd96184bd85&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    message&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;feat(canonical): add DuckDB runtime for pipeline stages&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    date&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    role&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;primary&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;files&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/duckdb_runtime.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/runner.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/convert_hdx_admin_boundaries_to_geoparquet.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;related&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-DA-014&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Data architecture decisions that influenced this&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;每項決策都會回連其來源提交，每項決策都會指明其影響的檔案，決策彼此之間的關係也都明確標示。&lt;/p&gt;
&lt;h2 id=&quot;cli-整合查詢組織記憶&quot;&gt;CLI 整合：查詢組織記憶&lt;/h2&gt;
&lt;p&gt;這正是迴圈閉合之處。代理可以透過 CLI 查詢決策：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Search by topic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;retry&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;回傳與重試邏輯、錯誤處理、復原模式相關的決策。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Get full details on a specific decision&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-142&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;回傳包含情境、理由與影響的完整決策紀錄。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# List recent decisions for context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 15&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;顯示近期做出了哪些架構抉擇。&lt;/p&gt;
&lt;h3 id=&quot;代理如何運用這套機制&quot;&gt;代理如何運用這套機制&lt;/h3&gt;
&lt;p&gt;我們協調器的基準指令中包含：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8;font-weight:bold&quot;&gt;**Essential CLI commands:**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; `orkestra registry decisions search &quot;X&quot;`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; — Find architectural decisions&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;當代理被要求實作與 DuckDB 相關的內容時，它可以先檢查：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;DuckDB&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;並發現 DEC-PL-142，從中了解：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;我們為何選擇 DuckDB（脈絡）&lt;/li&gt;
&lt;li&gt;該如何正確使用它（代理指引）&lt;/li&gt;
&lt;li&gt;該查看哪些檔案（檔案）&lt;/li&gt;
&lt;li&gt;有哪些相關決策（相關項目）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;代理不必重新發明輪子，而是能在既有模式的基礎上繼續建構。&lt;/p&gt;
&lt;h2 id=&quot;三問測試&quot;&gt;三問測試&lt;/h2&gt;
&lt;p&gt;並非每筆提交都值得建立決策紀錄，我們以「三問測試」來篩選：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;這個決定當初難做嗎？&lt;/strong&gt; 是否需要大量分析、取捨評估或討論？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;改變它的代價高嗎？&lt;/strong&gt; 若要推翻這項決策，是否需要大幅重做？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;它是否具有全系統層級的影響？&lt;/strong&gt; 是否影響多個套件，或建立了其他人將遵循的模式？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;只要一筆提交對這三個問題中至少一項回答「是」，就是決策擷取的候選對象。我們的一般比例是：每 100 筆提交約產生 1 到 4 項決策（約 1% 到 4%）。&lt;/p&gt;
&lt;p&gt;至於變更日誌條目，門檻較低：任何面向使用者的變更（功能、修正、改善）都會被記錄下來；內部雜務、文件更新與重構通常會被略過。我們的一般比例是：每 100 筆提交約產生 30 到 50 則變更日誌條目。&lt;/p&gt;
&lt;h2 id=&quot;資料儲存僅可附加的帳本&quot;&gt;資料儲存：僅可附加的帳本&lt;/h2&gt;
&lt;p&gt;挖掘系統採用僅可附加（append-only）的 JSONL 帳本，以支援無衝突的多代理作業：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/changelog/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── commits_processed.jsonl  # Classification ledger (both domains)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── release_notes.jsonl      # Changelog entries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── commits_index.yaml       # Derived index (gitignored)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/decisions/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── registry.yaml            # Decision index&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── records/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-001.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-002.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └── ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這種採用 &lt;code&gt;merge=union&lt;/code&gt; 合併設定（記錄於 &lt;code&gt;.gitattributes&lt;/code&gt;）的 JSONL 格式，代表多個代理可以同時為提交分類，而不會產生合併衝突 — 每一行都是獨立的。&lt;/p&gt;
&lt;h2 id=&quot;驗證關卡&quot;&gt;驗證關卡&lt;/h2&gt;
&lt;p&gt;在任何一次挖掘作業開始前，我們都會執行驗證：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --quick&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;此驗證會檢查：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SHA 格式是否有效&lt;/li&gt;
&lt;li&gt;決策編號格式是否符合規範&lt;/li&gt;
&lt;li&gt;同一個 SHA 是否有重複項目&lt;/li&gt;
&lt;li&gt;所參照的決策是否確實存在&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;分類完成後，我們會在提交變更前再次驗證。&lt;/p&gt;
&lt;h2 id=&quot;為什麼這很重要&quot;&gt;為什麼這很重要&lt;/h2&gt;
&lt;p&gt;我們建構的這個回饋迴圈，解決了幾項問題：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;對新進團隊成員而言：&lt;/strong&gt; 他們不必再問「我們當初為什麼這麼做？」，而是可以直接搜尋決策登錄檔，脈絡都被完整保留。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;對 AI 代理而言：&lt;/strong&gt; 它們不必在真空中運作，可以在提出建議前先查詢組織知識。當被要求新增一個 pipeline 階段時，它們能發現 DuckDB 這項模式，並依循它。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;對架構一致性而言：&lt;/strong&gt; 決策是明確且可搜尋的。當有人提出與既有決策相牴觸的做法時，系統能夠揭露這項衝突。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;對變更日誌生成而言：&lt;/strong&gt; 發布說明不再是最後一刻的臨時拼湊，而是開發過程中持續分類所產生的副產品。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;對新人上手而言：&lt;/strong&gt; 新進代理會繼承程式碼庫的完整脈絡。它們看到的不只是程式碼本身，還有塑造出這些程式碼的種種決策。&lt;/p&gt;
&lt;h2 id=&quot;目前狀態&quot;&gt;目前狀態&lt;/h2&gt;
&lt;p&gt;截至目前為止：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;已透過此管線處理 &lt;strong&gt;15,637 筆提交&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;已擷取並記錄 &lt;strong&gt;476 項架構決策&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;已記錄 &lt;strong&gt;6,799 則變更日誌條目&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;兩個領域的涵蓋率皆為 &lt;strong&gt;100%&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;自我們開始執行以來，每一筆提交都已完成分類，組織記憶完整且可查詢。&lt;/p&gt;
&lt;h2 id=&quot;開始使用&quot;&gt;開始使用&lt;/h2&gt;
&lt;p&gt;若你想實作類似的機制：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;從 Conventional Commits 格式開始。&lt;/strong&gt; 當提交具備結構化前綴（&lt;code&gt;feat:&lt;/code&gt;、&lt;code&gt;fix:&lt;/code&gt;、&lt;code&gt;chore:&lt;/code&gt;）時，挖掘管線的效果最好。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;定義你的領域。&lt;/strong&gt; 我們使用像 &lt;code&gt;pipeline&lt;/code&gt;、&lt;code&gt;agent-design&lt;/code&gt;、&lt;code&gt;observability&lt;/code&gt;、&lt;code&gt;data-modeling&lt;/code&gt; 這樣的領域，用以依區塊整理決策。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;養成分類的習慣。&lt;/strong&gt; 當團隊定期為提交分類時，挖掘機制才會奏效；搭配 LLM 協助的批次處理，有助於擴大規模。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;讓決策可被查詢。&lt;/strong&gt; 當代理能透過 CLI 搜尋決策時，其價值會不斷複利累積；請將輸出結構化，以利機器讀取。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;閉合這個迴圈。&lt;/strong&gt; 決策應該影響未來的工作，請在代理指令與程式碼審查檢查清單中納入決策參照。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;目標並非追求完美的文件，而是讓變更背後的&lt;em&gt;原因&lt;/em&gt;，無論是今天還是六個月後，都能讓人類與 AI 同樣觸手可及。當變更化為組織記憶，團隊便能在既有模式的基礎上持續建構，而不必一再重新發明。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;這套挖掘工作流程是我們協調引擎的一部分，具體來說，屬於我們協調套件中的情境引擎模組。&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Workflows</category></item><item><title>技能挖掘：從 3,500 個候選項目到 466 項能力</title><link>https://maguyva.ai/zh-hant/blog/skill-mining-3500-and-counting</link><guid isPermaLink="true">https://maguyva.ai/zh-hant/blog/skill-mining-3500-and-counting</guid><description>我們篩選了 3,500 個技能候選項目，最終採納 466 項。這是一套系統化的挖掘與導入迴圈，用於大規模建構一套一致的 AI 代理技能庫。</description><pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;本文中的數字反映發布當下（2026 年 1 月）的系統狀態。目前最新數字請參見我們的&lt;a href=&quot;https://maguyva.ai/zh-hant/team&quot;&gt;團隊頁面&lt;/a&gt;。&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;3500-項技能的難題&quot;&gt;3,500 項技能的難題&lt;/h2&gt;
&lt;p&gt;當我們開始打造代理協調系統時，遇到了一個有趣的挑戰：整個 AI 生態系中散落著成千上萬個潛在技能。GitHub 儲存庫、廠商文件、社群專案、內部經驗模式 — 技能無所不在。但哪些才真正重要？哪些真的有效？又該如何維護一套代理真正能派上用場的一致技能庫？&lt;/p&gt;
&lt;p&gt;我們的答案是：一套系統化的挖掘與導入迴圈。&lt;/p&gt;
&lt;h2 id=&quot;今天的數字&quot;&gt;今天的數字&lt;/h2&gt;
&lt;p&gt;在 Anthropic 於 2025 年 10 月 16 日推出 Agent Skills 剛滿三個多月後，本文於 2026 年 1 月 27 日發布時，我們的現況如下：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數量&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;已識別候選項目&lt;/td&gt;
&lt;td&gt;3,500+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;已採納技能&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;廠商技能&lt;/td&gt;
&lt;td&gt;373&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;內部技能&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;活躍廠商&lt;/td&gt;
&lt;td&gt;25+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;每項技能平均 token 數&lt;/td&gt;
&lt;td&gt;2,834&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;參照工具數&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;不重複標籤數&lt;/td&gt;
&lt;td&gt;635&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;我們審核了超過 3,500 個技能候選項目，最終採納了 466 項，採納率為 13% — 這樣的高度篩選是刻意設計的結果。&lt;/p&gt;
&lt;h2 id=&quot;知識分層系統&quot;&gt;知識分層系統&lt;/h2&gt;
&lt;p&gt;並非所有技能生而平等，我們將它們組織成五個知識層級（K0 至 K4），各自代表不同的適用範圍：&lt;/p&gt;
&lt;h3 id=&quot;k0基礎通用&quot;&gt;K0：基礎（通用）&lt;/h3&gt;
&lt;p&gt;每個代理都應具備的技能，代表能在任何地方都適用的「優秀思考者」能力。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;foundations/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── test-first-discipline       # TDD: Red-Green-Refactor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── evidence-based-completion   # Verify before claiming done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── systematic-debugging        # Root cause methodology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── structured-planning         # Break work into tasks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── context-budget-awareness    # Manage token consumption&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;K0 技能可移植到任何專案、任何領域、任何技術堆疊，它們編碼的是通用的認知模式。&lt;/p&gt;
&lt;h3 id=&quot;k1身份專業領域&quot;&gt;K1：身份（專業領域）&lt;/h3&gt;
&lt;p&gt;「優秀工程師」或「優秀研究者」等，適用於某一學科內各個專案的技能。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;identities/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── research-workflows          # Multi-source research&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── web-extraction-playbook     # Content extraction&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── code-review                 # PR review patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── cli-interface-standards     # CLI design patterns&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k2領域專業知識&quot;&gt;K2：領域（專業知識）&lt;/h3&gt;
&lt;p&gt;「優秀的資料庫專家」或「優秀的安全工程師」等，可在某一領域內移植的技能。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domains/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── schema-migration-workflow   # Safe migration patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── rpc-validation-checklist    # RPC health checks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── auth-validation-checklist   # JWT/OAuth patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── secrets-audit-checklist     # Credential scanning&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k3技術堆疊技術&quot;&gt;K3：技術堆疊（技術）&lt;/h3&gt;
&lt;p&gt;「優秀的 Supabase 使用者」或「優秀的 Cloudflare 開發者」等，針對特定技術堆疊的技能。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;stacks/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── maguyva-quickstart          # Our semantic search patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── cloudflare-deployment       # Workers/Pages deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── mcp-tool-best-practices     # MCP tool selection&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k4專案組織&quot;&gt;K4：專案（組織）&lt;/h3&gt;
&lt;p&gt;專屬於我們組織與工作流程的技能。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;project/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── agent-creation-workflow     # How we build agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── skill-authoring-workflow    # How we write skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── mining-session-workflow     # This very process&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor-skill-evaluation     # Evaluation rubrics&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;挖掘迴圈&quot;&gt;挖掘迴圈&lt;/h2&gt;
&lt;h3 id=&quot;第一階段發現&quot;&gt;第一階段：發現&lt;/h3&gt;
&lt;p&gt;技能來自四面八方：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;廠商儲存庫&lt;/strong&gt;：AWS、Anthropic、Cloudflare、Supabase 以及社群貢獻者，都會發布技能集合，我們追蹤超過 25 個廠商根目錄。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;社群專案&lt;/strong&gt;：GitHub 上充滿了 Claude Code 範本、代理模式與工作流程定義。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;內部經驗模式&lt;/strong&gt;：隨著我們團隊解決問題，各種模式會逐漸浮現，並被正式化為技能。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;文件挖掘&lt;/strong&gt;：技術文件中經常隱含著技能 — 程序、檢查清單、決策樹。&lt;/p&gt;
&lt;p&gt;發現過程持續不斷，我們會用一份技能待辦清單，在正式評估之前追蹤候選項目。&lt;/p&gt;
&lt;h3 id=&quot;第二階段評估&quot;&gt;第二階段：評估&lt;/h3&gt;
&lt;p&gt;每個候選項目都會經過同一套量規：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;adoption_criteria&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;fills_real_gap&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # We lack this capability&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;well_structured&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;actively_maintained&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Commits in last 6 months&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;portable&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;            # Not hyper-specific&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;tested&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Evidence of usage&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;五項產品標準必須全數通過，這正是 87% 的候選項目遭到否決的原因。&lt;/p&gt;
&lt;p&gt;接著，每個候選項目還會經過一次獨立的信任審查。我們不會把官方廠商儲存庫、知名的社群維護者，以及隨機的 GitHub 儲存庫，視為同等可信的來源。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;trust_review&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  vendor_credibility&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ownership_verified&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Official vendor, known maintainer, or internal source&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;maintenance_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Recent commits, issue response, release history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adoption_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Evidence of real use, stars alone are not enough&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;provenance_clear&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;         # We can trace where the skill came from&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  prompt_injection_scan&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;hidden_instruction_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Buried &quot;ignore previous instructions&quot; patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;exfiltration_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Prompts that try to leak files, secrets, or context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;authority_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Claims of priority over system or developer rules&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  script_audit&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;inspect_scripts&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Read shell/python/js helpers before adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;network_and_exec_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # curl|bash, remote downloads, subprocess execution&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;file_and_secret_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;   # Env vars, credential access, broad file writes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;destructive_action_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # rm, reset, overwrite, or unsafe automation&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;受信任的廠商能獲得較輕量的來源審查，但這不代表可以免審通過。不受信任或來源不明的技能，則會經過更深入的人工稽核，而且在腳本被讀過、確認範圍、並歸類為安全之前，我們絕不會執行隨附的腳本。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;缺口分析&lt;/strong&gt;：在採納之前，我們會先搜尋自己的登錄檔：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;&amp;lt;capability&amp;gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果我們已經有了，就不需要再採納；如果我們有相近的東西，我們可能會選擇合併，而非直接採納。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;深度與規範評分&lt;/strong&gt;：我們也會為候選項目對代理技能模型的運用完整度評分。單一的 &lt;code&gt;SKILL.md&lt;/code&gt; 依然可能有用，但若能依照 &lt;code&gt;agentskills.io&lt;/code&gt; 所鼓勵的方式，將指令與參考資料、腳本、素材分開，技能就會更有價值、更深入。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;skill_depth&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md only&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                     # Single instruction file&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md + strong description&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Clear triggers and scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                  # Load docs only when needed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds atomic scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Small, reviewable helpers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds assets/examples/templates&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;    # Full progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;depth_signals&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;standards_adherence&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;        # Structure aligns with agentskills.io conventions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;reference_quality&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Curated references, not giant context dumps&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;script_atomicity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Focused helpers, not opaque monoliths&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tool_boundary_clarity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Clear limits on what the skill can execute&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;community_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Stars/forks/users help, but only as a weak boost&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;GitHub 星數可以稍微提升可信度分數，但永遠救不回一個膚淺或不安全的技能。一個星數很高、卻只有一份內容含糊的 &lt;code&gt;SKILL.md&lt;/code&gt; 和不透明腳本的儲存庫，其分數會低於一個規模較小、卻擁有精確說明、精心整理的 &lt;code&gt;references/&lt;/code&gt;、以及真正充分運用技能完整能力的原子化輔助工具的儲存庫。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;結構分析&lt;/strong&gt;：我們會檢查技能的品質：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;wc&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -l&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/SKILL.md&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Size check&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Supporting files&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Bundled docs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;若候選項目包含腳本，審查就會更加嚴格。一項好的技能不只要有用，還必須清晰易讀、範圍受限，且能安全地交給代理使用。光是這道安全篩選，就足以刷掉相當一部分原本看起來頗有意思的候選項目。&lt;/p&gt;
&lt;h3 id=&quot;第三階段導入&quot;&gt;第三階段：導入&lt;/h3&gt;
&lt;p&gt;當一項技能通過評估後，就會進入登錄檔。但技能從不會原封不動地被採納，而是會經過調整以符合我們的系統。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;採納時的調整&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;中繼資料正規化&lt;/strong&gt;：每項技能都會套用我們的前置資料結構描述&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;K 層級指派&lt;/strong&gt;：技能會被歸入適當的知識層級&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;標籤擴充&lt;/strong&gt;：加入標籤以利於被發現&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工具宣告&lt;/strong&gt;：明確宣告允許使用的工具&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;章節對齊&lt;/strong&gt;：內容會被重新組織，以符合我們的範本&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;導入後典型的技能 YAML 範例如下：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  identifier&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Systematic evaluation of vendor skills for adoption.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  layer&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;K4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  semantic_folder&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;project&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  source&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;core&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-17&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;frontmatter&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;meta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skill-adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  allowed_tools&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Read&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Write&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Edit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Grep&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Glob&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Task&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;第四階段範圍指派&quot;&gt;第四階段：範圍指派&lt;/h3&gt;
&lt;p&gt;技能會被指派到「範圍」— 決定哪些代理會載入哪些技能的分類：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/rpc-validation-checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-database&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-auth&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/research-workflows&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/web-extraction-playbook&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/dataset-discovery-quickstart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;代理會宣告自己的範圍，技能則會自動被指派：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent definition&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Gets: all database skills + all research skills + universal skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;第五階段實體化&quot;&gt;第五階段：實體化&lt;/h3&gt;
&lt;p&gt;技能在正式環境中並非以 YAML 形式存在，而是會被渲染為 Claude Code 能夠載入的 SKILL.md 檔案：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這個指令會：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;讀取所有技能的 YAML 定義&lt;/li&gt;
&lt;li&gt;透過 Jinja 範本進行渲染&lt;/li&gt;
&lt;li&gt;將 SKILL.md 檔案寫入 &lt;code&gt;.claude/skills/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;依 K 層級組織（foundations/、identities/、domains/、stacks/、project/）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最終的輸出結構如下：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;.claude/skills/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── foundations/     # K0: Universal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── identities/      # K1: Discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── domains/         # K2: Subject&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── stacks/          # K3: Technology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── project/         # K4: Organization&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor/          # External skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;休眠範圍模式&quot;&gt;休眠範圍模式&lt;/h2&gt;
&lt;p&gt;我們最強大的模式之一，是「已採納但未載入」的技能，我們稱之為休眠範圍。&lt;/p&gt;
&lt;p&gt;以來自 k-dense-scientific 儲存庫的科學運算技能為例：我們已採納超過 120 項技能，涵蓋生物資訊學、化學、量子運算與臨床資訊學。但我們大多數代理並不需要分子對接或基因表現分析。&lt;/p&gt;
&lt;p&gt;我們並不會把全部 120 項技能都載入每一個代理（那會撐爆情境視窗），而是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;以特定範圍（例如 &lt;code&gt;bioinformatics&lt;/code&gt;）&lt;strong&gt;採納&lt;/strong&gt;這些技能&lt;/li&gt;
&lt;li&gt;讓它們保持&lt;strong&gt;休眠&lt;/strong&gt; — 已登錄但未載入&lt;/li&gt;
&lt;li&gt;只在代理宣告該範圍時才&lt;strong&gt;啟用&lt;/strong&gt;它們&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# In scopes.yaml - dormant scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Bioinformatics and genomics&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: []  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Empty - skills exist but aren&apos;t loaded&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# When an agent needs bioinformatics:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent YAML&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Now loads bioinformatics skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這個模式讓我們的登錄檔中能容納 466 項技能，而一般代理卻只會載入其中 40 到 60 項相關的技能。&lt;/p&gt;
&lt;h2 id=&quot;技能類型&quot;&gt;技能類型&lt;/h2&gt;
&lt;p&gt;技能有三種認知模式：&lt;/p&gt;
&lt;h3 id=&quot;工作流程&quot;&gt;工作流程&lt;/h3&gt;
&lt;p&gt;有序的程序性步驟：「1. 做 X，2. 接著做 Y，3. 最後做 Z」&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: schema-migration-workflow, mining-session-workflow&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;紀律&quot;&gt;紀律&lt;/h3&gt;
&lt;p&gt;行為護欄：「務必做 X」「絕不做 Y」「優先選擇 Z」&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: test-first-discipline, evidence-based-completion&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;檢查清單&quot;&gt;檢查清單&lt;/h3&gt;
&lt;p&gt;驗證標準：「確認 X」「驗證 Y」「檢查 Z」&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: auth-validation-checklist, secrets-audit-checklist&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;品質關卡&quot;&gt;品質關卡&lt;/h2&gt;
&lt;p&gt;每項技能在發布前都必須通過驗證：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;validation&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  file_exists&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Skill file at declared path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  frontmatter_valid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Frontmatter parses correctly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  sections_complete&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Expected sections present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tools_registered&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Declared tools exist in registry&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;說明文字必須介於 50 到 400 字元之間，並包含觸發語句（例如「Use when…」「When you need…」），讓 Claude Code 知道何時該建議使用它。&lt;/p&gt;
&lt;p&gt;我們會持續進行驗證：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;廠商生態系&quot;&gt;廠商生態系&lt;/h2&gt;
&lt;p&gt;我們的 373 項廠商技能，來源如下：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;廠商&lt;/th&gt;
&lt;th&gt;技能數&lt;/th&gt;
&lt;th&gt;領域&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AWS Agent&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;雲端服務&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;文件生成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;邊緣運算&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supabase&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;資料庫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;k-dense&lt;/td&gt;
&lt;td&gt;100+&lt;/td&gt;
&lt;td&gt;科學運算&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;silvainfm&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;資料科學&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Developer Kit&lt;/td&gt;
&lt;td&gt;45+&lt;/td&gt;
&lt;td&gt;Spring／Java&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;瀏覽器自動化&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;每個廠商根目錄都會在 metadata.yaml 中宣告：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;vendor_roots&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/aws-agent-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;aws&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/k-dense-scientific/scientific-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;k-dense&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;supabase&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;當 &lt;code&gt;orkestra sync&lt;/code&gt; 執行時，廠商技能會依各自的廠商命名空間，以符號連結方式連進 &lt;code&gt;.claude/skills/vendor/&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&quot;我們學到的事&quot;&gt;我們學到的事&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;高度篩選有其回報。&lt;/strong&gt; 把每個看起來有用的東西都採納進來，是很誘人的做法，但每項技能都要耗費 token。以平均每項技能 2,834 個 token 來說，膨脹的代價很快就會浮現。我們 13% 的採納率，讓代理保持精簡。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;結構能促進發現。&lt;/strong&gt; K 層級系統不只是為了分類，更關乎可移植性。K0 技能可以在任何地方重複使用；K4 技能則刻意侷限於特定專案。這樣的清晰度，讓人類與代理都能更容易找到自己需要的東西。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;休眠範圍具備擴展性。&lt;/strong&gt; 你可以採納數百項技能，卻不必全部載入。範圍機制讓你能建立一套涵蓋全面的登錄檔，同時讓每個代理各自的情境視窗維持在可管理的範圍內。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;採納時的調整不可或缺。&lt;/strong&gt; 未經處理的原始廠商技能，很少能直接契合你的系統。導入流程 — 加入中繼資料、指派層級、擴充標籤 — 讓外部技能得以在內部順利運作。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;挖掘是持續進行的。&lt;/strong&gt; 3,500 這個數字仍在持續成長：新的廠商儲存庫不斷出現，社群模式不斷浮現，內部工作流程也不斷成形。這個迴圈永不停止。&lt;/p&gt;
&lt;h2 id=&quot;接下來的計畫&quot;&gt;接下來的計畫&lt;/h2&gt;
&lt;p&gt;我們正在推進幾項改進：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;自動化缺口偵測&lt;/strong&gt;：當常見的代理失誤本可透過某項尚未採納的技能解決時，發出警示&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;技能淘汰流程&lt;/strong&gt;：為已被取代或不再使用的技能，建立正式的退役程序&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;跨技能依賴關係&lt;/strong&gt;：明確宣告技能之間的前置需求&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;使用分析&lt;/strong&gt;：追蹤代理實際呼叫了哪些技能，而不只是載入了哪些&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;技能挖掘迴圈是一種基礎建設，並不光鮮亮麗，但正是它，讓 41 個代理能在情境限制內，與 466 項能力協調一致地運作。&lt;/p&gt;
&lt;p&gt;這就是 3,500 如何變成 466 的故事：不是靠忽略其中的 3,000 個，而是靠系統化地逐一評估、只採納真正有效的那些。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;想親眼看看這套技能系統實際運作嗎？歡迎查看 &lt;code&gt;uv run orkestra skills list&lt;/code&gt;，探索我們目前的登錄檔。&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Skills</category></item><item><title>漸進式揭露：透過 CLI 窺探代理系統</title><link>https://maguyva.ai/zh-hant/blog/progressive-disclosure-cli-into-agents</link><guid isPermaLink="true">https://maguyva.ai/zh-hant/blog/progressive-disclosure-cli-into-agents</guid><description>代理系統預設是不透明的。漸進式揭露為操作者提供分層的 CLI 檢視 — 從快速狀態檢查，到完整的代理內部細節與決策軌跡，一應俱全。</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;本文中的數字反映發布當下（2026 年 1 月）的系統狀態。目前最新數字請參見我們的&lt;a href=&quot;https://maguyva.ai/zh-hant/team&quot;&gt;團隊頁面&lt;/a&gt;。&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;代理系統在設計上本就不透明。它們會做決策、呼叫工具，並協調數十位專家之間的工作。但當出了問題 — 或你單純只是想了解目前發生了什麼事 — 該從哪裡著手查看？&lt;/p&gt;
&lt;p&gt;答案是漸進式揭露：一種分層介面，恰好在你需要的時候、揭露恰好足夠的複雜度。&lt;/p&gt;
&lt;h2 id=&quot;不透明的問題&quot;&gt;不透明的問題&lt;/h2&gt;
&lt;p&gt;一套現代的代理協調系統，可能包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;超過 40 位各具能力的專家代理&lt;/li&gt;
&lt;li&gt;超過 700 項技能，涵蓋內部自動化與第三方整合&lt;/li&gt;
&lt;li&gt;超過 470 項塑造行為的架構決策&lt;/li&gt;
&lt;li&gt;數十個提供外部能力的 MCP 工具伺服器&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這樣的複雜度是刻意設計的：代理需要取用豐富的情境資訊 — 領域知識、程式碼智慧、資料庫結構描述 — 才能做出好的決策。但這份豐富度，同時也帶來了能見度的問題。&lt;/p&gt;
&lt;p&gt;你怎麼知道哪個代理負責處理資料庫遷移？哪些決策塑造了搜尋系統的排名行為？架構顧問代理又能取用哪些工具？&lt;/p&gt;
&lt;p&gt;若沒有結構化的存取方式，你就只能翻讀原始碼，或是祈禱文件仍是最新的。&lt;/p&gt;
&lt;h2 id=&quot;將漸進式揭露視為一種架構&quot;&gt;將漸進式揭露視為一種架構&lt;/h2&gt;
&lt;p&gt;漸進式揭露不只是一種 UI 模式，而是一項架構原則：將資訊分層組織，一層比一層深入，讓使用者能在剛好回答出自己問題的那一層停下來。&lt;/p&gt;
&lt;p&gt;對代理系統而言，這化為深度遞增的一系列 CLI 指令：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;層級&lt;/th&gt;
&lt;th&gt;指令&lt;/th&gt;
&lt;th&gt;回答的問題&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra system status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;一切是否健康？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;有哪些代理存在？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents info &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;這個代理做什麼？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra decisions search&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;為什麼它是這樣運作的？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Maguyva MCP 工具&lt;/td&gt;
&lt;td&gt;讓我看看程式碼。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;每一層都回答了一個自然而然的後續問題，你很少需要直接跳到第五層。&lt;/p&gt;
&lt;h2 id=&quot;第一層系統健康狀態&quot;&gt;第一層：系統健康狀態&lt;/h2&gt;
&lt;p&gt;第一個問題永遠是：一切都在正常運作嗎？&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; system&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_internal&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;466&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_vendor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;240&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;706&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;commands&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;17&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一個指令、四個數字，就足以知道系統設定完成、各登錄檔也都已經填入資料。&lt;/p&gt;
&lt;p&gt;若代理數量意外下降、或技能載入失敗，你會在這裡第一時間看到，不需要翻找日誌。&lt;/p&gt;
&lt;h2 id=&quot;第二層代理清單&quot;&gt;第二層：代理清單&lt;/h2&gt;
&lt;p&gt;一旦確認系統健康，下一個問題是：有哪些可用？&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這會回傳結構化資料 — 代理名稱、說明、模型偏好、涵蓋領域。輸出預設為 JSON 格式，可輕鬆透過管線送入 &lt;code&gt;jq&lt;/code&gt; 進行篩選：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; jq&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &apos;.agents[] | select(.model == &quot;opus&quot;) | .name&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;想找出負責資料庫工作的代理？搜尋指令可以幫你縮小範圍：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;它會掃描名稱、說明與能力，讓你不必讀完 40 份代理定義，就能找到對的專家。&lt;/p&gt;
&lt;h2 id=&quot;第三層代理深度檢視&quot;&gt;第三層：代理深度檢視&lt;/h2&gt;
&lt;p&gt;找到一個看起來相關的代理了？&lt;code&gt;info&lt;/code&gt; 指令會揭露所有細節：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; architecture-advisor&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;輸出內容包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;中繼資料&lt;/strong&gt;：名稱、類別、模型偏好、說明&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;領域&lt;/strong&gt;：這個代理涵蓋哪些知識領域&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;身份&lt;/strong&gt;：性格特質（架構師、策略家、知識架構師）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工具指南&lt;/strong&gt;：哪些工具文件會被注入情境&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工具&lt;/strong&gt;：這個代理可用的完整 MCP 工具清單&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以下是你會看到的內容範例：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;metadata&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;architecture-advisor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;model&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;opus&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;description&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Strategic decision-making and architectural guidance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;domains&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;product&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;development/architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;meta/strategy&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;mcp_tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__intelligent_search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__analyze_dependencies&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__supabase__execute_sql&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FDAEB7;font-style:italic&quot;&gt;      ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這會準確告訴你這個代理能做什麼，完全不需要查看原始碼。&lt;/p&gt;
&lt;h2 id=&quot;第四層決策考古&quot;&gt;第四層：決策考古&lt;/h2&gt;
&lt;p&gt;代理會依照已記錄的決策行事。當你需要理解某件事&lt;em&gt;為什麼&lt;/em&gt;是這樣運作時，決策登錄檔就是最終真實來源。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;agent&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這會回傳相符的架構決策：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;active&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;每項決策都具備完整的溯源資訊 — 何時做出、為何做出、考量過哪些取捨、由哪些提交實作：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-SR-049&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Changes default values for search tools to AI-agent-optimal behavior...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;AI agents work better with pre-ranked, importance-weighted results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Graph metrics already computed by pipeline - leverage them&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Community context helps agents understand feature scope in single query&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;source_commits&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;156a880d05eae295669ef7c194b039023f245511&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;message&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(maguyva): enable boost_by_importance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這是一份能持續保持最新的架構文件，因為它是從提交中挖掘出來的，而非人工手動維護。&lt;/p&gt;
&lt;h2 id=&quot;第五層直接的程式碼智慧&quot;&gt;第五層：直接的程式碼智慧&lt;/h2&gt;
&lt;p&gt;當你需要看到實際的實作內容 — 而不只是關於它的中繼資料 — Maguyva 的 MCP 工具能提供直接存取。&lt;/p&gt;
&lt;p&gt;在代理工作階段中：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__intelligent_search&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  query: &quot;agent context loading&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這會自動橫跨語意、文字與 AST 搜尋，找出相關程式碼。若要查詢特定符號：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__find_symbol&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  symbol_name: &quot;load_agent_context&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;若要進行依賴分析：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__analyze_dependencies&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  target: &quot;packages/orchestration/core/agents.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這些工具不只是 grep 的替代品，而是具備圖形感知能力、經過語意索引，並與驅動代理自身運作的那套程式碼智慧完全整合。&lt;/p&gt;
&lt;h2 id=&quot;跨登錄檔的統一搜尋&quot;&gt;跨登錄檔的統一搜尋&lt;/h2&gt;
&lt;p&gt;有時候你根本不知道答案藏在哪個登錄檔裡，統一搜尋能一次橫跨所有登錄檔：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --summary&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;query&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;254&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;counts&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;skills&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;59&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;476&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;truths&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;packages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在五個登錄檔中共找到 254 筆相符結果。摘要會告訴你該往哪裡深入查看。移除 &lt;code&gt;--summary&lt;/code&gt; 可取得詳細結果，或加上 &lt;code&gt;--limit 5&lt;/code&gt; 讓輸出量維持在可掌控範圍內。&lt;/p&gt;
&lt;h2 id=&quot;為什麼這很重要&quot;&gt;為什麼這很重要&lt;/h2&gt;
&lt;p&gt;漸進式揭露不只是為了方便，它改變了你與複雜系統互動的方式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;除錯變得可掌控。&lt;/strong&gt; 當代理做出意外決策時，你不必翻遍日誌，而是先檢查它能取用哪些工具（&lt;code&gt;agents info&lt;/code&gt;）、哪些決策塑造了它的行為（&lt;code&gt;decisions search&lt;/code&gt;），必要時再追蹤實作內容（&lt;code&gt;intelligent_search&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;新人上手更快。&lt;/strong&gt; 新進團隊成員不必讀完整個程式碼庫，而是從 &lt;code&gt;system status&lt;/code&gt; 開始，透過 &lt;code&gt;agents list&lt;/code&gt; 探索，只有在遇到自己不理解的地方時，才需要深入研究。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;文件保持最新。&lt;/strong&gt; 因為 CLI 讀取的，正是設定代理所用的那些登錄檔本身，輸出內容永遠準確，文件所說的與系統實際運作的內容之間，不會出現落差。&lt;/p&gt;
&lt;h2 id=&quot;以-cli-作為介面&quot;&gt;以 CLI 作為介面&lt;/h2&gt;
&lt;p&gt;我們原本可以打造一個網頁儀表板，也可以寫出大量文件。但我們選擇打造一套直接讀取最終真實來源的 CLI。&lt;/p&gt;
&lt;p&gt;CLI 具備以下優勢：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;可組合&lt;/strong&gt;：可透過管線將輸出送入 &lt;code&gt;jq&lt;/code&gt;，並與腳本整合&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可腳本化&lt;/strong&gt;：可自動化檢查、產生報告&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;快速&lt;/strong&gt;：不需要頁面載入，也不需要身分驗證流程&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;準確&lt;/strong&gt;：讀取的是真實設定，而非快取後的呈現版本&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;對於正確性比美觀更重要的系統來說，CLI 才是贏家。&lt;/p&gt;
&lt;h2 id=&quot;打造你自己的漸進式揭露&quot;&gt;打造你自己的漸進式揭露&lt;/h2&gt;
&lt;p&gt;如果你正在打造代理系統，請思考使用者將如何檢視它：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;從健康檢查開始。&lt;/strong&gt; 一個指令，就能告訴你一切是否運作正常。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;提供清單檢視。&lt;/strong&gt; 先列出有什麼存在，再解釋它做什麼。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;支援針對性查詢。&lt;/strong&gt; 在大規模情境下，搜尋勝過瀏覽。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;揭露溯源資訊。&lt;/strong&gt; 讓使用者能追蹤決策回到其源頭。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;連接到程式碼智慧。&lt;/strong&gt; 最終，使用者需要看到實作內容本身。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;每一層都回答一個後續問題，請依使用頻率順序建構它們 — 多數使用者會停在第二層或第三層，只有進階使用者才會抵達第五層。&lt;/p&gt;
&lt;p&gt;目標並不是揭露一切，而是恰好揭露需要的東西、在恰好需要的時候。這正是漸進式揭露應用於代理架構的方式。&lt;/p&gt;
</content:encoded><category>Architecture</category><category>CLI</category><category>Tooling</category></item><item><title>根基真相：讓 AI 代理扎根於現實</title><link>https://maguyva.ai/zh-hant/blog/ground-truths-anchoring-ai-to-reality</link><guid isPermaLink="true">https://maguyva.ai/zh-hant/blog/ground-truths-anchoring-ai-to-reality</guid><description>AI 代理會自信滿滿地產生幻覺。根基真相是經過版本控管、限定範圍的事實，能讓代理的行為扎根於現實。以下說明我們如何建構並落實它。</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;本文中的數字反映發布當下（2026 年 1 月）的系統狀態。目前最新數字請參見我們的&lt;a href=&quot;https://maguyva.ai/zh-hant/team&quot;&gt;團隊頁面&lt;/a&gt;。&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;AI 代理的能力令人驚豔，能夠推理、統整、生成內容。但它們有一個根本弱點：會憑空捏造。不是出於惡意，而是自信滿滿地捏造。代理可能會發明根本不存在的 API 參數、引用從未定義過的設定，或是套用訓練資料中與你實際架構相牴觸的模式。&lt;/p&gt;
&lt;p&gt;常見的緩解方式是「給代理更多情境資訊」。但情境資訊本身可能自相矛盾：文件會與實作脫節，註解可能說謊，就連程式碼本身，若不理解其意圖，讀起來也可能誤導人。&lt;/p&gt;
&lt;p&gt;我們需要更明確的東西 — 一種無法被忽略、也難以被誤解的東西，能讓代理扎根於可驗證的現實。&lt;/p&gt;
&lt;p&gt;我們稱之為根基真相（Ground Truths）。&lt;/p&gt;
&lt;h2 id=&quot;什麼是根基真相&quot;&gt;什麼是根基真相？&lt;/h2&gt;
&lt;p&gt;根基真相是一項明確、經過版本控管的事實陳述，代理必須予以尊重。它不是文件，也不是註解，而是系統中的一級實體，具備：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;唯一識別碼&lt;/strong&gt;（例如 &lt;code&gt;GT-MAG-015&lt;/code&gt; 或 &lt;code&gt;GT-MAG-036&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;生命週期狀態&lt;/strong&gt;（現行、暫定或已淘汰）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;範圍&lt;/strong&gt;（平台全域、特定套件或特定領域）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;佐證&lt;/strong&gt;（能證明該陳述的檔案路徑、網址或參照）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;代理指引&lt;/strong&gt;（明確的「該做」與「該避免」指示）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以下是我們 Maguyva 程式碼智慧平台中的一個範例：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Fuzzy symbol matching is opt-in via `find_similar=true`.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Default behavior returns empty results for non-existent symbols;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    `exact_match=true` enforces strict matching and disables all fuzzy fallbacks.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Deterministic defaults prevent agents from receiving misleading results.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Typos should fail explicitly rather than silently returning unrelated symbols.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/code_analysis_service.py&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/docs/quick_reference/parameters.md&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-25&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ai_first&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這不是散文，而是一份契約。當代理遇到這條根基真相時，它會知道：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;預設行為是確定性的（回傳空結果，而不是模糊猜測）&lt;/li&gt;
&lt;li&gt;有特定參數（&lt;code&gt;find_similar&lt;/code&gt;、&lt;code&gt;exact_match&lt;/code&gt;）具備明確定義的行為&lt;/li&gt;
&lt;li&gt;佐證存在於可驗證的特定檔案中&lt;/li&gt;
&lt;li&gt;該陳述已在特定日期完成驗證&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;根基真相登錄檔的結構&quot;&gt;根基真相登錄檔的結構&lt;/h2&gt;
&lt;p&gt;根基真相存放於 &lt;code&gt;ai_assets/reference/ground_truths.yaml&lt;/code&gt; 底下的 YAML 登錄檔中。每個套件或領域都可以擁有自己的登錄檔。其結構如下：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva Ground Truths&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Foundational constraints and principles that guide Maguyva.&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  owner&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;maguyva&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  render&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    include_statuses&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    show_deprecated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    groups&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Product Principles&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;brand&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Architecture &amp;amp; Boundaries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architecture&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;boundaries&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;cqrs&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;statements&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-001&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva is read-only with respect to user repositories...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;登錄檔包含關於整份集合本身的中繼資料、供文件生成使用的渲染設定，以及陳述本身。每則陳述都遵循由 Pydantic 模型驗證的嚴格結構描述：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; GroundTruthStatement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;BaseModel&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    status: GTStatus  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# current, tentative, deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    source: GTSource &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # claude-code, orkestra, discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    scope: GTScope  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# platform, package, domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    statement: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    rationale: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    evidence: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    last_verified: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    tags: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    agent_guidance: AgentGuidance &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;代理如何取用根基真相&quot;&gt;代理如何取用根基真相&lt;/h2&gt;
&lt;p&gt;根基真相透過多種管道提供給代理存取：&lt;/p&gt;
&lt;h3 id=&quot;1-渲染後的文件&quot;&gt;1. 渲染後的文件&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;orkestra sync&lt;/code&gt; 指令會將 YAML 登錄檔轉換為可讀的 Markdown：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;此指令會產生納入代理情境的 &lt;code&gt;GROUND_TRUTHS.md&lt;/code&gt; 檔案。渲染後的輸出會依狀態與類別將陳述分組：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;## Current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Product Principles&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Maguyva is read-only with respect to user repositories... (GT-MAG-001)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Design tool responses for AI agents first... (GT-MAG-009)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Architecture &amp;amp; Boundaries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Pipeline and Maguyva boundaries are intentional... (GT-MAG-006)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;2-cli-搜尋&quot;&gt;2. CLI 搜尋&lt;/h3&gt;
&lt;p&gt;具備殼層存取權的代理可以透過程式化方式搜尋根基真相：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;embedding&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --tag&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; security&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --status&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; current&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;搜尋函式會依加權相關性，對多個欄位進行比對評分：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; truth_fields&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(gt: GroundTruthStatement) -&amp;gt; list[FieldSpec]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.id]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;statement&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.statement]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.rationale] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; gt.rationale &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;tags&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.tags &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;evidence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.evidence &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;3-情境組成&quot;&gt;3. 情境組成&lt;/h3&gt;
&lt;p&gt;當代理是由 YAML 定義渲染而成時，其情境可以參照根基真相登錄檔：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context_composition&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  domain_knowledge&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/maguyva/ai_assets/reference/ground_truths.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這確保了相關的根基真相會在代理開始作業前先行載入。&lt;/p&gt;
&lt;h2 id=&quot;根基真相的類別&quot;&gt;根基真相的類別&lt;/h2&gt;
&lt;p&gt;檢視我們的各個登錄檔，根基真相大致可歸納為幾種模式：&lt;/p&gt;
&lt;h3 id=&quot;產品原則&quot;&gt;產品原則&lt;/h3&gt;
&lt;p&gt;界定產品「是什麼」與「不是什麼」的限制：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;「Maguyva 對使用者的程式碼庫僅有唯讀權限；唯一無法重建的資產是付費的嵌入快取。」（GT-MAG-001）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;架構邊界&quot;&gt;架構邊界&lt;/h3&gt;
&lt;p&gt;界定職責歸屬何處、以及原因：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;「pipeline 與 Maguyva 之間的邊界是刻意設計的：pipeline 可重複使用，Maguyva 掌管程式碼專屬邏輯，而 CQRS 則將管線各階段的寫入與伺服器端的讀取分離。」（GT-MAG-006）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;反幻覺規則&quot;&gt;反幻覺規則&lt;/h3&gt;
&lt;p&gt;確保工具契約維持確定性、而非仰賴推測的明確規範：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;「模糊符號比對須透過 &lt;code&gt;find_similar=true&lt;/code&gt; 主動啟用。預設行為會對不存在的符號回傳空結果；&lt;code&gt;exact_match=true&lt;/code&gt; 會強制嚴格比對，並停用所有模糊備援機制。」（GT-MAG-015）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;品質關卡&quot;&gt;品質關卡&lt;/h3&gt;
&lt;p&gt;必須維持的標準：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;「對共用基礎架構（post_filters.py、關係擷取器、共用處理器）的變更，提交前必須透過完整清單生成，針對『所有』支援語言進行驗證。僅驗證單一語言，對共用程式碼而言並不足夠。」（GT-MAG-036）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;程式碼模式&quot;&gt;程式碼模式&lt;/h3&gt;
&lt;p&gt;實作上的要求：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;「在非同步情境中處理 CPU 密集型工作時請使用 &lt;code&gt;asyncio.to_thread()&lt;/code&gt;；已淘汰的 &lt;code&gt;loop.run_in_executor()&lt;/code&gt; 模式不應用於新程式碼。」（GT-MAG-018）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;根基真相的生命週期&quot;&gt;根基真相的生命週期&lt;/h2&gt;
&lt;p&gt;根基真相並非一成不變，而是會經歷明確定義的生命週期：&lt;/p&gt;
&lt;h3 id=&quot;暫定&quot;&gt;暫定&lt;/h3&gt;
&lt;p&gt;一項尚在評估中的擬議真相，陳述已被記錄，但仍可能變動：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-044&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    get_file with include_metadata=false may still return metadata in the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    response because middleware may re-inject it for AI agent disambiguation.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;現行&quot;&gt;現行&lt;/h3&gt;
&lt;p&gt;一項代理必須遵守的已驗證真相，佐證已通過驗證：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-017&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/supabase.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;已淘汰&quot;&gt;已淘汰&lt;/h3&gt;
&lt;p&gt;一項已不再適用的真相，出於歷史紀錄目的而保留，並附上指向其後繼者的指引：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-099&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  superseded_by&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  notes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Replaced when we moved to explicit matching behavior&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;為什麼不能只靠文件&quot;&gt;為什麼不能只靠文件？&lt;/h2&gt;
&lt;p&gt;文件服務於不同的目的：它負責解釋、負責教學，可以模糊一點，也可以使用「通常」或「一般而言」之類的限定語。&lt;/p&gt;
&lt;p&gt;根基真相不能模糊。它們是斷言，要嘛適用，要嘛不適用。&lt;/p&gt;
&lt;p&gt;想想這個差異：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;文件寫法：&lt;/strong&gt;「當找不到符號時，API 通常會回傳空結果，不過在某些設定下可能會啟用模糊比對。」&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;根基真相寫法：&lt;/strong&gt;「預設行為會對不存在的符號回傳空結果；&lt;code&gt;exact_match=true&lt;/code&gt; 會強制嚴格比對，並停用所有模糊備援機制。」&lt;/p&gt;
&lt;p&gt;前者對正在學習系統的人類很有幫助；後者則能讓代理據以直接採取行動、做出決策。&lt;/p&gt;
&lt;h2 id=&quot;代理指引該做與該避免&quot;&gt;代理指引：該做與該避免&lt;/h2&gt;
&lt;p&gt;部分根基真相包含明確的代理指引：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  agent_guidance&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    do&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Fix extraction bugs in YAML config, handlers, or tree-sitter queries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add test cases at the layer where the fix lives&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    avoid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Adding validator filters to mask production bugs&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Creating test-only workarounds for extraction issues&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這消除了模糊地帶。閱讀這段內容的代理不僅知道什麼是真的，也知道這項真相意味著該採取什麼行動。&lt;/p&gt;
&lt;h2 id=&quot;驗證與維護&quot;&gt;驗證與維護&lt;/h2&gt;
&lt;p&gt;根基真相需要持續維護。我們追蹤以下資訊：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;last_verified&lt;/strong&gt;：上次有人確認該陳述仍然成立的時間&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;evidence&lt;/strong&gt;：能證明該陳述的檔案（可檢查其是否存在）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;source&lt;/strong&gt;：該真相的來源（CLI 檢視、架構審查、事後檢討所得的經驗）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;若一項根基真相的驗證日期過於陳舊、或佐證連結已失效，就是需要調查的訊號：要嘛這項真相依然成立、只是需要重新驗證，要嘛現實已經改變、這項真相需要更新。&lt;/p&gt;
&lt;h2 id=&quot;來自正式環境的真實案例&quot;&gt;來自正式環境的真實案例&lt;/h2&gt;
&lt;h3 id=&quot;安全邊界&quot;&gt;安全邊界&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-014&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Maguyva queries are search patterns, not executable code.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    SQL injection prevention is handled by PostgREST parameterization;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    application-layer SQL keyword blocking must never be added.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Blocking SQL keywords breaks legitimate code search. Users search FOR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    code containing patterns like &apos;DROP TABLE&apos;, they don&apos;t execute them.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這條根基真相能防止一類會破壞產品的、方向錯誤的「安全性改善」。&lt;/p&gt;
&lt;h3 id=&quot;擷取階段的準確度&quot;&gt;擷取階段的準確度&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (YAML config, handlers, queries), never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Validator filters only run during tests. They can hide extractor bugs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    while production responses remain wrong.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這條規則來自一段痛苦的經驗：代理曾透過只在驗證器層級加入篩選條件，讓測試機制看起來更綠，來「修補」失敗的語言套件，但正式環境中的 Maguyva 擷取器實際上仍會產生錯誤的關係邊。這條規則強制將修正導回真正的路徑：YAML 設定、查詢，或處理器本身。&lt;/p&gt;
&lt;h3 id=&quot;多層篩選&quot;&gt;多層篩選&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-023&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Language engine uses three-tier filtering: external_method_patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (builtins/stdlib), allowlists (legitimate idioms), and expected_call_targets&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (validation-time deduplication). Each tier serves a distinct purpose.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Conflating filter purposes leads to either over-filtering (missing real&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    relationships) or under-filtering (noise).&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這能防止代理把篩選條件加在錯誤的位置 — 這是常見的失誤，過去曾因此造成準確度倒退。&lt;/p&gt;
&lt;h2 id=&quot;與協調系統的整合&quot;&gt;與協調系統的整合&lt;/h2&gt;
&lt;p&gt;根基真相是更廣泛情境系統中的一層：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;架構決策（ADR）&lt;/strong&gt; — 記錄我們為何選擇方案 A 而非方案 B&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;根基真相&lt;/strong&gt; — 陳述當下確切為真的事實&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;領域模式&lt;/strong&gt; — 描述如何正確完成某件事&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;反模式&lt;/strong&gt; — 描述該避免什麼、以及原因&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;在此系統中作業的代理可以取用以上全部四種資訊。根基真相提供事實錨點，決策說明歷史脈絡，模式引導實作，反模式則提醒陷阱所在。&lt;/p&gt;
&lt;h2 id=&quot;衡量成效&quot;&gt;衡量成效&lt;/h2&gt;
&lt;p&gt;自導入根基真相以來，我們觀察到：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;「修正幻覺出的修正」這種循環變少了&lt;/li&gt;
&lt;li&gt;事實明確時，代理做決策更有信心&lt;/li&gt;
&lt;li&gt;PR 審查品質更好，因為期望被明確寫出&lt;/li&gt;
&lt;li&gt;新進代理（以及新進人類）的上手時間縮短&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;維護根基真相所投入的成本，換來了更少的除錯時間與更清晰的系統邊界，物有所值。&lt;/p&gt;
&lt;h2 id=&quot;開始使用&quot;&gt;開始使用&lt;/h2&gt;
&lt;p&gt;要在你的系統中加入一條根基真相：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;建立一個 &lt;code&gt;ground_truths.yaml&lt;/code&gt;，置於你套件的 &lt;code&gt;ai_assets/reference/&lt;/code&gt; 目錄下&lt;/li&gt;
&lt;li&gt;定義中繼資料與渲染設定&lt;/li&gt;
&lt;li&gt;依照結構描述加入陳述&lt;/li&gt;
&lt;li&gt;執行 &lt;code&gt;uv run orkestra sync&lt;/code&gt; 以產生文件&lt;/li&gt;
&lt;li&gt;將該登錄檔納入代理情境組成中&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;從最容易引發混淆的事實、或最常被違反的限制開始著手，這些正是你價值最高的根基真相。&lt;/p&gt;
&lt;h2 id=&quot;結語&quot;&gt;結語&lt;/h2&gt;
&lt;p&gt;AI 代理終究會產生幻覺，這是它們的本性。但我們可以打造一種環境，讓幻覺受到約束、讓某些事實不容妥協、讓代理能夠對照已驗證的現實來檢查自己的假設。&lt;/p&gt;
&lt;p&gt;根基真相並非萬靈丹，它需要維護、可能會過時，也會為開發流程增加額外負擔。&lt;/p&gt;
&lt;p&gt;但它提供了一項寶貴的東西：一套人類與代理都能信任的共同事實詞彙。在一個代理日益深度參與軟體開發的世界裡，這樣的共同基礎變得不可或缺。&lt;/p&gt;
&lt;p&gt;另一種選擇，是代理不斷自信地犯錯、人類不斷收拾善後的無盡循環。根基真相打破了這個循環，讓修正變得明確而持久。&lt;/p&gt;
&lt;p&gt;你的代理值得知道什麼是真的。告訴它們。&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Grounding</category></item><item><title>Orkestra：大規模協調 AI 代理</title><link>https://maguyva.ai/zh-hant/blog/orkestra-agent-orchestration</link><guid isPermaLink="true">https://maguyva.ai/zh-hant/blog/orkestra-agent-orchestration</guid><description>一個協調器將工作分派給各具專長技能與記憶的專家 AI 代理。以下說明 Orkestra 如何在正式環境中協調 46 個代理與 466 項技能。</description><pubDate>Tue, 06 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;本文中的數字反映發布當下（2026 年 1 月）的系統狀態。目前最新數字請參見我們的&lt;a href=&quot;https://maguyva.ai/zh-hant/team&quot;&gt;團隊頁面&lt;/a&gt;。&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;當我們開始使用 Claude Code 進行開發時，遇到了每個使用 AI 程式設計助理的團隊終究都會碰上的問題：單一代理無法把每件事都做好。&lt;/p&gt;
&lt;p&gt;你可以提示一個代理扮演資料庫專家，或是安全稽核員，或是前端工程師。但只要你同時要求它身兼這三種角色，品質就會下滑：情境被稀釋，指令彼此矛盾，代理變成一個什麼都懂一點、卻什麼都做得平庸的通才。&lt;/p&gt;
&lt;p&gt;於是我們打造了 Orkestra。&lt;/p&gt;
&lt;h2 id=&quot;什麼是-orkestra&quot;&gt;什麼是 Orkestra？&lt;/h2&gt;
&lt;p&gt;Orkestra 是專為 Claude Code 及類似 AI 程式設計工具打造的代理協調系統。它會在單一協調器之下，統籌多個各具專長的專家代理，並將工作分派給最適合的專家。&lt;/p&gt;
&lt;p&gt;可以把它想像成一間專為 AI 代理服務的人力仲介公司：協調器接下任務，判斷該由哪位專家處理，再附上正確的情境資訊進行委派。工作完成後，結果會回流到協調器手上進行整合。&lt;/p&gt;
&lt;p&gt;這些數字說明了一切：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;組成&lt;/th&gt;
&lt;th&gt;數量&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;專家代理&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可重複使用的技能&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;身份原型&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;思維模式&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;溝通風格&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;知識領域&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;角色系統代理的-dd&quot;&gt;角色系統：代理的 D&amp;amp;D&lt;/h2&gt;
&lt;p&gt;Orkestra 背後的核心洞察，是代理的行為源自三個可組合的基本元素：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;身份（Identity）&lt;/strong&gt; 定義代理「是什麼」。架構師（architect）設計系統結構；除錯者（debugger）追蹤失敗的根本原因；守護者（guardian）落實合規與安全邊界。我們共有 27 種可自由組合的身份原型。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;思維模式（Mindset）&lt;/strong&gt; 定義代理「如何思考」。分析型思維會將主張建立在證據之上，並量化不確定性；懷疑型思維會質疑假設、尋找反證；探索型思維則擁抱模糊性，嘗試多種做法。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;風格（Style）&lt;/strong&gt; 定義代理「如何溝通」。技術型風格會納入精確數值、引用具體檔案；精簡型風格會去除贅詞、先給出答案；圓融型風格則在誠實與得體之間取得平衡。&lt;/p&gt;
&lt;p&gt;一個代理會組合這些基本元素：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# architecture-advisor.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;identity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;knowledge-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;strategist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;mindset&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;analytical&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;concise&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這樣的組合，會產生一個能設計系統（architect）、跨領域串連知識（knowledge-architect）、設定策略方向（strategist）、以證據與資料思考（analytical）、且溝通不帶贅詞（concise）的代理。&lt;/p&gt;
&lt;p&gt;真正的威力來自組合爆炸：27 種身份 × 11 種思維模式 × 10 種風格，可產生近 3,000 種可能的代理人格。但你只需要定義對你的工作真正有意義的那些組合。&lt;/p&gt;
&lt;h2 id=&quot;技能可重複使用的能力模組&quot;&gt;技能：可重複使用的能力模組&lt;/h2&gt;
&lt;p&gt;技能是代理可以呼叫的知識與工作流程，依範圍分為分層系統：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;層級&lt;/th&gt;
&lt;th&gt;名稱&lt;/th&gt;
&lt;th&gt;範圍&lt;/th&gt;
&lt;th&gt;範例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;K0&lt;/td&gt;
&lt;td&gt;基礎&lt;/td&gt;
&lt;td&gt;通用方法論&lt;/td&gt;
&lt;td&gt;測試優先原則、以證據為本的完成標準&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K1&lt;/td&gt;
&lt;td&gt;身份&lt;/td&gt;
&lt;td&gt;依角色劃分的工作流程&lt;/td&gt;
&lt;td&gt;CLI 介面標準、效能作戰手冊&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K2&lt;/td&gt;
&lt;td&gt;領域&lt;/td&gt;
&lt;td&gt;領域專屬知識&lt;/td&gt;
&lt;td&gt;資料庫遷移模式、身份驗證機制驗證&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K3&lt;/td&gt;
&lt;td&gt;技術堆疊&lt;/td&gt;
&lt;td&gt;特定技術專屬&lt;/td&gt;
&lt;td&gt;Cloudflare 部署、Supabase 操作&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K4&lt;/td&gt;
&lt;td&gt;專案&lt;/td&gt;
&lt;td&gt;僅限本程式碼庫&lt;/td&gt;
&lt;td&gt;專案專屬的工作流程與慣例&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;技能採懶載入方式：代理在啟動時只會看到技能名稱與說明，完整內容只有在被觸發時才會載入。這讓情境保持精簡，同時使數百項技能都能被發現與運用。&lt;/p&gt;
&lt;p&gt;每項技能都包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;明確的觸發條件（例如「遷移資料庫結構描述時使用」）&lt;/li&gt;
&lt;li&gt;逐步操作指引&lt;/li&gt;
&lt;li&gt;該工作流程允許使用的工具&lt;/li&gt;
&lt;li&gt;成功標準與失敗復原路徑&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我們登錄檔中的 466 項技能，涵蓋範圍從 git 工作樹隔離、網路研究工作流程，到部署健康驗證，無所不包。&lt;/p&gt;
&lt;h2 id=&quot;為何協調很重要&quot;&gt;為何協調很重要&lt;/h2&gt;
&lt;p&gt;單一代理架構很快就會撞牆：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;情境稀釋。&lt;/strong&gt; 20 萬 token 的情境視窗聽起來很大，但一旦載入資料庫結構描述、API 文件、測試案例與資料，以及領域知識，很快就會吃緊。專家代理則可以只使用目標明確的情境。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;指令衝突。&lt;/strong&gt; 同時要求代理「徹底但要快」與「什麼都要驗證但別過度工程」，會產生內在張力。專家代理則因為範圍明確而能化解這類矛盾。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;專業深度。&lt;/strong&gt; 通才型代理對每件事都略知一二；而由正確的身份與技能組成的專家代理，則能對自己的領域有深入理解。&lt;/p&gt;
&lt;p&gt;Orkestra 採用扁平化協調：一個協調器統籌多個專家代理，專家代理不能再衍生出子專家。這能避免複雜度失控，同時仍支援平行作業。&lt;/p&gt;
&lt;p&gt;協調器可運用的有效容量高達 220 萬個 token：自身 20 萬 token 的視窗，加上最多 10 個並行子代理、各自擁有 20 萬 token。足以耗盡單一代理情境容量的工作量，在整支艦隊中卻能從容完成。&lt;/p&gt;
&lt;h2 id=&quot;渲染管線&quot;&gt;渲染管線&lt;/h2&gt;
&lt;p&gt;代理定義存放於 YAML 中，而 Claude Code 讀取的是 Markdown。Orkestra 以一套確定性的渲染管線，銜接這道落差：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;YAML Registries → Jinja Templates → .claude/agents/*.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;操作者編輯 YAML 原始檔，執行 &lt;code&gt;orkestra sync&lt;/code&gt;，渲染後的 Markdown 就會出現在 &lt;code&gt;.claude/agents/&lt;/code&gt; 中，Claude Code 隨即讀取到這些變更。&lt;/p&gt;
&lt;p&gt;這樣的區分服務於不同對象：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;YAML 原始檔&lt;/strong&gt; 包含生命週期中繼資料、標籤、驗證規則，以及供工具使用的淘汰通知&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;渲染後的 Markdown&lt;/strong&gt; 只包含模型真正需要的內容：描述、工具、技能與行為指引&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這套管線會將身份、思維模式、風格與技能，組合成單一且連貫一致的提示。即使共享部分底層技能，architect-analytical-concise 型代理所得到的系統提示，也會與 debugger-skeptical-technical 型代理截然不同。&lt;/p&gt;
&lt;h2 id=&quot;領域知識四檔案模式&quot;&gt;領域知識：四檔案模式&lt;/h2&gt;
&lt;p&gt;每個知識領域都遵循一致的結構：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domain-name/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  decisions.md      # Key choices, rationale, consequences&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  patterns.md       # Step-by-step guidance and examples&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  anti-patterns.md  # Failure modes and remediation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  evolution.md      # Dated log of changes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這種結構是為了服務代理的情境載入：處理身份驗證相關工作的代理，會載入 &lt;code&gt;authentication/patterns.md&lt;/code&gt; 取得指引，並載入 &lt;code&gt;authentication/anti-patterns.md&lt;/code&gt; 以避開已知陷阱。這些檔案的大小經過調整，以利高效載入 — 夠聚焦、才有用；夠全面，才具權威性。&lt;/p&gt;
&lt;p&gt;我們維護 21 個頂層領域，涵蓋分析、身份驗證、資料科學、基礎架構、機器學習、效能、安全等等。每個領域都可以再細分出子領域，以取得更細緻的粒度。&lt;/p&gt;
&lt;h2 id=&quot;價值觀作業系統&quot;&gt;價值觀：作業系統&lt;/h2&gt;
&lt;p&gt;所有代理都共用一套定義其運作方式的基礎價值觀：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;簡潔優先。&lt;/strong&gt; 使用有效的最簡方案，只有在有正當理由時才增加複雜度。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;修正根本原因。&lt;/strong&gt; 絕不繞過失敗打補丁。若管線失敗，就除錯管線；若測試失敗，就修正程式碼或測試本身。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;以證據為本。&lt;/strong&gt; 將主張標示為「已驗證」（附上基準測試）或「估計」（附上假設）。偵測到模式，不等於問題已獲確認。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;情境經濟學。&lt;/strong&gt; MCP 工具僅耗用 0.1% 的情境，每次讀取檔案則耗用 2%。在探索程式碼之前，先運用領域專業知識。&lt;/p&gt;
&lt;p&gt;這些價值觀會透過渲染管線傳遞給每一位專家代理，任何代理都無法透過組合方式繞過它們。&lt;/p&gt;
&lt;h2 id=&quot;cli控制平面&quot;&gt;CLI：控制平面&lt;/h2&gt;
&lt;p&gt;Orkestra 隨附一套用於管理代理生態系的 CLI：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Discovery&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; database-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Validation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Rendering&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;authentication&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這套 CLI 是「有哪些代理存在」「它們擁有哪些技能」「系統是否健康」等資訊的唯一真實來源，並會在同步前執行驗證，及早揪出問題。&lt;/p&gt;
&lt;h2 id=&quot;開源方面的考量&quot;&gt;開源方面的考量&lt;/h2&gt;
&lt;p&gt;我們打造 Orkestra，是為了解決自己的問題：在複雜的程式碼庫中大規模協調 AI 代理。但我們發現的這些模式，並不侷限於我們自己的領域。&lt;/p&gt;
&lt;p&gt;角色組合系統（身份 + 思維模式 + 風格）適用於任何需要定義代理人格的團隊。&lt;/p&gt;
&lt;p&gt;技能分層系統（K0 至 K4）提供了一套按範圍組織可重複使用能力的心智模型。&lt;/p&gt;
&lt;p&gt;渲染管線模式（YAML 原始檔 + 範本 + 生成產物）將工具面的關注點與供模型讀取內容的關注點區分開來。&lt;/p&gt;
&lt;p&gt;扁平化協調模型（一個協調者、多個專家）在支援平行作業的同時避免了複雜度爆炸。&lt;/p&gt;
&lt;p&gt;Orkestra 是否會走向開源，取決於這些模式對其他使用 Claude Code 開發的人是否有價值。如果你也正撞上我們所描述的那些牆，這套架構或許能幫上忙。&lt;/p&gt;
&lt;h2 id=&quot;我們學到的事&quot;&gt;我們學到的事&lt;/h2&gt;
&lt;p&gt;打造 Orkestra 讓我們明白，協調的重點不在於讓代理變得更聰明，而在於讓它們變得更專注。&lt;/p&gt;
&lt;p&gt;即使指令再完美，單一代理終究會耗盡情境；即使擁有所有技能，單一代理依然會搞不清楚該套用哪一項；一個試圖包辦一切的單一代理，只會在每件事上都做得平庸。&lt;/p&gt;
&lt;p&gt;四十位各自在自己領域表現出色的專家，由一個懂得何時該委派的協調器統籌 — 這正是我們得以持續交付的方式。&lt;/p&gt;
&lt;p&gt;數字本身沒有架構重要。你可能需要五個代理，也可能需要五十個。原則始終如一：組合勝過單一能力，專精勝過通才，協調勝過單打獨鬥的英雄主義。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Orkestra 驅動著 Maguyva（我們的程式碼智慧平台）背後的代理生態系。想進一步了解嗎？歡迎聯絡我們的團隊。&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Open Source</category></item></channel></rss>