Loading image...Kiro

Product

  • About Kiro
  • IDE
  • CLI
  • Web
  • Mobile
  • Pricing
  • Downloads

For

  • Enterprise
  • Startups
  • Students

Community

  • Overview
  • Ambassadors
  • Discord
  • Events
  • Powers
  • Shop
  • Showcase

Resources

  • Docs
  • Blog
  • Changelog
  • FAQs
  • Report a bug
  • Suggest an idea
  • Billing support

Social

Site TermsLicenseResponsible AI PolicyLegalPrivacy PolicyCookie Preferences
Loading image...Kiro
  • CLI
  • IDE
  • Web
  • Mobile
  • Enterprise
  • Pricing
  • Docs
SIGN INDOWNLOADS
Loading image...Kiro

Get Started

InstallationAuthenticationYour first project

Models

OverviewAvailable modelsReasoning effort

Features

How Kiro works
Specs
Steering
Hooks
MCP
Permissions
Custom agents
Agent Skills
Powers
CompactionKiroignoreCheckpoints and rewind
Built-in tools
Configuration scopes

IDE 1.x

What's new in 1.0
Setup & First Run
Editor
Chat
Experimental
Troubleshooting0.x reference

CLI

What's new in 3.0
Migration guide
Upgrading agent configs
Permissions migration
Hooks migration
Agent config changes
New features in 3.0
Tangent
Setup & First Run
Terminal UI
Chat
Headless modeACPAuto complete
Experimental
2.x reference

Web - Preview

Setup & First RunIdentity Center
Connect your repositories
Working with the agent
Autonomous modeAutomations
Sandbox

Mobile - Preview

Overview

Commands and Reference

CLI commandsSlash commandsBuilt-in toolsExit codesSettingsIDE keyboard shortcuts

Billing

OverviewManaging your subscriptionUpgrading your planDowngrading your planCancelling your planPurchasing add-on creditsManaging your paymentsManaging usage notificationsManaging your taxesContacting billing supportDeleting your accountRelated questions

Enterprise

ConceptsOnboarding quickstart
Connecting your identity provider
Subscribe your teamManage subscriptions
Governance
Monitor and track
SettingsManaged updatesBillingIAMSupported regions

Privacy and Security

OverviewData protectionCode referencesCompliance validationInfrastructure securityIAM permissionsFirewalls, proxies, and data perimetersVPC endpoints (AWS PrivateLink)

Guides

Overview
Language support
Learn by playing

Migration

Migrating from Q DeveloperMigrating from VSCodeUpgrading from Q CLI
  1. Docs
  2. CLI
  3. What's new in 3.0
  4. Migration guide

Migration guide


Follow these steps in order to upgrade from CLI 2.x to 3.0.

1. Export sessions before upgrading

Session data format has changed and existing sessions are not automatically migrated. Back up your session data before upgrading:

bash
# Back up your session directory cp -r ~/.kiro/sessions ~/.kiro/sessions-v2-backup

After upgrading, session import capabilities will be available to restore key sessions. Complex sessions with extensive tool result history may lose some historical tool outputs — the conversation flow and decisions are preserved.

