Environment variables

Mandala reads its configuration from the environment, usually the file named by EnvironmentFile= in its systemd unit (~/.mandala/mandala.env). Empty values count as unset. Restart after a change.

Core

VariableDefaultMeaning
ALMA_DATA_DIR~/.almaThe data directory. Set it (usually ~/.mandala).
ALMA_LISTEN127.0.0.1:8787Address and port of the Workspace and API
ALMA_WEB_ROOTthe bundled build, if presentDirectory of the built web app
ALMA_LOGinfoLog filter (debug, info,alma_dharma=debug)
ALMA_TIMEZONEAsia/ManilaYour time zone (IANA name); routines run in it

Who you are

VariableDefaultMeaning
ALMA_OWNER_NAMEunsetYour first name, for a node configured without the first-run assistant
MANDALA_PRINCIPALjulienYour internal handle
MANDALA_TENANTjulienThe tenant your records live in
ALMA_AGENT_IDalmaYour accomplice's agent id

Leave ALMA_OWNER_NAME and MANDALA_PRINCIPAL unset on a new home: the first-run assistant then asks your first name. Setting either marks the node as set up by environment (no assistant, no sign-in until you add a passkey). Never change the handles once records exist.

Accounts

VariableDefaultMeaning
MANDALA_LOGINthe account's choicerequired or off forces sign-in on or off
MANDALA_RP_IDyour tailnet name, or the hostThe site name passkeys are bound to. Keep it stable.
MANDALA_DEVICE_NAMEthe host nameThis device's name when joining
MANDALA_PAIR_LOOKUPSonoff disables finding the other device through the DHT when joining by code

Vaults and tasks

VariableDefaultMeaning
ALMA_GOETHE_JULIEN_ROOTunsetYour own vault's directory (the name is historical; it is yours)
ALMA_GOETHE_AGENT_ROOTSunsetJSON: agent id → its private vault, {"alma":"/path"}
ALMA_TASK_DOCUMENTdocs/agenda.mdWhere new tasks go in your vault

Routines

VariableDefaultMeaning
ALMA_MORNING_TIME07:30Morning briefing, local HH:MM, or off
ALMA_DIARY_TIME23:30Nightly diary, or off

Contracts

VariableDefaultMeaning
MANDALA_CONTRACTSunsetExtra contract files or directories, separated by :

Contracts installed from the Workbench (<data>/contracts) load automatically.

Keys (copied into the encrypted store at each start)

ALMA_OPENAI_API_KEY, ALMA_ANTHROPIC_API_KEY, ALMA_GEMINI_API_KEY, ALMA_XAI_API_KEY, ALMA_DEEPSEEK_API_KEY, ALMA_KIMI_API_KEY, ALMA_ZAI_API_KEY, ALMA_META_API_KEY, ALMA_BRAVE_API_KEY, ALMA_WAVESPEED_API_KEY, ALMA_TYPESAFE_API_KEY.

Services

VariableDefaultMeaning
ALMA_OLLAMA_BASE_URLhttp://127.0.0.1:11434/v1Ollama's address
ALMA_INWORLD_BASE_URLhttps://api.inworld.aiInworld's address
MANDALA_WEBHOOK_LISTEN127.0.0.1:8788The webhook listener (only /hooks/*)
ALMA_CLOUDFLARED_PATH/usr/bin/cloudflaredThe Cloudflare tunnel connector
ALMA_TDLIB_LIBRARY/opt/alma/telegram/lib/libtdjson.so (.dylib on macOS)TDLib for Telegram

Updates

VariableMeaning
MANDALA_UPDATE_PUBLIC_KEYThe release key's public half; only releases it signed are installed
MANDALA_UPDATE_URLThe release channel, if not the home's own

Device mesh

VariableDefaultMeaning
MANDALA_IROH_RELAYunset (no relay)URL of your own iroh relay
MANDALA_MDNSon once another device is trusted1 or 0 forces local discovery

Mac app

VariableMeaning
MANDALA_HOME_URLThe home the app's window shows by default