// 編輯器
Devin Desktop
你和 Devin Local 實際工作的地方。
給 Devin Desktop 使用者
Devin Desktop(即 Windsurf IDE) 是編輯器,Devin Local 是代理。在 monorepo 中,代理仍然需要一張地圖,才知道哪個檔案才是重點。Maguyva 會為你的程式碼庫建立索引,並透過 MCP 回傳(語意、AST、圖譜與文字),所以「身分驗證邏輯在哪裡發生」這個問題,得到的會是真正的身分驗證流程,而不是七個測試替身。
Free 方案:3 個儲存庫, 最多索引 5 萬行儲存庫程式碼,免信用卡。
Devin Desktop 編輯你指向的目標。Maguyva 告訴 Devin Local 該指向哪個檔案。 四個部分,各司其職。
// 編輯器
你和 Devin Local 實際工作的地方。
// 手動脈絡
手動提供脈絡在儲存庫夠小時很好用,直到規模變大。
// 程式碼庫
透過 MCP 自動提供程式碼庫事實。
// 誰付費
代理不需要付席位費。查看定價
IDE 本身不是問題。Devin Local、Tab 自動完成、多檔案修改,以及 .devin/rules/ 都非常出色,你也已經在用它們來做:
.devin/rules/ 定義儲存庫慣例與風格規範。@ 提及功能把特定檔案拉進脈絡中。繼續這樣做,這些都不會消失。
但在真正的 monorepo(有工作區依賴的 TypeScript、Python 服務、混合套件)中,只要相關檔案還沒進入 Devin Local 的視野,代理的脈絡就會出問題。
四種手動解法,各自搭配對應的失效模式。左邊=你現在的做法。右邊=它會在哪裡出問題。
// the fix
你用 @ 提及功能標出你認為重要的三個檔案。Devin Local 能在裡面乾淨地修改。
// where it breaks
這只有在你已經知道涉及哪些檔案時才有用。脈絡工具真正的價值,就是找出那些你根本不知道該提及的檔案。
// the fix
你把另一個套件裡的 200 行程式碼貼進 Devin Local,好讓它有足夠的脈絡。
// where it breaks
你早上 9 點貼上的片段,反映不出隊友在 11 點完成的 rebase。Devin Local 正在對著這個套件的幻影版本進行修改。
// the fix
你寫了一份 .devin/rules/ 檔案或架構說明文件。今天它是對的。
// where it breaks
任何手寫的東西都會過時。程式碼才是真相來源。一份說明佇列架構的文件,可能只對了一週,之後就永遠錯了。
// the fix
你新增 .devin/rules/ 來規範命名、lint 與建置指令,對於行為規範很有效。
// where it breaks
.devin/rules/ 很適合放「commit 前務必先執行 pnpm tsc -b」這類規則。但它並不是一份可查詢的索引,涵蓋不了你 monorepo 裡每一個符號、檔案與呼叫點。
它不是要取代 Devin Desktop,而是掛載在 Devin Local 的 MCP 支援上、負責儲存庫脈絡的那一層。
.devin/rules/ 繼續做它該做的事。@ 提及功能也繼續做它該做的事。Maguyva 補上它們補不到的空缺。 Devin Local 編輯你指向的檔案。
Maguyva 告訴代理該指向哪個檔案。
跨套件、跨語言,紮根於真實的呼叫圖,而不是 Devin Local 的 grep。
// workflow 01
devin> 這個 monorepo 裡,身分驗證邏輯發生在哪裡? graph::query("驗證流程") packages/web/src/auth/session.ts:42 中介層 packages/api/src/auth/jwt.ts:88 權杖驗證 packages/shared/src/auth/types.ts:12 AuthContext packages/admin/src/auth/admin-only.ts:31 RBAC 閘門 → 4 個進入點,橫跨 4 個套件,依呼叫點密度排序。 [exit 0]
你沒有提及檔案,也沒有貼上程式碼片段。Devin Local 已經拿到那四個真正重要的檔案,排序正確,可以做出有程式碼依據的修改。
// workflow 02
devin> normalizePhoneNumber 是怎麼處理 E.164 格式的? semantic::query("正規化電話號碼 E.164") packages/shared/util/phone.ts:88 normalizePhoneNumber() ← 真正的實作 packages/api/test/phone.spec.ts:14 jest.mock(...) ← 測試替身 [exit 0]
名字會騙人,mock 會掩蓋真正的程式碼。Maguyva 會在每個套件中,把真正的實作排在測試 mock 之前。
// workflow 03
devin> 這個 monorepo 裡,誰呼叫了 QueueDispatcher.publish? graph::callers(QueueDispatcher.publish) packages/billing/* 中有 3 筆 packages/audit/* 中有 1 筆 packages/notifications/* 中有 1 筆 services/python-worker/* 中有 1 筆 ← 跨語言,透過 gRPC stub [exit 0]
跨套件,遇到多語言儲存庫時也跨語言,呼叫點會直接顯示在結果中。這份差異紮根於真實的匯入者,而不是 Devin Local 的 grep。
三個步驟。Free 方案:3 個儲存庫, 最多索引 5 萬行儲存庫程式碼,免信用卡。
// step 01
挑一個讓你最深刻感受到脈絡痛點的 monorepo。
// step 02
~/.config/devin/mcp_config.json
{
"mcpServers": {
"maguyva": {
"url": "https://maguyva.tools/mcp",
"headers": {
"Authorization": "Bearer ${env:MAGUYVA_API_KEY}"
}
}
}
} // step 03
不要一開始就丟出整間公司的規模。從一個儲存庫、一個可驗證的問題開始,例如「跨套件有誰呼叫了 formatInvoice?」