_config_version: 30
agent:
  api_max_retries: 3
  clarify_timeout: 600
  coding_context: auto
  disabled_toolsets: '["homeassistant","feishu_doc","feishu_drive","yuanbao","x_search"]'
  environment_hint: Debian 13 server, 11GB VRAM RTX 2080 Ti, 6 local models via llama-swap
    :9292, Hermes gateway :18789, dashboard :9119
  environment_probe: true
  gateway_auto_continue_freshness: 3600
  gateway_notify_interval: 180
  gateway_timeout: 1800
  gateway_timeout_warning: 900
  image_input_mode: auto
  max_turns: 90
  parallel_tool_call_guidance: true
  personalities:
    concise: You are a concise assistant. Keep responses brief and to the point.
    technical: You are a technical expert. Provide detailed, accurate technical information.
  reasoning_effort: medium
  restart_drain_timeout: 180
  service_tier: normal
  task_completion_guidance: true
  tool_use_enforcement: auto
  verbose: false
api_server:
  bind_address: 0.0.0.0
  enabled: true
  key: c2a18b6c8c041c94dd784dcf0a907956acdfffb87a0d59207245a2e23440eeb5
  port: 18789
approvals:
  cron_mode: deny
  destructive_slash_confirm: false
  mcp_reload_confirm: true
  mode: smart
  timeout: 60
auxiliary:
  approval:
    api_key: ''
    base_url: ''
    model: deepseek-v4-flash
    provider: deepseek
    timeout: 30
  background_review:
    api_key: ''
    base_url: ''
    model: ''
    provider: auto
    timeout: 120
  compression:
    provider: deepseek
    model: deepseek-v4-flash
    timeout: 120
    threshold: 0.3
    protect_last_n: 10
  curator:
    api_key: ''
    base_url: ''
    model: ''
    provider: auto
    timeout: 600
  kanban_decomposer:
    api_key: ''
    base_url: ''
    model: ''
    provider: auto
    timeout: 180
  mcp:
    api_key: ''
    base_url: ''
    model: ''
    provider: auto
    timeout: 30
  monitor:
    api_key: ''
    base_url: ''
    model: ''
    provider: auto
    timeout: 60
  profile_describer:
    api_key: ''
    base_url: ''
    model: ''
    provider: auto
    timeout: 60
  session_search:
    api_key: ''
    base_url: ''
    extra_body: {}
    max_concurrency: 3
    model: ''
    provider: auto
    timeout: 30
  skills_hub:
    api_key: ''
    base_url: ''
    model: ''
    provider: auto
    timeout: 30
  title_generation:
    api_key: ''
    base_url: ''
    language: ''
    model: deepseek-v4-flash
    provider: deepseek
    timeout: 30
  triage_specifier:
    api_key: ''
    base_url: ''
    model: deepseek-v4-flash
    provider: deepseek
    timeout: 120
  tts_audio_tags:
    api_key: ''
    base_url: ''
    model: ''
    provider: auto
    timeout: 30
  vision:
    api_key: ''
    base_url: ''
    download_timeout: 30
    enabled: false
    model: deepseek-v4-flash
    provider: deepseek
    timeout: 120
  web_extract:
    api_key: ''
    base_url: ''
    model: deepseek-v4-flash
    provider: deepseek
    timeout: 360
bedrock:
  discovery:
    enabled: false
    provider_filter: []
    refresh_interval: 3600
  guardrail:
    guardrail_identifier: ''
    guardrail_version: ''
    stream_processing_mode: async
    trace: disabled
  region: ''
browser:
  allow_private_urls: false
  auto_local_for_private_urls: true
  camofox:
    adopt_existing_tab: false
    loopback_host_alias: host.docker.internal
    managed_persistence: false
    rewrite_loopback_urls: false
    session_key: ''
    user_id: ''
  cdp_url: ''
  command_timeout: 30
  dialog_policy: must_respond
  dialog_timeout_s: 300
  engine: auto
  inactivity_timeout: 120
  record_sessions: false
