はじめに
Claude Code で育てた CLAUDE.md・スキル・サブエージェントを、Kiro でもそのまま活かせるのか。両方を使っていると、まずこの対応関係が気になります。
調べてみると、スキルとサブエージェントはほぼそのまま持ち運べました。そしてメモリ系は、予想していた「Claude Code は常時ロード、Kiro は選べる」という対比ではありませんでした。両者とも条件付きロードを持っていて、違うのは指定の作法だけです。
なお仕様はバージョンで変わります。Kiro は公式ドキュメントの 2026年2月18日更新版(steering / skills)と 7月1日更新版(custom agents)、Claude Code は 2026年7月時点のドキュメントに基づいています。
対応関係の早見表
| Claude Code | Kiro | 対応の度合い |
|---|---|---|
CLAUDE.md 階層(managed / ~/.claude/ / プロジェクト / CLAUDE.local.md) |
steering(.kiro/steering/・~/.kiro/steering/)の always
|
役割は同じ。分割の作法が異なる |
.claude/rules/*.md(paths:) |
steering の fileMatch
|
ほぼ同等 |
.claude/skills/、~/.claude/skills/
|
.kiro/skills/、~/.kiro/skills/
|
ほぼ共通(同じ標準) |
.claude/agents/、~/.claude/agents/
|
.kiro/agents/、~/.kiro/agents/
|
ツール宣言の書式が異なる |
auto memory(MEMORY.md) |
対応物なし | Claude Code だけの機構 |
非対応(@AGENTS.md の import か symlink で代替) |
AGENTS.md を steering として読む |
併用時の結節点にできる |
メモリ系:条件ロードは両方にある
Kiro の steering は、ファイル先頭の front-matter で読み込みタイミングを4つから選びます。
-
always(既定): すべての対話で読み込む -
fileMatch:fileMatchPattern: "components/**/*.tsx"にマッチするファイルを扱うときだけ -
manual: チャットで#ファイル名と参照したときだけ -
auto: リクエストが description に合致したとき(nameとdescriptionが必須)
Claude Code 側は、これを仕組みごとに分担しています。
| Kiro の inclusion | Claude Code の相当物 |
|---|---|
always |
CLAUDE.md、paths なしの .claude/rules/
|
fileMatch |
paths 付きの .claude/rules/、サブディレクトリの CLAUDE.md
|
auto |
スキル(description マッチでロード) |
manual |
disable-model-invocation: true を付けたスキル(/skill-name で明示呼び出し) |
manual については、以前は「直接の対応物なし」と書くところでしたが、カスタムスラッシュコマンドがスキルに統合された結果、disable-model-invocation: true がほぼ直接の対応物になっています。モデルは自動起動せず、ユーザーが /skill-name で呼んだときだけ読み込まれる挙動です。
.claude/rules/ はトピック別にファイルを分割でき、paths を書けばマッチするファイルを読んだときだけコンテキストに入ります。
---
paths:
- "src/api/**/*.ts"
---
# API 開発ルール
- すべてのエンドポイントで入力バリデーションを行う
つまり Kiro は「ファイル単位でモードを宣言する」、Claude Code は「常時は CLAUDE.md、条件は rules の paths、タスク単位はスキル」と置き場所で分かれている、という違いです。
条件ロードは「ユーザースコープで発火しない」報告が両方にある
仕組みとしては等価ですが、実務では但し書きが必要です。ユーザー(グローバル)スコープの条件ロードについて、両者に同種の不具合報告が上がっています。
- Claude Code:
~/.claude/rules/に置いたpaths:付きルールがロードされない、paths:よりglobs:の方が確実に効く、逆にpaths:を無視して起動時に全部読まれる、といった Issue - Kiro:
~/.kiro/steering/のfileMatchが発火しない(fileMatchPatternがワークスペースルート基準で解決されないため)。回避策としてinclusion: autoに置き換える案が挙がっている
どちらも「エラーが出ないまま静かに読まれない」のが厄介なところです。Claude Code なら /context の Memory files、Kiro なら "Including Steering Documents" の表示で、実際に何が読み込まれたかを確認するのが確実です。
CLAUDE.md 側の挙動
押さえておきたいのは3点。managed / user / プロジェクト / local の4スコープがあり、ディレクトリツリーを遡って上書きではなく連結されること。サブディレクトリの CLAUDE.md は起動時ではなく、そのディレクトリのファイルを読んだときにロードされること。そして内容はシステムプロンプトではなく、システムプロンプトの後のユーザーメッセージとして渡される、強制力のない文脈であることです。
移行は、CLAUDE.md に全部書いていたなら foundation の3ファイル(product.md / tech.md / structure.md)へ役割ごとに分け、.claude/rules/ を使っていたなら paths を fileMatchPattern に読み替える、という流れになります。
片方にしかない:auto memory
Claude Code には、自分で書く CLAUDE.md とは別に、Claude 自身がメモを書き足す auto memory があります。保存先は ~/.claude/projects/<project>/memory/ で、索引の MEMORY.md が毎セッション先頭200行(または25KB)まで読み込まれ、詳細はトピック別ファイルに逃がして必要なときだけ読まれる構造です。/memory でオン・オフと中身の確認ができ、マシンローカルに保存されます。
Kiro の steering / skills は基本的に「人が書くもの」なので、ここは対応物がありません。移行の観点では、Claude Code 側で auto memory に溜まっていた知識は Kiro に持ち越されない、という点に注意が必要です。持ち越したいなら steering か AGENTS.md に書き写すことになります。
AGENTS.md
Kiro は agents.md 標準の AGENTS.md を steering として読み込みます(inclusion モードは持たず常時ロード)。ワークスペースのルート、または ~/.kiro/steering/ に置けば自動で拾われます。一方 Claude Code は AGENTS.md を読まないため、CLAUDE.md から import するか symlink を張ります。
@AGENTS.md
## Claude Code 固有
- `src/billing/` 配下の変更は plan mode を使う
併用するなら、共通の規約を AGENTS.md に置いてツール固有の内容だけを各ファイルに残すのが一番きれいです。symlink は Windows で管理者権限か開発者モードが必要なので、公式ドキュメントでも Windows では import 方式が推奨されています。
スキルはほぼ共通
両者とも Agent Skills 標準に沿っています。フォルダに SKILL.md を置き、front-matter に name と description を書く形式、起動時は description だけを読み合致したら本文を読む「段階的な開示」の挙動、どちらも共通です。置き場所も .claude/skills/ ↔ .kiro/skills/、~/.claude/skills/ ↔ ~/.kiro/skills/ で対応しています。
ただし「フォルダを移すだけ」で済むのはポータブルな部分に限ります。移すときの確認点は3つ。
- Kiro は
nameがフォルダ名と一致必須(小文字・数字・ハイフン、64文字以内)、descriptionは1024文字以内 -
disable-model-invocationは Claude Code の独自拡張なので Kiro では効かない。allowed-toolsは Agent Skills 標準側の(experimental 扱いの)フィールドだが、Kiro のフロントマター表はname/description/license/compatibility/metadataのみなので、こちらも実質未対応 - Kiro の GitHub インポートは URL がリポジトリのルートではなくサブディレクトリを指す必要がある(スキルフォルダでも
SKILL.md直指定でもよい)。動作はコピーなので元を直しても追従しない
サブエージェント
役割も置き場所も対応しています。違いはツールの宣言方法で、Claude Code は個別のツール名(tools: Read, Grep, Glob, Bash)、Kiro はカテゴリタグです。
---
description: バックエンド開発エージェント
tools: [read, write, shell, web]
permissions:
rules:
- capability: shell
effect: allow
match: ["npm *"]
---
カテゴリなので新しいツールが増えたときに自動で追随します。read / write / shell / web / subagent / context のほか、@mcp(mcp.json の全 MCP ツール)、@builtin、* といった指定も使えます。permissions はルールに一致しなければ ask が既定で、deny > ask > allow の順で解決されます。MCP サーバーも同じファイルにインラインで書けるため、1ファイルで完結して共有しやすいのが Kiro 側の特徴です。
非対称が2つあります。Kiro の .kiro/agents/ はサブエージェント設定を兼ねつつエージェントセレクタで選ぶ主エージェントにもなること(Claude Code はサブエージェント専用)。そして Kiro CLI は同じディレクトリで JSON、IDE は .md を期待するため、CLI と IDE を併用すると二重管理になることです。
併用するなら:単一ソースにする
スキルのように両方で同じ内容を持てるものは、素直にコピーすると片方が古くなります。本体を .claude/skills/ に置いたまま Kiro から参照させる方法を3つ試しました。
| 方法 | やり方 | 判断材料 |
|---|---|---|
| symlink | ln -s ../.claude/skills .kiro/skills |
最も単純で Kiro 標準の発見も効く。まずこれ |
| file reference | steering に #[[file:.claude/skills/xxx/SKILL.md]]
|
内容が確実に入る。スキルごとに1枚作る手間 |
| 索引 | steering に always でスキル一覧の表を置き、パスを読ませる |
1枚で済むが読むかはモデルの判断次第 |
いずれも変則的なやり方です。Kiro 単体なら .kiro/skills/ に置いて自動で見つけてもらうのが素直で、これらは「Claude Code 時代の資産を複製せず使い回したい」場合の選択肢です。メモリ系の単一ソース化は前述の AGENTS.md に寄せるのがきれいです。
まとめ
- スキルは Agent Skills 標準で共通。置き場所を変えるだけで動くが、
nameとフォルダ名の一致要件と、標準外・未対応のフロントマター(disable-model-invocationなど)は確認する - サブエージェントも役割は同じ。個別ツール名からカテゴリタグへの書き換えが主な作業
- メモリ系は「常時ロード vs 条件ロード」の対比ではない。Kiro はファイル単位の inclusion 宣言、Claude Code は
CLAUDE.md/.claude/rules// スキルの分担で同じことをしている - ただし条件ロードはユーザースコープで発火しない報告が両方にある。
/contextや steering の表示で実際に読まれたかを確認する - auto memory は Claude Code だけの機構。Kiro に移すなら steering か
AGENTS.mdに書き写す - 重複するものは単一ソースに。メモリ系は
AGENTS.md、スキルは symlink か steering からの参照
まず早見表で対応を掴み、共通化できる規約を AGENTS.md に切り出すところから始めるとスムーズです。