# ─── General ───────────────────────────────────────────────────────────────── PORT=3000 # Network interface to bind. # 127.0.0.1 = loopback only. Hivekeep is reachable from THIS machine only # (good behind a reverse proxy on the same host). # 0.0.0.0 = all interfaces. Needed to reach Hivekeep from other devices on # your network (phone, laptop). The installer and Docker use this. # If the app starts but you can't open it from another device, switch to 0.0.0.0. HOST=127.0.0.1 NODE_ENV=production # Public-facing URL (used for webhooks, invitation links, etc.) PUBLIC_URL=http://localhost:3000 # Directory for all persistent data (SQLite DB, uploads, workspaces, etc.) # HIVEKEEP_DATA_DIR=./data # Encryption key for vault secrets (AES-256-GCM, 64 hex chars). # Auto-generated and persisted in $HIVEKEEP_DATA_DIR/.encryption-key on first run. # ENCRYPTION_KEY= # Secret for Better Auth session signing. Defaults to ENCRYPTION_KEY if not set. # BETTER_AUTH_SECRET= # Log level: debug | info | warn | error # LOG_LEVEL=info # IANA timezone used to interpret cron schedules (e.g. "Europe/Paris", "America/New_York"). # Falls back to TZ env var, then to the system-resolved timezone, then to UTC. # HIVEKEEP_TIMEZONE=Europe/Paris # ─── Database ───────────────────────────────────────────────────────────────── # Defaults to $HIVEKEEP_DATA_DIR/hivekeep.db # DB_PATH=./data/hivekeep.db # ─── Compacting ─────────────────────────────────────────────────────────────── # Summarizes old messages to stay within token limits. # COMPACTING_MODEL= # Uses Agent's model if not set # COMPACTING_THRESHOLD_PERCENT=75 # Trigger compacting at this fraction of context # COMPACTING_KEEP_PERCENT=25 # Trim down to this fraction after compacting # COMPACTING_SUMMARY_BUDGET_PERCENT=20 # Max share of context the summary can take # COMPACTING_MAX_SUMMARIES=10 # Global summary count ceiling # COMPACTING_MAX_SUMMARIES_PER_KIN=50 # Per-Agent summary count ceiling # ─── Memory (long-term) ─────────────────────────────────────────────────────── # MEMORY_EXTRACTION_MODEL= # Uses Agent's model if not set # MEMORY_MAX_RELEVANT=10 # MEMORY_SIMILARITY_THRESHOLD=0.7 # MEMORY_EMBEDDING_MODEL=text-embedding-3-small # MEMORY_EMBEDDING_DIMENSION=768 # Default: 768. Matryoshka-safe dims: 256, 512, 768, 1536. Lower = less storage, similar quality. # ─── Queue ──────────────────────────────────────────────────────────────────── # QUEUE_POLL_INTERVAL=500 # ms # ─── Tasks (Sub-Agents) ───────────────────────────────────────────────────────── # TASKS_MAX_DEPTH=3 # TASKS_MAX_REQUEST_INPUT=3 # TASKS_MAX_CONCURRENT=10 # ─── Crons ──────────────────────────────────────────────────────────────────── # CRONS_MAX_ACTIVE=50 # CRONS_MAX_CONCURRENT_EXEC=5 # ─── Inter-Agent communication ────────────────────────────────────────────────── # INTER_KIN_MAX_CHAIN_DEPTH=5 # INTER_KIN_RATE_LIMIT=20 # messages per minute # ─── Tools ──────────────────────────────────────────────────────────────────── # TOOLS_MAX_STEPS=10 # Temperature on tool-enabled turns (default 0; steadies tool-call JSON on small # local models). Reasoning models are exempted automatically. Set to "off" to # defer to the backend default. # TOOLS_TEMPERATURE=0 # ─── Human prompts ──────────────────────────────────────────────────────────── # HUMAN_PROMPTS_MAX_PENDING=5 # ─── MCP ────────────────────────────────────────────────────────────────────── # MCP_REQUIRE_APPROVAL=true # ─── Workspace ──────────────────────────────────────────────────────────────── # WORKSPACE_BASE_DIR=./data/workspaces # ─── File uploads ───────────────────────────────────────────────────────────── # UPLOAD_DIR=./data/uploads # UPLOAD_MAX_FILE_SIZE=50 # MB # ─── File storage ───────────────────────────────────────────────────────────── # FILE_STORAGE_DIR=./data/storage # FILE_STORAGE_MAX_SIZE=100 # MB # FILE_STORAGE_CLEANUP_INTERVAL=60 # minutes # ─── Webhooks ───────────────────────────────────────────────────────────────── # WEBHOOKS_MAX_PER_KIN=20 # WEBHOOKS_MAX_PAYLOAD_BYTES=1048576 # ─── Channels ───────────────────────────────────────────────────────────────── # CHANNELS_MAX_PER_KIN=5 # ─── Quick sessions ─────────────────────────────────────────────────────────── # QUICK_SESSION_EXPIRATION_HOURS=24 # QUICK_SESSION_MAX_PER_USER_KIN=1 # QUICK_SESSION_RETENTION_DAYS=7 # QUICK_SESSION_CLEANUP_INTERVAL=60 # ─── Web browsing (Tier 1: lightweight fetch) ───────────────────────────────── # WEB_BROWSING_PAGE_TIMEOUT=30000 # WEB_BROWSING_MAX_CONTENT_LENGTH=100000 # WEB_BROWSING_MAX_CONCURRENT=5 # WEB_BROWSING_USER_AGENT= # WEB_BROWSING_BLOCKED_DOMAINS= # comma-separated # WEB_BROWSING_PROXY= # e.g. http://proxy:8080 # ─── Web browsing (Tier 2: headless Puppeteer) ──────────────────────────────── # WEB_BROWSING_HEADLESS_ENABLED=false # PUPPETEER_EXECUTABLE_PATH= # path to Chrome/Chromium binary # WEB_BROWSING_MAX_BROWSERS=2 # WEB_BROWSING_BROWSER_IDLE_TIMEOUT=60000 # ─── Invitations ────────────────────────────────────────────────────────────── # INVITATION_DEFAULT_EXPIRY_DAYS=7 # INVITATION_MAX_ACTIVE=50 # ─── Notifications ──────────────────────────────────────────────────────────── # NOTIFICATIONS_RETENTION_DAYS=30 # NOTIFICATIONS_MAX_PER_USER=500 # NOTIFICATIONS_EXT_MAX_PER_USER=5 # NOTIFICATIONS_EXT_RATE_LIMIT=5 # NOTIFICATIONS_EXT_MAX_ERRORS=5