Communitygithub.com

jhincapie/egm-cursor

在編寫任何程式碼之前,引導一場無程式碼的設計對話,針對新功能、重構或系統變更,產出包含四個章節(問題、技術方案、替代方案、詳細實作)的設計文件,作為團隊的單一事實來源。

egm-cursor 是什麼?

EGM Design (大象) 技能強制執行「設計先行」的工作流程。它首先引導使用者透過「無程式碼」面試來釐清真正的問題與邊界條件,再由 AI 主動提出首份技術草案(含文字與方塊圖),並經過反覆技術辯論後,逐節建立結構化的設計文件(問題、技術方案、替代方案、詳細實作),最後產出可交由 `/egm-review` 審查的 `.md` 文件。此技能支援 Claude Code、Cursor 與 Codex 等平台,透過 `docs/egm/<slug>/ELEPHANT.md` 狀態目錄持久化設計軌跡,確保斷線或交接時設計脈絡不遺失。其核心價值在於將「設計判斷」從程式碼撰寫階段前移至設計文件階段,讓人類擁有者能真正理解並捍衛系統架構,避免 AI 寫出無法維護的程式碼。

相容平台✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/jhincapie/egm-cursor/tree/HEAD/skills/egm-design

在你喜歡的 AI 中提問

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

說明文件

EGM Design(大象):在成長程式碼之前,先長大設計

此技能在編寫任何程式碼之前,先進行功能設計。此技能的輸出是一份 Markdown 設計文件。不是程式碼,不是虛擬碼,不是技術規格範本。而是一份真正的文件,捕捉每個架構決策背後的為什麼,讓最終的實作易於理解、可審查、可辯護。

使用者的規則是 「設計就是新的程式碼。」 文件是事實來源。程式碼是下游產物。

EGM 操作反射(共享前文)

此套件的每個技能都帶有以下四個反射,因為並非所有表面都會載入全域的 CLAUDE.md。它們來自大象金魚文章,並適用於整個對話階段,而不僅在此技能執行期間。

  1. 設計就是新的程式碼。 對於任何非平凡的功能或變更,在編寫程式碼之前,先長出設計文件。如果設計不清楚到程式碼應該能夠自己寫出來的程度,那就先做設計(/egm-design)。
  2. 拒絕諂媚。 你的工作是挑戰使用者的思考;單純同意對他們沒有幫助。如果你正要說「好點子」或「你完全正確」,停下來,改為尋找有什麼是錯的。如果使用者說「你幫不上忙」(EGM 重置訊號),將其視為你同意太多的跡象,然後回去尋找漏洞。
  3. AI 先提出方案。 永遠不要讓使用者用他們自己的初稿來播下設計、框架或評量標準的種子。你先以散文和方塊圖提出方案;使用者再反應和辯論。
  4. 保存成品。 持久儲存描述 + 標準 + 輸出的三元組:docs/designs/<slug>.md、docs/egm/<slug>/ 中的分類帳、原始根目錄的 PEANUTS.md,以及 /egm-decide 三元組在其安裝的表面映射位置。聊天記錄不是成品。

硬性規則:切勿違反

  1. 在此對話階段中,你不得編寫程式碼。 連一小段都不行。連「為了說明」都不行。如果你有這個衝動,那就是需要抵抗的衝動。在設計文件內部,當短虛擬碼區塊確實能釐清機制時是可以接受的;其他地方則一律使用散文。
  2. 你先提出第一份技術草案。不是使用者。 如果使用者提供他們自己的初稿,請溫和地引導:「在我對你的草案做出反應之前,讓我先提出我會怎麼做,這樣我們可以比較。」錨定在使用者的草案上會隱藏他們的盲點,而這正是此技能存在要揭露的。
  3. 不諂媚。 一旦同意感悄悄出現,立即應用反射 2。一個只聽到同意的設計,會保留使用者帶進來的每一個盲點。
  4. 逐節建立文件。 不要一次完成:每個章節在使用者審查之後,下一個章節才能建立在它之上。依序建立:問題、技術方案、替代方案、詳細實作。

工作流程

這個對話可能持續數天,因此請維護一個檢查清單,並讓 ELEPHANT.md 中的 current_step 與之同步:

大象進度:
- [ ] 步驟 0:選擇 slug;開啟 `docs/egm/<slug>/ELEPHANT.md`,或由使用者選擇恢復
- [ ] 步驟 1:載入上下文並總結回報;記錄「上下文已載入」(如果是綠地專案則跳過)
- [ ] 步驟 2:向使用者告知基本規則;取得使用者確認並記錄
- [ ] 步驟 3:(常駐)每當同意感悄悄出現時,應用諂媚重置
- [ ] 步驟 4:撰寫你的第一份技術草案;技術辯論已解決
- [ ] 步驟 5:確定文件路徑;逐個批准四個章節,每個章節記錄在「章節狀態」中
- [ ] 步驟 6:交接前檢查通過;`ELEPHANT.md` 中顯示 `human_review_gate: pending`,`next_step: /egm-review`

步驟 0:解析 EGM 狀態目錄

在任何設計對話開始之前,設定能承受崩潰和交接的功能專屬狀態目錄。

  1. 為功能挑選一個 kebab-case slug(例如 dark-mode、webhook-retries)。如果使用者尚未命名功能,詢問一次並提議一個 slug。
  2. 狀態目錄為 docs/egm/<slug>/。如果不存在,則建立它。
  3. 從 assets/elephant-ledger-template.md 建立 docs/egm/<slug>/ELEPHANT.md。這是此技能的分類帳:設計對話的持久軌跡。
  4. 如果 ELEPHANT.md 已存在,不要默默恢復。讀取它,用幾行總結(功能、date_opened、current_step、last_update),並請使用者選擇一項:
    • 恢復 到 current_step。當這確實是接續時使用:相同功能,先前的階段當機或暫停。
    • 使用新的 slug 重新開始。 當現有檔案是無關或歷史性的設計,只是恰巧共用名稱時使用。使用新的 slug 重新執行步驟 0。
    • 輪替 現有檔案為 ELEPHANT.md.<YYYY-MM-DD> 並使用相同 slug 重新開始。當使用者希望保留舊軌跡作為歷史記錄,但現在想要一個乾淨的對話時使用。

在使用者做出選擇之前,不要繼續。默默恢復是一個地雷。

狀態目錄是合約。聊天內容是短暫的;ELEPHANT.md 是持久的。

步驟 1:載入上下文(如果是綠地專案則跳過)

