Aislop
Drop-in skill for aislop — the engineering standards layer and quality gate for AI-written code. Install via 'npx skills add scanaislop/aislop-skill'.
npx -y skills add scanaislop/skills --skill aislopAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Code-quality gate and coding guardrail for AI coding agents. Always invoke when you finish editing and prepare to hand control back, even if the user did not explicitly ask. Trigger on commit, push, PR, or quality questions like any slop, is this clean, review my changes, score my code, any duplicates, or is this safe. Scans with aislop, fixes what is mechanical, addresses the rest in-session in the project style, then reports what changed.
SKILL.md
11.1 KB, as published. Nobody here has run it
aislop — agent skill
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:
- Prevention — internalise the rule catalog below so your first draft doesn't trip detectors.
- Detection + fix — scan after editing, fix mechanical findings with the CLI, fix the rest yourself, report what changed.
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.
Remote execution & supply-chain policy
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 CI
Decision order:
- Local binary or script in
devDependencies— pinned by the lockfile. npx aislop@<version>(pinned) — acceptable when no local install exists.npx aislop(floating) — last resort for interactive sessions. Never in CI.- Blocked environment — skip the scan and report the CLI could not be run. Do not install outside the project's dependency workflow.
aislop fix --claude (and --cursor, --codex, --gemini) executes a local process against the project's code only — no additional network fetch.
Follow the project's conventions, not this skill's examples
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:
- Logger — grep for
pino,winston,bunyan,logger.ts, or a shared wrapper. Ifconsole.erroris the convention, fine. - Error wrapping — use the project's error class (
AppError,DomainError,HttpError, or bareErrorwith{ cause }). - Types / validation — match the project's choice (
zod,valibot,ajv, pydantic, Go structs, etc.). - Naming — follow the project's casing, file naming, and folder layout.
- Tests — use the framework and patterns already in the repo.
- Architecture — if
.aislop/rules.ymlexists, 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.
Quick prevention catalog
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.
When to invoke
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.
CLI commands reference
| 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). |
Core workflow
For every command, use aislop (local install, preferred) or npx aislop (fallback).
1. Scope the scan
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 refactor
Always --json. The TTY output is for humans; you need structured findings.
2. Auto-fix the mechanical findings
aislop fix
CLI 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 agent
3. Re-scan — everything fixable:false is your job
aislop scan --changes --json
The CLI has done its half. Remaining fixable: false findings are what this skill exists for.
4. For each remaining finding, do the judgement work
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.
5. Run the manual slop pass
A clean scan is not enough. Review your diff for patterns the CLI cannot infer:
- Fake completeness — no hardcoded success paths, canned data, placeholder behavior.
- Test quality — tests exercise at least one edge/failure path, not just rendering.
- Unneeded abstraction — no new generic layer with one caller.
- Incomplete wiring — exports, routes, generated files, call sites are updated.
- State handling — loading, empty, error, timeout, cancellation states are coherent.
- Dependency discipline — no new package for trivial logic.
Fix what you find. If something is genuinely out of scope, say why.
6. Re-scan until the bar is met
Loop steps 4–6 until:
- Zero
errors. - Zero
fixable: truewarnings. - Every
fixable: falsewarning is fixed, proposed with rationale, or flagged as false positive. - Manual slop pass has no unresolved in-session issue.
Do not say "done" before this point.
7. Report — triaged, not dumped
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.
How to verify a false positive
Before flagging, check:
- Is the match inside a string literal, template literal, or comment?
- Is it part of an identifier name that happens to contain the pattern?
- Is it in a test fixture, mock data, or example?
- Would a reader agree this isn't the pattern the rule describes?
Include a one-sentence reason. Never silence the rule on the user's behalf.
Severity and score interpretation
| 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.
Default: invent, apply, report — don't ask
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.
Anti-patterns
- Do NOT treat this skill as a wrapper around
aislop fix. Your job is the judgement layer. - Do NOT ask for permission on fixes you can make yourself.
- Do NOT paste raw JSON into your reply — triage and summarise.
- Do NOT silence rules in config or add blanket suppression comments.
- Do NOT delete
.aislop/config.ymlor.aislop/rules.yml. - Do NOT claim completion without a post-fix re-scan.
- Do NOT treat a 100 score as proof the code is good — do the manual pass.
- Do NOT run
aislop fix -fsilently on unrelated turns — it rewrites manifests. - Do NOT fight the detector by editing regex patterns — your job is clean code.