# ── @aznex/service ──────────────────────────────────────────────────────────── # Port the service listens on. PORT=3000 # SQLite database file. In Docker this lives on the aznex-data volume. Defaults # to ./aznex.db. AZNEX_DB_PATH is accepted as a fallback alias if this is unset. DATABASE_PATH=/app/data/aznex.db # GitHub App credentials — required for repo access verification (the # load-bearing security check on every ingest/read). Create a GitHub App with # repository "Metadata: read" + organization "Members: read" permissions and # install it on your org/repos. Without "Members: read" the app cannot see # access granted through a team, the org's default permission, or org # ownership, and those users are reported as having no access. See docs/setup.md. GITHUB_APP_ID= # PEM private key. Newlines may be escaped as \n when set via env. GITHUB_APP_PRIVATE_KEY= # How long a verified user→repo permission is cached (ms). Default 5 minutes. REPO_ACCESS_TTL_MS=300000 # GitHub OAuth app for browser login (callback: /api/auth/callback/github). # Unset = the GitHub provider is not registered and browser sign-in is disabled; # the service only logs a warning at startup. API keys keep working. GITHUB_OAUTH_CLIENT_ID= GITHUB_OAUTH_CLIENT_SECRET= # better-auth session signing secret — generate with `openssl rand -hex 32`. BETTER_AUTH_SECRET= # Public URL of the service (Railway domain in production). AZNEX_BASE_URL=http://localhost:3000 # Frontend origin during local dev (Vite). In production the SPA is served # same-origin by the service, so set this to AZNEX_BASE_URL. AZNEX_FRONTEND_ORIGIN=http://localhost:5173 # Super admins: comma-separated GitHub usernames. They manage organizations — # create them and appoint their admins — and can delete any memory for leak # response. They get no memory-read bypass: reads are still gated on org # membership plus GitHub collaborator access, same as everyone. # # This is the only way to grant super admin, so a compromised org admin can # never escalate into it. It is also the bootstrap: a fresh database has no # organizations, and signing in requires super admin or membership in an active # org — so with this unset, nobody can get in. Set it before first sign-in. AZNEX_ADMIN_GITHUB_LOGINS= # GitHub App slug (the name in github.com/apps/) — powers the # "Install / pick repos on GitHub" button. Set the App's Setup URL to # /github/setup and enable "Redirect on update". AZNEX_GITHUB_APP_SLUG= # ── @aznex/worker (runs on each developer's machine, not in Docker) ────────── # # The worker normally reads all of this from ~/.aznex/config.json, written by # `aznex-worker setup`. Environment variables override that file, which is what # you want in CI or a container. Editing the file directly is fine too — or use # the worker's local settings page at http://localhost:29639. # Port the local worker listens on for agent hooks. Loopback only. Not editable # from the settings page — changing it silently breaks already-installed hooks. AZNEX_WORKER_PORT=29639 # Where hook scripts send events. AZNEX_WORKER_URL=http://localhost:29639 # Remote service the worker POSTs extracted memories to. AZNEX_SERVICE_URL=http://localhost:3000 # Per-developer API key minted by the service (Bearer token for /v1/ingest). AZNEX_API_KEY= # Which local coding-agent CLI runs extraction: auto | claude | codex. # "auto" prefers Claude Code when both are on PATH. AZNEX_EXTRACT_AGENT=auto # Model passed as --model to that CLI. Defaults to the cheapest tier the chosen # agent offers — extraction is a bulk summarise job. AZNEX_EXTRACT_MODEL= # Explicit paths to the agent CLIs, if they aren't resolvable on PATH. CLAUDE_CODE_PATH= CODEX_PATH= # Codex config directory, if not ~/.codex. Setup writes hooks.json and # config.toml here. CODEX_HOME= # Set to "off" to stop the daemon from self-updating @aznex/worker. AZNEX_AUTO_UPDATE=