Skip to content

feat: 全 Skill の frontmatter 見直しと機械検査の追加 (0-7) - #73

Merged
takemi-ohama merged 11 commits into
release/skill-inventoryfrom
feature/inventory-frontmatter
Aug 8, 2026
Merged

feat: 全 Skill の frontmatter 見直しと機械検査の追加 (0-7)#73
takemi-ohama merged 11 commits into
release/skill-inventoryfrom
feature/inventory-frontmatter

Conversation

@takemi-ohama

@takemi-ohamatakemi-ohama commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

概要

棚卸の計画 の Task 0-7。全 29 Skill の frontmatter を Skill 執筆規約 へ揃え、機械検査 scripts/check-skill-frontmatter.py を継続的インテグレーションへ組み込んだ。

規約の要点は「発動判定に必要な情報はすべて description に入れる」である。when_to_use は Claude Code 独自項目で Codex と Kiro は読まないため、3 ランタイムへ配る Skill のトリガ語を when_to_use へ置くと、その 2 ランタイムでは暗黙起動に効かない。今回はこの前提に沿って全 description を書き直した。

検査結果

項目beforeafter上限
エラー3300
警告160
description 最大401288300
Claude Code 初期一覧の合計3,1336,0298,000
Codex 初期一覧の合計3,9336,4668,000
Kiro 初期一覧の合計3,3235,793
frontmatter 合計12,72412,14513,000

before のエラー内訳は portability/use-when 21 / portability/explicit-only 6 / safety/angle-bracket 2 / portability/inject-only 1 / ops/trigger-collision 1 / ops/frontmatter-total 1 / ops/description-length 1。

初期一覧の合計が増えているのは、when_to_use に置いていたトリガ語を description へ移し、Codex と Kiro でも発動判定に効くようにしたためである。予算 8,000 文字に対して 2 ランタイムとも 2 割以上の余裕がある。

残した警告はない。

発動制御を変えた Skill

Skill変更理由
mergeddisable-model-invocation を削除起動 248 回がすべて明示起動。「マージ後の後片付け」は日常的に自然文で依頼される
pr同上起動 173 回のうち自動起動は 2 回のみ
review同上(あわせて effort: high を付与)起動 58 回のうち自動起動は 1 回のみ。「レビューして」で発動しないのは実態と合わない
pr-tests同上起動 2 回がすべて明示起動
deploy明示指示専用を維持環境ブランチへ PR を作る破壊的操作。Codex / Kiro は disable-model-invocation を解釈しないため、description に「利用者が明示的に指示したときのみ実行する」と明記した
cherry-pick-pr同上同上
statusline同上(あわせて argument-hint を追加)利用者の設定ファイルを書き換える。disable-model-invocation があるのに argument-hint がなく、明示起動時に引数が伝わっていなかった
ndf-policiesuser-invocable: false維持description に「知識として参照するだけで、手順として実行しない」と明記した。Codex / Kiro は同キーを解釈せず通常の Skill として扱うため

disable-model-invocation を外した 4 個は argument-hint を残している。/ メニューからの明示起動と補完は従来どおり動く。

description の代表的な before / after

cross-review — 42 文字の description と 254 文字の when_to_use に依存していた。Codex / Kiro では when_to_use が読まれず、明示トリガが発動判定に届いていなかった。

-description: "Run iterative Codex and Gemini PR reviews."-when_to_use: "PR を codex + gemini 両方でレビューし、両者 APPROVE まで自動収束させたいときに限定して使う。明示トリガ: 'cross-review', 'クロスレビュー', ... 重い収束ループ (codex+gemini を複数ラウンド起動) のため、単発レビューと責務を明確に分ける。"+description: "Review a PR with both Codex and Gemini, looping fixes until both APPROVE. Use when a converging two-AI review is wanted; for a one-shot second opinion use /ndf:review. Triggers: 'cross-review', 'クロスレビュー', '両AIレビュー', '収束レビュー', 'codex と gemini でレビュー'"

plan-to-spec — 401 文字で運用上限 300 を超えていた。配布が CXK のためトリガ語は description に残し、重複した言い換えを削って 245 文字へ要約した。

-description: "Finalize an implemented plan into a permanent specification document. Use after implementation is complete and an issues/ plan, PLAN file, design note, or implementation plan should become the final as-is specification under docs/ or another authoritative specification location. Triggers: 'planを仕様書にして', '確定仕様書に移動', '実装完了後にplanを整理', 'planをdocsへ移動', '仕様書としてリライト', 'plan-to-spec', 'finalize plan spec'."+description: "Rewrite a finished implementation plan into a permanent specification under docs/. Use when implementation is complete and an issues/ plan should become the as-is specification. Triggers: 'planを仕様書にして', '確定仕様書に移動', 'planをdocsへ移動', 'plan-to-spec'"

