Community程式設計與開發github.com

WinMedic

Windows 電腦維修技能:診斷、清理、遷移、修復。覆蓋磁碟空間、開機與效能、應用生命週期、更新與驅動、網路、安全態勢、恢復分診。唯讀優先,破壞性動作走隔離區並支援回滾,每條建議附證據。

WinMedic 是什麼?

WinMedic 是一個專為 Windows 平台設計的 AI 代理技能,可整合至 Claude Code、Cursor、Codex 等開發者工具中。其核心設計哲學是「先診斷,再處置」:將宿主 AI 當作推理層,而將本機 PowerShell 與內建引擎作為執行層。使用前會強制執行一系列檢查,包括確認平台、Shell、管理員權限以及保留項設定,確保操作安全。 工作流程涵蓋八大步驟:明確目標、路由 Playbook、唯讀診斷、生成方案、用戶確認、執行、驗證與報告。所有破壞性操作(如刪除檔案)預設進入隔離區並支援回滾,且動作本身被分為 1 到 4 個風險層級,其中 Tier 3 與 4 需要額外確認或直接拒絕執行,以保護系統安全。 WinMedic 也提供進階功能,例如軟體負載域分析(可單獨量測如微信、Steam、Zotero 等特定程式的快取與數據體積)、遷移決策支援(幫用戶判斷是移動快取目錄還是更改軟體安裝位置)、以及病程趨勢分析與鑑別診斷(找出「誰」在讓 C 碟變滿,而不只是「誰」最大)。此外,所有引擎調用皆有統一退出碼,並支援日誌審計,方便開發者回溯與除錯。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add Awenforever/winmedic-skill

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

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

說明文件

WinMedic 是做什麼的?

目標

把宿主 Agent 當推理層,把本機 PowerShell 和內建引擎當執行層。先用證據定位原因,再提最小修復,確認後執行並驗證。

本 Skill 不啟動獨立模型、不聯網、不採集遙測,始終服從宿主的權限與審批機制。

執行前檢查

  1. 確認平台是 Windows、Shell 是 PowerShell、目前是否管理員。不要憑用戶描述推斷。
  2. 確認作用範圍是本機。用戶給了保留項(不要動微信、別刪 D 碟)就寫成約束,全程遵守。
  3. 執行 engine\winmedic.ps1 doctor 一次,取得權限/PS 版本/WizTree 可用性。
  4. 若宿主無本機執行能力(只有聊天),改用「人工步驟 + 驗證點」模式輸出,不假裝執行。

強制工作流

1. 明確目標

  • 拆成:症狀、期望狀態、不可改變的約束。
  • 多目標逐項保留,不得用刪除替代遷移、用重裝替代修復。
  • 只有歧義會顯著改變路徑時才提問。