checkpoints:
  auto_prune: true
  delete_orphans: true
  enabled: false
  max_file_size_mb: 10
  max_snapshots: 20
  max_total_size_mb: 500
  min_interval_hours: 24
  retention_days: 7
code_execution:
  max_tool_calls: 50
  mode: project
  timeout: 300
command_allowlist:
  - script execution via heredoc
  - SQL DELETE without WHERE
  - stop/restart system service
  - docker restart/stop/kill (container lifecycle)
  - copy/move file into /etc/
  - SQL TRUNCATE
  - sudo with privilege flag (stdin/askpass/shell/list)
  - copy/move file into system config path
  - SQL DROP
  - execute_code
  - in-place edit of Hermes config/env
  - sudo with combined-flag privilege escalation
  - overwrite system file via redirection
  - overwrite system file via tee
  - force kill processes
  - find -delete
  - stop/restart hermes gateway (kills running agents)
  - git clean with force (deletes untracked files)
  - shell command via -c/-lc flag
  - overwrite project env/config file
  - in-place edit of system config
  - pipe remote content to shell
  - overwrite system config
  - script execution via -e/-c flag
  - kill hermes/gateway process (self-termination)
  - hermes update (restarts gateway, kills running agents)
  - delete in root path
  - recursive delete
  - docker compose restart/stop/kill/down (container lifecycle)
  - kill process via pgrep expansion (self-termination)
compression:
  abort_on_summary_failure: true
  codex_gpt55_autoraise: true
  enabled: true
  hygiene_hard_message_limit: 400
  in_place: false
  protect_first_n: 3
  protect_last_n: 12
  target_ratio: 0.15
  threshold: 0.5
computer_use:
  cua_telemetry: false
context:
  engine: compressor
credential_pool_strategies:
  deepseek: fill_first
  nvidia-nim: fill_first
cron:
  chronos:
    callback_url: ''
    expected_audience: ''
    nas_jwks_url: ''
    portal_url: https://portal.nousresearch.com
  max_parallel_jobs: 4
  provider: ''
  wrap_response: true
curator:
  archive_after_days: 90
  backup:
    enabled: true
    keep: 5
  consolidate: false
  enabled: true
  interval_hours: 168
  min_idle_hours: 2
  prune_builtins: true
  stale_after_days: 30
custom_providers:
  - api_key_env: ''
    base_url: http://127.0.0.1:9292/v1
    models:
      - context_length: 230000
        description: Primary daily coder, APEX I-Compact, MTP, 230K context
        id: qwen36-35b-mtp
        name: Qwen3.6 35B MoE APEX MTP (I-Compact)
      - context_length: 230000
        description: Gemma 4 26B A4B QAT with MTP draft, 230K context
        id: gemma-26b-200k
        name: Gemma 4 26B MoE QAT (Q4_K_XL)
      - context_length: 262144
        description: Ornith 35B MoE APEX I-Compact, MTP, 262K context, vision-capable
        id: ornith-35b-q6-mtp
        name: Ornith 35B MoE APEX (I-Compact)
      - context_length: 131072
        description: Qwythos 9B Claude Mythos 5 1M MTP, Q6_K, v3 chat template fix,
          131K context
        id: qwythos-9b-mtp-q6
        name: Qwythos 9B Claude Mythos 5 1M MTP (Q6_K)
      - context_length: 98304
        description: Ornith 9B MTP dense fast model, Q5_K_M, MTP spec decode, 64K
          context
        id: ornith-9b-mtp-q5
        name: Ornith 9B MTP (Q5_K_M)
    name: Local LLM (llama-swap)
dashboard:
  basic_auth:
    password: ''
    password_hash: ''
    secret: ''
    session_ttl_seconds: 0
    username: ''
  font: system-serif
  oauth:
    client_id: ''
    portal_url: ''
  public_url: ''
  show_token_analytics: false
  theme: uae
