Build This Now
Build This Now
What Is Claude CodeInstallationNative InstallerFirst Project
speedy_devvkoen_salo
Blog/Handbook/Workflow/Kiro Migration Guide

Kiro Migration Guide

Migrate Kiro to Claude Code without losing steering files, feature specs, hooks, or MCP servers. This guide maps each Kiro artifact to a working Claude Code equivalent.

Stop configuring. Start building.

SaaS builder templates with AI orchestration.

See what we build for companies →
speedy_devvWritten by speedy_devvPublished Jul 26, 202612 min readHandbook hubWorkflow index

You can migrate a Kiro repository to Claude Code without rewriting the application or throwing away its specifications. The durable assets are Markdown and source code. The parts that need translation are when instructions load, when automation fires, and where each tool stores configuration.

The safest migration is boring: copy first, map one subsystem at a time, and keep Kiro working until Claude Code passes the same tests.

The migration map

Kiro and Claude Code have similar building blocks with different names and loading rules. The Kiro comparison covers the product decision. This guide handles the repository work after you decide to move.

Kiro artifactClaude Code destinationCopy unchanged?
.kiro/steering/product.md.claude/rules/product.mdRemove Kiro frontmatter
.kiro/steering/tech.md.claude/rules/tech.mdRemove Kiro frontmatter
File-matched steering.claude/rules/*.md with pathsTranslate frontmatter
Manual or auto steering.claude/skills/*/SKILL.mdTranslate frontmatter
.kiro/specs/*docs/specs/*Yes
Kiro agent hook.claude/settings.json hookRebuild and test
Kiro MCP serverClaude Code project MCP configRe-register
Application sourceSame repositoryYes

Kiro's current steering documentation defines four inclusion modes: always, file match, manual, and automatic. Claude Code splits those jobs across CLAUDE.md, rules, and skills. Treating every steering file as always-on context would technically work, but it would waste context and weaken the useful instructions.

Final file tree

This example starts with Kiro's three foundation documents and one checkout spec. The migrated repository keeps the old .kiro directory until verification is complete.

your-app/
├── .claude/
│   ├── rules/
│   │   ├── product.md
│   │   ├── tech.md
│   │   ├── structure.md
│   │   └── react-components.md
│   ├── skills/
│   │   └── release-check/
│   │       └── SKILL.md
│   ├── hooks/
│   │   └── format-edited-file.mjs
│   └── settings.json
├── .kiro/
│   ├── hooks/
│   ├── specs/
│   └── steering/
├── docs/
│   └── specs/
│       └── checkout/
│           ├── requirements.md
│           ├── design.md
│           └── tasks.md
├── CLAUDE.md
└── package.json

Make a reversible copy

Do not delete .kiro during the first pass. A migration that changes source code and configuration at the same time is hard to debug because you cannot tell whether the agent changed behavior or the app broke.

Create a branch, record the current checks, and copy the specs. The commands stop on failure and never overwrite the Kiro source files.

set -euo pipefail

git switch -c chore/migrate-kiro-to-claude
mkdir -p .claude/rules .claude/skills docs/specs

if [ -d .kiro/specs ]; then
  cp -R .kiro/specs/. docs/specs/
fi

npm run typecheck
npm run lint
npm run build

If your project uses different commands, run the ones already documented in package.json. Save the output from this baseline. The same checks must pass after the migration.

Move always-on steering

Kiro can generate product.md, tech.md, and structure.md in .kiro/steering. Its official docs say those files describe the product, stack, and repository structure, and load by default.

Claude Code can load repository instructions from CLAUDE.md and .claude/rules/. Keep the root file short. Use it as a map and put the detailed material in focused rule files.

# Project instructions

Read the focused rules in `.claude/rules/` before changing the related area.

## Commands

- Type check: `npm run typecheck`
- Lint: `npm run lint`
- Test: `npm test`
- Production build: `npm run build`

## Working agreement

- Inspect existing patterns before creating a new abstraction.
- Plan database or authentication changes before editing.
- Run the smallest relevant test during implementation.
- Run all four quality commands before declaring the task complete.

Copy the body of Kiro's three foundation files into .claude/rules/product.md, .claude/rules/tech.md, and .claude/rules/structure.md. Remove Kiro-only inclusion frontmatter. Do not merge the three into one giant root file.

The Claude Code memory guide explains why this split matters. Root instructions load at session start, while more specific instructions can load when Claude reaches the relevant part of the repository.

Translate file-matched steering

Kiro uses inclusion: fileMatch and fileMatchPattern to load a steering file for matching paths. Claude Code rules use a paths list for the same broad goal.

Suppose the Kiro file looked like this. It applies only while Kiro works on React components.

---
inclusion: fileMatch
fileMatchPattern: "components/**/*.tsx"
---

# React component rules

- Use Server Components by default.
- Add `"use client"` only for browser APIs, state, or event handlers.
- Keep data access outside presentational components.
- Use existing shadcn/ui primitives before adding a new component.

