aislop — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited aislop (Agent Skill) and scored it 79/100 (yellow). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 5 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 5 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
aislop is a deterministic, open-source CLI that scans across six engines, grades 0–100, and catches 50+ rules across 7 languages: swallowed exceptions, hallucinated imports, silent recovery, narrative comments, as any casts, oversized functions, SQL injection, eval, hardcoded secrets, and architecture drift.
If you follow this skill, you don't ship slop. It does two jobs:
This skill is not "run aislop and report back" — the user could do that themselves. The value is the judgement layer: writing right the first time, reading each finding against source, and fixing what you can before escalating.
Supports TypeScript, JavaScript, Python, Go, Rust, Ruby, PHP, Expo/React Native.
This skill uses the aislop CLI, distributed through the public npm registry. Running npx aislop fetches and executes the published package — treat this as an untrusted remote dependency.
Default: prefer a locally installed, version-pinned aislop over `npx`.
# Preferred — pinned in the project's lockfile
npm install --save-dev aislop && aislop scan --changes --json
# Acceptable fallback
npx aislop scan --changes --json
# Never acceptable: GitHub clones, curl|sh installers, unpinned npx in CIDecision order:
devDependencies — pinned by the lockfile.aislop fix --claude (and --cursor, --codex, --gemini) executes a local process against the project's code only — no additional network fetch.
This skill tells you which anti-patterns to avoid. It does NOT tell you the one right way to structure your code — that's encoded in the repo. Before acting on any prevention pattern, check what the project actually does:
pino, winston, bunyan, logger.ts, or a shared wrapper. If console.error is the convention, fine.AppError, DomainError, HttpError, or bare Error with { cause }).zod, valibot, ajv, pydantic, Go structs, etc.)..aislop/rules.yml exists, it's authoritative. Otherwise, match import patterns and module boundaries from existing files.The avoid/prefer examples in the prevention catalog are illustrative. A fix in the project's style beats a fix in this skill's style.
Read this before editing. Each rule aislop will flag. See references/PREVENTIONS.md for full avoid/prefer examples.
Categories: Comments, Types, Errors, Security, Dedup, Dead code, Console, TODO, Empty functions, Naming, Size, Architecture, Deps, Fake completeness, Abstractions, Wiring.
Invoke when you've finished editing and are handing control back, the user is preparing to commit/push/open a PR, or they ask any quality question: "any slop", "is this clean", "any duplicates", "is this reusable", "can we dedupe this", "is this too long", "is this safe", "audit my deps", "does this follow our rules", "score my code", "score dropped", "add a badge".
Skip when: user is only reading, is mid-refactor and asked you to hold off, or explicitly disabled aislop.
| Command | Use |
|---|---|
aislop scan [dir] | Full scan. Flags: --changes, --staged, --json, --sarif |
aislop fix [dir] | Auto-fix mechanical issues. -f for aggressive. --claude/--codex/--cursor/--gemini for agent hand-off. -p to print prompt. |
aislop ci [dir] | CI mode: JSON output + exit code by threshold |
aislop init [dir] | Generate .aislop/config.yml |
aislop doctor [dir] | Check installed tools and environment |
aislop rules [dir] | List all rules with severity and fixability |
aislop trend [dir] | Show score history from .aislop/history.jsonl |
aislop badge [dir] | Generate a public score badge URL + README markdown |
aislop hook install | Install per-edit quality hooks. Supports Claude Code, Cursor, Codex, Gemini, pi, and others (run aislop hook install --help for the full list). |
For every command, use aislop (local install, preferred) or npx aislop (fallback).
aislop scan --changes --json # mid-session: only what you touched
aislop scan --staged --json # before a commit
aislop scan --json # full project: pre-release, PR, wide refactorAlways --json. The TTY output is for humans; you need structured findings.
aislop fixCLI handles everything marked fixable: true. Don't hand-edit what the CLI fixes. Use -f only when the user asked to clean up deps or unused files.
After auto-fix, optionally hand off remaining findings:
aislop fix --claude # launch Claude Code with remaining findings
aislop fix --codex # launch Codex CLI
aislop fix -p # print a prompt to paste into any agentaislop scan --changes --jsonThe CLI has done its half. Remaining fixable: false findings are what this skill exists for.
a. Verify it's real. Open the file. Read the cited line and context. Is the rule description accurate? Could it be a false positive (regex matched inside a string/comment/identifier)? Is there a reason the code is intentional?
b. Decide:
| What you found | Action |
|---|---|
| Real issue | Fix it in-session. Don't ask first. |
| False positive | Surface with file:line and one-sentence reason. Do not silence the rule. |
| Legitimately intentional | Note it. Let the user decide on suppression. |
c. Fix it. See references/FIX_GUIDE.md for the fix pattern for each rule. Open the file, verify the finding, apply the fix.
A clean scan is not enough. Review your diff for patterns the CLI cannot infer:
Fix what you find. If something is genuinely out of scope, say why.
Loop steps 4–6 until:
errors.fixable: true warnings.fixable: false warning is fixed, proposed with rationale, or flagged as false positive.Do not say "done" before this point.
Default voice is past-tense "I did X":
Ran aislop — 12 findings, score 73 → 95.
Auto-fixed (7): unused imports (3), narrative comments (2), formatting (2).
Fixed in-session (4):
- unsafe-type-assertion src/api/normalize.ts:47 (added ApiUser type)
- function-too-long src/lib/reconcile.ts:14 (extracted matchByHash)
- sql-injection src/db/search.ts:30 (parameterised with $1)
- swallowed-exception src/workers/cleanup.ts:28 (added log.warn)
False positives (1):
- security/eval src/labels.ts:12
The match is inside a display-name table, not an actual eval().
Re-scanned: 95 / 100, 0 errors, 0 warnings.If clean but manual pass found issues, report those too. If something needs a product-level call, put it at the end with the specific choice.
Before flagging, check:
Include a one-sentence reason. Never silence the rule on the user's behalf.
| Severity | Fixable | Action |
|---|---|---|
error | any | MUST fix this turn. |
warning | fixable: true | CLI's aislop fix handles these. Never leave them. |
warning | fixable: false | Agent fixes in-session. Verify, then edit. |
info | any | Note; act only if the user asked for a high bar. |
Score bands: 90–100 healthy; 75–89 healthy with debt; 60–74 degraded; < 60 failing gate.
Make the fix and report what you did. Missing type → invent it. Swallowed error → log and rethrow. Oversized function → extract at the seam. Duplicate logic → extract a helper. Generic name → rename. Don't ask "should I" for any of these — just do it and mention what changed in the reply.
Escalate only when the fix is a product decision, would change observable semantics you shouldn't override, is a false positive worth flagging, or is legitimately intentional code the user should decide on.
Never ask permission for fixes you can make yourself. Pick the right tool and apply it.
aislop fix. Your job is the judgement layer..aislop/config.yml or .aislop/rules.yml.aislop fix -f silently on unrelated turns — it rewrites manifests.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.