delegation:
  api_key: ''
  api_mode: ''
  base_url: ''
  child_timeout_seconds: 600
  inherit_mcp_toolsets: true
  max_async_children: 3
  max_concurrent_children: 3
  max_iterations: 50
  max_spawn_depth: 1
  model: deepseek-v4-flash
  orchestrator_enabled: true
  provider: deepseek
  reasoning_effort: ''
  subagent_auto_approve: false
discord:
  allow_any_attachment: false
  allowed_channels: ''
  auto_thread: true
  dm_role_auth_guild: ''
  free_response_channels: ''
  history_backfill: true
  history_backfill_limit: 50
  max_attachment_bytes: 33554432
  reactions: true
  require_mention: true
  server_actions: ''
  thread_require_mention: false
  voice_fx:
    ack_enabled: true
    ack_phrases:
      - Let me look into that.
      - One moment.
      - Checking on that now.
      - Give me a sec.
      - On it.
    ambient_enabled: true
    ambient_gain: 0.18
    ambient_path: ''
    duck_gain: 0.06
    enabled: false
    speech_gain: 1.0
display:
  background_process_notifications: all
  bell_on_complete: false
  busy_input_mode: interrupt
  cleanup_progress: false
  cli_refresh_interval: 1.0
  compact: false
  copy_shortcut: auto
  credits_notices: true
  ephemeral_system_ttl: 0
  file_mutation_verifier: true
  final_response_markdown: strip
  inline_diffs: true
  interface: cli
  interim_assistant_messages: true
  language: en
  memory_notifications: 'on'
  persist_prompts: true
  persistent_output: true
  persistent_output_max_lines: 200
  personality: concise
  reasoning_full: false
  resume_display: full
  resume_exchanges: 10
  resume_max_assistant_chars: 200
  resume_max_assistant_lines: 3
  resume_max_user_chars: 300
  resume_skip_tool_only: true
  runtime_footer:
    enabled: false
    fields:
      - model
      - context_pct
      - cwd
  show_cost: false
  show_reasoning: false
  skin: default
  streaming: true
  timestamps: false
  tool_preview_length: 0
  tool_progress: new
  tool_progress_command: false
  tool_progress_grouping: accumulate
  tui_agents_nudge: true
  tui_auto_resume_recent: false
  tui_status_indicator: kaomoji
  turn_completion_explainer: true
  user_message_preview:
    first_lines: 2
    last_lines: 2
environment_hint: Debian 13 server, 11GB VRAM RTX 2080 Ti, 6 local models via llama-swap:9292,
  Hermes gateway :18789, dashboard :9119
fallback_providers:
  - model: qwen36-35b-mtp
    provider: custom:local-llm-(llama-swap)
file_read_max_chars: 100000
gateway:
  api_server:
    max_concurrent_runs: 10
  max_inbound_media_bytes: 134217728
  media_delivery_allow_dirs: []
  message_timestamps:
    enabled: false
  platforms: {}
  strict: false
  telegram:
    token: 8796348132:***
  trust_recent_files: true
  trust_recent_files_seconds: 600
goals:
  max_turns: 20
group_sessions_per_user: true
hindsight:
  auto_recall: true
  auto_retain: true
  llm_base_url: http://127.0.0.1:8087/v1
  llm_model: HuggingFaceTB_SmolLM3-3B-Q4_K_M.gguf
  llm_provider: openai_compatible
  mode: local_embedded
hooks_auto_accept: false
human_delay:
  max_ms: 2500
  min_ms: 800
  mode: 'off'
kanban:
  auto_decompose: true
  auto_decompose_per_tick: 3
  default_assignee: ''
  dispatch_in_gateway: true
  dispatch_interval_seconds: 60
  dispatch_stale_timeout_seconds: 14400
  failure_limit: 2
  max_in_progress_per_profile: 3
  orchestrator_profile: ''
  worker_log_backup_count: 1
  worker_log_rotate_bytes: 2097152
