Back to Claude Scientific Skills

Environment Variables

skills/pi-agent/references/environment-variables.md

2.57.03.3 KB
Original Source

Environment Variables

Source: https://pi.dev/docs/latest/environment-variables

Pi uses environment variables three ways: variables that configure the Pi process, a marker Pi sets so child processes know they run inside Pi, and session metadata injected into commands run by the LLM-callable bash tool. Provider API-key variables live in references/providers.md.

Process Marker

The CLI and RPC entry points set PI_CODING_AGENT=true. Child processes inherit it. It is not session-specific and is not set automatically when Pi is embedded through the SDK.

Bash Tool Session Environment

Commands run by the LLM-callable bash tool receive:

VariableDescription
PI_SESSION_IDCurrent session ID
PI_SESSION_FILEAbsolute path to the session JSONL file; unset for ephemeral sessions
PI_PROVIDERCurrently selected model provider
PI_MODELCurrently selected model ID
PI_REASONING_LEVELEffective reasoning level: off, minimal, low, medium, high, xhigh, max

Values resolve when each command starts, so switching models affects the next bash command without restarting. PI_PROVIDER/PI_MODEL identify the selected Pi model, not an upstream model a router picks internally. When asked which model is running, inspect these variables instead of inferring from the system prompt:

bash
printf '%s/%s\n' "$PI_PROVIDER" "$PI_MODEL"

These are injected into the LLM-callable bash tool only — not into user-entered ! or !! commands.

Custom bash tools built with createBashTool() expose the same variables by default, injected before spawnHook so hooks see them in ctx.env. Disable with exposeSessionEnvironment: false; Pi then also clears inherited values so nested Pi processes do not leak stale parent-session metadata.

Pi Process Configuration

VariableDescription
PI_CODING_AGENT_DIROverride the config directory; default ~/.pi/agent
PI_CODING_AGENT_SESSION_DIROverride session storage; overridden by --session-dir
PI_PACKAGE_DIROverride the package directory (useful for Nix/Guix store paths)
PI_OFFLINEDisable startup network operations: update checks, package updates, install/update telemetry
PI_SKIP_VERSION_CHECKDisable the pi.dev latest-version request
PI_TELEMETRYOverride install/update telemetry and provider attribution headers: 1/true/yes or 0/false/no
PI_CACHE_RETENTIONSet to long for extended provider prompt caching where supported
PI_SHARE_VIEWER_URLOverride the base URL used by /share
PI_HARDWARE_CURSORSet to 1 to show the hardware cursor (IME positioning)
VISUAL, EDITORExternal editor fallback when the externalEditor setting is unset
HTTP_PROXY, HTTPS_PROXYProxy outbound HTTP requests

Names are derived from the rebrandable app name (package.json piConfig.name), so a fork uses a different prefix — see references/development.md.

Other variables documented elsewhere: PI_EXPERIMENTAL (experimental first-time setup, references/settings.md), PI_TUI_WRITE_LOG (raw ANSI capture, references/tui.md), AWS_BEDROCK_FORCE_CACHE and other cloud variables (references/providers.md), LLAMA_BASE_URL/LLAMA_API_KEY (references/llama-cpp.md).