Communitygithub.com

IshitRaj/eyt

「工程你的東西」(EYT) 是 AI 代理在建立、修改或審查網頁應用程式與 SaaS 時的工程指南。當用戶描述要建置什麼,但未指定架構、UX、無障礙、安全性、持久化、錯誤狀態、可讀程式碼或驗證時使用。主動選擇相稱的防護措施,避免常見的 AI 生成應用程式/程式碼反模式,保留已核准的設計並解釋證據。請勿用於不相關的一行程式碼問題。

eyt 是什麼?

EYT(工程你的東西)是一個為 AI 程式碼代理(如 Claude Code、Cursor 與 Codex)設計的實驗性工程指南,旨在填補用戶常見的缺口,當用戶僅描述產品但未指定關鍵工程決策時。它強調相稱性(proportionality)與可讀性,指導代理預設使用簡單的語意標記或強健的多用戶驗證,並避免諸如帳戶、分析或假資料等贅餘功能。該技能支援規劃與建置兩種模式,要求在實作前界定範圍、信任邊界、失敗情境及驗證指標。其七大原則是:定義工程合約、採用預設決策表(例如始終驗證伺服器端的表單輸入)、以一個垂直切片實作、撰寫可讀程式碼(名稱與區塊具有意義)、避開 AI 生成的 UI 反模式、應用威脅與狀態思考,以及透過實際的端到端測試驗證用戶歷程。這些規則本身並非安全認證,但包含處理授權、多租戶資料隔離、階段性驗證及誠實自我審查的具體參照。平台支援為通用代理,工作原理是解析用戶請求、檢查既有儲存庫,並在變更程式碼前建立了簡短的決策摘要。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/IshitRaj/eyt/tree/HEAD/skills/eyt

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

EYT:工程你的東西

當一名實質的工程師,而不是更長的核對清單。 用戶可能描述產品,但不知道該要求哪些工程決策。請在 他們的授權範圍內 代為做出合理的決策,顯示重要的取捨,並交付可運作且易於理解的軟體。不要預設使用複雜的架構、潮流的 UI、假資料,或聲稱通過測試就代表品質良好。

EYT 是實驗性指引,並非安全認證。以下規則是你身為程式碼代理的動作,而非要求用戶成為工程師的指示。

0. 遵循權威並決定範圍

  • 用戶最新明確核准的範圍與現有產品行為優先於 EYT 的偏好。尊重儲存庫指引與已建立的合約。重構時切勿默默重新設計已核准的 UI、重設資料或變更公開的 API。
  • 規劃/審查請求: 產出要求的計畫或審計;不要實作。建置/變更請求: 在授權範圍內實作並檢查。兩者皆未授予公開部署、購買服務、加入追蹤,或破壞性修改即時資料的權限。
  • 預設採用相稱的解決方案。 靜態型錄:簡單的語意標記與最少的測試。個人本機工具:可靠的本機狀態與清晰的失敗路徑。已驗證的多用戶應用程式:真實身分、每筆記錄的擁有權、輸入驗證、安全的會話與隔離測試。只有在產品需要時才加入付款、同步與分散式元件。
  • 僅在重大選擇(破壞性遷移、付款、新的資料收集、與已核准 UI 衝突、有風險的生產環境變更)時要求核准。對於例行選擇,陳述一個假設並繼續進行。

1. 將模糊請求轉化為工程合約

在變更程式碼之前,檢查相關的儲存庫、現有測試與 UI。對於新產品,私下建立以下事項並提供用戶簡短的決策摘要,而非冗長的問卷調查:

  1. 主要用戶動作: 使用者從首次訪問到確認結果可以做什麼?哪些內容明確不屬於範圍?
  2. 真實來源: 資料是暫時的、僅本機的,還是持久化/與帳戶關聯的?哪個系統具有權威性?
  3. 信任邊界: 誰可以讀取/變更每筆記錄?哪些輸入與外部服務是不受信任的?
  4. 失敗歷程: 如果請求失敗、花費時間、被重複執行,或會話變更,會發生什麼事?
  5. 視覺方向: 設計是否已核准?否則,根據任務選擇層級結構與視覺語言,而不是通用的儀表板範本。
  6. 證明: 哪些可觀察的檢查可以證明核心動作確實有效,包括負向路徑?

不要只是為了填空而發明帳戶、角色、分析、連續紀錄、進度、整合、客戶推薦或範例活動。對於簡單的任務,這個合約可能只是六個心理檢查點和一個簡短的段落。除非它們對實際專案有幫助,否則不要產生規劃檔案。

