environment variables

arizukoreference › environment variables

Every env var read by an arizuko Go or TypeScript daemon, with the file:line that reads it, type, default, and one-line effect. Generated from a grep of os.Getenv, chanlib.EnvOr/EnvInt/EnvBool/EnvBytes/EnvDur/MustEnv, and process.env[] across the repo. Test-only env vars omitted.

core (LoadConfig) container chanreg arizuko CLI arizuko run (compose) gated proxyd webd onbod dashd timed ttsd teled discd whapd mastd bskyd reditd emaid twitd linkd slakd
Conventions. chanlib.EnvOr(k, d) returns d when the env var is empty or unset. chanlib.MustEnv(k) calls os.Exit(1) if unset. chanlib.EnvDur(k, d) reads integer milliseconds (legacy encoding) — not Go duration strings. Adapter LISTEN_ADDR code-defaults vary per daemon, but every service TOML in template/services/ pins :8080; the multi-daemon local-dev numbers (9001–9010) appear here only because that's what the source defaults to.

core — consumed by every Go daemon via core.LoadConfig

These are read in core/config.go through chanlib.EnvOr / EnvInt / EnvDur and the resolveTimezone() helper. Every daemon that calls core.LoadConfig() (gated, onbod, webd, …) inherits this surface.

API_PORT

Listening port for gated's HTTP API.

Read bycore / core/config.go:135 → gated
Typeint
Default8080
Example8080

ARIZUKO_DEV

Dev mode — allows empty CHANNEL_SECRET and bind-mounts ant/src into spawned agent containers for live-reload of the in-container runner.

Read bycore / core/config.go:168, container / container/runner.go:498
Typebool ("true" or "1")
Defaultunset = production mode
Example1

ASSISTANT_NAME

Bot display name and mention trigger; also baked into the data-dir basename and compose container_name. Must contain no whitespace or shell metachars.

Read bycore / core/config.go:102, webd / webd/main.go:42, teled / teled/main.go:63, discd / discd/main.go:70, whapd / whapd/src/main.ts:41
Typestring
DefaultAndy (core); assistant in webd; empty in teled/discd
ExampleAndy

AUTH_BASE_URL

Public base URL used to build OAuth redirect callbacks and onboarding invite links. HTTPS prefix toggles secure-cookie flag.

Read bycore / core/config.go:115
TypeURL
Default""
Examplehttps://krons.arizuko.com

AUTH_SECRET

HMAC key for OAuth JWT mint/verify.

Read bycore / core/config.go:113
Typestring (hex/random)
Default""
Examplea3f1...c0de

CHANNEL_SECRET

Bearer secret authenticating adapter ↔ gated traffic. Required in production; empty allowed only with ARIZUKO_DEV. Individual adapters can override per platform with <DAEMON>_CHANNEL_SECRET (e.g. SLAKD_CHANNEL_SECRET). gated binds whatever bearer the adapter registers with to that channel record, so a leaked per-platform secret does not compromise the others. See specs/6/H.

Read bycore / core/config.go:136, webd / webd/main.go:39, teled / teled/main.go:60, discd / discd/main.go:67, mastd / mastd/main.go:56, bskyd / bskyd/main.go:57, reditd / reditd/main.go:72, emaid / emaid/main.go:63, linkd / linkd/main.go:65, slakd / slakd/main.go:60, whapd / whapd/src/main.ts:155, twitd / twitd/src/main.ts:42
Typestring
Default"" (refuses to start unless ARIZUKO_DEV set)
Examplee8c2...4b9a

CONTAINER_IMAGE

Docker image used to spawn per-group agent containers.

Read bycore / core/config.go:107
Typestring
Defaultarizuko-ant:latest
Examplearizuko-ant:v0.35.0

CONTAINER_TIMEOUT

Hard kill timeout per agent run, in milliseconds.

Read bycore / core/config.go:108
Typeint (milliseconds, via EnvDur)
Default3600000 (60 min)
Example1800000

CRACKBOX_ADMIN_API

Crackbox admin HTTP base URL. Non-empty enables egress isolation; gated requires EGRESS_NETWORK_PREFIX + EGRESS_CRACKBOX when set.

Read bycore / core/config.go:158, compose / compose/compose.go:258
TypeURL
Default"" (egress isolation off)
Examplehttp://crackbox:3129

CRACKBOX_ADMIN_SECRET

Bearer token for crackbox admin API mutations. Sent by gated as the egress controller; consumed by crackbox.

Read bycore / core/config.go:161, crackbox host / crackbox/pkg/host/host.go:105
Typestring
Default""
Example7f...22

CRACKBOX_PROXY_URL

