Configuration reference

Use mama init to create a configuration, then change non-secret settings in ~/.mama/config.yaml and ~/.mama/connectors.json. Rotate credentials with mama secret set <NAME> in a terminal. Restart the daemon to apply config edits. The owner can change timezone live in chat with owner.timezone.set; development-memory settings are separate.

config.yaml

The runtime requires version, agent, database and logging. Unknown keys are logged as ignored in W1; they do not configure features. A telegram.token key is an error, even if empty. Move that value using mama secret set MAMA_TELEGRAM_TOKEN, then remove the YAML key. telegram.owner_user_ids is also rejected: remove it and run mama register-owner <telegram id> for each owner with the daemon stopped.

telegram.owner_chat_id must be a negative group or supergroup ID, also listed in telegram.allowed_chats. A solo owner creates a group with the bot for common changes. Positive private chat IDs are rejected because every private chat enters its person’s intake and cannot reach the common session.

Key Meaning and default
version Required; must be 1.
timezone IANA time zone for reports, schedules and displayed times; defaults to the machine’s time zone. Owner changes through owner.timezone.set apply without restart.
member_root Optional absolute directory for team members’ homes: each member’s workspace, downloads and backend homes. It must not overlap HOME, the MAMA home or owner data paths. Required before registering owner people or serving members; active members are admitted in their own Telegram DMs.
tools_root Absolute directory outside HOME for the document toolkit every session uses; it must not overlap member_root in either direction. On macOS mama tools install defaults it to the Shared folder beside the home folders and adds this key.
agent.backend Required; claude or codex.
agent.model Required, nonblank backend model identifier.
agent.effort low, medium, high, max, or xhigh; default medium. Backend support determines the useful values.
agent.max_turns Required positive integer. init writes 100.
agent.timeout Required. How long a turn may go without progress, in milliseconds. Any output from the runtime restarts it (a tool call, its result, a message), so only a single step longer than this stops a working turn. init writes 600000.
agent.max_turn_ms The longest one turn may run in all, in milliseconds; default 3600000. It always applies, and it is the only stop for a turn that keeps working while agent.run_token_budget is 0.
agent.run_token_budget Nonnegative integer; default 0 (no budget limit).
agent.codex_home Optional managed Codex home override; normally ~/.mama/.codex.
agent.codex_cwd Optional owner workspace override used by the daemon for both backends; normally ~/.mama/workspace. Keep the workspace inside the MAMA data home, outside downloads and connectors; boot refuses an overlap.
agent.codex_sandbox The parser accepts read-only, workspace-write, and danger-full-access; the owner Codex session requires workspace-write and rejects the other values.
agent.autonomous_web_fetch Hosts that turns with no person in them (source changes, record orders, reports, notices, personal jobs) may open with web fetch; a host covers its subdomains, and "*" allows every host. Default: none. Web search stays available in every turn, and turns where a person speaks keep web fetch. Claude backend only; Codex has web search only.
agent.tools.mcp_config Optional path to the Claude owner action MCP configuration; normally ~/.mama/runtime/mama-mcp-config.json. The daemon generates its MAMA entry.
database.path Required database path. init writes ~/.mama/memory.db.
logging.level Required; debug, info, warn, or error.
logging.file Required log path. init writes ~/.mama/logs/daemon.log.
telegram.enabled Boolean; default false.
telegram.owner_chat_id Negative group or supergroup ID for the common session; required when Telegram is enabled and must also be in allowed_chats. Private chat IDs are rejected.
telegram.allowed_chats Array of common group chat IDs; default empty. Active owner-role members are admitted there; personal DMs use the registry.
telegram.polling Boolean; default true. false disables inbound polling by this instance.
discord.enabled / slack.enabled Start the Discord or Slack owner gateway. Each enabled gateway requires an owner channel listed in allowed_channels and at least one owner_user_ids entry.
discord.owner_channel_id / slack.owner_channel_id Channel used for reports, notifications, security alerts, and file delivery when that messenger is selected. It must be allowlisted.
discord.allowed_channels / slack.allowed_channels Channel IDs from which owner-authored messages may enter the owner session and to which configured delivery may go.
discord.owner_user_ids / slack.owner_user_ids User IDs accepted as the owner in allowed channels. Other senders are dropped and logged with hashed IDs.
delivery.reports Messenger for scheduled reports; one of telegram, discord, or slack. Default telegram. The selected gateway must be enabled and configured.
delivery.notifications Messenger for [notify] results; one of telegram, discord, or slack. Default telegram.
delivery.security_alerts Messenger for viewer security alerts; one of telegram, discord, or slack. Default telegram.
delivery.interrupted_notice What the owner is told when a turn on their message was cut off (a timeout or a restart). The turn is not run again; the owner can resend the request. Default: an English notice.
jev.enabled Lets the owner agent call judge (Jev) to narrow many candidates; default false. Owner text in a judge call goes to the Jev service. Everything works without it.
jev.keyFile Jev key file for replay and, when enabled, judge; default ~/.mama/jev-key.
jev.vocabFile Replay vocabulary file; default ~/.mama/backfill/vocab.json.
wiki.enabled Boolean; default false when the wiki block is present.
wiki.vaultPath Required when wiki is enabled; vault root.
wiki.wikiDir Required when wiki is enabled; wiki directory within the vault, or an absolute path.
reports.full_report_hours Array of hours 0–23 in the configured owner time zone; default [8, 13, 18]. An empty array schedules no full reports.
reports.reminder_start_hour Hour 0–23 in the configured owner time zone; default 9.
reports.reminder_end_hour Hour 0–23 in the configured owner time zone; default 21; must be at least the start hour.
reports.daily_hour Hour 0–23 in the configured owner time zone; default 23. With the wiki enabled, the agent writes that day’s page daily/YYYY-MM-DD.md at this hour; messages later that day are not in it. 0 writes the day that just ended. A report due in the same hour goes first, and a day missed while the daemon was down is written after midnight.

