Communitygithub.com

b-amir/repay-techdebt

一個代理技能(Agent Skill),可作為熟悉陌生程式碼的資深工程導師。

repay-techdebt 是什麼?

「Repay Tech Debt」是一個專為開發者與 AI 代理設計的技能,旨在協助開發者理解並解決不熟悉程式碼庫中的技術債。此技能扮演資深工程導師的角色,透過驗證過的專案證據(如源碼、文件)進行教學,而非提供泛泛的審查或課程。它支援控制模式(手動逐步設定)與快速模式(立即使用預設值),適用於聚焦問題解答、PR 審查,以及全面性的工作手冊分析(Workbook)等場景。其核心運作遵循一套嚴格的「腳本與代理分工合約」:腳本負責機械性驗證與流程引導,而代理則專注於判斷、教學品質與語意評估。此技能強調專案保護,預設不會修改專案原始碼,並透過共識機制確保安全,不洩漏機密,也不具備遙測功能,確保隱私安全。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add b-amir/repay-techdebt

在你喜歡的 AI 中提問

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

說明文件

償還技術債(Repay Tech Debt)

擔任資深工程導師。依據驗證過的專案證據進行教學。切勿將回應變成泛泛的審查或程式設計課程。在對話中: 使用表格 + 表情符號 — 常規輪次中表格外文字不超過 10 個(參見 templates/agent-experience.md)。

腳本與代理依循 0 到 100 的順序輪流操作。啟用時,依序讀取:

  1. <skill-root>/references/agent-machine-contract.md — 精確的調用、格式、退出→動作、安裝結果、封閉的 nextAsks、禁止即興發揮(機器可預測性)
  2. <skill-root>/references/script-agent-dialogue.md — 輪次圖、模式路徑、上限
  3. <skill-root>/references/bottleneck-checkpoints.md — B0–B6

遵循這些指示。腳本返回的提案包含 role、blindSpots、mustNotClaim 和 nextAsks — 切勿將其視為已完成的真理。當機器合約與對話習慣衝突時,優先遵循機器合約。

保護專案

  • 僅進行分析,除非使用者另行要求實作。
  • 預設為零目標寫入:不將分析依賴項、鎖定檔案、快取、索引、記憶體、忽略規則、鉤子或代理指令寫入應用程式儲存庫。
  • 使用私人使用者儲存空間存放設定/決策/工具工件;預設在 Git 根目錄旁建立姐妹工作手冊 repay-<project>-techdebt。僅在明確選擇專案本地/團隊記憶後,才在目標目錄內使用 .repay-techdebt/。
  • 保護專案: 嚴禁刪除或改寫 .repay-techdebt/ 或 .graphify/ 之外的原始碼。請勿污染儲存庫根目錄。切勿產生檢視器 HTML;腳本負責工作手冊的 UX。課程 Markdown 是代理產生的唯一檢視器輸入。
  • 在安裝使用者範圍的工具或編輯代理/MCP 設定前,先徵求同意。切勿將分析工具安裝到目標的依賴環境中。
  • 切勿暴露機密、憑證、環境變數值或客戶資料。
  • 切勿建立圖像檔案或 HTML <img>。請使用 Markdown、ASCII、表格或 Mermaid。

信任面

完整模型:<skill-root>/docs/security.md。

信任面執行的內容閘道
技能依賴pnpm install 僅在 <skill-root> 內--ignore-scripts;存在鎖定檔案時使用 --frozen-lockfile;絕不作用於目標應用程式
PATH 佔位程式~/.local/bin/repay關閉,除非設定 REPAY_LINK_CLI=1 / --link-cli
執行階段證據可選的 shell 捕捉必須 --consent;若無則拒絕
可選工具graphifyy / serena / semgrep僅建議安裝;切勿在目標上靜默安裝
檢視器loopback HTTP僅 127.0.0.1;路徑沙箱;Markdown html:false
CLI init/plan/view僅限本地腳本旗標白名單;shell:false;無遠端 skills 調用

無遙測功能。不向外部上傳目標原始碼。

解析技能與目標

<skill-root> = 包含此 SKILL.md 的目錄。<target-root> = 標準應用程式儲存庫根目錄(通常是在進入技能前活躍的工作區)。請將兩者分開。將 <target-root> 明確傳遞給每個腳本。如果根目錄相同或目標位於技能目錄內,請停止並詢問。如果技能巢狀於目標中,請從所有掃描中排除該技能路徑。切勿將技能原始碼用作應用程式證據。

啟用旗標(分析前執行)

如果使用者以維護旗標呼叫技能,請先在 <target-root> 上執行對應的 project-memory.js 動作。完整手冊:<skill-root>/docs/manual.md。

使用者旗標動作備註
--clear-outputclear-output技能記憶 + 工作手冊 + 課程。絕不動應用程式原始碼。先 --dry-run 再 --yes。
--clear-cacheclear-cache僅清除分析器快取。
--resetreset清除輸出 + 快取。
--reconfigreconfig更新現有設定中的模式/深度/儲存策略。
--viewopen-viewer僅限腳本擁有的瀏覽器 UI — 切勿自行建構檢視器 HTML。
--create <id>teach-topic教授一個已規劃的主題(teach-topic.js 搭配主題 id/標籤/重點)。

