# LettaBot Configuration
# Copy this to lettabot.yaml and fill in your values.
#
# Server modes:
# - 'api': Use Letta API (api.letta.com) with API key
# - 'docker': Use a Docker/custom Letta server
# Legacy aliases still accepted: 'cloud', 'selfhosted'

server:
  mode: api
  # For api mode, set your API key (get one at https://app.letta.com):
  apiKey: sk-let-YOUR-API-KEY
  # For docker mode, uncomment and set the base URL:
  # mode: docker
  # baseUrl: http://localhost:8283

agents:
  - name: LettaBot
    # displayName: "💜 Signo"  # Prefix outbound messages (useful in multi-agent group chats)
    # Note: model is configured on the Letta agent server-side.
    # Select a model during `lettabot onboard` or change it with `lettabot model set <handle>`.

    # workingDir: ~/my-project  # Per-agent working directory (overrides global WORKING_DIR)

    # Per-agent tool access (overrides global features.allowedTools / features.disallowedTools)
    # features:
    #   allowedTools: [Read, Glob, Grep, web_search, conversation_search]  # Read-only agent (no Bash/Edit/Write)

    # Conversation routing (optional)
    conversations:
      mode: shared        # "shared" (default) or "per-channel"
      heartbeat: last-active  # "dedicated" | "last-active" | "<channel>"
      # perChannel: ["slack"]  # Keep these channels isolated while others share a conversation

    channels:
      telegram:
        enabled: true
        token: YOUR-TELEGRAM-BOT-TOKEN
        dmPolicy: pairing  # 'pairing', 'allowlist', or 'open'
        # groupDebounceSec: 5           # Debounce seconds (default: 5, 0 = immediate)
        # instantGroups: ["-100123456"] # Groups that bypass batching (legacy)
        # Group access + response mode:
        # groups:
        #   "*": { mode: listen }                      # Observe all groups; only reply when @mentioned
        #   "-1001234567890": { mode: open }           # This group gets all messages
        #   "-1009876543210": { mode: mention-only }   # Drop unless @mentioned
        # mentionPatterns: ["hey bot"]                 # Additional regex patterns for mention detection
      # slack:
      #   enabled: true
      #   appToken: xapp-...
      #   botToken: xoxb-...
      #   groups:
      #     "*": { mode: listen }
      #     "C0123456789": { mode: open }
      # discord:
      #   enabled: true
      #   token: YOUR-DISCORD-BOT-TOKEN
      #   groups:
      #     "*": { mode: listen }
      #     "1234567890123456789": { mode: open }  # Server or channel ID
      # whatsapp:
      #   enabled: true
      #   selfChat: false
      # bluesky:
      #   enabled: true
      #   wantedDids: ["did:plc:..."]
      #   # groups:
      #   #   "*": { mode: listen }    # listen = observe only; open = observe + auto-reply; mention-only = auto-reply to @mentions only
      #   #   "did:plc:...": { mode: open }
      #   # lists:
      #   #   "at://did:plc:.../app.bsky.graph.list/xyz": { mode: listen }
      #   # wantedCollections: ["app.bsky.feed.post"]
      #   # notifications:
      #   #   enabled: true
      #   #   intervalSec: 60
      #   #   reasons: ["mention", "reply", "quote"]  # also: like, repost, follow
      #   #   backfill: false                         # process initial backlog on startup
      #   # jetstreamUrl: wss://jetstream2.us-east.bsky.network/subscribe
      #   # handle: you.bsky.social
      #   # appPassword: xxxx-xxxx-xxxx-xxxx
      #   # serviceUrl: https://bsky.social

# BYOK Providers (optional, api mode only)
# These will be synced to Letta API on startup
# providers:
#   - id: anthropic
#     name: lc-anthropic
#     type: anthropic
#     apiKey: sk-ant-YOUR-ANTHROPIC-KEY
#   - id: openai
#     name: lc-openai
#     type: openai
#     apiKey: sk-YOUR-OPENAI-KEY

features:
  cron: false
  heartbeat:
    enabled: false
    intervalMin: 30
    # skipRecentUserMin: 5   # Skip auto-heartbeats for N minutes after user message (0 disables)
  # sendFileDir: ./data/outbound    # Restrict <send-file> directive to this directory (default: data/outbound)
  # sendFileMaxSize: 52428800       # Max file size in bytes for <send-file> (default: 50MB)
  # sendFileCleanup: false          # Allow <send-file cleanup="true"> to delete files after send (default: false)
  # memfs: true   # Enable memory filesystem (git-backed context repository). Syncs memory blocks to local files.
  # sleeptime:                    # Background reflection (requires memfs: true)
  #   trigger: step-count         # "off" | "step-count" | "compaction-event"
  #   behavior: reminder          # "reminder" | "auto-launch"
  #   stepCount: 10               # Steps between reflections (step-count trigger only)
  # allowedTools: [Bash, Read, Edit, Write, Glob, Grep, Task, web_search, conversation_search]  # Global default
  # disallowedTools: [EnterPlanMode, ExitPlanMode]  # Global default
  # display:
  #   showToolCalls: false       # Show tool invocations in chat (e.g. "Using tool: Read (file_path: ...)")
  #   showReasoning: false       # Show agent reasoning/thinking in chat
  #   reasoningMaxChars: 0       # Truncate reasoning to N chars (0 = no limit, default)

# Attachment handling (defaults to 20MB if omitted)
# attachments:
#   maxMB: 20
#   maxAgeDays: 14
