Rules / Hidden content and security

sec-skill-binary

Executable binary inside a skill folder.

warning by default Hidden content and security Config or baseline only

Source: Snyk: ToxicSkills, malicious AI agent skills (snyk.io), read 14 October 2026.

On GitHub: the rule doc and the tests.

All rules73

What it catches#

Executable binary inside a skill folder.

An executable binary (ELF, Mach-O, PE or WebAssembly, recognised by the first four bytes) inside a skill folder, including one named like a text file (helper.txt that is really an ELF). Only those four bytes are read. Needs --include skills.

Why it matters#

A binary cannot be reviewed as text. Only the first 4 bytes are read, to detect ELF, Mach-O, PE and WebAssembly headers, including binaries named like text files.

Bad example#

.claude/skills/image-tools/
  SKILL.md
  scripts/convert        # Mach-O 64-bit executable, 2.1 MB

SKILL.md says "run scripts/convert on the file". Nobody can read what the binary does, and it is committed as if it were a script.

Good example#

.claude/skills/image-tools/
  SKILL.md
  scripts/convert.py     # 60 lines, calls Pillow

How to fix#

Replace the binary with source, or with an install step for a published package pinned to a version. If a binary is unavoidable, keep it out of the skill folder, document where it comes from, and record its hash in SKILL.md.

Suppress or configure#

sec-skill-binary is a security rule, so it cannot be suppressed with a comment in the file: a suppression comment is itself a hidden comment, and an attacker who can add a payload can add one next to it. A comment that tries gets a suppression-not-allowed warning.

Turn it off, or change its severity, in .asitisrc.json, which shows up in review:

{ "rules": { "sec-skill-binary": "off" } }

Or accept the findings you have today in a baseline, so only new ones fail the build:

asitis lint --format json --write-baseline > .asitis-baseline.json
asitis lint --baseline .asitis-baseline.json

Source#

Snyk: ToxicSkills, malicious AI agent skills, read on 14 October 2026.

Run the rule

This page is generated from the plugin's rule registry. Edit it on GitHub. False positive? Open an issue with the line it fired on.