← 所有文章

Claude Code即基礎設施

From the guide: Claude Code Comprehensive Guide

Andrej Karpathy為圍繞LLM代理程式生長出的東西創造了一個術語:爪子(claws)。那些讓代理程式得以抓住上下文視窗之外世界的鉤子、腳本和編排系統。1大多數人把Claude Code當作一個能存取檔案的聊天框。他們輸入提示詞,看著它編輯檔案,然後繼續做別的事。這種框架完全忽略了這個工具的本質。

Claude Code不是IDE功能,而是基礎設施。把它當作前者還是後者,決定了AI輔助開發究竟停留在10%的生產力提升,還是突破到根本性的不同。

重點摘要

Claude Code暴露了17個生命週期事件,每個都可以透過shell腳本掛鉤,在每次工具呼叫之前、期間或之後觸發。2將鉤子堆疊成調度器,調度器堆疊成技能,技能堆疊成代理程式,代理程式堆疊成工作流程,您就得到了一個介於您與模型之間的可程式化層,強制執行模型無法跳過的約束。我在兩個月內建造了84個鉤子、48個技能、19個代理程式,以及約15,000行編排程式碼。零框架、零外部相依性。全部是bash和JSON。結果是一個在我睡覺時能撰寫、審查和交付程式碼的自主開發系統。這篇文章解釋了架構、為什麼IDE框架會限制人們,以及Remote Control讓這套基礎設施可從任何地方存取之後,什麼改變了。


IDE框架是錯的

預設的心智模型:Claude Code是更聰明的自動補全。您坐在終端機前,給它任務,監督輸出。這個模型將您的生產力上限鎖定在您個人能監督的範圍。

基礎設施的心智模型:Claude Code是一個以LLM為核心的可程式化執行環境。模型採取的每個動作都會經過您控制的鉤子。您定義的是策略,不是提示詞。模型在您的基礎設施中運行,就像網頁伺服器在nginx規則中運行一樣。您不會坐在nginx前面輸入請求。您設定它、部署它、監控它。

這個區別之所以重要,是因為基礎設施會複利累積。一個在bash命令中阻擋憑證的鉤子,保護每一次工作階段、每一個代理程式、每一次自主運行。一個編碼了您部落格評估量規的技能,無論是您呼叫還是代理程式呼叫,都會一致地套用。一個審查程式碼安全性的代理程式,無論您是否在看,都會執行相同的檢查。

Simon Willison圍繞一個核心觀察來框架當前時刻:寫程式碼現在很便宜了。3沒錯。但沒人想聽的推論是:驗證現在才是昂貴的部分。沒有驗證基礎設施的廉價程式碼會大規模產生臭蟲。真正有回報的投資不是更好的提示詞,而是圍繞模型建立的系統,用來捕捉模型遺漏的問題。


基礎設施層

Claude Code的鉤子系統在17個生命週期事件上觸發shell命令。2PreToolUse在工具執行前觸發,可以阻擋它。PostToolUse在之後觸發,可以提供回饋。UserPromptSubmit在您輸入時觸發,可以注入上下文。Stop在模型嘗試結束時觸發,可以強制它繼續。每個事件透過stdin接收JSON,包含完整的上下文:工作階段ID、工具名稱、工具輸入、當前工作目錄。

鉤子系統不是外掛系統,而是事件驅動架構。差別在於:外掛擴展工具的功能;事件讓您攔截、修改和控制工具採取的每個動作。您成為中介軟體。

鉤子:確定性層

鉤子是shell腳本。它們不會被幻覺、哄騙或透過提示注入繞過。模型想執行rm -rf /?一個10行的bash腳本會將命令與封鎖清單比對,在shell看到之前就拒絕它。模型嘗試讀取.env?一個對檔案路徑的正則表達式會攔截Read工具呼叫。這些都不需要模型的配合。無論模型是否願意,鉤子都會觸發。

我在17種事件類型上運行84個鉤子。分布很能說明問題:35個執行判斷(閘門、守衛、驗證器),49個處理自動化(注入器、記錄器、追蹤器)。這個比例起初是1:6。兩個月的自主運行故障將它推到了4:5。每一個判斷鉤子的存在,都是因為沒有它時某件事出了問題。一個代理程式提交了帶有TODO註解的程式碼。一個代理程式執行了破壞性的git命令。一個代理程式將憑證路徑洩漏到記錄檔中。每次失敗都得到一個閘門。

