Skip to content
Fallow home
All docs pages

Environment variables

Change fallow defaults for a whole CI job, editor, or MCP server without editing every command. Reference for FALLOW_FORMAT, FALLOW_QUIET, and the other environment variables.

Environment variables change fallow defaults for every command in a shell, a CI job, or an MCP server. You set a value once and do not repeat the flag on each command.

VariableDescriptionValues
FALLOW_FORMATDefault output formathuman, json, sarif, compact, markdown (md), codeclimate, gitlab-codequality (gitlab-code-quality), pr-comment-github, pr-comment-gitlab, review-github, review-gitlab, badge, github-annotations, github-summary
FALLOW_QUIETHide progress output1 or true
FALLOW_BINPath to the fallow binaryAny valid path
FALLOW_EXTENDS_TIMEOUT_SECSTimeout for fetching URL extendsSeconds (default: 5)
FALLOW_PRODUCTIONTurn production mode on or off for every analysistrue/false/1/0/yes/no/on/off
FALLOW_PRODUCTION_DEAD_CODEProduction mode for dead-code only (combined runs and fallow audit)Same values as FALLOW_PRODUCTION
FALLOW_PRODUCTION_HEALTHProduction mode for health onlySame values as FALLOW_PRODUCTION
FALLOW_PRODUCTION_DUPESProduction mode for duplication onlySame values as FALLOW_PRODUCTION
FALLOW_REVIEW_GUIDANCEAdd collapsed "What to do" blocks to review-github and review-gitlab inline comments1, true, yes, on
FALLOW_SUMMARY_SCOPEScope of the sticky PR or MR summary for pr-comment-github and pr-comment-gitlab. all shows project-level dependency, catalog, and override findings also when they are outside the diff. diff applies the diff filter to those findings too. Inline review comments do not changeall (default), diff
FALLOW_PR_COMMENT_LAYOUTLayout of the sticky PR or MR summary for pr-comment-github and pr-comment-gitlab. Use gate-only when reviewers read the findings in a native Check Run or Code Quality widgetdefault, compact, gate-only, details
FALLOW_CACHE_DIRDirectory for the persistent analysis cacheAny valid path
FALLOW_CACHE_MAX_SIZESize limit of the extraction cache. Takes precedence over cache.maxSizeMbWhole megabytes (default 256)
FALLOW_PACKAGE_BASELINESTurns workspaces.changedSince off for every run of the process, like --no-package-baselinesfalse, 0, no or off turn the map off; other values keep it
FALLOW_COVERAGEIstanbul or raw V8 coverage data for CRAP scores. Takes precedence over health.coveragePath to coverage-final.json, or to a NODE_V8_COVERAGE directory
FALLOW_COVERAGE_ROOTPrefix that fallow removes from Istanbul coverage paths. Takes precedence over health.coverageRootAbsolute path
FALLOW_TYPE_AWARETurn type-aware analysis on or off for the run. The --type-aware and --no-type-aware flags take precedence. This variable takes precedence over audit.typeAware and typeAware.enabledtrue/false/1/0/yes/no/on/off
FALLOW_TYPE_AWARE_TIMEOUT_SECSTime limit for one request to the TypeScript semantic companion. Raise it for very large TypeScript programsSeconds (default 120; unset, 0, or a non-numeric value keeps the default)
FALLOW_TYPE_AWARE_BINPath to a trusted TypeScript semantic companion executable. Fallow resolves a relative path from the working directory, before --root applies. Fallow does not search node_modules or PATHPath (default: the companion next to the active fallow executable)
FALLOW_AUDIT_BASEFixed comparison base for fallow audit when you do not pass --base or --changed-since. Use it for the agent gate and for forksAny git ref (e.g. origin/main, upstream/main)
FALLOW_AUDIT_CACHE_MAX_AGE_DAYSMaximum age of the base-snapshot worktree caches that fallow audit keeps and reusesWhole days (default 30; 0 disables)
FALLOW_IMPACT_STORE_MAX_AGE_DAYSDelete per-project fallow impact stores older than this. A recorded run removes stale stores, for example from deleted reposWhole days (unset or 0 keeps every store forever)
FALLOW_CLOCK_EPOCHFixed reference time for churn recency, hotspot ranking, and ownership staleness. Two runs on one commit then give the same churn numbers. Read the value of a run from hotspot_summary.clock.epoch_secs and pass it backUnix epoch seconds
FALLOW_MAX_FILE_SIZESkip source files larger than this many megabytes. While this limit is on, fallow also skips large one-line minified JS assets. Same as --max-file-size. Fallow always analyzes .d.ts filesWhole megabytes (default 5; 0 disables)
FALLOW_UPDATE_CHECKTurn off the upgrade hint in local terminal runs and the background latest-version checkoff, 0, false, disabled, no
FALLOW_SUGGESTIONSHide the next_steps[] array of read-only follow-up commands in JSON output, and the Next: line in human outputoff, 0, false, no, disabled (default on)
FALLOW_TELEMETRYOpt-in telemetry mode, off by default (see what it collects)off/on/inspect (plus 0/1/true/false/disabled/enabled/debug/log)
FALLOW_TELEMETRY_DISABLEDTurn off telemetry. For admins and fleet setups (top precedence)1, true, yes, on
FALLOW_TELEMETRY_DEBUGForce inspect mode (takes precedence over FALLOW_TELEMETRY)1, true, yes, on
DO_NOT_TRACKTurn off telemetry (top precedence)1, true, yes, on
FALLOW_AGENT_SOURCEName the calling agent for telemetry classification. Does not turn on telemetrycodex, claude_code, cursor, copilot, opencode, aider, roo, windsurf, gemini (aliases gemini_cli/antigravity), cline, continue, zed, goose, other_known, unknown, none
FALLOW_INTEGRATION_SURFACEName the telemetry integration surface. The MCP server sets it on the CLI that it starts. Does not turn on telemetrymcp, lsp, vscode, napi, programmatic
FALLOW_MCP_TOOLName the MCP tool for the telemetry mcp_tool dimension. The MCP server sets it. Fallow drops a name that is not on a fixed allowlist. Does not turn on telemetryAn allowlisted MCP tool name (for example find_dupes, audit)
FALLOW_LSP_REUSE_SESSIONTurn off the project session that the language server keeps between saves. The server then loads the config and reads the parse cache again on each save0, false, off, no (default on)