ndf-policies — Codex では通常の Skill として暗黙起動されうるため、「知識として参照する。手順として実行しない」を明記した。

-description: "Apply core NDF project policies, including the branch strategy for applying the same fix to environment branches (qa/staging/release) without contaminating feature branches."+description: "Core NDF project policies. 知識として参照するだけで、手順として実行しない。判断に迷ったときの基準として使う: ブランチ戦略、環境ブランチ (qa/staging/release) へ同じ修正を適用する原則、feature ブランチを汚さない運用、PR 運用ルール。"

deployargument-hint<> を除去した(後述)。

-argument-hint: "<env-branch> (例: qa/staging, release/v2)"+argument-hint: "環境ブランチ名 (例: qa/staging, release/v2)"

when_to_use は Claude Code 限定配布の official-skills-autoloader にのみ残した。Claude Code 側の追加トリガ(.docx / .pptx / .xlsx / .pdf など)を逃がす先として妥当で、他ランタイムでの発動に影響しないため。

トリガ語

広すぎるトリガの具体化

Skillbeforeafter機会
investigation-rules調査調査レポートを書く1,271
implementation-planPR作成削除し pr へ寄せた344
markdown-writing仕様書 / 設計書仕様書を書く874
problem-solvingバグ修正バグの根本原因229

規約の基準「その語が出たときに必ずその Skill を使ってほしいか」に照らして判定した。調査PR作成仕様書バグ修正 はいずれも「使うこともある」程度で、他 Skill の発動を埋もれさせる。

重複の解消

upload_evidenceplaywright-evidenceplaywright-kit-ops で重複していた。両者は機能が異なる(前者はレポート生成と Drive 保管、後者は playwright_kit のスクリプト実行)ため、規約の「機能が異なるなら区別できるところまで具体化する」に従った。

  • playwright-kit-ops: upload_evidenceupload_evidence.py(スクリプト本体を持つ側)
  • playwright-evidence: upload_evidence を削除し エビデンスをDriveへ保管 に置き換え

トリガ語の新規宣言

deploycherry-pick-pr はトリガ語を宣言しておらず、台帳で機会を測定できていなかった()。今回宣言したため、次回の /ndf:skill-stats で両者の機会を測定できる。両者のトリガ語は文字列として重複させていない(deploy は feature ブランチから環境ブランチへの昇格、cherry-pick-pr はマージ済み修正の他ブランチ展開)。

未使用項目の導入

規約の「項目の使い分け」に当てはまるものだけを付けた。

