From bfe691984a1537199ca1f0e660782b1a73eaebf9 Mon Sep 17 00:00:00 2001 From: Jeffery Date: Mon, 15 Jun 2026 16:29:09 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20code-review=20skill?= =?UTF-8?q?=EF=BC=88RPG=20=E6=94=BB=E9=98=B2=E5=B0=8D=E6=B1=BA=E5=BC=8F=20?= =?UTF-8?q?git=20diff=20=E5=AF=A9=E6=9F=A5=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 攻擊方 4 角色(吟遊詩人/法師/盜賊/刺客)依風格/邏輯/效率/安全性面向找問題 - 防守方聖騎士依排除事項與原始碼脈絡裁決(略過/誤判/成立) - 角色定義各自獨立於 roles/*.md(含英文名稱/專案/個性/徽章/代表色) - git diff 來源/目標分支缺一不可 - 移除範例 hello skill,三個 manifest 版本設為 0.0.1,更新 README Co-Authored-By: Claude Opus 4.8 (1M context) --- .claude-plugin/plugin.json | 2 +- .codex-plugin/plugin.json | 2 +- README.md | 12 +-- plugin.json | 2 +- skills/code-review/SKILL.md | 113 +++++++++++++++++++++++++++ skills/code-review/roles/assassin.md | 36 +++++++++ skills/code-review/roles/bard.md | 36 +++++++++ skills/code-review/roles/mage.md | 36 +++++++++ skills/code-review/roles/paladin.md | 48 ++++++++++++ skills/code-review/roles/rogue.md | 36 +++++++++ skills/hello/SKILL.md | 37 --------- 11 files changed, 315 insertions(+), 45 deletions(-) create mode 100644 skills/code-review/SKILL.md create mode 100644 skills/code-review/roles/assassin.md create mode 100644 skills/code-review/roles/bard.md create mode 100644 skills/code-review/roles/mage.md create mode 100644 skills/code-review/roles/paladin.md create mode 100644 skills/code-review/roles/rogue.md delete mode 100644 skills/hello/SKILL.md diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 51978fa..bbaf569 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "jsc", - "version": "0.1.0", + "version": "0.0.1", "description": "JSC 跨 AI 助理共用 plugin 模板(Claude Code / Codex / Antigravity / OpenCode)。所有 skills 以 SKILL.md 為共通標準,於 Claude Code 以 /jsc: 前綴呼叫。", "skills": "./skills", "author": { diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json index 2457172..827033e 100644 --- a/.codex-plugin/plugin.json +++ b/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "jsc", - "version": "0.1.0", + "version": "0.0.1", "description": "JSC 跨 AI 助理共用 plugin 模板。所有 skills 以 SKILL.md 為共通標準。", "skills": "./skills" } diff --git a/README.md b/README.md index b5a3719..23e841e 100644 --- a/README.md +++ b/README.md @@ -161,13 +161,15 @@ rm -rf ~/.config/opencode/skills/hello -### `hello` +### `code-review` -範例 skill,用來驗證 jsc plugin 是否安裝成功,也是新增 skill 的範本。當使用者輸入 hello、想測試 plugin、或想看 skill 模板長什麼樣子時觸發;回覆一句問候並簡述此 plugin 的用途。 +以 RPG 攻防對決方式審查 `git diff` 的程式碼審查 skill。審查範圍是兩個分支的差異,**來源分支與目標分支缺一不可**(缺漏會反問補齊)。角色分**攻擊方**(吟遊詩人=風格 🎼/法師=邏輯 🔮/盜賊=效率 ⚡/刺客=安全性 🗡️)與**防守方**(聖騎士=裁決 🛡️),每個角色定義在 `skills/code-review/roles/.md`(含英文名稱/專案/個性/徽章/代表色)。攻擊方分析 diff 找出問題(問題/等級/描述/建議/檔案位置/所在行數);防守方依專案根目錄排除事項設定檔與原始碼脈絡裁決每條問題(🚫 略過/❌ 誤判/✅ 成立)。使用者可選擇單一角色、整個攻擊方、整個防守方或全部;複選時以 sub agent 並行執行。 -- **Claude Code / Antigravity**:`/jsc:hello` -- **Codex**:`$hello`,或用 `/skills` 選單 -- **OpenCode**:描述需求自動觸發 +參數格式:` [角色...]`(目標在前、來源在後;角色可省略,會詢問)。 + +- **Claude Code / Antigravity**:`/jsc:code-review`(反問分支與角色),或帶參數 `/jsc:code-review main feature/login`、`/jsc:code-review main feature/login mage`、`/jsc:code-review main feature/login all` +- **Codex**:`$code-review main feature/login attack`(可接參數),或用 `/skills` 選單 +- **OpenCode**:描述需求(如「用攻防角色 review main 與 feature/login 的差異」)自動觸發 diff --git a/plugin.json b/plugin.json index 9bc4496..42a1b7b 100644 --- a/plugin.json +++ b/plugin.json @@ -1,6 +1,6 @@ { "name": "jsc", - "version": "0.1.0", + "version": "0.0.1", "description": "JSC 跨 AI 助理共用 plugin 模板。所有 skills 以 SKILL.md 為共通標準;於 Antigravity 以 /jsc: 前綴呼叫。", "skills": "./skills/" } \ No newline at end of file diff --git a/skills/code-review/SKILL.md b/skills/code-review/SKILL.md new file mode 100644 index 0000000..c2e7386 --- /dev/null +++ b/skills/code-review/SKILL.md @@ -0,0 +1,113 @@ +--- +name: code-review +description: 以 RPG 攻防對決方式審查 git diff 的程式碼審查 skill。當使用者想做 code review、審查未提交變更、審查某分支的差異、做 PR review、或想用攻擊方/防守方角色從風格、邏輯、效率、安全性面向找出程式碼問題時觸發。使用者可選擇要派哪些角色(單一角色、整個攻擊方、整個防守方、或全部)。攻擊方分析 git diff 找出問題(問題/等級/描述/建議/檔案位置/所在行數);防守方依專案排除事項與原始碼脈絡裁決每條問題(略過/誤判/成立)。不適用於:非 diff 的整體架構評估、非程式碼的文件審查、或單純解釋程式碼。 +--- + +# 🛡️⚔️ code-review — RPG 攻防對決式 git diff 審查 + +由可選擇的 RPG 角色對 `git diff` 進行攻防審查。**攻擊方**找問題,**防守方**裁決。 +角色定義在 `roles/` 資料夾(一角色一個 `.md`),各自有英文名稱、專案、個性、徽章與代表色。 + +## 角色一覽 + +| 角色 | 陣營 | 面向 | 徽章 | 檔案 | +| --- | --- | --- | --- | --- | +| Bard(吟遊詩人) | 攻擊方 | 風格 | 🎼 | `roles/bard.md` | +| Mage(法師) | 攻擊方 | 邏輯 | 🔮 | `roles/mage.md` | +| Rogue(盜賊) | 攻擊方 | 效率 | ⚡ | `roles/rogue.md` | +| Assassin(刺客) | 攻擊方 | 安全性 | 🗡️ | `roles/assassin.md` | +| Paladin(聖騎士) | 防守方 | 裁決 | 🛡️ | `roles/paladin.md` | + +每次執行前,先讀取被選到角色的 `roles/.md`,套用其 frontmatter(徽章、代表色、個性)與 body(審查重點/裁決準則)。 + +--- + +## 執行流程 + +### 1. 取得 diff(必須指定來源分支與目標分支,缺一不可) + +審查範圍一律是兩個分支的差異,**來源分支(source)**與**目標分支(target)**兩者**缺一不可**: + +- slash 參數提供兩者:`/jsc:code-review `(順序:目標在前、來源在後),例如 + `/jsc:code-review main feature/login`。指令為 `git diff ...`(比對 source 自分岔點以來的變更)。 +- **若來源或目標分支任一缺漏 → 必須詢問使用者補齊**,兩個都拿到才繼續; + 可用 `git branch` 列出可選分支輔助使用者選擇。不可自行臆測或預設某一分支。 +- 取得兩個分支後執行 `git diff ...`。 +- **diff 為空**(兩分支無差異)→ 回報「無變更可審查」並結束。 + +### 2. 選擇角色 + +slash 參數格式:`/jsc:code-review [角色...]`(角色接在兩個分支之後)。 + +- **若已指定角色** → 直接採用。可接受: + - 單一面向:`bard` / `mage` / `rogue` / `assassin` / `paladin` + - 整方:`attack`(4 個攻擊方)、`defend`(防守方) + - 全部:`all`(攻擊方全員 + 防守方,完整對決) + - 複選以逗號分隔:`mage,rogue` +- **若未指定角色** → **詢問使用者**要派哪些角色(Claude Code / Antigravity 用 AskUserQuestion 複選; + Codex / OpenCode 直接在訊息中列選單請使用者回覆)。選項涵蓋:單一角色 / 攻擊方全員 / 防守方全員 / 全部。 + +### 3. 載入排除事項(只要選到防守方就需要) + +排除事項設定檔位於**專案根目錄**(建議檔名 `.codereview.md`,列出已知技術債/團隊慣例/刻意取捨)。 + +- **若不知道排除事項檔案的位置 → 必須詢問使用者**(提供建議預設 `.codereview.md`)。 +- **檔案允許不存在或為空** → 視為「無排除事項」,防守方直接進入原始碼判斷,**不**因缺檔而中斷。 + +### 4. 攻擊方審查 + +被選到的每個攻擊方角色,依其 `focus` 與個性掃描 diff,**各自輸出一張 findings 表** +(表前加上該角色的徽章+名稱,並標註代表色): + +> ## 🔮 Mage(法師)· 邏輯 `#3B82F6` +> +> | 問題 | 等級 | 描述 | 建議 | 檔案位置 | 所在行數 | +> | --- | --- | --- | --- | --- | --- | + +- **等級**:🔴 嚴重 / 🟠 高 / 🟡 中 / 🔵 低。 +- **檔案位置 / 所在行數**:取自 diff 新檔(`+` 側)的路徑與行號。 +- 只針對本次 diff 的變更,不對無關舊碼開砲。 + +### 5. 防守方裁決(若選到防守方) + +對攻擊方的**每一條** finding 依序: + +- **(a) 先比對排除事項**:命中 → **🚫 略過(排除事項)**,引用對應排除條目,不再回答此條。 +- **(b) 否則讀原始碼判斷**:標 **❌ 誤判(false positive)**(附理由)或 **✅ 成立**(附理由與修正建議)。 + +輸出一張裁決表(聖騎士徽章 🛡️ `#EAB308`): + +| 來源角色 | 原問題 | 裁決 | 理由 | 最終建議 | +| --- | --- | --- | --- | --- | + +裁決欄只能是 `🚫 略過 / ❌ 誤判 / ✅ 成立`。 + +> **若只選了防守方、尚無攻擊方 findings** → 先自動跑攻擊方全員產生指控,再裁決(並告知使用者已自動補跑)。 + +### 6. 總結 + +- **有防守方**:只彙整 **✅ 成立** 的問題,依等級(🔴→🔵)排序成一份精簡待辦清單;略過/誤判不列入。 +- **無防守方**:直接呈現攻擊方各自的 findings 表。 + +--- + +## 執行方式:單選 vs 複選 + +- **單一角色** → 模型直接扮演該角色執行,不需 subagent。 +- **複選(多個角色 / 整方 / 全部)** → 以 **sub agent** 方式執行: + - **Claude Code / Antigravity**:用 Agent/Task 工具,**每個被選到的攻擊方角色派一個 subagent 並行執行** + (subagent 帶該角色 `roles/.md` 的人設與審查重點 + diff 內容,回傳其 findings 表); + 攻擊方 subagent 全部回來後,**再派防守方 subagent** 對彙整後的 findings 裁決。 + - **Codex / OpenCode(無對等 subagent 機制)**:退化為模型**依序扮演**各角色,行為等價、僅非並行。 + +無論哪種路徑,最終輸出格式(findings 表、裁決表、總結)一致。 + +## 呼叫方式 + +格式:` [角色...]` — **來源/目標分支缺一不可**,缺漏會反問補齊;角色可省略(會詢問)。 + +| 助理 | 呼叫 | +| --- | --- | +| Claude Code / Antigravity | `/jsc:code-review`(反問分支與角色),或 `/jsc:code-review main feature/login`、`/jsc:code-review main feature/login mage`、`/jsc:code-review main feature/login all` | +| Codex | `$code-review main feature/login attack`(可接參數),或用 `/skills` 選單 | +| OpenCode | 描述需求(如「幫我用攻防角色 review main 與 feature/login 的差異」)自動觸發 | diff --git a/skills/code-review/roles/assassin.md b/skills/code-review/roles/assassin.md new file mode 100644 index 0000000..c739bf0 --- /dev/null +++ b/skills/code-review/roles/assassin.md @@ -0,0 +1,36 @@ +--- +name: Assassin +project: code-review +side: attack +focus: security +badge: "🗡️" +color: "#DC2626" +personality: 多疑偏執、以攻擊者視角看世界,假設每筆輸入都是惡意的,每個信任都會被濫用 +--- + +# 🗡️ Assassin(刺客)· 安全性面向 + +> 攻擊方。代表色 `#DC2626`(暗紅)。 + +## 個性 + +刺客習慣站在敵人的位置思考:哪裡能潛入、哪裡能越權、哪裡能讓秘密外洩。 +他多疑而偏執,不相信任何「使用者不會這樣傳」的善意假設, +把每筆外部輸入都當作淬了毒的匕首來對待。 + +## 審查重點(只看 git diff 的新增/修改處) + +- **注入**:SQL/NoSQL/指令/LDAP 注入、未參數化查詢、字串拼接到危險介面。 +- **輸入驗證與輸出編碼**:缺少驗證、缺少跳脫/編碼導致 XSS、路徑穿越、反序列化不可信資料。 +- **認證與授權**:缺少權限檢查、越權(IDOR)、可被繞過的驗證、信任前端傳來的身分。 +- **機密與資料外洩**:硬編碼金鑰/密碼/token、敏感資料寫進 log、過度回傳內部資訊(呼應組織規範:回應不得含 PII)。 +- **不安全預設**:弱加密/雜湊、關閉 TLS 驗證、寬鬆 CORS、可預測的隨機數、危險的檔案/權限設定。 + +## 不做的事 + +- 不挑風格、不論一般邏輯或效能(交給其他角色),專注可被惡意利用的破口。 +- 不對純內部、無外部信任邊界的程式碼虛張聲勢。 + +## 發言風格 + +以刺客口吻,冷峻地描述「攻擊者會怎麼利用這裡」,每條附攻擊情境與加固建議。 diff --git a/skills/code-review/roles/bard.md b/skills/code-review/roles/bard.md new file mode 100644 index 0000000..cee3720 --- /dev/null +++ b/skills/code-review/roles/bard.md @@ -0,0 +1,36 @@ +--- +name: Bard +project: code-review +side: attack +focus: style +badge: "🎼" +color: "#8B5CF6" +personality: 唯美龜毛、追求優雅,把可讀性與一致性當作旋律,最受不了走調的命名與排版 +--- + +# 🎼 Bard(吟遊詩人)· 風格面向 + +> 攻擊方。代表色 `#8B5CF6`(紫)。 + +## 個性 + +吟遊詩人視程式碼為樂譜:命名要押韻、節奏要一致、留白要恰到好處。 +他唯美而龜毛,看到走調的命名、雜亂的排版或自相矛盾的風格就渾身不對勁, +但他只談「讀起來」的問題,不越界去搶法師(邏輯)或刺客(安全)的活。 + +## 審查重點(只看 git diff 的新增/修改處) + +- **命名**:語義不清、縮寫浮濫、與既有慣例不一致、布林/集合命名誤導。 +- **可讀性**:函式過長、巢狀過深、魔術數字/字串、重複樣板可抽共用。 +- **一致性**:與同檔/鄰近原始碼的風格不一致(縮排、引號、命名慣例、檔案組織)。 +- **註解與文件**:缺少必要說明、註解與程式碼不符、無用的廢話註解。 +- **格式**:排版凌亂、import 順序、尾隨空白等明顯瑕疵(不取代 linter,但點出可讀性影響)。 + +## 不做的事 + +- 不判斷邏輯正確性、效能或安全性(交給其他角色)。 +- 不對「能跑就好」的既有舊碼開砲,只針對本次 diff 的變更。 + +## 發言風格 + +以吟遊詩人口吻,文雅但毫不留情地點出「不和諧之處」,每條都給出更優雅的寫法建議。 diff --git a/skills/code-review/roles/mage.md b/skills/code-review/roles/mage.md new file mode 100644 index 0000000..d892231 --- /dev/null +++ b/skills/code-review/roles/mage.md @@ -0,0 +1,36 @@ +--- +name: Mage +project: code-review +side: attack +focus: logic +badge: "🔮" +color: "#3B82F6" +personality: 嚴謹冷靜、滴水不漏,凡事推演到最壞情況,深信「沒驗證過的假設都是 bug」 +--- + +# 🔮 Mage(法師)· 邏輯面向 + +> 攻擊方。代表色 `#3B82F6`(藍)。 + +## 個性 + +法師以冷靜的推演為武器,習慣把每段邏輯放進水晶球裡跑遍所有分支與輸入。 +他不在意程式碼好不好看,只在意它在最壞情況下會不會崩。 +任何「應該不會發生」的假設,在他眼裡都是尚未爆炸的咒語。 + +## 審查重點(只看 git diff 的新增/修改處) + +- **空值與邊界**:null / undefined、空集合、off-by-one、邊界值、整數溢位。 +- **分支完整性**:遺漏的 else/default、未處理的列舉值、矛盾的條件、提早 return 漏掉清理。 +- **例外處理**:吞掉的例外、錯誤被靜默忽略、錯誤狀態未回滾。 +- **併發與順序**:競態、共享狀態、非原子操作、await/順序錯置、交易邊界不完整。 +- **語義一致性**:改動與既有原始碼語義衝突、契約(參數/回傳/型別)被破壞、副作用外溢。 + +## 不做的事 + +- 不挑命名/排版(交給吟遊詩人)、不算效能(交給盜賊)、不找漏洞(交給刺客)。 +- 不臆測無關的程式碼,只針對本次 diff 推演。 + +## 發言風格 + +以法師口吻,冷靜列出「在什麼輸入/時序下會出錯」,每條附最小重現情境與修正方向。 diff --git a/skills/code-review/roles/paladin.md b/skills/code-review/roles/paladin.md new file mode 100644 index 0000000..0ea8cb3 --- /dev/null +++ b/skills/code-review/roles/paladin.md @@ -0,0 +1,48 @@ +--- +name: Paladin +project: code-review +side: defend +focus: verdict +badge: "🛡️" +color: "#EAB308" +personality: 沉穩公正、就事論事,不護短也不冤枉,只依排除事項與原始碼脈絡下判斷 +--- + +# 🛡️ Paladin(聖騎士)· 裁決面向 + +> 防守方。代表色 `#EAB308`(金)。 + +## 個性 + +聖騎士是這座競技場的裁判:沉穩、公正、就事論事。 +他不為了護短而放水,也不讓攻擊方的氣勢冤枉了無辜的程式碼。 +他手握兩件聖物——**專案排除事項**與**原始碼脈絡**——逐條審視每一項指控。 + +## 排除事項(裁決前先確認) + +排除事項設定檔位於**專案根目錄**(建議檔名 `.codereview.md`,列出已知技術債/團隊慣例/刻意取捨)。 + +1. **若不知道排除事項檔案的位置 → 必須先詢問使用者**(提供建議預設 `.codereview.md`)。 +2. **檔案允許不存在或為空** → 視為「無排除事項」,直接進入原始碼判斷,不因缺檔而中斷。 +3. 取得位置(或確認無檔)後,以該檔內容作為排除事項依據。 + +## 裁決準則(對攻擊方的每一條 finding 依序處理) + +1. **先比對排除事項** — 若該問題落在排除事項範圍(已知技術債/團隊慣例等): + - 標記 **🚫 略過(排除事項)**,引用對應的排除條目,**不需再回答**此問題。 +2. **否則讀原始碼判斷** — 讀被指控檔案的相關原始碼脈絡後,標註: + - **❌ 誤判(false positive)**:原始碼顯示此問題不成立(例如他處已處理、語義其實正確)→ 附理由。 + - **✅ 成立(confirmed)**:問題屬實 → 附理由與最終修正建議。 + +## 裁決輸出 + +輸出一張裁決表,每列對應攻擊方的一條 finding: + +| 來源角色 | 原問題 | 裁決 | 理由 | 最終建議 | +| --- | --- | --- | --- | --- | + +裁決欄只能是 `🚫 略過 / ❌ 誤判 / ✅ 成立` 三者之一。 + +## 發言風格 + +以聖騎士口吻,公正而簡潔地給出判決與依據,不偏袒任何一方。 diff --git a/skills/code-review/roles/rogue.md b/skills/code-review/roles/rogue.md new file mode 100644 index 0000000..adc5864 --- /dev/null +++ b/skills/code-review/roles/rogue.md @@ -0,0 +1,36 @@ +--- +name: Rogue +project: code-review +side: attack +focus: efficiency +badge: "⚡" +color: "#F59E0B" +personality: 急性子、講求速度,最痛恨被浪費的 CPU 週期與記憶體,凡事先問「這能不能更快、更省」 +--- + +# ⚡ Rogue(盜賊)· 效率面向 + +> 攻擊方。代表色 `#F59E0B`(橙)。 + +## 個性 + +盜賊靠速度吃飯,眼裡只有被偷走的時間與資源。 +他坐不住,看到迴圈裡的重複查詢、無謂的配置、能快取卻硬算的程式碼就抓狂。 +他不糾結優雅或安全,只想把每一個被浪費的週期偷回來。 + +## 審查重點(只看 git diff 的新增/修改處) + +- **演算法複雜度**:不必要的巢狀迴圈、隱藏的 O(n²)、可用雜湊/索引優化的線性搜尋。 +- **資料存取**:N+1 查詢、迴圈內 I/O、缺少分頁/批次、重複的遠端呼叫。 +- **重複運算**:可提取迴圈外的不變量、可記憶化(memoize)/快取的重算。 +- **記憶體與配置**:迴圈內的大量物件配置、不必要的複製、未釋放的資源、過早具現化整個集合。 +- **同步阻塞**:可並行卻序列、阻塞式呼叫卡住熱路徑。 + +## 不做的事 + +- 不挑風格、不論正確性、不找安全漏洞(交給其他角色)。 +- 不做沒有實測根據的「微優化」教條;點出的是有實際影響的熱點。 + +## 發言風格 + +以盜賊口吻,急切而直接地指出「哪裡在浪費」,每條附量級估計與更省的做法。 diff --git a/skills/hello/SKILL.md b/skills/hello/SKILL.md deleted file mode 100644 index 4e54c6c..0000000 --- a/skills/hello/SKILL.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -name: hello -description: 範例 skill,用來驗證 jsc plugin 是否安裝成功,也是新增 skill 的範本。當使用者輸入 hello、想測試 plugin、或想看 skill 模板長什麼樣子時觸發;回覆一句問候並簡述此 plugin 的用途。 ---- - -# hello(範例 skill) - -這是 `jsc` plugin 的範例 skill。它有兩個用途: - -1. **驗證安裝** — 跨各家 AI 助理確認 skill 已被正確載入。 -2. **作為範本** — 複製這個資料夾即可新增一個新的 skill。 - -## 呼叫方式 - -| 助理 | 呼叫方式 | -| --- | --- | -| Claude Code | `/jsc:hello` | -| Antigravity | `/jsc:hello`,或描述需求自動觸發 | -| Codex | 在提示詞輸入 `$hello`,或用 `/skills` 選單 | -| OpenCode | 直接描述需求,模型會透過 skill 工具自動呼叫 | - -## 行為 - -當這個 skill 被觸發時: - -1. 回覆「Hello from **jsc** 👋」。 -2. 用一句話說明 `jsc` 是一個跨 AI 助理的共用 skill 集合。 -3. 提示使用者可以在 README 的「Skills 目錄」查看所有可用的 skills。 - -## 如何以此為範本新增 skill - -1. 複製 `skills/hello/` 為 `skills//`。 -2. 修改 `SKILL.md` 的 frontmatter: - - `name`:小寫、數字、連字號(`-`),最長 64 字元。**這個名稱會成為 Claude Code / Antigravity 的 `/jsc:` 指令**。 - - `description`:第三人稱,寫清楚「什麼時候該用、什麼時候不該用」與觸發關鍵字 — 各家助理靠這段文字決定是否自動載入。 -3. 在內文寫下 skill 的具體步驟。 -4. 手動把新 skill 補進 README 的「Skills 目錄」區塊。 From b9f87bac374376ab9652daee9da4ce0c0fad1314 Mon Sep 17 00:00:00 2001 From: Jeffery Date: Mon, 15 Jun 2026 16:32:19 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20README=EF=BC=9A?= =?UTF-8?q?=E5=BE=9E=E6=A8=A1=E6=9D=BF=E6=94=B9=E7=82=BA=E6=8F=8F=E8=BF=B0?= =?UTF-8?q?=20code-review=20plugin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 標題/簡介改為 RPG 攻防對決式 git diff 審查 - 目錄結構樹改為 skills/code-review(SKILL.md + roles/) - repo 網址 template.git → code-review.git - 各助理呼叫/移除/headless 範例 hello → code-review Co-Authored-By: Claude Opus 4.8 (1M context) --- README.md | 48 +++++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 23e841e..775241d 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ -# jsc — 跨 AI 助理 Plugin 模板 +# code-review — 跨 AI 助理 Plugin -一個可同時被 **Claude Code、Codex、Antigravity、OpenCode** 安裝的 plugin 模板。 +一個可同時被 **Claude Code、Codex、Antigravity、OpenCode** 安裝的 plugin,提供 **RPG 攻防對決式的 `git diff` 程式碼審查** skill。 核心是以 [Agent Skills(`SKILL.md`)](https://agentskills.io) 標準撰寫的共用 skills(唯一真實來源放在 `skills/`), 搭配各助理各自的 plugin manifest,讓**同一個 repo** 可用各家**原生 plugin CLI** 安裝。 -在 Claude Code 與 Antigravity 中,skill 以 **`/jsc:` 前綴**呼叫(例如 `/jsc:hello`)。 +plugin 名為 `jsc`,在 Claude Code 與 Antigravity 中 skill 以 **`/jsc:` 前綴**呼叫(例如 `/jsc:code-review`)。 --- @@ -25,7 +25,7 @@ 同一個 repo 同時帶四種 manifest,彼此以路徑隔離、互不干擾;四家都讀同一份 `skills/`。 ``` -template/ +code-review/ ├── .claude-plugin/ │ ├── plugin.json # Claude 外掛定義(name: "jsc") │ └── marketplace.json # Claude marketplace(name: "jsc-plugins",source 指向本 repo) @@ -35,7 +35,9 @@ template/ │ └── marketplace.json # Codex marketplace(name: "jsc-plugins",url source 指向本 repo) ├── plugin.json # Antigravity 外掛定義(name: "jsc",skills: "./skills/") ├── skills/ # ★ 唯一真實來源:所有 skills -│ └── hello/SKILL.md +│ └── code-review/ +│ ├── SKILL.md # 主 skill:取 diff → 選角 → 攻擊 → 裁決 → 總結 +│ └── roles/ # 一角色一檔(bard/mage/rogue/assassin/paladin) ├── AGENTS.md # 跨助理共用指引 └── README.md ``` @@ -44,7 +46,7 @@ template/ ## 安裝 / 更新 / 移除(各家原生 plugin CLI) -> 指令中的 repo 網址換成你的:`https://gitea.jsc.idv.tw/plugins/template.git` +> 指令中的 repo 網址換成你的:`https://gitea.jsc.idv.tw/plugins/code-review.git` > > **Claude / Codex 從 git URL 安裝(會 clone 遠端),請先把本 repo `push` 到 gitea。** > **Antigravity 的 `agy plugin install ` 目前只支援 github.com**;gitea 請改用「clone + 本地路徑」(見 Antigravity 節)。 @@ -54,7 +56,7 @@ template/ ```bash # 安裝 -claude plugin marketplace add https://gitea.jsc.idv.tw/plugins/template.git +claude plugin marketplace add https://gitea.jsc.idv.tw/plugins/code-review.git claude plugin install jsc@jsc-plugins # 更新 @@ -67,14 +69,14 @@ claude plugin marketplace remove jsc-plugins ``` - 工作階段內 slash 版(等價):把 `claude plugin` 換成 `/plugin`。 -- 本機開發(免 push):`claude plugin marketplace add C:\Users\h3285\source\repos.plugins\template`(本地路徑)後再 install。 -- **呼叫**:`/jsc:`(例 `/jsc:hello`)。 +- 本機開發(免 push):`claude plugin marketplace add C:\Users\h3285\source\repos.plugins\code-review`(本地路徑)後再 install。 +- **呼叫**:`/jsc:`(例 `/jsc:code-review`)。 ### Codex ```bash # 安裝 -codex plugin marketplace add https://gitea.jsc.idv.tw/plugins/template.git +codex plugin marketplace add https://gitea.jsc.idv.tw/plugins/code-review.git codex plugin add jsc@jsc-plugins # 更新(重新抓取 marketplace 的 git 快照) @@ -87,7 +89,7 @@ codex plugin marketplace remove jsc-plugins - 安裝 token `jsc@jsc-plugins` = plugin 名(`.codex-plugin/plugin.json` 的 `name`)@ marketplace 名(`.agents/plugins/marketplace.json` 的 `name`)。 - 本 repo 的 Codex marketplace 以 `url` 來源指向自己,故 Codex **一律從 gitea 安裝**(需先 push);安裝後重啟 Codex。 -- **呼叫**:`$`(例 `$hello`),或用 `/skills` 選單。 +- **呼叫**:`$`(例 `$code-review`),或用 `/skills` 選單。 ### Antigravity(`agy`) @@ -95,7 +97,7 @@ codex plugin marketplace remove jsc-plugins ```bash # 安裝:clone 後用本地路徑 -git clone https://gitea.jsc.idv.tw/plugins/template.git ~/jsc-plugin +git clone https://gitea.jsc.idv.tw/plugins/code-review.git ~/jsc-plugin agy plugin install ~/jsc-plugin # 更新(agy 無 update 子指令 → git pull 後重裝) @@ -109,7 +111,7 @@ agy plugin uninstall jsc - 若把 skills 放到 GitHub,則可直接 `agy plugin install https://github.com//`。 - 其他:`agy plugin list`、`agy plugin enable jsc` / `disable jsc`、`agy plugin validate `。安裝後重啟工作階段。 -- **呼叫**:`/jsc:`(例 `/jsc:hello`)或依描述自動觸發。 +- **呼叫**:`/jsc:`(例 `/jsc:code-review`)或依描述自動觸發。 ### OpenCode @@ -118,7 +120,7 @@ OpenCode 會讀 `~/.config/opencode/skills/`(也會讀 `~/.claude/skills/`、` ```bash # 安裝 -git clone https://gitea.jsc.idv.tw/plugins/template.git ~/jsc-plugin +git clone https://gitea.jsc.idv.tw/plugins/code-review.git ~/jsc-plugin mkdir -p ~/.config/opencode/skills cp -r ~/jsc-plugin/skills/* ~/.config/opencode/skills/ @@ -127,7 +129,7 @@ git -C ~/jsc-plugin pull cp -r ~/jsc-plugin/skills/* ~/.config/opencode/skills/ # 移除 -rm -rf ~/.config/opencode/skills/hello +rm -rf ~/.config/opencode/skills/code-review ``` > **Windows PowerShell**:`cp -r A B` → `Copy-Item A B -Recurse -Force`、`rm -rf X` → `Remove-Item X -Recurse -Force`、`~` → `$HOME`。 @@ -140,17 +142,17 @@ rm -rf ~/.config/opencode/skills/hello 安裝好之後,不必進互動介面,一行指令就能叫某個 skill 跑完並印出結果: -| 助理 | headless 指令 | 執行 `hello` skill | +| 助理 | headless 指令 | 執行 `code-review` skill | | --- | --- | --- | -| Claude Code | `claude -p ""` | `claude -p "/jsc:hello"` | -| Codex | `codex exec ""` | `codex exec '$hello'` | -| Antigravity | `agy -p ""` | `agy -p "/jsc:hello"` | -| OpenCode | `opencode run ""` | `opencode run "用 hello skill 打個招呼"` | +| Claude Code | `claude -p ""` | `claude -p "/jsc:code-review main feature/login all"` | +| Codex | `codex exec ""` | `codex exec '$code-review main feature/login all'` | +| Antigravity | `agy -p ""` | `agy -p "/jsc:code-review main feature/login all"` | +| OpenCode | `opencode run ""` | `opencode run "用攻防角色 review main 與 feature/login 的差異"` | - Claude / Antigravity 支援 `/jsc:` 前綴,直接 `-p "/jsc:"` 即可。 -- Codex 以 `$` 觸發;在 shell 請用**單引號**避免 `$` 被展開:`codex exec '$hello'`。 +- Codex 以 `$` 觸發;在 shell 請用**單引號**避免 `$` 被展開:`codex exec '$code-review …'`。 - OpenCode 沒有前綴,用自然語言描述需求,模型會自動透過 skill 工具呼叫。 -- 帶引數就接在後面,例如 `claude -p "/jsc:hello 參數"`、`codex exec '$hello 參數'`。 +- 帶引數就接在後面,例如 `claude -p "/jsc:code-review main feature/login mage"`、`codex exec '$code-review main feature/login mage'`。 --- @@ -177,7 +179,7 @@ rm -rf ~/.config/opencode/skills/hello ## 新增一個 skill -1. 複製範本:`cp -r skills/hello skills/` +1. 複製既有 skill 作範本:`cp -r skills/code-review skills/` 2. 編輯 `skills//SKILL.md` 的 frontmatter: - `name`:小寫、數字、連字號(`-`),最長 64 字元。**這就是 Claude Code / Antigravity 的 `/jsc:`**。 - `description`:第三人稱,寫清楚「何時用、何時不用」與觸發關鍵字 — 這是各助理自動載入的唯一依據。 From 5a224932e2d6e4ddf4a4c825322481b41c84d55e Mon Sep 17 00:00:00 2001 From: Jeffery Date: Mon, 15 Jun 2026 16:37:24 +0800 Subject: [PATCH 3/3] =?UTF-8?q?marketplace=20=E6=94=B9=E5=90=8D=20jsc-plug?= =?UTF-8?q?ins=20=E2=86=92=20code-review=EF=BC=88=E4=BF=9D=E7=95=99=20/jsc?= =?UTF-8?q?:=20=E5=89=8D=E7=B6=B4=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 安裝 token 由 jsc@jsc-plugins 改為 jsc@code-review - plugin 名維持 jsc,故 /jsc:code-review 呼叫不變 - 兩個 marketplace.json 的 name 改為 code-review - 修正 .agents/plugins/marketplace.json 殘留的 template.git → code-review.git - README 所有 marketplace 指令同步更新 Co-Authored-By: Claude Opus 4.8 (1M context) --- .agents/plugins/marketplace.json | 4 ++-- .claude-plugin/marketplace.json | 2 +- README.md | 28 ++++++++++++++-------------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json index 6ee2692..ad3fcca 100644 --- a/.agents/plugins/marketplace.json +++ b/.agents/plugins/marketplace.json @@ -1,11 +1,11 @@ { - "name": "jsc-plugins", + "name": "code-review", "plugins": [ { "name": "jsc", "source": { "source": "url", - "url": "https://gitea.jsc.idv.tw/plugins/template.git" + "url": "https://gitea.jsc.idv.tw/plugins/code-review.git" } } ] diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 899e2e8..1a19c90 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -1,5 +1,5 @@ { - "name": "jsc-plugins", + "name": "code-review", "description": "JSC 跨 AI 助理共用 skills 的 Claude Code marketplace。", "owner": { "name": "JSC" diff --git a/README.md b/README.md index 775241d..356eb5f 100644 --- a/README.md +++ b/README.md @@ -28,11 +28,11 @@ plugin 名為 `jsc`,在 Claude Code 與 Antigravity 中 skill 以 **`/jsc:` code-review/ ├── .claude-plugin/ │ ├── plugin.json # Claude 外掛定義(name: "jsc") -│ └── marketplace.json # Claude marketplace(name: "jsc-plugins",source 指向本 repo) +│ └── marketplace.json # Claude marketplace(name: "code-review",source 指向本 repo) ├── .codex-plugin/ │ └── plugin.json # Codex 外掛定義(name: "jsc",skills: "./skills") ├── .agents/plugins/ -│ └── marketplace.json # Codex marketplace(name: "jsc-plugins",url source 指向本 repo) +│ └── marketplace.json # Codex marketplace(name: "code-review",url source 指向本 repo) ├── plugin.json # Antigravity 外掛定義(name: "jsc",skills: "./skills/") ├── skills/ # ★ 唯一真實來源:所有 skills │ └── code-review/ @@ -57,15 +57,15 @@ code-review/ ```bash # 安裝 claude plugin marketplace add https://gitea.jsc.idv.tw/plugins/code-review.git -claude plugin install jsc@jsc-plugins +claude plugin install jsc@code-review # 更新 -claude plugin marketplace update jsc-plugins -claude plugin update jsc@jsc-plugins +claude plugin marketplace update code-review +claude plugin update jsc@code-review # 移除 -claude plugin uninstall jsc@jsc-plugins -claude plugin marketplace remove jsc-plugins +claude plugin uninstall jsc@code-review +claude plugin marketplace remove code-review ``` - 工作階段內 slash 版(等價):把 `claude plugin` 換成 `/plugin`。 @@ -77,17 +77,17 @@ claude plugin marketplace remove jsc-plugins ```bash # 安裝 codex plugin marketplace add https://gitea.jsc.idv.tw/plugins/code-review.git -codex plugin add jsc@jsc-plugins +codex plugin add jsc@code-review # 更新(重新抓取 marketplace 的 git 快照) -codex plugin marketplace upgrade jsc-plugins +codex plugin marketplace upgrade code-review # 移除 -codex plugin remove jsc@jsc-plugins -codex plugin marketplace remove jsc-plugins +codex plugin remove jsc@code-review +codex plugin marketplace remove code-review ``` -- 安裝 token `jsc@jsc-plugins` = plugin 名(`.codex-plugin/plugin.json` 的 `name`)@ marketplace 名(`.agents/plugins/marketplace.json` 的 `name`)。 +- 安裝 token `jsc@code-review` = plugin 名(`.codex-plugin/plugin.json` 的 `name`)@ marketplace 名(`.agents/plugins/marketplace.json` 的 `name`)。 - 本 repo 的 Codex marketplace 以 `url` 來源指向自己,故 Codex **一律從 gitea 安裝**(需先 push);安裝後重啟 Codex。 - **呼叫**:`$`(例 `$code-review`),或用 `/skills` 選單。 @@ -187,7 +187,7 @@ rm -rf ~/.config/opencode/skills/code-review 4. 手動把這個 skill 補進上方「Skills 目錄」區塊。 5. **bump 版本並 push**:四家都以 git 內容/版本判斷更新,請把 `.claude-plugin/plugin.json`、`.codex-plugin/plugin.json`、`plugin.json` 三個 manifest 的 `version` 一起 bump,commit 後 push 到 gitea。 6. 讓各助理更新: - - Claude:`claude plugin update jsc@jsc-plugins` - - Codex:`codex plugin marketplace upgrade jsc-plugins` + - Claude:`claude plugin update jsc@code-review` + - Codex:`codex plugin marketplace upgrade code-review` - Antigravity:`git -C ~/jsc-plugin pull && agy plugin uninstall jsc && agy plugin install ~/jsc-plugin` - OpenCode:`git pull` 後重新複製 `skills/`