Using a Configuration File
Set default options for Noir using a config.yaml file.
Use a config.yaml file to set default options for consistent scans.
File Location
| OS |
Path |
| macOS |
~/.config/noir/ |
| Linux |
~/.config/noir/ |
| Windows |
%APPDATA%\noir\ |
Settings in the config file are defaults; command-line flags override them. Use --config-file <path> to load a config from a non-default location:
noir scan . --config-file ./ci/noir.yaml
You can also manage the config file directly through noir config:
noir config init # create the default config (idempotent)
noir config show # print the active file
noir config edit # open the file in $VISUAL / $EDITOR
noir config path # print the resolved path
Directory Structure
~/.config/noir/
├── config.yaml # Configuration file
├── cache/
│ └── ai/ # LLM response cache
└── passive_rules/ # Passive scan rules
Example config.yaml
---
# Default base path for scans
base: "/path/to/my/project"
# Always use color in the output
color: true
# Default output format
format: "json"
# Base URL for probing; also required by exclude_codes / status_codes / probe
url: "https://api.example.com"
# Exclude certain status codes (needs a target URL, so it pairs with `url` above)
exclude_codes: "404,500"
# Enable all taggers by default
all_taggers: true
# Attach 1-hop handler callees to each endpoint
include_callee: true
# Attach AI review context (guards, callee, sources, sinks, validators, signals)
ai_context: true
# Default AI provider and model
ai_provider: "openai"
ai_model: "gpt-5.5"
# Passive security scan (equivalent to -P / --passive-scan)
passive_scan: false
passive_scan_severity: "high"
# Exit with code 2 if any analyzer failed or skipped a file
strict: false
# Disable loading spinner animations
no_spinner: false
# Fire HTTP probes at discovered endpoints (needs `url`)
probe: false
# Skip TLS certificate verification for probe/export (insecure)
tls_skip_verify: false
This is equivalent to running:
noir scan /path/to/my/project -f json -u https://api.example.com --exclude-codes "404,500" -T \
--include callee --ai-context \
--ai-provider openai --ai-model gpt-5.5
Key reference
noir config init writes a fully commented file with every supported key. The example above is a curated subset; CLI flags always override the file. Keys below match the generated file (legacy v0 names such as send_es / send_proxy still load, but migrate to the v1 names).
Scan paths and scope
| Key |
Type |
CLI equivalent |
Notes |
base |
string or list |
positional paths / -b |
Default path(s) to scan |
url |
string |
-u / --url |
Base URL for paths; required by status/probe options |
exclude_path |
CSV globs |
--exclude-path |
Skip matching files |
techs |
CSV |
-t / --techs |
Add techs to the analyzer set (on top of auto-detect) |
only_techs |
CSV |
--only-techs |
Restrict which tech detectors run |
exclude_techs |
CSV |
--exclude-techs |
Drop techs from the final set after detection |
concurrency |
int |
--concurrency / NOIR_CONCURRENCY |
Worker count (default: CPU count clamped to 4–32) |
Output
| Key |
Type |
CLI equivalent |
Notes |
format |
string |
-f / --format |
plain, json, yaml, oas3, curl, … |
output |
string |
-o / --output |
Write results to this file |
color |
bool |
inverse of --no-color |
ANSI color in plain output |
nolog |
bool |
--no-log |
Show results only |
no_spinner |
bool |
--no-spinner |
Disable spinner animations |
strict |
bool |
--strict |
Exit 2 when an analyzer fails or skips a file |
status_codes |
bool |
--status-codes |
Probe and attach HTTP status codes (needs url) |
exclude_codes |
CSV |
--exclude-codes |
Drop probed statuses (pairs with status_codes) |
include_path |
bool |
--include path |
Legacy boolean form of --include |
include_techs |
bool |
--include techs |
Legacy boolean form of --include |
include_callee |
bool |
--include callee |
Attach 1-hop handler callees |
ai_context |
bool |
--ai-context |
Attach AI review context |
ai_context_features |
CSV |
--ai-context LIST |
Subset: guards, callee, sources, sinks, validators, signals |
Parameter values
| Key |
Type |
CLI equivalent |
Notes |
set_pvalue |
list |
--pvalue any=… |
Fill values for every param type |
set_pvalue_header |
list |
--pvalue header=… |
Header values |
set_pvalue_cookie |
list |
--pvalue cookie=… |
Cookie values |
set_pvalue_query |
list |
--pvalue query=… |
Query values |
set_pvalue_form |
list |
--pvalue form=… |
Form values |
set_pvalue_json |
list |
--pvalue json=… |
JSON body values |
set_pvalue_path |
list |
--pvalue path=… |
Path values |
Passive scan and taggers
| Key |
Type |
CLI equivalent |
Notes |
passive_scan |
bool |
-P / --passive-scan |
Enable passive scan |
passive_scan_path |
list |
--passive-scan-path |
Custom rule directories (replaces bundled rules) |
passive_scan_severity |
string |
--passive-scan-severity |
critical / high / medium / low |
passive_scan_auto_update |
bool |
--passive-scan-auto-update |
Update rules at startup |
passive_scan_no_update_check |
bool |
--passive-scan-no-update-check |
Skip update check |
all_taggers |
bool |
-T / --use-all-taggers |
Enable every tagger |
use_taggers |
CSV |
--use-taggers |
Enable selected taggers |
Probe and export
| Key |
Type |
CLI equivalent |
Notes |
probe |
bool |
--probe |
Send HTTP requests to discovered endpoints (needs url) |
probe_via |
string |
--probe-via |
Proxy URL for probes |
probe_header |
list |
--probe-header |
Extra probe headers |
probe_match |
list |
--probe-match |
Only probe matching endpoints |
probe_skip |
list |
--probe-skip |
Skip matching endpoints |
tls_skip_verify |
bool |
--tls-skip-verify |
Skip TLS verify for probe/export/webhook |
export_es |
string |
--export-es / --export-opensearch |
Elasticsearch or OpenSearch URL (both flags write this key) |
export_webhook |
string |
--export-webhook |
POST catalog JSON to this URL |
AI and cache
| Key |
Type |
CLI equivalent |
Notes |
ai_provider |
string |
--ai-provider |
Provider prefix or full URL |
ai_model |
string |
--ai-model |
Model name |
ai_key |
string |
--ai-key / NOIR_AI_KEY |
Prefer the env var in shared configs |
ai_agent |
bool |
--ai-agent |
Enable the agentic tool-calling loop |
ai_agent_max_steps |
int |
--ai-agent-max-steps |
Agent loop cap |
ai_native_tools_allowlist |
CSV |
--ai-native-tools-allowlist |
Providers allowed to use native tools |
ai_max_token |
int |
--ai-max-token |
Max tokens per request (0 = provider default) |
cache_disable |
bool |
--cache-disable |
Disable the LLM response cache |
cache_clear |
bool |
--cache-clear |
Clear the cache before the run |
Diff and diagnostics
| Key |
Type |
CLI equivalent |
Notes |
diff |
string |
--diff-path |
Prior code path for diff output |
diff_ref |
string |
--diff-ref |
Git revision to diff against |
fail_on |
string |
--fail-on |
Diff findings that make the scan exit 3 (comma-separated) |
config_file |
string |
--config-file |
Usually set only via CLI |
debug |
bool |
-d / --debug |
Debug logging |
verbose |
bool |
--verbose |
Verbose logging (--include path + all taggers) |