Something went wrong. Try again.
Self-hosted remote command runner with an optional personal-assistant layer
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114# ---- Ogma gateway config ---- (copy to .env, then `chmod 600 .env`)
# REQUIRED: from @BotFather in Telegram (/newbot)TELEGRAM_BOT_TOKEN=
# REQUIRED: comma-separated Telegram chat IDs allowed to use the bot.# Leave empty on first run, message the bot, and it will reply with your chat ID.TELEGRAM_ALLOWED_USERS=
# OPTIONAL: comma-separated chat IDs with GUEST (read-only) access: only /status,# /health and host-local commands marked "guest": true — no LLM, nothing else.# TELEGRAM_GUEST_USERS=
# OPTIONAL: seconds a /confirm-protected command stays armed (default 180, min 30).# OGMA_CONFIRM_TTL=180
# --- optional: chat transport ---# telegram (default) or matrix. The matrix backend talks plain HTTPS to your own# homeserver (self-hosted, ideally federation-off) — no third party sees the# channel. Note: no E2EE (that would need native deps); trust = your server.# Put the bot credentials in config/matrix_bot.env.local (gitignored) or here:# MATRIX_HOMESERVER=https://matrix.example.org# MATRIX_USER_ID=@ogma:matrix.example.org# MATRIX_ACCESS_TOKEN=...# MATRIX_ALLOWED_USERS=@you:matrix.example.org (admins; replaces TELEGRAM_*)# MATRIX_GUEST_USERS= (read-only subset)# MATRIX_NOTIFY_ROOM=!roomid:matrix.example.org (where bin/notify posts# scheduled alerts; the bot must be a member of the room)# The bot auto-joins room invites, but only from allowed/guest users.# OGMA_TRANSPORT=telegram
# --- optional: the LLM (assistant) layer ---# claude = free-text chat is handled by Claude Code (default; needs the claude CLI).# codex = free-text chat is handled by OpenAI Codex CLI (needs `codex login`).# off = command-only mode: the bot runs its predefined commands only, no LLM at all.# When set to claude but the claude binary is missing, the gateway falls back to# command-only mode instead of refusing to start.# OGMA_LLM=claude
# --- optional: paths / runtime ---# Path to the claude CLI (default: ~/.local/bin/claude)# CLAUDE_BIN=/home/youruser/.local/bin/claude# CODEX_BIN=/home/youruser/.local/bin/codex
# Working directory Claude runs in (holds its CLAUDE.md persona)# OGMA_WORKDIR=/home/youruser/ogma/workspace
# Per-message timeout in seconds (default 300)# CLAUDE_TIMEOUT=300# CODEX_TIMEOUT=300
# Max concurrent Claude runs across all chats (default 1). Keep at 1 on small boxes# (a Pi can OOM if several run at once); raise only on a roomy host.# OGMA_MAX_CONCURRENT=1
# --- optional: permissions / model ---# Permission posture for tools. Empty = safest (tools needing approval are skipped).# Set to "acceptEdits" to let it edit files, or use OGMA_ALLOWED_TOOLS for a curated set.# OGMA_PERMISSION_MODE=
# Space-separated allowed tools, e.g. "Read WebSearch WebFetch Glob Grep"# To let the bot manage itself, add the ogmactl path rule (use YOUR absolute path):# OGMA_ALLOWED_TOOLS=Read WebSearch WebFetch Glob Grep Bash(/home/youruser/ogma/bin/ogmactl:*)# OGMA_ALLOWED_TOOLS=
# Codex tool sandbox: read-only (recommended for messenger), workspace-write, or# danger-full-access. This does not affect the deterministic messenger command path.# OGMA_CODEX_SANDBOX=read-only
# Shared durable memory used by both harnesses. bin/setup creates and sets this,# preserving an existing location across harness switches. Fresh Codex-only installs# default to the provider-neutral path below; Claude installs retain their native# ~/.claude/projects/... memory location unless configured otherwise.# OGMA_MEMORY_DIR=/home/youruser/.local/share/ogma/memory
# Override model for the gateway (default = your Claude Code default)# OGMA_MODEL=sonnet
# Fallback model used automatically if the main model is unavailable (rate limit/outage).# Alias or full id; blank = none. Changeable live from chat via /fallback.# OGMA_FALLBACK_MODEL=
# Reasoning effort for the gateway: low | medium | high | xhigh | max (blank = CLI default)# Higher = more thorough but slower/pricier. Changeable live from chat via /effort.# OGMA_EFFORT=
# Model for the nightly dream/memory-consolidation job. Setup keeps this aligned# with OGMA_LLM and OGMA_MODEL when installing or switching harnesses. Claude's# default is the explicit standard-context id (avoiding the credit-gated 1M alias);# Codex follows OGMA_MODEL / the CLI default when blank.# OGMA_DREAM_MODEL=claude-sonnet-4-6# Legacy Codex-only override (prefer OGMA_DREAM_MODEL).# OGMA_CODEX_DREAM_MODEL=
# --- optional: briefing / news ---# Who the morning briefing is addressed to (default: "you")# OGMA_OWNER_NAME=
# wttr.in weather location, e.g. "Vienna" or "Berlin" (default: empty = geolocate by IP)# OGMA_WEATHER_LOC=
# --- optional: persona overrides ---# Rendered by bin/setup into the gitignored workspace/CLAUDE.local.md overlay (also# settable live with: bin/ogmactl set-persona <field> <value>). All blank = Ogma's defaults.# Bot name — replaces "Ogma" in the persona, e.g. "Aria" or "Max".# OGMA_PERSONA_NAME=# Conversation style/tone override, free text, e.g. "terse and dry" or "more formal".# OGMA_PERSONA_STYLE=# Default language — reply in this even when written to in another, e.g. "German".# OGMA_PERSONA_LANG=
# RSS feeds for news-fetch: comma-separated Label|url pairs.# OGMA_RSS_FEEDS=BBC World|http://feeds.bbci.co.uk/news/world/rss.xml,Guardian World|https://www.theguardian.com/world/rss