Loading image...Kiro

Product

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

For

  • Enterprise
  • Startups
  • Students

Community

  • Overview
  • Ambassadors
  • Case studies
  • 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
  • Agents
  • Enterprise
  • Pricing
  • Docs
SIGN INDOWNLOADS
Loading image...Kiro

Get Started

InstallationAuthenticationYour first project

Models

OverviewAvailable modelsReasoning effortAWS GovCloud (US) models

Features

How Kiro worksACP integrations
Specs
Steering
Hooks
MCP
Permissions
Custom agents
Workflows
Agent Skills
Powers
Cloud sessionsMemoryCompactionKiroignoreCheckpoints 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 V3
Migration guide
Upgrading agent configs
Permissions migration
Hooks migration
Migrate an ACP client to CLI V3
Agent config changes
New features in V3
Tangent
Setup & First Run
Terminal UI
Chat
Fullscreen modeVoice modeHeadless modeACPAuto complete
Experimental
2.x reference

Crew

Quick startInstallationRunning 24/7
Chat
Agent Capabilities
Features
Interfaces
Apps
System & storageConfigurationSecurityTroubleshooting

Web

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

Mobile - Preview

Overview

Commands and Reference

CLI commandsSlash commandsBuilt-in toolsExit codesSettings

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
Deployment optionsSubscribe 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 V3
  4. Permissions migration
View as Markdown

Permissions migration

View as Markdown

New to Kiro CLI V3? This page covers migration from CLI 2.x. If you're setting up permissions for the first time, start with the current permissions reference. Without a permissions.yaml, Kiro allows workspace reads and common read-only commands, blocks writes to its own settings, and asks before other operations.

Kiro CLI V3 replaces persistent per-tool toolsSettings rules with structured permissions.yaml policies. The --trust-all-tools startup flag and /tools trust-all slash command grant session-wide trust. In non-interactive V3 runs, --trust-tools can pre-approve exact V3 tool IDs; the interactive V3 terminal UI ignores that flag. Use scoped permissions.yaml allow rules for reusable capability policies.

Info

Run /upgrade-agent to auto-convert compatible permission rules and get a report of what needs manual attention.

The core shift is from per-tool configuration to capability rules that apply consistently across every tool performing the same kind of operation.

Behavioral changes from 2.x

2.x behaviorV3 behaviorMigration
toolsSettings with per-tool allow and deny listsUnified permissions.rules with capability, match, and effectRewrite using the toolsSettings migration table →
autoAllowReadonly configured read-only shell approvalRead-only-shell policy generated by /upgrade-agent unless legacy denyByDefault also appliesRun /upgrade-agent, review the generated policy, and add shell allow rules for any additional commands you use
denyByDefault blocked unlisted tool operationsExplicit deny rules, optionally with exclude exceptionsUse { capability: shell, exclude: ["git *", "npm *"], effect: deny } to deny everything except the excluded patterns
Regex patterns in permissionsGlob patterns only (no regex)Rewrite .* as *, \.ts$ as *.ts, etc.
? single-character wildcard for command patternsNot supported for shell or URL patternsUse * or spell out alternatives. File path patterns (fs_read, fs_write) still support ?
Read and write restrictions configured per toolOne capability rule applies to every tool that performs that operationAccount for the broader scope of fs_read, fs_write, and other capabilities
Per-tool denies evaluated independentlyDeny always wins across all scopesRemove conflicting allows or narrow the deny pattern

Session-scoped commands

These controls apply only to the current session:

bash
# Trust every tool in a V3 session kiro-cli chat --v3 --trust-all-tools # In headless V3, trust exact tool IDs kiro-cli chat --v3 --no-interactive --trust-tools=read_file,grep_search "Review this repository" # In interactive V3, trust every tool after startup /tools trust-all

In V3, --trust-tools is honored only with --no-interactive and matches exact internal tool IDs. The interactive V3 terminal UI ignores it. CLI 2.x accepts its own tool names. For reusable or capability-level rules, use permissions.yaml.

Persistent rules

Create ~/.kiro/settings/permissions.yaml for user-scoped rules:

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

Workspace-scoped rules (~/.kiro/workspace-roots/<hash>/permissions.yaml) are stored per-user outside the repository, so a cloned repo cannot inject permission rules. Use them to scope rules to one project:

yaml
rules: - capability: shell match: ["rm -rf *", "sudo *"] effect: deny - capability: fs_write match: ["*.env", "*.pem", "*.key"] effect: deny

Rules are evaluated using a deny-overrides algorithm: deny > ask > allow. There is no precedence between scopes — the most restrictive effect wins regardless of which scope it came from.

Scopes

ScopeLocationAllowed effects
KiroHardcoded security invariants (cannot be overridden)deny, ask
administrationEnterprise/MDM-managed policy (enterprise plans only)deny, ask
user~/.kiro/settings/permissions.yamldeny, ask, allow
workspace~/.kiro/workspace-roots/<hash>/permissions.yamldeny, ask, allow
agentEmbedded in agent profile (permissions field)deny, ask, allow
sessionRuntime (e.g., --trust-all-tools)deny, ask, allow

Default permissions

Kiro applies shared built-in defaults before user, workspace, agent, and session rules. Creating a permissions.yaml adds to those defaults; it does not replace them. See Default behavior for the authoritative policy and protected paths.

CI and headless environments

For CI pipelines that previously used --trust-all-tools, create a user-scoped permissions file in your CI environment:

yaml
# ~/.kiro/settings/permissions.yaml (CI environment) rules: - capability: all effect: allow

The --trust-all-tools flag still works as a session-scope override and continues to function for CI use cases without configuration changes.

Available capabilities

fs_read, fs_write, shell, web_fetch, web_search, mcp, subagent, skill, power, context, diagnostics, sandbox_network. Meta-capabilities: all (everything), builtin (all built-in tools), filesystem (fs_read + fs_write).

Exclude syntax

Rules also support an exclude field for "allow everything except" patterns:

yaml
rules: - capability: mcp match: ["my-server/*"] exclude: ["my-server/dangerous-tool"] effect: allow
Page updated: October 10, 2026
Upgrading agent configs
Hooks migration