Create .claude/rules/react-components.md with Claude Code's path frontmatter. The instruction body stays plain Markdown.

---
paths:
  - "components/**/*.tsx"
  - "app/**/*.tsx"
---

# React component rules

- Use Server Components by default.
- Add `"use client"` only for browser APIs, state, or event handlers.
- Keep data access outside presentational components.
- Use existing shadcn/ui primitives before adding a new component.

Review the patterns instead of copying them blindly. A Kiro pattern anchored to components/ may miss Next.js files under app/, and a broad TypeScript pattern may load frontend rules into database migrations.

Turn manual steering into a skill

Manual Kiro steering loads when you explicitly reference it. Automatic steering loads when Kiro judges its name and description relevant. Claude Code skills cover both of those use cases more naturally than an always-loaded rule.

This complete skill creates a reusable release checklist. Save it as .claude/skills/release-check/SKILL.md.

---
name: release-check
description: Verify a release candidate before deployment. Use for release checks, production deploys, and launch readiness.
---

# Release check

1. Read the changed files and summarize the user-visible impact.
2. Run the repository type check, lint, test, and production build commands.
3. Check that new environment variables appear in `.env.example`.
4. Check database migrations for a rollback path.
5. Report failures with the exact command and relevant output.
6. Do not deploy or push. Return a release verdict for human approval.

The description does real work. Claude uses it to decide when the skill applies, so name the requests a builder would actually type. Avoid descriptions such as "helps with releases" that provide no trigger signal.

Keep Kiro specs intact

Kiro specs are already useful Markdown. The current Kiro specs reference defines requirements.md, design.md, and tasks.md, with requirements, architecture, and discrete implementation work respectively.

Keep those files together. Tell Claude exactly how they control implementation instead of asking it to infer the relationship.

# Checkout feature

The source documents for this feature are:

- `docs/specs/checkout/requirements.md`
- `docs/specs/checkout/design.md`
- `docs/specs/checkout/tasks.md`

Before implementation:

1. Check requirements for ambiguous acceptance criteria.
2. Check the design against the current repository.
3. Identify incomplete tasks and their dependencies.
4. Propose a build plan.

During implementation, update task status only after its acceptance criteria pass.
Do not rewrite product requirements to match an implementation shortcut.

You can place this instruction beside the spec or turn it into a project skill. The spec-driven development guide explains the deeper workflow. The migration rule is simple: preserve requirements as the source of truth rather than collapsing everything into one prompt.

Rebuild hooks by behavior

Kiro and Claude Code both have hooks, but the event models are not identical. Kiro supports editor events such as file save. Claude Code's PostToolUse event fires after Claude's Edit or Write tool succeeds.

That difference means a file-save hook is not a direct copy. The following script reads Claude Code's hook event from standard input, validates that the edited file belongs to the repository, and runs the project's Prettier installation on that one file.

Save it as .claude/hooks/format-edited-file.mjs. It does not format files a human saves in the editor.

import { spawnSync } from "node:child_process";
import { resolve, relative } from "node:path";

let input = "";

for await (const chunk of process.stdin) {
  input += chunk;
}

const event = JSON.parse(input);
const projectDir = resolve(event.cwd || process.cwd());
const requestedPath = event.tool_input?.file_path;

if (typeof requestedPath !== "string") {
  process.exit(0);
}

const filePath = resolve(projectDir, requestedPath);
const pathFromProject = relative(projectDir, filePath);
const isOutsideProject =
  pathFromProject === ".." ||
  pathFromProject.startsWith("../") ||
  pathFromProject.startsWith("..\\");

if (isOutsideProject) {
  console.error(`Refusing to format a file outside the project: ${filePath}`);
  process.exit(1);
}

const result = spawnSync(
  "npx",
  ["prettier", "--write", filePath],
  {
    cwd: projectDir,
    encoding: "utf8",
    shell: false,
  },
);

if (result.stdout) {
  process.stderr.write(result.stdout);
}

if (result.stderr) {
  process.stderr.write(result.stderr);
}

process.exit(result.status ?? 1);

Register that script in the project settings. The matcher keeps it limited to successful file writes by Claude.

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/format-edited-file.mjs\"",
            "timeout": 60
          }
        ]
      }
    ]
  }
}

Hook inputs evolve. Compare the event fields with Anthropic's current hooks guide and test the script on a disposable file. If the repository already formats through lint-staged or the editor, you may not need this hook at all.

Migrate one hook at a time:

  1. Write down the behavior and why it exists.
  2. Find the closest Claude Code event.
  3. Check the current event input schema.
  4. Run it against a harmless fixture.
  5. Confirm its failure behavior.
  6. Remove the Kiro hook only after parity.

Be especially careful with hooks that deploy, delete, or call an external API. A familiar filename does not make an incompatible event safe.

Re-register MCP servers

