Uh oh!
There was an error while loading. Please reload this page.
fix: Kiro の導入方式を修正しエージェント定義を有効にする (0-9) - #75
Conversation
install.sh が生成していた .kiro/agents/default.json は Kiro の既定エージェント にならず、組み込みの kiro_default が使われ続けていた。結果として起動時フック、 終了通知フック、外部 AI 連携設定、resources の明示読み込みがすべて無効だった。 - エージェント名を ndf にし、完了メッセージを kiro-cli chat --agent ndf に修正 - --set-default オプトインを追加。現在の既定を表示し確認を取ってから切り替える - resources から skill://.kiro/skills/**/SKILL.md を削除(組み込みと二重登録) - 常時指示を .kiro/steering/ndf-policies.md へ移し、resources から file://.kiro/skills/ndf-policies/SKILL.md を削除 - --scope workspace|global(既定 workspace)を追加 - 既存の .kiro/agents/default.json を検出したらバックアップし移行手順を案内 - README に allowed-tools が事前承認にならないこと(kirodotdev/Kiro#6055)と kiro-cli 2.16.1 での実機検証結果・占有率の実測値を記録 - runtime smoke に assert-kiro-agent.sh を追加。agent list への ndf の出現、 --set-default による既定の切り替え、文脈ファイルの合計量を検査する 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
--project と --set-default の併用時に対象 workspace 外で Kiro CLI を実行する経路があり、明示した導入先の ndf エージェントを既定化できないリスクがあります。
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
ndf-policies が Skill と steering の両方として Kiro のコンテキストに読み込まれる重複問題があります。該当箇所へのインラインコメントの修正アクションを実施してください。
Uh oh!
There was an error while loading. Please reload this page.
cross-review round 1 の指摘 2 件に対応する。 - `--set-default` の `kiro-cli` 呼び出しを導入先で実行する。`kiro-cli` は workspace agent を cwd 配下の `.kiro/agents/` からのみ検出するため、 `--project` で別ディレクトリへ導入すると `agent list` / `set-default` が 対象を見つけられなかった。`workspace` は `--project` のパス、`global` は `$HOME` を実行ディレクトリにする。 - `set-default` は agent 未検出でも終了コード 0 を返すため、実行後に `agent list` で反映を検証し、切り替わっていなければ失敗させる。 - `ndf-policies` を `.kiro/skills/` へ symlink しない。Kiro は `.kiro/skills/*/SKILL.md` と `.kiro/steering/**/*.md` の両方を読み込むため 二重注入になっていた。manifest には steering の生成元として残す。 - `assert-kiro-agent.sh` に回帰検査を追加。`.kiro/skills/ndf-policies` の 不在を検査し、`--set-default` の検査は `PROJECT_DIR` 以外の cwd から実行する。 - 占有率を同一プロジェクトで 4 構成測り直し、README を更新する。 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
🔧 cross-review round 1 の修正対応未 Resolve だった 2 件(いずれも 修正コミット:
1. |
| 構成 | 一致ファイル数 | ndf-policies の注入回数 | 占有率 | 合計文字数 |
|---|---|---|---|---|
変更前 default エージェント | 26 | 2 | 0.6% | 125,723 |
本 PR 初版 ndf エージェント | 26 | 2 | 0.6% | 125,746 |
修正後 ndf エージェント | 25 | 1 | 0.6% | 125,562 |
参考: 組み込み kiro_default | 25 | 1 | 0.6% | 125,562 |
二重注入は解消し、ファイル数も 26 → 25 に減りました。ただし ndf-policies/SKILL.md は 184 文字しかないため削減量は -184 文字で、/context show の表示(0.1% 刻み)は 0.6% のまま変わりません。この点は README と PR 本文にも明記しました。初版に記載していた「0.2% / 112,598 文字」は測定用プロジェクトが異なり比較できないため、上表へ差し替えています。
回帰検査の追加(tests/runtime-smoke/assertions/assert-kiro-agent.sh)
.kiro/skills/ndf-policiesが存在しないことを検査する--set-defaultの検査をPROJECT_DIR以外の cwd(ARTIFACT_DIR)から実行するよう変更する
検証結果
| 検証 | 結果 |
|---|---|
bash -n plugins/ndf-kiro/install.sh / assert-kiro-agent.sh | OK |
bash scripts/build-runtime-plugins.sh → --check | OK(差分なし) |
python3 scripts/check-markdown-links.py --root . | OK |
bash scripts/validate-runtime-plugins.sh | OK |
bash scripts/runtime-smoke-test.sh --runtime kiro | OK(runtime smoke tests passed: kiro。文脈ファイル 23 件 / 112,404 文字) |
ホスト実機で assert-kiro-agent.sh workspace(kiro-cli 2.16.1) | OK(default agent before: kiro_default → after: ndf → restored: kiro_default) |
--project 別ディレクトリ導入 + --set-default | OK(修正前は失敗、修正後は成功) |
--scope global --set-default(実 $HOME) | OK |
既定エージェントは復旧済みです。 検証で ndf に切り替えた後、kiro-cli agent set-default kiro_default で戻し、~/.kiro/settings/cli.json をバックアップと diff で一致確認、find ~/.kiro -maxdepth 2 の比較でツリーが検証前と一致することも確認しました。global scope 検証で生成した ~/.kiro/{agents/ndf.json,skills/*,steering,prompts} も撤去済みです。
実行できなかった項目
- コンテナ CI での
agent list/--set-default検査:tests/runtime-smoke/Containerfile.kiroが kiro-cli の導入を|| trueで握りつぶすためコンテナに kiro-cli が入らず、assert-kiro-agent.shは該当検査を skip します(kiro-agent-workspace.logにkiro-cli agent checks skipped: kiro-cli is not available)。この部分は上表のとおりホストの kiro-cli 2.16.1 で実機確認しました。
CI は push 前時点で全 6 チェック SUCCESS でした。push 後の再実行は待っていません。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | gemini | REQUEST_CHANGES
Kiro エージェントの切り替え・設定構造のリファクタリングとして一貫しており、ドキュメント・テスト・マイグレーション手順も適切に揃っています。1 点だけ、テスト復旧時のディレクトリ指定漏れがあり、テスト環境外へ設定ファイルが漏出する(実行元に副作用を残す)可能性があるためインラインで指摘しました。修正をお願いします。
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 | codex | REQUEST_CHANGES
移行手順で .kiro/agents/ndf.json へ写した MCP / 独自設定を、後続の installer 再実行が保持できるようにしてください。
Uh oh!
There was an error while loading. Please reload this page.
cross-review round 2 の指摘 2 件に対応する。 - install.sh は .kiro/agents/ndf.json をテンプレートから再生成する際に、 既存ファイルの利用者管理の設定(mcpServers エントリ、独自フック、独自 トップレベルキー)をマージして引き継ぐ。上書きするのはテンプレート由来の キーと、フラグで切り替える hooks.stop / mcpServers.codex だけにする。 - assert-kiro-agent.sh の既定エージェント復旧を PROJECT_DIR から実行し、 復旧できたことを agent list で検証する。途中の検査が落ちても復旧するよう trap EXIT で実行する。 - 再インストールで利用者管理の設定が失われないことの回帰検査を追加する。 kiro-cli に依存しないため CI のコンテナでも実行される。 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
🔧 cross-review round 2 の修正対応未 Resolve だった 2 件(いずれも 修正コミット:
1. 既定エージェント復旧の実行位置( |
| 区分 | キー | 再実行時の扱い |
|---|---|---|
| installer 管理 | name / description / tools / resources / hooks.agentSpawn | テンプレートから再生成(上書き) |
| installer 管理 | hooks.stop | --with-slack の有無で生成・削除 |
| installer 管理 | mcpServers.codex | --with-codex の有無で生成・削除 |
| 利用者管理 | 上記以外の mcpServers エントリ・hooks 項目・トップレベルキー | 既存ファイルから引き継ぐ |
実機確認(kiro-cli 2.16.1 / 認証済みホスト)
| 検証 | 結果 |
|---|---|
再インストール後の mcpServers | ["bigquery"](env の中身も含め保持)。ログに 利用者管理の設定を引き継ぎました: hooks.userPromptSubmit, mcpServers.bigquery, toolsSettings |
再インストール後の hooks | ["agentSpawn", "stop", "userPromptSubmit"](installer 管理分は再生成、独自フックは保持) |
--with-codex あり / なしの再実行 | ["bigquery", "codex"] → ["bigquery"](codex だけ消える) |
既存 ndf.json が壊れた JSON | WARN を出してテンプレートから再生成。.bak は残る |
workspace エージェントを既定にして、無関係な cwd から assert-kiro-agent.sh を実行 | exit 0。before: hostprobe → after: ndf → restored: hostprobe を記録し、agent list の * も hostprobe に戻った |
set-default の保存先 | ~/.local/share/kiro-cli/data.sqlite3。cwd に .kiro/settings.json は生成されない |
副作用の確認と掃除: .kiro の類は実行元 cwd(/tmp)・worktree ルート・/work/ai-plugins のいずれにも生成されていませんでした。~/.kiro と ~/.aws は検証前後の find 比較で完全一致です。検証で変化した既定エージェントは kiro-cli agent set-default kiro_default で戻し、agent list の * が kiro_default であることを確認済みです。検証用ディレクトリも削除しました。
回帰検査
assert-kiro-agent.sh に、ndf.json へ利用者管理の設定を注入 → install.sh 再実行 → 保持を検査する手順を追加しました。kiro-cli に依存しないため、kiro-cli が入らない CI コンテナでも実行されます。
検証結果
| 検証 | 結果 |
|---|---|
bash -n plugins/ndf-kiro/install.sh | OK |
bash -n tests/runtime-smoke/assertions/assert-kiro-agent.sh | OK |
bash scripts/build-runtime-plugins.sh → --check | OK(generated files are up to date) |
python3 scripts/check-markdown-links.py --root . | OK |
bash scripts/validate-runtime-plugins.sh | OK(runtime plugin validation passed) |
bash scripts/runtime-smoke-test.sh --runtime kiro | OK(runtime smoke tests passed: kiro。文脈ファイル 23 件 / 112,404 文字、reinstall preserved user-managed agent settings) |
ホスト実機での install.sh 再インストール検証 | OK(上表) |
CI は push 前時点で全 6 チェック SUCCESS でした。push 後の再実行は待っていません。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | gemini | APPROVE
PRの目的と変更範囲は一貫しており、利用者設定のマージ(冪等性)とテストの確実な復旧が正しく実装されています。
Kiro CLIの実機挙動や占有率の測定結果もドキュメントに詳細に記録され、旧版からの移行手順の案内も十分です。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | codex | REQUEST_CHANGES
仕様ドキュメントのテスト観点に、通常インストール時の生成物と矛盾する記述が1件あります。
Uh oh!
There was an error while loading. Please reload this page.
mcpServers はテンプレートに無く、--with-codex 指定時または既存の利用者管理設定を 引き継いだ場合にだけ .kiro/agents/ndf.json に現れる。必須のテスト観点にすると 通常インストールと矛盾するため、条件付きの記述へ改めた。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 4 | codex | REQUEST_CHANGES
Kiro 移行時の既存 symlink 残存と global scope の検証抜けを修正してください。
Uh oh!
There was an error while loading. Please reload this page.
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 4 | gemini | APPROVE
エージェント定義の有効化、生成処理の冪等性、および既存利用者の移行手順について確認しました。Kiro CLI の仕様に合わせた適切な修正です。
例外ハンドリングの観点で 2 点、マイナーな修正提案をインラインに残しました。
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
- install.sh: 旧 installer が別 checkout から張った .kiro/skills/ndf-policies の symlink / 実体を、リンク先に関係なく削除してから skip する。旧導入済みプロジェクト でも steering との二重注入が再インストール 1 回で解消される - install.sh: 旧 default.json が JSON 配列でも AttributeError にせず、壊れた JSON と 同じ「NDF 生成物ではない」扱いへ倒す - install.sh: set -e 下で read が EOF を受けてもクラッシュせず [y/N] の N へ倒す - assert-kiro-agent.sh: global scope でも agent list と --scope global --set-default --yes 後の既定切替を検査する(復旧は既存の trap に載せる) - assert-kiro-agent.sh: 旧 ndf-policies symlink が再インストールで消えることを workspace / global 両方で検査する(kiro-cli 非依存なので CI でも動く) - README: 旧 symlink の掃除挙動を移行手順に追記 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
cross-review round 4 対応サマリ未 Resolve だった 4 件すべてを修正し、実機(kiro-cli 2.16.1)で確認しました。修正コミット: 対応内容
件数: critical 0 / major 2 / minor 2 / nit 0、deferred 0 / rejected 0。4 件とも妥当な指摘で、重要度の再判定でも変更なしと判断しました。 追加で入れたもの
実機確認
後始末: 検証で書き換えた既定エージェントは 検証結果
実行できなかった項目
再レビューをお願いします。 |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 5 | codex | REQUEST_CHANGES
移行時の削除処理に修正必須の問題があります。旧 symlink だけを安全に掃除し、実ディレクトリを破壊しないようにしてください。
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 5 | gemini | APPROVE
要求された観点(3 ランタイムの記述正確性、Kiro のエージェント生成処理の冪等性と --check 差異検出、移行手順の正確性)を重点的に確認しました。
生成処理における利用者管理設定(mcpServers 等)の保持機構、ドキュメントの記述、およびマイグレーションのテストカバレッジが共に正しく実装されています。--check における差異検出や、ダングリング symlink の処理などエッジケースも正しく処理されていることを確認しました。修正点はありません。
rm -rf は .kiro/skills/ndf-policies が実体のディレクトリやファイルだった場合に 中身ごと消してしまい、README の「削除するのはリンク自体だけ」とも矛盾していた。 - 削除対象を [ -L ] のシンボリックリンクだけに限り rm -f で外す - 実体だった場合は削除せず、二重注入の理由と手動対応を促す警告を出す - README に実体だった場合の扱いを追記
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 6 | codex | APPROVE
修正必須の新規指摘はありません。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 6 | gemini | REQUEST_CHANGES
既存利用者の移行手順(default.json → ndf.json)について 1 点、自動化による体験向上の余地があるため修正を提案します。
現状は利用者への手動案内のみとなっていますが、Step 5 に既に組み込まれている設定マージの仕組みを活用することで、移行漏れなく安全に自動引き継ぎが可能です。
Uh oh!
There was an error while loading. Please reload this page.
旧版 installer が生成した .kiro/agents/default.json の移行を利用者の手作業に 委ねていたため、移行漏れが起きうる状態だった。NDF 生成物と判定でき、かつ 移行先が未作成のときに限り ndf.json へ移動し、Step 5 の既存マージ処理へ渡す。 - NDF 生成物 + ndf.json なし: default.json を ndf.json へ mv(.bak は残す)。 利用者が追記した mcpServers / hooks / 独自キーは Step 5 のマージで保持される - NDF 生成物 + ndf.json あり: 上書きになるため移行しない - NDF 生成物と判定できない default.json: 利用者の設定を壊すため移行しない - --dry-run: 従来どおり書き込みなし。旧設定を検出したことだけ表示する 移行直後は default.json.bak が同内容のバックアップになるため、ndf.json.bak は 作らない。 回帰テストは kiro-cli 非依存の形で assert-kiro-agent.sh に追加した。 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
cross-review round 6 の対応まとめ未 Resolve だった 1 件( 対応内容旧
移行直後は 実機確認(kiro-cli 2.16.1 導入済みホスト、一時ディレクトリ)
テスト / ドキュメント
検証結果
対応件数: major 1 件(修正・Resolve 済み) / deferred 0 件 / rejected 0 件 |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 7 | codex | APPROVE
修正必須の新規指摘はありません。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 7 | gemini | APPROVE
PR全体の設計は妥当です。1点だけ、移行先が既に存在する場合のコンソール案内についてインラインでコメントしました。
Uh oh!
There was an error while loading. Please reload this page.
移行しない分岐の案内が default.json だけを消す形になっており、NDF 生成物と 判定できない場合の案内 (.bak も含めて削除) と揃っていなかった。利用者の環境に 不要なバックアップが残り続けるのを防ぐため、両方を挙げる形へ統一した。
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
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 8 | gemini | APPROVE
PRの目的と変更範囲は一貫しており、冪等性や既存環境からの移行(ndf.json への設定マージ・ndf-policies の重複排除)が適切に実装・テストされていることを確認しました。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 8 | codex | REQUEST_CHANGES
移行時の既存設定判定と既存 JSON の型検証に修正必須の問題があります。
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
- 旧 NDF 生成物の判定を description の部分一致から、旧テンプレート固有の description 完全一致 + (resources の skill:// 指定 または agentSpawn フックの CLAUDE.ndf.md 検査) の組み合わせへ変えた。NDF 用に自作した default エージェントをテンプレートで上書きしてしまう問題を防ぐ - 既存 ndf.json の hooks / mcpServers が dict 以外だと .items() で installer が 例外終了していた。壊れた JSON と同じく警告して引き継ぎ対象から外す
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 9 | gemini | APPROVE
JSON の型違反(配列や文字列など)による AttributeError を防ぐ型チェックと、旧インストーラの生成物判定の厳密化が適切に行われていることを確認しました。既存の有効な設定を意図せず上書き・破壊するリスクが軽減されており、実装として問題ありません。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 9 | codex | REQUEST_CHANGES
旧 default.json の自動移行条件について、実装・テスト・README の不整合があります。
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
旧 NDF 生成物の判定を厳密化した際に、動作確認テストの fixture と README の 説明が追随していなかった。 - fixture を旧 default.json.template と同じ description / resources / agentSpawn フックを持つ形にし、NDF 生成物ケースと利用者自作ケースを 引数で切り替える。both / dry-run のケースも NDF 生成物側へ揃えた - README の自動移行の条件を実装(description 完全一致 + 旧 resources または 旧 agentSpawn フック)と一致させた fixture を利用者自作側へ差し替えると runtime-smoke-test.sh --runtime kiro が exit 1 になることを確認済み(検査が実際に効いている)。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 10 | codex | APPROVE
追加で修正必須の指摘はありません。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 10 | gemini | APPROVE
Kiro エージェント名の ndf への切り替えとそれに伴う自動移行ロジック、scripts/build-runtime-plugins.sh でのポリシー生成の冪等性、自動テストの拡充など、すべての対応が適切に実装されていることを確認しました。
MCP インストーラーによる default.json への出力という制約に対する利用者への案内もドキュメントへ明記されており、既存利用者の移行手順についても懸念はありません。
Uh oh!
There was an error while loading. Please reload this page.
Summary
install.shが生成する.kiro/agents/default.jsonは Kiro の既定エージェントにならず、組み込みのkiro_defaultが使われ続ける。結果として起動時フック、終了通知フック、外部 AI 連携設定、resourcesの明示読み込みがすべて無効だった(kiro-cli 2.16.1 で確認)。ndfにし、起動方法をkiro-cli chat --agent ndfとして案内する--set-defaultを追加し、指定時のみ既定を切り替える。実行前に現在の既定を表示し、対話端末では確認を取る(非対話時は--set-defaultの明示指定を承認とみなす。-y/--yesで確認を省略できる)resourcesからskill://.kiro/skills/**/SKILL.mdを削除する。組み込みエージェントが同じファイルを既に読むため二重登録になっていた.kiro/steering/ndf-policies.mdへ移す。steering はエージェント選択に依存しない。内容はplugins/ndf-shared/skills/ndf-policies/SKILL.mdから生成するため、二重管理にならない--scope workspace|global(既定workspace)を追加する.kiro/agents/default.jsonを検出したらバックアップし、旧 NDF 生成物かどうかを判定して移行手順を案内するallowed-toolsが事前承認にならないこと(kirodotdev/Kiro#6055)を README に明記するtests/runtime-smoke/assertions/assert-kiro-agent.shを追加し、scripts/runtime-smoke-test.shが駆動する Kiro アダプタから workspace / global の両スコープで呼ぶエージェント名の変更に伴い、既存プロジェクトは再インストールが必要。手順は
plugins/ndf-kiro/README.md「旧バージョンからの移行」に記載した。動作確認
kiro-cli 2.16.1 / 2026-08-08 / 認証済みホスト環境で実施。
install.sh実行後kiro-cli agent listにndfが現れるndf Workspace NDF統合開発エージェント(Kiro CLI用)kiro-cli chat --agent ndfで起動時フックが動作する[NDF] CLAUDE.ndf.md が検出されました…が文脈へ注入された。kiro_defaultではNONEが返り注入されないinstall.sh --set-defaultで既定がndfに切り替わるagent listの*がndfへ移動し、素のkiro-cli chatでも起動時フックが動いた。確認後kiro-cli agent set-default kiro_defaultで復旧し、~/.kiro/settings/cli.jsonもバックアップから復元済みdocker-container-access/SKILL.mdを自ら読みに行ったinstall.sh --scope globalで~/.kiro/へ配置される~/.kiro/{skills,steering,prompts,agents}が生成され、プロジェクト外でもGlobalとして一覧に出た。検証後に撤去し、find比較でホームの状態が検証前と一致することを確認.kiro/steering/ndf-policies.mdがエージェント選択に依存せず参照されるkiro_defaultの/context showにも.kiro/steering/**/*.mdの一致として現れた占有率の before / after
kiro-cli chat --agent <名前> --no-interactive '/context show'を kiro-cli 2.16.1 で実行。測定用プロジェクトに本リポジトリのAGENTS.md/README.mdを置き、install.sh --project <測定用ディレクトリ>で配布物(Skill 23 個)を導入した同一プロジェクトで 4 構成すべてを測定した。ndf-policiesの注入回数defaultエージェントresources+ Skill)ndfエージェントndfエージェントkiro_defaultresourcesの二重登録を解消しただけではファイル数が 26 のまま減らなかった(steering が 1 件増えるため)。cross-review round 1 の指摘を受けてndf-policiesを.kiro/skills/へ symlink しない変更を加え、はじめて 26 → 25 に減った。ただし占有率の表示は 0.6% のまま変わらない。
ndf-policies/SKILL.mdは 184 文字しかなく、削減量は 125,746 → 125,562 の -184 文字にとどまる(差分は SKILL.md の全文と一致)。/context showの表示は 0.1% 刻みのため表示上の差にならない。重複解消の目的は表示上の占有率低減ではなく、同じ指示が 2 回注入される状態の解消である。初版 PR に記載した「0.2% / 112,598 文字」は測定用プロジェクトの
AGENTS.md/README.mdが異なるため上表と比較できない。上表は 4 構成すべてを同一プロジェクトで測り直した値に差し替えた。同じ理由で、issues/ndf-development-skills/03-runtime-conformance.mdが記録した「0.1% → 0.2%」(Skill 28 個時点)とも直接比較できない。実行できなかった項目
agent list/--set-defaultの検査:tests/runtime-smoke/Containerfile.kiroは kiro-cli の導入を|| trueで握りつぶしており、コンテナに kiro-cli が入らない。assert-kiro-agent.shはkiro-cliが無い場合に該当検査を skip する(kiro-agent-workspace.logにkiro-cli agent checks skipped: kiro-cli is not availableを記録)。この 2 項目は上表のとおりホスト環境の kiro-cli 2.16.1 で確認した。コンテナ側は定義ファイルと文脈ファイル総量の静的検査のみ実施している。既知の未対応
Kiro 用 MCP プラグインの installer(
plugins/mcp/kiro/*/install.sh)は.kiro/agents/default.jsonを更新するため、ndf.jsonには反映されない。これは変更前も同様にdefaultエージェント自体が選択されず無効だったため、本 PR による退行ではない。回避策(mcpServersの写し替え)をplugins/ndf-kiro/README.mdとdocs/specifications/runtime-plugin-distribution.mdに記載した。cross-review round 2 の対応で installer が写し替え済みの設定を保持するようにしたため、写し替えは一度だけで済む。出力先の統一は本タスクの対象外。docs/specifications/ndf-skill-inventory.md(棚卸台帳)は並行する PR #67 で作成中で本ブランチには存在しないため、検証結果はplugins/ndf-kiro/README.md「実機検証の記録」に記載した。台帳への転記は Task 0-10 に委ねる。cross-review round 1 の対応
--set-defaultの実行位置(install.sh):kiro-cliは workspace エージェントを cwd 配下の.kiro/agents/からのみ検出するため、--projectで別ディレクトリへ導入するとagent list/set-defaultが対象を見つけられなかった(Failed to set default agent: No agent with name ndf foundを実測)。実行ディレクトリを導入先(workspaceは--projectのパス、globalは$HOME)に固定した。さらにset-defaultはエージェント未検出でも終了コード 0 を返すため、実行後にagent listで反映を検証し、切り替わっていなければ失敗させる。ndf-policiesの二重注入(install.sh): Kiro は.kiro/skills/*/SKILL.mdと.kiro/steering/**/*.mdの両方を文脈へ読み込むため、.kiro/skills/への symlink をやめて steering のみにした。plugins/ndf-shared/manifests/kiro-skills.txtには残す。install.shがplugins/ndf-kiro/skills/ndf-policies/SKILL.mdを steering の生成元として読むためで、manifest から外すと steering を生成できなくなる。user-invocable: falseの Skill であり、内容は steering として常時読み込まれるため機能低下はない。assert-kiro-agent.shに.kiro/skills/ndf-policies不在の検査を追加し、--set-defaultの検査をPROJECT_DIR以外の cwd から実行するよう変更した。cross-review round 2 の対応
既定エージェント復旧の実行位置(
assert-kiro-agent.sh): 復旧のkiro-cli agent set-defaultが実行元 cwd で動いていた。実機で確認したところ副作用の形は指摘と異なり、cwd に.kiro/settings.jsonは生成されず、既定エージェントは~/.local/share/kiro-cli/data.sqlite3に保存されるマシン全体の設定だった。実害は復旧の失敗のほうで、before_defaultが対象プロジェクト限定の workspace エージェントだと別 cwd からは検出できず、しかもset-defaultが終了コード 0 を返すため、テストは成功したままマシンの既定を書き換えて終わっていた。復旧をPROJECT_DIRから実行し、agent listで戻ったことを検証し、途中の検査が落ちても戻るようtrap EXITに載せた。同ファイル内のkiro-cli呼び出しは全件確認し、他に同種の問題はなかった。再インストールによる
mcpServersの消失(install.sh/ README): 提示された選択肢のうち (a) installer が既存ndf.jsonの利用者管理設定を保持して再生成する を採った。(b)(手順として明記するだけ)にしなかった理由は次の 4 点。install.shは Skill 更新のたびに再実行する運用のため、写し替えが必要になる頻度が高いplugins/mcp/kiro/*/install.shがdefault.jsonを更新する以上、MCP 併用者には恒久的に必要な操作になるpython3で JSON を組み立てており、マージ処理の追加コストが低い(+50 行程度、外部依存なし)installer が上書きするのは自分が書くキーだけ、という規則にした。管理範囲はテンプレート自身から導出するため、テンプレートにキーを足しても実装と README の管理表がずれない。
name/description/tools/resources/hooks.agentSpawnhooks.stop--with-slackの有無で生成・削除mcpServers.codex--with-codexの有無で生成・削除mcpServersエントリ・hooks項目・トップレベルキー回帰検査:
ndf.jsonへ利用者管理の設定を注入 →install.sh再実行 → 保持を検査する手順をassert-kiro-agent.shに追加した。kiro-cli に依存しないため、kiro-cli が入らない CI コンテナでも実行される。cross-review round 6 の対応
旧
default.jsonの自動移行: 旧版 installer の生成物からの移行を利用者の手作業に委ねていたため、移行漏れが起きうる状態だった。安全と判断できる場合に限りndf.jsonへmvし、Step 5 の既存マージ処理へ渡すようにした。マージ処理が installer 管理外のキー(利用者が足したmcpServers/ フック / 独自キー)を引き継ぐため、旧設定を置くだけで独自設定の移行とテンプレート由来キーの最新化が同時に完了する。default.jsonは検出時に必ずdefault.json.bakへバックアップしたうえで、次のとおり分岐する。default.jsonndf.jsonnameがdefaultかつdescriptionにNDFを含む)ndf.jsonへ移行する(default.jsonは残らない)判断の根拠:
default.jsonは従来どおりバックアップ + 案内に留めた。ndf.jsonへ移すとname/description/tools/resources/hooks.agentSpawnがテンプレートで上書きされ、利用者が意図して書いたエージェント定義が失われる。Kiro 用 MCP プラグインの installer もdefault.jsonを更新するため、NDF が所有していないdefault.jsonは触らないのが安全と判断した。ndf.jsonが既に存在する場合は移行が上書きになるため行わない。この場合だけ「NDF 生成物だが移行しない」分岐に落とし、.bakの内容確認とrmを案内する。--dry-runは従来どおり一切書き込まない(DRY RUN の出力に旧設定の検出行だけ追加した)。default.json.bakが同一内容のバックアップになるため、ndf.json.bakは作らない。回帰検査: 上記 4 パターン(自動移行 / 利用者自作 / 両方存在 /
--dry-run)をassert-kiro-agent.shに追加した。installer を--projectで一時ディレクトリへ実行するだけなので kiro-cli に依存せず CI でも走る。README 更新:
plugins/ndf-kiro/README.mdの「旧バージョンからの移行」を、手動の写し替え手順から自動移行の条件表へ書き換えた。Test plan
install.sh実行後kiro-cli agent listにndfが現れるkiro-cli chat --agent ndfで起動時フックが動作するinstall.sh --set-defaultで既定がndfに切り替わる(確認後に元へ戻した)Skill 読み込み指定の削除後も Skill が発動する(占有率の表示は低下せず。上記「占有率の before / after」参照)
--projectで別ディレクトリへ導入したとき--set-defaultが効く(cross-review round 1 で修正)ndf-policiesの二重注入が解消し、/context showの一致ファイル数が 26 → 25 になる(cross-review round 1 で修正)install.sh --scope globalで~/.kiro/skills/と~/.kiro/steering/に配置されるbash scripts/runtime-smoke-test.sh --runtime kiroが成功する(runtime smoke tests passed: kiro)bash scripts/build-runtime-plugins.sh→--checkで差異なしbash scripts/validate-runtime-plugins.shpython3 scripts/check-markdown-links.py --root .bash -n plugins/ndf-kiro/install.sh利用者管理の
mcpServers/ 独自フック / 独自トップレベルキーがinstall.sh再実行後も残る(cross-review round 2 で修正)--with-codexを外した再実行でmcpServers.codexだけが消え、利用者の MCP 設定は残る既存
ndf.jsonが壊れた JSON でもWARNを出してテンプレートから再生成する対象プロジェクト限定の workspace エージェントを既定にした状態で、無関係な cwd から
assert-kiro-agent.shを実行しても既定が復旧する(cross-review round 2 で修正)検証後に
kiro-cli agent set-default kiro_defaultで既定を戻し、~/.kiro/~/.awsが検証前と一致することを確認したbash -n tests/runtime-smoke/assertions/assert-kiro-agent.sh旧 NDF 生成物の
default.jsonがndf.jsonへ自動移行され、利用者のmcpServers/ 独自キーが保持される(cross-review round 6 で追加)利用者自作の
default.jsonは自動移行せず、案内のみ出す(cross-review round 6 で追加)default.jsonとndf.jsonの両方があるとき移行せず既存のndf.jsonを尊重する(cross-review round 6 で追加)--dry-runが旧設定を含め一切書き換えない(実行前後のsha256sum一致を確認)(cross-review round 6 で追加)release PR: #66
plan: issues/ndf-development-skills/07-tasks.md