Community寫作與編輯github.com

docs-update

檢查儲存庫文件是否在最近的程式碼變更後仍準確描述程式碼,並更新已過時的文件。可限定範圍至最後合併的分支、最後一次提交、當前工作階段的工作,或全面掃描。

docs-update 是什麼?

此技能旨在解決文件與程式碼不同步的常見問題,自動找出因近期變更而需要更新的文件。它支援多種範圍設定,包括全面掃描、最後合併的分支、最後一次提交,或當前工作階段,讓使用者能根據需求精確控制更新範圍。技能會先找出變更影響的文件,再使用 `unslo` 技能優化文筆,確保文件簡潔、準確且易讀。它支援所有基於 Git 的開發平台,如 Claude Code, Cursor, Codex 等,並透過 `docscheck.py` 腳本自動執行文件範圍界定、影響分析、連結驗證等步驟。使用此技能能確保文件與程式碼變更同時更新,避免後續單獨的文件更新被遺忘,從而維持儲存庫文件的一致性和可靠性。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Arzaroth/skills/tree/HEAD/skills/docs-update

Installed? Explore more 寫作與編輯 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜歡的 AI 中提問

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

說明文件

docs-update 是做什麼的?

文件會悄然腐化:沒有錯誤發生,只是文字不再真實。此技能會找出近期變更應觸及的文件,並使其保持一致。

下列命令會完整寫出 ~/.claude/skills/docs-update/scripts/ 的路徑。請完全按照範例執行——保留開頭的 ~,不要展開它。 權限規則會比對文字命令字串,因此 /home/<你>/.claude/...(波浪號展開後)、python3 ~/...、相對路徑或先執行 cd 都會被視為不同的字串,且每個都會重新觸發提示。使用波浪號路徑並非「非正式寫法的絕對路徑」——對權限規則而言,它就是路徑。

文件應與變更一同交付,而非事後補上。 如果你在功能分支上,請將文件提交到該分支,以便合併時一併攜帶。事後的文件跟進 PR,往往永遠不會有人寫。

1. 選擇範圍

依優先順序:

使用者已指定。 「全面掃描」、「從 v2.1 開始」、「僅此分支」——直接使用。--full 參數代表全面掃描,會讀取所有內容,適合長時間未更新或首次在此儲存庫採用此技能時使用。

文件記錄自身的上次更新點:

~/.claude/skills/docs-update/scripts/docscheck.py markers

如果文件帶有 Last updated: <日期|SHA>,則從該點開始對該文件進行範圍設定(使用 --since)。不一致的文件會各自擁有自己的範圍,沒有單一答案。

否則,從 Git 推導範圍:

~/.claude/skills/docs-update/scripts/docscheck.py scope

它會優先選擇最後合併的分支(一整個分支的工作量才是人們通常所指的單位),若無則回退到最後一次提交。可使用 --since <參考> 覆蓋。

當前工作階段完成的工作是腳本無法察覺的情況。如果本次工作階段已做出變更,你已經知道哪些檔案被修改,請將工作階段前的參考傳遞為 --since,或直接根據你的編輯清單處理。

scope 會將結果分為 kind=code(程式碼變更)和 kind=doc-already-touched(已觸及的文件)。第二類文件很重要:它們是隨著變更一併更新的文件,因此應該檢查其正確性,而非檢查是否有缺失。

2. 找出變更實際影響的文件

~/.claude/skills/docs-update/scripts/docscheck.py impacted

針對每個變更的程式碼檔案,此命令會回報在文件中明確提及該路徑的文件。引用你變更過檔案的文件,最有可能描述已不再真實的內容,這遠比重新閱讀所有文件更有效。

它僅比對完整路徑。同時比對父目錄聽起來更全面,但實際用途不大:在一個 monorepo 中,apps/web-nuxt/ 出現在 62 份文件中的 55 份,因此所有變更都會影響所有文件。

result=none 是正常情況,並不代表「無需處理」——只是沒有文件提及這些路徑,因此應根據主題進行判斷,即步驟 3。

3. 根據主題判斷,使用儲存庫自身的文件分類

impacted 能找到提及路徑的文件,但無法找出描述你變更的行為卻未提及檔案的文件。因此,請閱讀變更內容並思考其意義。

