---
title: Environment variables reference
description: Every public REEVAL_* variable, provider key, and CI variable reeval uses.
---
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reeval.ai/llms.txt
> Use this file to discover all available pages before exploring further.

Where a flag and a variable set the same thing, the flag takes precedence. `REEVAL_PROFILE` and `REEVAL_CONCURRENCY` then take precedence over the matching config key. A variable already in the environment takes precedence over the `.env.local` file, which takes precedence over the `.env` file, from the config file's directory.

`reeval run` reads `REEVAL_UI`, `REEVAL_LOG_ORDER`, `REEVAL_LOG_PREFIX`, `REEVAL_OUTPUT_LOGS`, and `REEVAL_HEARTBEAT` before the `.env.local` file and the `.env` file load. For each of those four, `auto` or no value uses the default, and a value outside its own list stops the command: `live`, `plain`, or `agent` for `REEVAL_UI`; `stream` or `grouped` for `REEVAL_LOG_ORDER`; `task` or `none` for `REEVAL_LOG_PREFIX`; `full`, `errors-only`, or `none` for `REEVAL_OUTPUT_LOGS`.

Whitespace or a control character in a harness, judge, or `question` credential stops the run. A missing credential for a harness, a judge, or a `question` stops the run. A missing `analysis.model` credential skips insights.

For more information about config keys, see [Options](/reference/options). For more information about harnesses, see [Agents](/configuration/agents).

## `REEVAL_PROFILE`

`REEVAL_PROFILE` names the profile (`--profile` on `reeval run` and `reeval image build`). With both unset, `defaultProfile.ci` applies when `CI` is set to a value other than `false`, and `defaultProfile.local` applies when `CI` is unset or `false`. Omitting the applicable default selects no profile. An empty or unknown profile name in `defaultProfile` stops config loading; an unknown `--profile` or `REEVAL_PROFILE` name stops the command.

## `REEVAL_CONCURRENCY`

`REEVAL_CONCURRENCY` is how many attempts run together (`--concurrency`, then the `concurrency` key). Unset, the cap is 8, one per CPU and per GB of memory where the sandboxes run, and at least 1. A value that is not a whole number of at least 1 stops the command.

## `REEVAL_PRICES`

`REEVAL_PRICES` names a JSON file of custom model prices for the `reeval run --dry-run` cost estimate. Its prices take precedence over models.dev's. `none` shows tokens only, with no cost. A file reeval can't read or parse stops the command.

## `REEVAL_CAPTURE_BROWSER`

`REEVAL_CAPTURE_BROWSER` of `0` refuses the host browser for `c.capture()`. Any other value allows it. `capture.browser` of `false` refuses it too.

## `REEVAL_MCP_TOKEN`

`REEVAL_MCP_TOKEN` is the bearer token for `reeval mcp --http` (`--token` takes precedence). Unset, the server requires no token.

## `REEVAL_UI`

`REEVAL_UI` is `live`, `plain`, or `agent` (`--ui`). With no value, a detected coding agent selects `agent`, an output CI variable or a pipe selects `plain`, and a terminal selects `live`. `live` prints as plain, and `agent` turns the heartbeat off.

## `REEVAL_LOG_ORDER`

`REEVAL_LOG_ORDER` is `stream` or `grouped` (`--log-order`). With no value, an output CI variable selects `grouped`, and otherwise the order is `stream`.

## `REEVAL_LOG_PREFIX`

`REEVAL_LOG_PREFIX` is `task` or `none` (`--log-prefix`). With no value, `none` applies when `GITHUB_ACTIONS` is a non-empty value other than `false` or `0` and the order is `grouped`. Otherwise the prefix is `task`.

## `REEVAL_OUTPUT_LOGS`

`REEVAL_OUTPUT_LOGS` is `full`, `errors-only`, or `none` (`--output-logs`). With no value, `--verbose` selects `full`, and otherwise the level is `errors-only`.

## `REEVAL_HEARTBEAT`

