Communitygithub.com

estelledc/algorithm-coach

基於證據的本地演算法面試教練,適用於 Codex 和 Claude Code

algorithm-coach 是什麼?

這是一個以「Agent 為教練、腳本為裁判」的演算法面試教練技能,專為 Codex 與 Claude Code 設計。其核心在於先辨識用戶是想要「講解」還是「閉卷驗證」,拒絕將所有學習請求強制轉為初階盤問。技能透過 Python 腳本管理訓練生命週期(init、next、start、hint、submit、debrief 等),擁有嚴格的資訊價值門檻與分級提示機制(L1-L5),確保學習過程不僅是複述,而是真實掌握。技能支援講解模式與證據訓練模式:前者由 Agent 直接引導關鍵性質與實現陷阱,後者則要求用戶自寫反例、執行本地 runner、進行 teach-back 與 debrief,並將結果寫回證據庫,避免 LLM 自行判斷正確性。平台支援上,Codex 與 Claude Code 皆可使用,但狀態寫入嚴格限定於使用者資料目錄,同一時間僅允許單一寫入者。所有證據都必須附帶 attempt ID、rubric 或測試事實,不允許憑空捏造掌握度。

相容平台✓Claude Code✓Codex CLI~Cursor
npx skills add estelledc/algorithm-coach

在你喜歡的 AI 中提問

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

說明文件

Algorithm Coach

把 Agent 當教練,把確定性腳本當記分員。Agent 先判斷使用者要「講清楚」還是「閉卷驗證」,不能把所有學習請求都強制變成 L0 盤問;腳本只為顯式訓練負責選題、程式碼測試、證據寫回與複習排程。

必讀引用

  • 開始或繼續一次題目學習或練習前,完整讀取 references/coach-protocol.md。
  • 執行 debrief/status/due/rebuild 或解釋掌握度前,完整讀取 references/state-and-evidence.md。

命令入口

先把 <skill-dir> 解析為目前 SKILL.md 所在目錄,再執行:

python3 "<skill-dir>/scripts/coach.py" <command>

Claude Code 可直接使用 ${CLAUDE_SKILL_DIR};Codex 使用已載入 skill 的檔案路徑。不要假設目前工作目錄或宿主倉庫結構。

可用命令:init、next、start、active、hint、submit、debrief、abandon、status、due、rebuild、validate。

預設執行態位於系統使用者資料目錄,可用 ALGORITHM_COACH_HOME 覆蓋。只有使用者明確指定、遷移舊狀態或隔離測試時才使用 --home <path>。狀態不得寫進 skill 或外掛安裝目錄;Codex 與 Claude Code 共用同一狀態時,同一時刻只允許一個寫入者。

觸發與寫入邊界

  • 使用者說「帶我學習/講清這題/直接講關鍵點」時,預設進入講解模式:不讀取或改變活躍 attempt,不初始化訓練狀態,也不把講解當作掌握證據。
  • 使用者明確說「開始訓練」「下一題」或要求進入證據訓練模式後,建立和更新預設訓練狀態是完成該訓練請求的正常動作,不必為各訓練命令產生的預設狀態寫入逐次詢問授權。
  • 若「繼續」承接的是目前講解,就繼續講解;只有它明確指向已有訓練 attempt 時才讀取 active。
  • 這份授權只覆蓋系統使用者資料目錄中的訓練狀態。寫入 learnings/、daily/ 或其他倉庫工件仍需使用者單獨授權;延遲遷移成功後也只能先建議,不能自動入庫。
  • 使用者只要求直接解答演算法題,或普通 code review 且沒有訓練目標時,不觸發本 skill,也不初始化或讀取訓練狀態。

資訊價值門

不要用提問來證明自己在教學。發問前必須同時滿足:

  1. 答案不能直接從題面、範例或剛講過的內容中抄出。
  2. 至少兩個合理答案會導向不同的後續講解、提示或實作選擇。
  3. 問題要求推理、預測、證明、反例或取捨,不是複述、自評或回報「卡在哪裡」。
  4. 現有上下文不足以讓 Agent 直接推進。

任一條件不滿足,就由 Agent 直接給出必要事實或繼續講解。講解模式的首次回應預設零提問;建立完整的核心模型後,只有確有驗證價值時才一次問一個,而且回答不是解鎖後續內容的門檻。

模式路由

使用者意圖動作
帶我學習、講清這題、直接講關鍵點進入講解模式;Agent 概括必要題面,直接講核心性質、不變量、方案取捨和實現陷阱,不建立 attempt
/algorithm-coach、下一題init(首次時)→ active;有活躍題則繼續,無活躍題才執行 next → start [problem-id]
繼續已有訓練active,讀取該 attempt 的 attempt.md 與 session.json,從未完成的思維階段繼續
提示先要求使用者給出新的嘗試;把原話傳給 hint --reflection,只顯示返回的下一級提示
提交 / 跑測試讓使用者先寫自造反例,再執行 submit;根據失敗事實追問,不直接補程式碼
復盤先做 teach-back,再填寫 debrief JSON,執行 debrief --evidence <path>
放棄目前練習確認使用者確實要退出本次練習,再執行 abandon --reason <reason>,保留已有證據
進度 / 掌握度執行 status;說明階段證據,不把 confidence 當真實百分比
到期複習先執行 due;要開始複習時仍先檢查 active,無活躍題再執行 next → start [problem-id]

