# OpenAI-compatible AI provider (required) OPENAI_BASE_URL=https://api.openai.com/v1 OPENAI_API_KEY=sk-... AI_MODEL=google/gemma-4-26b-a4b-it # Tool-loop step limit per Processing Cycle (optional, default 50) AI_MAX_STEPS=50 # Reasoning-effort hint forwarded to the AI provider for models that support it # (optional). Opaque string passed through unchanged to provider options; empty # string is treated as unset. # AI_REASONING_EFFORT= # Todoist Board (required) TODOIST_API_TOKEN= TODOIST_PROJECT_ID= # HTTP server (optional, default 3000) PORT=3000 # Heartbeat authentication (optional, default off) # When set, POST /heartbeat requires an `Authorization: Bearer ` header # matching this value; unauthenticated requests are rejected with 401. # Leave empty or unset to keep /heartbeat open (backward-compatible). # SHRIMP_HEARTBEAT_TOKEN= # Override URL used by the bundled heartbeat trigger (optional). # Used by `node dist/heartbeat.mjs` (production) and `pnpm heartbeat` (local). # Defaults to http://localhost:${PORT}/heartbeat; set when triggering from another host. # SHRIMP_HEARTBEAT_URL= # Log level (optional, default info; valid: trace, debug, info, warn, error, fatal, silent) LOG_LEVEL=info # Telemetry (optional, default off) # Set TELEMETRY_ENABLED=true to emit OTel traces for each Processing Cycle. # When enabled, OTEL_SERVICE_NAME and OTEL_EXPORTER_OTLP_ENDPOINT are required. TELEMETRY_ENABLED=false OTEL_SERVICE_NAME=shrimp OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318/v1/traces # OTEL_EXPORTER_OTLP_HEADERS=Authorization=Bearer token,X-Custom=value # TELEMETRY_RECORD_INPUTS=true # TELEMETRY_RECORD_OUTPUTS=true # OTel internal diagnostics (forwarded through pino). Default WARN; set to # DEBUG when investigating why spans are not reaching the collector. # OTEL_LOG_LEVEL=warn # Resource attributes merged into OTEL_RESOURCE_ATTRIBUTES at startup. # When unset, `deployment.environment` defaults to SHRIMP_ENV || NODE_ENV # || "development". User-supplied values always take precedence. # SHRIMP_ENV=development # OTEL_RESOURCE_ATTRIBUTES=service.version=1.2.3 # Channels (optional, default off) # Set CHANNELS_ENABLED=true to mount inbound Channel webhooks (e.g. Telegram) # and to enable Session-backed ChannelJob processing. When enabled, # TELEGRAM_BOT_TOKEN and TELEGRAM_WEBHOOK_SECRET are required; when disabled, # they are neither read nor validated. CHANNELS_ENABLED=false TELEGRAM_BOT_TOKEN= TELEGRAM_WEBHOOK_SECRET= # Shrimp's operator-facing home directory. Holds Session state # (state.json + sessions/.jsonl) when Channels are enabled, and the # optional User Agents Appendix (AGENTS.md) which is read on every Job. # Optional; defaults to ~/.shrimp. Created at startup when Channels are enabled; # process fails fast if creation fails. # In the Docker image this is pre-set to /var/lib/shrimp (declared as a VOLUME). # SHRIMP_HOME= # Deprecated: SHRIMP_STATE_DIR is still honored as a fallback when # SHRIMP_HOME is unset, but emits a warning on stderr at startup and will be # removed in a future release. Prefer SHRIMP_HOME. # Auto Compact — token threshold that triggers session summarization. Defaults # to 100000 when unset; raise for 200k-context models, lower for shorter # contexts. Not read when Channels are disabled. # AUTO_COMPACT_TOKEN_THRESHOLD=100000 # Model used by SummarizePort for Auto Compact summarization only (optional). # Overrides AI_MODEL for summarization calls; does not need tool-calling support. # Falls back to AI_MODEL when unset. Not read when Channels are disabled. # AUTO_COMPACT_MODEL= # Upper bound on SummarizePort output size (positive integer). Defaults to # 2048 when unset. Raise if summaries look truncated; lower to be more # aggressive. Not read when Channels are disabled. # AUTO_COMPACT_MAX_OUTPUT_TOKENS=2048 # Docker Compose only: host path mounted into the container at /var/lib/shrimp # for persistent Session state. Defaults to ./data/shrimp; override to relocate # outside the repo (e.g. /var/lib/shrimp on a server). # NOTE: the container runs as UID 1000 (node) — the host directory must be # owned by UID 1000 before first start. See README "Run with Docker". # SHRIMP_DATA_DIR=./data/shrimp