known_plugin_toolsets:
  cli:
    - spotify
logging:
  backup_count: 3
  level: WARNING
  max_size_mb: 10
  memory_monitor:
    enabled: true
    interval_seconds: 300
lsp:
  enabled: true
  install_strategy: auto
  wait_mode: document
  wait_timeout: 5.0
matrix:
  allowed_rooms: ''
  free_response_rooms: ''
  require_mention: true
mattermost:
  allowed_channels: ''
  free_response_channels: ''
  require_mention: true
mcp_discovery_timeout: 1.5
memory:
  flush_min_turns: 6
  memory_char_limit: 3000
  memory_enabled: true
  nudge_interval: 10
  provider: ''
  user_char_limit: 2500
  user_profile_enabled: true
  write_approval: false
model:
  default: deepseek-v4-pro
  provider: deepseek
model_catalog:
  enabled: false
  providers:
    openrouter:
      url: file:///home/rurouni/.hermes/cache/openrouter_override.json
  ttl_hours: 1
  url: https://hermes-agent.nousresearch.com/docs/api/model-catalog.json
models:
  - context_length: 200000
    name: gemma-26b-200k
network:
  force_ipv4: false
onboarding:
  profile_build: ask
  seen:
    busy_input_prompt: true
openrouter:
  min_coding_score: 0.65
  response_cache: true
  response_cache_ttl: 300
paste_collapse_char_threshold: 2000
paste_collapse_threshold: 5
paste_collapse_threshold_fallback: 5
personalities:
  fable: "You operate like a senior collaborator, not a chatbot. Follow these rules\
    \ at all times:\n\n1. ACT, DON'T OVERPLAN. When you have enough information to\
    \ act, act. Don't\n  re-derive settled facts, re-litigate a decided question,\
    \ or narrate options\n  you won't pursue. If you're weighing a choice, give a\
    \ recommendation, not\n  an exhaustive survey.\n\n2. LEAD WITH THE OUTCOME. Your\
    \ first sentence answers \"what happened\" or\n  \"what I found\" -- the bottom\
    \ line the reader actually wants. Detail and\n  reasoning come after. Readable\
    \ matters more than short.\n\n3. GROUND EVERY CLAIM. Before reporting something\
    \ is done or true, check it\n  against the actual evidence in front of you. Only\
    \ claim what you can point\n  to; if it isn't verified, say so. If it failed,\
    \ say so. If you skipped a\n  step, say that.\n\n4. STOP ONLY AT REAL BOUNDARIES.\
    \ Pause for me only when the work genuinely\n  requires it: a destructive or irreversible\
    \ action, a real change of scope,\n  or input only I can give. Otherwise, proceed.\
    \ Don't end on a promise --\n  do the thing.\n\n5. ASSESS, DON'T ACT UNINVITED.\
    \ When I'm describing a problem, asking a\n  question, or thinking out loud rather\
    \ than requesting a change, the\n  deliverable is your assessment. Report findings\
    \ and stop. Don't apply a\n  fix until I ask.\n\n6. MATCH EFFORT TO THE TASK.\
    \ Spend deep reasoning on hard, ambiguous, or\n  high-stakes work; move fast on\
    \ routine work. Don't add complexity,\n  caveats, or future-proofing the task\
    \ didn't ask for.\n\n7. USE THE REASON, NOT JUST THE REQUEST. Connect the work\
    \ to the intent\n  behind it. If the \"why\" is missing and it matters, ask one\
    \ sharp question\n  before starting.\n\n8. KEEP LESSONS + CHECK YOUR OWN WORK.\
    \ Apply corrections I've given you in\n  this conversation. Before handing over\
    \ a result, verify it against what\n  I actually asked for.\n"