2. Migrate hooks to .kiro/hooks/*.json

Hooks have moved from embedded agent config to standalone files.

Old format — do not use in 3.0 (shown for migration reference only):

json
{ "hooks": { "agentSpawn": [{"command": "echo 'starting'", "matcher": ".*"}], "preToolUse": [{"command": "npm run lint", "matcher": "Write|Edit"}], "fileEdited": [{"command": "prettier --write", "matcher": "\\.ts$"}] } }

New format (.kiro/hooks/my-hooks.json):

json
{ "version": "v1", "hooks": [ { "name": "lint-on-save", "trigger": "PostFileSave", "matcher": "\\.ts$", "action": { "type": "command", "command": "npm run lint" }, "timeout": 30, "enabled": true }, { "name": "format-on-save", "trigger": "PostFileSave", "matcher": "\\.ts$", "action": { "type": "command", "command": "prettier --write {{filePath}}" }, "timeout": 10, "enabled": true } ] }

Trigger name mapping:

Old TriggerNew TriggerNotes
agentSpawnSessionStartFires when a new session begins
userPromptSubmitUserPromptSubmitFires before the agent processes a prompt
preToolUsePreToolUseFires before a tool executes
postToolUsePostToolUseFires after a tool completes
fileEditedPostFileSaveFires after a file is written
fileCreatedPostFileCreateFires after a new file is created (IDE legacy alias, now unified)
agentStop / stopStopFires when the session ends — agentStop is IDE legacy; CLI used stop

New triggers in 3.0:

TriggerDescription
PreTaskExecBefore a task/plan step executes
PostTaskExecAfter a task/plan step completes
PostFileDeleteAfter a file is deleted
ManualTriggered only by explicit user invocation

3. Migrate trust config to permissions.yaml

Before migrating manually, run kiro-cli agent migrate — it auto-converts compatible rules and reports what needs manual attention. Review the output, then apply the remaining changes below.

For CI pipelines, --trust-all-tools still works as a session-scope override. Alternatively, create ~/.kiro/settings/permissions.yaml with capability: all, effect: allow in your CI environment.

Old approach:

bash
kiro-cli --trust-all-tools kiro-cli --trust-tools shell,write /tools trust write /tools trust-all

New approach (~/.kiro/settings/permissions.yaml for user scope):

yaml
rules: - capability: shell match: ["git *", "npm *", "npx *"] effect: allow - capability: fs_write match: ["src/**", "tests/**"] effect: allow - capability: fs_read effect: allow - capability: mcp match: ["my-server/*"] effect: allow

For the full reference — behavioral changes, scope definitions, and pattern conversion table — see Permissions migration →.

4. Update agent configs

Agent profiles are backward-compatible — existing configs continue to work. The unified agent harness adds new optional fields and a Markdown format option.

Old format (.kiro/agents/my-agent.json):

json
{ "name": "backend-dev", "description": "Backend development agent", "prompt": "You are a backend developer.", "model": "claude-sonnet-4", "tools": ["fs_read", "fs_write", "execute_bash", "grep", "glob"], "toolsSettings": { "execute_bash": { "allowedCommands": ["^git status$", "^npm test"], "deniedCommands": ["^rm -rf"], "denyByDefault": false }, "fs_read": { "allowedPaths": ["src/**"], "deniedPaths": [".env"] }, "fs_write": { "allowedPaths": ["src/**"] } } }

New format (.kiro/agents/backend-dev.json):

json
{ "name": "backend-dev", "description": "Backend development agent", "prompt": "file://resources/PROMPT.md", "model": "claude-sonnet-4", "tools": ["read", "write", "shell"], "permissions": { "rules": [ { "capability": "shell", "match": ["git status", "git diff", "npm test*"], "effect": "allow" }, { "capability": "shell", "match": ["rm -rf*"], "effect": "deny" }, { "capability": "fs_read", "match": [".env", "secrets/**"], "effect": "deny" }, { "capability": "fs_write", "match": ["*.lock"], "effect": "deny" } ] } }

The tools field now uses tags (category names like read, write, shell) instead of individual tool IDs. The toolsSettings block is replaced by the permissions.rules array.

Migrating toolsSettings to permissions:

V2 toolsSettingsV3 permissions rule
execute_bash.allowedCommands: ["^git status$"]{ "capability": "shell", "match": ["git status"], "effect": "allow" }
execute_bash.deniedCommands: ["^rm -rf"]{ "capability": "shell", "match": ["rm -rf*"], "effect": "deny" }
execute_bash.denyByDefault: true{ "capability": "shell", "exclude": ["git *", "npm *"], "effect": "deny" }
fs_read.allowedPaths: ["src/**"]{ "capability": "fs_read", "match": ["src/**"], "effect": "allow" }
fs_read.deniedPaths: [".env"]{ "capability": "fs_read", "match": [".env"], "effect": "deny" }
fs_write.allowedPaths: ["src/**"]{ "capability": "fs_write", "match": ["src/**"], "effect": "allow" }

Note: V2 allowedCommands/deniedCommands used regex patterns. V3 uses glob — simple patterns translate directly (remove anchors ^/$, replace .* with *). Complex regex must be rewritten as multiple glob rules.

New format — Markdown (.kiro/agents/backend-dev.md):

markdown
--- name: backend-dev description: Backend development agent model: claude-sonnet-4-20250514 tools: ["read", "write", "shell", "grep"] excludedTools: ["knowledge"] includeMcpJson: true includePowers: false mcpServers: postgres: command: npx args: ["-y", "@modelcontextprotocol/server-postgres"] env: DATABASE_URL: "${DATABASE_URL}" resources: - file://./ARCHITECTURE.md - skill://backend-patterns permissions: rules: - capability: shell match: ["npm *", "node *"] effect: allow welcomeMessage: "Ready to work on backend code." --- You are a backend developer focused on Node.js and TypeScript. Always use async/await. All database queries must be parameterized.

New fields reference:

FieldTypeDescription
excludedToolsstring[]Tools to exclude even if tools allows them
includeMcpJsonbooleanInclude workspace .kiro/settings/mcp.json servers
includePowersbooleanInclude IDE-installed powers
resourcesstring[]URIs to load into context: file://./path, skill://name
permissionsobjectInline policy rules (agent scope, supports all effects)
welcomeMessagestringCustom greeting on session start

MCP servers in agent profiles — supports stdio and HTTP:

json
{ "mcpServers": { "local": { "command": "npx", "args": ["-y", "@org/server"], "env": {} }, "remote": { "url": "https://api.example.com/mcp", "headers": { "Authorization": "Bearer ${TOKEN}" } } } }

Environment variables use ${VAR} syntax and are expanded at runtime.

5. Replace aws_tool with MCP server

The built-in aws_tool has been removed. Configure an AWS MCP server instead. Check the MCP server registry for available AWS servers, or use a community server:

.kiro/settings/mcp.json:

json
{ "mcpServers": { "aws": { "command": "npx", "args": ["-y", "@aws/aws-mcp-server"], "env": { "AWS_PROFILE": "${AWS_PROFILE}", "AWS_REGION": "${AWS_REGION}" } } } }

For example, @aws/aws-mcp-server is the official package. See the MCP registry → for other options.

6. Update scripts referencing old tool IDs

If you have hooks, permissions, or scripts that reference tool IDs, update them:

Old Tool ID (2.x)New Tool IDCapability
readFilereadfs_read
writeFile / fsWritewritefs_write
listDirectoryglobfs_read
grepSearchgrep / grep_searchfs_read
fileSearchfile_searchfs_read
webFetchweb_fetchweb_fetch
webSearchweb_searchweb_search

Both old camelCase IDs and new IDs are accepted in agent profiles and permissions. Use the new IDs going forward.

Next steps

  • Permissions migration — detailed guidance on migrating trust flags to permissions.yaml
  • Hooks migration — full trigger mapping and new format reference

7. Validate your migration

bash
kiro-cli diagnostic

This checks for: invalid hook schemas, agent configs referencing removed tools (including aws_tool), and permissions file syntax errors. Fix any reported warnings before deploying to CI.

Page updated: August 4, 2026
What's new in 3.0
Upgrading agent configs