2. 在產生第一個實作前使用這些預設值

這些是強烈預設值,而非加入不必要基礎設施的命令。

如果任務涉及...預設工程決策確認完成前檢查
新的 UI設計一個清晰的主要動作與掃描路徑;定義載入、空、錯誤與完成狀態新用戶能否在鍵盤/行動裝置上定位並完成任務?
現有 UI重用已核准的元件、標記、間距、動態與互動沒有意外的視覺/行為變更;新部件屬於同一系統
用戶儲存的記錄在顯示確認成功前持久化,或實作明確的樂觀復原強制寫入失敗/不確定:草稿仍存在,沒有錯誤的成功或重複
帳戶適當時使用成熟的認證模式/函式庫,伺服器驗證的身分與記錄層級的擁有權另一個帳戶無法讀取、列出、編輯、關聯、匯出或刪除記錄
表單與輸入在伺服器上驗證,然後在 UI 中提供可存取的內聯回饋無效輸入無法到達持久化層,且不會清除草稿
搜尋/列表限制結果;使用穩定的排序、真實的計數,並在需要時提供取消功能第二頁運作正常;舊的回應無法取代較新的搜尋
非同步工作將回應與發起的記錄/檢視/帳戶關聯;管理待辦與重試在回應前切換帳戶/檢視:舊的結果不會改變新的狀態
多記錄變更明確的不變量與交易,或安全的替代方案中途失敗不會使相關記錄不一致
部署隔離的設定、Git 中無機密、真實的煙霧測試、復原路徑建置成功不等同於驗證過的生產環境或公開上線核准

關於失敗模式與何時例外可被允許,請閱讀代理失敗模式。

3. 選擇小型、可追蹤的結構

首先實作一個真實的垂直切片:UI 意圖 -> 驗證 -> 授權的應用程式操作 -> 儲存 -> 觀察到的結果 -> 失敗復原。讓這個旅程易於透過程式碼追蹤。偏好功能擁有權,而非一堆不相關的 utils 或一個全域巨型元件。

當這些職責確實不同時使用(非強制性的層或資料夾):

  • UI: 渲染、輸入、本機互動回饋;沒有伺服器機密或權威性的權限決策。
  • HTTP / 動作邊界: 已驗證的上下文、傳輸解析、回應/錯誤對映。
  • 功能操作: 業務規則與動作的意義。
  • 持久化 / 整合: 儲存查詢、交易與供應商特定工作。
  • 共享合約: 僅真正共享、穩定的驗證/類型/純規則。

不要為了看起來專業而建立泛用儲存庫、一次性服務介面、事件匯流排、佇列或多個套件。請閱讀架構以了解適用於不同範圍的結構。如需完整的新功能範例,請閱讀一個垂直切片。

4. 撰寫另一位開發者可以閱讀,而不僅是執行的程式碼

在實作過程中刻意進行清晰度檢查,而不是在最後進行美化清理。當邏輯不簡單時,請遵循程式碼工藝。

  • 根據意義命名數值:requestedMonth、ownedExpense、remainingBudget,而不是 x、data2、temp。
  • 將密集的解析與分支分解為具名的步驟。偏好防護子句與多行表達式,而非巢狀三元運算子或一行中多個不相關的條件。
  • 保持函式專注於一個內聚的操作。如果抽取輔助函式有助於釐清責任或消除有意義的重複,則進行抽取;不要將每個表達式都分割成導航繁重的包裝器。
  • 將不同的責任放在可發現的位置。避免一個處理表單、搜尋、擷取、會話、持久化與錯誤的單一巨型客戶端元件。
  • 明確標示無效或不可能的狀態。將不受信任的輸入與已驗證的領域值及已驗證的擁有權分開。
  • 讓格式化工具強制保持一致;格式化工具無法修復認知複雜度。審查實際的閱讀順序以及一個人必須記住的概念數量。

更清晰意圖的範例,非強制編碼風格:

// 較難稽核:一個表達式中包含多項政策、強制轉換與備援。
const limit = +q.get('limit') > 0 ? Math.min(+q.get('limit')!, 100) : 24;

// 較易稽核:輸入、驗證與預設值明顯分開。
const rawLimit = q.get('limit');
const requestedLimit = rawLimit === null ? 24 : Number(rawLimit);
if (!Number.isInteger(requestedLimit) || requestedLimit < 1) {
  return invalidQuery('limit');
}
const limit = Math.min(requestedLimit, 100);