platform_toolsets:
  cli:
    - clarify
    - file
    - memory
    - session_search
    - skills
    - terminal
    - todo
    - web
  discord:
    - hermes-discord
    - spotify
  google_chat:
    - hermes-google_chat
    - spotify
  homeassistant:
    - hermes-homeassistant
    - spotify
  qqbot:
    - hermes-qqbot
    - spotify
  signal:
    - hermes-signal
    - spotify
  slack:
    - hermes-slack
    - spotify
  teams:
    - hermes-teams
    - spotify
  telegram:
    - clarify
    - file
    - memory
    - session_search
    - skills
    - terminal
    - todo
    - web
  whatsapp:
    - hermes-whatsapp
    - spotify
  yuanbao:
    - hermes-yuanbao
    - spotify
plugins:
  disabled: []
  enabled:
    - spotify
prefill_messages_file: ''
privacy:
  redact_pii: false
prompt_caching:
  cache_ttl: 5m
  long_lived_prefix: true
  long_lived_ttl: 1h
providers:
  deepseek:
    api_key_env: DEEPSEEK_API_KEY
    models:
      deepseek-v4-flash:
        max_input_tokens: 1048576
        max_output_tokens: 16384
      deepseek-v4-pro:
        max_input_tokens: 65536
        max_output_tokens: 8192
  nvidia-nim:
    api_key_env: NVIDIA_NIM_API_KEY
    base_url: https://integrate.api.nvidia.com/v1
    models:
      deepseek-ai/deepseek-v4-flash:
        max_input_tokens: 1048576
        max_output_tokens: 16384
      deepseek-ai/deepseek-v4-pro:
        max_input_tokens: 65536
        max_output_tokens: 8192
      meta/llama-3.3-70b-instruct:
        max_input_tokens: 131072
        max_output_tokens: 16384
      meta/llama-4-maverick-17b-128e-instruct:
        max_input_tokens: 131072
        max_output_tokens: 16384
      mistralai/mistral-large-3-675b-instruct-2512:
        max_input_tokens: 131072
        max_output_tokens: 16384
      nvidia/llama-3.3-nemotron-super-49b-v1:
        max_input_tokens: 131072
        max_output_tokens: 16384
      nvidia/llama-3.3-nemotron-super-49b-v1.5:
        max_input_tokens: 131072
        max_output_tokens: 16384
      qwen/qwen3-next-80b-a3b-instruct:
        max_input_tokens: 131072
        max_output_tokens: 16384
  opencode-zen:
    api_key_env: OPENCODE_ZEN_API_KEY
    base_url: https://opencode.ai/zen/v1
    models:
      deepseek-v4-flash-free:
        max_input_tokens: 1048576
        max_output_tokens: 16384
      mimo-v2.5-free:
        max_input_tokens: 131072
        max_output_tokens: 65536
      minimax-m3-free:
        max_input_tokens: 131072
        max_output_tokens: 65536
      nemotron-3-ultra-free:
        max_input_tokens: 131072
        max_output_tokens: 16384
      north-mini-code-free:
        max_input_tokens: 131072
        max_output_tokens: 16384
      qwen3.6-plus-free:
        max_input_tokens: 131072
        max_output_tokens: 65536
  openrouter:
    api_key_env: OPENROUTER_API_KEY
    models:
      cohere/north-mini-code:free:
        max_input_tokens: 262144
        max_output_tokens: 65536
      google/gemma-4-31b-it:free:
        max_input_tokens: 262144
        max_output_tokens: 16384
      nex-agi/nex-n2-pro:free:
        max_input_tokens: 262144
        max_output_tokens: 16384
      nvidia/nemotron-3-nano-30b-a3b:free:
        max_input_tokens: 262144
        max_output_tokens: 16384
      nvidia/nemotron-3-nano-omni:free:
        max_input_tokens: 300000
        max_output_tokens: 16384
      nvidia/nemotron-3-super-120b-a12b:free:
        max_input_tokens: 1048576
        max_output_tokens: 16384
      nvidia/nemotron-3-ultra-550b-a55b:free:
        max_input_tokens: 1048576
        max_output_tokens: 16384
      nvidia/nemotron-nano-9b-v2:free:
        max_input_tokens: 131072
        max_output_tokens: 16384
      openai/gpt-oss-120b:free:
        max_input_tokens: 131072
        max_output_tokens: 16384
      openai/gpt-oss-20b:free:
        max_input_tokens: 131072
        max_output_tokens: 16384
      poolside/laguna-m-1:free:
        max_input_tokens: 262144
        max_output_tokens: 32768
      poolside/laguna-xs-2:free:
        max_input_tokens: 262144
        max_output_tokens: 32768
  z-ai:
    api_key_env: Z_AI_API_KEY
    base_url: https://api.z.ai/api/paas/v4
    models:
      glm-4-32b-0414-128k:
        max_input_tokens: 131072
        max_output_tokens: 16384
      glm-4.5-air:
        max_input_tokens: 131072
        max_output_tokens: 16384
      glm-4.5-flash:
        max_input_tokens: 131072
        max_output_tokens: 16384
      glm-4.7-flash:
        max_input_tokens: 204800
        max_output_tokens: 16384
      glm-4.7-flashx:
        max_input_tokens: 204800
        max_output_tokens: 16384