Value injected as HTTPS_PROXY / HTTP_PROXY into every agent container.

Read bycore / core/config.go:159
TypeURL
Defaulthttp://crackbox:3128
Examplehttp://crackbox:3128

DATA_DIR

Root of this instance's data directory (store/, groups/, ipc/, web/). When set in compose, also passes through to dashd, timed, and several adapters as their working/storage root.

Read bycore / core/config.go:99, dashd / dashd/main.go:67, timed / timed/main.go:26, teled / teled/main.go:54, bskyd / bskyd/main.go:60, reditd / reditd/main.go:75, emaid / emaid/main.go:66, linkd / linkd/main.go:68, whapd / whapd/src/main.ts:42, twitd / twitd/src/main.ts:28
Typepath
Defaultcwd (core); /srv/data/<daemon> per adapter
Example/srv/data/arizuko_krons

DISCORD_CLIENT_ID

OAuth client id for the Discord login provider in proxyd's auth flow (distinct from the bot token used by discd).

Read bycore / core/config.go:118
Typestring
Default""
Example1234567890

DISCORD_CLIENT_SECRET

OAuth client secret for the Discord login provider.

Read bycore / core/config.go:119
Typestring
Default""
Exampleabc...def

EGRESS_CRACKBOX

Container name of the crackbox proxy; gated attaches it to every per-folder docker network.

Read bycore / core/config.go:157, compose generation / compose/compose.go:266
Typestring
Default"" (compose generation derives <app>_crackbox_<flavor>)
Examplearizuko_crackbox_krons

EGRESS_NETWORK_PREFIX

Docker network name prefix; per-folder networks created as <prefix>_<folder>.

Read bycore / core/config.go:156, compose generation / compose/compose.go:259
Typestring
Default"" (compose generation derives arizuko_<flavor>)
Examplearizuko_krons

EGRESS_SUBNET

Parent CIDR carved into per-folder /24s for egress networks.

Read bycore / core/config.go:160
TypeCIDR string
Default10.99.0.0/16
Example10.42.0.0/16

GITHUB_ALLOWED_ORG

If set, restricts GitHub OAuth sign-in to members of this org.

Read bycore / core/config.go:123
Typestring
Default""
Examplekronael

GITHUB_CLIENT_ID

OAuth client id for the GitHub login provider.

Read bycore / core/config.go:116
Typestring
Default""
ExampleIv1.abc123

GITHUB_CLIENT_SECRET

OAuth client secret for the GitHub login provider.

Read bycore / core/config.go:117
Typestring
Default""
Exampleghs_xxxxx

GOOGLE_ALLOWED_EMAILS

CSV allowlist of email addresses permitted to complete Google OAuth.

Read bycore / core/config.go:122
TypeCSV string
Default""
Examplealice@example.com,bob@example.com

GOOGLE_CLIENT_ID

OAuth client id for the Google login provider.

Read bycore / core/config.go:120
Typestring
Default""
Exampleabc.apps.googleusercontent.com

GOOGLE_CLIENT_SECRET

OAuth client secret for the Google login provider.

Read bycore / core/config.go:121
Typestring
Default""
ExampleGOCSPX-xxx

HOST_APP_DIR

Path on the host that contains the arizuko binaries and ant/src; used when bind-mounting the dev runner.

Read bycore / core/config.go:101, compose / compose/compose.go:461
Typepath
Defaultdirectory of the running executable
Example/home/onvos/app/arizuko

HOST_CODEX_DIR

Host path bind-mounted into agent containers at /home/node/.codex so the oracle skill can reuse the operator's codex login state.

Read bycore / core/config.go:133
Typepath
Default"" (mount disabled; falls back to CODEX_API_KEY/OPENAI_API_KEY folder secrets)
Example/home/onvos/.codex

HOST_DATA_DIR

Host-side path used when constructing volume mounts for spawned containers. Differs from DATA_DIR only when arizuko runs inside a container itself.

Read bycore / core/config.go:100
Typepath
DefaultDATA_DIR
Example/srv/data/arizuko_krons

IDLE_TIMEOUT

How long an idle agent container is kept around before recycling, in milliseconds.

Read bycore / core/config.go:109
Typeint (milliseconds)
Default3600000 (60 min)
Example600000

MAX_CONCURRENT_CONTAINERS

Max agent containers running at once before gated queues spawns.

Read bycore / core/config.go:110
Typeint
Default5
Example10

MEDIA_ENABLED

Enables inbound media download and forwarding to the agent. Adapters fall back to URL-only references when off.

Read bycore / core/config.go:143
Typebool ("true")
Defaultfalse
Exampletrue

MEDIA_MAX_FILE_BYTES