`REEVAL_HEARTBEAT` is the quiet wait before a still-running line. With no value, the wait is 60 seconds. `0` turns it off. A bare number is seconds, and `ms`, `s`, or `m` names the unit. Another shape stops the command. `agent` forces 0.

## `REEVAL_DEBUG`

A non-empty `REEVAL_DEBUG` prints worker output, image-prepare lines, egress-gateway lines, and the crash error. With no value, those lines stay hidden.

## `REEVAL_RAW_TRANSCRIPT`

A non-empty `REEVAL_RAW_TRANSCRIPT` stores each turn's unnormalized stream parts. With no value, the attempt omits them.

## `REEVAL_NO_REPORT_HINT`

A non-empty `REEVAL_NO_REPORT_HINT` hides the `reeval report` hint after a crash or an infra error. `report`, `--json`, `agent` UI, and a detected coding agent with neither `--ui` nor `REEVAL_UI` also hide it.

## `REEVAL_BASE`

`REEVAL_BASE` is the build argument for a `dockerfile` sandbox, passed as the harness sandbox image. The `Dockerfile` file reads `ARG REEVAL_BASE`. A shell value is unused.

## `REEVAL_PYTHON`

`REEVAL_PYTHON` names the Python interpreter for `*.eval.py`. It applies ahead of `uv run` and `.venv`. Unset, reeval tries `uv run`, then `.venv`, then `python` on Windows or `python3` elsewhere.

## `REEVAL_BINARY`

`REEVAL_BINARY` is the path of the reeval binary the Python launcher runs. It must be a file, and it must not be the launcher itself. Set, it takes precedence over the packaged binary and the cached download.

## `REEVAL_VERSION`

`REEVAL_VERSION` pins the reeval version the Python launcher runs, and a leading `v` is ignored. Without a packaged `reeval-python` version, the launcher needs `REEVAL_VERSION` or `REEVAL_BINARY`.

## `REEVAL_DOWNLOAD`

`REEVAL_DOWNLOAD` is the base URL the Python launcher downloads the release binary from. With no value, the base is the GitHub releases URL for the version. A base that starts with `http:` prints a warning.

## `REEVAL_OFFLINE`

`REEVAL_OFFLINE` stops the Python launcher downloading a version that is not already cached. Any value other than empty, `0`, or `false` turns it on, and a missing version then stops the command.

## `AI_GATEWAY_API_KEY`

`AI_GATEWAY_API_KEY` or `VERCEL_OIDC_TOKEN` calls Vercel AI Gateway for `judge.model` and `analysis.model`, and for harness models when `vercel()` is in the `gateway` list. The `provider/model` prefix selects the credential, and every prefix without a direct key set uses the gateway.

## `OPENROUTER_API_KEY`

`OPENROUTER_API_KEY` is the key for `openrouter()` in the `gateway` list, for harness, judge, and analysis models it serves.

## `VERCEL_OIDC_TOKEN`

`VERCEL_OIDC_TOKEN` calls Vercel AI Gateway, as `AI_GATEWAY_API_KEY` does.

## `GOOGLE_GENERATIVE_AI_API_KEY`

`GOOGLE_GENERATIVE_AI_API_KEY` is the credential for the `goose` and `pi` harnesses, and for `opencode` on a `google/` model. A `google/` `judge.model` or `analysis.model` uses it directly when it is set, ahead of `AI_GATEWAY_API_KEY`.

## `TYPESAFE_AI_API_KEY`

A `typesafe-ai/` `judge.model` uses `TYPESAFE_AI_API_KEY` directly when it is set, ahead of `AI_GATEWAY_API_KEY`. A `typesafe-ai` id scores a judge only, and `analysis.model` rejects one.

## `CURSOR_API_KEY`

`CURSOR_API_KEY` is the credential for the `cursor` harness.

## `ANTHROPIC_API_KEY`

`ANTHROPIC_API_KEY` is the credential for the `claudeCode` harness, and for `opencode` on an `anthropic/` model.

## `GEMINI_API_KEY`

`GEMINI_API_KEY` is the credential for the `antigravity` harness.