首先了解此儲存庫如何組織文件——例如 brain/、docs/、CONTEXT.md、ADR 目錄——並遵循該結構,而非自行創建。如果專案技能涵蓋文件(.claude/skills/*),則以其為準。

常見對應關係:

變更類型應更新的文件
新的使用者可見功能功能文件 + 其索引/目錄行;README 功能列表
變更既有行為該功能的文件
結構、認證、建置、儲存、即時通訊、提供者相關架構文件
非顯而易見的決策,或在審查中浮現的決策決策/ADR 日誌,包含其理由
新術語詞彙表
新增或變更的環境變數、命令、腳本README 及任何設定/操作文件
新增依賴任何堆疊/技術列表文件(這些通常手動維護且常被遺忘——請比對清單檔案)
使用者可見的變更CHANGELOG 的 [Unreleased] 區段

兩個陷阱:

  • 嵌入在文章中的衍生事實。 文件若寫著「目前版本為 2.16.2」或列出技術棧,這些資訊是從其他地方複製而來且已變更。請比對真實來源(如清單檔案、版本檔案),而非相信文章。
  • 本應是歷史性或目標性的文件。 CHANGELOG 條目、TODO 和 ROADMAP 中提及的檔案可能已被刪除或從未撰寫。請勿「修正」它們。

4. 檢查引用是否仍有效

~/.claude/skills/docs-update/scripts/docscheck.py links

兩種型別:

  • kind=link - 相對 Markdown 連結,目標已不存在。這始終是真正的問題。
  • kind=source - 內聯程式碼路徑,已不復存在,通常是因為檔案移動或重新命名。敘述性文件會被排除,而大括號展開、<佔位符>、Glob 模式和 .gitignore 忽略的建置輸出會被過濾,因此剩下的內容值得檢查。

僅修正範圍內的內容。儲存庫其他位置的發現值得報告,但不要無聲地將工作擴大成全面掃描。

5. 撰寫

為你撰寫的所有內容套用 Unslop

對你新增或修改的每一行套用 unslop 技能。 文件是 slop 造成最大傷害的地方:它由試圖學習的人閱讀,是新接觸者首先遇到的內容,且不像聊天訊息那樣短暫。

文件中最常見的 slop 跡象:

  • 開場廢話。 「本文提供了一個關於……的概述」、「在本節中,我們將探討……」。刪除它們,直接從事實開始。
  • 用文章重複程式碼。 「getUser 函式取得一個使用者。」如果句子只是將識別碼擴展成英文,就毫無價值。請寫下程式碼無法表達的部分:約束、原因、注意事項。
  • 空洞的加強詞:全面、穩健、無縫、強大、靈活、簡單、輕易、僅僅。「只要簡單地執行 X」在 X 不簡單時就是錯誤的。
  • 在答案明確時使用模糊用語:「通常」、「一般來說」、「應該正常來說」。要嘛就是如此,要嘛取決於某個可命名的條件——請明確寫出。
  • 注意-填充:「值得注意的是」、「請注意」、「請記住」。其後的句子才是內容,直接寫出它。
  • 總結當頁內容的摘要章節。 如果文件需要回顧,就代表它太長了。
  • 重複名稱的說明欄位。 表格行 | --verbose | 啟用詳細輸出 | 浪費一行且沒有傳達任何資訊。
  • 三法則填充——第三個例子只是為了節奏而加入,而非因為它與前兩個不同。

配合檔案風格,而非 slop

配合檔案既有的語氣:時態、密度、條目是一行還是段落。如果文件某個段落突然風格不同,比整份文件都簡潔更糟糕。

這兩個規則只有在既有文件本身草率時才會衝突。此時:配合其結構和密度,而非填充詞,且不要重寫你未觸及的其他章節。 一份文件更新若同時調整整份文件的風格,會產生難以審查的差異,並且掩蓋了真正重要的變更。如果某份文件需要全面的文章潤飾,請提出此事,並將其視為一個獨立的工作。

其他

  • 連結原始碼路徑,而非重述程式碼,這樣下一次變更時,連結會中斷而非默默地與文章內容矛盾。
  • 描述目前為真的狀態,使用現在式。文件不是變更日誌:「我們用 Y 取代了 X」屬於 CHANGELOG,「系統使用 Y」屬於文件。
  • 如果文件有上次更新標記,請更新它。

6. 報告

  • 使用的範圍及其原因
  • 更新的文件及各文件中的變更
  • 檢查過但刻意保留不變的文件
  • 超出範圍但發現的損壞連結或引用(列出但不修正)
  • 任何無法自行判斷而需要使用者協助的事項

Individual skills in this repo

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

Arzaroth/skills

Work one round of review comments on a pull/merge request: fetch every unresolved thread, verify each finding against the current code, fix what is still valid, reply with a justification to what is not, then commit, push and answer every thread. Use when a PR has review comments to deal with - from an AI reviewer (CodeRabbit and friends) or a human - and when asked to 'address the review', 'fix the review comments', 'respond to CodeRabbit', or 'handle the PR feedback'. The babysit-pr skill calls this for each of its rounds.

Arzaroth/skills

Fill a ticket's technical post-mortem - write the whole root cause + fix into one tracker field (no restating the initial symptom), then point the other analysis fields at it ("see dev notes"). Tracker, fields, language and headings come from the config. Invoke for a given ticket or the fix in progress. Triggers - "analyse des causes", "analyse technique", "root cause", "cause racine", "solution apportée", "/analyse-causes".

Arzaroth/skills

Open a pull/merge request and stay with it until it merges: trigger the reviewers, watch for their verdict, work each round of findings, push, re-trigger, and merge when it is clean. Handles AI reviewers (CodeRabbit) and human maintainers, on GitHub (gh) and GitLab (glab). Use when asked to 'open a PR and babysit it', 'ship this and see it through', 'get this PR merged', 'watch the PR until it lands', or '/babysit-pr'. Also the review-and-merge half of ship-feature-pipeline.

Arzaroth/skills

Cut a release on GitHub: update the changelog, bump the version (preferring the repo's own release task or script over a manual edit), tag, push, then watch the release workflow until the GitHub Release exists. Use when asked to 'cut a release', 'release version X', 'ship a new version', 'bump the version and tag', 'publish a release', or '/gh-release'. For repos where a tag push triggers a GitHub Actions workflow that creates the release.

相關技能