Rules

Gate ships 22 deterministic security rules. Each one has a stable ID, a documented reason, and a remediation you can act on.

See them in your terminal

gate rules
gate explain GATE005

All rules

RuleSeverityTitle
GATE001CriticalHardcoded credential in agent configuration
GATE004CriticalCredential embedded in URL
GATE005CriticalArbitrary command execution capability
GATE008CriticalSensitive filesystem path exposed to agent
GATE011CriticalFinancial capability exposed
GATE015CriticalExcessive capability combination
GATE002HighCredential passed in command arguments
GATE003HighInsecure remote MCP transport
GATE006HighShell wrapper execution in MCP command
GATE009HighFilesystem access extends beyond the repository
GATE010HighDestructive tool exposed
GATE012HighAdministrative capability exposed
GATE013HighSecret retrieval capability exposed
GATE014HighPossible production environment access
GATE018HighDangerous capability added since baseline
GATE020HighEnvironment passthrough exposes multiple credentials to one server
GATE007MediumUnpinned MCP package
GATE016MediumTool description contradicts its capability
GATE017MediumRemote MCP server has no configured authentication
GATE019MediumAgent auto-approves tool execution
GATE021MediumMCP server sourced from an unverified remote script
GATE022LowAgent configuration is not tracked in version control

How rules work

Rules are deterministic. Given the same configuration they always produce the same findings, with no network access, no model, and no ambient state. That is what makes it reasonable to fail a build on their output.

Rules reason about capabilities, not tool names. write_file, fs.put and apply_patch are three names for the same consequence, and Gate normalises all of them before any rule runs. That is why a rule written once works across Claude Code, VS Code, Cursor, Windsurf, Codex and anything else that speaks MCP.

IDs are stable forever. A retired rule keeps its number and is marked deprecated rather than being reused, because a suppression written against GATE007 must never silently start suppressing something else.

Every rule on this page was generated from its own definition in packages/rules. The text you read here is the text gate explain prints, because there is only one copy of it.

Was this page helpful?