.irisconfig.json at your project root, commit it, and everyone runs the same thresholds, in every editor, on every machine, plus CI.
Iris Code looks for the nearest one by walking up from the file it’s analysing, so a monorepo can give each package its own rules without you configuring anything extra.
Priority order: nearest folder
.irisconfig.json → workspace root .irisconfig.json → personal default → VS Code settings → built-in defaultsIt explains itself
.irisconfig.json is JSONC, so // comments are legal, and every config Iris Code writes is commented. The file should be readable without this page open alongside it.
Generated configs also open with a $schema line:
Config presets (Free + Pro)
Rather than choosing every threshold individually, start from a preset. AddpresetId, commit it, and the team is aligned in one line.
.irisconfig.json
strict, balanced, legacy, security, typescript, ai-assisted.
The ai-assisted preset uses stricter explicit limits for teams reviewing AI-assisted code at volume. It caps duplicate blocks and suppressions, but does not impose a naming convention.
- Free
- Pro
Iris Code applies the shipped preset values as the source of truth. Local edits to threshold fields are ignored and receive a yellow warning squiggle in the editor. The preset registry in the extension is the authority, not the file on disk.
Full custom config (Pro)
For complete control over every rule, write out the full config. Every key is optional - include only the ones you want to override..irisconfig.json
Thresholds
These keys set the structural size limits that trigger warnings in the editor and sidebar.Detection toggles
Turn individual detection categories on or off without removing findings from the sidebar entirely.Display
Control what Iris Code renders in the editor UI.
The
inlineDiagnostics object lets you opt individual categories in or out once enableInlineDiagnostics is true.
Gate thresholds
Gate thresholds are enforced by the CLI and git pre-push hook. Files or workspaces that exceed a gate limit fail the check.Ignore rules
Scoring weights
healthScoreWeights is a Pro key that lets you override how many points each finding type subtracts from the base 100 health score. See Scoring Weights for the full reference and examples.
Per-language config
Mixed-language repos rarely want one threshold set for everything - a 500-line Python module and a 300-line TypeScript cap should be able to coexist. Thelanguages block overrides per-file settings for typescript, javascript, go, python, ruby, csharp, java, and rust files independently; anything not stated falls back to the base config. .tsx files count as TypeScript and .jsx / .mjs / .cjs as JavaScript. A ruby block also governs the extensionless Ruby files Iris Code reads, such as Gemfile and Rakefile; a csharp block governs both .cs sources and .csproj project files; and a java block governs both .java sources and the .properties files Iris Code reads for credentials.
fileNaming, its ordered overrides, and languages.*.fileNaming are Free. Path overrides are checked in order and the last match wins. When no path rule matches, a nested language policy is a backward-compatible fallback; otherwise the top-level convention applies. Top-level ignore globs remain active throughout. The six length/complexity thresholds, healthScoreWeights, severityOverrides, and per-file gate caps remain Pro. On Free, Iris applies the naming policy and places a warning squiggle on each Pro-only sibling field it ignores. It does not discard the whole language block.
Set top-level fileNamingScope to "new-files" (default) or "all". A matching path rule can override it with scope; a language fallback can do the same when no path rule matches. See File naming conventions for the complete precedence contract, baseline behavior, suggestions, ignore globs, and exemptions.
Scan-total gates (minHealthScore, gateMaxSecrets, gateMaxSecuritySmells, gateMaxDuplicateBlocks, gateMaxNamingViolations), presetId, and enable* toggles are rejected inside a language block with a validation warning.
Resolution happens once, inside the analysis core, so the sidebar, CLI, git hook, build hook, and CI always agree on which threshold applied. The sidebar file tab shows the applied override next to the config source (for example “Workspace config · Python override”), and iris gate prints the limit that actually governed each failing file plus a “Per-language overrides active” note.
Unknown language keys (say, an elixir block written for a newer Iris Code) produce a warning and are skipped, so a forward-looking config never breaks an older install. A per-file gate cap set only inside a language block still gates files of that language, even with no top-level cap configured.
Severity overrides
Override the severity of any warning type on a per-project basis using theseverityOverrides object. Each key accepts "error", "warning", or "info".