FALLOW_FORMAT

Set the default output format, so you do not pass --format on every command.

export FALLOW_FORMAT=json
fallow dead-code   # Outputs JSON without --format flag

When both are set, the --format CLI flag takes precedence over FALLOW_FORMAT.

FALLOW_QUIET

Hide progress bars and status messages. Use it in CI or when you pipe the output.

export FALLOW_QUIET=1
fallow dead-code   # No progress output, only results

This is the same as --quiet on every command.

FALLOW_BIN

Path to the fallow binary. The MCP server (fallow-mcp) uses it to find the fallow CLI.

export FALLOW_BIN=/usr/local/bin/fallow
fallow-mcp   # MCP server uses the specified binary

When not set, the default is fallow on PATH.

FALLOW_EXTENDS_TIMEOUT_SECS

Timeout in seconds to fetch remote configs from https:// URLs in the extends field.

export FALLOW_EXTENDS_TIMEOUT_SECS=10
fallow dead-code   # URL extends have 10s to respond

When not set, the default is 5 seconds.

FALLOW_CACHE_DIR

Directory for the persistent analysis cache. The CLI, the language server, the MCP server and the Node bindings read it. When both are set, this variable takes precedence over the cache.dir config field. A relative path resolves from the project root.

export FALLOW_CACHE_DIR=/tmp/fallow-cache
fallow dead-code   # cache files are stored under /tmp/fallow-cache

By default, fallow stores the cache in .fallow/cache.bin under the project root. Set this variable in these cases:

  • The project checkout is read-only.
  • CI has a dedicated cache volume.
  • Multiple workspace copies share one cache location.

--no-cache turns off the cache fully. This variable then has no effect.

One cache directory for several projects

An absolute path outside the project is one directory for every project. The hosts use it in two ways:

  • The CLI, the MCP server and the Node bindings write cache.bin and graph-cache.bin directly into the directory. The extraction cache keys on paths relative to the project root, so a CI job still gets cache hits when the checkout path changes. Use one directory for one project: when two projects share it, each run replaces the cache of the other project.
  • The language server writes into one subdirectory for each project root, for example web-3f2a9c1d8e7b6a50 (the folder name and a hash of the full root path). Two editor windows on two projects can share one FALLOW_CACHE_DIR and keep both caches.

