.aislop/config.yml. Run aislop init to generate one with sensible defaults, then edit only the keys you want to change — everything else falls back to the values documented here. The schema is versioned, so future breaking changes will bump version and old configs remain valid until you opt in.
Creating the config file
Run aislop init
Run the following command at the root of your project. aislop writes For a strict, enterprise-grade starting point with all engines on and a higher CI gate, use the
.aislop/config.yml and, if you accept the prompt, a GitHub Actions workflow.--strict flag:Review the generated file
Open
.aislop/config.yml. Every top-level section is present with its default value. Sections you don’t touch need no changes.Enable editor validation (optional)
Add a The canonical JSON Schema is published at https://scanaislop.com/schema/aislop.config.schema.json.
# yaml-language-server modeline at the top of the file to get autocomplete and inline validation in VS Code, JetBrains IDEs, and any editor with YAML Language Server support:Full default config
The file below shows every key with its default value. You do not need to include keys you are not changing.Top-level sections
Each section controls a distinct part of the aislop run. You can add, remove, or override any section independently.version
version
The config schema version. Always set this to
1. aislop rejects configs with an unknown version number so you get a clear error if a future release introduces a breaking change.Config schema version. Must be
1.engines
engines
Boolean toggles that enable or disable each analysis engine. Disabling an engine removes it from the scan entirely — its findings neither appear in the report nor affect the score.
Formatting checks (Biome, ruff, gofmt, cargo fmt, rubocop, php-cs-fixer).
Language-specific linting (oxlint, ruff, golangci-lint, clippy, expo-doctor).
Complexity and dead code: function/file size, deep nesting, unused files and dependencies.
AI-authored pattern detection: narrative comments, swallowed exceptions,
as any casts, TODO stubs, generic names, and more.Custom import bans, layer enforcement, and required patterns. Requires
.aislop/rules.yml. See Architecture Rules.Secrets detection, risky constructs (eval, innerHTML, SQL injection), and dependency audits.
quality
quality
Numeric thresholds that trigger code-quality warnings. See Engines → Quality thresholds for details.
Maximum lines of code per function.
Maximum lines of code per file.
Maximum control-flow nesting depth.
Maximum number of parameters per function.
lint
lint
Options that apply to the lint engine only.
Enable TypeScript type-checking lint rules. Adds type-aware analysis but increases scan time. Recommended for TypeScript projects that want the strictest coverage.
security
security
Options that apply to the security engine only.
Run dependency audits (npm audit, pip-audit, cargo audit, govulncheck).
Timeout in milliseconds for dependency audit commands. Increase this on slow networks or large dependency trees.
scoring
scoring
Controls how findings translate into the final 0–100 score.
A map of engine name to numeric multiplier. Higher values make that engine’s findings hurt the score more. See Engines → Scoring weights.
Scores at or above this value are labelled Healthy.
Scores at or above this value (but below
good) are labelled Needs Work. Scores below this are Critical.Reduces penalty spikes in large repos by dampening the logarithmic density curve. Increase for legacy codebases.
Caps the total weighted penalty any single rule family can contribute. Repeated findings still appear in the report, but one noisy rule cannot dominate the score.
ci
ci
telemetry
telemetry
Controls anonymous usage telemetry.
Set to
false to opt out of telemetry entirely. No data is sent when disabled.rules
rules
A map of rule ID to severity (
"error", "warning", or "off"). Use this to tighten, loosen, or silence individual rules project-wide. See Rule Overrides for the full guide.exclude and include
exclude and include
Glob patterns for paths to skip during scanning. Replaces the default list entirely when specified — include defaults you want to keep.
Restrict scanning to only these glob patterns. An empty array (the default) scans everything not excluded.
extends
extends
Path (or array of paths) to a parent config file to inherit from. See Config inheritance below.
Config inheritance
Theextends: key lets a project inherit a parent config and override only the keys it cares about. This is the recommended pattern for monorepos or org-wide baselines.
Single parent
Multiple parents
Pass an array when you need more than one base. Later entries in the array win on conflict.Merge semantics
Understanding how deep-merge works prevents surprises, especially for arrays.
| Value type | Merge behaviour |
|---|---|
Nested objects (engines, scoring.weights, quality) | Deep-merged key by key. The child’s keys win on conflict. |
Arrays (exclude, include) | Replaced wholesale. The child’s array replaces the parent’s — values are not concatenated. Include any parent values you want to keep. |
Scalars (ci.failBelow, version, etc.) | The child’s value overwrites the parent’s. |
Constraints
- Paths are relative to the config file that declares
extends:. Absolute paths are also accepted. Package names and URLs are not yet supported and produce a clear error. - Chains deeper than 5 levels are rejected at load time.
- Circular references are rejected at load time.
Example configs
The following pre-built configs are available as starting points. Copy one into.aislop/config.yml and adjust from there.
typescript-strict
Tight thresholds for teams that want zero AI slop in production TypeScript code. Raises quality limits, increases all weights, and sets
failBelow: 75.monorepo-relaxed
Looser thresholds for large codebases or early-stage projects adopting aislop incrementally. Sets
failBelow: 0 so CI reports scores without blocking.python-go
Tailored for Python and Go backend services. Increases
security weight to 2.5 and extends auditTimeout for slower networks.