使用 mu
上下文
mu 怎樣讓上下文保持精簡:工具輸出分塊進入,過期結果不寫摘要直接放下,技能和 MCP 伺服器只在需要時出現。
模型的注意力有限,上下文也有限。mu 把任務用不上的東西擋在外面,所以上下文很少填滿,提示快取也保持熱的。下面每一項都是一個判定點,可以開關,也可以設成影子模式。
長工具輸出
搜尋、建置或指令產生的、超過 4,000 個字元的輸出,會被切成約 1,200 個字元一塊,判定器對每一塊問一次:這一塊現在重要嗎?最多十六塊放在一個請求裡,狀態只計費一次。重要的進上下文;其餘的封存,留一個指標,模型發現自己需要時可以取回。判定器超過四秒還沒回答,輸出就整段放進去。
read、edit 和 write 從不過濾:模型讀一個檔案,拿到的就是整個檔案。
測試日誌
一次失敗的執行,常常為每個失敗的測試各印一遍同樣的 diff、DOM dump 或堆疊追蹤。開啟測試日誌精簡後,mu 保留第一份,之後每一份換成一行,寫明它重複的是哪幾行。不呼叫任何模型,標記展開後逐位元組等於原文;完整日誌留在磁碟上,結尾有一行指向它。
{ "features": { "admission": { "testLog": "rules" } } }
"jev" 更進一步:用詳細的 reporter 時,判定器還會挑出目前的目標還需要哪些通過紀錄和測試輸出。失敗和摘要從不參與提問。設定裡把這一項叫作「測試日誌精簡」。實測資料在判定點頁面上。
mu 還會告訴測試工具「讀者是代理」,所以 Vitest 等工具只印出失敗和摘要。
遺忘過期結果
上下文用量超過 50%、70% 和 85% 時,長於 6,000 個字元、至少兩輪之前的結果會被判定:還需要,還是已經過期?過期的結果從此在每個請求裡變成一行墓碑。不寫任何摘要,工作階段檔案裡保留原文。
免摘要壓縮
預設關閉。對話被壓縮時,由判定器逐段決定保留還是刪掉,而不是由模型寫一份摘要。保留的段落一字不改;刪掉的只留開頭 300 個字元。
{ "features": { "compaction": true } }
技能、能力包和 MCP 伺服器
裝得多,露得少:
- 技能。 只有和任務有關的技能,描述才會進提示詞。其餘的仍然找得到。技能少於四個時不做篩選。
- 能力包和 MCP 伺服器。 它們裝著,但預設隱藏:直到判定器認定任務需要,或模型主動要求,伺服器的行程才會啟動,它的工具才會顯示出來。工具清單會快取,所以伺服器還沒執行過,判定器也知道它提供什麼。在
mu.json的mcp.servers下寫"exposure": "always",可以讓某個伺服器一直開著。
mu 內建的能力包:ast-grep 結構化搜尋與改寫、透過 gh 使用 GitHub、/commit、/review、衝突解決,以及一個偵錯工具(debugpy、delve、lldb-dap)。每個都需要裝好對應的程式,缺少時會給出安裝提示。
你在別處已經設定好的東西
mu 讀取你為 Claude Code、Cursor 和 Codex 設定好的規則、技能和 MCP 伺服器,但不改動它們。常駐規則進提示詞;針對某些檔案的規則,在模型第一次碰到這類檔案時交給它;其餘的只列出描述。專案自己的規則和伺服器只在專案受信任時才會使用,專案定義的伺服器第一次啟動前會先問你。/inherit 顯示沿用了什麼、沒沿用什麼。
經驗和快取
- 經驗:不管經驗庫多大,一輪最多帶進五行相關的經驗;請見經驗。
- 快取保溫。 你很可能馬上回來時,mu 會在提示快取過期之前先續一次,這樣你的下一則訊息不用再為整段提示詞付費。
- 通知:上下文預算(70%、85%)之類的通知,由判定器決定現在告訴模型、晚點告訴,還是不告訴,這樣它們不會在編輯到一半時插進來。