Skip to content

fix: Kiro の導入方式を修正しエージェント定義を有効にする (0-9) - #75

Merged
takemi-ohama merged 13 commits into
release/skill-inventoryfrom
feature/inventory-kiro-delivery
Aug 8, 2026
Merged

fix: Kiro の導入方式を修正しエージェント定義を有効にする (0-9)#75
takemi-ohama merged 13 commits into
release/skill-inventoryfrom
feature/inventory-kiro-delivery

Conversation

@takemi-ohama

@takemi-ohamatakemi-ohama commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

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 listndf が現れるOKndf Workspace NDF統合開発エージェント(Kiro CLI用)
kiro-cli chat --agent ndf で起動時フックが動作するOK[NDF] CLAUDE.ndf.md が検出されました… が文脈へ注入された。kiro_default では NONE が返り注入されない
install.sh --set-default で既定が ndf に切り替わるOKagent list*ndf へ移動し、素の kiro-cli chat でも起動時フックが動いた。確認後 kiro-cli agent set-default kiro_default で復旧し、~/.kiro/settings/cli.json もバックアップから復元済み
Skill 読み込み指定の削除後も Skill が発動するOK「docker コンテナに localhost で接続できない」に対し docker-container-access/SKILL.md を自ら読みに行った
install.sh --scope global~/.kiro/ へ配置されるOK~/.kiro/{skills,steering,prompts,agents} が生成され、プロジェクト外でも Global として一覧に出た。検証後に撤去し、find 比較でホームの状態が検証前と一致することを確認
.kiro/steering/ndf-policies.md がエージェント選択に依存せず参照されるOKkiro_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 エージェント262(resources + Skill)0.6%125,723
本 PR 初版 ndf エージェント262(Skill + steering)0.6%125,746
修正後 ndf エージェント251(steering のみ)0.6%125,562
参考: 組み込み kiro_default251(steering のみ)0.6%125,562

