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
Capability-based permissions
Hooks
Agent config changes
Improved compaction
Setup & First Run
Editor
Chat
Experimental
Troubleshooting0.x reference

CLI

What's new in 3.0
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. IDE 1.x
  3. What's new in 1.0
  4. Capability-based permissions

Capability-based permissions


Overview

The capability-based permissions system replaces the 0.x trust model — trustedCommands with prefix matching and a separate command denylist with substring matching — with fine-grained, declarative control over what the agent can do. You define rules per capability, with match patterns and explicit effects. One rule can target an entire class of operations across all tools: a deny on fs_read blocks every tool that reads files, without enumerating them individually.

The Autopilot and Supervised autonomy modes remain (Settings → Agent → Agent Autonomy, settings key kiroAgent.agentAutonomy). They control whether file changes apply immediately or wait for review; the capability-based permissions layer applies after the autonomy mode determines whether to proceed. Together they give you coarse-grained control plus fine-grained rules.

How it works

ConceptDescription
Capabilitiesfs_read, fs_write, shell, web_fetch, web_search, mcp, subagent, skill, power, context, diagnostics, sandbox_network. Meta-capabilities expand: all (everything), builtin (all built-in tools), filesystem (fs_read + fs_write)
Effectsdeny (block always), ask (prompt you), allow (proceed silently)
Prioritydeny > ask > allow — a deny rule always wins regardless of scope
Match patternsGlob patterns scoping the rule (file paths for fs, command prefixes for shell, server/tool names for mcp)
ExcludeOptional glob patterns that must NOT match — enables "allow everything except X"
ScopesKiro (hardcoded invariants, deny/ask) · administration (enterprise-managed, deny/ask) · user (~/.kiro/settings/, all effects) · workspace (~/.kiro/workspace-roots/<hash>/, all effects) · agent (permissions field) · session (runtime). Most restrictive effect wins regardless of scope.

Defining rules

Permissions are defined in YAML files. There are two scopes:

Workspace-scoped (~/.kiro/workspace-roots/<hash>/permissions.yaml, stored per-user outside the repository) — use deny to block dangerous operations in a specific project:

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

User-scoped (~/.kiro/settings/permissions.yaml) — use allow to pre-approve trusted operations across all workspaces:

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

Migrating from 0.x

In 0.x, trust was configured per-tool: a single intent like "deny reads to .env" had to be set separately for every tool that could read files, and missing one left a gap. In 1.0, express the intent once at the capability level.

  • If you used trusted commands, translate each prefix into a shell allow rule (git *, npm *) in your user-scoped permissions.yaml.
  • If you relied on the command denylist, translate each entry into a shell deny rule. Deny rules win over allow rules in every scope.
  • No configuration is required up front. Without any rules, the agent can read workspace files and run read-only git commands; everything else prompts, and you can persist decisions from the prompt as "always allow" or "always deny" rules.

For the full reference (capabilities, pattern syntax, the interactive approval flow, and configuration examples), see Permissions.

Page updated: August 4, 2026
What's new in 1.0
Hooks