← 所有文章

AI代理安全始於小軟體

Matt Sephton於2026年4月發表《Fits on a Floppy》,刻意設下一個近乎荒謬的限制:有用的軟體應該嘗試放進1.44 MB,也就是標準3.5吋軟碟的容量。1

真正重要的不是大小上限,而是背後的取態。Sephton主張快速下載、即時啟動、低記憶體、低CPU、原生程式碼、支援舊系統,以及專注做好一件事的工具。1最直觀的解讀是:小軟體尊重使用者。放到代理時代來看,意思更進一步:小軟體讓AI程式碼代理更難把錯誤藏起來。

AI代理安全始於小軟體,因為小而可檢查的系統,會縮小代理可能誤解、錯誤修改、錯誤授權或漏測的空間。沙箱與權限提示仍然重要。小軟體則把安全邊界往上游推,推到成品本身的形態裡。

重點摘要

程式碼代理表現最佳的時候,是它能在脈絡退化前讀完相關檔案、執行相關檢查,並說清楚相關差異。Anthropic的Claude Code指南指出,脈絡會很快填滿,而且效能會隨著脈絡變滿而下降;同一份指南也把驗證稱為最有價值的實務,並將CLI工具描述為節省脈絡的介面。2OpenAI的本機shell文件也警告,會執行shell命令的代理,在執行前需要沙箱,或嚴格的允許與拒絕清單。3

小軟體不能取代這些控制措施。它讓這些控制更容易落實。小工具需要授權的命令更少、要檢查的檔案更少、要信任的相依性更少、要跑的測試更少,也有更少分支能讓錯誤假設藏身。古老的Unix教訓並未過時:McIlroy把「做好一件事」追溯到早期的大小限制,接著說明文字串流為何成為程式與人都能使用的通用介面。4代理系統重新發現同一個模式,因為代理需要可檢查、可組合的表面。

關鍵結論

給代理建置者: - 在加入寬泛的API或大型工具結構描述之前,先偏好輸入明確、輸出明確、產物採純文字檔案的小工具。 - 把檔案路徑、差異、日誌與測試視為安全表面。代理可以檢查,審查者可以檢查,自動化流程也可以據此把關。

給軟體團隊: - 小軟體降低審查成本。審查者可以一次讀懂一個400行工具與它的測試;龐大的框架則會在本該有證據的地方迫使人信任。 - 讓權限範圍貼近動作本身。小命令可以唯讀執行、只寫入一個資料夾,或拒絕網路存取。通用命令通常會要求比任務所需更大的權力。

給產品領導者: - 小軟體不是懷舊。它是一種治理模式,適用於機器能太快產生太多程式碼的世界。 - 標準應該從「代理能不能做出來?」移到「團隊能不能驗證、擁有,並回復它?」

為什麼小軟體再次變得重要

軟體膨脹過去看起來像使用者體驗問題:下載慢、記憶體吃重、啟動延遲、電池耗盡,舊裝置被拋在後面。《Fits on a Floppy》透過一個刻意具象的標準,讓這種批判變得可見。1.44 MB徽章把克制變成使用者能理解的測試。1

AI程式碼代理改變了克制之所以重要的理由。機器產生檔案的速度,可以快過人類閱讀檔案的速度。當周遭系統把產量當成進度,這種速度就會削弱品質。一個2,000行功能加上4個新相依性,在逐字稿裡可能看起來很壯觀,實際上卻可能比它增加的產品價值,更大幅增加缺陷表面。

小軟體給代理一個更難蒙混的目標,也給審查者一個更好的目標。提示可以要求一個可執行檔、一種資料格式、一個測試檔案,以及一條回復路徑。結果留下的自由度更少。模型仍然可能犯錯,但錯誤比較沒有空間偽裝自己。

Niklaus Wirth早在1995年就發表了名為《A Plea for Lean Software》的論文,遠早於程式碼代理進入工作流程之前。5這個標題今天仍然有力,因為底層失敗依舊存在:團隊花費硬體、相依性與抽象層,來逃避困難的設計決策。代理降低了新增程式碼的成本,因此拒絕新增程式碼變得更有價值。

脈絡就是安全預算

代理安全常被描述成權限問題:代理可以執行哪些命令、編輯哪些檔案、看見哪些秘密、發出哪些網路呼叫。這些問題都重要。但它們沒有涵蓋代理工作時最先碰到的限制:脈絡。