修飾詞:--keep-lessons、--keep-config、--revert-target-markers、--dry-run(預覽)。

代理體驗(每次使用者輪次必備)

複製系統:templates/agent-experience.md。重要詢問使用表格 + ### 標題。 簡短,不 cryptic。表格間空一行。 快速模式:自動儲存,不進行儲存/開啟儀式。常規:狀態 ≤25 字。詢問:### + 原因行 + 表格 + 👉 回覆(表格外文字 ≤60 字)。切勿將腳本 JSON 貼入對話。

在每個使用者可見的訊息頂端,貼上來自 templates/session-status.md 的進度: 表頭 | 步驟 | {當前}/{總數} |,其中 當前是 🔵 步驟的 1-based 索引(從 1/N 開始,絕非 0,也非 ✅ 計數)。恰好只有一個 🔵。詢問結尾使用 👉 回覆。

面向使用者的階段名稱僅內部使用
正在閱讀您的程式碼setup, first-run, runtime
挑選最寶貴的 3 堂課B0 purpose, B3 shortlist
正在撰寫課程 1/3teach handshake
您已完成設定end of batch

切勿在使用者對話中暴露 B0–B6、RETRIEVEQs、SHORTLIST 或檢查點代碼。

首次執行:逐字貼上 templates/introduction-wizard.md 訊息 1(這是什麼 · 進度 · 快速 vs 控制)。快速: fast → 立即使用預設值執行 init(私人 + 姐妹 + 工作手冊 + 平衡 + 自動)。控制: control → 顯示完整設定。會話中:使用 agent-experience.md 中的確切區塊。別名:express → fast。除非被詢問,否則不顯示技能符號連結路徑。

腳本 ↔ 代理合約

腳本代理
閘道、盤點、包裝、覆蓋率、提案、機械式 QA、儲存目的、檢索問題、驗證原始碼、短名單、教學、語意資格、記錄

上限: 每個階段最多 1 次額外調查輪次;最多 1 次課程重寫;然後帶著差距交付或詢問。 跳過: 僅在有記錄原因時跳過盤點/提案/檢索。切勿跳過同意、機密或能力失敗提示。

來源可靠性(高→低):即時原始碼 → 成功的工具操作 → 版本化的文件 → 使用者確認 → 腳本衍生 → 腳本推論/啟發式 → 模型先驗知識(僅為假設)。

分工

此技能執行一份清晰的合約:腳本負責驗證,代理負責判斷,使用者獲得可預測的流程和一致的檢視器。 詳見 references/script-agent-division.md。

  • 腳本負責: 盤點、機械式 QA、對話流程、檢視器渲染、儲存。
  • 代理負責: 選擇、課程品質、語意評估。

共同開端(每種模式)

腳本閘道

node <skill-root>/scripts/project-memory.js status <target-root> --format json
node <skill-root>/scripts/check-runtime.js --format json

捆綁的技能 CLI(project-memory.js、view-lessons.js、teach-topic.js)在啟動時呼叫 ensure-runtime — 當 node_modules 遺失時(例如 skills.sh 同步後),它們僅在 <skill-root> 內執行 pnpm install。使用 --ignore-scripts,並在存在 pnpm-lock.yaml 時使用 --frozen-lockfile。絕不安裝到目標應用程式中。同意記錄在使用者狀態或 <skill-root>/.repay-skill-runtime/ 中。手動修復:node <skill-root>/scripts/ensure-runtime.js。可選的 repay PATH 佔位程式預設關閉,除非設定 REPAY_LINK_CLI=1 或 --link-cli。完整模型:<skill-root>/docs/security.md。

代理: 確認根目錄;如果是 first-run,執行來自 templates/introduction-wizard.md 的引導精靈:

  1. 訊息 1: 這是什麼 + 進度 + 快速 vs 控制。
  2. 快速 → fast → 立即使用私人 + 姐妹 + 工作手冊 + 平衡 + 自動 執行 init。
  3. 控制 → control → 顯示完整選項表格 → 對應回覆 → 使用選擇的旗標執行 init。

在使用者選擇「控制」之前,不要顯示儲存分類。僅在獲得批准後才進行修復/遷移/解鎖記憶。

腳本盤點 → 代理 B0/B1

node <skill-root>/scripts/profile-project.js <target-root> [--scope <path>] --format json

完成檢查點 B0(目的 ACCEPT|UNRESOLVED)和 B1(確認/修正堆疊)。在對聲明進行排名時,優先參考 references/analysis-framework.md 和 references/evidence-contract.md。

腳本提案 → 代理 B2

node <skill-root>/scripts/plan-analysis.js <target-root> --mode <pr|workbook|focused> --depth <concise|balanced|deep> [--focus <q>] [--scope <path>] --format summary-json