項目付けた対象判断
pathsml-model-structureanalysis/**台帳の指定どおり。logging-guidelines は既に付与済み
effort: highreview判断の質が結果を左右する設計レビュー系。承認 / 変更要求の判定そのものがモデルの判断
arguments付けなかった下記参照
license / metadata付けなかった上流 Skill 由来のものが存在しないため(下記参照)
context: fork付けなかった候補は cross-review だが、本文が /goal からの呼び出しを前提としている。規約は「組み込みの /goal と併用する Skill には使わない」と定めている(セッション単位の Stop フックとして動く評価器が分離実行では働かない)

paths をブラウザ自動テスト群へ付けなかった理由

計画では tests/**e2e/** が候補に挙がっていたが、付けると発動が狭まるだけで得がない。

  • playwright-evidence / playwright-kit-ops / playwright-planning は Codex にのみ配布しており、paths は Claude Code 独自項目のため何も効かない
  • playwright-authoring は 3 ランタイムへ配布しているが、「ブラウザ動作確認」「CDP で接続」のように稼働中のアプリに対する依頼を含む。テストディレクトリのファイルを触っていない依頼で発動しなくなる退行になる

arguments を付けなかった理由

リポジトリが持つ公式リファレンス docs/claude-code-skills-official-reference.md(2026-04-03 取得)の frontmatter 一覧に arguments の記載がない。導入する意味があるのは本文の $ARGUMENTS を名前付き引数へ置き換えたときだけで、置き換えたうえで展開されなければ deploy のような破壊的操作の Skill が黙って壊れる。実機で展開を確認できていない項目を、確認せずに破壊的操作の Skill へ入れない。 Task 0-8 が Codex CLI 実機での検証を前提にしているのと同じ扱いとし、実機確認のうえで別途導入する。

宣言だけ足して本文をそのままにする案は、規約の「付けられるから付ける」に当たるため採らなかった。

license / metadata を付けなかった理由

全 29 Skill を調べたが、上流の Skill を参考にして書いたものは存在しない。official-skills-autoloaderanthropics/skills実行時に clone するが、Skill 自身の内容は上流由来ではない。上流のライセンス条件は本文へ既に記載済み。したがって記録対象がない。

判断が必要だった課題への結論

1. qa-security-scanofficial-skills-autoloader の配布

結論: manifest へ追加した。

台帳はどちらも「発動改善」判定だが、どの manifest にも載っておらず配布物へ含まれていなかった。配布されていない Skill の description を直しても発動しない以上、判定を成立させるには配布するしかない。判定を「削除」へ覆す道もあるが、台帳は両者について別の測定で需要を確認済みqa-security-scan は初期実測の手書きキーワードで機会 66、official-skills-autoloader は機会 97)としており、削除の根拠がない。

Skill配布先理由
qa-security-scanClaude Code / Codex / KiroOWASP Top 10 のチェックリストでランタイムに依存しない。あわせて本文の「qaエージェントが〜」という Claude Code 固有の言い回しをランタイム非依存へ直した
official-skills-autoloaderClaude Code のみ取得先が ~/.claude/skills/ で、これを読むのは Claude Code だけ。Codex は .agents/skills/、Kiro は .kiro/skills/ を読む

official-skills-autoloader の本文にあった「どの manifest にも載っておらず配布物へ含まれていない」という記述は、配布先の明記へ差し替えた。

2. deployargument-hint に残る <>

結論: 角括弧を使わず日本語のラベルにした。

Agent Skills 仕様がシステムプロンプトへの注入リスクとして <> を警告しているため、置換ではなく除去する必要がある。[env-branch] は慣習的に「省略可能」を意味してしまい、必須引数である実態と食い違う。cherry-pick-pr も同じ理由で同じ形に揃えた。

  • deploy: "<env-branch> (例: qa/staging, release/v2)""環境ブランチ名 (例: qa/staging, release/v2)"
  • cherry-pick-pr: "<base-branch> (例: qa/staging, release/v2)""ベースブランチ名 (例: qa/staging, release/v2)"

FRONTMATTER_TOTAL_MAX の確定

13,000 文字(暫定値は 12,000)。

全 Skill の見直しが終わった時点の実測は 12,145 文字(Skill 29 個、2026-08-08)。これに約 7% の余裕を足した。余裕分 855 文字は Skill 2〜3 個分の frontmatter に相当し、Skill を 1 個足したくらいでは検査が落ちない一方、無制限な増加は止まる。根拠は scripts/check-skill-frontmatter.py のコメントと 規約の「上限値」表に記録した。

なお実測 12,145 のうち約 2,000 文字は playwright-authoringallowed-tools(Playwright / Chrome DevTools MCP のツール名 50 件)である。この項目は削れないため、以降 Skill を増やすときは実測しなおして値を更新する。

検査スクリプト自体の変更

実際に全 Skill を直す過程で、検査が規約や計画と食い違う箇所を 2 件見つけたので直した。いずれも緩和ではない

変更理由
ops/argument-hint を警告から失敗スクリプトは「判定が本質的に近似になる項目だけを警告にとどめる」方針だが、この項目は disable-model-invocationargument-hint の有無を見るだけで近似要素がない。計画(Task 0-7 の検査項目表)でも失敗条件として挙げられている
manifest の読み取りで行末の # 以降をコメントとして落とすscripts/build-runtime-plugins.sh は manifest の # 以降をコメントとして落とすが、検査側は空白区切りで分割するだけだった。コメント付きの manifest を書いた瞬間、配布先ごとの初期一覧予算の判定が実際のビルド結果とずれる

継続的インテグレーション

.github/workflows/runtime-plugin-validate.ymlskill-frontmatter-check ジョブを追加した。既存ジョブと同じ形式(actions/checkout@v4 + actions/setup-python@v5 + 単一コマンド)。

skill-frontmatter-check:
runs-on: ubuntu-lateststeps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5with:
python-version: "3.x"
- run: python3 scripts/check-skill-frontmatter.py

台帳への反映

docs/specifications/ndf-skill-inventory.md に「frontmatter 見直しの結果」節を追加した。台帳の表は測定日時点の実測値なので書き換えず、発動制御 / 配布先 / トリガ語の変更と見直し前後の実測値を別節として記録している。

deployqa-security-scan の再測定は、台帳が「frontmatter 見直し後の確認項目」として挙げていたもので、トリガ語の宣言と見直しが済んだためこれで実施可能になった。

Test plan

plugins/ndf-*/skills/ は生成物のため直接編集せず、plugins/ndf-shared/ を直してビルドで反映している。

  • python3 scripts/check-skill-frontmatter.pyエラー 0 件 / 警告 0 件(before: エラー 33 件 / 警告 16 件)
  • bash scripts/build-runtime-plugins.sh && bash scripts/build-runtime-plugins.sh --checkruntime plugin generated files are up to date
  • python3 scripts/check-markdown-links.py --root .Markdown local links are valid
  • bash scripts/validate-runtime-plugins.shruntime plugin validation passedclaude plugin validate を含む)
  • python3 scripts/check-skill-frontmatter.py --report で全 29 Skill の description が 146〜288 文字に収まることを確認
  • qa-security-scan が 3 ランタイム、official-skills-autoloader が Claude Code の生成物へ含まれることを確認