Per-attachment byte cap on inbound media; adapter ProxyFile streams up to this size before truncation.

Read bycore / core/config.go:144, teled / teled/main.go:65, discd / discd/main.go:71, mastd / mastd/main.go:59, bskyd / bskyd/main.go:61, reditd / reditd/main.go:76, emaid / emaid/main.go:67, slakd / slakd/main.go:63
Typeint (bytes)
Default20971520 (20 MiB)
Example52428800

ONBOARDING_ENABLED

Master switch for the onboarding flow. Affects both gateway behaviour and whether compose generates the onbod service.

Read bycore / core/config.go:137, onbod / onbod/main.go:55 ("0" → exit 0), compose / compose/compose.go:326
Typebool (core: "true"; onbod: "0" disables)
Defaultfalse
Exampletrue

ONBOARDING_PLATFORMS

CSV of platforms (e.g. telegram,discord) for which onboarding admissions are enabled.

Read bycore / core/config.go:138
TypeCSV string
Default""
Exampletelegram,whatsapp

OBSERVE_WINDOW_MESSAGES

How many trailing #observe-mode messages the gateway folds into context when a trigger turn fires. Per-route override via routes.observe_window_messages.

Read bycore / core/config.go:151, gateway / gateway/gateway.go:1814
Typeint
Default10
Example25

OBSERVE_WINDOW_CHARS

Character cap on the #observe context window for a single trigger turn. Per-route override via routes.observe_window_chars.

Read bycore / core/config.go:152, gateway / gateway/gateway.go:1815
Typeint (chars)
Default4000
Example8000

ENGAGEMENT_TTL

How long a (chat, topic) stays “engaged” after the bot’s last reply. Engaged pairs fire a turn on every inbound message without needing a fresh @mention, and override #observe routing. TTL is sliding — reset on each user or bot message while engaged. See engagement.

Read bycore / core/config.go:182 → gated
Typeduration (e.g. 10m, 30m)
Default10m
Example30m

SEND_DISABLED_CHANNELS

CSV of channel names where outbound sends are dropped (read-only mode).

Read bycore / core/config.go:140
TypeCSV string
Default""
Examplemastodon,bluesky

SEND_DISABLED_GROUPS

CSV of group folders where outbound sends are dropped (read-only mode).

Read bycore / core/config.go:141
TypeCSV string
Default""
Examplesolo/inbox,corp/eng

TELEGRAM_BOT_TOKEN

Bot token for the Telegram channel adapter.

Read bycore / core/config.go:106, teled / teled/main.go:58 (MustEnv)
Typestring
Default"" (teled refuses to start)
Example12345:ABC-DEF1234ghIkl-zyx57W2v1u123ew11

TTS_BASE_URL

OpenAI-compatible /v1/audio/speech base URL the agent's send_voice path hits.

Read bycore / core/config.go:151
TypeURL
Defaulthttp://ttsd:8880
Examplehttp://ttsd:8880

TTS_ENABLED

Enables TTS rendering of agent replies as voice messages.

Read bycore / core/config.go:150
Typebool ("true")
Defaultfalse
Exampletrue

TTS_MODEL

Default model name passed in the TTS request body.

Read bycore / core/config.go:153
Typestring
Defaultkokoro
Examplekokoro

TTS_TIMEOUT

Per-request timeout when calling the TTS backend, in milliseconds.

Read bycore / core/config.go:154
Typeint (milliseconds)
Default15000 (15 s)
Example30000

TTS_VOICE

Instance-default voice id; agent may override per-call via send_voice args or per-group via PERSONA.md frontmatter.

Read bycore / core/config.go:152
Typestring
Defaultaf_bella
Exampleaf_sky

TZ

IANA timezone for log timestamps, cron evaluation in timed, and Config.Timezone consumers.

Read bycore / core/config.go:192, timed / timed/main.go:36, compose / compose/compose.go:490
Typestring (IANA name)
DefaultUTC
ExampleEurope/Bratislava

VIDEO_TRANSCRIPTION_ENABLED

Enables Whisper transcription of inbound video.

Read bycore / core/config.go:147
Typebool ("true")
Defaultfalse
Exampletrue

VOICE_TRANSCRIPTION_ENABLED

Enables Whisper transcription of inbound voice messages.

Read bycore / core/config.go:146
Typebool ("true")
Defaultfalse
Exampletrue

WEB_HOST

Public hostname the instance serves; used to build chat-link, webhook, and onboarding URLs in agent prompts.

Read bycore / core/config.go:114
Typestring
Default""
Examplekrons.arizuko.com

WHISPER_BASE_URL

Base URL of the Whisper-compatible transcription endpoint.

