-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.env.example
More file actions
441 lines (398 loc) · 22.5 KB
/
.env.example
File metadata and controls
441 lines (398 loc) · 22.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
# Axon Rust Environment Template
# Copy to .env and set values for your environment.
#
# Two env files are used:
# .env — App runtime (workers/web) + shared compose interpolation vars.
# Docker Compose reads this for ${VAR} in both compose files.
# services.env — Infrastructure credentials (postgres, redis, rabbitmq, tei).
# Injected into service containers via env_file:.
#
# See also: docker-compose.yaml (app) and docker-compose.services.yaml (infra).
# --- Host paths (required for session ingestion) ---
# [OPTIONAL] Root directory for all axon persistent data on the host.
# Defaults to ./data if unset.
AXON_DATA_DIR=./data
# [OPTIONAL] Host-side path for MCP JSON artifacts (`response_mode=path`).
# Defaults to $AXON_DATA_DIR/axon/artifacts when AXON_DATA_DIR is set.
AXON_MCP_ARTIFACT_DIR=${AXON_DATA_DIR}/axon/artifacts
# [OPTIONAL] Payload size threshold (bytes) for auto-inline mode in respond_with_mode.
# Payloads at or below this size are returned inline without requiring an artifacts.read.
# Set to 0 to disable auto-inline and force explicit response_mode selection.
# Default: 8192
AXON_INLINE_BYTES_THRESHOLD=8192
# [REQUIRED for sessions ingest] Absolute path to the host user's home directory.
# Used to bind-mount AI session history into the axon-workers container.
# Example: HOST_HOME=/home/yourname
HOST_HOME=/home/yourname
# Claude Code config dir is mounted into axon-web at /home/node/.claude via AXON_DATA_DIR:
# ${AXON_DATA_DIR}/axon/claude:/home/node/.claude
# Bootstrap (run once on first deploy):
# mkdir -p ${AXON_DATA_DIR}/axon/claude
# echo '{"mcpServers":{}}' > ${AXON_DATA_DIR}/axon/claude/mcp.json
# Skills, agents, commands, plugins, settings, and mcp.json live in this directory.
# Host directory mounted into axon-web at /workspace so claude (and other AI CLIs)
# can operate on your local projects from inside the container.
# Example: AXON_WORKSPACE=/home/yourname/workspace
AXON_WORKSPACE=/home/yourname/workspace
# Host path to the axon_rust repo — mounted into axon-workers at /workspace so
# the claude-session s6 service runs in project context and claude-watcher can
# detect CLAUDE.md / project .claude/ changes.
# Example: HOST_WORKSPACE=/home/yourname/workspace/axon_rust
HOST_WORKSPACE=/home/yourname/workspace/axon_rust
# Path to the pre-built axon binary, as seen from inside the axon-web container.
# The Cortex API routes (/api/cortex/*) spawn this binary to serve diagnostic
# data. In Docker, scripts/axon is unreachable (no Rust toolchain in axon-web);
# point AXON_BIN at the release binary via the /workspace mount instead.
# Build once on the host: cargo build --release --bin axon
# The value below assumes AXON_WORKSPACE contains the repo at axon_rust/:
# Example: AXON_BIN=/workspace/axon_rust/target/release/axon
AXON_BIN=/workspace/yourrepo/target/release/axon
# Bind address for axon serve (web-server inside axon-workers).
# Docker compose sets this to 0.0.0.0 in the container env.
# For local dev, `just dev` passes AXON_SERVE_HOST=0.0.0.0 explicitly.
# Leave blank or 127.0.0.1 here to avoid accidentally exposing on all interfaces.
AXON_SERVE_HOST=
# [OPTIONAL] Port for axon serve. Flag: --port. Default: 49000.
# Matches Docker container port (49000:49000). Override via env or --port flag.
AXON_SERVE_PORT=49000
# [OPTIONAL] Next.js dev server port managed by `axon serve`. Default: 49010.
AXON_WEB_DEV_PORT=49010
# [OPTIONAL] Shell WebSocket server port managed by `axon serve`. Default: 49011.
SHELL_SERVER_PORT=49011
# [OPTIONAL] MCP HTTP server port. Default: 8001.
# Matches Docker container port (8001:8001).
AXON_MCP_HTTP_PORT=8001
# [OPTIONAL] MCP HTTP server bind address. Default: 0.0.0.0.
AXON_MCP_HTTP_HOST=0.0.0.0
# [OPTIONAL] MCP transport mode. `http` (default), `stdio`, or `both`.
AXON_MCP_TRANSPORT=http
# --- Docker Compose credentials (required for local stack) ---
# [REQUIRED] PostgreSQL username used by compose and connection URLs.
POSTGRES_USER=axon
# [REQUIRED] PostgreSQL password used by compose and connection URLs.
POSTGRES_PASSWORD=CHANGE_ME
# [REQUIRED] PostgreSQL database name used at startup.
POSTGRES_DB=axon
# [REQUIRED] Redis password expected by Redis --requirepass in compose.
REDIS_PASSWORD=CHANGE_ME
# [REQUIRED] RabbitMQ username used by broker auth.
RABBITMQ_USER=axon
# [REQUIRED] RabbitMQ password used by broker auth.
RABBITMQ_PASS=CHANGE_ME
# --- Core runtime endpoints (required) ---
# [REQUIRED] PostgreSQL DSN used by CLI/workers for job metadata.
AXON_PG_URL=postgresql://axon:CHANGE_ME@axon-postgres:5432/axon
# [REQUIRED] Redis DSN used for health checks and cancel flags.
AXON_REDIS_URL=redis://:CHANGE_ME@axon-redis:6379
# [REQUIRED] AMQP DSN used for queue-backed jobs.
AXON_AMQP_URL=amqp://axon:CHANGE_ME@axon-rabbitmq:5672
# ── Lite Mode (zero-infra alternative to Postgres + RabbitMQ + Redis) ──────────
# Set AXON_LITE=1 to run without Postgres, RabbitMQ, and Redis.
# Workers run in-process automatically — no separate 'axon crawl worker' needed.
# Qdrant, TEI, and Chrome are still required for embedding and crawl.
# [OPTIONAL] Enable lite mode (set to "1" to activate).
AXON_LITE=
# [OPTIONAL] Path to the SQLite jobs database used in lite mode.
# Default: ~/.local/share/axon/jobs.db
AXON_SQLITE_PATH=
# [REQUIRED] Qdrant base URL used for vector storage and search. No default — must be set explicitly.
# For local dev: http://127.0.0.1:53333
QDRANT_URL=http://axon-qdrant:6333
# [OPTIONAL] Max TEI embedding attempts per request (transport/429/5xx retries). Default: 5.
TEI_MAX_RETRIES=5
# [OPTIONAL] Per-attempt TEI request timeout in ms. Clamped to [100, 600000]. Default: 30000.
TEI_REQUEST_TIMEOUT_MS=30000
# [REQUIRED] TEI base URL used for embedding generation. No default — must be set explicitly.
# If using axon-tei from docker-compose.services.yaml: http://axon-tei:80
# If using an external TEI host: http://YOUR_TEI_HOST:52000
# For local dev: http://127.0.0.1:52000
TEI_URL=http://axon-tei:80
# --- TEI service config (used by docker-compose.services.yaml) ---
# These vars configure the axon-tei container. Also duplicated in services.env
# for container env injection. .env provides them for compose YAML interpolation.
# [OPTIONAL] Host port for TEI HTTP endpoint. Default: 52000.
TEI_HTTP_PORT=52000
# [OPTIONAL] HuggingFace embedding model. Default: Qwen/Qwen3-Embedding-0.6B.
TEI_EMBEDDING_MODEL=Qwen/Qwen3-Embedding-0.6B
# [OPTIONAL] Max concurrent requests TEI will accept. Default: 80.
TEI_MAX_CONCURRENT_REQUESTS=80
# [OPTIONAL] Max batch tokens per request. Default: 163840.
TEI_MAX_BATCH_TOKENS=163840
# [OPTIONAL] Max batch requests. Default: 80.
TEI_MAX_BATCH_REQUESTS=80
# [OPTIONAL] Max client batch size. Default: 128.
TEI_MAX_CLIENT_BATCH_SIZE=128
# [OPTIONAL] Pooling strategy. Default: last-token.
TEI_POOLING=last-token
# [OPTIONAL] Number of tokenization workers. Default: 8.
TEI_TOKENIZATION_WORKERS=8
# [OPTIONAL] HuggingFace token for gated models.
HF_TOKEN=
# [LEGACY/OPTIONAL] OpenAI-compatible base URL (kept for compatibility paths).
# ACP-backed commands now use AXON_ACP_ADAPTER_CMD.
OPENAI_BASE_URL=http://REPLACE_WITH_OPENAI_BASE/v1
# [LEGACY/OPTIONAL] API key sent to OPENAI_BASE_URL (bearer token).
OPENAI_API_KEY=REPLACE_ME
# [RECOMMENDED] Model override used by ACP-backed completions and legacy paths.
OPENAI_MODEL=gemini-3-flash-preview
# --- Queue and collection knobs (optional) ---
# [OPTIONAL] Queue name for crawl jobs.
AXON_CRAWL_QUEUE=axon.crawl.jobs
# [OPTIONAL] Queue name for extract jobs.
AXON_EXTRACT_QUEUE=axon.extract.jobs
# [OPTIONAL] Queue name for embed jobs.
AXON_EMBED_QUEUE=axon.embed.jobs
# [OPTIONAL] Queue name for ingest jobs (github/reddit/youtube).
AXON_INGEST_QUEUE=axon.ingest.jobs
# [OPTIONAL] Number of parallel ingest worker lanes (default: 2).
AXON_INGEST_LANES=2
# [OPTIONAL] Qdrant collection name used for embed/query/retrieve/ask.
# WARNING — BREAKING CHANGE: The default was changed from `axon` to `cortex`.
# If you have an existing deployment using the `axon` collection, you MUST either:
# a) Set AXON_COLLECTION=axon explicitly to keep using your existing data, OR
# b) Run `axon migrate --from axon --to cortex` to copy your data before switching.
# Omitting this variable on an existing deployment will silently point to an empty
# `cortex` collection. New deployments can ignore this warning.
AXON_COLLECTION=cortex
# --- Search credentials (required for search and research commands) ---
# [OPTIONAL] Tavily AI Search API key (required for search and research commands).
TAVILY_API_KEY=
# --- Ingest credentials (required for github/reddit/youtube ingest commands) ---
# [OPTIONAL] GitHub personal access token for private repos and higher rate limits.
GITHUB_TOKEN=
# [OPTIONAL] Reddit OAuth2 client ID (from https://www.reddit.com/prefs/apps).
REDDIT_CLIENT_ID=
# [OPTIONAL] Reddit OAuth2 client secret.
REDDIT_CLIENT_SECRET=
# --- Browser runtime knobs (optional) ---
# [OPTIONAL] Enable browser diagnostics artifact collection (true/false).
AXON_CHROME_DIAGNOSTICS=false
# [OPTIONAL] Output directory for browser diagnostics artifacts.
# When unset, derives from AXON_DATA_DIR: $AXON_DATA_DIR/axon/chrome-diagnostics.
# Falls back to .cache/chrome-diagnostics when neither is set.
AXON_CHROME_DIAGNOSTICS_DIR=
# [OPTIONAL] Enable event-log capture in browser diagnostics (true/false).
AXON_CHROME_DIAGNOSTICS_EVENTS=false
# [OPTIONAL] Enable screenshot capture in browser diagnostics (true/false).
AXON_CHROME_DIAGNOSTICS_SCREENSHOT=false
# [OPTIONAL] Proxy URL for Chrome browser requests.
AXON_CHROME_PROXY=
# [REQUIRED for --render-mode chrome/auto-switch] CDP endpoint for headless_browser.
# Points to the axon-chrome management API; normalize_cdp_url() appends /json/version.
# headless_browser rewrites WebSocket URLs using HOSTNAME_OVERRIDE=axon-chrome so that
# axon-workers (same Docker network) receive a resolvable container hostname.
# For external/Tailscale Chrome, set to the remote host:port instead.
AXON_CHROME_REMOTE_URL=http://axon-chrome:6000
# [OPTIONAL] Spider-rs native CDP env var — spider reads this directly without
# axon's Docker hostname normalisation, so always use the localhost URL here.
CHROME_URL=http://127.0.0.1:6000
# [OPTIONAL] User-Agent override for Chrome browser requests.
AXON_CHROME_USER_AGENT=
# --- Hybrid Search (BM42 sparse + dense + RRF fusion) ---
# [OPTIONAL] Enable hybrid search for Named-mode collections (true/false/1/0). Default: true.
AXON_HYBRID_SEARCH=true
# [OPTIONAL] Candidates per prefetch arm before RRF fusion (clamped 10-500). Default: 100.
AXON_HYBRID_CANDIDATES=100
# [OPTIONAL] Ask-pipeline hybrid prefetch window (clamped 10-500). Default: 150.
# Higher than AXON_HYBRID_CANDIDATES (100) because ask reranks before selecting context.
# AXON_ASK_HYBRID_CANDIDATES=150
# --- Worker safety and test knobs (optional) ---
# [OPTIONAL] Max concurrent documents in the embed pipeline (default: CPU count, e.g. 12 on a 12-core machine).
# All in-flight docs fail together if TEI drops — lower this to reduce blast radius at the cost of throughput.
AXON_EMBED_DOC_CONCURRENCY=
# [OPTIONAL] Per-document embed timeout in seconds (fail fast if a single doc stalls).
# Must exceed TEI worst-case retry budget: 4 backoff sleeps (1+2+4+8 = 15s)
# + 5 request timeouts (5 × 30s = 150s) + ~2s jitter = ~167s.
# 300s provides ~133s of headroom above the worst-case retry budget.
AXON_EMBED_DOC_TIMEOUT_SECS=300
# [OPTIONAL] Require successful per-document pre-delete in Qdrant before upsert (default: true).
AXON_EMBED_STRICT_PREDELETE=true
# [OPTIONAL] hnsw_ef for named-mode search (/points/query — hybrid + named-dense, default: 128, clamped [32, 512]).
# Higher values = better recall at the cost of latency. 128 is a good balance for 7M+ point collections.
AXON_HNSW_EF_SEARCH=128
# [OPTIONAL] hnsw_ef for legacy unnamed-mode search (/points/search, default: 64, clamped [32, 512]).
# Legacy collections (VectorMode::Unnamed) use a lower default; new collections should use AXON_HNSW_EF_SEARCH.
AXON_HNSW_EF_SEARCH_LEGACY=64
# [OPTIONAL] Max pending crawl jobs before new submissions are rejected (0 = unlimited).
AXON_MAX_PENDING_CRAWL_JOBS=100
# [OPTIONAL] Warn when an uncapped crawl exceeds this many pages (0 = disabled).
AXON_CRAWL_SIZE_WARN_THRESHOLD=10000
# [OPTIONAL] Seconds before a running job is considered stale by watchdog.
AXON_JOB_STALE_TIMEOUT_SECS=300
# [OPTIONAL] Seconds to confirm stale status before reclaiming a job.
AXON_JOB_STALE_CONFIRM_SECS=60
# [OPTIONAL] Host-accessible Postgres URL for running cargo test directly on the host.
# If unset, tests fall back to AXON_PG_URL (auto-normalized for host use via normalize_local_service_url,
# so Docker hostnames like axon-postgres:5432 are transparently rewritten to 127.0.0.1:53432).
AXON_TEST_PG_URL=
AXON_TEST_AMQP_URL=
# [OPTIONAL] Host-accessible Redis / Qdrant URLs for integration tests.
# Same pattern as above — if unset, those integration tests are skipped.
AXON_TEST_REDIS_URL=
AXON_TEST_QDRANT_URL=
# [OPTIONAL] Prevent destructive cache wipes during some flows when set.
AXON_NO_WIPE=
# --- Ask quality tuning (optional) ---
# [OPTIONAL] Comma-separated list of authoritative domains to boost in reranking.
# Example: "platejs.org,example-docs.io"
AXON_ASK_AUTHORITATIVE_DOMAINS=
# [OPTIONAL] Comma-separated strict retrieval allowlist; when set, sources outside this list
# are excluded from candidates entirely. Stricter than AUTHORITATIVE_DOMAINS.
AXON_ASK_AUTHORITATIVE_ALLOWLIST=
# [OPTIONAL] Min unique citations for non-trivial answers (clamped 1–5). Default: 2.
AXON_ASK_MIN_CITATIONS_NONTRIVIAL=
# --- CLI/render/output knobs (optional) ---
# [OPTIONAL] Enable detailed per-domain breakdown in the domains command.
AXON_DOMAINS_DETAILED=
# [OPTIONAL] Estimated cost per 1k tokens shown in extract command output (e.g. 0.002).
AXON_EXTRACT_EST_COST_PER_1K_TOKENS=
# [OPTIONAL] Disable ANSI color output (any non-empty value disables color).
AXON_NO_COLOR=
# [OPTIONAL] Override the output directory for all file-writing commands.
# When unset, derives from AXON_DATA_DIR: $AXON_DATA_DIR/axon/output.
# Falls back to .cache/axon-rust/output when neither is set.
AXON_OUTPUT_DIR=
# --- Web App (Next.js) ---
# NOTE: Next.js loads env from apps/web/.env.local at runtime.
# Mirror only required keys there (typically AXON_WEB_API_TOKEN,
# NEXT_PUBLIC_AXON_API_TOKEN, and AXON_REDIS_URL when Redis caching is enabled).
# [REQUIRED for Docker] URL of the Axon HTTP/WS backend used by Next.js server-side rewrites.
# In Docker: http://axon-workers:49000 | Local dev: http://localhost:49000
AXON_BACKEND_URL=http://axon-workers:49000
# [REQUIRED for secured API routes] Primary API auth token enforced by apps/web/proxy.ts.
# SERVER-ONLY: Do NOT expose this value to the browser (do not set as NEXT_PUBLIC_*).
# Send via Authorization: Bearer <token> or x-api-key on server-side routes.
# Gates both /api/* routes (proxy.ts) and /ws (Rust WS gate via ?token= query param).
# NOTE: The ?token= query param on /ws is a necessary limitation — WebSocket upgrades cannot
# carry custom headers. Keep the WS token (AXON_WEB_API_TOKEN) separate from the browser
# API token (use AXON_WEB_BROWSER_API_TOKEN for /api/* and set NEXT_PUBLIC_AXON_API_TOKEN
# to match that value, not this one).
AXON_WEB_API_TOKEN=CHANGE_ME
# [OPTIONAL] Second-tier auth token for /api/* routes only (does NOT gate /ws).
# If unset, AXON_WEB_API_TOKEN is used for all routes.
# Useful when browser clients need a separate token from the WS gate token.
# When set, NEXT_PUBLIC_AXON_API_TOKEN must match this value so browser /api/* calls send the correct token.
AXON_WEB_BROWSER_API_TOKEN=
# [OPTIONAL] Comma-separated allowed Origin values for /api requests and shell websocket.
# Example: AXON_WEB_ALLOWED_ORIGINS=http://localhost:49010,https://axon.example.com
AXON_WEB_ALLOWED_ORIGINS=
# [OPTIONAL - development only] If true, allows localhost requests without AXON_WEB_API_TOKEN.
# Do not enable in production.
AXON_WEB_ALLOW_INSECURE_DEV=false
# [OPTIONAL] Host for the shell WebSocket server rewrite in next.config.ts.
# Override when the shell server runs in a different container or host.
# Default: 127.0.0.1
SHELL_SERVER_HOST=127.0.0.1
# [OPTIONAL] Dedicated token for /ws/shell auth; falls back to AXON_WEB_API_TOKEN if unset.
AXON_SHELL_WS_TOKEN=
# [OPTIONAL] Comma-separated allowed Origin values for /ws/shell (falls back to AXON_WEB_ALLOWED_ORIGINS).
AXON_SHELL_ALLOWED_ORIGINS=
# [OPTIONAL] Port for client-side fallback (only matters when AXON_BACKEND_URL is unset).
NEXT_PUBLIC_AXON_PORT=49000
# [REQUIRED when AXON_WEB_API_TOKEN is set] Browser-exposed API token for client-side /api/* requests.
# Used by apiFetch() to attach x-api-key to all client-side /api/* requests.
# Also appended as ?token= on the WS URL by use-axon-ws.ts (WebSocket headers are not supported on upgrade).
# Security guidance:
# - If AXON_WEB_BROWSER_API_TOKEN is set: set this to match AXON_WEB_BROWSER_API_TOKEN (not AXON_WEB_API_TOKEN).
# This keeps the browser token separate from the primary server/WS token.
# - If AXON_WEB_BROWSER_API_TOKEN is unset: set this to match AXON_WEB_API_TOKEN.
NEXT_PUBLIC_AXON_API_TOKEN=
# [OPTIONAL] Browser-exposed dedicated shell websocket token.
# If unset, client falls back to NEXT_PUBLIC_AXON_API_TOKEN.
NEXT_PUBLIC_SHELL_WS_TOKEN=
# [OPTIONAL] Comma-separated allowlist for Claude `--betas` flags passed by Pulse chat.
# If unset, only "interleaved-thinking" is accepted.
AXON_ALLOWED_CLAUDE_BETAS=interleaved-thinking
# [OPTIONAL] Default ACP adapter executable path or command name.
# If unset, built-in per-agent defaults are used:
# claude -> claude-agent-acp
# codex -> codex-acp
# gemini -> gemini --experimental-acp
# [REQUIRED for ACP-backed ask/evaluate/suggest/extract-fallback/debug/research synthesis]
# Set to the agent that should handle ask/research: claude, codex, or gemini.
# Uses the matching AXON_ACP_<AGENT>_ADAPTER_* vars you already have configured below.
AXON_ASK_AGENT=claude
# [OPTIONAL] Global ACP adapter override — takes precedence over AXON_ASK_AGENT.
# Leave unset to use AXON_ASK_AGENT (recommended).
# Example override: AXON_ACP_ADAPTER_CMD=/usr/local/bin/acp-adapter
AXON_ACP_ADAPTER_CMD=
# [OPTIONAL] Global ACP adapter args (pipe-delimited). Used as a fallback when the
# per-agent AXON_ACP_<AGENT>_ADAPTER_ARGS is not set — applies to any adapter
# selected via AXON_ACP_ADAPTER_CMD *or* AXON_ASK_AGENT.
AXON_ACP_ADAPTER_ARGS=
# Per-agent ACP adapter commands for Pulse chat (and ask/research when AXON_ASK_AGENT is set).
AXON_ACP_CLAUDE_ADAPTER_CMD=
AXON_ACP_CLAUDE_ADAPTER_ARGS=
AXON_ACP_CODEX_ADAPTER_CMD=
AXON_ACP_CODEX_ADAPTER_ARGS=
AXON_ACP_GEMINI_ADAPTER_CMD=
AXON_ACP_GEMINI_ADAPTER_ARGS=
# [SECURITY] Auto-approve all ACP agent tool permissions without prompting.
# Set to 'false' to require interactive frontend approval for each tool call.
# Accepts: true/false/yes/no/1/0 (case-insensitive). Default: true.
AXON_ACP_AUTO_APPROVE=true
# [OPTIONAL] Max concurrent ACP sessions (each holds a spawn_blocking thread).
# Default: 8. Increase if you see "ACP session queue full" errors under load.
AXON_ACP_MAX_CONCURRENT_SESSIONS=8
# [OPTIONAL] Per-turn timeout for persistent ACP adapter mode in milliseconds.
# Applies to Pulse Chat interactive sessions. Default: 300000 (5 minutes).
# WARNING: If this exceeds SESSION_HUNG_TURN_THRESHOLD (also 5 min), increase
# both together — the session reaper will evict the session as "hung" before
# the turn's own timeout fires, killing the adapter mid-response.
AXON_ACP_TURN_TIMEOUT_MS=300000
# [OPTIONAL] Prewarm the configured ACP adapter on server startup to eliminate
# cold-start latency. The first Pulse Chat interaction otherwise incurs a ~45s
# initialization delay. Set to false to disable prewarming (e.g., to save API
# tokens in dev environments).
AXON_ACP_PREWARM=true
# [OPTIONAL] Remote ACP: route ask/research/evaluate completions through a remote axon serve
# WebSocket instead of spawning a local adapter subprocess. Useful for deployments where the
# machine running axon cannot host ACP adapters directly.
# Set to the base HTTP/HTTPS URL of the remote axon serve instance (e.g. https://axon.example.com:49000).
# When set, completions connect to {AXON_ACP_WS_URL}/ws?token={AXON_ACP_WS_TOKEN}.
AXON_ACP_WS_URL=
# [OPTIONAL] Bearer token for the remote ACP WebSocket endpoint.
# Must match AXON_WEB_API_TOKEN (or AXON_WEB_BROWSER_API_TOKEN) on the remote axon serve instance.
AXON_ACP_WS_TOKEN=
# [OPTIONAL] Set to 'true' if hot-reload file events don't propagate (uncommon on Linux).
# WATCHPACK_POLLING=true
# --- Logging knobs (optional) ---
# [OPTIONAL] Path to write structured log output to a file.
AXON_LOG_FILE=
# [OPTIONAL] Maximum log file size in bytes before rotation (default: 10485760 = 10MB).
AXON_LOG_MAX_BYTES=
# [OPTIONAL] Maximum number of rotated log files to retain (default: 3).
AXON_LOG_MAX_FILES=
# [OPTIONAL] Git SHA baked into Docker image labels and used for container revision verification.
# Set before running docker compose build/up to stamp the image: export AXON_GIT_SHA=$(git rev-parse HEAD)
# Defaults to "dev" when unset.
AXON_GIT_SHA=
# --- Neo4j (GraphRAG — entity extraction + graph-enhanced retrieval) ---
# [OPTIONAL] Neo4j HTTP base URL for transactional Cypher API. Empty = graph features disabled.
# Example: http://127.0.0.1:7474
AXON_NEO4J_URL=http://127.0.0.1:7474
# [OPTIONAL] Neo4j auth username.
AXON_NEO4J_USER=neo4j
# [REQUIRED if AXON_NEO4J_URL is set] Neo4j auth password.
AXON_NEO4J_PASSWORD=
# [OPTIONAL] AMQP queue name for graph extraction jobs.
AXON_GRAPH_QUEUE=axon.graph.jobs
# [OPTIONAL] Parallel graph extraction jobs per worker (default: 4).
AXON_GRAPH_CONCURRENCY=4
# [OPTIONAL] Ollama/OpenAI-compatible base URL for ambiguous graph extraction.
AXON_GRAPH_LLM_URL=http://localhost:11434
# [OPTIONAL] Model used for graph extraction when LLM fallback is needed.
AXON_GRAPH_LLM_MODEL=qwen3.5:4b
# [OPTIONAL] Similarity threshold for cross-document graph edges.
AXON_GRAPH_SIMILARITY_THRESHOLD=0.75
# [OPTIONAL] Max similar URLs considered when building graph edges.
AXON_GRAPH_SIMILARITY_LIMIT=20
# [OPTIONAL] Max chars of graph context injected into `axon ask --graph`.
AXON_GRAPH_CONTEXT_MAX_CHARS=2000
# [OPTIONAL] Path to curated taxonomy JSON. Empty = bundled taxonomy.
AXON_GRAPH_TAXONOMY_PATH=
# ──────────────────────────────────────────────────────────────
# Mem0 (cross-session agent memory)
# ──────────────────────────────────────────────────────────────
# Base URL of the axon-mem0 REST API service.
MEM0_URL=http://localhost:58000