Anthropic的Claude Code最佳實務指南說,脈絡視窗會容納對話、訊息、已讀取檔案與命令輸出,而單次除錯會話就可能消耗數萬個token。2該指南也警告,隨著脈絡視窗填滿,Claude可能開始忘記較早的指示,或犯下更多錯誤。2

這項警告讓大小成為一種安全屬性。小型程式碼庫讓代理能讀完相關表面,不必讓會話淹沒在無關檔案中。小工具讓代理可以同時看見函式、測試、權限模型與邊界案例。小差異讓審查者能找到真正的變更,而不是掃過一堆生成出來的動作。

脈絡預算有3個實務限制:

限制 小軟體的回答 安全收益
讀取檔案 擁有行為的檔案更少 代理可以檢查實際路徑,而不是從名稱猜測。
輸出量 日誌更短、測試更快 代理可以把命令輸出當成證據,而不是丟掉它。
指示衝突 本地慣例更少 代理在壓力下需要調和的規則更少。

大型系統仍然可以安全。它們需要更強的分解。如果程式碼庫無法變小,面向代理的表面就應該變小:一個套件、一個有界子系統、一個公開命令、一個測試目標、一個有明確歸屬的目錄。

純文字檔案勝過隱藏狀態

McIlroy的口述歷史讓舊教訓變得格外實用。他把「做好一件事」描述為源自於沒有空間做超過一件事的原則,接著說團隊在原始限制消失後仍然保留了這個模式。4他也說明文字串流為何重要:人類可讀的資料讓除錯不再那麼痛苦,而演進文字欄位也比修改固定的二進位版面省事。4

代理需要同樣的表面。檔案可以列出、搜尋、比較差異、分段讀取、提交、回復、lint與審查。隱藏的IDE狀態、不透明的本機資料庫,以及寬泛的託管工具都可能有用,但它們會迫使代理與審查者信任一個不容易檢查的表面。

一篇2026年1月的arXiv論文,把Unix的檔案抽象連到代理式AI系統。該文主張,類檔案抽象與以程式碼為基礎的規格,能把多樣資源收斂成一致且可組合的介面,並可能幫助代理系統變得更易維護、更可稽核,也更能穩定運作。6Oracle的代理記憶體分析提出了相關區分:檔案系統介面之所以有效,是因為模型已經理解儲存庫、資料夾、Markdown、日誌與CLI互動等開發者原生表面;同時,耐久儲存仍可能屬於資料庫。7

這個區分很重要。「使用檔案」不代表「永遠把所有東西都存成鬆散文字」。更安全的模式會把代理介面與儲存基底分開:

層級 良好預設 為何有助於代理
代理介面 檔案、資料夾、日誌、差異、命令 模型與人類可以檢查同一份產物。
耐久儲存 資料庫、物件儲存、佇列、快取 系統保留並行、索引與完整性保證。
驗證表面 測試、linter、路由檢查、截圖 證據能留存在聊天逐字稿之外。

代理應該看見最小但有用的介面。產品底下仍可保留更強的儲存層。

工具越少,權限越少

MCP授權文章把授權教訓說得很清楚:驗證bearer token,並不代表使用者可以呼叫伺服器背後的每一個工具。8小軟體把同樣概念更早套用在設計階段。較小的工具要求較窄的權力。

OpenAI的本機shell文件直接點出危險:執行任意shell命令可能很危險;建置者在把命令轉送到系統shell之前,應該使用沙箱,或加入嚴格的允許與拒絕清單。3Anthropic的Claude Code指南則提供了大規模實務範例:跨檔案展開工作時,使用允許工具限制,讓無人看管的執行不能做超過任務所需的事。2

小命令更容易限制:

命令形狀 權限形狀 審查形狀
check-citations content/blog/x.md 讀取一個檔案,只允許連到引用URL的網路 審查引用結果與來源清單。
translate-post --slug x --locale ja 寫入一個快取路徑,讀取一篇來源文章 審查一個語系差異與品質門檻。
deploy-site 寬泛憑證、網路、建置、快取清除 需要發布層級的信任與強門檻。

寬泛工具往往會累積寬泛權限。一般性的「發布」命令可能觸及內容、翻譯、資料庫列、快取清除、部署日誌與分析。有時候確實需要發布命令。更安全的模式是用較小命令搭配明確關口組成發布流程,等每一步都有證據後,再把序列自動化。

