@@ -25,14 +25,14 @@
同一個 repo 同時帶四種 manifest,彼此以路徑隔離、互不干擾;四家都讀同一份 `skills/` 。
```
template /
generic /
├── .claude-plugin/
│ ├── plugin.json # Claude 外掛定義(name: "jsc")
│ └── marketplace.json # Claude marketplace( name: "jsc-plugins ", source 指向本 repo)
│ └── marketplace.json # Claude marketplace( name: "generic ", 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: "generic ", url source 指向本 repo)
├── plugin.json # Antigravity 外掛定義(name: "jsc", skills: "./skills/")
├── skills/ # ★ 唯一真實來源:所有 skills
│ └── spec-*/SKILL.md # 共用規範 skills(一規範一目錄)
@@ -44,7 +44,7 @@ template/
## 安裝 / 更新 / 移除(各家原生 plugin CLI)
> 指令中的 repo 網址換成你的:`https://gitea.jsc.idv.tw/plugins/template .git`
> 指令中的 repo 網址換成你的:`https://gitea.jsc.idv.tw/plugins/generic .git`
>
> **Claude / Codex 從 git URL 安裝(會 clone 遠端),請先把本 repo `push` 到 gitea。**
> **Antigravity 的 `agy plugin install <url>` 目前只支援 github.com**; gitea 請改用「clone + 本地路徑」(見 Antigravity 節)。
@@ -54,38 +54,38 @@ template/
``` bash
# 安裝
claude plugin marketplace add https://gitea.jsc.idv.tw/plugins/template .git
claude plugin install jsc@template
claude plugin marketplace add https://gitea.jsc.idv.tw/plugins/generic .git
claude plugin install jsc@generic
# 更新
claude plugin marketplace update template
claude plugin update jsc@template
claude plugin marketplace update generic
claude plugin update jsc@generic
# 移除
claude plugin uninstall jsc@template
claude plugin marketplace remove template
claude plugin uninstall jsc@generic
claude plugin marketplace remove generic
```
- 工作階段內 slash 版(等價):把 `claude plugin` 換成 `/plugin` 。
- 本機開發(免 push):`claude plugin marketplace add C:\Users\h3285\source\repos.plugins\template ` (本地路徑)後再 install。
- 本機開發(免 push):`claude plugin marketplace add C:\Users\h3285\source\repos.plugins\generic ` (本地路徑)後再 install。
- **呼叫**: `/jsc:<name>` (例 `/jsc:spec-output` )。
### Codex
``` bash
# 安裝
codex plugin marketplace add https://gitea.jsc.idv.tw/plugins/template .git
codex plugin add jsc@template
codex plugin marketplace add https://gitea.jsc.idv.tw/plugins/generic .git
codex plugin add jsc@generic
# 更新(重新抓取 marketplace 的 git 快照)
codex plugin marketplace upgrade template
codex plugin marketplace upgrade generic
# 移除
codex plugin remove jsc@template
codex plugin marketplace remove template
codex plugin remove jsc@generic
codex plugin marketplace remove generic
```
- 安裝 token `jsc@template ` = plugin 名(`.codex-plugin/plugin.json` 的 `name` ) @ marketplace 名(`.agents/plugins/marketplace.json` 的 `name` )。
- 安裝 token `jsc@generic ` = plugin 名(`.codex-plugin/plugin.json` 的 `name` ) @ marketplace 名(`.agents/plugins/marketplace.json` 的 `name` )。
- 本 repo 的 Codex marketplace 以 `url` 來源指向自己,故 Codex **一律從 gitea 安裝 ** (需先 push);安裝後重啟 Codex。
- **呼叫**: `$<name>` (例 `$spec-output` ),或用 `/skills` 選單。
@@ -95,13 +95,13 @@ codex plugin marketplace remove template
``` bash
# 安裝:clone 後用本地路徑
git clone https://gitea.jsc.idv.tw/plugins/template .git ~/plugins/template
agy plugin install ~/plugins/template
git clone https://gitea.jsc.idv.tw/plugins/generic .git ~/plugins/generic
agy plugin install ~/plugins/generic
# 更新(agy 無 update 子指令 → git pull 後重裝)
git -C ~/plugins/template pull
git -C ~/plugins/generic pull
agy plugin uninstall jsc
agy plugin install ~/plugins/template
agy plugin install ~/plugins/generic
# 移除
agy plugin uninstall jsc
@@ -118,13 +118,13 @@ OpenCode 會讀 `~/.config/opencode/skills/`(也會讀 `~/.claude/skills/`、`
``` bash
# 安裝
git clone https://gitea.jsc.idv.tw/plugins/template .git ~/plugins/template
git clone https://gitea.jsc.idv.tw/plugins/generic .git ~/plugins/generic
mkdir -p ~/.config/opencode/skills
cp -r ~/plugins/template /skills/* ~/.config/opencode/skills/
cp -r ~/plugins/generic /skills/* ~/.config/opencode/skills/
# 更新
git -C ~/plugins/template pull
cp -r ~/plugins/template /skills/* ~/.config/opencode/skills/
git -C ~/plugins/generic pull
cp -r ~/plugins/generic /skills/* ~/.config/opencode/skills/
# 移除
rm -rf ~/.config/opencode/skills/spec-*
@@ -184,7 +184,7 @@ rm -rf ~/.config/opencode/skills/spec-*
## 新增一個 skill
1. 複製範本:`cp -r skills/spec-output skills/<your-skill-name>` (或從 template repo 的 `skills/hello` 複製)
1. 複製既有 skill 作 範本:`cp -r skills/spec-output skills/<your-skill-name>`
2. 編輯 `skills/<your-skill-name>/SKILL.md` 的 frontmatter:
- `name` :小寫、數字、連字號(`-` ),最長 64 字元。**這就是 Claude Code / Antigravity 的 `/jsc:<name>` **。
- `description` :第三人稱,寫清楚「何時用、何時不用」與觸發關鍵字 — 這是各助理自動載入的唯一依據。
@@ -192,7 +192,7 @@ rm -rf ~/.config/opencode/skills/spec-*
4. 手動把這個 skill 補進上方「Skills 目錄」區塊。
5. **bump 版本並 push ** :四家都以 git 內容/版本判斷更新,請把 `.claude-plugin/plugin.json` 、`.codex-plugin/plugin.json` 、`plugin.json` 三個 manifest 的 `version` 一起 bump(規則見 `skills/spec-plugin-version/` ),commit 後 push 到 gitea。
6. 讓各助理更新:
- Claude: `claude plugin update jsc@jsc-plugins `
- Codex: `codex plugin marketplace upgrade jsc-plugins `
- Claude: `claude plugin update jsc@generic `
- Codex: `codex plugin marketplace upgrade generic `
- Antigravity: `git -C ~/jsc-plugin pull && agy plugin uninstall jsc && agy plugin install ~/jsc-plugin`
- OpenCode: `git pull` 後重新複製 `skills/`