Files
shared/skills/plugins-uninstall/SKILL.md
T
jiantw83andClaude Sonnet 5 2329e4d709 feat(spec-version-guard): 新增版本前置檢查規範、共用腳本與 hook
新增 spec-version-guard 規範(定義遠端發佈版本 vs 當前實際載入版本的比對規則、
fail-closed、錯誤訊息格式)與 scripts/version-guard.mjs(hook/CLI 雙模式,
hook 模式輸出 Claude Code/Copilot 相容的 PreToolUse deny JSON);spec-preflight
的載入順序補上版本檢查第 0 步;新增 hooks/hooks.json 掛 PreToolUse;
do-wiki/models/plan-wiki/plugins-uninstall/todo-wiki 五個 skill 檔頭引用新規範
(plugins-install 刻意排除,避免版本落後時擋住自己的修復手段)。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 14:53:35 +08:00

11 KiB
Raw Blame History

name, description, argument-hint
name description argument-hint
plugins-uninstall 一次把 JSC 的四個 plugin(jsc-code/jsc-doc/jsc-persona/jsc-shared)從一個或多個 AI 助理移除,可同時處理 Claude Code、Codex、GitHub Copilot CLI、Antigravity 四家原生 plugin CLI 與沒有 plugin 匯入指令、但可使用 skill 的助理;沒指定時偵測本機裝了哪些 CLI 並讓使用者多選;移除順序固定把 jsc-shared 放到最後(本 skill 就住在裡面,移除後即失效),並在動手前列出將被移除的項目與會受影響的本機資料讓使用者確認。當使用者說要移除所有 jsc plugin、把 skill 套件整組解除安裝、清掉 code/doc/persona/shared、重灌前先卸載、要同時從好幾個 CLI 移除、或問怎麼一次移除全部 plugin 時觸發。不適用於:安裝或更新(用 /jsc-shared:plugins-install)、只移除單一 plugin(直接照該 plugin README 的移除章節)、刪除人格資料或 Gitea 上的存取庫。 [--assistant <助理清單,逗號分隔,或 all>] [--plugins code,doc,persona,shared] [--keep-marketplace] [--keep-clone] [--yes]

plugins-uninstall — 一次移除所有 JSC plugin

四階段 skill:先決定助理與目標清單,再列出將被移除的項目並確認,接著依固定順序移除,最後回報結果與殘留物。

階段 動作
A. 前置設定 決定要操作哪些助理(--assistant 可帶多個或 all/偵測本機有哪些 CLI/多個就讓使用者多選)→ 決定 plugin 清單(預設四個全移)
B. 盤點與確認 列出實際已安裝的項目、會一併移除的 marketplace 與本機 clone、以及不會被碰的資料,請使用者確認
C. 移除 依 code → doc → persona → shared 的順序逐一移除
D. 回報 表格回報每個 plugin 的結果,並列出刻意保留的殘留物

共用規範(必要前置)

先載入 /jsc-shared:spec-preflight 並依其流程處理。 本 skill 需要的規範:spec-version-guard、spec-output、spec-execution、spec-git-safety、spec-plugin-cli

本 skill 特有補充:

  • 移除是不可逆的動作:階段 B 的確認是必要決策,除非帶 --yes,否則一定要問過才動手。
  • 絕不刪除使用者資料:~/.claude/personas/(人格倉庫)、~/.roles/、~/.memory/(角色與記憶)一律不動,Gitea 上的存取庫也不動。要清這些請使用者自己來。
  • 順序不可調換:jsc-shared 一定最後移除。它是本 skill 的所在地,移除後本 skill 隨之失效,後面的步驟會執行不到。
  • 多個助理時的順序:外層先跑完一個助理的四個 plugin,再換下一個助理。目前正在執行本 skill 的那個助理排到最後——不然它自己的 jsc-shared 一沒,剩下的助理就處理不到了。