FALLOW_CACHE_MAX_SIZE

Maximum size in megabytes of the extraction cache on disk (.fallow/cache.bin). When both are set, this variable takes precedence over the cache.maxSizeMb config field. The CLI, the language server, the MCP server and the Node bindings read this variable.

export FALLOW_CACHE_MAX_SIZE=64
fallow dead-code   # cache capped at 64 MB

When not set, the default is 256 (MB). When the serialized cache grows past 80% of the limit, fallow removes the least recently used entries until the cache is at 60%. Use this variable on CI runners with disk quotas. Local machines with large disks rarely need it.

--no-cache turns off the cache fully. This variable then has no effect.

One cache directory for several projects

An absolute path outside the project is one directory for every project. The hosts use it in two ways:

  • The CLI, the MCP server and the Node bindings write cache.bin and graph-cache.bin directly into the directory. The extraction cache keys on paths relative to the project root, so a CI job still gets cache hits when the checkout path changes. Use one directory for one project: when two projects share it, each run replaces the cache of the other project.
  • The language server writes into one subdirectory for each project root, for example web-3f2a9c1d8e7b6a50 (the folder name and a hash of the full root path). Two editor windows on two projects can share one FALLOW_CACHE_DIR and keep both caches.

FALLOW_PACKAGE_BASELINES

Set to false, 0, no or off (in any case) to ignore workspaces.changedSince for every run of the process. Every workspace package is then in full scope, as with --no-package-baselines. Other values keep the map, so a typo never widens a run. The CLI, the language server, the MCP server and the Node bindings read this variable.

export FALLOW_PACKAGE_BASELINES=false
fallow dead-code --save-baseline fallow-baselines/dead-code.json   # whole-project baseline

FALLOW_AUDIT_BASE

Sets a fixed comparison base for fallow audit. It has an effect only when you pass neither --base nor --changed-since. The precedence is the --base flag, then FALLOW_AUDIT_BASE, then auto-detection.

export FALLOW_AUDIT_BASE=upstream/main
fallow audit   # compares against upstream/main instead of the auto-detected base

When unset, fallow audit uses the git merge-base (fork point) as the base. It compares against the upstream of the branch, or the remote default (origin/HEAD, then origin/main, then origin/master). This works for most repositories. Set a fixed base in two cases:

  • Forks. On a fork, origin is your fork, which can be behind the real upstream. Set FALLOW_AUDIT_BASE=upstream/main to compare against the real upstream.
  • The agent gate. fallow hooks install --target agent generates a hook that runs bare fallow audit. Your team may work only in git worktrees and never update the local default branch. Then set the base with this variable. You do not edit the generated script, which a reinstall overwrites.

A malformed value (a ref with disallowed characters) stops the audit with exit code 2. Fallow does not ignore it, so you see a typo immediately.

FALLOW_AUDIT_CACHE_MAX_AGE_DAYS

Maximum age of a base-snapshot worktree cache that fallow audit keeps and reuses. The age is in whole days since the last reuse or since creation. The next fallow audit run removes older entries when it starts.

When both are set, this variable takes precedence over the audit.cacheMaxAgeDays config field. In fallow audit-cache prune, the --max-age-days flag takes precedence over this variable.

export FALLOW_AUDIT_CACHE_MAX_AGE_DAYS=7
fallow audit --base origin/main   # caches older than 7 days are reclaimed

When not set, the default is 30 days. Set 0 to turn off the cleanup fully, for example on CI runners that clean /tmp with a separate process. For an invalid value (not an integer, or negative), fallow uses the config field or the default and gives no message. A typo in a runner variable does not fail audits.

The cleanup runs once per fallow audit run. It looks only at base-snapshot cache entries that fallow owns, never at other content of the temp directory. It never removes a cache entry that another running fallow audit uses (a kernel flock(2) lock per entry).

When it removes caches, fallow writes one fallow: reclaimed N stale base-snapshot caches line to stderr, unless --quiet is set. To run the same cleanup on demand and see the decision for each entry, use fallow audit-cache prune.

FALLOW_IMPACT_STORE_MAX_AGE_DAYS

Delete per-project fallow impact stores that have not changed in this many whole days. Impact keeps one small history file per project in your user config directory. When you delete a project from disk, its store stays. Set this variable so that a recorded run removes these stores.