最大的教訓:用調度器取代獨立鉤子。我曾有七個鉤子全部在UserPromptSubmit上觸發,各自獨立讀取stdin,其中兩個寫入同一個JSON狀態檔。並行寫入截斷了JSON。每個解析該檔案的下游鉤子都壞了。每個事件一個調度器,從快取的stdin依序執行鉤子,修復了這個問題。看不見的開銷,每次提示200毫秒。

技能:知識層

技能是按需或透過鉤子啟動的Markdown指令集。4每一個都編碼了模型在被呼叫時所運用的領域專業知識。我的blog-evaluator技能定義了一個6類別加權量規,包含特定的評分標準、類別最低分和相互依賴關係。我的jiro技能編碼了一個7步驟品質迴圈,其中有一個證據閘門要求每個標準都提供具體證明。

技能與鉤子可以組合。技能可以在frontmatter中定義自己的鉤子,這些鉤子僅在技能運行時啟動。哲學技能透過SessionStart鉤子自動啟動,在每個工作階段中注入品質約束,無需明確呼叫。

48個技能涵蓋:程式碼品質(jiro、testing-philosophy、debugging-philosophy)、內容(blog-writer-core、blog-evaluator、citation-verifier)、架構(fastapi、swiftui、database、htmx-alpine)、營運(deploy、cache、analytics、security),以及元編排(deliberation、scan-intel、ralph)。對Claude Code自身偏好的研究發現,它傾向於某些框架和模式。9技能讓您可以用自己的偏好覆蓋這些預設值。

代理程式:委派層

代理程式是具有隔離上下文視窗的專門子代理程式。5每個代理程式獲得一個聚焦的任務和全新的上下文。我的程式碼審查系統會平行產生三個代理程式:正確性、安全性和慣例。每個獨立審查。審查者之間的分歧恰恰會浮現出單一審查者會遺漏的問題。

關鍵約束:遞迴防護。一個shell腳本在每次Task工具呼叫前觸發,檢查共享狀態檔中的產生深度計數器,如果深度超過閾值就阻擋該呼叫。沒有它,代理程式會委派給代理程式,代理程式再委派給代理程式,每一層都失去上下文並消耗token。預設限制是3層。實際上,有用的工作發生在深度1(主代理程式加一個子代理程式)。任何超過2層的深度通常意味著任務分解本身就有問題。

19個代理程式涵蓋:開發(ios-developer、backend-architect)、審查(code-reviewer、security-reviewer、conventions-reviewer、yagni-reviewer)、探索(project-scout、code-explorer、code-architect),以及驗證(test-runner、correctness-reviewer)。


Remote Control改變了格局

2026年2月25日,Anthropic推出了Remote Control:從任何瀏覽器或Claude行動應用程式連接到本地Claude Code工作階段的能力。6這個功能在Hacker News上獲得531點和313則評論,大多是對臭蟲的抱怨。這些抱怨是合理的。但這個功能仍然是變革性的。

原因如下。在Remote Control之前,我描述的基礎設施有兩種模式:監督式(我盯著終端機)或無監督式(我離開並祈禱)。兩者都不理想。監督式將產出上限鎖定在我的注意力範圍。無監督式則冒著模型做出壞決策而無人發現的風險。

Remote Control創造了第三種模式:非同步治理。我運行自主迴圈,在夜間處理多個故事的PRD。外部動作(git push、API呼叫、任何離開本機的操作)的核准提示會路由到我的手機。我可以從任何地方核准、拒絕或重新導向。治理層保持不變。「代理程式需要核准」到「人類提供核准」之間的延遲,從「等我查看筆電時」降到「從手機上10秒」。

核准流程與我鉤子中的影響範圍分類形成複利。本地操作(檔案寫入、測試執行)自動核准。共享操作(git提交)發出警告。外部操作(推送、API呼叫、部署)延後至人工審查。Remote Control將那個「延後」路徑從阻塞等待轉變為非同步通知。代理程式在我審查前一個故事的同時繼續處理下一個。