參數

  • --assistant <清單>:要操作的助理,可以多個,以逗號分隔(claude,codex,copilot,agy,opencode),或用 all 代表本機找得到的全部。省略時依階段 A1 判斷(只有一個就直接用,多個就讓使用者多選,且不預設全選)。
  • --plugins code,doc,persona,shared:要移除的 plugin(以逗號分隔,用 repo 短名)。省略時預設四個全移。
  • --keep-marketplace:只移除 plugin,保留 marketplace 登錄(之後要重裝比較快)。
  • --keep-clone:保留 Antigravity/OpenCode 用的本機 clone 目錄(預設就是保留,此旗標僅用於明示)。要刪除本機 clone 必須由使用者在階段 B 明確同意。
  • --yes:跳過階段 B 的確認(其他必要決策仍會中斷)。

plugin 對照表(移除識別的唯一依據)

repo 短名 plugin 名 marketplace 名 移除 token
code jsc-code code jsc-code@code
doc jsc-doc doc jsc-doc@doc
persona jsc-persona persona jsc-persona@persona
shared jsc-shared shared jsc-shared@shared

依 /jsc-shared:spec-plugin-cli:persona 沒有例外,現行 marketplace 名就是 repo 名 persona。jsc-plugins 是已停用的舊名,只會出現在早期安裝過的本機殘留鍵——遇到使用者本機還留著 jsc-persona@jsc-plugins,先移除該舊鍵(claude plugin uninstall jsc-persona@jsc-plugins 之類),再照本表用 jsc-persona@persona 處理,不要把舊名當成現行對照表的值。

各 plugin 帶入的 skill 目錄(OpenCode 路徑會用到):

repo 短名 skill 目錄
code action-composite、action-docker、action-node、image、issues、nuget、review-resolve、sync、target
doc docker、funcs、issues-analyze、issues-analyze-to-file、issues-sync、worklog
persona persona-anime、persona-chat、persona-create、persona-icon、persona-invite、persona-memory、persona-relation、persona-sleep、persona-status、persona-sync、persona-therapist、persona-transfer
shared plugins-install、plugins-uninstall、spec-action-params、spec-doc-funcs-handoff、spec-dockerfile、spec-execution、spec-gitea、spec-git-safety、spec-output、spec-plugin-version、spec-project-board、spec-time-log

上表是寫下來當天的快照,plugin 之後新增 skill 它不會自己更新。所以 OpenCode 的刪除優先從本機 clone 的 skills/ 推導清單(見階段 C 的 OpenCode 段),clone 不在時才退回這張表,並在回報裡註明「清單可能不完整」。 兩種做法都不可用萬用字元一次掃掉整個 skills/——那裡可能還有別處裝進去的 skill。


階段 A:前置設定

A1. 決定助理(可以一次多個)

--assistant 收的是清單,不是單一值:--assistant claude,codex,copilot、或 --assistant all。 最終得到的是一組助理,階段 B 到 D 都對這組的每一個各跑一遍。

依序判斷,第一個成立的就採用:

  1. 有帶 --assistant → 照它。all 代表「本機找得到的全部」(等同下面第 2 點的偵測結果)。
  2. 沒帶 → 逐一檢查哪些 CLI 存在(command -v claude codex copilot agy opencode):
    • 找到 1 個 → 直接用它。
    • 找到 多個 → 列出來讓使用者多選(移除是不可逆的,預設不全選,要他自己勾)。
  3. 一個都沒有 → 回報「找不到任何支援的助理 CLI」並停止。

目前正在執行本 skill 的那個助理,如果也在清單裡,放到最後處理——移掉它自己之後,本 skill 就不存在了。

A2. 決定 plugin 清單

--plugins 指定則照它,否則四個全做。無論使用者怎麼排,實際執行順序一律重排為 code → doc → persona → shared。


階段 B:盤點與確認