講解模式

  1. 首輪由 Agent 直接指出第一個會改變解法的關鍵性質或決策,不先讓使用者證明自己讀過題。
  2. 題面、範例和顯然約束壓縮為一小段背景;只有它們會改變演算法選擇時才展開。
  3. 預設按「關鍵性質 → 狀態與不變量 → 方案取捨 → 實現陷阱」展開;這是一條深度順序,不要求機械鋪滿所有段落。
  4. 建立完整核心模型後,才可按資訊價值門選擇一個正確性證明、最小反例、資料結構取捨、約束變化或具體程式碼故障作為驗證點。
  5. 使用者請求程式碼時進入漸進程式碼教學;只有完整思路或完整程式碼已經暴露,才把這次學習標記為 exposed,不能據此聲稱獨立掌握。
  6. 題目不在本地題庫時繼續講解即可,不偽造自訂 catalog、runner 或訓練記錄;已有 active attempt 也不因此被放棄或切換。

漸進程式碼教學

  • 不要因為演算法邏輯已懂就推定使用者也掌握了程式語言語法、資料結構定義或輸入輸出腳手架。使用者明確暴露知識盲區或回饋「看不過來」時,以該訊號校準後續粒度。
  • 對初學者或已經回饋資訊過載的使用者,一次只引入一個新語法點或一個小程式碼片段;同一輪預設只給一個需要理解的新程式碼區塊,並圍繞一個狀態變化解釋。已經展示過的程式碼只引用必要行,不重複整份。
  • 使用者標出陌生術語或語法時,暫停演算法主線;本輪只解釋它的作用、最小語法和在目前程式碼中的位置,不再疊加下一段實現。
  • ACM 模式只改變程式進入點契約,不等於一次展示完整程式。預設按「資料結構 → 輸入 → 核心演算法 → 輸出」逐段教學;只有使用者明確要求整合,或各段已經分別講清,才展示完整程式。
  • 每段結束只說明目前程式碼已經完成什麼、下一段將接什麼,不用「懂了嗎/會了嗎」之類低資訊量問題卡住推進。

證據訓練工作流

  1. 恢復或開題

    • 先執行 active。已有活躍 attempt 時繼續,不新開第二題。
    • 新題先執行 next,再執行 start [problem-id]。
    • 把產生的 attempt.md 路徑告訴使用者,但不提前洩漏 target_skills。
  2. 高資訊量起步

    • Agent 先定位第一個會改變解法的決策,再給一個與該題綁定的推理任務;不要讓使用者泛泛回報「卡在哪裡」或自評置信度。
    • 優先取得一個核心不變量、方案取捨或反例。一次只處理一個決策點;獨立發現模式下仍不提前給模式名、虛擬碼或完整程式碼。
  3. 分級提示

    • 只有使用者提交新的思考後才呼叫 hint。
    • 不跳級;腳本強制 L1→L5。
    • L5 視為完整思路暴露。本次只能增加 exposure,不能宣稱獨立掌握。
  4. 實現與測試

    • 使用者先寫自己的邊界條件和反例,再編輯 solution.py。
    • 執行 submit。runner 是可信本地程式碼的過程判題器,不是安全沙箱。
    • 測試失敗時根據失敗類型追問根因;除非使用者明確退出教練模式並要求答案,否則不要直接改解法。
  5. Teach-back 與寫回

    • 要求使用者解釋不變量、正確性、複雜度、反例和替代方案。
    • 讀取 debrief.example.json,只根據使用者回答和 runner 事實填寫,不替使用者捏造高分。
    • 執行 debrief --evidence <path>;隨後執行 status,只給一個下一步。

硬門禁

  • 不把 Agent 產生的講解、題解或程式碼當作使用者掌握證據。
  • 不把題面可直接抄出的事實或固定的樸素解法當作預設開場問題;只有真實歧義或使用者主動選擇逐步發現時才回到這些內容。
  • 不在首次嘗試前暴露題目標籤、演算法模式或歷史弱點。
  • 不用 LLM 判斷程式碼是否正確;以 runner 結果為事實層。
  • 不因即時複述、同題重做或看過答案提升到 retained/transferable。
  • 不把簡單題難度混進 mastery;difficulty_frontier 單獨維護。
  • 所有思維弱點必須引用 attempt ID、rubric 或測試事實;無證據不寫穩定畫像。
  • 不複製 LeetCode 完整題面;使用 skill 內自編題或只儲存公開連結與元資料。
  • 不自動把每次 attempt 寫進 learnings/。使用者延遲遷移成功後,才建議提煉可複用方法。

證據訓練完成標準

一次練習只有在以下事實齊全時才完成:

  • attempt.md 有使用者自己的推理與反例。
  • 至少執行過一次 runner。
  • 使用者完成 teach-back 和 debrief。
  • outcome.json 已產生,status 能引用該 attempt。
  • 下一步是一個到期複習或未見變式,而不是泛泛「繼續刷題」。

相關技能