像Agent Multiplexer這樣的工具已經透過tmux管理Claude Code工作階段。10像Emdash這樣的開源替代方案提供完整的代理式開發環境。11那些建議SSH加tmux作為替代方案的人說得對,它確實能用於終端機存取。但這些都沒有給您核准路由。那個路由才是讓無人值守操作安全——而非僅僅可能——的關鍵。


成本即架構

「透過CLI讓MCP更便宜」這篇文章(304 HN點數)記錄了一個模式:將MCP工具呼叫包裝在CLI呼叫中,以避免維護MCP伺服器連線的開銷。7更廣泛的洞見是:成本是架構決策,不是營運事後想法。

我的基礎設施在三個層級處理成本:

Token層級。系統提示詞壓縮。我在一個CLAUDE.md檔案和8個規則檔中運行約3,500個token的系統提示詞。高回報的精簡:移除教學程式碼範例(模型已經知道這些API)、合併跨檔案的重複規則,以及用約束取代解釋。「拒絕符合敏感路徑的工具呼叫」與一段15行關於為何不應讀取憑證的解釋做的是同樣的事。語義密度優於原始壓縮。8

代理程式層級。全新產生優於長對話。自主運行中的每個故事都獲得一個具有乾淨上下文視窗的新代理程式。產生時,代理程式收到一份簡報:當前git狀態、先前代理程式完成了什麼、它需要做什麼。簡報而非記憶。模型執行清晰的簡報比導航30個步驟的累積上下文更好。上下文永遠不會膨脹,因為每個代理程式都從全新狀態開始。Geoffrey Huntley在「The Ralph Loop」中記錄了類似的模式,以每小時10.42美元在Sonnet上運行自主開發。13像OpenSwarm這樣的多代理程式編排器透過模型升級將工作者-審查者管線形式化。14

架構層級。當操作是無狀態的時候,CLI優先於MCP。用claude --print進行一次性評估的呼叫成本更低,且不增加連線開銷。MCP伺服器在工具需要持久狀態或串流時才有意義。Context Mode展示了相反的方向:使用FTS5索引和BM25排名將315 KB的MCP輸出壓縮到5.4 KB。12兩種方法都減少了token消耗,只是方向不同。我的大多數技能呼叫都是一次性的。我的提示快取分析發現,Claude Code CLI在超過4,096個token時預設會快取系統提示詞。零設定即可使用。


案例研究:84個鉤子在實踐中的樣貌

上週一次自主運行的具體工作階段追蹤,處理一個包含5個故事的PRD:

  1. SessionStart觸發。調度器注入:當前日期、專案偵測、哲學約束、系統效能檢查、成本追蹤初始化。五個鉤子,總計180毫秒。

  2. 代理程式讀取PRD,規劃第一個故事。UserPromptSubmit在內部提示詞上觸發。調度器注入:活躍專案上下文、工作階段偏移基線(首次提示詞的Model2Vec嵌入,用於後續相似度檢查)。120毫秒。

  3. 代理程式呼叫Bash執行測試。PreToolUse:Bash觸發。調度器執行:憑證檢查(命令中無.env路徑)、沙箱驗證(命令不在封鎖清單上)、專案偵測。90毫秒。測試執行。PostToolUse:Bash觸發:活動心跳記錄、與基線的偏移檢查(餘弦相似度0.63,遠高於0.30閾值)。

  4. 代理程式呼叫Write建立檔案。PreToolUse:Write觸發:檔案範圍檢查(此路徑是否在專案目錄內?)。PostToolUse:Write觸發:對寫入檔案的lint檢查、提交追蹤、活動心跳。

  5. 代理程式完成故事。Stop觸發。品質閘門鉤子檢查:代理程式是否為每個標準引用了證據?是否使用了模糊語言(「should」、「probably」)?差異中是否有TODO註解?如果任何檢查失敗,鉤子回傳exit 2,代理程式繼續工作。

  6. 獨立驗證:一個全新的代理程式執行測試套件,不信任前一個代理程式的自我報告。

  7. 三個程式碼審查代理程式平行產生。每個獨立審查差異。發現結果合併。如果任何審查者標記了嚴重問題,該故事就回到佇列中。

  8. 故事通過。下一個故事載入。這個循環對所有5個故事重複。