export FALLOW_IMPACT_STORE_MAX_AGE_DAYS=90
fallow audit --base origin/main   # impact stores untouched for 90+ days are reclaimed

When unset (the default), fallow keeps every store forever. 0 and invalid values also keep every store, so a typo never deletes history.

The age is the modification time of the store file. Each recorded run rewrites the file, so a project that you still track never expires. The cleanup never touches the project that you just recorded. It never deletes the advisory .lock sidecar files or the global impact.json opt-in toggle. Impact records only on developer machines (never in CI), so this cleanup is local only.

FALLOW_UPDATE_CHECK

In a local terminal run, fallow can show a one-line upgrade hint when a cached latest-version check finds a newer release. Fallow does not show the hint for machine formats, CI, quiet runs, and non-TTY agent runs. Set FALLOW_UPDATE_CHECK=off to turn off the hint and the background latest-version check on that machine. DO_NOT_TRACK and FALLOW_TELEMETRY_DISABLED also turn them off.

FALLOW_SUGGESTIONS

dead-code, health, dupes, bare fallow, and audit add a top-level next_steps[] array to their --format json output. The array lists read-only follow-up commands, based on the findings of the run. Bare fallow also prints a one-line Next: hint in human output on a TTY.

Set FALLOW_SUGGESTIONS=off (or 0, false, no, disabled) to hide them. Use this when a CI job compares raw JSON output against a snapshot. The CLI that the MCP server starts inherits the variable, so it also removes next_steps from MCP responses.

FALLOW_PRODUCTION and per-analysis overrides

FALLOW_PRODUCTION is the same as the --production CLI flag. It turns on production mode for every analysis. The per-analysis variables (FALLOW_PRODUCTION_DEAD_CODE, FALLOW_PRODUCTION_HEALTH, FALLOW_PRODUCTION_DUPES) change one analysis in bare combined mode (fallow with no subcommand) or in fallow audit.

# Run combined mode with production-only health, full-tree dead-code and dupes
export FALLOW_PRODUCTION_HEALTH=true
fallow --format json --quiet

Precedence (highest to lowest):

  1. CLI flags (--production, --production-{dead-code,health,dupes})
  2. Per-analysis env var (FALLOW_PRODUCTION_HEALTH, etc.)
  3. Global env var (FALLOW_PRODUCTION)
  4. Config (production: true legacy form, or production: { health: true, ... } per-analysis form)

A per-analysis variable takes precedence over the global variable. For example, FALLOW_PRODUCTION=false FALLOW_PRODUCTION_HEALTH=true runs health in production mode and the other analyses in non-production mode.

A single subcommand such as fallow health rejects the per-analysis CLI flag, but it still reads FALLOW_PRODUCTION_HEALTH. For a subcommand, pass --production or set the per-analysis variable.

In CI, set FALLOW_FORMAT=json and FALLOW_QUIET=1 to get machine-readable output with no progress messages.

FALLOW_COVERAGE

Path to Istanbul coverage data (coverage-final.json) or raw V8 coverage (a NODE_V8_COVERAGE directory, or one V8 coverage JSON file). With this data, fallow health, fallow audit, and bare fallow compute accurate CRAP scores per function. An explicit CLI flag or MCP tool parameter takes precedence. After that, the CLI and typed MCP routes read this variable, and then health.coverage from config.

export FALLOW_COVERAGE=./coverage/coverage-final.json
fallow health

FALLOW_COVERAGE_ROOT

Absolute prefix that fallow removes from Istanbul coverage paths before it matches files. Use it when the coverage comes from a different checkout root, such as CI or Docker. An explicit CLI flag or MCP tool parameter takes precedence. After that, the CLI and typed MCP routes read this variable, and then health.coverageRoot from config.

FALLOW_MAX_FILE_SIZE

Maximum size in megabytes of one source file (default 5; 0 means no limit). Fallow skips larger source files before it parses them. This prevents out-of-memory failures on one large generated or bundled file. When both are set, the --max-file-size CLI flag takes precedence. Fallow always analyzes declaration files (.d.ts).

Review and PR-comment formats

These variables change the review-github, review-gitlab, pr-comment-github, and pr-comment-gitlab output formats. The bundled GitHub Action and GitLab CI template set them for you. Set them yourself only when you render these formats outside the bundled integrations.