## `OPENAI_API_KEY`

`OPENAI_API_KEY` is the credential for the `codex` harness, for `fx` on a bare OpenAI model id, and for `opencode` on an `openai/` model.

## `XAI_API_KEY`

`XAI_API_KEY` is the credential for the `grokBuild` harness.

## `AWS_REGION`

`AWS_REGION` fills the hosts of an `opencode` model on `amazon-bedrock/`. With no value, the region is `us-east-1`. Any other `opencode` provider reads the variable in the [OpenCode providers table](/reference/options#opencode-providers).

## `CI`

`CI` other than `false`, including `0`, selects `defaultProfile.ci`, records when `record` is `ci` (the default), refuses `evaluate.only` and `group.only`, and names the author `ci`. No value, or `false`, selects `defaultProfile.local`.

A non-empty value other than `false` or `0` on `BUILD_ID`, `BUILD_NUMBER`, `CI`, `CI_APP_ID`, `CI_BUILD_ID`, `CI_BUILD_NUMBER`, `CI_NAME`, `CONTINUOUS_INTEGRATION`, `RUN_ID`, `TEAMCITY_VERSION`, or `GITHUB_ACTIONS` defaults the log order to `grouped` and, when no coding agent is detected, the UI to `plain`.

## `GITHUB_ACTIONS`

`GITHUB_ACTIONS` with a non-empty value other than `false` or `0` wraps logs in `::group::` blocks, writes an `::error::` annotation on failure, and keeps color on without a terminal.

On a CI run, `GITHUB_ACTIONS` records the provider `github`. `GITHUB_SERVER_URL`, `GITHUB_REPOSITORY`, and `GITHUB_RUN_ID` build the run URL. `GITHUB_RUN_ATTEMPT` is the attempt. `GITHUB_REF` and `GITHUB_BASE_REF` fill the pull request. The branch is `GITHUB_HEAD_REF`, then `GITHUB_REF_NAME`. `GITHUB_BASE_REF` is also the default branch with no `origin` HEAD and no local `main` or `master`.

## `GITLAB_CI`

On a CI run, `GITLAB_CI` records the provider `gitlab`. The branch is `CI_COMMIT_REF_NAME` when neither `GITHUB_HEAD_REF` nor `GITHUB_REF_NAME` is set. `CI_JOB_URL` is the job URL. `CI_MERGE_REQUEST_IID` and `CI_MERGE_REQUEST_TARGET_BRANCH_NAME` fill the merge request.

## `BUILDKITE`

A non-empty `BUILDKITE` identifies the machine as a Buildkite agent. On a CI runner, `reeval run` and `reeval doctor` warn about `egress: 'allow-all'`, because the sandbox can then reach the cloud metadata service and the host's network around the egress gateway.

## `CIRCLECI`

A non-empty `CIRCLECI` identifies the machine as a CircleCI runner, with the same `egress: 'allow-all'` warning as `BUILDKITE`.

## `GITHUB_OUTPUT`

When `GITHUB_OUTPUT` names a file, `reeval run` appends `run-id=` and the run id.

## `GITHUB_STEP_SUMMARY`

When `GITHUB_STEP_SUMMARY` names a file, `reeval run` appends the run id, then the `summary.md` file.

## `NO_COLOR`

A non-empty `NO_COLOR` turns color off, ahead of `FORCE_COLOR`.

## `FORCE_COLOR`

A non-empty `FORCE_COLOR` other than `false` or `0` turns color on. `false` and `0` turn it off. With no value, color stays off in `agent` mode, and otherwise color stays on for a terminal or for a non-empty `GITHUB_ACTIONS` value other than `false` or `0`.

## `XDG_CACHE_HOME`

`XDG_CACHE_HOME` is the parent of the host cache. With no value, Linux uses the `~/.cache/reeval` directory, macOS uses the `~/Library/Caches/reeval` directory, and Windows uses a `reeval` directory under `LOCALAPPDATA` or under the `~/AppData/Local` directory.