2. 路由 Playbook

  • 讀 playbook-index.md,按症狀選最具體的一個。
  • 只載入需要的那一份 playbooks/*.md,不要一次讀全部。
  • 多個獨立問題時,按「影響面 × 依賴順序」逐個做。

3. 唯讀診斷

winmedic.ps1 probe --set <domain>        # 產出 state\findings.json
  • 探針唯讀。任何一步產生寫操作都是 bug,立即停止並報告。
  • 採不到的項如實標註「無法獲取」,不要猜。

4. 生成方案

winmedic.ps1 plan --from state\findings.json

輸出 plan.json + plan.md + planHash。把 plan.md 原文呈現給用戶,不要自己複述成模糊描述。

plan.md 現在含兩段:

  1. 建議(按優先級) —— 跨域處置建議,high 先處理(待重啟、無還原點、安全風險、磁碟告急)
    • 處置 列寫 可執行: <action> 的,可直接 winmedic.ps1 apply --action <action> --yes
    • 寫 人工: <playbook> 的,按該 playbook 逐條處置,不要自己發明步驟
  2. 明細 —— 引擎可執行的清理項(按 id 執行)

建議段的來源是確定性規則(不是模型猜測),證據指向 playbook 或 catalog 證據條目。

5. 確認

  • 逐項列出:動作、影響量、風險級別、能否回滾。
  • 只執行用戶點過頭的 id。用戶說「都行」時,預設只做 Tier 1 + Tier 2。
  • Tier 3 必須逐項確認;Tier 4 一律不執行。

6. 執行

winmedic.ps1 apply --plan state\plan.json --ids R1,R3 --yes
  • 預設進隔離區(soft delete),不要隨手加 --purge。
  • 部分失敗(退出碼 7)時,先看 journal 再決定是否繼續。

7. 驗證

winmedic.ps1 verify --journal <id>
  • 核對可用空間、服務狀態、目標是否消失。
  • 若 pendingReboot = true,明確告訴用戶「重啟後才會完全生效」,不要謊報成功。

8. 報告

固定五段:現狀 → 找到什麼 → 做了什麼 → 驗證結果 → 沒做什麼(及原因)。

動作分級

Tier含義執行要求
1零風險,刪了系統照跑確認即可
2快取,會重建說明重建代價
3需判斷,可能影響功能逐項確認 + 展示證據
4紅線拒絕執行,說明原因並給人工路徑

一螢幕體檢與對比

winmedic.ps1 probe --set intake        # 跨域唯讀採集(約 60-90 秒)
winmedic.ps1 summary                   # 九域一螢幕摘要,帶 OK/WARN/BAD
winmedic.ps1 diff --from a.json --to b.json   # 兩次採集對比

summary 未採集的領域顯示 [?] 未採集,不要據此下結論,先補採集。

摘要末尾會直接列出「建議」(按優先級),與 plan 的建議段同源。要機器可讀就加 --json 並重新導向:

winmedic.ps1 summary --json > status.json

具體軟體(軟體負載域)

用戶點名某個軟體時(LaTeX、PyCharm、Steam、Zotero、Word、代理工具……)先執行:

winmedic.ps1 probe --set workloads

它按 catalog/workloads.json 的簽名表測量各軟體的快取與數據體積,並檢查代理鏈一致性。

關鍵區分:

  • kind=cache(著色器快取、IDE 索引、texmf-var、OfficeFileCache)→ 可清理,代價是重建
  • kind=data(遊戲本體、Zotero 附件、微信聊天記錄、texmf-dist)→ 絕不刪,只能遷移
  • kind=review(騰訊視頻下載、混合目錄)→ 必須先確認,其中可能含用戶主動下載的內容
  • probe.proxy-chain 列出 system/WinHTTP/git/npm/pip 五層代理值,consistent=false 就是衝突

加新軟體不需要改程式碼:在 catalog/workloads.json 加一條簽名(detect + measure + playbook)即可。

遷移決策(用戶說「把快取/軟體搬到別的碟」「C 碟裝不下新軟體」時)

這是判斷題,不是查表題。引擎只給事實,方案由你決定,但你必須走完清單。

winmedic.ps1 relocate            # 磁碟概況 + 決策清單 + 事實表 + 預設建議
winmedic.ps1 relocate --json     # 同上,結構化

輸出分三段,含義不同,不要混為一談:

段含義用法
決策清單三條必須回答的問題必須在回答裡逐條給結論,不許跳過
事實路徑/體積/介質/是否存在/已知資料夾/軟體宣告路徑決策依據
預設建議引擎的預設視角(標註 policySource=default-hint)僅參考,可被你的判斷推翻;不許當結論直接轉述

三條清單問題(回答時必須顯式覆蓋)

  1. 是否在已知資料夾下? 是 → 移動該資料夾一次,不要給單個軟體設路徑;但先判斷下面第 3 條
  2. 熱數據還是冷數據? 熱(即時渲染快取、IDE 索引、串流媒體快取)→ 留最快碟;冷(遊戲/虛擬機/書庫/聊天記錄)→ 才考慮搬容量碟
  3. 軟體是否已記錄絕對路徑(先裝後搬)? 是 → 移動後必須同步改軟體內設定,否則指回舊路徑

你(DSH)必須做的事

  • 先看事實表裡的 介質:把熱數據搬到 HDD 是錯的,即使它更大
  • 先看 軟體宣告路徑:那是「先裝後搬」的硬證據
  • 方案要寫成「做什麼 → 為什麼 → 風險 → 驗證方式」,並讓用戶確認後才執行
  • 引擎不代你遷移;你的 job 是給出帶理由的方案

詳見 playbook apps-relocate-cache(PB-913)。

病程(誰在漲,而不只是誰最大)

winmedic.ps1 trend --record      # 記錄一條快照(建議每日一次)
winmedic.ps1 trend --days 14     # 看變化與速率

判讀規則:

  • confidence=insufficient(<2 條樣本)→ 不許下結論,先記錄
  • confidence=low(間隔 <0.5 天)→ 只看變化量,沒有每日速率
  • confidence=ok → 才能說「每天漲 X GB」

用途:C 碟滿時先看趨勢,再決定是清快取還是查某個軟體在瘋狂寫日誌。

鑑別診斷(C 碟滿 / 網路異常這類「要查病因」的場景)

winmedic.ps1 diagnose --list
winmedic.ps1 diagnose --case dx.cdisk-full

輸出是事實表(假設 × 指標 × 當前值 × 判讀信號 × 數據來源),沒有結論。

必須做的:逐條判斷、說明哪些假設被排除、哪些被支持,再給方案。 source 含 trend 的是變化量;標 low 的不能推算速率;標 insufficient 的沒有值。

需要外部工具時先看器械台:winmedic.ps1 tools(只檢測,不自動執行 Tier≥3)。

病例庫(經驗沉澱)

cases/ 下是七段式病例:症狀 / 環境 / 採集 / 假設與排除 / 處置 / 結果 / 教訓。

  • 遇到同類問題先查病例,能省掉一整輪排查
  • 解決新問題後按 cases/_template.md 寫一條,否則下次還得重頭來
  • 標 pending 的是尚無現場證據的待查項,不得當結論引用

證據查詢

任何動作執行前,若用戶問「為什麼」「依據是什麼」,直接查:

winmedic.ps1 explain --action storage.winsxs-cleanup

輸出含:級別、可回滾性、命令、注意事項、證據原文與官方連結、核對日期、驗證規則。

風險門

apply 會檢查恢復能力(還原點/磁碟區陰影複製):

  • 目標含 Tier 3(不可回滾)且恢復能力不是 ready → 拒絕執行,返回碼 4
  • 此時正確做法:先 apply --action recovery.create-restore-point --yes 建還原點,或讓用戶顯式加 --accept-risk
  • 不要為了「推進任務」擅自加 --accept-risk

用戶保留項(硬約束)

用戶說「別動微信」「D 碟別碰」時,立刻固化成保留項,不要只記在腦子裡:

winmedic.ps1 profile --exclude "C:\Users\<user>\Documents\WeChat Files"
winmedic.ps1 profile --exclude "D:\*"
winmedic.ps1 profile                       # 查看當前保留項
winmedic.ps1 profile --exclude "..." --remove  # 移除

保留項是雙層攔截:plan 階段排除,apply 階段再次拒絕並記帳。

何時必須停手

  • 目標是 Windows\WinSxS 內檔案、Windows\Installer、System32、WindowsApps
  • 目標是聊天記錄目錄(WeChat Files / xwechat_files)或用戶聲明的保留項
  • 只剩 1-2 個系統還原點時要求刪還原點
  • 提交量已接近提交上限時要求縮頁面檔案
  • 用戶要求「全部刪掉」「不用管風險」——先解釋,再只做 Tier 1/2

引擎呼叫約定

若宿主只能透過 MCP 存取工具,用 engine\mcp\winmedic-mcp.ps1(見 docs/MCP.md); 工具參數與下面命令一一對應,寫工具需 yes=true。其餘規則完全一致。

  • 所有子命令支援 --json,無 --json 時輸出人類可讀摘要。
  • 退出碼:0 成功 / 2 用法 / 3 權限 / 4 前置未過 / 5 plan 失效 / 6 紅線 / 7 部分失敗。
  • 不要繞過引擎直接下刪除命令。引擎的價值就是雜湊綁定、隔離區和稽核日誌。

生成報告

winmedic.ps1 report --journal <runId>        # 五段式交付報告
winmedic.ps1 report --set storage --out report.md

報告固定五段:現狀 → 找到什麼 → 做了什麼 → 驗證結果 → 沒做什麼(及原因)。 缺數據時如實寫「未採集」,不編造。

報告範本

## 現狀
C: 98.7 GB,可用 16.7 GB(83%)

## 找到什麼
| 項 | 大小 | 級別 | 依據 |
| 資源回收筒 | 7.03 GB | 1 | 無影響 |
| hiberfil.sys | 6.32 GB | 1 | 微軟文件:powercfg /h off |

## 做了什麼
R1 資源回收筒清空:7.03 GB -> 0
R2 關閉休眠:6.32 GB 釋放

## 驗證結果
C: 可用 16.7 -> 30.1 GB;待機 S0 正常;無 pendingReboot

## 沒做什麼
SoftwareDistribution(用戶要求跳過)、Windows\Installer(高風險,建議專用工具)

相關技能