secrets:
  bitwarden:
    access_token_env: BWS_ACCESS_TOKEN
    auto_install: true
    cache_ttl_seconds: 300
    enabled: false
    override_existing: true
    project_id: ''
    server_url: ''
security:
  acked_advisories: []
  allow_lazy_installs: true
  allow_private_urls: false
  redact_secrets: true
  tirith_enabled: true
  tirith_fail_open: true
  tirith_path: tirith
  tirith_timeout: 5
  website_blocklist:
    domains: []
    enabled: false
    shared_files: []
session_reset:
  at_hour: 4
  idle_minutes: 720
  mode: both
sessions:
  auto_prune: true
  min_interval_hours: 24
  retention_days: 45
  vacuum_after_prune: true
  write_json_snapshots: false
skills:
  creation_nudge_interval: 15
  disabled:
    - .llama-cpp-disabled
    - architecture-diagram
    - blogwatcher
    - codebase-inspection
    - creative-ideation
    - docker-security
    - excalidraw
    - findmy
    - firefox-optimization
    - godmode
    - google-workspace
    - hermes-desktop-remote
    - hermes-s6-container-supervision
    - himalaya
    - humanizer
    - imessage
    - linux-desktop-troubleshooting
    - linux-gaming
    - llm-wiki
    - local-ai-web-apps
    - macos-computer-use
    - maps
    - minecraft-modpack-server
    - modular-clean-architecture
    - nano-pdf
    - native-mcp
    - ocr-and-documents
    - phone-osint
    - pokemon-player
    - popular-web-designs
    - powerpoint
    - rescue-media
    - simplify-code
    - sketch
    - spotify-curator
    - tailscale-funnel-setup
    - teams-meeting-pipeline
    - test-driven-development
    - webhook-subscriptions
    - windows-gaming-optimization
    - xurl
    - youtube
  external_dirs: []
  guard_agent_created: false
  inline_shell: false
  inline_shell_timeout: 10
  template_vars: true
  write_approval: false
slack:
  allowed_channels: ''
  free_response_channels: ''
  require_mention: true
streaming:
  buffer_threshold: 80
  cursor: ' ▉'
  edit_interval: 1.5
  enabled: true
  fresh_final_after_seconds: 60.0
  transport: auto
stt:
  elevenlabs:
    diarize: false
    language_code: ''
    model_id: scribe_v2
    tag_audio_events: false
  enabled: true
  local:
    language: ''
    model: base
  mistral:
    model: voxtral-mini-latest
  openai:
    model: whisper-1
  provider: local
telegram:
  allowed_chats: ''
  extra:
    rich_messages: false
  reactions: false
