ironbee config command (recommended, since it validates and re-applies changes for you) or by editing the JSON files directly.
Config layers
Settings are read from three files and deep-merged. Higher layers override lower ones:
Precedence is local > project > global. A key set in the local layer wins over the same key in the project layer, which wins over global.
Secrets can also come from the environment: setting
IRONBEE_SERVICE_API_KEY (or the legacy IRONBEE_API_KEY) supplies the account API key without committing it to any file.
Editing config from the CLI
set, unset, and the read commands accept -g/--global or --local to act on a specific layer (default is the project config). list and get also take --project to read one layer in isolation:
set parses values as JSON when it can (true, 42, [...], {...}) and falls back to a plain string otherwise. Pass --json to force strict JSON parsing.
Automatic re-render: when you change a key that affects installed client artifacts (anything under verification, service, collector, browser, node, python, backend, android, terminal, telemetry, privacy, statusLine, otel, codex, runtime, integrations, or the *DevTools overrides), the CLI automatically re-renders your hooks, MCP entries, skill, rule, and permissions. Pass --no-rerender to skip. After a global write on an artifact-affecting key, the CLI offers to propagate it to every registered project. --apply-all accepts without prompting, --no-apply-all declines.
Restart your editor or agent session after changing an artifact-affecting key; it takes effect on the next session.
Core options
Test files are already excluded out of the box —
ignoredVerifyPatterns is only for additional paths you want to skip on top of that built-in default.Placeholders — ${param:}, ${env:}, built-ins
Config string values can interpolate placeholders that IronBee resolves at read time, so one committed config can carry per-developer or per-environment values without hand-editing. Three forms are supported:
Each
${param:} / ${env:} reference takes an optional bash-style default after :- (e.g. ${env:staging_url:-http://localhost:3000}), and resolves in this order:
${param:api_url}→IRONBEE_PARAM_API_URLenv → theparamsblock (local → project → global) → the:-default → the literal text (with a warning).${env:staging_url}→IRONBEE_ENV_STAGING_URLenv → the:-default → the literal text.
The
env: / param: prefix is implied and never written — ${env:staging_url} can only read IRONBEE_ENV_STAGING_URL, so arbitrary environment variables (AWS_SECRET_ACCESS_KEY, tokens, …) are structurally unreachable from config text. Write a literal ${ as $${. Upper-case shell forms like ${HOME} in check arguments are left untouched.verification.checks[] command/args/env/cwd and verification.context.message). ironbee config get <key> (merged) prints the resolved value with a provenance note on stderr; a layer-scoped read (--project / --global / --local) shows the raw on-disk text.
Runtime
Switching
runtime.location doesn’t move existing session data — it changes where new sessions are written. Old per-session folders under the previous location are left in place; you can delete them by hand if you don’t need them.Verification
Verification cycles
The six cycles:browser, node, python, backend, android, and terminal, share the same set of keys (replace <cycle> with browser, node, python, backend, android, or terminal):
Defaults differ per cycle:
The exact default patterns each cycle uses when
verifyPatterns is unset:
Browser default verify patterns
Browser default verify patterns
Matches code and markup files by extension (project-wide):
Node default verify patterns
Node default verify patterns
Targets typical Node.js server entry points and API routes (applies once the cycle is enabled):
Python default verify patterns
Python default verify patterns
Targets typical Python server entry points, web-framework modules, and WSGI/ASGI apps (applies once the cycle is enabled):
Backend default verify patterns
Backend default verify patterns
Multi-language coverage of common server-side directories (applies once the cycle is enabled). The
{...} extension set is ts,js,mjs,cjs,py,go,java,rb,cs,rs,kt,scala,ex,exs,php,clj:Android default verify patterns
Android default verify patterns
Covers standard Android project layouts Gradle modules, Kotlin/Java source trees, and resources (applies once the cycle is enabled):
Terminal default verify patterns
Terminal default verify patterns
Covers CLI entrypoints, command trees, and shell scripts (applies once the cycle is enabled):
These defaults are defined in the CLI (not written into
config.json) and may grow with new CLI versions. Setting verifyPatterns replaces the list for that cycle; additionalVerifyPatterns appends to it. The only built-in skip list is the always-on test-file exclusion baked into ignoredVerifyPatterns (**/*.spec.*, **/*.test.*, **/__tests__/**, **/__mocks__/**); anything you add to ignoredVerifyPatterns is unioned on top. Non-code files simply don’t match the patterns above.Prefer the
ironbee browser / node / python / backend / android / terminal commands for turning cycles on and off; they write <cycle>.enable and re-render artifacts for you. Reach for verifyPatterns only when you need to change which files a cycle covers.Verification context
Controls the path-scoped verification guidance IronBee injects from.ironbee/VERIFICATION.md files. On by default; these keys are read live at verification time, so changes take effect on the next session without re-rendering artifacts.
Earlier CLI versions used a top-level
verificationContext.* namespace. These keys now live under verification.context.*; update any scripts or committed config that still reference the old names.Service identity
Theservice section is the CLI’s shared identity: one credential and one stage selector that every IronBee service — the event-ingest collector, the read-side API (used by ironbee verify and the o11y trace tools), and the Console links — resolves from. ironbee login writes it for you; you’d only set it by hand to self-host or to run in CI. See Authentication for the difference between the two credentials.
Older configs kept the credential under
collector.oauthToken / collector.apiKey. Those keys (and their IRONBEE_OAUTH_TOKEN / IRONBEE_API_KEY env vars) still work as read fallbacks, so nothing breaks — but new logins write service.*, and the service.* keys win when both are present.Collector
The collector is what ships your session data to the IronBee Console. Its endpoint and credential come from theservice section above; the keys here tune delivery (and carry the legacy credential fallbacks).
Telemetry
Privacy
DevTools env overrides are applied after the privacy flags, so set
ironbeeDevTools.env.COLLECTOR_ARTIFACTS_ENABLE / COLLECTOR_EVENTS_TOOL_DETAILS_ENABLE back to "true" to let one channel through while privacy mode is on.
Issue-tracker integrations
Connect Jira, Linear, or GitHub Issues — see the Issue Tracking guide for the setup flows (ironbee integrations <provider> setup) and what the integration does. A provider activates by configuration presence (a configured credential turns it on; GitHub is on whenever the gh CLI is authenticated); its enable key is an opt-out kill-switch.
Jira
Linear
GitHub Issues
VCS linkage
Links each session to the pull request it produced and the issues that PR closes — the join key behind the Console’s per-issue cost and verification views. A sub-feature of analytics: the effective switch isanalytics.enable and vcs.enable, and it runs in every mode (enforce / assist / monitoring-only). See Issue Tracking → VCS linkage.
Web console
File change capture
Import
Statusline (Claude Code only)
Integrates session status into Claude Code’s statusline while preserving any statusline you already have. Manage it withironbee claude statusline enable / disable.
Claude OAuth access (Claude Code only)
Controls whether IronBee may read your Claude Code OAuth token to fill statusline rate-limits for plans whose statusline JSON omits them (team / enterprise). Manage withironbee claude oauth-access enable / disable / status. See Claude Code → Claude OAuth access.
Codex (Codex CLI only)
Controls how the Codex verification cycle is driven. Manage withironbee codex verifier mode <sub-agent|main-agent>. See Codex → How verification is delivered.
Cursor (Cursor only)
Controls whether IronBee may read your local Cursor session token and call Cursor’s per-user usage API to enrich Cursor analytics with exact per-request tokens and cost. Manage withironbee cursor api-access enable / disable / status.
OTEL collector
IronBee runs a local OTEL collector daemon that turns Claude Code’s OTLP export intosession_context (context-usage) events. One daemon per machine, started and reaped automatically. Manage it with ironbee claude otel.
Devtools MCP overrides
All cycles are served by a singleironbee-devtools compose MCP server, customized via the ironbeeDevTools keys:
IronBee always sets its own invariants (
PLATFORM=compose, COMPOSE_PLATFORMS, metadata flags) last; these can’t be overridden.The legacy per-cycle keys (
browserDevTools, nodeDevTools, pythonDevTools, backendDevTools, androidDevTools, terminalDevTools) still exist for back-compat but no longer feed the compose server — use ironbeeDevTools to customize the one server that serves every cycle.Automatic pipeline keys
These sections auto-enable when a collector is configured and rarely need manual tuning. Browse them withironbee config list or the TUI Configuration area:
recording:session recording for the browser and Android cycles (recording.enable); the node, python, backend, and terminal cycles never trigger it.jobQueue:the file-backed background queue that feeds the collector (jobQueue.enable, flush thresholds).analytics:per-session structural analytics and how often they emit (analytics.enable,analytics.emitOnStop, and per-event opt-in/opt-out flags).
Common setups
Ignore extra files
Test files (**/*.spec.*, **/*.test.*, **/__tests__/**, **/__mocks__/**) are excluded by default — you don’t need to list them. Add ignoredVerifyPatterns only to skip more paths (e.g. generated code, fixtures); your entries are unioned with the built-in test-file defaults:
Backend-only project (no browser cycle)
ironbee browser disable && ironbee backend enable.
Monitoring only (no enforcement)
Assist mode (verify on demand, never gated)
ironbee verification auto disable.
Capture code diffs in analytics
What’s next?
Environment variables
Overrides that take precedence over the config files.
Runtime files
Where these config files live and what else IronBee writes to disk.