VariableEffect
FALLOW_ROOTProject root where the review renderers read source for suggestion blocks. Set it together with --root.
FALLOW_REVIEW_GUIDANCESet to 1, true, yes, or on to add a collapsed guidance block for each finding to inline review comments.
FALLOW_REVIEW_IDStable identifier (1 to 64 characters: ASCII letters, digits, ., _, -) that keeps the inline comments of each job separate when more than one review job posts to the same PR or MR. An invalid value stops the run with exit code 2.
FALLOW_SUMMARY_SCOPEall (default) shows project-level dependency, catalog, and override findings in PR-comment summaries, without the diff filter. diff applies the diff filter to them too.
FALLOW_PR_COMMENT_LAYOUTLayout of the sticky PR or MR summary for pr-comment-github and pr-comment-gitlab. Values: default, compact, gate-only, or details. Use gate-only when reviewers read the findings in a native Check Run or Code Quality widget.
FALLOW_CONSOLIDATED_STATUSWhen you post one check run per gate (fallow ci post-check-run --split-gates), set to 1, true, yes, or on to also post one aggregate fallow check.
FALLOW_DIFF_CONTEXTNumber of lines around changed lines that count as part of the diff when fallow scopes findings to a diff (default 3).
FALLOW_BOT_LOGINBot or token username that fallow treats as its own when it updates existing PR or MR comments. Required when you post with a personal access token.
FALLOW_API_RETRIESMaximum HTTP attempts for the API calls that update review comments (default 3).
FALLOW_API_RETRY_DELAYMinimum delay in seconds between HTTP retries (default 2). On 429 responses, a Retry-After header from the server overrides it.

License and cloud

These variables configure the runtime coverage license and the connection to Fallow Cloud, the paid product. See fallow license and fallow coverage.

VariableEffect
FALLOW_LICENSELicense JWT (full string). Use it on shared CI runners.
FALLOW_LICENSE_PATHPath to a file that contains the license JWT.
FALLOW_LICENSE_SKEW_TOLERANCE_SECONDSClock-skew tolerance for the iat claim of the license JWT (default 86400).
FALLOW_COV_BINPath to the fallow-cov sidecar binary for runtime coverage.
FALLOW_COV_BINARY_PATHSecond sidecar path, checked after FALLOW_COV_BIN. Use it for air-gapped installs and sidecars from a distribution package.
FALLOW_RUNTIME_COVERAGE_SOURCESet to cloud to select cloud runtime coverage in fallow coverage analyze without passing --cloud.
FALLOW_REPOowner/repo fallback for fallow coverage analyze --cloud when --repo is not passed.
FALLOW_API_URLBase URL for Fallow Cloud API calls, for staging or local development.
FALLOW_API_KEYFallow Cloud bearer token for coverage upload commands.
FALLOW_CA_BUNDLEPath to a PEM certificate bundle for HTTP calls to Fallow Cloud and providers. It replaces the default WebPKI roots, so include the public roots and any private CA.

MCP server

Set these in the env block of the MCP server. The CLI that the server starts inherits them. For the full reference, see MCP integration.

VariableEffect
FALLOW_TIMEOUT_SECSTimeout in seconds for the CLI subprocess of one tool call (default 120).
FALLOW_DIFF_FILEPath to a unified diff. Fallow reports only findings on changed lines. A file that cannot be read gives a full-scope report with a not-applied request outcome, not an error.
FALLOW_CHANGED_SINCEGit ref. Analysis tools discover only files changed since this ref. A ref that does not resolve gives a full-scope report with a not-applied request outcome. audit, decision_surface, project_info, list_boundaries, and the trace tools return an error. See Diff and ref from the environment.
FALLOW_MCP_WARM_SESSIONSet to 0, false, off, or no to stop typed tool calls from keeping parsed files in memory between calls. On by default. A later call on unchanged files then does no parse work. Answers are the same either way.
FALLOW_INTEGRATION_SURFACETelemetry surface for integrations other than the CLI. The MCP server sets it on the CLI that it starts.
FALLOW_MCP_TOOLTelemetry dimension for each tool. The MCP server sets it together with FALLOW_INTEGRATION_SURFACE=mcp.

For the complete machine-readable list, see the environment_variables block of fallow schema.

See also