目標不是讓工作變慢。目標是讓權力變得可見。

測試應該符合工具大小

Anthropic第一個最佳實務章節告訴使用者,要給Claude一種驗證工作的方式:測試、截圖、預期輸出與命令檢查。2小軟體讓這項建議具體化。小工具可以帶著一份小型驗證契約。

對代理建置的軟體來說,這份契約應該能放在一個畫面裡:

Inputs:
- one source path
- one output path
- one optional flag

Allowed effects:
- read source path
- write output path
- no network unless --verify-sources is present

Evidence:
- unit tests for parsing
- fixture test for output
- dry-run output for the exact file
- git diff limited to owned paths

這份契約很重要,因為代理太容易滿足模糊要求。「改善管線」會引來架構翻動。「替這個命令新增dry-run旗標,並證明輸出不會寫入檔案」則會建立一條證據路徑。

工具維持小型時,測試也會更快。快速測試會改變代理行為。代理會更常執行測試,在相關程式碼仍留在脈絡中時看見失敗,並在逐字稿漂移前修掉根本原因。緩慢測試會把模型推向猜測,或開始敘述它本來會執行什麼。

小不等於做得不足

小軟體可能以可預期的方式失敗:

失敗模式 出錯之處 更好的標準
玩具式極簡 工具省略錯誤、日誌、重試或回復 縮小範圍,不要降低品質。
假純粹 即使持久化需求需要資料庫,系統仍避免使用資料庫 用檔案作為代理介面,用資料庫作為儲存層。
單檔膨脹 一個檔案一路變大,直到沒人能推理它 依責任切分,同時保留小型公開命令。
權限表演 命令本身很小,卻呼叫寬泛子程序 把關真正效果,而不是包裝器。

軟碟徽章衡量大小。代理安全需要不同的衡量方式:審查者能否在批准變更前,理解行為、權限範圍與證據路徑?

這個問題允許工具超過1.44 MB。它拒絕的是真正重要的部分:意外範圍。一個安全、無趣的20 MB原生app,可能勝過一個會呼叫未審查安裝程式的200 KB腳本。小軟體只有在克制抵達實際執行路徑時,才會服務安全。

給代理工作的「小」評分表

在代理建置或修改工具前,先從5個面向評分。重點不是懲罰大型系統,而是找出代理開始寫作前需要先分解的表面。

面向 好跡象 壞跡象 寫程式前先修正
脈絡足跡 代理可以在沒有壓縮壓力的情況下,讀完相關來源、測試與文件。 代理需要把半個儲存庫放進脈絡,才能理解一項變更。 建立更小的進入點、套件邊界或任務簡報。
權限足跡 命令只需要一種狹窄類型的權力。 命令同時需要檔案系統、網路、憑證、部署與快取存取。 將讀取、寫入、發布與清除切成不同命令。
測試足跡 驗證命令可在幾秒或幾分鐘內完成。 唯一證明是完整發布、手動QA,或「看起來對」。 加入fixture、dry-run模式,或聚焦的路由檢查。
差異足跡 審查者讀過一次差異後,就能說明行為變更。 變更混合重構、功能、資料遷移與發布銜接。 拆成可獨立回復的commit。
回復足跡 一個commit或一個旗標即可讓系統回到先前行為。 回復需要資料庫手術、猜快取,或手動編輯生成檔案。 加入遷移回復、功能旗標,或可逆寫入路徑。

任何紅格都不代表工作應該停止。紅格代表代理需要更小的工作單位。當任務形狀讓正確行為更容易證明,安全性就會提升。

實務模式

我信任的最安全代理建置系統,通常具有同一種形狀:

  1. 一個狹窄命令只做一件事。
  2. 純文字檔案承載輸入、輸出、日誌、計畫與審查包。
  3. 權限對應到命令的實際效果。
  4. 測試快到足以讓代理在會話中使用。
  5. 差異小到人類可以審查。
  6. 發布路徑由小命令組合而成,而不是把寬泛權力藏在一個按鈕裡。

無建置宣言從web技術堆疊的角度描述了同一種偏好:更少建置層、更少生成產物,以及來源與執行環境之間更短的距離。9代理安全版本則對另一種讀者說同一件事。每多一層,機器就多一個地方能產生看似合理、但人類無法快速驗證的工作。