resources の二重登録を解消しただけではファイル数が 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.shkiro-cli が無い場合に該当検査を skip する(kiro-agent-workspace.logkiro-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.mddocs/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.shplugins/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 点。

    1. install.sh は Skill 更新のたびに再実行する運用のため、写し替えが必要になる頻度が高い
    2. 設定が消えても installer もテストも成功で終わり、失敗が沈黙する。手順書で防げる種類の問題ではない
    3. plugins/mcp/kiro/*/install.shdefault.json を更新する以上、MCP 併用者には恒久的に必要な操作になる
    4. Step 5 は既に python3 で JSON を組み立てており、マージ処理の追加コストが低い(+50 行程度、外部依存なし)

    installer が上書きするのは自分が書くキーだけ、という規則にした。管理範囲はテンプレート自身から導出するため、テンプレートにキーを足しても実装と README の管理表がずれない。

    区分キー再実行時の扱い
    installer 管理name / description / tools / resources / hooks.agentSpawnテンプレートから再生成(上書き)
    installer 管理hooks.stop--with-slack の有無で生成・削除
    installer 管理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.jsonmv し、Step 5 の既存マージ処理へ渡すようにした。マージ処理が installer 管理外のキー(利用者が足した mcpServers / フック / 独自キー)を引き継ぐため、旧設定を置くだけで独自設定の移行とテンプレート由来キーの最新化が同時に完了する。

    default.json は検出時に必ず default.json.bak へバックアップしたうえで、次のとおり分岐する。

    default.jsonndf.json振る舞い
    NDF 生成物(namedefault かつ descriptionNDF を含む)なしndf.json へ移行する(default.json は残らない)
    同上あり移行しない
    NDF 生成物と判定できない問わない移行しない

    判断の根拠:

    • NDF 生成物と判定できない 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 listndf が現れる

  • 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.sh

  • python3 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.jsonndf.json へ自動移行され、利用者の mcpServers / 独自キーが保持される(cross-review round 6 で追加)

  • 利用者自作の default.json は自動移行せず、案内のみ出す(cross-review round 6 で追加)

  • default.jsonndf.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

@takemi-ohamatakemi-ohama mentioned this pull request Aug 8, 2026
21 tasks
takemi-ohamaand others added 2 commits August 8, 2026 04:03
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-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

--project--set-default の併用時に対象 workspace 外で Kiro CLI を実行する経路があり、明示した導入先の ndf エージェントを既定化できないリスクがあります。

Comment threadplugins/ndf-kiro/install.sh 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 | REQUEST_CHANGES

ndf-policies が Skill と steering の両方として Kiro のコンテキストに読み込まれる重複問題があります。該当箇所へのインラインコメントの修正アクションを実施してください。

Comment threadplugins/ndf-kiro/install.sh
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

Copy link
Copy Markdown
ContributorAuthor

🔧 cross-review round 1 の修正対応

未 Resolve だった 2 件(いずれも major / 正確性)を修正しました。独自に再判定した結果、どちらも実害のある指摘で major 相当と確認したため両方修正しています。deferred / rejected は 0 件です。

修正コミット: 65f9cac

#指摘対応
1--project 併用時に kiro-cli を呼び出し元 cwd で実行しており --set-default が効かない実行ディレクトリを導入先に固定し、反映を agent list で検証する
2ndf-policies が Skill と steering の両方で文脈に注入される.kiro/skills/ へ symlink しない。manifest には steering の生成元として残す

1. --set-default の実行位置(plugins/ndf-kiro/install.sh

修正前は導入先以外の cwd から実行すると Error: Failed to set default agent: No agent with name ndf found になり、しかも kiro-cli agent set-default は終了コード 0 を返すため、installer は失敗に気付かず「既定エージェントを ndf に変更しました」と表示していました。

  • KIRO_CWD を導入スコープから決める(workspace$PROJECT_ROOTglobal$HOME
  • agent list / set-default の両方をサブシェルで cd "$KIRO_CWD" してから実行する
  • set-default 後に agent list で反映を検証し、ndf になっていなければ ERROR で終了する

2. ndf-policies の二重注入(plugins/ndf-kiro/install.sh

manifest には残し、リンク時にスキップする方針にしました。install.shplugins/ndf-kiro/skills/ndf-policies/SKILL.md を steering の生成元として読むため、manifest から外すと .kiro/steering/ndf-policies.md を生成できなくなり installer が落ちるからです。user-invocable: false の Skill であり内容は steering として常時読み込まれるため、機能低下はありません。

占有率の再測定(before / after)

kiro-cli chat --agent <名前> --no-interactive '/context show'(kiro-cli 2.16.1)で、4 構成すべてを同一プロジェクトで測り直しました

構成一致ファイル数ndf-policies の注入回数占有率合計文字数
変更前 default エージェント2620.6%125,723
本 PR 初版 ndf エージェント2620.6%125,746
修正後 ndf エージェント2510.6%125,562
参考: 組み込み kiro_default2510.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.shOK
bash scripts/build-runtime-plugins.sh--checkOK(差分なし)
python3 scripts/check-markdown-links.py --root .OK
bash scripts/validate-runtime-plugins.shOK
bash scripts/runtime-smoke-test.sh --runtime kiroOK(runtime smoke tests passed: kiro。文脈ファイル 23 件 / 112,404 文字)
ホスト実機で assert-kiro-agent.sh workspace(kiro-cli 2.16.1)OK(default agent before: kiro_defaultafter: ndfrestored: kiro_default
--project 別ディレクトリ導入 + --set-defaultOK(修正前は失敗、修正後は成功)
--scope global --set-default(実 $HOMEOK

既定エージェントは復旧済みです。 検証で 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.logkiro-cli agent checks skipped: kiro-cli is not available)。この部分は上表のとおりホストの kiro-cli 2.16.1 で実機確認しました。

CI は push 前時点で全 6 チェック SUCCESS でした。push 後の再実行は待っていません。

#75

@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 | REQUEST_CHANGES

Kiro エージェントの切り替え・設定構造のリファクタリングとして一貫しており、ドキュメント・テスト・マイグレーション手順も適切に揃っています。1 点だけ、テスト復旧時のディレクトリ指定漏れがあり、テスト環境外へ設定ファイルが漏出する(実行元に副作用を残す)可能性があるためインラインで指摘しました。修正をお願いします。

Comment threadtests/runtime-smoke/assertions/assert-kiro-agent.sh 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 2 | codex | REQUEST_CHANGES

移行手順で .kiro/agents/ndf.json へ写した MCP / 独自設定を、後続の installer 再実行が保持できるようにしてください。

Comment threadplugins/ndf-kiro/README.md Outdated
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

Copy link
Copy Markdown
ContributorAuthor

🔧 cross-review round 2 の修正対応

未 Resolve だった 2 件(いずれも major)を修正しました。独自に再判定した結果、どちらも実害のある指摘で major 相当と確認したため両方対応しています。deferred / rejected は 0 件です。

修正コミット: 6e357a2

#指摘対応
1テストの既定エージェント復旧が PROJECT_DIR の外で実行されるPROJECT_DIR から実行し、復旧を検証し、trap EXIT に載せた
2install.sh 再実行で写し替えた mcpServers が破棄される(a) installer が利用者管理の設定を保持して再生成する

1. 既定エージェント復旧の実行位置(tests/runtime-smoke/assertions/assert-kiro-agent.sh

指摘のとおり復旧処理が実行元 cwd で動いていました。ただし副作用の形は指摘と異なりました。実機(kiro-cli 2.16.1)で確認したところ、kiro-cli agent set-default は cwd に .kiro/settings.json を作らず、既定エージェントは ~/.local/share/kiro-cli/data.sqlite3 に保存されるマシン全体の設定でした。

実害は復旧の失敗のほうです。before_default が対象プロジェクト限定の workspace エージェントの場合、別 cwd からは検出できず、しかも set-default未検出でも終了コード 0 を返すため、テストは復旧に成功したつもりでマシン全体の既定を書き換えたまま終了していました。

$ cd /tmp && kiro-cli agent set-default hostprobe
Error: Failed to set default agent: No agent with name hostprobe found
exit=0 ← 失敗を検知できない
  • 復旧を (cd "$PROJECT_DIR" && kiro-cli agent set-default "$before_default") で実行する
  • 復旧後に agent list で戻ったことを検証し、戻っていなければ失敗させる
  • trap 'rc=$?; restore_default || rc=1; exit $rc' EXIT に載せ、途中の検査が落ちても既定を戻す(修正前は --set-default の検査で exit 1 すると既定が ndf のまま残っていた)

同ファイル内の kiro-cli 呼び出しは全件確認しました。command -v kiro-cli は cwd 非依存、agent_list() は既に cd 済み、L105 の install.sh --project ... --set-default は installer 側の cwd 固定を検査する回帰検査なので意図どおりです。問題があったのは指摘箇所のみでした。

2. 再インストールによる設定消失(plugins/ndf-kiro/install.sh

(a) installer が既存 ndf.json の利用者管理設定を保持して再生成するを採りました。(b) にしなかった理由:

  1. install.sh は Skill 更新のたびに再実行する運用のため、写し替えの頻度が高い
  2. 設定が消えても installer もテストも成功で終わり、失敗が沈黙する。手順書で防げる種類の問題ではない
  3. plugins/mcp/kiro/*/install.shdefault.json を更新する以上、MCP 併用者には恒久的に必要な操作になる
  4. Step 5 は既に python3 で JSON を組み立てており、マージ処理の追加コストが低い(+50 行程度、外部依存なし)

installer が上書きするのは自分が書くキーだけ、という規則にしました。管理範囲をテンプレート自身から導出しているため、テンプレートにキーを足しても実装と README の管理表がずれません。

区分キー再実行時の扱い
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 が壊れた JSONWARN を出してテンプレートから再生成。.bak は残る
workspace エージェントを既定にして、無関係な cwd から assert-kiro-agent.sh を実行exit 0。before: hostprobeafter: ndfrestored: 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.shOK
bash -n tests/runtime-smoke/assertions/assert-kiro-agent.shOK
bash scripts/build-runtime-plugins.sh--checkOK(generated files are up to date
python3 scripts/check-markdown-links.py --root .OK
bash scripts/validate-runtime-plugins.shOK(runtime plugin validation passed
bash scripts/runtime-smoke-test.sh --runtime kiroOK(runtime smoke tests passed: kiro。文脈ファイル 23 件 / 112,404 文字、reinstall preserved user-managed agent settings
ホスト実機での install.sh 再インストール検証OK(上表)

CI は push 前時点で全 6 チェック SUCCESS でした。push 後の再実行は待っていません。

@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

PRの目的と変更範囲は一貫しており、利用者設定のマージ(冪等性)とテストの確実な復旧が正しく実装されています。
Kiro CLIの実機挙動や占有率の測定結果もドキュメントに詳細に記録され、旧版からの移行手順の案内も十分です。

@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 | REQUEST_CHANGES

仕様ドキュメントのテスト観点に、通常インストール時の生成物と矛盾する記述が1件あります。

Comment threaddocs/specifications/ndf-knowledge-and-kiro.md Outdated
mcpServers はテンプレートに無く、--with-codex 指定時または既存の利用者管理設定を
引き継いだ場合にだけ .kiro/agents/ndf.json に現れる。必須のテスト観点にすると
通常インストールと矛盾するため、条件付きの記述へ改めた。

@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 4 | codex | REQUEST_CHANGES

Kiro 移行時の既存 symlink 残存と global scope の検証抜けを修正してください。

Comment threadplugins/ndf-kiro/install.sh
Comment threadtests/runtime-smoke/assertions/assert-kiro-agent.sh 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 4 | gemini | APPROVE

エージェント定義の有効化、生成処理の冪等性、および既存利用者の移行手順について確認しました。Kiro CLI の仕様に合わせた適切な修正です。
例外ハンドリングの観点で 2 点、マイナーな修正提案をインラインに残しました。

Comment threadplugins/ndf-kiro/install.sh Outdated
Comment threadplugins/ndf-kiro/install.sh Outdated
- 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

Copy link
Copy Markdown
ContributorAuthor

cross-review round 4 対応サマリ

未 Resolve だった 4 件すべてを修正し、実機(kiro-cli 2.16.1)で確認しました。修正コミット: 01b7865

対応内容

#箇所重要度(再判定)対応
1plugins/ndf-kiro/install.sh ndf-policies の skipmajor / 正確性(据え置き)リンク先に関係なく既存 symlink / 実体を削除してから skip。回帰テストも追加
2tests/runtime-smoke/assertions/assert-kiro-agent.sh global の早期終了major / テスト(据え置き)global でも agent list--scope global --set-default --yes を検査。復旧は既存 trap に載せる
3install.shdefault.json の JSON 配列minor / 正確性(据え置き)isinstance(config, dict)try 内に追加し、壊れた JSON と同じ扱いへ
4install.shread -r answer の EOFminor / エラーハンドリング(据え置き)read -r answer || answer=""[y/N]N へフォールバック

件数: critical 0 / major 2 / minor 2 / nit 0、deferred 0 / rejected 0。4 件とも妥当な指摘で、重要度の再判定でも変更なしと判断しました。

追加で入れたもの

  • stale ndf-policies symlink の回帰テストSync: takemi-ohama/ai-plugins から最新状態を反映 (e71f099) #1 用)。別 checkout を指す symlink を張って installer を再実行し、消えること・リンク先の実体は残ることを workspace / global 両方で検査します。kiro-cli に依存しないためコンテナ CI でも動きます。ネガティブ確認として installer を修正前へ差し戻すとこのテストが exit 1 になることも確認済みです。
  • plugins/ndf-kiro/README.md の「旧バージョンからの移行」に、旧 symlink の掃除挙動を追記。

実機確認

kiro-cli 2.16.1 / 実 $HOME で以下を確認しました(詳細は各スレッドの返信に記載)。

後始末: 検証で書き換えた既定エージェントは kiro_default へ戻し、global 導入で作った ~/.kiro/{agents,skills,steering,prompts} の生成物も撤去しました。find -L ~/.kiro の最終状態は検証前と同じ sessions/settings/ のみです。

検証結果

コマンド結果
bash -n plugins/ndf-kiro/install.shOK
bash -n tests/runtime-smoke/assertions/assert-kiro-agent.shOK
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 passed
bash scripts/runtime-smoke-test.sh --runtime kiroruntime smoke tests passed: kiro

実行できなかった項目

  • コンテナ CI での kiro-cli 依存検査: scripts/runtime-smoke-test.sh のコンテナには kiro-cli が入っていない(version.log: kiro-cli is not available; using installer fallback)ため、agent list / --set-default 系は workspace / global とも kiro-cli agent checks skipped になります。この経路は上記の実機(kiro-cli 2.16.1)で確認しました。Docs: AGENTS.md のリポジトリURLを devbasex/ai-plugins に更新 #2 の追加分も含め、kiro-cli 非依存の検査(stale symlink 回帰、利用者管理設定の引き継ぎ、文脈量バジェット)は CI でそのまま動きます。
  • gh pr checks 75: no checks reported on the 'feature/inventory-kiro-delivery' branch(このブランチに紐づく CI チェックなし)。

再レビューをお願いします。

#75

@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 5 | codex | REQUEST_CHANGES

移行時の削除処理に修正必須の問題があります。旧 symlink だけを安全に掃除し、実ディレクトリを破壊しないようにしてください。

Comment threadplugins/ndf-kiro/install.sh 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 5 | gemini | APPROVE

要求された観点(3 ランタイムの記述正確性、Kiro のエージェント生成処理の冪等性と --check 差異検出、移行手順の正確性)を重点的に確認しました。

生成処理における利用者管理設定(mcpServers 等)の保持機構、ドキュメントの記述、およびマイグレーションのテストカバレッジが共に正しく実装されています。--check における差異検出や、ダングリング symlink の処理などエッジケースも正しく処理されていることを確認しました。修正点はありません。

rm -rf は .kiro/skills/ndf-policies が実体のディレクトリやファイルだった場合に
中身ごと消してしまい、README の「削除するのはリンク自体だけ」とも矛盾していた。
- 削除対象を [ -L ] のシンボリックリンクだけに限り rm -f で外す
- 実体だった場合は削除せず、二重注入の理由と手動対応を促す警告を出す
- README に実体だった場合の扱いを追記

@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 6 | codex | APPROVE

修正必須の新規指摘はありません。

@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 6 | gemini | REQUEST_CHANGES

既存利用者の移行手順(default.jsonndf.json)について 1 点、自動化による体験向上の余地があるため修正を提案します。
現状は利用者への手動案内のみとなっていますが、Step 5 に既に組み込まれている設定マージの仕組みを活用することで、移行漏れなく安全に自動引き継ぎが可能です。

Comment threadplugins/ndf-kiro/install.sh Outdated
旧版 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

Copy link
Copy Markdown
ContributorAuthor

cross-review round 6 の対応まとめ

未 Resolve だった 1 件(plugins/ndf-kiro/install.sh:240 / [major / UX・移行手順])を受理して対応しました。修正コミット: cbced44

対応内容

.kiro/agents/default.json から ndf.json への移行を、安全と判断できる場合に限り自動化しました。default.json は検出時に必ず default.json.bak へバックアップしたうえで分岐します。

default.jsonndf.json振る舞い
NDF 生成物(namedefault かつ descriptionNDF を含む)なしndf.jsonmv してから Step 5 のマージへ渡す。default.json は残らない
同上あり移行しない(上書きで ndf.json の利用者設定を失うため)
NDF 生成物と判定できない問わない移行しない(利用者が意図して書いた定義をテンプレートで壊さないため)
(すべて)(すべて)--dry-run では一切書き込まない

移行直後は default.json.bak が同内容のバックアップになるため ndf.json.bak は作りません。

実機確認(kiro-cli 2.16.1 導入済みホスト、一時ディレクトリ)

#前提結果
1NDF 生成物、ndf.json なし自動移行。残るのは default.json.bakndf.json のみ。ndf.jsonname=ndf / mcpServers=['legacy-user-mcp'] / myOwnKey=keep-me
2利用者自作の default.json移行せず。default.json が残り案内が出る。ndf.json にレガシー設定は混入しない
3default.jsonndf.json の両方移行せず。ndf.jsonsmokeExistingKey=keep-me を保持
4--dry-run実行前後で find と全ファイルの sha256sum が完全一致。.bakndf.json も生成されない

--project の一時ディレクトリのみで検証し、既定エージェントとホーム配下は変更していません。検証前後で find ~/.kiro が完全一致することを確認済みです。

テスト / ドキュメント

  • 上記 4 パターンを tests/runtime-smoke/assertions/assert-kiro-agent.sh に回帰テストとして追加(kiro-cli 非依存なので CI でも実行される)
  • plugins/ndf-kiro/README.md の「旧バージョンからの移行」を自動移行の条件表へ更新

検証結果

コマンド結果
bash -n plugins/ndf-kiro/install.shOK
bash -n tests/runtime-smoke/assertions/assert-kiro-agent.shOK
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 passed
bash scripts/runtime-smoke-test.sh --runtime kiroruntime smoke tests passed: kiro

対応件数: major 1 件(修正・Resolve 済み) / deferred 0 件 / rejected 0 件

@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 7 | codex | APPROVE

修正必須の新規指摘はありません。

@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 7 | gemini | APPROVE

PR全体の設計は妥当です。1点だけ、移行先が既に存在する場合のコンソール案内についてインラインでコメントしました。

Comment threadplugins/ndf-kiro/install.sh
移行しない分岐の案内が 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-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 8 | gemini | APPROVE

PRの目的と変更範囲は一貫しており、冪等性や既存環境からの移行(ndf.json への設定マージ・ndf-policies の重複排除)が適切に実装・テストされていることを確認しました。

@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 8 | codex | REQUEST_CHANGES

移行時の既存設定判定と既存 JSON の型検証に修正必須の問題があります。

Comment threadplugins/ndf-kiro/install.sh Outdated
Comment threadplugins/ndf-kiro/install.sh Outdated
- 旧 NDF 生成物の判定を description の部分一致から、旧テンプレート固有の
description 完全一致 + (resources の skill:// 指定 または agentSpawn フックの
CLAUDE.ndf.md 検査) の組み合わせへ変えた。NDF 用に自作した default
エージェントをテンプレートで上書きしてしまう問題を防ぐ
- 既存 ndf.json の hooks / mcpServers が dict 以外だと .items() で installer が
例外終了していた。壊れた JSON と同じく警告して引き継ぎ対象から外す

@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 9 | gemini | APPROVE

JSON の型違反(配列や文字列など)による AttributeError を防ぐ型チェックと、旧インストーラの生成物判定の厳密化が適切に行われていることを確認しました。既存の有効な設定を意図せず上書き・破壊するリスクが軽減されており、実装として問題ありません。

@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 9 | codex | REQUEST_CHANGES

旧 default.json の自動移行条件について、実装・テスト・README の不整合があります。

Comment threadtests/runtime-smoke/assertions/assert-kiro-agent.sh Outdated
Comment threadplugins/ndf-kiro/README.md Outdated
旧 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-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 10 | codex | APPROVE

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

@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 10 | gemini | APPROVE

Kiro エージェント名の ndf への切り替えとそれに伴う自動移行ロジック、scripts/build-runtime-plugins.sh でのポリシー生成の冪等性、自動テストの拡充など、すべての対応が適切に実装されていることを確認しました。
MCP インストーラーによる default.json への出力という制約に対する利用者への案内もドキュメントへ明記されており、既存利用者の移行手順についても懸念はありません。

@takemi-ohama
takemi-ohama marked this pull request as ready for review August 8, 2026 05:59
@takemi-ohama
takemi-ohama merged commit 6ba1af9 into release/skill-inventoryAug 8, 2026
7 checks passed
@takemi-ohama
takemi-ohama deleted the feature/inventory-kiro-delivery 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