Rules

Every rule, with its source.

73 rules in version 0.3.0, each resting on a vendor's documentation or a documented attack, read on a stated date. Every page says what the rule catches and why it matters, shows a bad and a good example, and tells you how to fix it and how to configure it in .asitisrc.json.

Each rule's doc, code and tests are open source: the rules on GitHub.

error 21 fail the build by default warning 39 note 13

Rule ids are what you see in every finding, in SARIF and in .asitisrc.json. Severities are the defaults; the config file can raise, lower or switch off any rule, and the strict preset turns notes into warnings. Security rules can be switched off in the config file or a baseline only, never with a comment in the file.

Hidden content and security

Content an agent reads but a reviewer does not see, and scripts or settings that put the machine at risk. These rules cannot be silenced with a comment in the file.

  • bidi-control

    Bidirectional control characters

    error
  • hidden-comment

    Comments hidden in rendered views

    note
  • hidden-instruction

    Hidden comment that reads like an instruction to the agent

    error
  • hidden-styled-text

    Inline style or the hidden attribute hides text

    warning
  • invisible-char

    Invisible Unicode characters

    error
  • sec-encoded-blob

    Decodes base64 or hex and runs the result, or hides a command in an encoding

    warning
  • sec-hook-config

    Project hook or settings command fetches remote code, calls the network or redirects the API

    error
  • sec-mcp-inline-secret

    A key or token is written in plain text in an MCP server or settings env block

    error
  • sec-mcp-launcher

    MCP server runs an unpinned package or image, a downloaded script, or connects over plain http

    warning
  • sec-no-secret-deny

    The folder has a .env file but no permissions.deny rule keeps Claude Code out of it

    note
  • sec-permission-allow

    Allow rule or trust flag skips the prompt for any shell command, network tool or interpreter

    error
  • sec-permission-mode

    Settings turn on bypassPermissions or skip its confirmation

    warning
  • sec-remote-exec

    Downloads code and runs it (curl or wget piped to a shell, and similar)

    error
  • sec-safety-off

    Turns off the agent's permission checks

    warning
  • sec-script-instruction

    A script's comment or string gives the agent covert instructions

    warning
  • sec-script-invisible

    Invisible or bidirectional characters in a skill script

    warning
  • sec-secret-egress

    Reads a secret and sends data over the network in the same script or block

    error
  • sec-skill-allowed-tools

    allowed-tools grants unscoped Bash, all tools, any interpreter or unscoped WebFetch

    warning
  • sec-skill-arg-injection

    Skill argument is pasted into a !command that runs when the skill loads

    warning
  • sec-skill-binary

    Executable binary inside a skill folder

    warning
  • sec-skill-network

    Skill script makes network calls

    note
  • unclosed-comment

    HTML comment never closes

    warning
  • unsafe-path

    File path contains control, bidi or invisible characters

    warning

Format and vendor rules

The file is not read the way its author expects: frontmatter, required fields, values a tool rejects, links and imports that go nowhere, bytes that are not UTF-8.

Context budget

What a file costs in context every session, and the vendor limits past which it is cut off or followed less reliably.

Drift between files

Two files that should agree and do not, or a file one agent reads and another silently skips.

Configuration

.asitisrc.json, suppression comments and the agent config files the opt-in audit reads.

Reserved for later releases

These ids are in the registry so config files and later work agree on them, but no code emits them in 0.3.0. They are listed so a link from a config hint lands somewhere useful, and they are not part of the 73 above.

63 reserved ids

Missing a rule, or found a false positive?

Zero tolerance for noise is the goal: a rule that fires on a good file is a bug. Open an issue with the line it fired on, or read the plugin page for how the linter runs in Claude Code, in CI and in your browser.