先查出實際狀態(claude plugin list/codex plugin list/copilot plugin list/agy plugin list,或 OpenCode 的 skills 目錄),再列出三張清單給使用者看:

  1. 會被移除:已安裝的 plugin、以及(未帶 --keep-marketplace 時)對應的 marketplace 登錄。
  2. 本機 clone:agy/opencode 用的 clone 目錄路徑與是否有未提交變更;預設保留,要刪請使用者明確說。
  3. 不會被碰:~/.claude/personas/(人格:身分、情緒、記憶、關係圖)、~/.roles/、~/.memory/、Gitea 上的所有存取庫。

清單裡沒有任何已安裝項目 → 直接回報「沒有可移除的項目」並結束。

未帶 --yes 時,在這裡停下來等使用者確認再進入階段 C。


階段 C:移除

以下 <plugin>、<marketplace>、<token> 一律取自對照表;帶 --keep-marketplace 時略過 marketplace remove 那行。

Claude Code / Codex / GitHub Copilot CLI / Antigravity

移除指令依 /jsc-shared:spec-plugin-cli 對應助理小節的「移除」段,代入本檔對照表的 <token>/<marketplace>/<plugin>;帶 --keep-marketplace 時略過各助理的 marketplace remove 那行(Antigravity 沒有 marketplace 概念,只有 agy plugin uninstall <plugin> 一行,不受此旗標影響)。四家指令與 spec-plugin-cli 完全一致,這裡不重複列出指令區塊,僅列本 skill 特有的收尾動作:

  • Claude Code:移除後檢查 ~/.claude/settings.json 的 enabledPlugins,清掉該 plugin 的殘留鍵(留著會讓下次安裝的狀態對不上)。
  • Antigravity:本機 clone(~/plugins/<repo> 之類)預設保留;使用者在階段 B 明確同意才刪,且該目錄有未提交變更時一律保留並回報。

無 plugin 匯入指令但可使用 skill 的助理

逐一刪除該 plugin 帶入的 skill 目錄。最可靠的做法是從本機 clone 與 README.md 推導清單,而不是照抄上表——上表是快照,plugin 新增 skill 之後就會漏。clone 還在時,推導+刪除迴圈依 /jsc-shared:spec-plugin-cli 的 OpenCode 節「移除」段,不重複列出。

clone 已經不在時才退回上表,且一個一行分開刪:

rm -rf ~/.config/opencode/skills/docker
rm -rf ~/.config/opencode/skills/funcs
# …照上表逐行

不要用 {a,b,c} 這種 brace expansion。它有三種會靜默失效的情況:逗號後有空格({a, b})不展開、只有一個元素({a})不展開、以及在 dash/sh 底下完全不支援。三種都是「什麼都沒刪,但 -f 讓結束碼還是 0」,回報會變成假的 ✅。

Windows PowerShell:rm -rf X → Remove-Item X -Recurse -Force、~ → $HOME。

jsc-shared 的收尾

移除 jsc-shared 是最後一步。動手前先在輸出裡寫清楚:

  • 本 skill 與所有 spec-* 共用規範會一起消失;jsc-code/jsc-doc 的 skill 內文都會引用 spec-*,若它們還留著,之後執行會載入不到共用規範。
  • 要重新安裝,得直接照 shared 的 README(那時已經沒有 /jsc-shared:plugins-install 可用了): claude plugin marketplace add https://gitea.jsc.idv.tw/plugins/shared.git → claude plugin install jsc-shared@shared。

階段 D:回報

以表格回報,一個「助理 × plugin」一列:

助理 plugin 動作 結果 備註
Claude Code jsc-code 移除/跳過(未安裝) ✅ 成功/⚠ 需處理/❌ 失敗 例:marketplace 已保留
Codex jsc-code 跳過(未安裝) ✅ —

只處理一個助理時可以省掉「助理」欄。處理多個時一定要有,否則使用者看不出哪一格出問題。

表格下方固定列出:

  • 刻意保留的殘留物:本機 clone 路徑、marketplace 登錄(若帶了 --keep-marketplace)、人格倉庫與記憶目錄。
  • 重啟提醒:移除後要重啟工作階段,指令與 skill 才會真正消失。