Loading image...Kiro

Product

  • About Kiro
  • IDE
  • CLI
  • Web
  • Mobile
  • Crew
  • 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
  • Web
  • 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
Cloud sessionsCompactionKiroignoreCheckpoints 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
Voice modeHeadless modeACPAuto complete
Experimental
2.x reference

Crew

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

Web - Preview

Setup & First RunIdentity Center
Connect your repositories
Working with the agent
Autonomous modeAutomationsMemory
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 3.0
  4. Permissions migration
View as Markdown

Permissions migration

View as Markdown

New to Kiro CLI 3.0? This page covers changes from CLI 2.x. If you're setting up permissions for the first time, start here: Default behavior (no permissions.yaml): All operations prompt for approval. Nothing is silently allowed or denied. Create a permissions.yaml to pre-approve trusted operations and reduce interruptions.

The permissions system is the most significant change in CLI 3.0. Trust flags and slash commands are replaced by a structured permissions.yaml policy that gives you fine-grained, auditable control over what the agent can do.

Info

Run kiro-cli agent migrate to auto-convert compatible permission rules and get a report of what needs manual attention.

The core shift: instead of flags enabling broad access, you declare exactly which capabilities are allowed and for which operations. Everything else prompts or blocks by default.

Behavioral changes from 2.x

2.x Behavior3.0 BehaviorMigration
toolsSettings removedPer-tool settings block (allowedCommands, deniedPaths, etc.)Unified permissions.rules with capability/match/effect
autoAllowReadonly auto-approved read-only shell commandsNo equivalent — explicitly list allowed commandsAdd shell allow rules for read-only commands you use
denyByDefault blocked unlisted toolsNo equivalentUse exclude to allow exceptions: { capability: shell, exclude: ["git *", "npm *"], effect: deny } denies everything except the excluded patterns
Regex patterns in permissionsGlob patterns only (no regex)Rewrite .* as *, \.ts$ as *.ts, etc.
? single-char wildcardNot supported for shell/URL patternsUse * or spell out alternatives. File path patterns (fs_read, fs_write) still support ?
Separate fs_read/fs_write per toolUnified — a single fs_read deny blocks ALL read tools (read, glob, grep, code)Be aware of broader blast radius
Per-tool deny was independentdeny-always-wins across all scopesA deny anywhere blocks the action regardless of allows elsewhere

Old approach

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

New approach

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: 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 (no permissions.yaml)

Without any configuration, the agent applies these built-in defaults:

  • fs_read on ./** — read any workspace file silently
  • shell for common git read-only commands — git status, git log, git diff, and similar
  • shell for system info commands — pwd, whoami, uname, and similar
  • fs_write to ~/.kiro/settings/ and .kiro/settings/ — always denied (prevents privilege escalation)
  • Everything else — prompts for approval

Creating a permissions.yaml adds to these defaults; it does not replace them. The deny on settings paths is always enforced.

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: August 4, 2026
Upgrading agent configs
Hooks migration