zeph 0.20.2

Lightweight AI agent with hybrid inference, skills-first architecture, and multi-channel I/O
services:
  qdrant:
    image: qdrant/qdrant:v1.17.1@sha256:94728574965d17c6485dd361aa3c0818b325b9016dac5ea6afec7b4b2700865f
    ports:
      - "6333:6333"
      - "6334:6334"
    volumes:
      - qdrant_data:/qdrant/storage
    environment:
      - QDRANT__LOG_LEVEL=DEBUG

  zeph:
    build:
      context: ..
      dockerfile: docker/Dockerfile.dev
      args:
        CARGO_FEATURES: ${CARGO_FEATURES:-}
    depends_on:
      - qdrant
    environment:
      RUST_LOG: "zeph=debug,zeph_core=debug,zeph_llm=debug,zeph_channels=trace,zeph_memory=debug,zeph_tools=debug"
      RUST_BACKTRACE: "1"
      ZEPH_LLM_PROVIDER: ${ZEPH_LLM_PROVIDER:-ollama}
      ZEPH_LLM_BASE_URL: ${ZEPH_LLM_BASE_URL:-http://host.docker.internal:11434}
      ZEPH_LLM_MODEL: ${ZEPH_LLM_MODEL:-mistral:7b}
      ZEPH_LLM_EMBEDDING_MODEL: ${ZEPH_LLM_EMBEDDING_MODEL:-qwen3-embedding}
      ZEPH_CLAUDE_API_KEY: ${ZEPH_CLAUDE_API_KEY:-}
      ZEPH_TELEGRAM_TOKEN: ${ZEPH_TELEGRAM_TOKEN:-}
      ZEPH_SQLITE_PATH: /app/.zeph/data/zeph.db
      ZEPH_DATABASE_URL: ${ZEPH_DATABASE_URL:-}
      ZEPH_QDRANT_URL: http://qdrant:6334
      ZEPH_MEMORY_SEMANTIC_ENABLED: ${ZEPH_MEMORY_SEMANTIC_ENABLED:-true}
      ZEPH_MEMORY_RECALL_LIMIT: ${ZEPH_MEMORY_RECALL_LIMIT:-5}
      ZEPH_A2A_ENABLED: ${ZEPH_A2A_ENABLED:-false}
      ZEPH_A2A_HOST: ${ZEPH_A2A_HOST:-0.0.0.0}
      ZEPH_A2A_PORT: ${ZEPH_A2A_PORT:-8080}
      ZEPH_A2A_PUBLIC_URL: ${ZEPH_A2A_PUBLIC_URL:-}
      ZEPH_A2A_AUTH_TOKEN: ${ZEPH_A2A_AUTH_TOKEN:-}
      ZEPH_A2A_RATE_LIMIT: ${ZEPH_A2A_RATE_LIMIT:-60}
      ZEPH_A2A_REQUIRE_TLS: ${ZEPH_A2A_REQUIRE_TLS:-false}
      ZEPH_A2A_SSRF_PROTECTION: ${ZEPH_A2A_SSRF_PROTECTION:-true}
      ZEPH_SECURITY_REDACT_SECRETS: ${ZEPH_SECURITY_REDACT_SECRETS:-true}
      ZEPH_TOOLS_AUDIT_ENABLED: ${ZEPH_TOOLS_AUDIT_ENABLED:-true}
      ZEPH_TOOLS_AUDIT_DESTINATION: ${ZEPH_TOOLS_AUDIT_DESTINATION:-stdout}
      # Bootstrap
      ZEPH_CONFIG: ${ZEPH_CONFIG:-}
      ZEPH_VAULT_BACKEND: ${ZEPH_VAULT_BACKEND:-}
      # LLM Cache
      ZEPH_LLM_RESPONSE_CACHE_ENABLED: ${ZEPH_LLM_RESPONSE_CACHE_ENABLED:-}
      ZEPH_LLM_RESPONSE_CACHE_TTL_SECS: ${ZEPH_LLM_RESPONSE_CACHE_TTL_SECS:-}
      ZEPH_LLM_SEMANTIC_CACHE_ENABLED: ${ZEPH_LLM_SEMANTIC_CACHE_ENABLED:-}
      ZEPH_LLM_SEMANTIC_CACHE_THRESHOLD: ${ZEPH_LLM_SEMANTIC_CACHE_THRESHOLD:-}
      ZEPH_LLM_SEMANTIC_CACHE_MAX_CANDIDATES: ${ZEPH_LLM_SEMANTIC_CACHE_MAX_CANDIDATES:-}
      # Vault secrets
      ZEPH_OPENAI_API_KEY: ${ZEPH_OPENAI_API_KEY:-}
      ZEPH_GEMINI_API_KEY: ${ZEPH_GEMINI_API_KEY:-}
      ZEPH_HF_TOKEN: ${ZEPH_HF_TOKEN:-}
      ZEPH_GATEWAY_TOKEN: ${ZEPH_GATEWAY_TOKEN:-}
      ZEPH_DISCORD_TOKEN: ${ZEPH_DISCORD_TOKEN:-}
      ZEPH_DISCORD_APP_ID: ${ZEPH_DISCORD_APP_ID:-}
      ZEPH_SLACK_BOT_TOKEN: ${ZEPH_SLACK_BOT_TOKEN:-}
      ZEPH_SLACK_SIGNING_SECRET: ${ZEPH_SLACK_SIGNING_SECRET:-}
      # Memory
      ZEPH_MEMORY_SUMMARIZATION_THRESHOLD: ${ZEPH_MEMORY_SUMMARIZATION_THRESHOLD:-}
      ZEPH_MEMORY_CONTEXT_BUDGET_TOKENS: ${ZEPH_MEMORY_CONTEXT_BUDGET_TOKENS:-}
      ZEPH_MEMORY_COMPACTION_THRESHOLD: ${ZEPH_MEMORY_COMPACTION_THRESHOLD:-}
      ZEPH_MEMORY_SOFT_COMPACTION_THRESHOLD: ${ZEPH_MEMORY_SOFT_COMPACTION_THRESHOLD:-}
      ZEPH_MEMORY_COMPACTION_PRESERVE_TAIL: ${ZEPH_MEMORY_COMPACTION_PRESERVE_TAIL:-}
      ZEPH_MEMORY_AUTO_BUDGET: ${ZEPH_MEMORY_AUTO_BUDGET:-}
      ZEPH_MEMORY_PRUNE_PROTECT_TOKENS: ${ZEPH_MEMORY_PRUNE_PROTECT_TOKENS:-}
      ZEPH_MEMORY_VECTOR_BACKEND: ${ZEPH_MEMORY_VECTOR_BACKEND:-}
      ZEPH_MEMORY_SEMANTIC_TEMPORAL_DECAY_ENABLED: ${ZEPH_MEMORY_SEMANTIC_TEMPORAL_DECAY_ENABLED:-}
      ZEPH_MEMORY_SEMANTIC_TEMPORAL_DECAY_HALF_LIFE_DAYS: ${ZEPH_MEMORY_SEMANTIC_TEMPORAL_DECAY_HALF_LIFE_DAYS:-}
      ZEPH_MEMORY_SEMANTIC_MMR_ENABLED: ${ZEPH_MEMORY_SEMANTIC_MMR_ENABLED:-}
      ZEPH_MEMORY_SEMANTIC_MMR_LAMBDA: ${ZEPH_MEMORY_SEMANTIC_MMR_LAMBDA:-}
      ZEPH_MEMORY_TOKEN_SAFETY_MARGIN: ${ZEPH_MEMORY_TOKEN_SAFETY_MARGIN:-}
      ZEPH_MEMORY_AUTOSAVE_ASSISTANT: ${ZEPH_MEMORY_AUTOSAVE_ASSISTANT:-}
      ZEPH_MEMORY_AUTOSAVE_MIN_LENGTH: ${ZEPH_MEMORY_AUTOSAVE_MIN_LENGTH:-}
      # Skills
      ZEPH_SKILLS_MAX_ACTIVE: ${ZEPH_SKILLS_MAX_ACTIVE:-}
      ZEPH_SKILLS_LEARNING_ENABLED: ${ZEPH_SKILLS_LEARNING_ENABLED:-}
      ZEPH_SKILLS_LEARNING_AUTO_ACTIVATE: ${ZEPH_SKILLS_LEARNING_AUTO_ACTIVATE:-}
      ZEPH_SKILLS_PROMPT_MODE: ${ZEPH_SKILLS_PROMPT_MODE:-}
      # Tools
      ZEPH_TOOLS_SUMMARIZE_OUTPUT: ${ZEPH_TOOLS_SUMMARIZE_OUTPUT:-}
      ZEPH_TOOLS_SHELL_ALLOWED_COMMANDS: ${ZEPH_TOOLS_SHELL_ALLOWED_COMMANDS:-}
      ZEPH_TOOLS_TIMEOUT: ${ZEPH_TOOLS_TIMEOUT:-}
      ZEPH_TOOLS_SCRAPE_TIMEOUT: ${ZEPH_TOOLS_SCRAPE_TIMEOUT:-}
      ZEPH_TOOLS_SCRAPE_MAX_BODY: ${ZEPH_TOOLS_SCRAPE_MAX_BODY:-}
      ZEPH_TOOLS_SHELL_ALLOWED_PATHS: ${ZEPH_TOOLS_SHELL_ALLOWED_PATHS:-}
      ZEPH_TOOLS_SHELL_ALLOW_NETWORK: ${ZEPH_TOOLS_SHELL_ALLOW_NETWORK:-}
      # A2A
      ZEPH_A2A_MAX_BODY_SIZE: ${ZEPH_A2A_MAX_BODY_SIZE:-}
      # ACP
      ZEPH_ACP_ENABLED: ${ZEPH_ACP_ENABLED:-}
      ZEPH_ACP_AGENT_NAME: ${ZEPH_ACP_AGENT_NAME:-}
      ZEPH_ACP_AGENT_VERSION: ${ZEPH_ACP_AGENT_VERSION:-}
      ZEPH_ACP_MAX_SESSIONS: ${ZEPH_ACP_MAX_SESSIONS:-}
      ZEPH_ACP_SESSION_IDLE_TIMEOUT_SECS: ${ZEPH_ACP_SESSION_IDLE_TIMEOUT_SECS:-}
      ZEPH_ACP_PERMISSION_FILE: ${ZEPH_ACP_PERMISSION_FILE:-}
      ZEPH_ACP_AUTH_TOKEN: ${ZEPH_ACP_AUTH_TOKEN:-}
      ZEPH_ACP_DISCOVERY_ENABLED: ${ZEPH_ACP_DISCOVERY_ENABLED:-}
      # Index
      ZEPH_INDEX_ENABLED: ${ZEPH_INDEX_ENABLED:-}
      ZEPH_INDEX_MAX_CHUNKS: ${ZEPH_INDEX_MAX_CHUNKS:-}
      ZEPH_INDEX_SCORE_THRESHOLD: ${ZEPH_INDEX_SCORE_THRESHOLD:-}
      ZEPH_INDEX_BUDGET_RATIO: ${ZEPH_INDEX_BUDGET_RATIO:-}
      ZEPH_INDEX_REPO_MAP_TOKENS: ${ZEPH_INDEX_REPO_MAP_TOKENS:-}
      # STT
      ZEPH_STT_PROVIDER: ${ZEPH_STT_PROVIDER:-}
      ZEPH_STT_LANGUAGE: ${ZEPH_STT_LANGUAGE:-}
      # Timeouts
      ZEPH_TIMEOUT_LLM: ${ZEPH_TIMEOUT_LLM:-}
      ZEPH_TIMEOUT_LLM_REQUEST: ${ZEPH_TIMEOUT_LLM_REQUEST:-}
      ZEPH_TIMEOUT_EMBEDDING: ${ZEPH_TIMEOUT_EMBEDDING:-}
      ZEPH_TIMEOUT_A2A: ${ZEPH_TIMEOUT_A2A:-}
      # Logging
      ZEPH_LOG_FILE: ${ZEPH_LOG_FILE:-}
      ZEPH_LOG_LEVEL: ${ZEPH_LOG_LEVEL:-}
      ZEPH_AUTO_UPDATE_CHECK: ${ZEPH_AUTO_UPDATE_CHECK:-false}
    ports:
      - "${ZEPH_A2A_PORT:-8080}:${ZEPH_A2A_PORT:-8080}"
    volumes:
      - zeph_data:/app/.zeph/data
    stdin_open: true
    tty: true

volumes:
  qdrant_data:
  zeph_data: