依 todo.md 執行的規範治理專案:新增 spec-preflight 等 14 個共用規範(含 conventional-commit/pull-request/git-push/issue-read/todo-list/ask-user/ subagent/no-scratch-files/skill-invocation/script-path/action-scaffold/ node-src-layout/plugin-cli/model),擴充 spec-git-safety 與 spec-gitea(token 優先序、機密遮蔽、Wiki 頁名轉義規則);新增可執行 skill `models`(模型能力 查詢與標籤)與 `todo`(依指定模型產生/附加 todo.md);新增 plugin.meta.json 單一事實來源與 gen-plugin-files.mjs 樣板產生器,統一四個 repo 的 manifest/ README/AGENTS.md 並移除寫死的本機使用者路徑;新增 shared/scripts/lib 的 log/機密遮蔽三語言參考實作。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
8.5 KiB
name, description
| name | description |
|---|---|
| spec-model | JSC plugins 共用「取得可用模型並加上標籤」規範:固定標籤體系(能力等級/成本/延遲/上下文/用途/可用性)、任務→必要標籤對映表、取得模型清單的權威來源優先序(`claude-api` skill/CLI 自陳/使用痕跡/smoke test)、`~/.claude/jsc/models.json` 快取設計(30 天過期)、強制切換規則,以及讀到帶 `model:` frontmatter 清單檔時的模型檢查義務。當其他 skill 內文引用 spec-model 或 /jsc-shared:spec-model、或需要挑選模型/驗證模型可用性/開啟帶 `model:` frontmatter 的清單檔時載入此 skill。單獨被使用者呼叫時,直接說明本規範內容。 |
spec-model — 共用「取得可用模型並加上標籤」規範
所有 JSC skills 需要查詢目前可用哪些模型、為模型加上可供選型決策的標籤、依任務挑選推薦模型,或檢查執行者目前使用的模型是否符合某份清單/某個 skill 的要求時,一律遵守以下規範。
一、標籤體系(固定字彙表,不可自由發揮)
下表為唯一標籤字彙表;新增或改名標籤前一律先改本表,不得在其他 skill 內文自創同義詞。
| 面向 | 標籤 | 判準 |
|---|---|---|
| 能力等級 | #深度推理 |
多步推理、架構設計、跨檔案分析、需求拆解 |
#均衡實作 |
一般編碼、文件重整、規格落地 | |
#輕量快速 |
摘要、分類、格式轉換、固定欄位抽取 | |
| 成本 | #高成本 #中成本 #低成本 |
依當下官方定價分三段,不憑記憶,每次都要查 |
| 延遲 | #延遲敏感可用 |
在使用者等待路徑上仍可接受 |
#可長時間跑 |
背景/批次工作 | |
| 上下文 | #長上下文 |
≥ 1M(如 [1m] 變體) |
#標準上下文 |
200k 級 | |
| 用途 | #分析 #實作 #審查 #摘要 #對話人格 |
一個模型可帶多個標籤 |
| 可用性 | #本機可用 |
已通過 smoke test |
#不可用 |
smoke test 失敗(無權限或不存在) | |
#未驗證 |
無法在此 CLI 驗證,只有文件記載 |
二、任務 → 必要標籤對映表
挑選模型時,先依任務類型找出下表的「必要標籤」——候選模型必須同時具備必要標籤才可推薦;「加分標籤」不具備也可推薦,只是排序上較後。
| 任務類型 | 必要標籤 | 加分標籤 |
|---|---|---|
| 需求分析/拆 TODO/架構決策 | #深度推理 #分析 #本機可用 |
#長上下文 |
| 依清單實作/規格落地 | #均衡實作 #實作 #本機可用 |
#中成本 |
| code review/findings 判讀 | #深度推理 #審查 #本機可用 |
— |
| 逐輪摘要(worklog)/分類 | #輕量快速 #摘要 #延遲敏感可用 #低成本 |
— |
| 人格對話 | #對話人格 #本機可用 |
#延遲敏感可用 |
同一任務有多個候選都滿足必要標籤時,優先挑加分標籤命中較多者;仍並列則挑 verified_at(見〔四、快取設計〕)較新者。
三、取得清單的權威來源優先序
依序取得可用模型清單與其中繼資料(id/定價/上下文長度),前一項可取得就不往下:
-
Claude Code 內建
claude-apiskill——模型 id/定價/上下文長度的權威來源,不憑記憶,每次查都要實際載入這個 skill 取得當下資料,不可用過去對話中記得的數字代替。 -
CLI 自陳:
- Claude Code:
claude --help的--model說明列出的 alias(例如fable/opus/sonnet這類最新模型別名,實際列出內容以當次--help輸出為準,不可硬編碼)。 - 其他 CLI(
codex/opencode/agy/copilot)用各自的列出指令取得;取不到就把該模型標為#未驗證,不得省略、也不得用其他 CLI 的結果替代。
- Claude Code:
-
使用痕跡:
~/.claude/stats-cache.json內dailyModelTokens/modelUsage等欄位出現過的模型 id(例如曾實際用過的claude-opus-5、claude-sonnet-5、claude-haiku-4-5-20251001)。這一層只當補充候選,用來發現前兩層沒列出但實際上帳號可用的模型,不當權威——出現在這裡不代表現在仍可用,仍須走第 4 步驗證。 -
Smoke test 驗證可用性(標準做法,所有候選模型都要跑):
CLAUDE_CODE_CHILD_SESSION=1 timeout 45 claude -p 'OK' --model <id>不可用時 stderr/stdout 會出現「is not a model this version of Claude Code recognizes」或「There's an issue with the selected model」;出現任一即標
#不可用;正常回應則標#本機可用。⚠️ 必須帶
CLAUDE_CODE_CHILD_SESSION=1,否則會觸發巢狀 session 與 SessionStart hook,汙染 smoke test 結果也可能造成非預期副作用。
四、快取設計
- 路徑:
~/.claude/jsc/models.json。 - 每筆模型記錄的欄位:
{ id, aliases[], tags[], context, pricing, verified_at, verdict, reason }。id:模型完整 id(如claude-sonnet-5)。aliases[]:CLI 自陳取得的別名(如sonnet)。tags[]:依〔一、標籤體系〕貼上的標籤陣列。context:上下文長度(依〔一〕分類為#長上下文/#標準上下文的依據數值)。pricing:查證當下的定價摘要(來源為claude-apiskill 或對應 CLI 文件)。verified_at:本筆最後驗證(含 smoke test)的時間,格式依/jsc-shared:spec-time-log。verdict:本機可用/不可用/未驗證三者之一,對應〔一〕的可用性標籤。reason:判定verdict的簡短依據(例如 smoke test 的錯誤訊息摘要、或「僅文件記載未能於此 CLI 驗證」)。
- 過期規則:
verified_at距今超過 30 天視為過期(沿用 worklog 快取的年限慣例),過期記錄需重新走〔三、取得清單的權威來源優先序〕更新,不得直接沿用。 - 內容邊界(重要):快取檔只准存模型中繼資料(上述欄位),不得寫入任何工作內容或使用者資料(例如對話內容、專案路徑、議題內容、任何個資)。任何要寫進這份快取的內容,寫入前都要檢查是否落在這個邊界內。
五、強制切換規則(供 /jsc-shared:todo 與其他 skill 使用)
任何 skill 宣告了必要標籤(依〔二〕的對映表)或直接指定模型時,執行者當前模型不符就停止並要求使用者切換:
-
不得自行降級或升級到別的模型頂替。
-
不得先做一部分再提醒使用者切換——必須在動手前就完成檢查並停下。
-
錯誤訊息格式依
/jsc-shared:spec-time-log的[時間][階段][等級]: 訊息:[yyyy/MM/dd HH:mm:ss][模型檢查][ERR]: 本清單/本 skill 指定 <model>(<alias>),當前模型為 <current-model-id>。 請執行 /model <alias> 切換後重新載入,本次不進行任何修改。 -
限制:Claude Code 沒有環境變數可讀取當前模型 id,只能以 agent 對自己當下模型的自我回報為準;自我回報不確定時,請使用者執行
/status確認目前模型後再繼續判斷,不得用猜測代替確認。
六、讀到帶 model: frontmatter 的清單檔時的檢查義務
任何 agent 開啟像 todo.md 這種帶 model: frontmatter 的清單檔時,開始執行清單內容之前都要先依〔五、強制切換規則〕做一次模型檢查:
- 讀出清單檔 frontmatter 的
model(與可能並列的model_alias)。 - 依〔五〕的方式確認當前模型(agent 自我回報,不確定就請使用者
/status確認)。 - 兩者不符 → 依〔五〕的錯誤訊息格式停止,不得先執行清單中的任何一項再提醒。
- 相符才繼續往下執行清單內容。
具體操作步驟(可直接照做,不需另外解讀):開啟一份 .md 檔案、發現其 YAML frontmatter 含 model 欄位時,在做任何修改前先自我回報目前模型 id,並與 frontmatter 的 model 欄位比對;不符就依〔五、強制切換規則〕的錯誤訊息格式中斷,本次不進行任何修改;相符才繼續往下執行檔案內容。
本節會被 /jsc-shared:todo(產生指定模型 todo.md 的 skill)與其他消費這類清單檔的 skill(例如處理 TARGET.md、處理議題 TODO 的 skill)引用,各消費端不必重抄本節內容,直接引用本節即可。