terminal:
  auto_source_bashrc: true
  backend: local
  container_cpu: 1
  container_disk: 51200
  container_memory: 5120
  container_persistent: true
  cwd: .
  daemon_term_grace_seconds: 2.0
  daytona_image: nikolaik/python-nodejs:python3.11-nodejs20
  docker_extra_args: []
  docker_forward_env: []
  docker_image: nikolaik/python-nodejs:python3.11-nodejs20
  docker_mount_cwd_to_workspace: false
  docker_run_as_host_user: false
  docker_volumes: []
  env_passthrough: []
  home_mode: auto
  lifetime_seconds: 300
  modal_image: nikolaik/python-nodejs:python3.11-nodejs20
  modal_mode: auto
  persistent_shell: true
  shell_init_files: []
  singularity_image: docker://nikolaik/python-nodejs:python3.11-nodejs20
  timeout: 180
  vercel_runtime: node24
timezone: ''
tool_loop_guardrails:
  hard_stop_after:
    exact_failure: 5
    idempotent_no_progress: 5
    same_tool_failure: 8
  hard_stop_enabled: false
  warn_after:
    exact_failure: 2
    idempotent_no_progress: 2
    same_tool_failure: 3
  warnings_enabled: true
tool_output:
  max_bytes: 50000
  max_line_length: 2000
  max_lines: 2000
tools:
  stub_mode: true
  tool_search:
    enabled: auto
    max_search_limit: 20
    search_default_limit: 5
    threshold_pct: 10
toolsets:
  - file
  - terminal
  - skills
  - memory
  - session_search
  - todo
  - clarify
tts:
  edge:
    voice: en-US-AriaNeural
  elevenlabs:
    model_id: eleven_multilingual_v2
    voice_id: pNInz6obpgDQGcFmaJgB
  gemini:
    audio_tags: false
    model: gemini-2.5-flash-preview-tts
    persona_prompt_file: ''
    voice: Kore
  mistral:
    model: voxtral-mini-tts-2603
    voice_id: c69964a6-ab8b-4f8a-9465-ec0925096ec8
  neutts:
    device: cpu
    model: neuphonic/neutts-air-q4-gguf
    ref_audio: ''
    ref_text: ''
  openai:
    model: gpt-4o-mini-tts
    voice: alloy
  piper:
    voice: en_US-lessac-medium
  provider: edge
  xai:
    bit_rate: 128000
    language: en
    sample_rate: 24000
    voice_id: eve
updates:
  backup_keep: 5
  non_interactive_local_changes: stash
  pre_update_backup: false
voice:
  auto_tts: false
  beep_enabled: true
  max_recording_seconds: 120
  record_key: ctrl+b
  silence_duration: 3.0
  silence_threshold: 200
web:
  backend: ddgs
  extract_backend: firecrawl
  search_backend: searxng
x_search:
  model: grok-4.20-reasoning
  retries: 2
  timeout_seconds: 180

# ── Fallback Model ────────────────────────────────────────────────────
# Automatic provider failover when primary is unavailable.
# Uncomment and configure to enable. Triggers on rate limits (429),
# overload (529), service errors (503), or connection failures.
#
# Supported providers:
#   openrouter   (OPENROUTER_API_KEY)  — routes to any model
#   openai-codex (OAuth — hermes auth) — OpenAI Codex
#   nous         (OAuth — hermes auth) — Nous Portal
#   zai          (ZAI_API_KEY)         — Z.AI / GLM
#   kimi-coding  (KIMI_API_KEY)        — Kimi / Moonshot
#   kimi-coding-cn (KIMI_CN_API_KEY)   — Kimi / Moonshot (China)
#   minimax      (MINIMAX_API_KEY)     — MiniMax
#   minimax-cn   (MINIMAX_CN_API_KEY)  — MiniMax (China)
#   bedrock      (AWS IAM / boto3)     — AWS Bedrock (Converse API)
#
# For custom OpenAI-compatible endpoints, add base_url and key_env.
#
# fallback_model:
#   provider: openrouter
#   model: anthropic/claude-sonnet-4
