我開始使用 AI 代理(如 Codex 和 Claude Code)來處理我的專案。很快地,我發現專案一個接一個,我卻總是不斷地對代理重複相同的指示。
例如,我會告訴它不要直接提交到 main 分支,在確認任何事情之前要先在手機上檢查,並記錄下它做了什麼以及為什麼這麼做。還有,在設計之前要先決定好調色盤和字體,而不是在元件開發到一半才決定。
此外,我還會整合其他開發者找到的函式庫和技能:一個很棒的介面設計工具,另一個用於 GSAP 動畫,還有一個用於 3D 等等。這些工具各自運作良好,但彼此之間卻不相識,我必須充當黏合劑,不斷地在專案之間複製貼上指令。因此,我決定將所有這些整合到一個集合中,讓各個部分能夠互相協作,我將其命名為 dev-standards,因為它確實就是我的工作標準。如今,它被稱為 Senzu。
在此過程中,我遇到了一些問題,而且這些問題都發生在同一週內:Prettier 預設配置在一個不使用分號的專案檔案中加入了 204 個分號,而代理卻認為這是正確的。我的自訂規則安裝程式清空了一個 Laravel 專案的 .mcp.json 檔案,並刪除了已配置的 MCP 伺服器。
代理告訴我它已經在手機上驗證了網站,截圖確實存在,但卻在一個我永遠不會打開的臨時資料夾裡。一個載入器和一個載入條「置中」了,肉眼看起來是這樣,但實際測量卻不是。我最喜歡的例子是:我一直以為 Codex 不會執行 hooks,但它其實會。問題在於我的 hooks 無法理解 Codex 如何描述編輯,所以它讓所有東西都通過了,沒有任何提示。
這些問題單獨來看都不嚴重,但它們加在一起,就成了你是否能信任代理,還是必須逐行審查其程式碼的關鍵差異。
CLAUDE.md 中的規則只是建議,這就是根本問題所在。你可以在 CLAUDE.md 或 AGENTS.md 中寫下「不要提交到 main 分支」、「在完成任務前先在手機上驗證」或「不要動 .env 檔案」。代理會讀取這些內容,而且幾乎總是會遵守。
但在真實專案中,「幾乎總是」是不夠的。因此,我的集合不只是一堆指令,我將所有可執行的內容都轉化為實際執行的東西,而不是僅供閱讀的內容。至於名稱:如果你小時候看過《七龍珠》,你就會明白為什麼叫 Senzu(仙豆),一顆仙豆就能讓專案恢復元氣。
Senzu 是一個專為 Claude Code 和 Codex 設計的西班牙語套件,包含三個協同運作的部分。
技能(Skills):包含我自己的以及其他專案的技能(附帶作者和授權),並在上方加上一層西班牙語介面。代理只會載入相關的技能,例如介面設計、程式碼品質、DDD、動畫、部署等。一個路由器會根據你的請求和順序來決定要讀取哪些技能:先決定設計,然後選擇效果,而不是反過來。這樣可以避免上下文被不相關的內容填滿。
防護牆(Muros / hooks):它們不是建議,而是阻擋。如果代理嘗試做不該做的事情,該動作將不會被執行,並且會解釋原因。
指令(Comandos):例如 /plan、/verificar、/brief、/propuestas 等,這些是重複流程的快捷方式,適用於所有專案。
當防護牆啟動時,會顯示如下訊息:[Senzu 已阻擋] 不允許提交到 'main' 分支。請建立一個新分支(git switch -c feat/...)並提交到該分支。幾天前,它甚至阻擋了正在協助我發布 Senzu 最新版本的代理,因為它試圖提交到不正確的位置。這時候你就會知道它確實有效。
我有十六個防護牆,但其中有幾個每週都幫我省下不少麻煩。
guard:未經我即時批准,不允許 git push;不允許 rm -rf;不允許刪除資料庫;也不允許隨意部署到生產環境。要繞過它,需要一個明確的變數和我的批准,並且必須在開發日誌中記錄下來。
secrets-guard 和 protect-files:代理不會在程式碼中寫入真實的密鑰(AWS、Stripe、OpenAI 等密鑰會根據其格式被識別),也不會修改 .env 檔案、已應用的遷移檔案或自動生成的檔案。
stop-guard:這是我最喜歡的。如果代理編輯了程式碼但未通過建置、lint 和測試,或者修改了介面但未在手機上驗證,或者沒有寫下當天的開發日誌,它就不能將任務標記為完成。沒有證據的「完成了」將不復存在。
backend-guard:阻擋會一次性刪除或重新命名欄位的遷移(必須先添加新內容,然後再刪除舊內容),以及寫入日誌中的個人資料。
code-hygiene:清除程式碼中遺忘的 console.log、dd() 和 .only 測試標記。還有一些其他內容,我在設計中會提到。
conventions-guard:在一個現有專案中,/adopt 指令會分析現有的程式碼風格,我們達成共識後,它就會將其鎖定。從那以後,任何不符合這些規則的程式碼都無法進入。專案的慣例優先於代理的慣例。還有一個不會阻擋但每天都讓我感激不已的功能:儲存時的格式化不會強制風格。
如果專案沒有格式化工具的配置,它就不會格式化;如果格式化後修改的行數超過代理實際修改的行數,它會撤銷格式化並發出警告。那 204 個分號的問題再也沒有發生過。
我有超過四十種技能,但代理在每個任務中幾乎只會載入一兩種。最常用的技能包括:
ui-ux-pro-max(來自 Next Level Builder):所有視覺相關工作的入口。在編寫任何介面程式碼之前,它會根據業務和技術棧決定風格、調色盤、字體和模式,並將其儲存在專案的設計系統中。我的自訂層級包括適用於 Laravel with Inertia、Next、Astro 和 Vue 的設定檔,以及我在下面提到的設計指南。
front-activation:效果目錄。超過九十種效果,每種都有其技術棧的實現方式、用於「減少動態」的版本以及在手機上的成本。你只需要請求「一個標誌跑馬燈」,代理就會只打開該效果的實現方式,而不是一本完整的說明書。
code-quality:針對不同語言的良好實踐,以及一個能理解 monorepos 並啟動你所修改內容的 lint、型別檢查、測試和建置的 verify-build 工具。
project-planner:/plan 指令會將一個功能分解成小階段和任務,每個任務都附帶相關技能和驗證方式。然後 /siguiente 會逐一執行這些任務。
backend-audit:使用真實工具審核後端,每個發現的問題都附帶證據:命令輸出、檔案和行號,或者一個失敗的測試。不再是「架構可以改進」這種空泛的說法。對於動畫和 3D(GSAP、Three.js、React Three Fiber 等),我使用 Claude Design Skills 的技能,同樣也加上了西班牙語層級。
每個專案都有一個開發日誌(做了什麼、為什麼做以及如何驗證)和一個簡短的記憶檔案,其中包含當前的決策:D-012 · 這項決定是這樣做出的 · 參見第 063 條目。一個 hook 會在每次會話開始時注入這些內容。如果代理要推翻某項決定,它必須引用該決定並向我提問。
對於不在記憶中的內容,有一個針對開發日誌的搜尋器,它能理解詞根、錯字和同義詞。這看起來微不足道,但它卻是解釋兩次為什麼不使用某個函式庫,或者再也不需要解釋的區別。
這是最能體現各部分如何協同運作的地方。首先是提問。如果沒有簡報或設計系統,任何嘗試修改介面的行為都會被阻擋。代理必須先提問:業務做什麼、訪客需要做什麼、是否有品牌,以及你喜歡的兩三個網站。訪談會使用簡單的語言(/brief),不使用「hero」或「CTA」等詞彙,因為不是所有人都這樣說話。
結構優先於美學。代理會根據這些資訊編寫一個藍圖:頁面的各個區塊,附帶真實文本,並說明每個區塊在手機上的變化。在你批准之前,不會進行任何設計。
兩個可開啟的模擬圖。/propuestas 會生成兩個真正對立的設計方向,以 HTML 格式呈現,雙擊即可開啟。每個決策都帶有標籤(A·T1 是模擬圖 A 的字體,B·B2 是模擬圖 B 的按鈕等),還有一個「你的意見」面板,可以逐一投票選擇「是」或「否」,並將結果複製到聊天中。
回合制。/ronda 會進行下一輪:你喜歡的內容會固定在所有模擬圖中,你不喜歡的內容會消失,每個模擬圖都會帶來一些新東西。在展示給你之前,一個驗證器會檢查所有這些是否都已遵守。
否決權會被遵守。你不喜歡的內容會被寫入 gustos.md 檔案。這裡又回到了 code-hygiene:如果你否決了某個顏色或輪播圖,代理就不能再次寫入它。同樣地,它也包含一個黑名單,列出那些會暴露網站是由 AI 製作的東西,例如「有現貨」的徽章、編號的區塊「01 / 02 / 03」、灰色標誌的「值得信賴」或虛構的指標。這些都預設被阻擋。
逐區塊建置,在進入下一個區塊之前會展示每個區塊。當標誌已經選定後,其最終檔案會受到保護,代理就不會再製作任何沒有被要求製作的草圖。最後,它會進行驗證。
這部分源於那個未置中的載入器。「看起來應該不錯」並不是驗證,所以介面驗證器現在會以像素為單位進行測量:如果一個被其容器置中的元素距離中心 4 像素,它會告訴你,並指出可能的原因(例如,一個多餘的 margin-left: 8px)。我根據真實網站進行了校準,以避免產生過多的誤報。
它一開始每頁會發出 33 到 41 個警告,我將其調整到 0-2 個。順便說一句,它還發現了一個真實的問題:在 vuejs.org 上,一個播放圖示在其自己的 SVG 內部偏離中心 3 像素。
在手機上,它會做我手動做的事情:真正打開選單。它會點擊選單,測量連結是否可以用手指點擊,測試是否可以用 Escape 鍵關閉,並為你提供一張截圖,每個警告都標有數字,位於其元素上方。數字和圖片同時呈現。
並非所有東西都是防護牆。Senzu 還帶有一個效果目錄,其中包含針對不同技術棧(Astro、Next、Vue with Inertia)的實現方式。不久前,我要求它實現一個具體的效果:讓網站看起來正常,然後突然像玻璃一樣碎裂。這是演示,以半速播放以便看清:即時效果不到一秒鐘。
碎裂的是頁面本身,而不是一張圖片。每個碎片都是 DOM 的副本,使用 clip-path 裁剪成玻璃的形狀。因此,當它旋轉著落下時,你可以清晰地讀取真實的文字,呈現 3D 效果。無需截圖,也無需函式庫。而且它有規則,因為這樣的效果可能會變成一場鬧劇:一次性且有目的性地觸發,可以用 Escape 鍵跳過,啟用「減少動態」的人只會看到淡入淡出效果,完成後 DOM 中不會留下任何東西。它像其他所有功能一樣,在真實瀏覽器中進行自動測試。
如何在 Claude Code 中試用:/plugin marketplace add petersonsenadevs/senzu,然後 /plugin install senzu-all@senzu。在 Codex 中,從應用程式中添加相同的 marketplace。
然後,在你的專案中,開啟一個會話並輸入 /instalar:它會檢測技術棧,詢問你想要什麼(全部、按類別或自訂),然後準備就緒。儲存庫:github.com/petersonsenadevs/senzu,文件:getsenzu.vercel.app。
它不是觀點:這些是我的工作規範,而不是所有人的。你可以調整它(防護牆可以按專案關閉,權限可以更改),但它基於我的工作方式。它是西班牙語的,這是故意的。針對英文代理的資源很多,但很少有為西班牙語使用者設計的。它也不能讓代理不再犯錯,代理仍然會犯錯。
不同之處在於,現在代理比我更早發現錯誤。它是 MIT 授權的。它使用了其他專案的技能,每個技能的作者和授權都列在 CREDITOS.md 中。它每週都會檢查這些專案是否有變動,並為我開啟一個 PR 供我審查。如果你試用它,我很樂意知道你會為你的代理設定什麼樣的防護牆。我相信一定有一些我遺漏的。



