Crew gives an AI agent real tool access — file reads, shell commands, web browsing. The security model is defense-in-depth: multiple independent layers, each enforced at the runtime boundary rather than relying on prompt instructions alone.
Every tool call passes through these checks in order:
The security event log records every decision at every step. It is cross-cutting, not a sequential gate.
The OS sandbox hides credential paths from agent subprocesses. Configure from Settings → Security or via kirocrew config set agent.sandbox <mode>.
| Mode | What's hidden | What's accessible | Best for |
|---|---|---|---|
auto (default) | .gnupg, .gcloud, .azure, .docker | .aws, .ssh, .kube | Most users — allows git-over-SSH and AWS CLI |
strict | All of the above + .aws, .ssh, .kube | Only ~/.ssh/known_hosts | Locked-down deployments |
off | Nothing | Everything | When you understand the trade-off |
On Linux the sandbox uses user/mount namespaces. On macOS it uses Seatbelt profiles.
The sandbox is fail-closed when Crew cannot apply it. On Linux, this includes armv7l, riscv64, ppc64le, and s390x, or a libc without prctl. On Windows, it applies when Kiro CLI's internal sandbox is off. In these cases, Crew refuses to start the agent unless you explicitly set agent.sandbox to off or set agent.sandbox_allow_unsandboxed_exec to true.
Control how the agent gets permission to run tools. Configure from Settings → Security or the per-session Autopilot toggle. When Crew blocks a call, its refusal tells the agent which action is allowed instead of leaving it to retry the same request.
| Level | What happens |
|---|---|
| Interactive (default) | Every tool call prompts for approval in the dashboard or messaging channel |
| Trust this command | Session-scoped auto-approval for this exact tool + args |
| Trust this tool | Session-scoped auto-approval for the tool with any args |
| Autopilot | All tools auto-approved for this session (deny rules still apply) |
Denied commands and sensitive-path blocks are never bypassed — even in Autopilot mode.
When several tool calls wait on you at once, one click approves or rejects all of them. The confirmation lists every command it covers.
You can also reject a single call and keep reviewing the rest, rather than declining the entire batch. A rejection applies only to that call, so the agent can revise it and ask again.
If a restart ends an active time-limited auto-approve grant, Crew reports that the grant was dropped. If a tool call is declined by the host rather than a person, Crew names the cause, such as an expired approval, exhausted turn budget, or failed Slack delivery.
Long shell commands show a readable summary of what the command does. The verbatim command is one hover away.
When you use the Claude Code harness, a tool already pre-approved in Claude's own settings bypasses Crew's approval flow. Crew's deny rules and audit log do not observe that call. Codex refuses to start when agent.sandbox is off, because Crew remains its OS-level sandbox boundary.
kirocrew chat displays tool permission prompts inline. Turns no longer hang silently until they time out when running from the terminal.
Built-in patterns block destructive operations and common credential-exfiltration paths before approval. Examples:
rm -rf /, rm -rf ~git push to protected branches (main, mainline)cat ~/.aws/credentials, cat ~/.ssh/id_rsacurl 169.254.169.254 (IMDS metadata)aws ec2 terminate-instances, cdk destroy, DROP TABLEecho $AWS_SECRET*, credential-revealing commandsThe matcher continues to enforce deny rules through shell quoting, escapes, command substitution, and wildcard-spelled program names. It no longer blocks ordinary work just because it resembles a risky command: recursive grep in a worktree, a cd followed by a pipe, and heredocs containing backticks run normally.
Manage rules from Settings → Security → Denied Commands. You can disable eligible individual rules by ID, disable all non-pinned rules, or add custom patterns. Rules contributed by your edition are tagged in the list and can also be switched off by ID.
Credentials are protected at multiple levels:
.aws, .ssh, .gnupg, .env, and other credential files through tool callsSecrets live in an encrypted vault instead of your config file. Manage them from Settings → Secrets in the dashboard: values stay masked in the UI and are never sent to the browser, so the dashboard shows only each secret's name.
An MCP server's environment can name a stored secret as secret://NAME. The value is resolved from the vault at spawn time, so the secret never sits in on-disk config:
{ "mcpServers": { "example": { "command": "example-server", "env": { "API_TOKEN": "secret://EXAMPLE_API_TOKEN" } } } }
If the named secret is missing from the vault, the spawn fails rather than starting the server without it.
Each messaging channel is locked to authorized users:
KIROCREW_OWNER_ID (single owner)allow_all_users opt-in)Non-authorized messages are silently dropped and recorded in the audit log.
Optional policy and profile files compose with a tightest-wins model. A running app or agent can narrow the allowed scope but cannot loosen the ceiling. In every sandbox mode, the security policy, admission policy, profiles, and denied-command list are mounted read-only, so a sandboxed script, Hook, or command cron cannot rewrite those controls.
~/.kiro/crew/security_policy.json)~/.kiro/crew/profiles/)Administrators can publish one security_policy.json at a URL and have every host fetch, cache, and periodically refresh it. A policy change takes effect fleet-wide without a restart or a host visit. If the source is unreachable, hosts keep using the cached copy. A document that fails validation is rejected rather than lowering the running ceiling.
On an enterprise Kiro account with an administrator-configured MCP registry, org-level MCP controls take effect, including version pins. Personal accounts are not affected.
Administrators can authorize their own OAuth providers by configuration, without waiting for a release to add one.
Inspect from the CLI:
kirocrew policy show # display effective policy kirocrew policy validate # check policy files for errors kirocrew policy explain # explain how a tool call would be evaluated
Every tool call, approval, denial, and security event is recorded. Inspect from the CLI:
kirocrew security events # view recent security events kirocrew security audit # view the audit trail kirocrew security verify # verify audit-log integrity
The audit trail can be reviewed from the dashboard under Settings → Security.
agent.sandbox at auto or strict — don't run with off unless you have a specific reasonFor the full security architecture including implementation details, see the KiroCrew repository.
Security