Skip to content
MoorAI
// free tool · runs in your browser

AI agent permission right-sizer

Paste the config of a coding agent or its MCP servers. You get what it is allowed to do, the grants that carry risk, ranked by severity, and a tighter version to copy, with the reason for every change. Add a usage export and it also marks the grants that were never used.

Your config never leaves your browser. The analysis runs in this page's own JavaScript. Nothing you paste or drop is sent to any server or stored, and nothing is kept after you close the tab. The page counts clicks on Analyze for its own statistics; that count carries no content.

Check a config

Format
Try a sample:

Usage (optional): mark the grants that were never used

Accepted: MoorAI allow-trail records (the on-device queue ~/.moorai/action-trail.jsonl, one JSON record per line), the console's allowed-actions JSON, a CSV with a tool column (optionally mcpServer and count), or a moorai-aibom JSON report. These carry tool names and counts only, never arguments, so shell rules are judged at the tool level.

Right-size continuously from real usage across your fleet

This page compares one config with one usage export. With MoorAI, the opt-in allow trail sends the console one content-free record for each tool call an agent was allowed to make (the tool name, never its arguments) from every enrolled device, and the hook on each device enforces the allow, ask and deny decisions before a call runs.

Install the free agent

What it checks

37 rules, each reading only the config you paste. The tool runs nothing from the config and contacts nothing it names.

SeverityFlagApplies toRaised when
CriticalPermission prompts are bypassedClaude CodedefaultMode is bypassPermissions: every tool call runs without asking.
CriticalAny shell command runs without a promptClaude Code, Gemini CLIBash, Bash(*) or a bare run_shell_command is auto-approved.
CriticalA secret-looking value is in your configevery formatAn env value, header, URL or argument looks like a key or token. Only the key name is shown.
CriticalCodex runs without a sandboxCodexsandbox_mode is danger-full-access, in the file or a profile.
HighThe bypass-mode warning is switched offClaude CodeskipDangerousModePermissionPrompt is true.
HighAn interpreter or package runner is auto-approvedClaude Code, Gemini CLIpython, node, sh, npx, eval and the like run any code their arguments contain.
HighA network tool is auto-approvedClaude Code, Gemini CLIcurl, wget, ssh, scp, nc and the like can move data off the machine.
HighPrivilege escalation is auto-approvedClaude Code, Gemini CLIsudo, su, doas or runas.
HighA shell rule starts with a wildcardClaude CodeA rule such as Bash(* --version) matches any program.
HighFile edits outside the project are auto-approvedClaude CodeAn Edit or Write allow rule anchored at // or ~/.
HighYour home or root directory is in the agent's reachClaude Code, Codex, MCP serversadditionalDirectories, writable_roots or a server's path argument is / or a home directory.
HighEvery project MCP server is approved automaticallyClaude CodeenableAllProjectMcpServers is true, so a cloned repository's .mcp.json starts its servers.
HighAn MCP server is fetched unpinnedevery MCP formatnpx -y, uvx, bunx or pnpm dlx with no exact version runs whatever is published today; a container with no tag or :latest likewise.
HighAn MCP server skips every confirmationGemini CLItrust is true on the server.
HighAll hooks are switched offClaude Code, Gemini CLIdisableAllHooks is true, or hooksConfig.enabled is false.
HighCodex never asks for approvalCodexapproval_policy is never, in the file or a profile.
MediumA whole command family is auto-approvedClaude Code, Gemini CLIgit *, docker *, kubectl *, aws * and the like allow every subcommand, including the destructive ones.
MediumA destructive command is auto-approvedClaude Code, Gemini CLIrm, git push, git reset, chmod, kubectl delete, terraform apply and the like.
MediumFile reads outside the project are auto-approvedClaude CodeA Read allow rule anchored at // or ~/.
MediumEvery web fetch runs without a promptClaude Code, Gemini CLIWebFetch or WebFetch(domain:*) is allowed, or web_fetch is in tools.allowed.
MediumNo deny rule protects secret filesClaude CodeNothing denies reads of .env files, ~/.ssh or cloud credentials.
MediumEvery tool of an MCP server runs without a promptClaude Codemcp__server or mcp__server__* is allowed (high when the server can run commands or holds credentials).
MediumAn MCP server can run commandsevery MCP formatIts name, package or arguments point at a shell, terminal or code runner.
MediumA remote MCP server is reached over plain HTTPevery MCP formatAn http:// URL that is not localhost.
MediumSandboxed commands may reach any hostClaude Codesandbox.network.allowedDomains contains *.
MediumSandboxed commands have network accessCodexsandbox_workspace_write.network_access is true.
MediumFile edits are auto-approvedGemini CLIgeneral.defaultApprovalMode is auto_edit.
HighHidden characters in a rules fileCursor rulesUnicode tags, bidirectional controls or zero-width characters a reviewer cannot see.
MediumThe rule tells the agent to fetch or run somethingCursor rulescurl, wget, a pipe to a shell, or an instruction to download or execute.
LowFile edits are accepted without a promptClaude CodedefaultMode is acceptEdits.
LowA classifier approves actions instead of youClaude CodedefaultMode is auto.
LowExtra directories are in the agent's reachClaude Code, CodexadditionalDirectories or writable_roots outside the project.
LowNo pre-tool hook checks calls before they runClaude Code, Codex, Gemini CLIOnly the permission rules stand between the model's decision and the action.
LowEvery environment variable reaches commandsCodexshell_environment_policy.inherit is all.
LowLive web search is onCodexweb_search is live.
LowYOLO mode is not disabledGemini CLIsecurity.disableYoloMode is not true, so --yolo still auto-approves everything.
InfoThis rule is added to every chatCursor rulesalwaysApply is true.

Supported formats and sources

Each format is read to its vendor's documented schema:

Codex config.toml is read by a small TOML parser built into this page, so no library is loaded from anywhere. MCP server scope (filesystem, network, credentials, cloud, command execution, database) is inferred from each server's command, arguments, name and environment-variable names. Their values are never shown; a value is only tested for whether it looks like a key or token.

Limits

  • One file at a time. Claude Code merges managed, user, project and local settings, and Codex and Gemini CLI layer theirs too, so a rule in another file can change the picture.
  • Rules match command text. Claude Code's own documentation notes that a deny rule does not match a program run by its full path or inside sh -c; a sandbox or a hook that reads the parsed command closes that gap.
  • Usage is tool-level. Allow-trail records carry the tool name, not its arguments, so a Bash(...) rule is marked used when the agent ran any shell command.
  • MCP scope is inferred from names and arguments, and can be wrong for a server with an unhelpful name.
  • The suggestion is a starting point. Placeholders such as <version> are yours to fill in, and a tightened config should be tried on real work before it is rolled out.

Background: permission right-sizing, least privilege for AI agents, excessive agency and MCP in the glossary.