Read bycore / core/config.go:145
TypeURL
Defaulthttp://localhost:8080
Examplehttp://whisper:9000

WHISPER_MODEL

Model name passed to Whisper.

Read bycore / core/config.go:148
Typestring
Defaultturbo
Examplelarge-v3

container — agent spawn (read by gated/gateway when building runs)

ANTHROPIC_API_KEY

Forwarded into every spawned agent container as part of the base secrets bundle so Claude Code can authenticate.

Read bycontainer / container/runner.go:617
Typestring
Defaultnot forwarded if unset
Examplesk-ant-...

CLAUDE_CODE_OAUTH_TOKEN

Alternative auth for Claude Code; forwarded into the container alongside ANTHROPIC_API_KEY.

Read bycontainer / container/runner.go:617
Typestring
Defaultnot forwarded if unset
Examplecc-oauth-...

LOG_LEVEL

Controls verbose container-run logging in gated (debug/trace dump full stderr + mounts after every spawn) and the ttsd log level.

Read bycontainer / container/runner.go:891, ttsd / ttsd/main.go:33
Typestring (debug/info/warn/error/trace)
Defaultnot set (concise logging; info in ttsd)
Exampledebug

chanreg

CHANNEL_REGISTER_ALLOW_PUBLIC

Dev override that lets channel adapters register with public IPs. By default chanreg rejects non-private adapter URLs as SSRF risk.

Read bychanreg / chanreg/chanreg.go:222
Typebool ("1")
Defaultunset = enforce private-only
Example1

arizuko CLI (cmd/arizuko)

ARIZUKO_DATA_DIR

Override the base directory used to construct instance data paths. When set, instance dir is $ARIZUKO_DATA_DIR/arizuko_<name>.

Read bycli / cmd/arizuko/main.go:151
Typepath
Default"" (falls back to PREFIX)
Example/var/lib/arizuko

PREFIX

Filesystem prefix for instance data dirs; final path is $PREFIX/data/arizuko_<name>.

Read bycli / cmd/arizuko/main.go:154
Typepath
Default/srv
Example/srv

arizuko run (compose generation)

Read by compose/compose.go at arizuko run time when it generates the docker-compose YAML. These are not consumed by any running daemon — only by the generator that decides which services to emit, which ports to expose, and which proxyd routes to gate.

DAV_PORT

Host port to expose for davd. Empty ⇒ davd not exposed at the docker level.

Read bycompose / compose/compose.go:564
Typestring (port)
Default""
Example8096

PROFILE

Compose profile selector. minimal drops the dashd routes and other non-essential services; full includes everything.

Read bycompose / compose/compose.go:306
Typestring (minimal / full)
Defaultfull
Exampleminimal

WEB_PORT

Host port the proxyd service is published on; the public entry point for the instance.

Read bycompose / compose/compose.go:530
Typestring (port)
Default8095
Example443

WEB_PORT_ALIASES

CSV of additional host ports also published for proxyd (e.g. expose 80 alongside 443).

Read bycompose / compose/compose.go:536
TypeCSV string
Default""
Example80,8080

WEBDAV_ENABLED

Whether to emit the davd service and gate its /dav/ proxyd route.

Read bycompose / compose/compose.go:323 (and as a route gate at :186)
Typebool ("true")
Defaulttrue
Examplefalse

gated

gated has no direct env reads — every value comes from core.LoadConfig above. The gated-specific gate is the validation block at gated/main.go:33: if CRACKBOX_ADMIN_API is set, both EGRESS_NETWORK_PREFIX and EGRESS_CRACKBOX must also be set or the daemon exits.

proxyd

PROXYD_HMAC_SECRET

Shared HMAC key for signing identity headers (X-User-Sub, …) that backends verify via auth/middleware.go. If unset, proxyd generates an ephemeral value at boot and webd will reject every signed request — effectively breaking auth.

Read byproxyd / proxyd/main.go:46, webd / webd/server.go:99, onbod / onbod/main.go:78
Typestring (hex/random, ≥32 bytes recommended)
Defaultrandom per-process (production-broken if not set on all sides)
Exampleb1...e9

PROXYD_LISTEN

Port proxyd binds to. Plain numbers get a : prefix.

Read byproxyd / proxyd/main.go:42
Typestring (port or :port)
Default8080
Example8080

PROXYD_ROUTES_JSON

Aggregated route table generated at compose time from every adapter's TOML [[proxyd_route]] entries.

Read byproxyd / proxyd/main.go:59
TypeJSON string
Default"" (falls back to legacy built-in routes)
Example[{"prefix":"/dash/","backend":"http://dashd:8080","auth":"user"},…]