release PR: #66

takemi-ohamaand others added 8 commits August 8, 2026 04:14
scripts/check-skill-frontmatter.py を新規作成した。検査は 3 種類に分かれる。
- individual: 仕様準拠 (name / description / compatibility)、安全性 (< >)、
可搬性 (発動条件の有無 / 二重引用符 / 先頭のトリガ語)、運用 (長さ / 行数 /
発動制御の組み合わせ / 未知の項目名)
- aggregate: Codex の初期一覧予算と frontmatter 総量
- cross: Skill 間のトリガ語重複
判定が本質的に近似になる項目 (description 先頭のトリガ語、when_to_use の追加
トリガ、argument-hint の有無) は警告にとどめ、--strict で失敗させる。
現状の 33 Skill に対して 30 件のエラーを検出する。これらは本 PR の
frontmatter 一括見直しで解消する。
- 初期一覧の予算を配布先ごとに manifest から計算する。Claude Code は 1 項目
250 文字で切り詰めてから積む仕様を反映した
- Codex / Kiro は disable-model-invocation と user-invocable を解釈しないため、
明示指示専用と常時注入の Skill は description 自体に意図を書き残す必要がある。
これを portability/explicit-only と portability/inject-only として検査する
- description 先頭のトリガ語判定を「最初の 1 文」から「先頭 160 文字」に緩めた
`plugins/ndf-shared/skills/README.md` の frontmatter 規約に対し、全 29 Skill を
`scripts/check-skill-frontmatter.py` がエラー 0 件 / 警告 0 件で通る状態へ揃えた。
- 発動制御: `merged` / `pr` / `review` / `pr-tests` から `disable-model-invocation`
を外した。いずれも日常的に自然文で依頼されるため。`deploy` / `cherry-pick-pr` /
`statusline` は書き込みを伴うため明示指示専用を維持し、Codex / Kiro が同キーを
解釈しないことを踏まえて `description` に明示指示専用である旨を書いた
- `description`: 全 Skill を「何をするか + Use when + Triggers」の形へ書き直し、
用途とトリガ語を先頭 160 文字へ置いた。`when_to_use` は Claude Code 限定配布の
`official-skills-autoloader` だけに残した。3 ランタイムへ配る Skill のトリガ語を
`when_to_use` へ置くと Codex / Kiro で発動判定に効かないため
- トリガ語: `investigation-rules` の `調査` などの広すぎる語を具体化し、
`playwright-evidence` と `playwright-kit-ops` の `upload_evidence` 重複を解消した
- `paths` を `ml-model-structure`(`analysis/**`)へ、`effort: high` を `review` へ付与
- `deploy` / `cherry-pick-pr` の `argument-hint` から `<` `>` を除去した
- 配布されていなかった `qa-security-scan` を 3 ランタイムへ、
`official-skills-autoloader` を Claude Code へ配布対象として追加した。台帳の
発動改善判定は配布されていない状態では効かないため
- `FRONTMATTER_TOTAL_MAX` を実測 12,145 文字に約 7% の余裕を足した 13,000 で確定した
- `.github/workflows/runtime-plugin-validate.yml` へ検査ジョブを追加した
検査スクリプトの変更(理由つき):
- `ops/argument-hint` を警告から失敗へ変更した。近似判定ではなく機械的に判定でき、
計画(Task 0-7 の検査項目表)でも失敗条件として挙げられているため
- manifest の読み取りで行末の `#` 以降をコメントとして落とすようにした。
`scripts/build-runtime-plugins.sh` の解釈と揃っておらず、コメント付き manifest では
配布先の判定が実際のビルド結果とずれるため
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGejnYyYFuSkQjBhW2KQNy
Task 0-8 (PR #74) の Codex 向け agents/openai.yaml 生成処理を取り込んだ。
本 PR が merged / pr / review / pr-tests から disable-model-invocation を
外したため、再ビルドでこの 4 個の openai.yaml が削除され、生成対象は
明示指示専用を維持する cherry-pick-pr と deploy の 2 個になった。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 1 | codex | REQUEST_CHANGES

発動制御と検査規約の一致に修正が必要です。

Comment threadplugins/ndf-shared/skills/pr/SKILL.md Outdated
Comment threadplugins/ndf-shared/skills/merged/SKILL.md Outdated
Comment threadscripts/check-skill-frontmatter.py Outdated

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 1 | gemini | APPROVE

PR の目的(全 Skill の frontmatter 規約適合と機械検査の導入)に対し、不足や矛盾なく実装されています。

  • CI 検査スクリプト (check-skill-frontmatter.py) が正規表現ベースで軽量に実装されており、外部依存なく GitHub Actions で完結している設計は適切です
  • 不要になった 11 個の Skill 群を plugins/ndf-shared/skills から完全に削除し、playwright-authoringexternal-ai などの新構成に適切に統合しています
  • disable-model-invocation: true を残した破壊的操作 (deploy, cherry-pick-pr) について、同フラグを解釈しない Codex / Kiro 向けに description 内に「明示指示専用」であることを明記し、かつ検査スクリプト側でもそれを必須化している点に安全性が担保されています

上記の設計と実装は妥当であり、後方互換性や安全性を損なう問題は見当たりません。

cross-review round 1 (codex) の指摘 3 件に対応する。
- merged / pr: disable-model-invocation を戻す代わりに、取り消しの難しい
操作(worktree 削除・ブランチ削除・push・PR 作成)の直前に対象を一覧提示
して利用者の同意を得る手順を SKILL.md と description へ固定した。
Codex / Kiro は disable-model-invocation を解釈しないため、安全性の担保を
frontmatter ではなく本文と description に置く
- skills/README.md: 「明示指示専用」の対象を「取り消しが難しく、かつ明示起動が
定着している操作」に限定し、自然文で日常的に依頼される破壊的操作は
「自動発動 + 実行前確認」で守るという選択肢と使い分けの基準を明文化した。
Codex の openai.yaml がビルドで自動生成される旨(Task 0-8 完了)も反映
- check-skill-frontmatter.py: argument-hint の要求を「引数を取る Skill」に
条件化した。判定は frontmatter の arguments / 本文の $ARGUMENTS / 本文の
「引数」への言及のいずれか。根拠はスクリプトのコメントに記載
- ndf-skill-inventory.md: 発動制御の変更表に実行前確認の行を追加
検査: エラー 0 / 警告 0、build --check / markdown links / validate すべて通過
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGejnYyYFuSkQjBhW2KQNy
@takemi-ohama

Copy link
Copy Markdown
ContributorAuthor

cross-review round 1 — 指摘対応サマリー

commit: a1c6b5d

codex から 3 件(すべて major)。全件受理して対応しました。

1 / 2. prmerged の暗黙起動と安全性

disable-model-invocation戻しません。レビュアーが提示したもう一方の選択肢(実行前確認の必須化)を採ります。

根拠(棚卸台帳 docs/specifications/ndf-skill-inventory.md の実測)

Skill起動 計自動明示備考
merged2480248統合元の clean は起動 0 / 機会 251。ブランチ整理は Skill を通らず独自手順で実行されていた
pr1732171自然文での依頼時に Skill が起動せず独自の git 手順で実行されていた

明示指示専用に戻すと、自然文で日常的に依頼されるこの 2 つは Skill を通らない経路が残り、規約が想定する安全手順そのものが使われません。これを直すのが Task 0-7 の目的です。

代わりに入れた担保

  • merged/SKILL.md — 「削除前の同意取得(必須)」節を新設。worktree 削除 / ローカルブランチ削除 / リモートブランチ削除の 3 種すべてで、実行直前に削除対象を一覧提示して同意を得る。同意のない対象は削除しない。提示内容を操作別に表で規定(未コミット変更の有無、未マージコミットの有無、リモートは分離して同意)
  • pr/SKILL.md — 「push / PR 作成前の同意取得(必須)」節を新設。push 先ブランチ・ベース・変更ファイル一覧・コミットメッセージ・既存 PR の有無を提示。明示起動や「コミットして PR を作って」等は依頼自体を同意とみなし、暗黙起動では明示的な同意を得てから push。同意がなければ commit までで停止
  • 両者の description にも確認を取る旨を追記(merged 241 文字 / pr 234 文字。Claude Code の 250 文字切り詰めの内側でトリガ語も残る)

Codex / Kiro は disable-model-invocation を解釈しないため、frontmatter では元々守れません。担保を本文と description に置いたことで 3 ランタイムで同じ安全性が働きます。

規約側の更新(plugins/ndf-shared/skills/README.md

  • 4 分類表の「明示指示専用」の対象を「破壊的操作・外部への書き込み」→「取り消しが難しく、かつ明示起動が定着している操作」へ限定
  • 「取り消しの難しい操作をどちらで守るか」節を新設し、2 つの守り方と使い分け基準を明文化
守り方選ぶ条件
明示指示専用取り消しが難しく、かつ明示起動の運用が定着(自然文での依頼がほぼない)→ deploy / cherry-pick-pr / statusline
自動発動 + 実行前確認取り消しは難しいが日常的に自然文で依頼される。明示指示専用にすると Skill が使われず独自手順で実行される → merged / pr

判断材料は棚卸台帳の実測起動数と明示起動の割合。あわせて Codex の agents/openai.yaml がビルドで自動生成される旨(Task 0-8 完了)へ記述を更新しました。

3. check-skill-frontmatter.pyargument-hint 判定

規約どおり「引数を取るなら」で条件化しました。takes_arguments() の判定材料(根拠はスクリプト内コメント):

  1. frontmatter の arguments
  2. 本文の $ARGUMENTS / ${ARGUMENTS}deploy / fix / plan-to-spec
  3. 本文の引数説明 — 実ファイルの表記が ## 引数review / pr-tests / cross-review)、### 1. 引数・現状確認cherry-pick-pr)、引数に応じて…statusline)と揺れていたため、見出しに限らず本文中の「引数」への言及を拾う。英語表記は一般語と紛れるので見出しに限定

明示指示専用 3 件はいずれも引数を取ると判定され argument-hint を持つため判定結果は不変。引数を取らない明示指示専用 Skill を今後追加しても落ちません。README にも判定材料と「引数の説明は本文に書く」要件を明記しました。

検証

チェック結果
python3 scripts/check-skill-frontmatter.pySkill 29 個 — エラー 0 / 警告 0(frontmatter 合計 12,152 / 13,000 文字)
bash scripts/build-runtime-plugins.sh + --checkup to date
python3 scripts/check-markdown-links.py --root .valid
bash scripts/validate-runtime-plugins.shpassed

plugins/ndf-*/skills/ は生成物のため、共通編集元 plugins/ndf-shared/ を修正しビルドで反映しています。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 2 | gemini | APPROVE

変更内容を確認しました。各ランタイムの発動仕様(短縮動作や判定条件)と検査スクリプトの実装に矛盾はなく、disable-model-invocation 削除に伴う破壊的操作の安全性(実行前確認)も適切に担保されています。追加の修正提案はありません。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 2 | codex | REQUEST_CHANGES

official-skills-autoloader の暗黙起動時インストール安全性と、配布物内で解決できない手動コマンド、実測値のずれを修正してください。

Comment threadplugins/ndf-claude/skills/official-skills-autoloader/SKILL.md Outdated
Comment threadplugins/ndf-claude/skills/official-skills-autoloader/SKILL.md Outdated
Comment threaddocs/specifications/ndf-skill-inventory.md Outdated
cross-review round 2 の指摘 3 件に対応。
- official-skills-autoloader に「インストール前の同意取得(必須)」節を新設。
クローン元 URL / クローン先 / symlink を張る先 / 対象 Skill 名の 4 点を一覧提示して
同意を得てからステップ3 を実行することを必須手順として固定。description と
when_to_use にも確認を取る旨を追記
- 手動管理コマンドとプロジェクト配置の案内を
${CLAUDE_PLUGIN_ROOT}/scripts/install-official-skills.sh へ置き換え。
playwright-authoring / playwright-kit-ops に残っていた配布物で解決できない
plugins/ndf-shared/... の案内も修正
- 規約 (skills/README.md) の「取り消しの難しい操作をどちらで守るか」の適用先を表に整理し、
official-skills-autoloader を「自動発動 + 実行前確認」として追加
- 棚卸台帳の発動制御表に判断理由を追記し、実測値を再計測結果へ更新
(description 最大 296 / Claude 6,036 / Codex 6,473 / frontmatter 12,211)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGejnYyYFuSkQjBhW2KQNy
@takemi-ohama

Copy link
Copy Markdown
ContributorAuthor

cross-review round 2 — 指摘対応サマリー

commit: 95c8f1c

codex から 3 件(major 1 / minor 2)。gemini は APPROVE。全件受理して対応しました。

1. official-skills-autoloader の暗黙起動時インストール [major / 安全性]

本 PR がこの Skill を Claude Code の manifest へ追加して暗黙起動を可能にした結果、外部リポジトリの clone と ~/.claude/skills/ への symlink 作成が同意なしに走りうる状態になっていました。本 PR が作った穴として塞ぎました。

明示指示専用に倒さなかった理由

理由内容
台帳の判定と逆行するこの Skill は 起動 0 回 / 機会 97 回、判定は「発動改善」。明示指示専用にすると機会 97 をそのまま取りこぼし、manifest へ追加した目的そのものが失われる
frontmatter では守り切れないdisable-model-invocation は発動制御であって実行前確認ではない。明示起動時は依然として同意なしに clone と symlink が走る

Claude Code 限定配布のため merged / pr より frontmatter で守る余地はありますが、上記 2 の理由で不十分と判断し、round 1 と同じ「自動発動 + 実行前確認」を採りました。

入れた担保

  • 「インストール前の同意取得(必須)」節を新設。ステップ3 の前に次の 4 点を一覧提示して同意を得ることを必須化

    提示する項目
    対象 Skill 名ステップ1 で特定した名前(複数なら全件)
    クローン元 URLhttps://github.com/anthropics/skills.git (--depth 1)
    クローン先${XDG_CACHE_HOME:-$HOME/.cache}/anthropic-skills(実際に展開したパスを表示)
    symlink を張る先$HOME/.claude/skills/<対象 Skill 名>
  • 提示例を掲載し、「インストールしてよいですか」だけでは確認にならない旨を明記

  • 暗黙起動では提示のうえ明示的な同意を得てから実行。同意がなければインストールせず、その Skill を使わない方法で続けるか中断する

  • 対象指定の明示起動・「公式 Skill を入れて」等は依頼を同意とみなす(それでも 3 パスは提示)

  • 既にインストール済み(ステップ2 が INSTALLED)なら同意取得は不要

  • プロプライエタリ Skill (docx / pptx / xlsx / pdf) ではライセンス制約もあわせて提示

  • ステップ3 の見出しから「自動」を外し、同意なしに実行してはならない旨を直前に明記。冒頭の「インストール作業を意識する必要がありません」も書き換え

  • description に「取得元・書き込み先・対象 Skill を提示して同意を得てから実行する。」、when_to_use に「インストールは同意を得てから実行する。」を追記(description 296 文字 / 運用上限 300)

規約 (plugins/ndf-shared/skills/README.md) — 「取り消しの難しい操作をどちらで守るか」の適用先を表へ整理し、本 Skill を追加。

Skill守り方取り消しの難しい操作判断根拠(台帳の実測)
deploy / cherry-pick-pr / statusline明示指示専用本番デプロイ / 環境ブランチへの push / 設定ファイル書き換え明示起動の運用が定着
merged自動発動 + 実行前確認worktree / ローカル・リモートブランチ削除起動 248(明示 248 / 自動 0)。clean は起動 0 / 機会 251
pr自動発動 + 実行前確認commit / push / PR 作成起動 173(明示 171 / 自動 2)
official-skills-autoloader自動発動 + 実行前確認外部リポジトリの clone、~/.claude/skills/ への symlink 作成起動 0 / 機会 97。台帳の判定は「発動改善」

台帳の「発動制御」表にも本 Skill の行を追加し、明示指示専用を採らなかった理由を記録しました。

2. スクリプトパスが配布物で解決できない [minor / 正確性]

bash scripts/build-runtime-plugins.sh の実行結果を確認したうえで修正しました。scripts/build-runtime-plugins.sh:280copy_tree "$SHARED_DIR/scripts" "$plugin_dir/scripts" により、共通の scripts/ はプラグインルート直下へコピーされます。

$ ls plugins/ndf-claude/scripts/
codex-slack-notify.js ensure-retention.sh install-official-skills.sh
slack-notify.js statusline.sh statusline-switch.sh

3 ランタイムとも同一構成。よって ${CLAUDE_PLUGIN_ROOT}/scripts/install-official-skills.sh で解決できます(本 Skill は Claude Code 限定配布)。SKILL.md の 4 箇所(--scope project / --list / --update / 明示インストール)を置き換え、${CLAUDE_PLUGIN_ROOT} の説明とリポジトリ直接利用時の実パスも併記しました。

grep -rn 'plugins/ndf-shared' plugins/ndf-shared/skills/ で同種の直書きを洗い出し、2 件を併せて修正しました。

箇所問題対応
playwright-authoring/SKILL.mdclaude / kiro にも配布される Skill が plugins/ndf-shared/skills/ を直接参照するよう案内していた「Claude Code / Kiro CLI のプラグインには含まれないため、リポジトリ devbasex/ai-plugins を参照」へ書き換え
playwright-kit-opsGOOGLE_AUTH_SCRIPTS 例(5 箇所)google-auth はどの manifest にも載らず配布物に一切含まれないのに、/path/to/... が clone 先を指すと読み取れない<ai-plugins のパス>/plugins/ndf-shared/skills/google-auth/scripts へ変更し、clone 先を指す旨を明記

残りの plugins/ndf-shared 言及は、執筆規約自体の構成説明・配布方針の記述・テストフィクスチャ・パス解決ロジックのコメントで、利用者向けの実行手順ではないため据え置きました。

3. 台帳の実測値ずれ [minor / ドキュメント]

すべての修正を終えた最後に--report を再実行し、その出力で更新しました。

項目修正前の記載更新後上限
検査エラー / 警告0 / 00 / 00 / —
description 最大288296300
Claude Code 初期一覧6,0296,0368,000
Codex 初期一覧6,4666,4738,000
frontmatter 合計12,14512,21113,000

ご指摘時点の 12,152 との差 +59 は、本ラウンドで description / when_to_use に同意取得の記述を足したためです。初期一覧の合計はご指摘時点から変化していませんが、これは (a) Claude Code が 1 項目を 250 文字で切り詰めてから積むため既に 250 文字超だったこの項目を伸ばしても増えない、(b) Codex の合計は Codex manifest 掲載分のみを数えるため Claude 限定配布の本 Skill を含まない、の 2 点によるものです。読み手が同じ疑問を持つため表の直下に注記しました。

数値を書いた他の箇所も grep で洗い出して整合させました。

  • plugins/ndf-shared/skills/README.md の上限値表: 「実測 12,145 に約 7% の余裕」→「実測 12,211 に約 6% の余裕」
  • scripts/check-skill-frontmatter.pyFRONTMATTER_TOTAL_MAX コメント: 同様に更新

上限 13,000 自体は据え置き。台帳の「見直し前」列は着手前の測定値のため変更していません。

検証

チェック結果
python3 scripts/check-skill-frontmatter.pySkill 29 個 — エラー 0 / 警告 0(Claude 6,036 / Codex 6,473 / Kiro 5,800 / frontmatter 12,211)
bash scripts/build-runtime-plugins.sh + --checkup to date
python3 scripts/check-markdown-links.py --root .valid
bash scripts/validate-runtime-plugins.shpassed

plugins/ndf-*/skills/ は生成物のため、共通編集元 plugins/ndf-shared/ を修正しビルドで反映しています。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 3 | gemini | APPROVE

frontmatter の description 移行、発動制御の変更(同意取得への置き換え)、および check-skill-frontmatter.py による検査ロジックがいずれも規約および安全性の要件を満たしていることを確認しました。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 3 | codex | APPROVE

追加の修正指摘はありません。

@takemi-ohama
takemi-ohama marked this pull request as ready for review August 8, 2026 05:45
@takemi-ohama
takemi-ohama merged commit 9651a6c into release/skill-inventoryAug 8, 2026
7 checks passed
takemi-ohama added a commit that referenced this pull request Aug 8, 2026
Task 0-7 (PR #73) の frontmatter 見直しと、release 側の Skill 統合・削除を
取り込んだ。
- AGENTS.md は Kiro の生成物 (本 PR) と外部 AI 委譲の Skill 名 (release 側の
external-ai 統合) の両方を反映した
- install.sh は本 PR の POLICY_SKILL_FILE と release 側の DEPRECATED_PROMPTS
を両方残した
@takemi-ohama
takemi-ohama deleted the feature/inventory-frontmatter branch August 14, 2026 03:59
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@takemi-ohama