Configuration Hierarchy
squirrelscan uses a layered configuration system that merges settings from multiple sources:1. Project Config (squirrel.toml)
Project-specific settings for crawling, rules, and output. Located in your project directory.
Priority: Highest (overrides all other settings)
Location: squirrelscan searches for squirrel.toml starting from the current directory and walking up to your home directory.
Create:
2. Local Settings (.squirrel/settings.json)
CLI behavior settings that can be scoped to a specific project directory.
Priority: Medium (overrides user settings)
Location: .squirrel/settings.json in project directory (created on demand)
Scope: CLI settings like notifications, channel preferences
Create:
3. User Settings (~/.squirrel/settings.json)
Global CLI settings that apply to all projects.
Priority: Low (defaults can override)
Location:
- Unix/macOS:
~/.squirrel/settings.json - Windows:
%LOCALAPPDATA%\squirrel\settings.json
4. Defaults
Built-in defaults when no config is provided. Priority: Lowest Scope: All settingsZero-Config Mode
If no config file exists, squirrelscan uses defaults that work well for most sites:- Crawls up to 500 pages
- 100ms delay between requests
- Respects robots.txt
- Checks external links (cached for 7 days)
- Runs all rules except AI-powered ones
- Console output format
Using Config Files
Create Project Config
Initialize asquirrel.toml in your current directory:
Edit Config
Modify values directly:Validate Config
Check for errors:Config File Discovery
squirrelscan walks up from the current directory to findsquirrel.toml:
- Share config across multiple projects in a directory
- Override parent configs in subdirectories
- Set global defaults in your home directory
Full Config Reference
Project Settings
Project-level metadata and multi-domain support.| Key | Type | Default | Description |
|---|---|---|---|
name | string | Current directory name | Project name for local URLs (localhost, 127.0.0.1). Defaults to the current working directory name. |
domains | string[] | [] | Allowed domains for crawling. Supports subdomain wildcards - ["example.com"] allows www.example.com, api.example.com, etc. When empty, only the seed URL’s domain is crawled. |
example.com, www.example.com, docs.example.com, blog.example.com
Crawler Settings
Controls how squirrelscan discovers and fetches pages.| Key | Type | Default | Description |
|---|---|---|---|
max_pages | number | 500 | Maximum pages to crawl per audit |
delay_ms | number | 100 | Base delay between requests (ms) |
timeout_ms | number | 30000 | Request timeout (ms) |
user_agent | string | "" | Custom user agent (empty = random browser UA per crawl) |
follow_redirects | boolean | true | Follow HTTP 3xx redirects |
concurrency | number | 5 | Maximum concurrent requests globally |
per_host_concurrency | number | 2 | Maximum concurrent requests per host |
per_host_delay_ms | number | 200 | Minimum delay between requests to same host (ms) |
include | string[] | [] | URL patterns to include (glob format). When set, only matching URLs are crawled. |
exclude | string[] | [] | URL patterns to exclude from crawling (glob format) |
allow_query_params | string[] | [] | Query parameters to preserve (others stripped for deduplication) |
drop_query_prefixes | string[] | ["utm_", "gclid", "fbclid"] | Query param prefixes to strip (tracking params) |
respect_robots | boolean | true | Obey robots.txt rules and crawl-delay |
breadth_first | boolean | true | Use breadth-first crawling for better site coverage |
max_prefix_budget | number | 0.25 | Max percentage (0-1) of crawl budget for any single path prefix |
*- Match anything except/**- Match anything including/?- Match single character[abc]- Match character set
Rules Configuration
Configure which audit rules run during analysis.| Key | Type | Default | Description |
|---|---|---|---|
enable | string[] | ["*"] | Patterns of rules to enable. Supports wildcards. |
disable | string[] | ["ai/ai-content", "ai/llm-parsability", "content/quality"] | Patterns of rules to disable. Takes precedence over enable. |
category/rule-name:
*- All rulescore/*- All rules in core categorycore/meta-title- Specific rule
core- Meta tags, canonical, H1, Open Graphcontent- Word count, headings, duplicates, freshnesslinks- Broken links, redirects, orphan pagesimages- Alt text, dimensions, formats, lazy loadingschema- JSON-LD validation, structured datasecurity- HTTPS, HSTS, CSP, headersa11y- Accessibility (ARIA, contrast, focus)i18n- Internationalization (lang, hreflang)perf- Performance hints (LCP, CLS, INP)social- Social media (Open Graph, Twitter Cards)crawl- Crawlability (robots, sitemaps, indexability)url- URL structure (length, keywords, parameters)mobile- Mobile optimization (viewport, tap targets)legal- Legal compliance (privacy, cookies, terms)local- Local SEO (NAP, geo tags)video- Video optimization (schema, thumbnails)analytics- Analytics tracking (GTM, consent)eeat- E-E-A-T signals (author, expertise, trust)ai- AI-powered analysis (disabled by default, requires LLM)
External Links Configuration
Configure external link checking during audits.| Key | Type | Default | Description |
|---|---|---|---|
enabled | boolean | true | Enable checking external links for broken URLs (4xx/5xx) |
cache_ttl_days | number | 7 | How long to cache external link check results (days). Results shared across all audits. |
timeout_ms | number | 10000 | Timeout for each external link check (ms) |
concurrency | number | 5 | Maximum concurrent external link checks |
~/.squirrel/link-cache.db to avoid re-checking the same URLs across different site audits.
Examples:
Disable for faster audits:
Output Settings
Default output format and path for reports.| Key | Type | Default | Description |
|---|---|---|---|
format | "console" | "text" | "json" | "html" | "markdown" | "llm" | "console" | Default output format |
path | string | - | Default output file path (optional) |
console- Colored terminal outputtext- Plain text without colorsjson- Machine-readable JSONhtml- Interactive browser reportmarkdown- Markdown for docsllm- Optimized for LLM consumption
--format, --output) override these defaults.
Rule Options
Per-rule configuration for rules that accept options.Configuration Examples
High-Volume Crawl
For large sites with increased politeness:Multi-Domain Project
Audit main site plus subdomains:example.com, www.example.com, docs.example.com, blog.example.com
CI/CD Pipeline
Strict settings for automated checks:Exclude Admin Areas
Skip paths you don’t want crawled:Fast Local Development
Lightweight config for quick local tests:SEO-Focused Audit
Focus on SEO rules only:Accessibility Audit
Focus on accessibility:Performance Audit
Focus on performance:Managing Settings
View Current Config
Show effective config (merged from all sources):Modify Config
Edit file directly:Validate Config
Check for errors:CLI Settings vs Project Config
| Setting Type | File | Scope | Managed With |
|---|---|---|---|
| Project config | squirrel.toml | Crawler, rules, output | squirrel init, squirrel config |
| User settings | ~/.squirrel/settings.json | CLI behavior, updates | squirrel self settings |
| Local settings | .squirrel/settings.json | CLI behavior (project-scoped) | squirrel self settings --local |
squirrel.toml):
- Crawler settings (max pages, delays, concurrency)
- Rule enable/disable
- Rule options
- Output format
- External link checking
settings.json):
- Update channel (stable/beta)
- Auto-update preferences
- Notification settings
- Feedback email
- Dismissed updates
Related
- init - Create config file
- config - Manage config
- self settings - Manage CLI settings
- Rules Reference - All audit rules