Merge pull request 'feat(meta): 匯入 jsc-meta 技能組並統一 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": [
|
||||
{
|
||||
"name": "jsc-template",
|
||||
"name": "jsc-ask",
|
||||
"source": {
|
||||
"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",
|
||||
"description": "JSC 跨 AI 助理共用 skills 的 Claude Code marketplace。",
|
||||
"name": "jsc",
|
||||
"description": "jsc 跨 AI 助理技能組的統一 marketplace(claude / codex / copilot / antigravity / kiro)。",
|
||||
"owner": {
|
||||
"name": "JSC"
|
||||
},
|
||||
"plugins": [
|
||||
{
|
||||
"name": "jsc-template",
|
||||
"source": "./",
|
||||
"description": "JSC 共用 skills(跨 AI 助理)"
|
||||
"name": "jsc-ask",
|
||||
"source": {
|
||||
"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",
|
||||
"version": "0.0.3",
|
||||
"description": "JSC 跨 AI 助理共用 plugin 模板(Claude Code / Codex / Antigravity / OpenCode)。所有 skills 以 SKILL.md 為共通標準,於 Claude Code 以 /jsc-template: 前綴呼叫。",
|
||||
"name": "jsc-meta",
|
||||
"version": "0.0.1",
|
||||
"description": "技能組自我管理:新建/更新/刪除技能與技能準則",
|
||||
"skills": "./skills",
|
||||
"author": {
|
||||
"name": "JSC"
|
||||
},
|
||||
"homepage": "https://gitea.jsc.idv.tw/plugins/template",
|
||||
"repository": "https://gitea.jsc.idv.tw/plugins/template.git",
|
||||
"keywords": ["template", "skills", "cross-tool", "jsc"]
|
||||
"homepage": "https://gitea.jsc.idv.tw/plugins/meta",
|
||||
"repository": "https://gitea.jsc.idv.tw/plugins/meta.git",
|
||||
"keywords": [
|
||||
"jsc",
|
||||
"meta",
|
||||
"skills",
|
||||
"cross-tool"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jsc-template",
|
||||
"version": "0.0.3",
|
||||
"description": "JSC 跨 AI 助理共用 plugin 模板。所有 skills 以 SKILL.md 為共通標準。",
|
||||
"name": "jsc-meta",
|
||||
"version": "0.0.1",
|
||||
"description": "技能組自我管理:新建/更新/刪除技能與技能準則",
|
||||
"skills": "./skills"
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
# jsc-template — 共用 Skills(跨 AI 助理)
|
||||
# jsc-meta — 給 AI 助理的指引
|
||||
|
||||
本 repo 是一組以 **Agent Skills(`SKILL.md`)** 標準撰寫的共用 skills,可同時被 Claude Code、Codex、Antigravity、OpenCode 使用。
|
||||
本 repo 是 jsc 技能組的 `meta` domain(技能組自我管理:新建、更新、刪除技能與技能準則),Claude Code / Codex / Copilot / Antigravity / Kiro 都能安裝使用。
|
||||
|
||||
## 給 AI 助理的指引
|
||||
## 規則
|
||||
|
||||
- 所有可用的 skills 位於本 repo 的 `skills/<name>/SKILL.md`。
|
||||
- 在處理任務前,先比對使用者需求與各 skill `SKILL.md` frontmatter 的 `description`,若相符請載入並依其步驟執行。
|
||||
- **呼叫慣例**:在 Claude Code 與 Antigravity 中,這些 skill 以 `/jsc-template:<name>` 呼叫;Codex 以 `$<name>`、OpenCode 由模型依描述自動觸發 — 兩者沒有 `/jsc-template:` 前綴,不需強制加。
|
||||
- 完整清單與每個 skill 的用途,請見 `README.md` 的「Skills 目錄」。
|
||||
1. 所有交談與輸出內容使用 STE100 繁體中文,帶擬人台灣感:短句、一句一指令、台灣用語、全形標點、去 AI 味、直接講重點。完整規則的唯一來源:`plugins/meta` 的 `references/ste100.md`。
|
||||
2. 技能位於 `skills/{name}/SKILL.md`;處理任務前先比對需求與各技能的 `description`,相符就載入並依其步驟執行。
|
||||
3. 技能準則的唯一來源:`plugins/meta` 存取庫的 `references/guidelines.md`。
|
||||
4. 所有 hook 只放在 `jsc-hooks`;gitea 操作一律經由 `jsc-gitea` 的 `tools/gitea.sh`;問使用者一律依 `jsc-ask:ask` 的決策樹規則。
|
||||
5. 主 agent 不需要處理細節的流程,一律建立 sub agent 處理。
|
||||
|
||||
## 慣例
|
||||
## 呼叫慣例
|
||||
|
||||
- 新增 skill 一律放在 `skills/<name>/`,且 `<name>` 使用小寫與連字號。
|
||||
- `description` 要寫清楚觸發條件(何時用、何時不用),這是跨助理自動載入的唯一依據。
|
||||
Claude Code / Antigravity:`/jsc-meta:{name}`;Codex:`$name`;Copilot / Kiro / OpenCode:描述需求自動觸發。
|
||||
|
||||
@@ -1,228 +1,54 @@
|
||||
# jsc-template — 跨 AI 助理 Plugin 模板
|
||||
# jsc-meta — 技能組自我管理
|
||||
|
||||
一個可同時被 **Claude Code、Codex、Antigravity、OpenCode、GitHub Copilot** 安裝的 plugin 模板。
|
||||
核心是以 [Agent Skills(`SKILL.md`)](https://agentskills.io) 標準撰寫的共用 skills(唯一真實來源放在 `skills/`),
|
||||
搭配各助理各自的 plugin manifest,讓**同一個 repo** 可用各家**原生 plugin CLI** 安裝。
|
||||
在 Claude Code 與 Antigravity 中,skill 以 **`/jsc-template:` 前綴**呼叫(例如 `/jsc-template:hello`)。
|
||||
jsc 技能組的 meta domain:新建、更新、刪除技能的流程,以及**全技能組的準則單一來源** `references/guidelines.md`(命名、description 規則、hook / 工具 / sub agent 下放、語言、環境變數、wiki 頁命名總表、審核檢查清單)。
|
||||
|
||||
---
|
||||
## 安裝 / 更新 / 移除
|
||||
|
||||
## 前綴與呼叫方式
|
||||
Marketplace 統一為 `jsc`(https://gitea.jsc.idv.tw/plugins/jsc.git),安裝 token 為 `jsc-meta@jsc`。每個指令一行:
|
||||
|
||||
| 助理 | 安裝方式 | 呼叫 | `/jsc-template:` 前綴 |
|
||||
| CLI | 安裝 | 更新 | 移除 |
|
||||
| --- | --- | --- | --- |
|
||||
| Claude Code | `claude plugin`(marketplace) | `/jsc-template:<name>` 或自動觸發 | ✅ |
|
||||
| Codex | `codex plugin`(marketplace) | `$<name>` 或 `/skills` 選單 | ❌(用 `$name`) |
|
||||
| Antigravity | `agy plugin install` | `/jsc-template:<name>` 或自動觸發 | ✅ |
|
||||
| OpenCode | skills 目錄(複製/clone) | 描述需求自動觸發 | ❌(依名稱) |
|
||||
| GitHub Copilot CLI | `copilot plugin`(marketplace) | 自然語言或 plugin skills | ❌(無 `/jsc-template:` 前綴) |
|
||||
| claude | `claude plugin marketplace add https://gitea.jsc.idv.tw/plugins/jsc.git && claude plugin install jsc-meta@jsc` | `claude plugin marketplace update jsc && claude plugin update jsc-meta@jsc` | `claude plugin uninstall jsc-meta@jsc` |
|
||||
| codex | `codex plugin marketplace add https://gitea.jsc.idv.tw/plugins/jsc.git && codex plugin add jsc-meta@jsc` | `codex plugin marketplace upgrade jsc` | `codex plugin remove jsc-meta@jsc` |
|
||||
| copilot | `copilot plugin marketplace add https://gitea.jsc.idv.tw/plugins/jsc.git && copilot plugin install jsc-meta@jsc` | `copilot plugin marketplace update jsc && copilot plugin update jsc-meta@jsc` | `copilot plugin uninstall jsc-meta@jsc` |
|
||||
| antigravity | `git clone https://gitea.jsc.idv.tw/plugins/meta.git ~/plugins/meta && agy plugin install ~/plugins/meta` | `git -C ~/plugins/meta pull && agy plugin uninstall jsc-meta && agy plugin install ~/plugins/meta` | `agy plugin uninstall jsc-meta` |
|
||||
| kiro | `kiro-cli plugin marketplace add https://gitea.jsc.idv.tw/plugins/jsc.git && kiro-cli plugin install jsc-meta@jsc` | `kiro-cli plugin marketplace update jsc && kiro-cli plugin update jsc-meta@jsc` | `kiro-cli plugin uninstall jsc-meta@jsc` |
|
||||
|
||||
> Codex 不支援自訂前綴(skill 以 `$name` 呼叫);OpenCode 由模型依描述自動呼叫;Copilot CLI 透過原生 plugin 安裝後以自然語言或 plugin skills 使用。三者皆**不強制**前綴。
|
||||
|
||||
---
|
||||
|
||||
## 目錄結構
|
||||
|
||||
同一個 repo 同時帶四種 manifest,彼此以路徑隔離、互不干擾;各助理都讀同一份 `skills/`。
|
||||
|
||||
```
|
||||
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 參數'`。
|
||||
|
||||
---
|
||||
> antigravity 不支援 gitea URL 安裝,改用本地 clone 路徑。批次操作五個 CLI:使用 `/jsc-cli:deploy`。
|
||||
|
||||
## Skills 目錄
|
||||
|
||||
> 此區塊列出本 plugin 內含的所有 skills(名稱/描述/使用方法)。
|
||||
> 新增或修改 skill 後,請同步手動更新標記之間的內容。
|
||||
呼叫方式:Claude / Antigravity `/jsc-meta:{name}`;Codex `${name}`;Copilot / Kiro 描述需求自動觸發。
|
||||
|
||||
<!-- JSC-SKILLS:START -->
|
||||
|
||||
### `hello`
|
||||
### `skill-new`
|
||||
|
||||
範例 skill,用來驗證 jsc plugin 是否安裝成功,也是新增 skill 的範本。當使用者輸入 hello、想測試 plugin、或想看 skill 模板長什麼樣子時觸發;回覆一句問候並簡述此 plugin 的用途。
|
||||
新建技能:決策樹問細節(目標、觸發、輸入輸出、domain)→ 缺 domain 時依 template 結構建立新存取庫 → sub agent 依準則產生技能 → 審核清單自檢 → PR。
|
||||
|
||||
- **Claude Code / Antigravity**:`/jsc-template:hello`
|
||||
- **Codex**:`$hello`,或用 `/skills` 選單
|
||||
- **OpenCode / GitHub Copilot CLI**:描述需求自動觸發
|
||||
### `skill-update`
|
||||
|
||||
更新技能:列出全部技能 → 使用者選擇 → 決策樹問更新細節 → 更新後依審核檢查清單逐項檢查,不符就回到詢問 → PR。
|
||||
|
||||
### `skill-delete`
|
||||
|
||||
刪除技能:列出全部技能 → 使用者選擇 → sub agent 盤點關聯檔案 → 逐檔判斷是否需修正以維持功能(需要就決策樹問修正細節並依準則檢查)→ 刪除 → PR。
|
||||
|
||||
### `ste100-sync`
|
||||
|
||||
同步上游 speak-human-tw 的語言規則:比對 `references/ste100.md` 釘住的上游版本,有新版就萃取適用的變更、更新 lint 樣式、全庫重掃,最後開 PR。適合列為本 repo 的維護方式。
|
||||
|
||||
<!-- JSC-SKILLS:END -->
|
||||
|
||||
---
|
||||
## 參考與工具
|
||||
|
||||
## 新增一個 skill
|
||||
| 檔案 | 用途 |
|
||||
| --- | --- |
|
||||
| `references/guidelines.md` | 技能準則唯一來源,所有 domain 的 AGENTS.md 都指向這裡 |
|
||||
| `references/ste100.md` | STE100 擬人台灣感語言規則唯一來源(改寫自 speak-human-tw,MIT) |
|
||||
| `tools/ste100-lint.sh` | 語言規則的機檢工具:中國用語、中文句內半形標點、AI 套話;命中 exit 1 |
|
||||
|
||||
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>`**。
|
||||
- `description`:第三人稱,寫清楚「何時用、何時不用」與觸發關鍵字 — 這是各助理自動載入的唯一依據。
|
||||
3. 在內文寫下 skill 的具體步驟。
|
||||
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-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`
|
||||
## 相關 domain
|
||||
|
||||
- [`jsc-ask`](https://gitea.jsc.idv.tw/plugins/ask):決策樹問詢
|
||||
- [`jsc-git`](https://gitea.jsc.idv.tw/plugins/git):完成後的 Push Request
|
||||
|
||||
+4
-4
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jsc-template",
|
||||
"version": "0.0.3",
|
||||
"description": "JSC 跨 AI 助理共用 plugin 模板。所有 skills 以 SKILL.md 為共通標準;於 Antigravity 以 /jsc-template: 前綴呼叫。",
|
||||
"name": "jsc-meta",
|
||||
"version": "0.0.1",
|
||||
"description": "技能組自我管理:新建/更新/刪除技能與技能準則",
|
||||
"skills": "./skills/"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
# JSC 技能準則
|
||||
|
||||
本文件是 jsc 技能組的唯一準則來源。`skill-new`、`skill-update`、`skill-delete` 與技能審核都必須依此檢查。
|
||||
|
||||
## 命名
|
||||
|
||||
1. Plugin 名稱:`jsc-{domain}`,domain 用一個簡短的英文代表詞(例:`ask`、`sdlc`、`gitea`)。
|
||||
2. Marketplace 統一為 `jsc`,正本在 `https://gitea.jsc.idv.tw/plugins/jsc.git`;安裝 token 一律 `jsc-{domain}@jsc`。**每個 domain 存取庫都帶同一份 marketplace 檔**(`.claude-plugin/marketplace.json` 與 `.agents/plugins/marketplace.json`,內容與正本完全一致),所以任何一個 repo 都能當註冊入口,互相覆蓋沒關係。
|
||||
3. Skill 名稱:小寫、數字、連字號(`-`),最長 64 字元。名稱即指令(`/jsc-{domain}:{name}`)。
|
||||
4. 每個 domain 是一個獨立存取庫 `https://gitea.jsc.idv.tw/plugins/{domain}.git`。新 domain 必須依 `https://gitea.jsc.idv.tw/plugins/template` 的結構建立新存取庫(三份 plugin manifest、`skills/`、`README.md`、`AGENTS.md`),並把 plugin 條目(URL 來源指向新存取庫)加入 `plugins/jsc` 正本的兩份 marketplace 檔,再把更新後的檔案**同步到所有 domain 存取庫**(含新存取庫自己)。
|
||||
5. Git 分支名**只允許 ASCII**(`a-z0-9` 與 `/`、`-`);中文需求或標題先翻譯成英文短語再 slug 化。
|
||||
6. Manifest 版本號從 `0.0.1` 開始,三份 manifest 同步 bump。
|
||||
|
||||
## Description 規則
|
||||
|
||||
1. frontmatter 的 `description` 為一行英文,不超過 5 句或 5 個步驟。
|
||||
2. 使用專有名詞、概念或指引詞(例:WBS、TDD、decision tree、STE100)取代解釋。
|
||||
3. 必須寫清楚觸發時機(何時用、何時不用),這是各 CLI 自動載入的唯一依據。
|
||||
4. 複雜流程透過**組合其他技能**實現,不在單一 description 裡塞流程。
|
||||
|
||||
## 強制力層級
|
||||
|
||||
1. 規則的實現優先順序:**hook > prompt**。凡是可以由 hook 強制的規則(語言、計時、統計),一律下放 hook,SKILL.md 只保留 hook 無法涵蓋的指引。
|
||||
2. 有標準輸入與輸出的流程一律下放到 `tools/` 腳本,SKILL.md 只描述何時呼叫與參數。
|
||||
3. 主 agent 不需要處理細節的流程,SKILL.md 必須明確要求建立 sub agent 處理(關鍵字:「必須以 sub agent 執行」)。
|
||||
|
||||
## Hook 規則
|
||||
|
||||
1. 所有 hook 專屬存放於 `jsc-hooks`,**不可散落在其他 domain**。
|
||||
2. Hook 腳本實作優先順序:**shell > nodejs > python**。
|
||||
3. Hook 必須適用於 claude / codex / copilot / antigravity / kiro 五種 CLI:
|
||||
- 腳本同時支援 stdin JSON(Claude 格式)與環境變數輸入,缺欄位時安靜降級(exit 0)。
|
||||
- 各 CLI 的接線方式由 `jsc-hooks:hooks-install` 技能處理。
|
||||
|
||||
## 技能設計
|
||||
|
||||
1. 每個技能必須有單一明確目標,不可與既有技能重複;能複用就複用(呼叫其他技能或工具)。
|
||||
2. 需要操作 gitea 且輸入輸出明確的技能,一律透過 `jsc-gitea/tools/gitea.sh`(curl + `GITEA_TOKEN`)或 `tea` CLI,不可自行拼 API 呼叫。
|
||||
3. 需要問使用者的技能,一律透過 `jsc-ask:ask` 的決策樹規則:選項式提問、每個選項標明影響範圍、問到沒有疑慮為止、已有紀錄的答案不再問。
|
||||
|
||||
## 語言
|
||||
|
||||
1. 所有交談與輸出內容使用 STE100 繁體中文,帶擬人台灣感:短句、一句一指令、主動語態、術語一致、台灣用語、全形標點、去 AI 味、直接講重點。完整規則的唯一來源:[`references/ste100.md`](ste100.md)。
|
||||
2. **技能文件(SKILL.md)整份為英文**:frontmatter 與內文都是。風格比照 STE100:短句、祈使句、術語一致。
|
||||
3. 技能文件裡「要原樣輸出的繁中字面內容」保留繁中:wiki 狀態字串(例:已分析、未完成)、hook 注入文字、要寫進 wiki 或 commit 的文案。技能執行時產生的 commit 訊息、PR 描述、wiki 頁內容仍依第 1 條輸出繁中。
|
||||
4. README、AGENTS.md、`templates/`、`references/` 為 STE100 繁體中文。中文並列項用頓號「、」,不用半形「/」;英文項目的並列(CLI 名、頁名前綴)可用「/」。
|
||||
|
||||
## 撰寫規範(SKILL.md 內文)
|
||||
|
||||
1. 每個步驟以**可檢核的完成條件**結尾(例:「成功標上工作證才可以進入下一步」),不用模糊語(「理解後」「適當地」)。
|
||||
2. 用**正向敘述**寫目標行為;禁止句只留給無法正向表達的硬性護欄。
|
||||
3. 每個意義只有**單一真實來源**:環境可查的資訊(指令、設定、目錄結構)不要抄進技能,只寫環境查不到的慣例、原因與陷阱。
|
||||
4. **漸進揭露**:所有分支都需要的內容留在 SKILL.md;只有部分分支需要的參考資料下放 `references/`,以一行指引指過去。
|
||||
5. 善用**引導詞**(WBS、CPM、TDD、seam、STE100 等既有概念)取代整段解釋。
|
||||
|
||||
## 環境變數
|
||||
|
||||
| 變數 | 用途 | 未設定時 |
|
||||
| --- | --- | --- |
|
||||
| `GITEA_HOST` | Gitea 站台(例:`https://gitea.jsc.idv.tw`) | 詢問使用者 |
|
||||
| `GITEA_TOKEN` | Gitea API token | 詢問使用者 |
|
||||
| `JSC_WIKI_REPO_{TYPE}` | 各類型 wiki 頁所在的 `{owner}/{repo}`;TYPE = `QUESTION` / `PLAN` / `ANALYZE` / `MAINTAIN` / `REPO` / `LOG` | 退回 `JSC_WIKI_REPO` |
|
||||
| `JSC_WIKI_REPO` | 未逐類設定時的共用 wiki `{owner}/{repo}` | 詢問使用者 |
|
||||
| `JSC_HOME` | Hook 資料目錄 | 預設 `~/.jsc` |
|
||||
|
||||
## Wiki 頁命名總表
|
||||
|
||||
| 頁面 | 用途 | 擁有者 |
|
||||
| --- | --- | --- |
|
||||
| `QUESTION_CONTENTS` | 問詢目錄(存取庫名稱 → 問詢紀錄) | jsc-ask |
|
||||
| `QUESTION_{HASH}` | 單一存取庫的問詢紀錄 | jsc-ask |
|
||||
| `PLAN_CONTENTS` | 計畫目錄 | jsc-sdlc |
|
||||
| `PLAN_{yyyyMMdd}_{HHmmss}_{HASH}` | 計畫頁 | jsc-sdlc |
|
||||
| `ANALYZE_CONTENTS` | 分析目錄 | jsc-sdlc |
|
||||
| `ANALYZE_{yyyyMMdd}_{HHmmss}_{HASH}` | 分析頁 | jsc-sdlc |
|
||||
| `MAINTAIN_CONTENTS` | 維護目錄 | jsc-sdlc |
|
||||
| `REPO_CONTENTS` | 盤點目錄 | jsc-sdlc |
|
||||
| `REPO_{HASH}` | 存取庫盤點頁(功能與端點 + commit sha) | jsc-sdlc |
|
||||
| `LOG_CONTENTS` | 日誌目錄 | jsc-log |
|
||||
| `LOG_{yyyyMM}_W{週數}` | 工作日誌(週數基於週五日期計算) | jsc-log |
|
||||
|
||||
`{HASH}` 一律為 `{owner}/{repo}`(必要時加上主題字串)的 SHA-1 前 8 碼、大寫。
|
||||
|
||||
## 審核檢查清單
|
||||
|
||||
新增或更新技能後逐項檢查,任一不符就修正:
|
||||
|
||||
- [ ] 名稱符合命名規則,且與既有技能目標不重複
|
||||
- [ ] description 為英文、≤ 5 句或 5 步驟、含觸發時機
|
||||
- [ ] 可 hook 的規則已下放 jsc-hooks;可工具化的流程已下放 tools/
|
||||
- [ ] 細節流程已標示 MUST run as a sub agent
|
||||
- [ ] gitea 操作透過 gitea.sh 或 tea
|
||||
- [ ] 問詢透過 jsc-ask 決策樹規則
|
||||
- [ ] SKILL.md 整份為英文(要原樣輸出的繁中字面除外);README、AGENTS、templates、references 為 STE100 繁中;UTF-8 無亂碼
|
||||
- [ ] 已同步更新該 domain 的 README「Skills 目錄」與三份 manifest 的 version
|
||||
@@ -0,0 +1,66 @@
|
||||
# STE100 — 擬人台灣感的簡化技術中文
|
||||
|
||||
jsc 技能組所有交談與文件的語言規則,唯一來源在這裡。基礎紀律沿用 STE100,擬人與在地化層改寫自 [speak-human-tw](https://github.com/Raymondhou0917/speak-human-tw)(MIT),並依技術文件情境剪裁。
|
||||
|
||||
上游版本:speak-human-tw v1.4.0(2026-07-18)。上游有新版時用 `jsc-meta:ste100-sync` 同步。
|
||||
|
||||
## 基礎紀律
|
||||
|
||||
1. 短句,一句一指令,主動語態。
|
||||
2. 同一個概念全程用同一個詞,不換詞循環。
|
||||
3. UTF-8,無亂碼。
|
||||
|
||||
## 台灣用語
|
||||
|
||||
看到左欄一律替換(引號內原話與專有名詞除外):
|
||||
|
||||
| 中國用語 | 台灣用語 |
|
||||
| :-- | :-- |
|
||||
| 默認 | 預設 |
|
||||
| 支持(某功能) | 支援 |
|
||||
| 兼容 | 相容 |
|
||||
| 信息 | 資訊 |
|
||||
| 數據庫 | 資料庫 |
|
||||
| 服務器 | 伺服器 |
|
||||
| 軟件/硬件 | 軟體/硬體 |
|
||||
| 網絡 | 網路 |
|
||||
| 質量 | 品質 |
|
||||
| 代碼 | 程式碼 |
|
||||
| 調用 | 呼叫 |
|
||||
| 卸載 | 移除、解除安裝 |
|
||||
| 反饋 | 回饋 |
|
||||
| 水平 | 水準 |
|
||||
| 智能 | 智慧 |
|
||||
|
||||
語境判斷:「優化」要掛具體動作與指標,空泛使用就重寫;「文檔」若指文件與檔案的合稱可保留。
|
||||
|
||||
## 全形標點
|
||||
|
||||
中文句子一律全形標點「,。:;!?「」()、」。例外只有三個:英文片語內部、URL、程式碼。數字與單位用半形(42%、3/31)。並列用頓號「、」,不用逗號串。第一層引號用「」,內層用『』。
|
||||
|
||||
## 去 AI 味
|
||||
|
||||
1. 刪對話殘留與諂媚:「希望這對你有幫助」「好問題!」「以下是修改後的版本」。
|
||||
2. 刪通用積極結論:「總的來說」「綜上所述」「讓我們一起⋯⋯」。刪掉後允許不收尾,停在最後一個具體句子上。
|
||||
3. 刪公式化開場:「在當今快速發展的時代」這類大帽子。第一句就要有只有這份文件才有的資訊。
|
||||
4. 「首先/其次/最後」三段式:結構服從邏輯,不服從對稱;硬湊的那點刪掉,過渡詞多半可直接拿掉。
|
||||
5. 價值上升詞落地:「標誌著」「奠定基礎」「體現了」改成具體事實,寫不出來就刪。
|
||||
6. 密度限制:破折號少用;粗體一段最多 2–3 個詞;emoji 技術文件不用。
|
||||
7. 翻譯腔:長定語鏈改短句(「一個能夠幫助你快速完成工作的工具」→「這工具幫你快速完成工作」);「透過」一段最多一次。
|
||||
8. 刪掉一句空話後,不得補上同族的另一句空話。
|
||||
|
||||
## 擬人(技術文件版)
|
||||
|
||||
1. 直接講重點,不繞場。
|
||||
2. 長短句交錯,資訊密度可以不平均:最重要的事給最多篇幅。
|
||||
3. 第一人稱是誠實,不是不專業;對事實可以有判斷(「這裡容易踩雷」比「請注意」有用)。
|
||||
4. 不表演不確定;不確定就直說哪裡不確定、缺什麼。
|
||||
5. 人味是作者的:不編造範例、經歷、數據。缺具體內容就標「(需補充)」。
|
||||
|
||||
## 保護清單(原封不動)
|
||||
|
||||
指令與程式碼、檔案路徑、URL、專有名詞、版本號、wiki 頁名、範本欄位名、SKILL.md frontmatter 的英文 description、引號內原話。被討論的詞也放行:本檔替換表左欄就是例子。
|
||||
|
||||
## 機檢
|
||||
|
||||
可機檢的部分(中國用語、中文句內半形標點、AI 套話)用 `tools/ste100-lint.sh <file|dir>` 檢查,命中 exit 1。掃描時跳過本檔(規則文件裡的詞是被討論,不是被使用);語感與翻譯腔仍要人工判讀。
|
||||
@@ -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,22 @@
|
||||
---
|
||||
name: skill-delete
|
||||
description: Remove a skill from the jsc skill set safely. List skills, let the user pick, inventory every file referencing the skill via a sub agent, fix each affected file through decision-tree questions until guideline checks pass, then delete the skill and open a PR via jsc-git pr. Use only for removal; not for renaming (use skill-update).
|
||||
---
|
||||
|
||||
# skill-delete — delete a skill
|
||||
|
||||
Single source of guidelines: [`../../references/guidelines.md`](../../references/guidelines.md).
|
||||
|
||||
## Flow
|
||||
|
||||
1. List every skill in the skill set: scan `jsc-*/skills/*/SKILL.md`.
|
||||
2. Let the user pick the skill to delete. Options state the impact scope: which skills reference it, and that its command stops working after deletion.
|
||||
3. Inventory every file related to the skill — this step MUST run as a sub agent:
|
||||
- `grep -r` for the skill name and `/jsc-{domain}:{name}` across all jsc-* repositories
|
||||
- References in other SKILL.md files, the domain README's 「Skills 目錄」 section, the two marketplace.json files in `plugins/jsc` plus their synced copies in every domain repo, `tools/`, and the `jsc-hooks` wiring
|
||||
4. For each affected file:
|
||||
1. Decide whether the file needs a fix to keep its current behavior after the deletion. If no fix is needed, **skip the rest of this loop**.
|
||||
2. Ask for fix details via the `jsc-ask:ask` decision tree (call a replacement skill? inline the flow? drop the feature too?). Every option states its impact scope.
|
||||
3. After fixing, check the guidelines.md audit checklist. On failure, return to step 4.2.
|
||||
5. Delete the skill directory `skills/{name}/`, then sync the domain README and bump the version in all three manifests.
|
||||
6. Call `jsc-git:pr` to open a Push Request.
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
name: skill-new
|
||||
description: Create a new skill in the jsc skill set. Ask skill details via decision tree, generate the skill under the right jsc-{domain} per guidelines.md (create the domain from the template repo if missing), then open a PR via jsc-git pr. Use when the user wants to add a skill; not for editing an existing one (use skill-update).
|
||||
---
|
||||
|
||||
# skill-new — create a skill
|
||||
|
||||
Single source of guidelines: [`../../references/guidelines.md`](../../references/guidelines.md).
|
||||
|
||||
## Flow
|
||||
|
||||
1. Ask for skill details via the `jsc-ask:ask` decision tree until no doubt remains:
|
||||
- Goal (single and not duplicating an existing skill; first scan `jsc-*/skills/*/SKILL.md` and list similar skills for comparison — options must state the impact scope of "reuse existing" versus "create new")
|
||||
- Trigger (when to use, when not to, trigger keywords)
|
||||
- Input and output (can a standard input/output flow move down to `tools/`; does it need Gitea operations — if so, make the skill use `jsc-gitea/tools/gitea.sh` + token)
|
||||
- Owning domain (list the existing `jsc-*` domains to choose from)
|
||||
2. If the domain does not exist:
|
||||
1. Propose one short English word for the new domain (a single word preferred) and confirm it with the user.
|
||||
2. Ask the user to create the repository `plugins/{domain}`. Clone it, then build the content following the structure of `https://gitea.jsc.idv.tw/plugins/template`: three plugin manifests (plugin name `jsc-{domain}`, version starting at `0.0.1`), `skills/`, README.md, AGENTS.md.
|
||||
3. Add the plugin entry (URL source pointing at the new repository) to `.claude-plugin/marketplace.json` and `.agents/plugins/marketplace.json` in `plugins/jsc` (the canonical copy), then sync the two updated files to every domain repository, including the new one. Every repo carries the same marketplace files, so any repo works as the registration entry point. The sync MUST run as a sub agent.
|
||||
3. Generate the skill per guidelines.md — this step MUST run as a sub agent:
|
||||
- `skills/{name}/SKILL.md`: entirely in English (description ≤ 5 sentences with trigger conditions; body in STE100-style English)
|
||||
- Rules enforceable by hooks go to `jsc-hooks` (never scattered in this domain); standard input/output flows go to `tools/`
|
||||
- Sync the domain README's 「Skills 目錄」 section and bump the version in all three manifests
|
||||
4. Self-check every item of the guidelines.md audit checklist; fix anything that fails.
|
||||
5. Call `jsc-git:pr` to open a Push Request.
|
||||
@@ -0,0 +1,17 @@
|
||||
---
|
||||
name: skill-update
|
||||
description: Update an existing skill in the jsc skill set. List all skills, let the user pick one, ask update details via decision tree, apply the change, re-check against the guidelines checklist until it passes, then open a PR via jsc-git pr. Use for modifying a skill; not for creating (skill-new) or removing (skill-delete).
|
||||
---
|
||||
|
||||
# skill-update — update a skill
|
||||
|
||||
Single source of guidelines: [`../../references/guidelines.md`](../../references/guidelines.md).
|
||||
|
||||
## Flow
|
||||
|
||||
1. List every skill in the skill set: scan `jsc-*/skills/*/SKILL.md` and present a "domain / name / description" list.
|
||||
2. Let the user pick the skill to update.
|
||||
3. Ask for update details via the `jsc-ask:ask` decision tree (change the goal? the trigger? the flow? move rules down to a hook or a tool?). Every option states its impact scope (example: renaming breaks the existing invocation command).
|
||||
4. Update the skill — this step MUST run as a sub agent: modify SKILL.md and related files, sync the domain README's 「Skills 目錄」 section, and bump the version in all three manifests.
|
||||
5. Check every item of the guidelines.md audit checklist. On any failure, **return to step 3**: ask again and fix, until all items pass.
|
||||
6. Call `jsc-git:pr` to open a Push Request.
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
name: ste100-sync
|
||||
description: Sync the STE100 language rules with upstream speak-human-tw. Compare the pinned upstream version in references/ste100.md against the latest release, distill applicable changes, refresh ste100-lint.sh patterns, re-lint all jsc repos, then open a PR via jsc-git pr. Use on periodic maintenance or when upstream releases a new version; not for editing local-only rules.
|
||||
---
|
||||
|
||||
# ste100-sync
|
||||
|
||||
Keep `references/ste100.md` in sync with its upstream source, [speak-human-tw](https://github.com/Raymondhou0917/speak-human-tw) (MIT).
|
||||
|
||||
## Steps
|
||||
|
||||
1. Read the pinned version from the「上游版本」line in `references/ste100.md`.
|
||||
2. Clone the upstream repo (`--depth 1`). Read the `version` and `changelog` fields in its `SKILL.md` frontmatter.
|
||||
3. Same version: report「上游沒有新版」and stop.
|
||||
4. Newer version — distill the changes. **MUST run as a sub agent**:
|
||||
- Walk the changelog entries newer than the pinned version.
|
||||
- Keep only changes that apply to technical documents and conversation: Taiwan term replacements, punctuation rules, de-AI patterns, humanize targets.
|
||||
- Drop marketing-copy scenes, eval material, and workflow-mode changes.
|
||||
- Apply the distilled changes to `references/ste100.md`. Keep its trimmed structure. Update the「上游版本」line.
|
||||
5. If the replacement table or cliché list changed, update the `TERMS` and `CLICHES` patterns in `tools/ste100-lint.sh`.
|
||||
6. Run `tools/ste100-lint.sh` over every jsc repo. Fix hits in files this repo owns; report hits elsewhere.
|
||||
7. Open a PR via `jsc-git:pr`.
|
||||
|
||||
## Notes
|
||||
|
||||
- Generated wiki content, commit messages, and PR descriptions stay in Traditional Chinese per the guidelines; only the rule distillation is at stake here.
|
||||
- This skill fits the maintenance flow: list it as a maintenance method for the `plugins/meta` repo in `jsc-sdlc:maintain`.
|
||||
Executable
+28
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env sh
|
||||
# ste100-lint.sh — 檢查檔案是否違反 STE100 擬人台灣感規則(可機檢的部分)。
|
||||
# 用法: ste100-lint.sh <file|dir> [...]
|
||||
# 檢查項目:
|
||||
# 1. 中國用語(references/ste100.md 的替換表左欄)
|
||||
# 2. 中文句內的半形標點(, ; ! ? 緊鄰中日韓字元)
|
||||
# 3. 常見 AI 套話(總的來說、綜上所述、希望這對你有幫助 等)
|
||||
# 輸出: {檔案}:{行號}:{類別}:{命中內容};全部通過 exit 0,有命中 exit 1。
|
||||
# 限制: 只掃 .md 檔;程式碼圍欄內的內容可能誤報,人工複核。
|
||||
set -u
|
||||
TERMS='默認|支持某|兼容|信息|數據庫|服務器|軟件|硬件|網絡|質量|卸載|反饋|視頻|屏幕|鼠標|打印|立馬|靠譜|賦能|閉環|抓手|復盤'
|
||||
CLICHES='總的來說|綜上所述|希望這對你有幫助|好問題|在當今|瞬息萬變|標誌著|奠定了基礎|體現了|不僅僅是|讓我們一起'
|
||||
hit=0
|
||||
files() {
|
||||
for p in "$@"; do
|
||||
if [ -d "$p" ]; then find "$p" -name '*.md' -not -path '*/.git/*'; else echo "$p"; fi
|
||||
done
|
||||
}
|
||||
check() { # $1=檔案 $2=類別 $3=grep 模式 $4=grep 旗標
|
||||
out=$(grep -n"$4" "$3" "$1" 2>/dev/null | sed "s|^|$1:|;s|:\([0-9]*\):|:\1:$2:|")
|
||||
if [ -n "$out" ]; then printf '%s\n' "$out"; hit=1; fi
|
||||
}
|
||||
for f in $(files "$@"); do
|
||||
check "$f" "中國用語" "$TERMS" E
|
||||
check "$f" "半形標點" '[\x{4e00}-\x{9fff}][,;!?]|[,;][\x{4e00}-\x{9fff}]' P
|
||||
check "$f" "AI 套話" "$CLICHES" E
|
||||
done
|
||||
exit $hit
|
||||
Reference in New Issue
Block a user