Every environment variable kin reads. Environment variables sit above both settings.toml files in precedence and below CLI flags, so an exported KIN is always a one-off override. For the full precedence model, see Con…
Every environment variable kin reads. Environment variables sit above both settings.toml files in precedence and below CLI flags, so an exported KIN_* is always a one-off override. For the full precedence model, see Configuration.
Variables
The scope column matches the variable’s settings.toml equivalent: project-ok keys may live in a project file, global-only keys are honored only from the global file / env / CLI, and env only variables have no settings key. See settings.toml keys for the file side.
Backend and model
Variable
What it does
settings.toml key
Scope
KIN_PROVIDER
Provider family: openai or anthropic. With a base URL and neither identity axis set, the vLLM heuristic picks Anthropic. Explicit openai without KIN_WIRE_API means Chat.
provider
project-ok
KIN_WIRE_API
OpenAI wire: chat or responses. Either implies OpenAI and bypasses the bare-base-URL Anthropic heuristic. Responses is opt-in; Chat is the default. messages is internal and rejected here.
wire_api
project-ok
KIN_MODEL
Model id. Set to default to follow whatever model your local server (vLLM/Ollama) is currently running — the harness probes /v1/models on session start and reads response.model off each turn so the displayed name always reflects the live server. The alias is sent verbatim on the wire.
model
project-ok
KIN_BASE_URL
OpenAI-compat endpoint URL for the default backend (a trailing /v1 is trimmed for the Anthropic wire). A selected provider preset owns its endpoint instead; an explicit caller base_url can still override the preset.
base_url
global-only
KIN_PRESET
Provider preset id (built-ins: direct openai / anthropic, plus curated minimax, zai). Bundles wire + endpoint/auth identity; curated presets also supply a default model.
provider_preset
global-only
KIN_API_KEY
Generic endpoint auth fallback. For direct vendor presets it follows that vendor’s conventional variable.
api_key
global-only
OPENAI_API_KEY
Direct OpenAI auth (then KIN_API_KEY); never used by the direct Anthropic preset. Compatibility/custom presets retain the broad legacy fallback chain.
api_key
global-only
ANTHROPIC_API_KEY
Direct Anthropic auth (then KIN_API_KEY); never used by the direct OpenAI preset. Compatibility/custom presets retain the broad legacy fallback chain.
api_key
global-only
KIN_CONTEXT_WINDOW
Token budget for the context meter.
context_window
project-ok
KIN_MAX_TOKENS
Per-response output cap.
max_tokens
project-ok
KIN_TEMPERATURE
Sampling temperature (OpenAI-compat wire only).
temperature
project-ok
KIN_TOP_P
Nucleus sampling top_p (OpenAI-compat wire only).
top_p
project-ok
KIN_TOP_K
top_k via extra_body (OpenAI-compat wire only).
top_k
project-ok
KIN_ENABLE_THINKING
Chat-template thinking soft switch for Qwen-style OpenAI-compatible serves and an Anthropic custom provider with reasoning_profile="poolside".
enable_thinking
project-ok
KIN_REASONING_EFFORT
OpenAI reasoning-effort hint — top-level reasoning_effort on Chat, or reasoning.effort on Responses. Qwen-style vLLM serves may instead use KIN_ENABLE_THINKING. The resolver is opaque to each serve’s vocabulary; the picker (see Models & providers) translates the cross-wire effort knob.
reasoning_effort
project-ok
KIN_STRICT_TOOLS
Strict tool schemas on the streaming registry path (OpenAI-compat wire only, default off) — each tool spec ships a strict-normalized copy (additionalProperties: false, all-required, optionals as null-unions) + strict: true, so endpoints that honor it (OpenAI-proper; vLLM ≥ 0.24 auto tool choice) grammar-enforce the arguments. See Strict decoding.
Anthropic-wire thinking.type knob (default adaptive) — z.ai / MiniMax / Fable’s canonical reasoning control. Common values: adaptive, enabled, disabled (the disabled shape 400s on some serves).
thinking_type
project-ok
KIN_CACHE_TTL
Anthropic system-prompt prefix-cache TTL (1h opts into the 1-hour cache).
cache_ttl
project-ok
KIN_CACHE_MIN_PREFIX_TOKENS
Minimum prefix length before the Anthropic prefix cache engages.
—
env only
KIN_IMAGE_DETAIL
OpenAI vision tier for tool-returned images (low / high / auto).
image_detail
project-ok
KIN_STREAM_STALL_TIMEOUT
Seconds of silence (no stream event) before a model turn is aborted as stalled, across Messages, Chat, and Responses (default 120). Guards against a compat endpoint that keeps a connection open with keep-alive bytes after silently dropping the generation.
—
env only
Permissions and sandbox
Variable
What it does
settings.toml key
Scope
KIN_MODE
Permission mode at launch (auto / strict; the legacy default / accept-edits / plan still resolve via the alias map).
mode
global-only
KIN_SANDBOX
OS sandbox backend for auto-mode shell (auto / seatbelt / bwrap / off / container). container trusts an external boundary so auto-mode shell runs unconfined instead of asking (see the auto-mode guide).
sandbox
global-only
KIN_SANDBOX_NETWORK
Set to 0 to isolate networking inside Seatbelt/bubblewrap; default is network available with workspace/secret containment intact.
sandbox_network
global-only
KIN_SANDBOX_STRICT
Opt strict mode’s shell into the OS sandbox.
sandbox_strict
global-only
KIN_SANDBOX_DEFAULT
Legacy (pre-two-mode) name, still honored as a fallback for KIN_SANDBOX_STRICT.
sandbox_default
global-only
KIN_SHELL_ALLOWLIST
Set to a falsy value to disable the read-only shell allowlist (every command then asks).
shell_allowlist
global-only
Fleet safety
Variable
What it does
settings.toml key
Scope
KIN_TOKEN_BUDGET
Per-run cumulative token budget (prompt + completion, summed across every model round — subagent rounds included). A budget hit stops the run cleanly at the next model-round boundary (done reason token_budget; headless exit 1). 0 / unset = off. Human-only — not model-writable. See Fleet safety.
token_budget
project-ok
KIN_MAX_TURNS
Per-turn model-round cap: the maximum model↔tool round-trips one user turn may take before it ends with done reason turn_cap. 0 / unset = unlimited (the default) — the doom-loop guard (3× identical call+result) is the real no-progress backstop, so an unbounded cap is safe for long-running agentic turns. Human-only — not model-writable.
max_turns
project-ok
KIN_REQUEST_PRIORITY
Legacy vLLM priority-scheduling passthrough (extra_body["priority"], lower = earlier; OpenAI-compat wire only). Serve-gated: requires --scheduling-policy priority; vLLM errors on a non-zero priority otherwise, and current DS4 does not implement the field, so the default is absent, not 0. See Models & providers.
request_priority
project-ok
Planning
Variable
What it does
settings.toml key
Scope
KIN_PERSIST_PLANS
Retired, no-op — plans are now saved to <workdir>/.kin/plans/ unconditionally on every write_plan call. Kept only so an existing settings.toml/env doesn’t error.
persist_plans
project-ok
Sessions and persistence
Variable
What it does
settings.toml key
Scope
KIN_SESSION_DIR
Directory for session journals (the usual override; takes precedence over the settings key).
session_dir
global-only
KIN_NO_SAVE
Run ephemerally — write no session journal or durable prompt history; composer recall remains memory-only for this process.
no_save
global-only
KIN_PROMPT_HISTORY_CAP
Maximum interactive composer submissions retained per project for ↑/↓ and ++ctrl+r++ across restarts (default 100). 0 makes recall memory-only without deleting retained history; negative or malformed values use 100. Stores submitted model prompts, slash commands, and ! command text—not shell output—and never includes headless kin -p prompts. Every no-save route overrides this and disables durable history.
prompt_history_cap
project-ok
KIN_DETACH
Interactive launches run as background sessions by default when tmux ≥ 3.2 is available (DR 0097); set KIN_DETACH=0 to opt out (=1 forces it on). kin --no-detach always wins; headless -p and launches inside your own tmux are never wrapped.
detach
project-ok
KIN_HOME
Relocate the ~/.kin base where settings.toml (and the default projects/ journal root) live.
—
env only
KIN_STATUS_FILE
Path to a best-effort JSON state sidecar a wrapper writes/reads. kin writes running / waiting / idle there atomically; unset (a plain kin run) = no sidecar. Advisory only — never authoritative for liveness. (The Outpost’s ttyd→tmux→kin pipeline was the one consumer before the middle-way plan’s Step 3 ttyd cut, 2026-07-06, DR 0033; no current wrapper sets this env var.)
—
env only
Context and compaction
Variable
What it does
settings.toml key
Scope
KIN_ENV_CONTEXT
Set to 0 to omit the Environment + git-state blocks from the system prompt.
env_context
project-ok
KIN_COMPACT_THRESHOLD
Auto-compact once prompt usage crosses this fraction of the window; the output reservation may impose an earlier hard limit.
compact_threshold
project-ok
KIN_COMPACT_KEEP_TURNS
Minimum recent turns to preserve when compacting (default 4).
compact_keep_turns
project-ok
Skills, tools, and web
Variable
What it does
settings.toml key
Scope
KIN_STRICT_SKILLS
Set to 1 to raise on malformed skill / agent frontmatter instead of graceful-degrading.
strict_skills
project-ok
KIN_SEARCH_ENABLED
Set to 0 to unregister the default-on search_workspace tool (ranked lexical full-text search over workspace content, stdlib SQLite FTS5).
search_enabled
project-ok
KIN_SHELF_ENABLED
Set to 0 to disable shelf board hints and the TUI returned-branch watcher.
shelf_enabled
project-ok
KIN_SHELF_WATCH_INTERVAL
Seconds between fixed-refspec shelf branch probes; minimum 30, default 120, read at TUI mount.
shelf_watch_interval
project-ok
KIN_RUN_CODE
Set to 0 to unregister the run_code / run_code_reset interpreter tools (the stateful per-session Python kernel). On by default — they ride the full shell permission gate.
run_code_enabled
project-ok
KIN_DIAGNOSTICS
Set to 0 to disable the diagnostics-after-edit lint pass appended to write_file/edit_file results (ruff check, v1). On by default; shutil.which-gated (no-op if the linter isn’t installed) and never blocks or fails the write.
diagnostics_after_edit
project-ok
KIN_DIAGNOSTICS_TY
Set to 1 to also run an opt-in ty typecheck pass inside diagnostics-after-edit. Off by default (ty is slow and typed-project-specific).
Set to 1 to write OTel-GenAI-shaped JSONL spans (invoke_agent / chat / execute_tool; metadata only — no prompt/tool text) next to each session journal (<session_id>.spans.jsonl). Off by default.
spans_enabled
project-ok
KIN_PRICING
Set to 1 to display a running USD cost total (/tokens, StatusBar). Sourced from a stdlib pricing table keyed by (provider, model id); an unpriced serve shows nothing. Off by default. See Cost display.
pricing_enabled
project-ok
KIN_RIG
Set to 0 to unregister the Rig tool family. Registration also requires a URL and token.
rig_enabled
project-ok
KIN_RIG_URL
Rig’s semantic API origin.
rig_url
global-only
KIN_RIG_TOKEN
Rig bearer credential. Deployments prefer the file form below.
rig_token
global-only
KIN_RIG_TOKEN_FILE
Read the Rig bearer from a secret file without exporting it to child environments.
—
env only
KIN_BROWSER
Legacy no-op retained so existing settings do not fail validation.
browser_enabled
project-ok
KIN_BROWSER_PRIVATE
Legacy no-op; local Rig development uses task rig:local.
browser_allow_private
global-only
KIN_MEMORY
Set to 0 to unregister the memory tool and disable the memory index/recall injections. On by default.
memory_enabled
project-ok
KIN_MEMORY_REFLECT
Set to 0 to skip the end-of-run memory reflection pass (a bounded extra turn over the live memory tool, fired automatically on a terminal clean kin -p stop with no pending human gate and at TUI quit). On by default; a run that succeeded is never recorded as error because of it.
memory_reflect
project-ok
KIN_MEMORY_DIR
Relocate the memory root (e.g. for a workspace-local store). Default ~/.kin/memory.
memory_dir
global-only
KIN_OUTPOST_URL
Your Outpost’s origin (e.g. https://outpost.kinra.ai) — the outpost/outpost-send tools’ target. Both tools register only when this AND KIN_OUTPOST_TOKEN resolve.
outpost_url
global-only
KIN_OUTPOST_TOKEN
The bearer token (svc_<id>.<secret>) authenticating the outpost/outpost-send tools against your Outpost’s v1 API.
outpost_token
global-only
BRAVE_API_KEY
Brave Search key; enables the web_search / web_context tools.
brave_api_key
global-only
KIN_BRAVE_API_KEY
Alternate name for the Brave key, read after BRAVE_API_KEY.
brave_api_key
global-only
KIN_MCP_TRUST
Path to the persistent MCP server trust store.
—
env only
KIN_MCP_AUTH
Directory for per-server MCP OAuth token state (default ~/.kin/mcp_auth/; files are 0600).
—
env only
Background subagents
Variable
What it does
settings.toml key
Scope
KIN_AGENT_STALL_TIMEOUT
Seconds without model/tool activity before an active, non-paused task agent becomes advisory stale. Clamped to 30–3600; never cancels or restarts the child.
agent_stall_timeout
project-ok
Scheduled jobs & the v1 service registry (Outpost operator)
These are read by the Outpost dashboard / scheduler (container/dashboard/), not the harness proper. Operator/deployment-scoped, never written to settings.toml.
Variable
What it does
settings.toml key
Scope
KIN_MASTER_KEY
The v1 service-registry Key Encryption Key (KEK) — a Fernet key that wraps every service’s bearer token + webhook signing secret at rest in services.db (container/dashboard/keystore.py, services_db.py; PROTOCOL.md §2.1). Resolution order: this env var (the deployment-time secret-manager path) → the 0600 key file at <kin_home>/keystore/service_kek.bin (auto-generated on first dashboard startup / first kin service create, refused if group/other-readable). Ignored (with a logged error) if set to something that isn’t a valid Fernet key. Also the NEW key during a kin service rekey rotation. KEK loss is recoverable-by-re-registration only — every service must re-register.
—
env only
KIN_OLD_MASTER_KEY
The PREVIOUS KEK during a kin service rekey rotation (container/dashboard/services_db.py::rekey, src/kin/harness/cli/service.py). rekey needs BOTH env vars — KIN_OLD_MASTER_KEY (decrypt with the current key) + KIN_MASTER_KEY (re-encrypt with the new key) — and rotates every service secret in one transaction. Generate a new key with python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())".
—
env only
KIN_GPU_PRIORITY
Legacy vLLM-only scheduler switch. On an explicitly qualified vLLM serve with --scheduling-policy priority, flips background children to OpenAI Chat and stamps their resolved KIN_REQUEST_PRIORITY. Keep unset on the current DS4 fleet: DS4 does not implement this request field, and the named Responses profile must remain intact.
—
env only
KIN_GPU_PRESSURE_URL
Optional URL of a compatible vLLM Prometheus endpoint exposing vllm:num_requests_waiting. Only then may the Background limits card enable defer_when_interactive; absent means the control is unavailable. Keep unset on DS4, which exposes no compatible queue metric. A configured endpoint fails open if its scrape becomes unreachable.
—
env only
KIN_JOB_ID / KIN_JOB_NAME
Set by the Outpost scheduler on a scheduled job’s kin -p subprocess env (container/dashboard/scheduler.py), never by an operator directly. Read by the harness’s end-of-run memory reflection to tag that job’s memory writes, so a recurring job updates ONE memory in place instead of accumulating near-duplicates across runs.
—
env only
Meta and UI
Variable
What it does
settings.toml key
Scope
KIN_STRICT_SETTINGS
Set to 1 to raise on a malformed settings.toml instead of degrading to no settings.
—
env only
KIN_ASCII
Force plain-ASCII rendering — the welcome banner (no box-drawing) and the ASCII-safe line spinner style.
—
env only
KIN_THEME
TUI theme name. kin is the transparent terminal-ground default; kin-graphite is the opaque Graphite+ fallback. A higher-precedence env value shadows choices saved by /theme.
theme
project-ok
KIN_SPINNER
The busy-spinner style name (rain · braille · arc · toggle · line — see Identity). Unknown names fall back to the default; pick interactively with /spinner.
spinner
project-ok
KIN_NOTIFY
Set to 0 to disable the terminal bell / OSC 9 walk-away notification — a completion bell on a turn that ran 15s+ and on every needs-input prompt (TUI), or on process completion when stderr is a real terminal (kin -p). On by default.
notify
project-ok
Host environment kin also reads
Beyond its own knobs, kin reads a few standard host variables: SHELL, LANG, and LC_ALL feed the environment block in the system prompt; TMPDIR scopes the OS sandbox’s writable temp path; and XDG_CONFIG_HOME locates user-level AGENTS.md guidance. These are not kin configuration — they are the ambient environment it observes.
For the meaning of provider, base_url, and the sampling knobs, see Models & providers. For the global-only safety boundary, see settings.toml keys.