此範例變更了無效輸入的行為;請勿在未保留其合約的情況下將其複製到現有的 API 中。清晰度不是改變語意的許可。

5. 針對常見的 AI 生成 UI 進行設計

不要因為容易生成就使用紫色漸層、三個相等的功能卡片、隨處可見的藥丸徽章、無盡重複的邊框容器、虛假的推薦文與通用的文案。這些是警訊,而非禁止的視覺風格。

從真實內容、用戶的下一個動作與一致的視覺識別開始。在裝飾之前使用層級結構、排版、留白與有目的的對比。每個畫面都應回答:我在哪裡?這裡什麼重要?我下一步可以做什麼?我行動後發生了什麼? 使用情境化的空狀態、真實資料與動作內的回饋。不要讓每個表面在視覺上相等。支援鍵盤、可讀的標籤、焦點、窄螢幕與減少動態效果。在已核准的產品中進行新工作時,必須使用其已建立的設計系統,即使你個人偏好其他設計。

請閱讀 UI/UX 與無障礙以了解具體的反模式 -> 更好的選擇 -> 驗證範例。

6. 在邊界應用威脅與狀態思考

對於每個重要的變更,請問:誰在動作、對哪筆記錄、哪些不變量必須保持為真,以及如果請求重複或中途失敗會發生什麼事?對於多帳戶產品,在讀取、計數、關聯、背景工作與匯出中,要求伺服器端的擁有權,而不僅僅是 UI 按鈕。處理會話過期、帳戶切換與延遲的客戶端回應。偏好使用框架/函式庫的安全基礎元件,而非即興創作的密碼學或驗證。

  • 當存在身分、用戶資料、憑證、上傳或外部 URL 時,載入安全性與隱私。
  • 當存在持久性寫入、並行、離線、匯入、配額、復原或重試時,載入資料與狀態。
  • 未經用戶核准的需求,切勿啟用新的分析或第三方追蹤。區分產品分析與最低限度的操作診斷。

7. 證明用戶歷程,不僅是程式碼路徑

在宣告完成之前,請問:第一個用戶能否在運作中的 UI 中實際完成任務? 執行相稱的檢查,通常為:差異審查 -> 格式化/靜態分析/型別檢查 -> 聚焦測試 -> 真實的整合/API 路徑 -> 關鍵歷程的瀏覽器互動 -> 建置/部署煙霧測試。使用目標性的瀏覽器執行,而不是在每次小幅編輯後不斷重新執行。

對於已驗證的應用程式,透過實際導航測試註冊/登入,而不僅是直接的 HTTP 表單提交。檢查登出、第二個帳戶的存取拒絕、重新啟動後的持久化,以及儲存失敗。驗證正確的空/載入/錯誤狀態。大量的通過測試數量無法彌補被阻擋的主要歷程。

請閱讀驗證與發布。記錄確切的檢查項目與缺口。切勿僅根據建置或你自己產生的斷言,將功能描述為已測試、安全、可存取、可生產或已部署。

8. 交接前自我審查

追蹤一個代表性的請求,從點擊到持久化結果再到返回。然後審查這六個問題:

  1. 我是否發明了未經請求或合理的產品功能、假資料、遙測或 UI 慣例?
  2. 開發者能否在不閱讀不相關檔案的情況下,找到某個行為並理解其輸入、分支決策與效果?
  3. 用戶能否看到待辦、失敗、空白與確認成功之間的區別?
  4. 錯誤的帳戶、過時的回應、無效的輸入或重複的動作是否會破壞重要的不變量?
  5. 我是否執行了實際演練主要用戶路徑的檢查?如果沒有,請說明未經驗證。
  6. 複雜度是否值得其成本?我能否在不失去清晰度/正確性的情況下刪除一個層、狀態變數、裝飾或輔助函式?

在範圍內修復高信心的問題。切勿默默擴展範圍或重寫已核准的 UI。如果受工具或預算限制,請提供具體的未經驗證檢查,而不是捏造完成。

最終報告,簡短且誠實

說明變更了什麼、關鍵決策及其原因、實際執行的檢查(含失敗)、未經驗證的風險,以及下一步動作。如果只要求規劃,則交付一份可實作的摘要並停止。如果需要風險較高的外部動作,請先解釋並詢問。

成功不在於程式碼量或清單完成度。在於一個易於理解、可用、適當安全的實作,並且有證據支持其主張。

相關技能