PUB_REDIRECT_URL

If set, proxyd redirects /pub/* requests to this base URL instead of serving them locally — lets a CDN front the static docs.

Read byproxyd / proxyd/main.go:57
TypeURL
Default"" (proxyd serves /pub/ itself)
Examplehttps://docs.arizuko.com

TRUSTED_PROXIES

CSV of CIDRs (or bare IPs) trusted to set X-Forwarded-For. Empty ⇒ no client trusted, XFF always replaced with the connection peer.

Read byproxyd / proxyd/main.go:60
TypeCSV string (CIDRs / IPs)
Default""
Example10.0.0.0/8,172.16.0.0/12

VITE_ADDR

Backend address proxyd forwards /pub/* (and chat widget) traffic to.

Read byproxyd / proxyd/main.go:56
TypeURL
Defaulthttp://vited:8080
Examplehttp://vited:8080

webd

ROUTER_URL

Base URL of gated; webd posts inbound web chat and webhook messages to $ROUTER_URL/v1/messages.

Read bywebd / webd/main.go:38 — see also ROUTER_URL in adapters
TypeURL
Defaulthttp://gated:8080
Examplehttp://gated:8080

WEBD_LISTEN

Address webd binds to.

Read bywebd / webd/main.go:36
Typelisten addr (:port or host:port)
Default:8080
Example:8080

WEBD_URL

Public URL webd advertises to gated when registering as a channel.

Read bywebd / webd/main.go:37
TypeURL
Defaulthttp://webd:8080
Examplehttp://webd:8080

onbod

ONBOARD_POLL_INTERVAL

Cadence at which onbod scans for unprompted users / admission queue entries.

Read byonbod / onbod/main.go:147
TypeGo duration string (time.ParseDuration)
Default10s
Example30s

ONBOARDING_GREETING

Custom greeting string injected into onboarding prompts in place of the default copy.

Read byonbod / onbod/main.go:142
Typestring
Default""
ExampleWelcome to krons.

ONBOD_LISTEN_ADDR

Address onbod binds to.

Read byonbod / onbod/main.go:144
Typelisten addr
Default:8080
Example:8080

onbod additionally reads ONBOARDING_ENABLED ("0" → clean exit), PROXYD_HMAC_SECRET (for StripUnsigned middleware), and ROUTER_URL via core.

dashd

DASH_PORT

Port dashd binds to. Plain numbers get a : prefix.

Read bydashd / dashd/main.go:79, compose / compose/compose.go:523
Typestring
Default:8080
Example:8080

DB_PATH

SQLite DSN dashd opens read-only (with a separate RW handle for /dash/me/secrets writes). Falls back to $DATA_DIR/store/messages.db.

Read bydashd / dashd/main.go:70
Typepath
Default$DATA_DIR/store/messages.db (refuses to start if both unset)
Example/srv/data/arizuko_krons/store/messages.db

timed

DATABASE

SQLite DSN timed opens to poll scheduled_tasks. Falls back to $DATA_DIR/store/messages.db.

Read bytimed / timed/main.go:28
Typepath
Default$DATA_DIR/store/messages.db (refuses to start if both unset)
Example/srv/data/arizuko_krons/store/messages.db

timed also reads DATA_DIR and TZ (for cron evaluation).

ttsd

TTSD_ADDR

Address ttsd binds to.

Read byttsd / ttsd/main.go:31
Typelisten addr
Default:8880
Example:8880

TTS_BACKEND_URL

Upstream Kokoro/OpenAI-compatible TTS server ttsd proxies to.

Read byttsd / ttsd/main.go:32
TypeURL
Defaulthttp://kokoro:8880
Examplehttp://kokoro:8880

ttsd also reads LOG_LEVEL.

Adapter common surface

Every channel adapter shares the same set of plumbing env vars:

CHANNEL_NAME

Name the adapter registers with gated; routing uses this verbatim. Has a per-daemon default.

Read byteled :55, discd :64, mastd :52, bskyd :52, reditd :64, emaid :55, linkd :59, slakd :56
Typestring
Defaultmatches the platform (telegram, discord, mastodon, …)
Exampletelegram-prod

LISTEN_ADDR

Address the adapter binds for its outbound-send HTTP server (gated → adapter).

Read byteled :61 (:9001), discd :68 (:9002), whapd :156 (:9002), mastd :57 (:9004), emaid :64 (:9003), bskyd :58 (:9005), reditd :73 (:9006), linkd :66 (:9010), slakd :61 (:8080), twitd :43 (:8080)
Typelisten addr
Defaultvaries (see column above; :8080 when pinned by service TOML)
Example:8080

LISTEN_URL

URL the adapter advertises to gated on registration so gated can reach it.

Read byteled :62, discd :69, whapd :157, mastd :58, emaid :65, bskyd :59, reditd :74, linkd :67, slakd :62, twitd :44
TypeURL
Defaulthttp://<daemon>:<port>
Examplehttp://teled:9001

ROUTER_URL

Base URL of gated where the adapter posts inbound messages.

Read byteled :59 (MustEnv), discd :66 (MustEnv), whapd :154, mastd :55 (MustEnv), emaid :62 (MustEnv), bskyd :56 (MustEnv), reditd :71 (MustEnv), linkd :64 (MustEnv), slakd :59 (MustEnv), twitd :41, webd :38, onbod :143
TypeURL
Defaultrequired in most adapters (MustEnv); webd/onbod default to http://gated:8080
Examplehttp://gated:8080

All adapters additionally read CHANNEL_SECRET and most read MEDIA_MAX_FILE_BYTES.

teled (Telegram)

Reads TELEGRAM_BOT_TOKEN (MustEnv), ASSISTANT_NAME, DATA_DIR, plus the adapter common surface. No teled-specific env vars beyond these.

discd (Discord)

DISCORD_BOT_TOKEN

Bot token. Required unless DISCORD_USER_TOKEN is set instead.

Read bydiscd / discd/main.go:52
Typestring
Default"" (refuses to start if both bot/user tokens empty)
ExampleMTAxNTM4...

DISCORD_USER_TOKEN

User-account token; selects user-mode operation, bypassing bot intents. Mutually exclusive with the bot token.

Read bydiscd / discd/main.go:53
Typestring
Default""
Examplemfa.xxxxx

whapd (WhatsApp)

WHATSAPP_AUTH_DIR

Directory where Baileys multi-file auth state (creds, keys) is persisted.

Read bywhapd / whapd/src/main.ts:44
Typepath
Default$DATA_DIR/store/whatsapp-auth or /srv/data/store/whatsapp-auth
Example/srv/data/arizuko_krons/store/whatsapp-auth

whapd also reads ASSISTANT_NAME, DATA_DIR, ROUTER_URL, CHANNEL_SECRET, LISTEN_ADDR, LISTEN_URL.

mastd (Mastodon)

MASTODON_ACCESS_TOKEN

App access token for the configured Mastodon instance.

Read bymastd / mastd/main.go:54 (MustEnv)
Typestring
Defaultrequired
ExampleabcDEF...

MASTODON_FILE_CACHE_SIZE

LRU size of cached attachment IDs (prevents reprocessing).

Read bymastd / mastd/main.go:65
Typeint
Default1000
Example5000

MASTODON_INSTANCE_URL

Base URL of the Mastodon instance the adapter streams from.

Read bymastd / mastd/main.go:53 (MustEnv)
TypeURL
Defaultrequired
Examplehttps://mastodon.social

bskyd (Bluesky)

BLUESKY_IDENTIFIER

AT Protocol handle or DID the adapter logs in as.

Read bybskyd / bskyd/main.go:53 (MustEnv)
Typestring
Defaultrequired
Examplearizuko.bsky.social

BLUESKY_PASSWORD

App password for the Bluesky account.

Read bybskyd / bskyd/main.go:54 (MustEnv)
Typestring
Defaultrequired
Examplexxxx-xxxx-xxxx-xxxx

BLUESKY_SERVICE

PDS endpoint to authenticate against.

Read bybskyd / bskyd/main.go:55
TypeURL
Defaulthttps://bsky.social
Examplehttps://bsky.social

reditd (Reddit)

REDDIT_CLIENT_ID

OAuth client id of the registered Reddit app.

Read byreditd / reditd/main.go:65 (MustEnv)
Typestring
Defaultrequired
Exampleabc123

REDDIT_CLIENT_SECRET

OAuth client secret of the registered Reddit app.

Read byreditd / reditd/main.go:66 (MustEnv)
Typestring
Defaultrequired
Examplexyz789

REDDIT_PASSWORD

Password for the bot account (script OAuth flow).

Read byreditd / reditd/main.go:68 (MustEnv)
Typestring
Defaultrequired
Examplehunter2

REDDIT_POLL_INTERVAL

How often reditd polls subreddits for new posts/comments.

Read byreditd / reditd/main.go:77
TypeGo duration string
Default5m
Example2m

REDDIT_SUBREDDITS

CSV of subreddit names to monitor.

Read byreditd / reditd/main.go:58
TypeCSV string
Default""
Exampleselfhosted,homelab

REDDIT_USER_AGENT

User-Agent string used in Reddit API calls (Reddit policy requires a descriptive UA).

Read byreditd / reditd/main.go:70
Typestring
Defaultarizuko/1.0
Examplearizuko-krons/1.0 by u/op

REDDIT_USERNAME

Username of the bot account.

Read byreditd / reditd/main.go:67 (MustEnv)
Typestring
Defaultrequired
Examplearizuko_bot

emaid (Email)

EMAIL_ACCOUNT

Email address / IMAP+SMTP login username.

Read byemaid / emaid/main.go:58 (MustEnv)
Typestring
Defaultrequired
Examplebot@example.com

EMAIL_IMAP_HOST

IMAP server hostname.

Read byemaid / emaid/main.go:56 (MustEnv)
Typestring
Defaultrequired
Exampleimap.gmail.com

EMAIL_IMAP_PORT

IMAP server port.

Read byemaid / emaid/main.go:60
Typestring (port)
Default993
Example993

EMAIL_PASSWORD

Login password / app password for IMAP+SMTP.

Read byemaid / emaid/main.go:59 (MustEnv)
Typestring
Defaultrequired
Examplexxxx xxxx xxxx xxxx

EMAIL_SMTP_HOST

SMTP server hostname.

Read byemaid / emaid/main.go:57 (MustEnv)
Typestring
Defaultrequired
Examplesmtp.gmail.com

EMAIL_SMTP_PORT

SMTP server port.

Read byemaid / emaid/main.go:61
Typestring (port)
Default587
Example587

EMAIL_STRICT_AUTH

Reject inbound mail outright when SPF/DKIM/DMARC fails (fail-closed). When unset (default), failed-auth messages still reach the agent but flagged untrusted in the envelope. Spec 8/17.

Read byemaid / emaid/auth.go:64
Typebool (truthy strings: 1, true, yes, on)
Defaultfalse
Exampletrue

EMAIL_TRUSTED_AUTHSERV

Hostname of the upstream MTA whose Authentication-Results header emaid will trust (e.g. mx.google.com for Gmail). When unset, every inbound is classified untrusted (fail-closed default per spec 8/17). Added v0.40.5.

Read byemaid / emaid/auth.go:63
Typestring (hostname, lowercased)
Defaultunset
Examplemx.google.com

EMAIL_TRUSTED_DOMAINS

Comma-separated allowlist of sender domains that count as trusted (matched against the From-address domain after DMARC alignment). Empty entries ignored. Both this and EMAIL_TRUSTED_AUTHSERV must agree for a message to be trusted. Added v0.40.5.

Read byemaid / emaid/auth.go:68
Typecomma-separated list
Defaultunset (no domain allowlist)
Exampleexample.com, partner.org

twitd (X / Twitter)

TWITTER_2FA_SECRET

TOTP shared secret used to mint 2FA codes during automated login.

Read bytwitd / twitd/src/main.ts:38
Typestring (base32 TOTP secret)
Defaultunset (login may fail when 2FA prompted)
ExampleJBSWY3DPEHPK3PXP

TWITTER_AUTH_DIR

Persistent dir for cookies + cursor state across restarts.

Read bytwitd / twitd/src/main.ts:30
Typepath
Default$DATA_DIR/store/twitter-auth or /srv/data/store/twitter-auth
Example/srv/data/arizuko_krons/store/twitter-auth

TWITTER_EMAIL

Email associated with the X account; sometimes required as a fallback identifier during login.

Read bytwitd / twitd/src/main.ts:37
Typestring
Defaultunset
Examplebot@example.com

TWITTER_PASSWORD

Password for the X account.

Read bytwitd / twitd/src/main.ts:36
Typestring
Defaultunset
Examplehunter2

TWITTER_POLL_INTERVAL

Mentions/DM poll cadence. Accepts plain seconds (90), Ns, or Nm.

Read bytwitd / twitd/src/main.ts:45
Typeseconds (int or Ns/Nm)
Default90
Example5m

TWITTER_USERNAME

Username/handle for the X account.

Read bytwitd / twitd/src/main.ts:35
Typestring
Defaultunset
Examplearizuko_bot

linkd (LinkedIn)

LINKEDIN_ACCESS_TOKEN

Pre-acquired OAuth access token; if unset, linkd runs an interactive auth flow.

Read bylinkd / linkd/main.go:62
Typestring
Default""
ExampleAQX...

LINKEDIN_API_BASE

Base URL of the LinkedIn REST API.

Read bylinkd / linkd/main.go:69
TypeURL
Defaulthttps://api.linkedin.com
Examplehttps://api.linkedin.com

LINKEDIN_AUTO_PUBLISH

Allow the agent to publish posts without explicit operator confirmation.

Read bylinkd / linkd/main.go:72
Typebool ("true")
Defaultfalse
Exampletrue

LINKEDIN_CLIENT_ID

OAuth client id of the registered LinkedIn app.

Read bylinkd / linkd/main.go:60 (MustEnv)
Typestring
Defaultrequired
Example77abcde

LINKEDIN_CLIENT_SECRET

OAuth client secret of the registered LinkedIn app.

Read bylinkd / linkd/main.go:61 (MustEnv)
Typestring
Defaultrequired
Examplexyz123

LINKEDIN_OAUTH_BASE

Base URL for the LinkedIn OAuth endpoints.

Read bylinkd / linkd/main.go:70
TypeURL
Defaulthttps://www.linkedin.com
Examplehttps://www.linkedin.com

LINKEDIN_POLL_INTERVAL

Cadence at which linkd polls for new messages.

Read bylinkd / linkd/main.go:71
TypeGo duration string
Default300s
Example60s

LINKEDIN_REFRESH_TOKEN

Refresh token used to mint new access tokens.

Read bylinkd / linkd/main.go:63
Typestring
Default""
ExampleAQR...

slakd (Slack)

SLACK_BOT_TOKEN

Slack xoxb- bot token used by the Web API and Events API client.

Read byslakd / slakd/main.go:57 (MustEnv)
Typestring
Defaultrequired
Examplexoxb-...

SLACK_SIGNING_SECRET

Shared secret Slack uses to sign incoming event webhooks; slakd verifies X-Slack-Signature against it.

Read byslakd / slakd/main.go:58 (MustEnv)
Typestring
Defaultrequired
Example8f742231...

SLAKD_CHANNEL_SECRET

Adapter-side override for CHANNEL_SECRET: slakd sends this value instead of CHANNEL_SECRET when registering with gated. Note: gated currently verifies all registration requests against the single shared CHANNEL_SECRET, so this must equal CHANNEL_SECRET in production. Per-adapter gateway verification is not yet implemented.

Read byslakd / slakd/main.go:60
Typestring
Defaultfalls back to CHANNEL_SECRET
Exampleslk-...

SLAKD_USERS_CACHE_TTL

TTL (seconds) of the Slack user-info cache; lower values cost more API quota.

Read byslakd / slakd/main.go:64
Typeint (seconds)
Default900 (15 min)
Example3600

TELED_CHANNEL_SECRET

Per-adapter override for CHANNEL_SECRET used by teled when registering with gated. See specs/6/H.

Read byteled / teled/main.go
Typestring
Defaultfalls back to CHANNEL_SECRET
Exampletg-...

DISCD_CHANNEL_SECRET

Per-adapter override for CHANNEL_SECRET used by discd. See specs/6/H.

Read bydiscd / discd/main.go
Typestring
Defaultfalls back to CHANNEL_SECRET
Exampledc-...

EMAID_CHANNEL_SECRET

Per-adapter override for CHANNEL_SECRET used by emaid. See specs/6/H.

Read byemaid / emaid/main.go
Typestring
Defaultfalls back to CHANNEL_SECRET
Exampleem-...

MASTD_CHANNEL_SECRET

Per-adapter override for CHANNEL_SECRET used by mastd. See specs/6/H.

Read bymastd / mastd/main.go
Typestring
Defaultfalls back to CHANNEL_SECRET
Examplema-...

BSKYD_CHANNEL_SECRET

Per-adapter override for CHANNEL_SECRET used by bskyd. See specs/6/H.

Read bybskyd / bskyd/main.go
Typestring
Defaultfalls back to CHANNEL_SECRET
Examplebs-...

REDITD_CHANNEL_SECRET

Per-adapter override for CHANNEL_SECRET used by reditd. See specs/6/H.

Read byreditd / reditd/main.go
Typestring
Defaultfalls back to CHANNEL_SECRET
Examplerd-...

LINKD_CHANNEL_SECRET

Per-adapter override for CHANNEL_SECRET used by linkd. See specs/6/H.

Read bylinkd / linkd/main.go
Typestring
Defaultfalls back to CHANNEL_SECRET
Exampleli-...

WHAPD_CHANNEL_SECRET

Per-adapter override for CHANNEL_SECRET used by whapd. See specs/6/H.

Read bywhapd / whapd/src/main.ts
Typestring
Defaultfalls back to CHANNEL_SECRET
Examplewa-...

TWITD_CHANNEL_SECRET

Per-adapter override for CHANNEL_SECRET used by twitd. See specs/6/H.

Read bytwitd / twitd/src/main.ts
Typestring
Defaultfalls back to CHANNEL_SECRET
Exampletw-...

Not documented here