Files
cli/skills/models/SKILL.md
jiantw83 e30bbf5780 feat(cli): 待修項目合併收成共用腳本,檢查改為併行
「待修項目」表原本由 doctor 與 setup 各寫一次。同一套合併與排序規則寫在
兩個地方,遲早各自漂移:一邊改了排序,另一邊漏掉一整類項目,而且沒有
任何地方看得出來。現在規則只留一份,兩支技能都呼叫它。輸入與輸出都是
TSV,一項都沒有時照樣印一列,呼叫端永遠有東西可以呈現。

doctor 的四項檢查彼此不共用資料,排成一列跑只是把等待時間乘上四倍,
現在同時啟動。doctor 呼叫接線腳本一律帶唯讀旗標,把「打錯一個子命令就
改到或刪掉檔案」的風險移進程式層,不再只靠指令打對。

deploy 的 CLI 偵測、版本結論與 marketplace 清單同樣互不相干,改成併行
取得。版本結論改讀版本守門腳本的單行結論,不再自己從表格推導。setup 把
已經確認過的模式與版本報告直接交給 deploy,操作者不必再答一次同樣的問題。

deploy、doctor、models 都補上結束碼分流:腳本回什麼碼就走哪條路,不再從
輸出內容猜。體檢目錄頁改成先讀回再更新自己那一列,整頁覆蓋會把別台機器
的紀錄一次抹掉。設定規格表補上技能盤點頁要用的環境變數,盤點頁才有地方
可寫。
2026-08-31 11:09:59 +08:00

4.8 KiB


name: models description: List every model usable by each installed AI CLI (claude, codex, copilot, antigravity, kiro) and attach capability tags from references/model-tags.md. Syncs the tag table to $JSC_HOME/model-tags.tsv via tools/model-tags.sh, so jsc-sdlc gates are enforced in code. States each SDLC stage's required tags: plan and analyze need reasoning-max, implement needs coding, maintain any. Resolves each stage's preferred model chain via tools/model-config.sh (project .jsc/models overrides $JSC_HOME/models.conf), for switch suggestions only. Use when checking model fitness, inventorying models, or reviewing stage gating; not for switching models or editing the config files.

models — list CLI models with capability tags

Steps

  1. Start three collectors at once. They read different files and share no state, so the stage preference chain is fetched here rather than waited for at the end.

    1. jsc-cli/tools/detect-clis.sh — the installed CLIs, as {name}<TAB>{path}<TAB>{version}. Exit 0 with at least one row → that is the CLI list. Exit 0 with no row → no AI agent CLI is installed on this machine: report that, name the five it probes, skip steps 2 to 4, and go straight to step 5, because the tag table and the stage requirements are still worth writing out. Any non-zero exit → stop and report the exit code and stderr.
    2. jsc-cli/tools/list-models.sh — each CLI's models and the model currently in use, as cli<TAB>model<TAB>in-use, read from each CLI's own config. It stays silent for a CLI whose config it cannot read and always exits 0; a non-zero exit means the script itself failed, so report the model inventory as 無法取得 with the exit code. This collector MUST run as a sub agent.
    3. jsc-cli/tools/model-config.sh list — one line per stage, stage<TAB>chain<TAB>source, with - for unconfigured stages. Exit 0 → use the rows in step 6. Exit 2 → usage error, report it as a defect in this skill and show step 6's 階段偏好模型 table as 未取得. Any other exit → same handling, with the exit code named.

    Done when all three collectors have returned, and each has either its rows or an explicit failure reason.

  2. Reconcile the two lists. For every detected CLI that collector 1.2 returned no rows for, list that CLI's known default models and mark each one with the literal label 「預設推定」 (assumed default). Done when every detected CLI has either a model list from its config or a set of assumed defaults.

  3. Attach capability tags to every model per references/model-tags.md. A model missing from that table is not tagged by guesswork: add it to the table from the vendor's documentation, or queue it as a jsc-ask:ask question. Done when every listed model carries at least one tag and every unlisted model is either added to the table or queued as a jsc-ask:ask question.

  4. Output a table with four columns: CLI, model, tags, currently in use. Done when the table holds one row per model from step 2.

  5. Run tools/model-tags.sh sync to write the tag table to $JSC_HOME/model-tags.tsv. This file is what jsc-hooks/hooks/sdlc-gate.sh reads, so the SDLC gate stays broken until it exists.

    Exit Action
    0 Report the path it printed
    1 references/model-tags.md could not be parsed, or $JSC_HOME could not be written, so nothing was written. Name the reference path and the stderr, and state that the SDLC gate stays broken until this is fixed
    2 Usage error — the subcommand or its arguments are wrong, and the script printed its usage line instead of running. Report it as a defect in this skill, and do not retry with a guessed argument. This is the same code the script uses for UNKNOWN-MODEL and UNKNOWN-STAGE, so it never means a model failed a requirement
    other Report the sync as failed with the exit code and stderr. Never report a path that was not printed

    Done when the written path is reported, or the failure is reported with its exit code.

  6. Append the two stage tables, in this order.

    1. The SDLC stage requirement table (plan and analyze need reasoning-max; implement needs coding; maintain accepts any), stating that gating is done in code by sdlc-gate.sh lock {stage} against the transcript's actual model id — the models listed here are never allowed to self-assess their own tags.
    2. A 「階段偏好模型」 table right after it, built from collector 1.3's rows, with three columns: stage, chain, source (project / global). State below the table that the chain does not grant passage: it only names the model to suggest switching to when the gate blocks, and expresses preference among models that already satisfy the required tags.

    Done when the requirement table shows all four stages with their required tags, and the 階段偏好模型 table shows the same four stages with - for unconfigured ones.