Uh oh!
There was an error while loading. Please reload this page.
feat: Codex 向けに Skill ごとの agents/openai.yaml を生成 (0-8) - #74
Conversation
Codex は Skill ごとの `<Skill 名>/agents/openai.yaml` の `policy.allow_implicit_invocation` で暗黙起動を制御する。配布物に このファイルがなく、`deploy` を含む全 Skill が暗黙起動できる状態だった。 `scripts/build-runtime-plugins.sh` に `write_codex_skill_policies` を追加し、 共有 Skill の frontmatter に `disable-model-invocation: true` を持つものだけへ `agents/openai.yaml` を生成する。`argument-hint` を持つ場合は `interface.default_prompt` へ対応付ける。 生成は Codex 配布物の同期処理内(`sync_skills` の codex-runtime 分岐)で 一時ディレクトリに対して行うため、対象から外れた Skill の生成物は 配布ディレクトリごと差し替えられて残らない。`--check` でも差異を検出できる。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AGejnYyYFuSkQjBhW2KQNy
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | codex | REQUEST_CHANGES
Codex配布物として agents/openai.yaml を追加する変更ですが、生成物が公式パッケージ検証要件の必須 interface.display_name / interface.short_description を満たしていません。生成処理と8件の生成物をそろえて修正してください。
Uh oh!
There was an error while loading. Please reload this page.
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | gemini | REQUEST_CHANGES
Codex 向けの暗黙起動抑止が実装されていますが、これにより既存ユーザーの呼び出し方が変わる可能性があるため、ユーザーへの影響(移行手順など)に関するドキュメントの更新が必要です。
Uh oh!
There was an error while loading. Please reload this page.
`disable-model-invocation: true` の Skill 8 個は Codex の skill 一覧に 載らなくなるが、Codex には Claude Code の slash command に相当する 明示起動口がないため、起動方法が利用者に伝わらない状態だった。 `plugins/ndf-codex/README.md` に以下を追記する。 - 抑止対象の Skill 一覧 - 暗黙起動されなくなること - 起動するには SKILL.md のパスまたは Skill 名を示して読ませること - codex-cli 0.146.1 での実機検証結果 (抑止 / 対照 / 名前起動 / パス起動) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AGejnYyYFuSkQjBhW2KQNy
takemi-ohama
commented
Aug 8, 2026
🔧 /ndf:fix | cross-review round 1 対応完了未 Resolve だった 2 スレッドに対応しました。commit: 対応サマリ
実機検証(codex-cli 0.146.1 / gpt-5.5)推測を避けるため、
ドキュメント追記内容
品質チェック(すべて pass)push 前の CI( |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | codex | REQUEST_CHANGES
Codex の明示起動方法に関する README の移行案内が公式仕様と食い違っているため、修正してください。
Uh oh!
There was an error while loading. Please reload this page.
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | gemini | APPROVE
生成処理の冪等性・--check 対応を含め、要件がシンプルかつ確実に実装されています。
Codex 向けの移行手順について 1 点のみ補足コメントを残しました。修正は任意 (minor) とします。
Uh oh!
There was an error while loading. Please reload this page.
- `allow_implicit_invocation: false` でも `$<skill 名>` の明示起動は動作することを 実機検証 (codex-cli 0.146.1) で確認し、README を「暗黙起動のみ抑止」へ修正 - 起動経路ごとの挙動を表で整理し、推奨を `$<skill 名>` に変更 - プラグイン Skill はワークスペース外のキャッシュに置かれるため、曖昧な ファイル探索依頼は失敗しうる点を注意喚起として追記し、実体パスの形式を明記 - base ブランチ取り込みで削除された clean / sync-main の openai.yaml を再生成で除去 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AGejnYyYFuSkQjBhW2KQNy
takemi-ohama
commented
Aug 8, 2026
🔧 /ndf:fix | cross-review round 2 対応完了未 Resolve だった 2 スレッドに対応しました。commit: 対応サマリ
あわせて CI 赤の原因も解消しました(下記)。 実機検証(codex-cli 0.146.1 / gpt-5.5)
②のセッションログ( {"role": "user", "content": [{"type": "input_text", "text":
"<skill>\n<name>probe-explicit</name>\n<path>.../.agents/skills/probe-explicit/SKILL.md</path>\n---\nname: probe-explicit\n...\n</skill>"}]}→ また codex バイナリの埋め込み文字列に ドキュメント修正内容( |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | gemini | APPROVE
実機検証に基づく Codex 固有の挙動(明示起動の仕様やプラグインキャッシュパスの解決)が正確にドキュメント化されており、不要ファイルの除去によるビルド処理の冪等性も保たれていることを確認しました。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | codex | COMMENT
PR 本文が head の最終状態とずれています。現在の差分では暗黙起動抑止対象は 6 件で、clean / sync-main の openai.yaml は削除されていますが、PR 本文は 8 件・両 Skill を含む説明のままなので、マージ前に本文の変更内容と検証説明を head に合わせて更新してください。
Uh oh!
There was an error while loading. Please reload this page.
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 個になった。
* chore: feature/inventory-frontmatter の Draft PR 作成 * Feat: Skill frontmatter の規約検査スクリプトを追加 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 一括見直しで解消する。 * Feat: 検査スクリプトを規約の最終形へ合わせる - 初期一覧の予算を配布先ごとに manifest から計算する。Claude Code は 1 項目 250 文字で切り詰めてから積む仕様を反映した - Codex / Kiro は disable-model-invocation と user-invocable を解釈しないため、 明示指示専用と常時注入の Skill は description 自体に意図を書き残す必要がある。 これを portability/explicit-only と portability/inject-only として検査する - description 先頭のトリガ語判定を「最初の 1 文」から「先頭 160 文字」に緩めた * Feat: 全 Skill の frontmatter を規約へ揃え検査を CI へ組み込む (0-7) `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 * Merge release/skill-inventory into feature/inventory-frontmatter 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 個になった。 * fix: merged / pr に実行前確認を必須化し argument-hint 判定を条件化 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 * Fix: official-skills-autoloader にインストール前の同意取得を必須化しパスを配布物基準へ修正 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 --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
概要
Task 0-8「Codex の規約対応」。Codex は Skill ごとの
<Skill 名>/agents/openai.yamlにあるpolicy.allow_implicit_invocationで暗黙起動を制御する(Build skills)。Codex 配布物にこのファイルが 1 つもなく、deployを含む全 Skill が暗黙起動できる状態だった。scripts/build-runtime-plugins.shに生成処理を追加し、共有 Skill の frontmatter がdisable-model-invocation: trueを持つものだけへagents/openai.yamlを出力する。変更内容
scripts/build-runtime-plugins.shwrite_codex_skill_policiesを追加し、Codex 配布物の同期(sync_skillsのcodex-runtime分岐)からrewrite_codex_skill_pathsの直後に呼ぶ。SKILL.mdfrontmatter を読み、disable-model-invocation: trueの Skill にのみ生成するargument-hintを持つ場合はinterface.default_promptへ対応付けるagents/があって空になる場合はディレクトリごと削除する--checkの差分比較と、対象から外れた Skill の生成物削除の双方が既存の導線に乗る生成内容(例:
deploy):生成対象の Skill(8 件)
Codex マニフェスト(
plugins/ndf-shared/manifests/codex-skills.txt)とdisable-model-invocation: trueの積集合。共有側でdisable-model-invocation: trueを持つskill-stats/statuslineは Codex マニフェストに載っていないため対象外。interface.default_prompt(argument-hint由来)cherry-pick-pr<base-branch> (例: qa/staging, release/v2)cleandeploy<env-branch> (例: qa/staging, release/v2)merged[PR番号]pr[--draft] [base-branch] or [commit-message]pr-tests[PR番号]reviewsync-main生成処理はデータ駆動なので、並行タスクで
disable-model-invocationの集合や manifest が変わればビルドで追随する。Codex CLI 実機検証
codex-cli 0.146.1 で検証した(2026-08-08)。
スキーマと配置の検証(先行実施分)
一時ディレクトリの
.agents/skills/<name>/SKILL.mdをcodex execに読ませ、初期 skill 一覧への出現を確認した。agents/openai.yamlpolicy.allow_implicit_invocation: trueunknown_section.some_key)policy.allow_implicit_invocation: false+interface.default_prompt未知キーだけの yaml では除外されないため、
policyが実際に解釈されている。本 PR の生成物での再確認
本 PR がビルドした
plugins/ndf-codex/skills/deploy/agents/openai.yamlをそのままコピーし、名前衝突を避けた probe Skill 2 個で確認した(zetaprobeon= 生成物あり /zetaprobeoff= なし)。生成物を置いた
zetaprobeonだけが初期一覧から外れた。補足: 一覧から外れた Skill を名前だけで起動するよう依頼すると、Codex は「利用可能なスキル一覧に無い」として起動を拒否した。ファイル探索を許可した依頼(
zetaprobeon skill を実行してください。必要ならファイルを探して読んで構いません。)では.agents/skills/zetaprobeon/SKILL.mdを読んで本文どおりZETA-ON-MARKERを出力した。Codex には Claude Code の slash command に相当する明示起動口がないため、除外した Skill の起動は「利用者が Skill 名やパスを示して読ませる」経路になる。interface.default_promptが引数の既定値として実際に使われるかは未確認。付けても一覧除外の挙動は変わらないことのみ確認している。--checkの差異検出確認生成物を手で書き換えてから
--checkを実行し、差異が検出されること(非ゼロ終了)を確認した。元に戻したあと
--checkはruntime plugin generated files are up to dateに復帰した。生成対象でない Skill に手で
agents/openai.yamlを置いた場合も同様に--checkが非ゼロ終了し、bash scripts/build-runtime-plugins.shの再実行でagents/ごと削除されることを確認した。Test plan
bash scripts/build-runtime-plugins.sh— 生成物を同期(8 件のopenai.yamlを出力)bash scripts/build-runtime-plugins.sh --check—runtime plugin generated files are up to date--checkが非ゼロ終了 → 復元後に再度成功agents/openai.yamlが--checkで検出され、再ビルドで削除されるbash scripts/validate-runtime-plugins.sh—runtime plugin validation passedpython3 scripts/check-markdown-links.py --root .—Markdown local links are validrelease PR: #66