akilint — penalty-card lint
Runs the shared detector — never a model sweep for what a grep settles:
python3 ~/.claude/skills/akiflow/scripts/scythe.py <file|dir> [...] # on other CLIs: the same path under that CLI's skills root
The script is the SSoT for these detectors — akiflow's aki-conduct seat runs the same one, so a card name means the same thing everywhere. Exit code: 0 clean, 1 findings — usable from CI or hooks without parsing.
Scope — what the script can and cannot claim
[WRAP]— a logical line split across physical lines: a 2-line comment whose second line reads as a lowercase continuation, or a markdown prose line broken mid-sentence. Root rule:agent.C3.[YAP]— a comment block ≥3 lines, or a comment line >200 chars. Always labeled (review): a flag for judgment againstcoding.B4, never an auto-delete verdict — a legitimate long WHY exists andagent.C3forbids wrapping it, so length alone convicts nothing.[FLUFF](density,agent.A4) is content understanding — a script cannot check it and this skill never claims it.
Protocol
- Run scythe on the paths in scope. Default scope = the files this session touched or the paths the user named; a repo-wide sweep is proposed in one line first, not assumed (
agent.B1). - Report the findings verbatim — they are already dense coordinates; do not re-narrate them.
- Fix
[WRAP]findings directly: rejoining is mechanical (agent.C3) — but honor C3's atomic-line cautions: never merge frontmatter fields, one-per-line directives, or any line something parses. - Judge each
[YAP]finding againstcoding.B4before touching it: fix the name/shape first, delete second, keep a genuine WHY (or move an oversize rationale to a doc and leave the reference,docs.B3). State in one line what was kept and why. - False positives (a legitimate docblock, a keyword list): name them as such in the report — do not silently skip, and do not "fix" them.