Merge pull request 'feat(log): 匯入 jsc-log 技能組並統一 marketplace 為 jsc' (#2) from develop into master
Reviewed-on: #2 Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
This commit was merged in pull request #2.
This commit is contained in:
@@ -1,11 +1,74 @@
|
|||||||
{
|
{
|
||||||
"name": "template",
|
"name": "jsc",
|
||||||
"plugins": [
|
"plugins": [
|
||||||
{
|
{
|
||||||
"name": "jsc-template",
|
"name": "jsc-ask",
|
||||||
"source": {
|
"source": {
|
||||||
"source": "url",
|
"source": "url",
|
||||||
"url": "https://gitea.jsc.idv.tw/plugins/template.git"
|
"url": "https://gitea.jsc.idv.tw/plugins/ask.git"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jsc-cli",
|
||||||
|
"source": {
|
||||||
|
"source": "url",
|
||||||
|
"url": "https://gitea.jsc.idv.tw/plugins/cli.git"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jsc-git",
|
||||||
|
"source": {
|
||||||
|
"source": "url",
|
||||||
|
"url": "https://gitea.jsc.idv.tw/plugins/git.git"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jsc-gitea",
|
||||||
|
"source": {
|
||||||
|
"source": "url",
|
||||||
|
"url": "https://gitea.jsc.idv.tw/plugins/gitea.git"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jsc-hooks",
|
||||||
|
"source": {
|
||||||
|
"source": "url",
|
||||||
|
"url": "https://gitea.jsc.idv.tw/plugins/hooks.git"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jsc-log",
|
||||||
|
"source": {
|
||||||
|
"source": "url",
|
||||||
|
"url": "https://gitea.jsc.idv.tw/plugins/log.git"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jsc-meta",
|
||||||
|
"source": {
|
||||||
|
"source": "url",
|
||||||
|
"url": "https://gitea.jsc.idv.tw/plugins/meta.git"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jsc-pkg",
|
||||||
|
"source": {
|
||||||
|
"source": "url",
|
||||||
|
"url": "https://gitea.jsc.idv.tw/plugins/pkg.git"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jsc-review",
|
||||||
|
"source": {
|
||||||
|
"source": "url",
|
||||||
|
"url": "https://gitea.jsc.idv.tw/plugins/review.git"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jsc-sdlc",
|
||||||
|
"source": {
|
||||||
|
"source": "url",
|
||||||
|
"url": "https://gitea.jsc.idv.tw/plugins/sdlc.git"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,14 +1,89 @@
|
|||||||
{
|
{
|
||||||
"name": "template",
|
"name": "jsc",
|
||||||
"description": "JSC 跨 AI 助理共用 skills 的 Claude Code marketplace。",
|
"description": "jsc 跨 AI 助理技能組的統一 marketplace(claude / codex / copilot / antigravity / kiro)。",
|
||||||
"owner": {
|
"owner": {
|
||||||
"name": "JSC"
|
"name": "JSC"
|
||||||
},
|
},
|
||||||
"plugins": [
|
"plugins": [
|
||||||
{
|
{
|
||||||
"name": "jsc-template",
|
"name": "jsc-ask",
|
||||||
"source": "./",
|
"source": {
|
||||||
"description": "JSC 共用 skills(跨 AI 助理)"
|
"source": "url",
|
||||||
|
"url": "https://gitea.jsc.idv.tw/plugins/ask.git"
|
||||||
|
},
|
||||||
|
"description": "決策樹問詢與問詢紀錄(QUESTION_* wiki 頁)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jsc-cli",
|
||||||
|
"source": {
|
||||||
|
"source": "url",
|
||||||
|
"url": "https://gitea.jsc.idv.tw/plugins/cli.git"
|
||||||
|
},
|
||||||
|
"description": "CLI 偵測、模型能力標籤與技能庫批次部署"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jsc-git",
|
||||||
|
"source": {
|
||||||
|
"source": "url",
|
||||||
|
"url": "https://gitea.jsc.idv.tw/plugins/git.git"
|
||||||
|
},
|
||||||
|
"description": "Commit 分組認可與 Push Request 建立"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jsc-gitea",
|
||||||
|
"source": {
|
||||||
|
"source": "url",
|
||||||
|
"url": "https://gitea.jsc.idv.tw/plugins/gitea.git"
|
||||||
|
},
|
||||||
|
"description": "Gitea API 工具、Wiki 讀寫與存取庫批次同步"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jsc-hooks",
|
||||||
|
"source": {
|
||||||
|
"source": "url",
|
||||||
|
"url": "https://gitea.jsc.idv.tw/plugins/hooks.git"
|
||||||
|
},
|
||||||
|
"description": "跨 CLI hooks:STE100 語言強制、工時計時、技能用量記錄"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jsc-log",
|
||||||
|
"source": {
|
||||||
|
"source": "url",
|
||||||
|
"url": "https://gitea.jsc.idv.tw/plugins/log.git"
|
||||||
|
},
|
||||||
|
"description": "工作日誌(LOG_* wiki 頁)與技能使用統計"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jsc-meta",
|
||||||
|
"source": {
|
||||||
|
"source": "url",
|
||||||
|
"url": "https://gitea.jsc.idv.tw/plugins/meta.git"
|
||||||
|
},
|
||||||
|
"description": "技能組自我管理:新建/更新/刪除技能與技能準則"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jsc-pkg",
|
||||||
|
"source": {
|
||||||
|
"source": "url",
|
||||||
|
"url": "https://gitea.jsc.idv.tw/plugins/pkg.git"
|
||||||
|
},
|
||||||
|
"description": "套件批次更新(nodejs/python/dotnet),失敗還原"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jsc-review",
|
||||||
|
"source": {
|
||||||
|
"source": "url",
|
||||||
|
"url": "https://gitea.jsc.idv.tw/plugins/review.git"
|
||||||
|
},
|
||||||
|
"description": "程式碼審查:Refactoring 壞味道六組 + 註解規範 + 淺模組"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jsc-sdlc",
|
||||||
|
"source": {
|
||||||
|
"source": "url",
|
||||||
|
"url": "https://gitea.jsc.idv.tw/plugins/sdlc.git"
|
||||||
|
},
|
||||||
|
"description": "開發生命週期:規劃/分析/實作/維護(wiki 追蹤)"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,17 @@
|
|||||||
{
|
{
|
||||||
"name": "jsc-template",
|
"name": "jsc-log",
|
||||||
"version": "0.0.3",
|
"version": "0.0.1",
|
||||||
"description": "JSC 跨 AI 助理共用 plugin 模板(Claude Code / Codex / Antigravity / OpenCode)。所有 skills 以 SKILL.md 為共通標準,於 Claude Code 以 /jsc-template: 前綴呼叫。",
|
"description": "工作日誌(LOG_* wiki 頁)與技能使用統計",
|
||||||
"skills": "./skills",
|
"skills": "./skills",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "JSC"
|
"name": "JSC"
|
||||||
},
|
},
|
||||||
"homepage": "https://gitea.jsc.idv.tw/plugins/template",
|
"homepage": "https://gitea.jsc.idv.tw/plugins/log",
|
||||||
"repository": "https://gitea.jsc.idv.tw/plugins/template.git",
|
"repository": "https://gitea.jsc.idv.tw/plugins/log.git",
|
||||||
"keywords": ["template", "skills", "cross-tool", "jsc"]
|
"keywords": [
|
||||||
|
"jsc",
|
||||||
|
"log",
|
||||||
|
"skills",
|
||||||
|
"cross-tool"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "jsc-template",
|
"name": "jsc-log",
|
||||||
"version": "0.0.3",
|
"version": "0.0.1",
|
||||||
"description": "JSC 跨 AI 助理共用 plugin 模板。所有 skills 以 SKILL.md 為共通標準。",
|
"description": "工作日誌(LOG_* wiki 頁)與技能使用統計",
|
||||||
"skills": "./skills"
|
"skills": "./skills"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
# jsc-template — 共用 Skills(跨 AI 助理)
|
# jsc-log — 給 AI 助理的指引
|
||||||
|
|
||||||
本 repo 是一組以 **Agent Skills(`SKILL.md`)** 標準撰寫的共用 skills,可同時被 Claude Code、Codex、Antigravity、OpenCode 使用。
|
本 repo 是 jsc 技能組的 `log` domain(工作日誌與技能使用統計,寫入 LOG_* wiki 頁),Claude Code / Codex / Copilot / Antigravity / Kiro 都能安裝使用。
|
||||||
|
|
||||||
## 給 AI 助理的指引
|
## 規則
|
||||||
|
|
||||||
- 所有可用的 skills 位於本 repo 的 `skills/<name>/SKILL.md`。
|
1. 所有交談與輸出內容使用 STE100 繁體中文,帶擬人台灣感:短句、一句一指令、台灣用語、全形標點、去 AI 味、直接講重點。完整規則的唯一來源:`plugins/meta` 的 `references/ste100.md`。
|
||||||
- 在處理任務前,先比對使用者需求與各 skill `SKILL.md` frontmatter 的 `description`,若相符請載入並依其步驟執行。
|
2. 技能位於 `skills/{name}/SKILL.md`;處理任務前先比對需求與各技能的 `description`,相符就載入並依其步驟執行。
|
||||||
- **呼叫慣例**:在 Claude Code 與 Antigravity 中,這些 skill 以 `/jsc-template:<name>` 呼叫;Codex 以 `$<name>`、OpenCode 由模型依描述自動觸發 — 兩者沒有 `/jsc-template:` 前綴,不需強制加。
|
3. 技能準則的唯一來源:`plugins/meta` 存取庫的 `references/guidelines.md`。
|
||||||
- 完整清單與每個 skill 的用途,請見 `README.md` 的「Skills 目錄」。
|
4. 所有 hook 只放在 `jsc-hooks`;gitea 操作一律經由 `jsc-gitea` 的 `tools/gitea.sh`;問使用者一律依 `jsc-ask:ask` 的決策樹規則。
|
||||||
|
5. 主 agent 不需要處理細節的流程,一律建立 sub agent 處理。
|
||||||
|
|
||||||
## 慣例
|
## 呼叫慣例
|
||||||
|
|
||||||
- 新增 skill 一律放在 `skills/<name>/`,且 `<name>` 使用小寫與連字號。
|
Claude Code / Antigravity:`/jsc-log:{name}`;Codex:`$name`;Copilot / Kiro / OpenCode:描述需求自動觸發。
|
||||||
- `description` 要寫清楚觸發條件(何時用、何時不用),這是跨助理自動載入的唯一依據。
|
|
||||||
|
|||||||
@@ -1,228 +1,55 @@
|
|||||||
# jsc-template — 跨 AI 助理 Plugin 模板
|
# jsc-log — 工作日誌與統計
|
||||||
|
|
||||||
一個可同時被 **Claude Code、Codex、Antigravity、OpenCode、GitHub Copilot** 安裝的 plugin 模板。
|
jsc 技能組的 log domain:工作完成後把十項資訊寫入 wiki 日誌頁(`LOG_{yyyyMM}_W{週數}`,週數依週五日期計算),並統計技能使用次數與呼叫鏈次數。
|
||||||
核心是以 [Agent Skills(`SKILL.md`)](https://agentskills.io) 標準撰寫的共用 skills(唯一真實來源放在 `skills/`),
|
|
||||||
搭配各助理各自的 plugin manifest,讓**同一個 repo** 可用各家**原生 plugin CLI** 安裝。
|
|
||||||
在 Claude Code 與 Antigravity 中,skill 以 **`/jsc-template:` 前綴**呼叫(例如 `/jsc-template:hello`)。
|
|
||||||
|
|
||||||
---
|
## 安裝、更新、移除
|
||||||
|
|
||||||
## 前綴與呼叫方式
|
Marketplace 統一為 `jsc`(https://gitea.jsc.idv.tw/plugins/jsc.git),安裝 token 為 `jsc-log@jsc`。每個指令一行:
|
||||||
|
|
||||||
| 助理 | 安裝方式 | 呼叫 | `/jsc-template:` 前綴 |
|
| CLI | 安裝 | 更新 | 移除 |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| Claude Code | `claude plugin`(marketplace) | `/jsc-template:<name>` 或自動觸發 | ✅ |
|
| claude | `claude plugin marketplace add https://gitea.jsc.idv.tw/plugins/jsc.git && claude plugin install jsc-log@jsc` | `claude plugin marketplace update jsc && claude plugin update jsc-log@jsc` | `claude plugin uninstall jsc-log@jsc` |
|
||||||
| Codex | `codex plugin`(marketplace) | `$<name>` 或 `/skills` 選單 | ❌(用 `$name`) |
|
| codex | `codex plugin marketplace add https://gitea.jsc.idv.tw/plugins/jsc.git && codex plugin add jsc-log@jsc` | `codex plugin marketplace upgrade jsc` | `codex plugin remove jsc-log@jsc` |
|
||||||
| Antigravity | `agy plugin install` | `/jsc-template:<name>` 或自動觸發 | ✅ |
|
| copilot | `copilot plugin marketplace add https://gitea.jsc.idv.tw/plugins/jsc.git && copilot plugin install jsc-log@jsc` | `copilot plugin marketplace update jsc && copilot plugin update jsc-log@jsc` | `copilot plugin uninstall jsc-log@jsc` |
|
||||||
| OpenCode | skills 目錄(複製/clone) | 描述需求自動觸發 | ❌(依名稱) |
|
| antigravity | `git clone https://gitea.jsc.idv.tw/plugins/log.git ~/plugins/log && agy plugin install ~/plugins/log` | `git -C ~/plugins/log pull && agy plugin uninstall jsc-log && agy plugin install ~/plugins/log` | `agy plugin uninstall jsc-log` |
|
||||||
| GitHub Copilot CLI | `copilot plugin`(marketplace) | 自然語言或 plugin skills | ❌(無 `/jsc-template:` 前綴) |
|
| kiro | `kiro-cli plugin marketplace add https://gitea.jsc.idv.tw/plugins/jsc.git && kiro-cli plugin install jsc-log@jsc` | `kiro-cli plugin marketplace update jsc && kiro-cli plugin update jsc-log@jsc` | `kiro-cli plugin uninstall jsc-log@jsc` |
|
||||||
|
|
||||||
> Codex 不支援自訂前綴(skill 以 `$name` 呼叫);OpenCode 由模型依描述自動呼叫;Copilot CLI 透過原生 plugin 安裝後以自然語言或 plugin skills 使用。三者皆**不強制**前綴。
|
> antigravity 不支援 gitea URL 安裝,改用本地 clone 路徑。批次操作五個 CLI:使用 `/jsc-cli:deploy`。
|
||||||
|
|
||||||
---
|
## 工具
|
||||||
|
|
||||||
## 目錄結構
|
| 工具 | 用途 |
|
||||||
|
| --- | --- |
|
||||||
同一個 repo 同時帶四種 manifest,彼此以路徑隔離、互不干擾;各助理都讀同一份 `skills/`。
|
| `tools/usage-stats.sh` | 聚合 `$JSC_HOME/usage/*.jsonl`:`skills` 列技能使用次數、`chains` 列呼叫鏈次數(皆降冪),`--cli <name>` 過濾 |
|
||||||
|
|
||||||
```
|
|
||||||
template/
|
|
||||||
├── .claude-plugin/
|
|
||||||
│ ├── plugin.json # Claude 外掛定義(name: "jsc-template")
|
|
||||||
│ └── marketplace.json # Claude marketplace(name: "template",source 指向本 repo)
|
|
||||||
├── .codex-plugin/
|
|
||||||
│ └── plugin.json # Codex 外掛定義(name: "jsc-template",skills: "./skills")
|
|
||||||
├── .agents/plugins/
|
|
||||||
│ └── marketplace.json # Codex marketplace(name: "template",url source 指向本 repo)
|
|
||||||
├── plugin.json # Antigravity 外掛定義(name: "jsc-template",skills: "./skills/")
|
|
||||||
├── skills/ # ★ 唯一真實來源:所有 skills
|
|
||||||
│ └── hello/SKILL.md
|
|
||||||
├── AGENTS.md # 跨助理共用指引
|
|
||||||
└── README.md
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 安裝 / 更新 / 移除(各助理)
|
|
||||||
|
|
||||||
> 指令中的 repo 網址換成你的:`https://gitea.jsc.idv.tw/plugins/template.git`
|
|
||||||
>
|
|
||||||
> **Claude / Codex 從 git URL 安裝(會 clone 遠端),請先把本 repo `push` 到 gitea。**
|
|
||||||
> **Antigravity 的 `agy plugin install <url>` 目前只支援 github.com**;gitea 請改用「clone + 本地路徑」(見 Antigravity 節)。
|
|
||||||
> 本機/離線:Claude 可用本地路徑加 marketplace;Antigravity 用本地路徑安裝。
|
|
||||||
|
|
||||||
> **⚠ 從 0.0.1 升上來的人請先移除再安裝。** 0.0.2 起 marketplace 名由 `jsc-plugins` 改為 `template`
|
|
||||||
> (舊名與 `jsc-persona` 的 marketplace 撞名)。各助理以 `<plugin 名>@<marketplace 名>` 當安裝識別鍵,
|
|
||||||
> 改名後是兩筆獨立條目,**不能用 update 遷移**:
|
|
||||||
>
|
|
||||||
> ```bash
|
|
||||||
> claude plugin uninstall jsc-template@jsc-plugins
|
|
||||||
> claude plugin marketplace remove jsc-plugins # 若你沒有裝 jsc-persona 才移除,它也用這個名字
|
|
||||||
> claude plugin marketplace add https://gitea.jsc.idv.tw/plugins/template.git
|
|
||||||
> claude plugin install jsc-template@template
|
|
||||||
> ```
|
|
||||||
>
|
|
||||||
> 移除後記得清掉 `~/.claude/settings.json` 裡 `enabledPlugins` 的舊鍵 `jsc-template@jsc-plugins`,
|
|
||||||
> 並重開工作階段。Codex/Copilot 同理(`remove`/`uninstall` 後重新 `add`+`install`)。
|
|
||||||
|
|
||||||
### Claude Code
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 安裝
|
|
||||||
claude plugin marketplace add https://gitea.jsc.idv.tw/plugins/template.git
|
|
||||||
claude plugin install jsc-template@template
|
|
||||||
|
|
||||||
# 更新
|
|
||||||
claude plugin marketplace update template
|
|
||||||
claude plugin update jsc-template@template
|
|
||||||
|
|
||||||
# 移除
|
|
||||||
claude plugin uninstall jsc-template@template
|
|
||||||
claude plugin marketplace remove template
|
|
||||||
```
|
|
||||||
|
|
||||||
- 工作階段內 slash 版(等價):把 `claude plugin` 換成 `/plugin`。
|
|
||||||
- 本機開發(免 push):`claude plugin marketplace add C:\Users\h3285\source\repos.plugins\template`(本地路徑)後再 install。
|
|
||||||
- **呼叫**:`/jsc-template:<name>`(例 `/jsc-template:hello`)。
|
|
||||||
|
|
||||||
### Codex
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 安裝
|
|
||||||
codex plugin marketplace add https://gitea.jsc.idv.tw/plugins/template.git
|
|
||||||
codex plugin add jsc-template@template
|
|
||||||
|
|
||||||
# 更新(重新抓取 marketplace 的 git 快照)
|
|
||||||
codex plugin marketplace upgrade template
|
|
||||||
|
|
||||||
# 移除
|
|
||||||
codex plugin remove jsc-template@template
|
|
||||||
codex plugin marketplace remove template
|
|
||||||
```
|
|
||||||
|
|
||||||
- 安裝 token `jsc-template@template` = plugin 名(`.codex-plugin/plugin.json` 的 `name`)@ marketplace 名(`.agents/plugins/marketplace.json` 的 `name`)。
|
|
||||||
- 本 repo 的 Codex marketplace 以 `url` 來源指向自己,故 Codex **一律從 gitea 安裝**(需先 push);安裝後重啟 Codex。
|
|
||||||
- **呼叫**:`$<name>`(例 `$hello`),或用 `/skills` 選單。
|
|
||||||
|
|
||||||
### Antigravity(`agy`)
|
|
||||||
|
|
||||||
> `agy plugin install <url>` 目前**只支援 github.com**;gitea 等自架 git 不支援 URL 安裝,請先 `git clone` 再用**本地路徑**安裝。
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 安裝:clone 後用本地路徑
|
|
||||||
git clone https://gitea.jsc.idv.tw/plugins/template.git ~/plugins/template
|
|
||||||
agy plugin install ~/plugins/template
|
|
||||||
|
|
||||||
# 更新(agy 無 update 子指令 → git pull 後重裝)
|
|
||||||
git -C ~/plugins/template pull
|
|
||||||
agy plugin uninstall jsc-template
|
|
||||||
agy plugin install ~/plugins/template
|
|
||||||
|
|
||||||
# 移除
|
|
||||||
agy plugin uninstall jsc-template
|
|
||||||
```
|
|
||||||
|
|
||||||
- 若把 skills 放到 GitHub,則可直接 `agy plugin install https://github.com/<owner>/<repo>`。
|
|
||||||
- 其他:`agy plugin list`、`agy plugin enable jsc-template` / `disable jsc-template`、`agy plugin validate <path>`。安裝後重啟工作階段。
|
|
||||||
- **呼叫**:`/jsc-template:<name>`(例 `/jsc-template:hello`)或依描述自動觸發。
|
|
||||||
|
|
||||||
### OpenCode
|
|
||||||
|
|
||||||
OpenCode 的「plugin」是 TypeScript/npm 套件,不適用於 skill 包;skills 改用**目錄安裝**。
|
|
||||||
OpenCode 會讀 `~/.config/opencode/skills/`(也會讀 `~/.claude/skills/`、`~/.agents/skills/`)。
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 安裝
|
|
||||||
git clone https://gitea.jsc.idv.tw/plugins/template.git ~/plugins/template
|
|
||||||
mkdir -p ~/.config/opencode/skills
|
|
||||||
cp -r ~/plugins/template/skills/* ~/.config/opencode/skills/
|
|
||||||
|
|
||||||
# 更新
|
|
||||||
git -C ~/plugins/template pull
|
|
||||||
cp -r ~/plugins/template/skills/* ~/.config/opencode/skills/
|
|
||||||
|
|
||||||
# 移除
|
|
||||||
rm -rf ~/.config/opencode/skills/hello
|
|
||||||
```
|
|
||||||
|
|
||||||
> **Windows PowerShell**:`cp -r A B` → `Copy-Item A B -Recurse -Force`、`rm -rf X` → `Remove-Item X -Recurse -Force`、`~` → `$HOME`。
|
|
||||||
|
|
||||||
- **呼叫**:直接描述需求,模型會依 skill 描述自動透過 skill 工具呼叫。
|
|
||||||
|
|
||||||
### GitHub Copilot CLI
|
|
||||||
|
|
||||||
Copilot CLI 支援與 Claude Code 類似的原生 plugin / marketplace 指令,可直接從 marketplace 安裝、更新與移除本 plugin。
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 安裝
|
|
||||||
copilot plugin marketplace add https://gitea.jsc.idv.tw/plugins/template.git
|
|
||||||
copilot plugin install jsc-template@template
|
|
||||||
|
|
||||||
# 更新
|
|
||||||
copilot plugin marketplace update template
|
|
||||||
copilot plugin update jsc-template@template
|
|
||||||
|
|
||||||
# 移除
|
|
||||||
copilot plugin uninstall jsc-template@template
|
|
||||||
copilot plugin marketplace remove template
|
|
||||||
```
|
|
||||||
|
|
||||||
- 安裝 token `jsc-template@template` = plugin 名(plugin manifest 的 `name`)@ marketplace 名。
|
|
||||||
- `copilot plugin marketplace add` 支援 GitHub `owner/repo`、git URL 與本地路徑;Gitea repo 可用上方 HTTPS URL。
|
|
||||||
- **呼叫**:在 Copilot CLI 中用自然語言描述需求,例如 `copilot -i "跑 hello 確認 plugin 裝好了"`。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 用 CLI 直接執行 skill(headless / 一次性)
|
|
||||||
|
|
||||||
安裝好之後,不必進互動介面,一行指令就能叫某個 skill 跑完並印出結果:
|
|
||||||
|
|
||||||
| 助理 | headless 指令 | 執行 `hello` skill |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| Claude Code | `claude -p "<prompt>"` | `claude -p "/jsc-template:hello"` |
|
|
||||||
| Codex | `codex exec "<prompt>"` | `codex exec '$hello'` |
|
|
||||||
| Antigravity | `agy -p "<prompt>"` | `agy -p "/jsc-template:hello"` |
|
|
||||||
| OpenCode | `opencode run "<message>"` | `opencode run "用 hello skill 打個招呼"` |
|
|
||||||
| GitHub Copilot CLI | `copilot -p "<message>"` | `copilot -p "用 hello skill 打個招呼"` |
|
|
||||||
|
|
||||||
- Claude / Antigravity 支援 `/jsc-template:` 前綴,直接 `-p "/jsc-template:<name>"` 即可。
|
|
||||||
- Codex 以 `$<name>` 觸發;在 shell 請用**單引號**避免 `$` 被展開:`codex exec '$hello'`。
|
|
||||||
- OpenCode 與 Copilot 沒有前綴,用自然語言描述需求;Copilot CLI 會讀取已安裝 plugin 提供的 skills。
|
|
||||||
- 帶引數就接在後面,例如 `claude -p "/jsc-template:hello 參數"`、`codex exec '$hello 參數'`。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Skills 目錄
|
## Skills 目錄
|
||||||
|
|
||||||
> 此區塊列出本 plugin 內含的所有 skills(名稱/描述/使用方法)。
|
呼叫方式:Claude / Antigravity `/jsc-log:{name}`;Codex `${name}`;Copilot / Kiro 描述需求自動觸發。
|
||||||
> 新增或修改 skill 後,請同步手動更新標記之間的內容。
|
|
||||||
|
|
||||||
<!-- JSC-SKILLS:START -->
|
<!-- JSC-SKILLS:START -->
|
||||||
|
|
||||||
### `hello`
|
### `worklog`
|
||||||
|
|
||||||
範例 skill,用來驗證 jsc plugin 是否安裝成功,也是新增 skill 的範本。當使用者輸入 hello、想測試 plugin、或想看 skill 模板長什麼樣子時觸發;回覆一句問候並簡述此 plugin 的用途。
|
工作完成後蒐集十項資訊(存取庫、分支、計畫連結、工作包連結、花費時間、token 用量、任務狀態、執行細節、困難與解決、PR 目標分支),套範本附加到 `LOG_{yyyyMM}_W{週數}` 與 `LOG_CONTENTS`。
|
||||||
|
|
||||||
- **Claude Code / Antigravity**:`/jsc-template:hello`
|
### `stats`
|
||||||
- **Codex**:`$hello`,或用 `/skills` 選單
|
|
||||||
- **OpenCode / GitHub Copilot CLI**:描述需求自動觸發
|
統計本技能組各技能的使用次數與呼叫鏈使用次數,資料來源為 jsc-hooks 記錄的 `skills.jsonl` 與 `chains.jsonl`。
|
||||||
|
|
||||||
<!-- JSC-SKILLS:END -->
|
<!-- JSC-SKILLS:END -->
|
||||||
|
|
||||||
---
|
## 範本
|
||||||
|
|
||||||
## 新增一個 skill
|
| 檔案 | 用途 |
|
||||||
|
| --- | --- |
|
||||||
|
| `templates/log-entry.md` | 單筆工作日誌(十欄位) |
|
||||||
|
| `templates/log-contents.md` | 日誌目錄 `LOG_CONTENTS` |
|
||||||
|
|
||||||
1. 複製範本:`cp -r skills/hello skills/<your-skill-name>`
|
## 環境變數
|
||||||
2. 編輯 `skills/<your-skill-name>/SKILL.md` 的 frontmatter:
|
|
||||||
- `name`:小寫、數字、連字號(`-`),最長 64 字元。**這就是 Claude Code / Antigravity 的 `/jsc-template:<name>`**。
|
Wiki 位置:`JSC_WIKI_REPO_LOG`,未設定退回 `JSC_WIKI_REPO`,再未設定就詢問(見 `jsc-gitea`)。
|
||||||
- `description`:第三人稱,寫清楚「何時用、何時不用」與觸發關鍵字 — 這是各助理自動載入的唯一依據。
|
|
||||||
3. 在內文寫下 skill 的具體步驟。
|
## 相關 domain
|
||||||
4. 手動把這個 skill 補進上方「Skills 目錄」區塊。
|
|
||||||
5. **bump 版本並 push**:各助理都以 git 內容/版本判斷更新,請把 `.claude-plugin/plugin.json`、`.codex-plugin/plugin.json`、`plugin.json` 三個 manifest 的 `version` 一起 bump,commit 後 push 到 gitea。
|
- [`jsc-hooks`](https://gitea.jsc.idv.tw/plugins/hooks):花費時間(`session-timer.sh report`)與用量資料來源
|
||||||
6. 讓各助理更新:
|
- [`jsc-gitea`](https://gitea.jsc.idv.tw/plugins/gitea):wiki 讀寫
|
||||||
- Claude:`claude plugin update jsc-template@template`
|
|
||||||
- Codex:`codex plugin marketplace upgrade template`
|
|
||||||
- Antigravity:`git -C ~/jsc-plugin pull && agy plugin uninstall jsc-template && agy plugin install ~/jsc-plugin`
|
|
||||||
- OpenCode:`git pull` 後重新複製 `skills/`
|
|
||||||
- Copilot:`copilot plugin marketplace update template && copilot plugin update jsc-template@template`
|
|
||||||
|
|||||||
+4
-4
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "jsc-template",
|
"name": "jsc-log",
|
||||||
"version": "0.0.3",
|
"version": "0.0.1",
|
||||||
"description": "JSC 跨 AI 助理共用 plugin 模板。所有 skills 以 SKILL.md 為共通標準;於 Antigravity 以 /jsc-template: 前綴呼叫。",
|
"description": "工作日誌(LOG_* wiki 頁)與技能使用統計",
|
||||||
"skills": "./skills/"
|
"skills": "./skills/"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,38 +0,0 @@
|
|||||||
---
|
|
||||||
name: hello
|
|
||||||
description: 範例 skill,用來驗證 jsc plugin 是否安裝成功,也是新增 skill 的範本。當使用者輸入 hello、想測試 plugin、或想看 skill 模板長什麼樣子時觸發;回覆一句問候並簡述此 plugin 的用途。
|
|
||||||
---
|
|
||||||
|
|
||||||
# hello(範例 skill)
|
|
||||||
|
|
||||||
這是 `jsc-template` plugin 的範例 skill。它有兩個用途:
|
|
||||||
|
|
||||||
1. **驗證安裝** — 跨各家 AI 助理確認 skill 已被正確載入。
|
|
||||||
2. **作為範本** — 複製這個資料夾即可新增一個新的 skill。
|
|
||||||
|
|
||||||
## 呼叫方式
|
|
||||||
|
|
||||||
| 助理 | 呼叫方式 |
|
|
||||||
| --- | --- |
|
|
||||||
| Claude Code | `/jsc-template:hello` |
|
|
||||||
| Antigravity | `/jsc-template:hello`,或描述需求自動觸發 |
|
|
||||||
| Codex | 在提示詞輸入 `$hello`,或用 `/skills` 選單 |
|
|
||||||
| OpenCode | 直接描述需求,模型會透過 skill 工具自動呼叫 |
|
|
||||||
| GitHub Copilot CLI | 直接描述需求,Copilot 會讀取已安裝 plugin 的 skills |
|
|
||||||
|
|
||||||
## 行為
|
|
||||||
|
|
||||||
當這個 skill 被觸發時:
|
|
||||||
|
|
||||||
1. 回覆「Hello from **jsc** 👋」。
|
|
||||||
2. 用一句話說明 `jsc-template` 是一個跨 AI 助理的共用 skill 集合。
|
|
||||||
3. 提示使用者可以在 README 的「Skills 目錄」查看所有可用的 skills。
|
|
||||||
|
|
||||||
## 如何以此為範本新增 skill
|
|
||||||
|
|
||||||
1. 複製 `skills/hello/` 為 `skills/<your-skill-name>/`。
|
|
||||||
2. 修改 `SKILL.md` 的 frontmatter:
|
|
||||||
- `name`:小寫、數字、連字號(`-`),最長 64 字元。**這個名稱會成為 Claude Code / Antigravity 的 `/jsc-template:<name>` 指令**。
|
|
||||||
- `description`:第三人稱,寫清楚「什麼時候該用、什麼時候不該用」與觸發關鍵字 — 各家助理靠這段文字決定是否自動載入。
|
|
||||||
3. 在內文寫下 skill 的具體步驟。
|
|
||||||
4. 手動把新 skill 補進 README 的「Skills 目錄」區塊。
|
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
name: stats
|
||||||
|
description: Report usage counts of every jsc skill and every skill call chain, aggregated by tools/usage-stats.sh from $JSC_HOME/usage/*.jsonl recorded by jsc-hooks. Supports --cli filtering. Use when the user asks how often skills or chains are used; not for token or time stats (see worklog).
|
||||||
|
---
|
||||||
|
|
||||||
|
# stats — skill and call-chain usage counts
|
||||||
|
|
||||||
|
Data is recorded continuously by `jsc-hooks/hooks/skill-usage.sh` under `$JSC_HOME/usage/` (default `~/.jsc/usage/`).
|
||||||
|
|
||||||
|
## Operations
|
||||||
|
|
||||||
|
| Count | Command | Output |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Uses per skill | `tools/usage-stats.sh skills` | `count<TAB>skill`, descending |
|
||||||
|
| Uses per call chain | `tools/usage-stats.sh chains` | `count<TAB>from -> to`, descending |
|
||||||
|
| Filter by CLI | Append `--cli claude` (or codex / copilot / antigravity / kiro) | Same as above |
|
||||||
|
|
||||||
|
## Reporting
|
||||||
|
|
||||||
|
1. Run the tool directly and present the output as a table.
|
||||||
|
2. When there is no data, explain that `jsc-hooks` must be installed and wired first via `jsc-hooks:hooks-install`.
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
---
|
||||||
|
name: worklog
|
||||||
|
description: After finishing a work package, collect ten facts (repo, branch, plan link, work package link, elapsed time from session-timer, token usage per CLI, status, details, difficulties, PR target) and append a templated entry to wiki LOG_{yyyyMM}_W{week} plus LOG_CONTENTS. Week number is derived from the Friday of the work week. Trigger at the end of implement or maintain; not for planning notes.
|
||||||
|
---
|
||||||
|
|
||||||
|
# worklog — work log
|
||||||
|
|
||||||
|
After work completes, collect the ten items below and append a `templates/log-entry.md` entry to the wiki log page. Collection and writing MUST run as a sub agent. The entry content is written in Traditional Chinese (STE100).
|
||||||
|
|
||||||
|
## Items to collect
|
||||||
|
|
||||||
|
| # | Item | Source |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| 1 | Repository name | Parse `{owner}/{repo}` from `git remote get-url origin` |
|
||||||
|
| 2 | Branch name | `git branch --show-current` |
|
||||||
|
| 3 | Plan name | Link to the plan page `[[PLAN_{...}]]` |
|
||||||
|
| 4 | Work package id | Link to the work package heading on the analyze page `[[ANALYZE_{...}#WP-xx]]` |
|
||||||
|
| 5 | Elapsed time | `jsc-hooks/hooks/session-timer.sh report {session_id}` (seconds; convert to h/m) |
|
||||||
|
| 6 | Token usage | See the table below; per-CLI methods differ. Fill `N/A` when unavailable |
|
||||||
|
| 7 | Task status | One of the literal values 「完成」、「部分完成」、「阻塞」 (with reason when blocked) |
|
||||||
|
| 8 | Details and outputs | Summarize what changed and which files or pages were produced |
|
||||||
|
| 9 | Difficulties and resolutions | One pair per line |
|
||||||
|
| 10 | PR target branch | Link to the PR page |
|
||||||
|
|
||||||
|
### How to get token usage
|
||||||
|
|
||||||
|
| CLI | Method |
|
||||||
|
| --- | --- |
|
||||||
|
| claude | Sum the `usage` fields in transcript JSONL (`~/.claude/projects/**/*.jsonl`), or read `usage` from `claude -p --output-format json` |
|
||||||
|
| codex | Token counters under `~/.codex/sessions/**`, or `/status` inside the session |
|
||||||
|
| copilot | `/usage` inside the session |
|
||||||
|
| antigravity | Value shown in the UI; `N/A` when unreadable |
|
||||||
|
| kiro | No public source; fill `N/A` |
|
||||||
|
|
||||||
|
## Target page and week number
|
||||||
|
|
||||||
|
- Page name: `LOG_{yyyyMM}_W{週數}`. Both values come from the Friday of the current work week:
|
||||||
|
```sh
|
||||||
|
dow=$(date +%u)
|
||||||
|
if [ "$dow" -ge 6 ]; then f=$(date -d 'last friday' +%Y%m%d); else f=$(date -d 'friday' +%Y%m%d); fi
|
||||||
|
yyyyMM=$(printf '%s' "$f" | cut -c1-6)
|
||||||
|
W=$(( ( $(printf '%s' "$f" | cut -c7-8 | sed 's/^0//') - 1 ) / 7 + 1 )) # which Friday of the month
|
||||||
|
```
|
||||||
|
- Read the page via `jsc-gitea:wiki`. If it does not exist, create it with the structure described in `templates/log-contents.md`; otherwise APPEND the new entry at the end.
|
||||||
|
- Update `LOG_CONTENTS` in the same pass (apply `templates/log-contents.md`; add the week's row if missing).
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# 日誌目錄
|
||||||
|
|
||||||
|
> 由 `jsc-log:worklog` 維護。每個日誌頁一列;週數 = 該週五是當月第幾個週五。
|
||||||
|
|
||||||
|
| 日誌頁 | 週五日期 | 條目數 | 最後更新 |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| [[LOG_{yyyyMM}_W{週數}]] | {yyyy-MM-dd} | {n} | {yyyy-MM-dd HH:mm} |
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# 工作日誌頁 — LOG_{yyyyMM}_W{週數}
|
||||||
|
|
||||||
|
> 由 `jsc-log:worklog` 維護。每完成一項工作附加一個條目在文末。
|
||||||
|
> `{yyyyMM}` 與 `{週數}` 取自本工作週的週五:週數 = 該週五是當月第幾個週五。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## {yyyy-MM-dd HH:mm} {工作摘要一句話}
|
||||||
|
|
||||||
|
| 欄位 | 內容 |
|
||||||
|
| --- | --- |
|
||||||
|
| 存取庫名稱 | {owner}/{repo} |
|
||||||
|
| 分支名稱 | {branch} |
|
||||||
|
| 計畫名稱 | [[PLAN_{yyyyMMdd}_{HHmmss}_{HASH}|{計畫名稱}]] |
|
||||||
|
| 工作包編號 | [[ANALYZE_{yyyyMMdd}_{HHmmss}_{HASH}#wp-{編號}|WP-{編號} {工作包標題}]] |
|
||||||
|
| 花費時間 | {h} 小時 {m} 分(session-timer report) |
|
||||||
|
| token 用量 | {CLI}: {input}/{output}(不可得填 N/A) |
|
||||||
|
| 任務狀態 | 完成、部分完成、阻塞({原因})三選一 |
|
||||||
|
| PR 目標分支 | [{base 分支}]({PR URL}) |
|
||||||
|
|
||||||
|
### 執行細節與產出
|
||||||
|
|
||||||
|
- {做了什麼、產出哪些檔案或頁面}
|
||||||
|
|
||||||
|
### 遇到的困難與解決方式
|
||||||
|
|
||||||
|
- {困難} → {解決方式}
|
||||||
Executable
+32
@@ -0,0 +1,32 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
# usage-stats.sh — 聚合 jsc-hooks 記錄的技能用量。
|
||||||
|
# 用法:
|
||||||
|
# usage-stats.sh skills [--cli <name>] # 每個 skill 的使用次數(降冪)
|
||||||
|
# usage-stats.sh chains [--cli <name>] # 每條 from -> to 呼叫鏈的次數(降冪)
|
||||||
|
# 資料: $JSC_HOME/usage/skills.jsonl、chains.jsonl(預設 $HOME/.jsc)
|
||||||
|
set -u
|
||||||
|
JSC_HOME="${JSC_HOME:-$HOME/.jsc}"
|
||||||
|
cmd="${1:?usage: usage-stats.sh skills|chains [--cli <name>]}"; shift
|
||||||
|
cli=""
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
case "$1" in
|
||||||
|
--cli) cli="${2:?--cli needs a value}"; shift 2 ;;
|
||||||
|
*) shift ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
by_cli() { # 依 --cli 過濾;未指定就原樣輸出
|
||||||
|
if [ -n "$cli" ]; then grep "\"cli\":\"$cli\""; else cat; fi
|
||||||
|
}
|
||||||
|
rank() { sort | uniq -c | sort -rn | sed 's/^ *\([0-9][0-9]*\) /\1\t/'; }
|
||||||
|
|
||||||
|
case "$cmd" in
|
||||||
|
skills)
|
||||||
|
f="$JSC_HOME/usage/skills.jsonl"; [ -f "$f" ] || exit 0
|
||||||
|
by_cli < "$f" | sed -n 's/.*"skill":"\([^"]*\)".*/\1/p' | rank ;;
|
||||||
|
chains)
|
||||||
|
f="$JSC_HOME/usage/chains.jsonl"; [ -f "$f" ] || exit 0
|
||||||
|
by_cli < "$f" | sed -n 's/.*"from":"\([^"]*\)".*"to":"\([^"]*\)".*/\1 -> \2/p' | rank ;;
|
||||||
|
*)
|
||||||
|
echo "unknown command: $cmd" >&2; exit 2 ;;
|
||||||
|
esac
|
||||||
Reference in New Issue
Block a user