# Flynn Configuration # Copy to ~/.config/flynn/config.yaml and customize # Log verbosity: debug | info | warn | error | silent (default: info) # Set to 'debug' to see model fallback details. # log_level: info telegram: bot_token: ${FLYNN_TELEGRAM_TOKEN} allowed_chat_ids: [] # Add your Telegram chat ID server: tailscale_only: true localhost: true port: 18800 models: # ── Model tiers ──────────────────────────────────────────────────── # Each tier (default, fast, complex, local) defines a primary model. # When an Anthropic tier fails, Flynn automatically tries the same # model via GitHub Models before falling through to the global chain. # # You can override auto-fallback with an inline `fallback:` block: # # default: # provider: anthropic # model: claude-sonnet-4-20250514 # fallback: # ← inline per-tier fallback # provider: openai # model: gpt-4o # # ── Fallback order ───────────────────────────────────────────────── # 1. Primary client for the tier # 2. Auto same-model fallback via GitHub Models (Anthropic tiers only, # skipped when an inline `fallback:` block is present) # 3. Inline `fallback:` client (if configured) # 4. Global fallback_chain (tried in order) # default: provider: anthropic model: claude-sonnet-4-20250514 # supports_audio: false # Override native audio detection per tier local: provider: ollama model: glm-4.7-flash # ── Global fallback chain ────────────────────────────────────────── # Entries can be tier names (default, fast, complex, local) or keys # from local_providers below. Tried in order after per-tier fallbacks # are exhausted. fallback_chain: [local] # ── Named providers (optional) ───────────────────────────────────── # Define additional providers that can be referenced by name in # fallback_chain. Useful for secondary API accounts or self-hosted # endpoints that aren't tied to a specific tier. # # local_providers: # openrouter-backup: # provider: openrouter # model: anthropic/claude-sonnet-4 # ollama-big: # provider: ollama # model: llama3.1:70b # endpoint: http://gpu-server:11434 # # Then reference them in fallback_chain: # fallback_chain: [openrouter-backup, ollama-big, local] hooks: confirm: - shell.* - file.write - file.patch log: - web.* - file.read silent: - notify # ── Automation ────────────────────────────────────────────────────── # Uncomment and configure any automation sources you need. # automation: # cron: # - name: daily-summary # schedule: "0 9 * * *" # message: "Give me a summary of today's tasks" # output: # channel: telegram # peer: "123456789" # # webhooks: # - name: github-push # secret: "whsec_..." # message: "GitHub push to {{json.repository.full_name}}: {{json.head_commit.message}}" # output: # channel: telegram # peer: "123456789" # # gmail: # enabled: false # credentials_file: ~/.config/flynn/gmail-credentials.json # token_file: ~/.config/flynn/gmail-token.json # watch_labels: [INBOX] # poll_interval: "60s" # message: "New email from {{from}}: {{subject}}\n\n{{snippet}}" # output: # channel: telegram # peer: "123456789" # # heartbeat: # enabled: false # interval: "5m" # checks: [gateway, model, channels, memory, disk] # notify: # channel: telegram # peer: "123456789" # failure_threshold: 2 # disk_threshold_mb: 100 # ── Audio ──────────────────────────────────────────────────────────── # Configure a Whisper-compatible endpoint for audio transcription. # Models that support native audio input (Gemini, OpenAI, GitHub) will # receive raw audio directly; others fall back to this endpoint. # audio: # transcription_endpoint: "http://localhost:8080/v1/audio/transcriptions" # transcription_api_key: "${WHISPER_API_KEY}" # transcription_model: "whisper-1" # transcription_provider: "openai"