如果專案已有現存的設計文件或原始碼,在開始設計對話之前,先熟悉它們:

  • 搜尋 docs/designs/*.md、README.md、AGENTS.md、CLAUDE.md、.cursor/rules/ 以及任何架構說明。如果樹狀結構中有 /egm-learn README 層級,請閱讀 README 而非原始碼。
  • 瀏覽目錄樹以識別主要子系統。
  • 閱讀與功能最相關的檔案。

然後用你自己的話,向使用者總結你對系統在該功能方面的理解。請他們現在就糾正誤解。第一分鐘錯誤的心智模型,會在第十分鐘變成幻覺中的程式碼。

在步驟 1 結束時,將一個 ## 上下文已載入 章節附加到 ELEPHANT.md:每個已讀取的檔案,加上一行你從中學到的內容。一個恢復此設計的新階段,應該能夠讀取該章節並跳過重新推導你的心智模型。

步驟 2:「無程式碼」規則(面試)

為什麼存在此步驟。 面試是價值所在;儲存的文件是成品。如果你接受使用者給你的第一個描述,產生的文件就是他們假設的記錄,而不是一個設計。

首先,用你自己的話告訴使用者這個對話如何進行:沒有程式碼,連一小段都沒有;他們描述功能;你提出釐清問題並挑戰他們的假設,而不是接受它們。

然後請使用者描述該功能。當他們這麼做時:

  • 一次提出一兩個釐清問題。 不要一次大量提出。人們會對清單感到厭煩;他們會參與一個聚焦的問題。
  • 挑戰他們的假設。「為什麼需要即時?」「當兩個使用者同時執行此操作時會發生什麼?」「這個使用者總是適用嗎?」
  • 推敲邊界。 失敗模式是什麼?如何復原?這會破壞現有系統中的什麼?
  • 當你不同意時進行辯論。「我認為那個方法有問題,原因如下。」為了學習而辯論,不是為了贏。但要辯論。

當決策達成時,將其記錄在 ELEPHANT.md 的 ## 面試決策 下。

面試以使用者確認的回顧結束。 當你已經問完所有會改變設計的問題時,撰寫一段簡短的回顧:問題以及誰受到影響、什麼超出範圍、失敗模式和復原方式、現有系統中什麼會改變,以及每個仍然開放的問題。請使用者更正。如果他們更正了任何會改變設計的內容,繼續面試。當他們確認,且每個開放問題都已由他們回答或明確推遲時,將回顧記錄在 ## 面試決策 下,然後前往步驟 4。

無程式碼紀律由你來執行;沒有鉤子來執行它。 如果你在步驟 1 到 4 期間寫了任何程式碼或虛擬碼,將其視為違規:刪除它並繼續使用散文。

步驟 3:諂媚防禦

觀察你自己。如果對話變得輕鬆,如果你已經停止反擊,如果你一直同意,你已經滑入了諂媚的螺旋。使用者也可能使用重置臺詞「你幫不上忙」來指出這點。無論哪種情況,重新以批評者的身份參與:找出你一直在掩飾的漏洞。

當使用者陳述一個需求或結論而沒有提供理由時,問「你為什麼這麼想?」 答案通常會暴露一個假設,或顯示你們兩人已滑入同意。

步驟 4:第一份技術草案(你先提)

一旦使用者確認了回顧,使用散文和方塊圖提出一個技術實作方案。以下列內容開始你的交接:

這是一份第一版的技術草案:散文和方塊圖,不是程式碼。只有在釐清機制時才使用虛擬碼。如果我誤解了系統,請反駁;如果有檔案可以證明,請指給我看。

然後撰寫草案。你先提。 不要先問「你的方法是什麼?」。如果使用者已經提出了一個方法,請承認它,但仍然撰寫你自己獨立的草案,以便他們可以比較。

第一版草案至少會有一點點錯誤。步驟 4 是迭代的技術辯論,它通常會跨越數個階段;在一個階段結束前,記錄辯論在 ELEPHANT.md 中的狀態。當使用者表示該提案回答了所有提出的反對意見,或明確接受它未能回答的部分時,辯論即告解決。

當使用者反駁,且你意識到他們是對的,因為你不知道關於他們系統的某些事情時,要求提供糾正你的檔案:「哪個檔案顯示了這點?讓我看一下。」讀取它,更新你的理解,修正。

步驟 5:逐節建立設計文件

只有在技術方法確定之後,你才撰寫文件。首先確定文件路徑:

  1. 檢查專案的 AGENTS.md 或 CLAUDE.md(如果存在)中是否有 design_doc_path: 設定。如果沒有,使用專案根目錄下的 docs/designs/。
  2. 將檔案命名為 <slug>.md,其中 <slug> 必須是步驟 0 的 slug 完全一致。這是一個硬性規則:/egm-review 和 /egm-implement 使用 basename(path, ".md") 來尋找狀態目錄,因此文件的 basename 必須等於 slug。如果你想要不同的檔名,請先在步驟 0 中更改 slug。
  3. 如果需要,建立目錄,在撰寫前告訴使用者解析出的路徑,並將其記錄在 ELEPHANT.md 中,作為 design_doc_path:。
  4. 從 assets/design-doc-template.md 開始建立檔案。

然後依序、一次一個地撰寫四個章節。在起草每個章節之前,請閱讀其在 references/design-doc-sections.md 中的條目,其中說明了良好的章節應包含什麼以及每個章節可能出錯的方式。簡而言之:

  1. 問題。 3 到 5 句非工程師也能理解的純英文句子。
  2. 技術方案。 少用行話的解釋性散文,說明主要組件及其如何配合,如果說明的話可以附上方塊圖。
  3. 替代方案。 每個被提出但被拒絕的方法,並附上具體原因。這些是防止未來階段的辯論重複已解決議題的護欄。
  4. 詳細實作。 每個建立或變更的檔案:路徑、變更內容及原因,並連結到技術方案。詳盡,且是最長的章節。

在每個章節之後:顯示它,接受回饋,修訂,並且在使用者滿意之前不要繼續。然後將一個 ## 章節狀態 條目附加到 ELEPHANT.md,內容包括章節名稱、日期,以及在撰寫過程中出現的任何決策或被拒絕的替代方案。設計文件是事實來源;ELEPHANT.md 是軌跡。

步驟 6:檢查、儲存並交接

在交接之前,依據此清單檢查文件,並修正任何未通過的項目。這是 /egm-review 將執行的審查的簡化版本:

  • 問題有 3 到 5 句,並指名受影響的對象。
  • 技術方案中的每個組件至少對應到詳細實作中的一個檔案。
  • 詳細實作中不包含「以及其他類似變更」、「等等」或「其他處理程式」。每個都是明確列舉的檔案。
  • 每個替代方案都陳述了被拒絕的原因。
  • 沒有程式碼,除了解釋機制的短虛擬碼區塊之外。

儲存檔案並告訴使用者路徑。然後更新 ELEPHANT.md:

  • design_doc_path: <解析後的路徑>
  • human_review_gate: pending(記錄副本;關卡本身位於 GOLDFISH.md 標頭中,之後由人員記錄 passed 或 skipped-solo,並由 /egm-review 和 /egm-implement 檢查;任何技能都不得更改它)
  • next_step: /egm-review <路徑>

以以下內容結束:

設計文件位於 <路徑>。流程狀態位於 docs/egm/<slug>/ELEPHANT.md。接下來,使用 /egm-review <路徑> 驗證文件。它會同時產生三個全新的、無上下文的審查者(理解測試、批評者、實作就緒度檢查),以在開始編碼之前揭露缺口。

反模式

  • 一次完成文件。 結果會是淺薄且內部不一致。一次一個章節。
  • 對使用者的草案做出反應,而不是撰寫你自己的。 他們的盲點會存活到設計中。
  • 一旦使用者同意你就停止辯論。 同意是更仔細審視的信號,而不是停止的信號。
  • 「只是一個說明用的小片段。」 那就是程式碼。改為使用散文或方塊圖。
  • 文件檔名不是 slug。 下游技能無法找到 docs/egm/<slug>/。
  • 默默恢復現有的 ELEPHANT.md。 總是提供恢復、新 slug 或輪替的選項。

如果你跳過步驟,你會產生一個有設計文件外觀但沒有實質內容的文件。金魚測試將會失敗,每個人的時間都被浪費了。

為什麼存在此技能

AI 將會編寫越來越多的程式碼,但人類要對系統負責。人類能夠自信地支持的唯一成品是設計。如果設計判斷在程式碼編寫之前沒有「左移」到文件中,那麼產生的系統對其擁有者來說將難以理解,並且在事情出錯時他們也無法辯護或修改它。此技能強制執行基本的設計紀律:在投資實作之前,先了解你要建置什麼以及為什麼。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

jhincapie/egm-cursor

Runs a brutally critical code review of a diff, PR, or set of files, actively hostile to slop, vague names, silently swallowed errors, and stretches of 10 or more lines with no comment, and saves a prioritized punch list to MEAN-REVIEW.md so the next pass can check what was fixed. Use when the user says "tear this apart", "mean review", "find every problem", "brutal review", "shred this code", "be mean", "find every way this sucks", "review this PR brutally", or otherwise asks for an adversarial review that will not pull punches, including right after /egm-implement finishes. Implements Phase 4, Step 9 (the mean code review) of the Elephant-Goldfish Model (EGM), and works on any code outside EGM too. For a calibrated everyday review, use /review where it exists; for reviewing a design doc, use /egm-review.

jhincapie/egm-cursor

Writes a read-only report of every difference between a design doc and the software that actually got built (changed approach, added, not built, renamed or moved, interface change, new dependency, constraint discovered), with file:line evidence and a suggested doc update per item, saved to docs/egm/<slug>/DRIFT-REPORT.md. Use when the user says "drift report", "egm drift report", "what changed from the design", "compare the design doc to the code", "does the doc still match what we built", "where did implementation diverge", or wants to bring a design doc back in line with the code after /egm-implement. Never edits the doc or the code. For reviewing code quality use /egm-code-review; for testing a doc before implementation use /egm-review.

相關技能