小軟體把克制變成基礎設施。較窄的模組改善脈絡適配。較樸素的檔案改善可稽核性。較快的測試改善回饋。較小的權限集改善爆炸半徑控制。較小的差異改善人類判斷。

FAQ:小軟體與代理安全

小軟體會讓AI程式碼代理變安全嗎?

不會。小軟體會降低代理可能誤解或造成損害的範圍。團隊仍然需要沙箱、允許與拒絕清單、測試、程式碼審查、憑證邊界與發布關口。小軟體讓這些控制更容易套用,也更不容易被意外繞過。

面向代理的工具應該多小?

有用的限制不是位元組數,而是可審查性。好的代理介面工具只有一項工作、小型輸入/輸出契約、清楚的權限輪廓、快速測試,以及審查者能一次讀懂的差異。

代理記憶體應該使用檔案還是資料庫?

當代理需要檢查、搜尋、比較差異與寫入產物時,使用檔案作為介面。當產品需要並行、索引、存取控制、耐久性或跨使用者狀態時,使用資料庫。更安全的架構會把面向代理的介面與儲存基底分開。7

MCP放在哪裡?

當代理需要通往外部工具或資料的型別化橋接時,MCP很合適。MCP不會消除小命令、範圍化權限與動作層級授權的需求。伺服器仍然必須判斷特定主體是否可以執行特定動作。8

結語

AI讓程式碼變便宜。便宜的程式碼提高了拒絕的價值。

小軟體給拒絕一種機器能遵守的形式:一個命令、一個輸出、一條權限邊界、一條測試路徑、一份差異。形式不能保證品質。但它會讓薄弱的工作更容易被看見。

軟碟不再是限制。可檢查性才是。


參考資料


  1. Matt Sephton, “Fits on a Floppy: A Manifesto for Small Software,” 2026年4月。該網站定義了1.44 MB徽章,並列出本文使用的小軟體價值:快速下載、即時啟動、低記憶體與CPU、原生程式碼、聚焦功能,以及支援舊系統。 

  2. Anthropic, “Best Practices for Claude Code,” Claude Code文件,存取日期為2026年5月18日。本文引用其中關於脈絡視窗壓力、驗證、CLI工具、跨檔案展開工作,以及允許工具限制的章節。 

  3. OpenAI, “Local shell,” OpenAI API文件,存取日期為2026年5月18日。該文件描述代理的本機shell執行,並建議在轉送shell命令前使用沙箱,或採用嚴格的允許與拒絕清單。 

  4. Computer History Museum, “Oral History of Malcolm Douglas (Doug) McIlroy, Part 2,” 2019年。引用段落討論「做好一件事」、pipes與文字串流作為人類可讀通用介面的根源。 

  5. DuckDB Foundation, “A Plea for Lean Software,” Niklaus Wirth於1995年發表於Computer的論文館藏條目。該條目連到原始PDF,並確認標題、作者、日期與刊物。 

  6. Deepak Babu Piskala, “From Everything-is-a-File to Files-Are-All-You-Need: How Unix Philosophy Informs the Design of Agentic AI Systems,” arXiv:2601.11672,提交日期為2026年1月16日。 

  7. Oracle Developers, “Comparing File Systems and Databases for Effective AI Agent Memory Management,” Oracle Developers Blog,存取日期為2026年5月18日。該文區分代理記憶體中的檔案系統介面與資料庫儲存。 

  8. Blake Crosley, “MCP工具需要動作層級授權,” blakecrosley.com,2026年5月18日。 

  9. Blake Crosley, “無建置宣言:不用Bundler也能發布,” blakecrosley.com,2026年2月19日。 

相關文章

防偽防火牆:當您的代理程式發布謊言

一個自主代理程式在72小時內將捏造的聲明發布到8個平台。訓練階段的安全措施在發布邊界失效。以下是修復方案。

3 分鐘閱讀

清理層才是真正的 AI 代理市場

Charlie Labs 從建構代理轉向清理代理留下的爛攤子。AI 代理市場正從生成轉向證明。清理才是耐久的那一層。

2 分鐘閱讀

Ralph 迴圈:我如何在夜間運行自主 AI 代理

我建構了一套自主代理系統,搭配停止鉤子、生成預算與檔案系統記憶體。以下是失敗經驗與真正能交付程式碼的方法。

3 分鐘閱讀