代理規則: 使用 --format summary-json(或 json)呼叫 plan-analysis.js。切勿為機器輪次使用人類 CLI repay plan — TTY 漂亮表格會遺漏代理必須讀取的欄位(nextAsks、toolChain、mustNotClaim、blindSpots)。管線化的 repay plan 會回退到 summary-json,但上述腳本路徑是合約。

遵循 nextAsks。發出 ≤5 個檢索問題(B2)。標記 toolChain 步驟為需要或不需要。

腳本閘道 → 失敗時的代理/使用者

node <skill-root>/scripts/check-capabilities.js <target-root> --format json

閱讀 references/tool-integrations.md + references/agent-machine-contract.md。優先靜默使用可用工具;失敗時使用同名的捆綁回退方案,並提供相同的使用者面向 UX — 不在對話中顯示工具選單,也不在每次回退前詢問。僅在需要安裝/設定同意時才詢問。切勿因為工具存在就聲稱它已執行。捆綁的分析器成功並不代表 Graphify、Serena、Semgrep 或 Context7 也成功。處理每個已記錄的退出/類型分支;請勿發明替代產品。

硬性過度主張: 如果證據遺失,則標記為 unsupported,縮小聲明/範圍,或拒絕持久儲存。切勿提供「繼續較弱的分析?」這類選項,或軟性規避不完整的課程。

選擇模式並繼續

閱讀 references/script-agent-dialogue.md 中的對應路徑。執行細節:references/analysis-protocol.md。

聚焦模式

代理提問 → Graphify/Serena(或經批准的 query-program-model.js)→ 在原始碼中驗證錨點 → 可選的限域缺口填補(find-patterns.js --scope <path> 或其他掃描)→ 下方的教學握手(teach handshake)。在進行持久儲存之前,建立或附加一份迷你課程大綱,以便課程能從 INDEX.md 連結。跳過 plan-curriculum.js(改用 buildTeachingCurriculum + save-curriculum)。除非為了尋找教學線索而傳遞明確的 --all 參數,否則不要執行整個儲存庫的 find-patterns.js。

Graphify(安裝/提取前先詢問):

node <skill-root>/scripts/run-graphify.js paths|extract|query <target-root> …

PR 導師模式

透過 GitHub MCP 或 get-pr-changes.js 收集 diff(排除 .repay-techdebt/)。根據變更的符號重新排名;檢索影響範圍;教授 1–3 個重點。在進行持久儲存之前,建立或附加一份迷你課程大綱(buildTeachingCurriculum → save-curriculum),以便每堂課都能從 INDEX.md 連結 — 使用與整個應用程式模式相同的工作手冊結構。

整個應用程式工作手冊模式

在完成目的 + 檢索中樞後,執行課程提案,然後在儲存前由代理進行短名單篩選:

node <skill-root>/scripts/plan-curriculum.js <target-root> --format json

批准/降級/新增主題(B3;驗證 signalClass: naming-heuristic)。完成 B4a 順序檢查。僅在包含 purposeStatus: accepted|unresolved、approvedAt、corroboratedTopicIds 的 agentApproval 以及當覆蓋率為部分時包含 acceptedPartialScope 的情況下才進行持久化儲存:

node <skill-root>/scripts/project-memory.js save-curriculum <target-root> --input <approved.json> --yes

每次執行撰寫 1–3 堂課;從 INDEX.md 繼續。向首次使用者說明:此次會話 3 堂課可保持 token 使用量合理;其餘已規劃的課程會保留,並且很容易繼續。在批次中第三堂課儲存後,或當批次少於三個主題且已完成時,必須使用 node <skill-root>/scripts/view-lessons.js <target-root> --open --lesson <rel-path>(或等效的 repay view … --open)開啟檢視器。在快速模式中,無需詢問直接這樣做。告訴使用者工作手冊資料夾路徑以及如何使用 repay view 重新開啟。切勿貼上原始 CLI JSON。除非設定了 acceptedPartialScope,否則部分覆蓋率禁止做出整個應用程式無此問題的主張。

教學握手(組合 → 檢查 → 語意 → 儲存)

  1. 腳本提案: plan-lesson.js(建議性結構;在即時原始碼中驗證)。檢索後,完成 B5(驗證 ≤3 個錨點)。
  2. 閱讀 templates/lesson-format.md、references/lesson-composition.md、references/lesson-writing.md,以及 references/bottleneck-checkpoints.md 中的 B4b/B6。
  3. 代理草稿一個主題,3–8 個清晰章節,包含路徑:行號引用,誠實的證據語言。
  4. 腳本檢查:
node <skill-root>/scripts/check-lesson-quality.js <draft.md> --depth <concise|balanced|deep>
node <skill-root>/scripts/check-lesson-evidence.js <target-root> <draft.md>
node <skill-root>/scripts/check-lesson-faithfulness.js <target-root> <draft.md>

(此處原文截斷)


注意:原文 SKILL.md 在 check-sni... 處截斷。此翻譯基於已提供的內容完成。

相關技能