5個故事中觸發的鉤子總數:約340個。鉤子總耗時:約12秒。看不見的開銷,卻在一次夜間運行中阻止了三次憑證洩漏、一次破壞性命令,以及兩次不完整的實作。


關鍵要點

Claude Code是執行環境,不是工具。17個生命週期事件使它可程式化。鉤子、技能和代理程式是指令集。模型是執行引擎。您是系統架構師。

治理隨自動化擴展。每一個增加約束的鉤子都降低了無人值守運行的風險。判斷鉤子與自動化鉤子的比例就是您的安全邊際。我的是4:5,且持續攀升。

基礎設施會複利累積,提示詞不會。一個好的提示詞改善一次互動。一個好的鉤子改善每一次互動。一個好的技能改善每一個呼叫它的代理程式。一個好的代理程式改善每一個委派給它的工作流程。投資在能產生乘數效應的層級。

Remote Control讓基礎設施可攜帶。核准路由將「無監督」轉變為「非同步監督」。這個區別就是在希望模型做出好決策與驗證它確實做到之間的差異。

成本是架構,不是最佳化。全新代理程式產生、CLI優先呼叫、系統提示詞壓縮和提示快取都是結構性決策,會複利累積。事後最佳化比從一開始就設計好成本更高。

零框架需求。84個鉤子、48個技能、19個代理程式,約15,000行編排程式碼。目錄中的bash腳本。JSON狀態檔。零執行時相依性。您可以採用一個鉤子或整個技術棧。這套基礎設施從解決實際問題中有機成長,而非從實作他人的框架而來。


本文是AI工程系列的一部分。前篇:為什麼我的AI代理程式有品質哲學。另見:用十個大腦思考盲眼法官


  1. Andrej Karpathy論LLM代理程式之上的新層「爪子」(claws)。HN討論(406點,917則評論)。 

  2. Claude Code Hooks參考文件。Anthropic文件。17個生命週期事件,支援JSON輸入/輸出、匹配器模式,以及三種鉤子類型(command、prompt、agent)。 

  3. Simon Willison,「寫程式碼現在很便宜了。」Agentic Engineering PatternsHN討論。 

  4. Claude Code Skills參考文件。Anthropic文件。Markdown指令集,包含frontmatter元資料、允許的工具和鉤子定義。 

  5. Claude Code Sub-agents參考文件。Anthropic文件。具有隔離上下文、worktree支援和模型選擇的專門子代理程式。 

  6. Claude Code Remote Control。Anthropic文件。從任何裝置繼續本地工作階段。HN討論(531點,313則評論)。 

  7. 「透過CLI讓MCP更便宜。」thellimist的部落格文章HN討論(304點,115則評論)。 

  8. 「壓縮您的Claude.md:精簡60-70%的系統提示詞冗餘。」jchilcher的部落格文章HN討論(24點,9則評論)。 

  9. 「Claude Code的選擇。」amplifying.ai的研究。分析Claude Code的工具和框架偏好。HN討論(39點,19則評論)。 

  10. Agent Multiplexer(amux)。GitHub。透過tmux管理Claude Code工作階段。HN討論(13點)。 

  11. Emdash:開源代理式開發環境。GitHubHN討論(201點,71則評論)。 

  12. Context Mode:315 KB的MCP輸出變為5.4 KB。GitHub。FTS5索引搭配BM25排名。HN討論(77點,23則評論)。 

  13. Geoffrey Huntley,「The Ralph Loop。」ghuntley.com/loop。以每小時10.42美元在Sonnet上運行自主開發。 

  14. OpenSwarm:多代理程式Claude CLI編排器。GitHub。工作者-審查者管線搭配模型升級。HN討論(34點,18則評論)。 

相關文章

Anatomy of a Claw: 84 Hooks as an Orchestration Layer

Karpathy identified 'Claws' as a new architectural layer. Here is what 84 hooks, 43 skills, and 19 agents look like as a…

13 分鐘閱讀

The CLI Thesis

Three top HN Claude Code threads converge on one conclusion: CLI-first architecture is cheaper, faster, and more composa…

15 分鐘閱讀

The Ralph Loop: How I Run Autonomous AI Agents Overnight

I built an autonomous agent system with stop hooks, spawn budgets, and filesystem memory. Here are the failures and what…

8 分鐘閱讀