grithdocs

Environment variables

Every GRITH_ variable grith reads, what it overrides, and the boolean spelling that silently does nothing.

Environment variables are the last config layer, so a GRITH_* override beats every file, including one passed with --config.

terminal
$ GRITH_SUPERVISOR_PROFILE=claude-code grith config | grep default_profile
default_profile = "claude-code"

🚨Booleans need true or false, spelled out

Boolean overrides are parsed strictly. GRITH_AUTO_OPEN_DASHBOARD=0 is silently ignored and the config value stands; GRITH_AUTO_OPEN_DASHBOARD=false works. The same applies to every boolean in the table below. Check with grith config if you are unsure.

Config overrides

VariableOverrides
GRITH_LOG_LEVELgeneral.log_level
GRITH_AUDIT_DIRgeneral.audit_dir
GRITH_AUDIT_SYNCgeneral.audit_sync
GRITH_PLAN_TIERgeneral.plan_tier - reported only; the licence still decides the tier
GRITH_LLM_PROVIDERllm.default_provider
GRITH_PROXY_ALLOW_THRESHOLDproxy.auto_allow_threshold
GRITH_PROXY_DENY_THRESHOLDproxy.auto_deny_threshold
GRITH_PROXY_REVIEW_TIMEOUTproxy.review_timeout_seconds
GRITH_SERVER_ENABLEDserver.enabled
GRITH_SERVER_HOSTserver.host
GRITH_SERVER_PORTserver.port
GRITH_AUTO_OPEN_DASHBOARDserver.auto_open_dashboard
GRITH_SUPERVISOR_ENABLEDsupervisor.enabled
GRITH_SUPERVISOR_PROFILEsupervisor.default_profile
GRITH_SUPERVISOR_TIMEOUTsupervisor.freeze_timeout_seconds

DNS inspection has its own set: GRITH_SUPERVISOR_DNS_INSPECTION_ENABLED, GRITH_SUPERVISOR_DNS_UPSTREAM, GRITH_SUPERVISOR_DNS_CONNECTED_UDP_PROXY, GRITH_SUPERVISOR_DNS_ACCEPT_PROXY_NETWORK_AUTHORITY, and GRITH_SUPERVISOR_DNS_PROXY_ followed by QUEUE_ACTION, MAX_RESPONSE_BYTES, POLICY_TIMEOUT_MS, UPSTREAM_TIMEOUT_MS, SHUTDOWN_TIMEOUT_MS, ROUTE_CAPACITY, QUERY_CAPACITY, CONTROL_CAPACITY or POLICY_CAPACITY. block_tcp_dns and observe_responses have no override - set those in the file.

Nothing else has a config override. [supervisor.coverage], [supervisor.trust], [audit], [reputation], [proxy.filters.*] and [server.tls] are file-only.

Enforcement switches

Read directly outside the config layering. These use looser parsing: 0, false and no turn the behaviour off (the mass-destruction switch also accepts off), and any other non-empty value turns it on.

VariableEffect
GRITH_ENFORCE_AUTHORITY_DELEGATING_SPAWNOverrides supervisor.enforce_authority_delegating_spawn.
GRITH_ENFORCE_CONTROL_SOCKET_CONNECTOverrides supervisor.enforce_control_socket_connect.
GRITH_DBUS_MESSAGE_INSPECTIONOverrides supervisor.dbus_message_inspection. Off restores connect-time escalation.
GRITH_SUPERVISOR_MASS_DESTRUCTION_SIGNALKill switch for the mass-destruction signal. On unless disabled.
GRITH_PROXY_ROUTINE_SIGNAL_ENABLEDOverrides proxy.spawn.routine_provenance_signal.

These are emergency valves. Turning one off removes a detection that has no config-file equivalent reachable mid-session - it is the right tool when a CI job is blocked at 3am, and the wrong one as a permanent setting. See Running in CI for the ordered list of less blunt remedies.

Prompts and checks

VariableEffect
GRITH_NO_UPDATE_CHECKSuppresses the upgrade prompt and notice. Being set at all is enough - the value is not read.
GRITH_NO_PROFILE_UPDATESame, for supervisor-profile refreshes.
GRITH_SKIP_ONBOARDINGSkips the first-run flow. Needs a truthy value: 1, true, yes or on. Same as --skip-onboarding.

Paths and endpoints

VariableEffect
GRITH_CONFIG_DIRMoves the daemon and dashboard tokens, learned rules and the reputation table. It does not move config.toml, which is always $HOME/.config/grith/config.toml.
GRITH_API_BASE_URLOverrides the grith.ai API host used for licence and sync calls.
GRITH_WEB_BASE_URLOverrides the web host used for the links grith prints - dashboard, billing, pricing.
GRITH_DEBUG_TAINT_TRACEVerbose taint-filter tracing. Truthy values only: 1, true, yes.

Provider keys

llm.<provider>.api_key_env names the variable an API key is read from - OPENAI_API_KEY, ANTHROPIC_API_KEY and OPENROUTER_API_KEY by default. Those are not GRITH_* variables and are read only when the config file has no api_key set. See [llm].

See also

Last updated: 2026-08-24Edit this page on GitHub →