Configuration

geo.config.json: JSON only, JSON Schema 2020-12, unknown keys are errors. No executable configuration.

{
  "$schema": "https://moelzanaty3.github.io/geopilot/schema/config/v1.json",
  "version": 1,
  "framework": "auto",
  "profile": "web",
  "site": { "origin": "https://www.example.com", "language": "en" },
  "routes": { "include": ["/**"], "exclude": ["/admin/**", "/api/**"] },
  "crawl": { "maxPages": 25, "maxDepth": 3, "render": "auto", "requestTimeoutMs": 10000 },
  "policy": { "aiSearchCrawlers": "allow", "aiTrainingCrawlers": "undecided", "userTriggeredFetchers": "allow" },
  "appLinks": { "ios": null, "android": null },
  "rules": { "GEO-102": "off", "GEO-012": { "severity": "low" } },
  "suppress": [{ "rule": "GEO-014", "routes": ["/legal/**"], "reason": "Intentional noindex", "expires": "2027-06-01" }],
  "fix": {
    "verifyCommands": [["pnpm", "test"]],
    "runtimeTimeoutSeconds": 60,
    "serve": { "command": ["pnpm", "exec", "next", "dev", "--port", "3100"], "url": "http://127.0.0.1:3100", "readyTimeoutSeconds": 120 }
  },
  "thresholds": { "failOn": null, "minReadiness": null, "minCoverage": 80 },
  "hook": { "failOn": null, "timeoutSeconds": 5 },
  "experimental": false
}

Precedence

CLI flags, then documented GEO_* environment variables, then the workspace config (the current directory), then the repository-root config, then defaults. --print-config prints the effective result. Monorepo workspaces are scored independently, never averaged.

Things GEO never infers

  • site.origin and site.language — canonical checks and the S1/S2/G2/G3 fixes need them.
  • Crawler policy. The training-crawler policy defaults to undecided, which produces no allow/block recommendation.
  • App identifiers for .well-known files.
  • fix.serve.command — owner-written, an argv array that is never passed to a shell, with a loopback url. Config alone never authorises running it.

Keys

KeyMeaning
frameworkauto, nextjs-app, static or generic. generic is not an error: it enables T0/T1 and disables unproven T2/T3 operations.
profileweb (default) or app, which enables GEO-101 and the GEO-102 observation.
routesGlobs. /** matches everything; /admin/** also matches /admin.
crawlmaxPages (default 25 remote, 200 for an explicitly named local target), maxDepth, render.
rules"off" or a severity override per rule id.
suppressHide findings with a reason; expired suppressions reactivate with a notice. Suppression never changes readiness.
fix.verifyCommandsV3 commands, argv arrays. Run only with interactive confirmation, an exact --verify-cmd, or GEO_ALLOW_VERIFY_COMMAND=1.
thresholdsGates used when no flag overrides them. minCoverage drives --fail-on-incomplete.

Environment

  • GEO_MAX_PAGES, GEO_RENDER, GEO_SITE_ORIGIN — configuration overrides.
  • GEO_ALLOW_VERIFY_COMMAND=1, GEO_ALLOW_SERVE_COMMAND=1 — non-interactive authorisation for V3/V4.
  • GEO_CACHE_DIR — where URL-only runs are cached outside a repository.
  • NO_COLOR, FORCE_COLOR, CI — output and interactivity.