MCP is the most portable part conceptually and the least portable as a raw config file. Both products support local and remote MCP servers, but config paths, scope, authentication, and approval settings can differ.

List the Kiro servers first, then add each one through Claude Code's current MCP command or project configuration. Test a read-only tool before granting write access.

claude mcp list
claude mcp add --transport stdio filesystem -- \
  npx -y @modelcontextprotocol/server-filesystem .
claude mcp list

The filesystem server above can read the directory you pass to it. Use a narrower directory than . when the server does not need the whole repository. Never move API keys from a committed Kiro file into another committed file.

Verify the migration

Start a fresh Claude Code session so it discovers the new files. Ask it to state which instructions loaded, then give it one small task covered by an existing Kiro spec.

Read docs/specs/checkout/requirements.md, design.md, and tasks.md.
Do not edit yet.
Report the next incomplete task, its dependencies, the project rules that apply,
and the exact checks you will run after implementation.

Compare that plan with what Kiro produced. You are looking for missing constraints, not identical wording.

After the small task, run the same baseline commands from the migration branch:

set -euo pipefail

npm run typecheck
npm run lint
npm test
npm run build
git diff --check
git status --short

Keep .kiro for a few real tasks. Once the new workflow consistently loads the right instructions, respects specs, runs hooks, and reaches the same quality gates, remove the old configuration in a separate commit. That separation makes rollback obvious.

Frequently asked questions

Can I migrate a Kiro project to Claude Code?

Yes. Source code and spec Markdown need no conversion. Persistent instructions, conditional loading, hooks, and MCP registration need explicit mapping and testing.

What replaces Kiro steering in Claude Code?

Use CLAUDE.md for short repository-wide instructions, .claude/rules/ for focused or path-scoped rules, and .claude/skills/ for workflows that should load on demand.

Do Kiro hooks work unchanged in Claude Code?

No. Recreate the intended behavior against Claude Code's current event and input schema. Test every migrated hook before deleting its Kiro version, especially hooks with external side effects.

The $29 Code Kit is a one-time Claude Code harness for builders who want the planning, build handoffs, evaluation, browser and API testing, and quality gates already wired together. It requires a paid Anthropic plan for Claude Code, and it does not replace that plan. The value is the maintained pipeline, not pretending two configuration formats are interchangeable.

Posted by @speedy_devv

Continue in Workflow

  • Agentic Commerce: How to Build an App AI Agents Can Pay For
    A plain-English guide to agentic commerce in 2026: what x402, ACP, and the Machine Payments Protocol do, plus a weekend walkthrough for shipping a paid API that AI agents can buy from.
  • Claude Code Best Practices
    Five habits separate engineers who ship with Claude Code: PRDs, modular CLAUDE.md rules, custom slash commands, /clear resets, and a system-evolution mindset.
  • Claude Code Auto Mode
    A second Sonnet model reviews every Claude Code tool call before it fires. What auto mode blocks, what it allows, and the allow rules it drops in your settings.
  • Channels, Routines, Teleport, Dispatch
    The four Claude Code features Anthropic shipped in March and April 2026 that turn the CLI into an event-driven coordination layer across phone, web, and desktop.
  • Claude Code 1M Context in Practice: When Bigger Isn't Better
    The 1M-token context window is GA at flat pricing, but bigger isn't always better. A decision framework, token-cost math, and when to use /compact, subagents, and dynamic workflows instead.
  • How to Build an Admin Dashboard With Claude Code
    Ship an internal admin panel with Claude Code: role-gated routes, a searchable users and orders table with pagination, impersonation-safe RLS, and metrics tiles pulled through a type-safe API.

More from Handbook

  • Agent Fundamentals
    Five ways to build specialist agents in Claude Code: Task sub-agents, .claude/agents YAML, custom slash commands, CLAUDE.md personas, and perspective prompts.
  • Agent Harness Engineering
    The harness is every layer around your AI agent except the model itself. Learn the five control levers, the constraint paradox, and why harness design determines agent performance more than the model does.
  • Agent Patterns
    Orchestrator, fan-out, validation chain, specialist routing, progressive refinement, and watchdog. Six orchestration shapes to wire Claude Code sub-agents with.
  • Agent Teams Best Practices
    Battle-tested patterns for Claude Code Agent Teams. Context-rich spawn prompts, right-sized tasks, file ownership, delegate mode, and v2.1.33-v2.1.45 fixes.

Stop configuring. Start building.

SaaS builder templates with AI orchestration.

See what we build for companies →

On this page

The migration map
Final file tree
Make a reversible copy
Move always-on steering
Translate file-matched steering
Turn manual steering into a skill
Keep Kiro specs intact
Rebuild hooks by behavior
Re-register MCP servers
Verify the migration
Frequently asked questions
Can I migrate a Kiro project to Claude Code?
What replaces Kiro steering in Claude Code?
Do Kiro hooks work unchanged in Claude Code?

Stop configuring. Start building.

SaaS builder templates with AI orchestration.

See what we build for companies →