Report hours use the timezone setting. File paths accept ~ and ${HOME}. Most relative paths resolve against the user’s home; a relative wiki.wikiDir stays relative to its vault. See backends and reports for behavior.

connectors.json

The file is an object keyed by connector name: chatwork, slack, trello, kagemusha, calendar, gmail, drive, sheets, notion, obsidian, discord, telegram, imessage, or claude-code. Names are normalized to lowercase; case collisions fail validation. Unknown connector names and unknown fields are logged as ignored. A missing file means no configured connectors.

Field within each connector Required content
enabled Boolean.
pollIntervalMinutes Finite number greater than zero. init writes 5.
channels Object keyed by source ID. Each entry needs role; supported additional fields are listed below.
channels.<id>.role truth, hub, deliverable, spoke, reference, or ignore.
channels.<id>.name Optional display name. Claude Code requires a unique display alias for each selected project directory.
channels.<id>.boardId Trello board ID.
channels.<id>.folderId Drive folder ID.
channels.<id>.driveId Drive shared-drive ID.
channels.<id>.spreadsheetId Google Sheets spreadsheet ID.
channels.<id>.sheetRange Google Sheets range including the header row, unless dataRange is set.
channels.<id>.dataRange Optional Google Sheets data range when headers and rows use separate ranges.
channels.<id>.vaultPath Obsidian vault path. Each configured channel maps one vault to a channel ID.
auth.type token, cli, or none.
auth.tokenName Environment variable name, never its token value; required for Notion, Discord and Telegram source.
auth.cli, auth.cliAuthCommand Optional CLI authentication metadata; Google connectors use gws and gws auth login.

init uses MAMA_CHATWORK_TOKEN, MAMA_SLACK_TOKEN, MAMA_TRELLO_KEY, MAMA_TRELLO_TOKEN, MAMA_NOTION_TOKEN, MAMA_DISCORD_TOKEN, and MAMA_TELEGRAM_SOURCE_TOKEN as connector secret names. The owner Telegram messenger uses the separate MAMA_TELEGRAM_TOKEN. Gmail, Drive, Sheets, and Calendar use a logged-in gws CLI; Kagemusha uses the read-only local bridge. Claude Code channel keys are selected project directory names and their name values are display aliases. See connectors for per-source setup and channel roles.

Environment and credentials

The generated start.sh exports auth.env for the daemon. That file has mode 0600; the owner agent cannot read it. The daemon removes secret-shaped environment names before launching either owner backend. Pass non-secret service settings through the startup environment.

Variable Purpose
MAMA_TELEGRAM_TOKEN Telegram bot credential.
MAMA_TELEGRAM_SOURCE_TOKEN Separate bot credential used by the Telegram source connector.
MAMA_CHATWORK_TOKEN, MAMA_SLACK_TOKEN Connector credentials used by generated connector configuration.
MAMA_DISCORD_TOKEN, MAMA_NOTION_TOKEN Discord and Notion connector credentials.
MAMA_TRELLO_KEY, MAMA_TRELLO_TOKEN Separate Trello API key and token.
MAMA_AUTH_TOKEN Viewer API bearer credential.
MAMA_CF_ACCESS_ISSUER, MAMA_CF_ACCESS_AUD Expected Cloudflare Access issuer and audience for JWT verification. Both must be configured.
MAMA_VIEWER_HOSTNAMES Comma-separated extra allowed Host names; loopback hosts are already allowed.
MAMA_VIEWER_OWNER_EMAILS Comma-separated verified emails expected in access monitoring. This flags unfamiliar identities; it does not grant or deny access.
MAMA_API_HOST Viewer bind address; default 127.0.0.1.
MAMA_API_PORT Viewer port; default 3847, accepted range 1024–65535.
MAMA_VIEWER_DIR Optional viewer static-asset directory.
MAMA_PID_FILE Optional daemon PID-record location.

Sources: runtime parser, daemon wiring, connector parser, initial setup, backend boundary, viewer API.


MIT License © 2024-2026 SpineLift Team

This site uses Just the Docs, a documentation theme for Jekyll.