GATE010: Destructive tool exposed

The agent has tools that delete, drop, destroy or otherwise irreversibly remove state.

  • Name
    Severity
    Type
    High
    Description

    Default severity. An individual finding may be reported higher or lower when the surrounding configuration justifies it.

  • Name
    Capabilities
    Type
    delete
    Description

    Capability classes this rule reasons about.

  • Name
    Explain locally
    Type
    gate explain GATE010
    Description

    The same text, in your terminal, with no network access.

What Gate detected

Gate classified one or more tools or grants as carrying the delete capability, deleting files, dropping tables, deleting branches or repositories, revoking access, terminating resources.

Why this matters

Destructive operations are the ones you cannot fix by re-running the agent correctly. Every other class of mistake is recoverable at some cost; deletion frequently is not, and the cost lands on whoever needed the data.

Agents make destructive mistakes for reasons that have no analogue in normal software: a misread instruction, a hallucinated resource name, an injected instruction in a document, or simple over-eagerness in cleaning up. The mitigation is not better prompting: it is not granting deletion, or gating it behind a human.

Example

This is the shape of configuration that triggers the rule.

// github.delete_branch     -> delete
// postgres.drop_table      -> delete
// filesystem.move_file     -> write, delete

Remediation

Remove destructive tools from the agent unless deletion is the job. Where it is, use a credential that cannot delete, add a soft-delete layer, or require explicit human approval for that specific tool. Backups are a control here too: a destructive capability against a system with tested restores is a different risk from one without.

Suppressing this rule

If this finding is acceptable in your repository, record why alongside the suppression:

gate.config.ts

export default defineConfig({
  ignore: [
    {
      rule: 'GATE010',
      reason: 'Why this is acceptable here',
    },
  ],
})

Gate refuses to apply an ignore entry with no reason. The reason is the only thing that will tell the next person whether the suppression is still true.

References

Was this page helpful?