Rules / Hidden content and security
unsafe-path
File path contains control, bidi or invisible characters.
Source: Trojan Source (Boucher and Anderson) (trojansource.codes), read 14 October 2026.
On GitHub: the rule doc and the tests.
All rules73
What it catches#
File path contains control, bidi or invisible characters.
A file name or folder name that contains control characters, bidirectional controls or invisible characters. The message shows the path with those characters escaped.
Why it matters#
A path that displays differently from how it is stored can disguise which file an agent loads.
Bad example#
$ ls .claude/rules | cat -A
security.md$
securM-bM-^@M-^Kity.md$
Two files that both display as security.md; the second has a zero-width space inside the name. A reviewer sees one rules file. Claude Code loads both, and the second can say anything.
Good example#
$ ls .claude/rules | cat -A
security.md$
How to fix#
Rename the file to plain ASCII: git mv ".claude/rules/$(printf 'security.md')" .claude/rules/security-2.md, then decide whether its contents belong anywhere. ls | cat -A or find . -name '*[^ -~]*' lists names with non-ASCII bytes.
Suppress or configure#
unsafe-path 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": { "unsafe-path": "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#
Trojan Source (Boucher and Anderson), read on 14 October 2026.
Related guides
Run the rule
- In your browser, on one file
- In Claude Code, on the project
- In CI, on every pull request
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.