Deploy permission policies to your fleet to restrict what the agent can do — block dangerous shell commands, deny web access, or force prompts for specific capabilities. These rules are enforced at the agent level and cannot be overridden by individual users.
When an admin rule and a user rule target the same capability, resolution is simple:
deny > ask > allow
An admin deny blocks the operation regardless of what the user's personal permissions allow. An admin ask forces a prompt even if the user has an allow rule for that capability.
Admin policies can only use deny or ask — never allow. Admins restrict; they don't grant.
Place a JSON policy file at the OS-protected path for your platform. These paths require administrator or root access, so regular users cannot modify them. The policy applies to every Kiro surface on the machine — both the IDE and the CLI read the same file.
Create or edit the managed settings file:
sudo mkdir -p "/Library/Application Support/Kiro" sudo nano "/Library/Application Support/Kiro/managed-settings.json"
Add your policy rules:
{ "rules": [ { "capability": "web_fetch", "effect": "deny" }, { "capability": "shell", "match": ["rm *", "sudo *"], "effect": "deny" } ] }
You can also deploy this file via MDM (e.g., Jamf, Kandji) to manage it at scale.
Restart Kiro for the policy to take effect.
Each rule follows the same schema as user-authored permissions:
| Field | Description | Required |
|---|---|---|
capability | The operation type to control (shell, fs_read, fs_write, web_fetch, mcp, etc.) | Yes |
match | Glob patterns the resource must match | No (defaults to all resources) |
exclude | Glob patterns that exempt a resource from the rule | No |
effect | deny or ask (admin rules cannot use allow) | Yes |
For the full list of capabilities and pattern syntax, see Permissions.
{ "rules": [ { "capability": "web_fetch", "match": ["*"], "effect": "deny" }, { "capability": "web_search", "effect": "deny" }, { "capability": "shell", "match": ["curl *", "wget *"], "effect": "deny" } ] }
Prevents the agent from fetching URLs, searching the web, or using shell commands that could exfiltrate data.
{ "rules": [ { "capability": "web_fetch", "exclude": ["docs.aws.amazon.com", "*.amazonaws.com", "*.github.com"], "effect": "deny" } ] }
Denies web fetch to any domain except those in the exclude list. Domains matching the exclude patterns have no admin rule — they fall through to the user's own permissions (which may allow or ask).
{ "rules": [ { "capability": "mcp", "effect": "ask" } ] }
Even if a user has { "capability": "mcp", "effect": "allow" } in their personal permissions, the admin ask wins — every MCP tool call prompts for confirmation.
{ "rules": [ { "capability": "shell", "match": ["rm *", "sudo *", "chmod *", "chown *", "mkfs *"], "effect": "deny" } ] }
{ "rules": [ { "capability": "fs_write", "match": ["~/**"], "exclude": ["~/.kiro/**"], "effect": "deny" } ] }
Blocks the agent from writing to the user's home directory (except Kiro's own config directory), even if the user has broader write permissions configured.
Permission policies are validated when Kiro starts:
effect: "allow" are rejected (admin policies only permit deny and ask). The entire file fails, with the same fail-closed result.effct instead of effect) from silently disabling admin rules.After deploying the policy:
web_search)When a tool call is denied by an admin policy, the user sees a message indicating the restriction is managed by their organization and cannot be overridden.
Permission policies work alongside Kiro's other enterprise governance features:
Permission policies give you fine-grained control over the agent's behavior at the capability and pattern level. For simple on/off toggles, the console-based governance settings may be sufficient. Use permission policies when you need pattern matching, allowlisting, or capability-specific restrictions that the console doesn't offer.
Permission policies