model:
  default: MiniMax-M2.7
  provider: minimax
providers: {}
fallback_providers:
- provider: deepseek
  model: deepseek-v4-flash
- provider: openai
  model: gpt-4o-mini
credential_pool_strategies: {}
toolsets:
- hermes-cli
max_concurrent_sessions: null
agent:
  max_turns: 90
  gateway_timeout: 1800
  restart_drain_timeout: 60
  api_max_retries: 3
  service_tier: ''
  tool_use_enforcement: auto
  task_completion_guidance: true
  environment_probe: true
  environment_hint: ''
  coding_context: auto
  gateway_timeout_warning: 900
  clarify_timeout: 600
  gateway_notify_interval: 180
  gateway_auto_continue_freshness: 3600
  image_input_mode: auto
  disabled_toolsets: []
terminal:
  backend: local
  modal_mode: auto
  cwd: .
  timeout: 180
  env_passthrough: []
  shell_init_files: []
  auto_source_bashrc: true
  docker_image: nikolaik/python-nodejs:python3.11-nodejs20
  docker_forward_env: []
  docker_env: {}
  singularity_image: docker://nikolaik/python-nodejs:python3.11-nodejs20
  modal_image: nikolaik/python-nodejs:python3.11-nodejs20
  daytona_image: nikolaik/python-nodejs:python3.11-nodejs20
  container_cpu: 1
  container_memory: 5120
  container_disk: 51200
  container_persistent: true
  docker_volumes: []
  docker_mount_cwd_to_workspace: false
  docker_extra_args: []
  docker_run_as_host_user: false
  persistent_shell: true
  vercel_runtime: node24
web:
  backend: ''
  search_backend: ''
  extract_backend: ''
browser:
  inactivity_timeout: 120
  command_timeout: 30
  record_sessions: false
  allow_private_urls: false
  engine: auto
  auto_local_for_private_urls: true
  cdp_url: ''
  dialog_policy: must_respond
  dialog_timeout_s: 300
  camofox:
    managed_persistence: false
    user_id: ''
    session_key: ''
    adopt_existing_tab: false
    rewrite_loopback_urls: false
    loopback_host_alias: host.docker.internal
checkpoints:
  enabled: true
  max_snapshots: 50
  max_total_size_mb: 500
  max_file_size_mb: 10
  auto_prune: false
  retention_days: 7
  delete_orphans: true
  min_interval_hours: 24
file_read_max_chars: 100000
tool_output:
  max_bytes: 50000
  max_lines: 2000
  max_line_length: 2000
tool_loop_guardrails:
  warnings_enabled: true
  hard_stop_enabled: false
  warn_after:
    exact_failure: 2
    same_tool_failure: 3
    idempotent_no_progress: 2
  hard_stop_after:
    exact_failure: 5
    same_tool_failure: 8
    idempotent_no_progress: 5
compression:
  enabled: true
  threshold: 0.5
  target_ratio: 0.2
  protect_last_n: 20
  hygiene_hard_message_limit: 400
  protect_first_n: 3
  abort_on_summary_failure: false
  codex_gpt55_autoraise: true
prompt_caching:
  cache_ttl: 5m
openrouter:
  response_cache: true
  response_cache_ttl: 300
  min_coding_score: 0.65
bedrock:
  region: ''
  discovery:
    enabled: true
    provider_filter: []
    refresh_interval: 3600
  guardrail:
    guardrail_identifier: ''
    guardrail_version: ''
    stream_processing_mode: async
    trace: disabled
auxiliary:
  vision:
    provider: custom
    model: gpt-4o-mini
    base_url: https://api.openai.com/v1
    api_key: ''
    timeout: 120
    extra_body: {}
    download_timeout: 30
  web_extract:
    provider: auto
    model: ''
    base_url: ''
    api_key: ''
    timeout: 360
    extra_body: {}
  compression:
    provider: auto
    model: ''
    base_url: ''
    api_key: ''
    timeout: 120
    extra_body: {}
  skills_hub:
    provider: auto
    model: ''
    base_url: ''
    api_key: ''
    timeout: 30
    extra_body: {}
  approval:
    provider: auto
    model: ''
    base_url: ''
    api_key: ''
    timeout: 30
    extra_body: {}
  mcp:
    provider: auto
    model: ''
    base_url: ''
    api_key: ''
    timeout: 30
    extra_body: {}
  title_generation:
    provider: auto
    model: ''
    base_url: ''
    api_key: ''
    timeout: 30
    extra_body: {}
    enabled: false
  tts_audio_tags:
    provider: auto
    model: ''
    base_url: ''
    api_key: ''
    timeout: 30
    extra_body: {}
  triage_specifier:
    provider: auto
    model: ''
    base_url: ''
    api_key: ''
    timeout: 120
    extra_body: {}
  kanban_decomposer:
    provider: auto
    model: ''
    base_url: ''
    api_key: ''
    timeout: 180
    extra_body: {}
  profile_describer:
    provider: auto
    model: ''
    base_url: ''
    api_key: ''
    timeout: 60
    extra_body: {}
  curator:
    provider: auto
    model: ''
    base_url: ''
    api_key: ''
    timeout: 600
    extra_body: {}
    enabled: false
  monitor:
    provider: auto
    model: ''
    base_url: ''
    api_key: ''
    timeout: 60
    extra_body: {}
  session_search:
    provider: auto
    model: ''
    base_url: ''
    api_key: ''
    timeout: 30
    extra_body: {}
    max_concurrency: 3
display:
  compact: false
  personality: concise
  resume_display: full
  resume_exchanges: 10
  resume_max_user_chars: 300
  resume_max_assistant_chars: 200
  resume_max_assistant_lines: 3
  resume_skip_tool_only: true
  busy_input_mode: interrupt
  interface: cli
  tui_auto_resume_recent: false
  tui_agents_nudge: true
  bell_on_complete: false
  show_reasoning: false
  streaming: false
  timestamps: false
  final_response_markdown: strip
  persistent_output: true
  persistent_output_max_lines: 200
  inline_diffs: true
  file_mutation_verifier: true
  turn_completion_explainer: true
  show_cost: false
  skin: default
  language: en
  tui_status_indicator: kaomoji
  user_message_preview:
    first_lines: 2
    last_lines: 2
  interim_assistant_messages: true
  tool_progress_command: false
  tool_progress_overrides: {}
  tool_preview_length: 0
  ephemeral_system_ttl: 0
  platforms:
    telegram:
      streaming: true
    discord:
      streaming: false
  runtime_footer:
    enabled: false
    fields:
    - model
    - context_pct
    - cwd
  copy_shortcut: auto
  auto_title: false
  session_titles: false
dashboard:
  theme: default
  show_token_analytics: false
  oauth:
    client_id: ''
    portal_url: ''
  basic_auth:
    username: ''
    password_hash: ''
    password: ''
    secret: ''
    session_ttl_seconds: 0
  public_url: ''
privacy:
  redact_pii: false
tts:
  provider: edge
  edge:
    voice: en-US-AriaNeural
  elevenlabs:
    voice_id: pNInz6obpgDQGcFmaJgB
    model_id: eleven_multilingual_v2
  openai:
    model: gpt-4o-mini-tts
    voice: alloy
  gemini:
    model: gemini-2.5-flash-preview-tts
    voice: Kore
    audio_tags: false
    persona_prompt_file: ''
  xai:
    voice_id: eve
    language: en
    sample_rate: 24000
    bit_rate: 128000
  mistral:
    model: voxtral-mini-tts-2603
    voice_id: c69964a6-ab8b-4f8a-9465-ec0925096ec8
  neutts:
    ref_audio: ''
    ref_text: ''
    model: neuphonic/neutts-air-q4-gguf
    device: cpu
  piper:
    voice: en_US-lessac-medium
stt:
  enabled: true
  provider: local
  local:
    model: base
    language: ''
  openai:
    model: whisper-1
  mistral:
    model: voxtral-mini-latest
  elevenlabs:
    model_id: scribe_v2
    language_code: ''
    tag_audio_events: false
    diarize: false
voice:
  record_key: ctrl+b
  max_recording_seconds: 120
  auto_tts: false
  beep_enabled: true
  silence_threshold: 200
  silence_duration: 3.0
human_delay:
  mode: 'off'
  min_ms: 800
  max_ms: 2500
context:
  engine: compressor
memory:
  memory_enabled: true
  user_profile_enabled: true
  write_approval: false
  memory_char_limit: 2200
  user_char_limit: 1375
  provider: ''
delegation:
  model: ''
  provider: ''
  base_url: ''
  api_key: ''
  api_mode: ''
  inherit_mcp_toolsets: true
  max_iterations: 50
  child_timeout_seconds: 600
  reasoning_effort: ''
  max_concurrent_children: 3
  max_spawn_depth: 1
  orchestrator_enabled: true
  subagent_auto_approve: false
prefill_messages_file: ''
goals:
  max_turns: 20
skills:
  external_dirs: []
  template_vars: true
  inline_shell: false
  inline_shell_timeout: 10
  guard_agent_created: false
  write_approval: false
curator:
  enabled: true
  interval_hours: 168
  min_idle_hours: 2
  stale_after_days: 30
  archive_after_days: 90
  prune_builtins: true
  backup:
    enabled: true
    keep: 5
honcho: {}
timezone: ''
slack:
  require_mention: true
  free_response_channels: ''
  allowed_channels: ''
  channel_prompts: {}
discord:
  require_mention: true
  free_response_channels: ''
  allowed_channels: ''
  auto_thread: true
  thread_require_mention: false
  history_backfill: true
  history_backfill_limit: 50
  reactions: true
  channel_prompts: {}
  dm_role_auth_guild: ''
  server_actions: ''
  allow_any_attachment: false
  max_attachment_bytes: 33554432
  voice_fx:
    enabled: false
    ambient_enabled: true
    ambient_path: ''
    ambient_gain: 0.18
    duck_gain: 0.06
    speech_gain: 1.0
    ack_enabled: true
    ack_phrases:
    - Let me look into that.
    - One moment.
    - Checking on that now.
    - Give me a sec.
    - On it.
whatsapp:
  allowed_users:
  - '*'
  require_mention: true
  group_policy: open
  home_channel_prompt: false
  auto_setup_prompt: false
telegram:
  reactions: false
  channel_prompts: {}
  allowed_chats: 7377499346
  enabled: true
mattermost:
  require_mention: true
  free_response_channels: ''
  allowed_channels: ''
  channel_prompts: {}
matrix:
  require_mention: true
  free_response_rooms: ''
  allowed_rooms: ''
approvals:
  mode: ask
  timeout: 60
  cron_mode: deny
  mcp_reload_confirm: true
  destructive_slash_confirm: true
command_allowlist:
- overwrite system config
- delete in root path
- kill process via pgrep expansion (self-termination)
- hermes update (restarts gateway, kills running agents)
- stop/restart hermes gateway (kills running agents)
- stop/restart system service
- overwrite system file via redirection
- script execution via -e/-c flag
quick_commands: {}
hooks: {}
hooks_auto_accept: false
personalities: {}
security:
  allow_private_urls: false
  redact_secrets: false
  tirith_enabled: true
  tirith_path: tirith
  tirith_timeout: 5
  tirith_fail_open: true
  website_blocklist:
    enabled: false
    domains: []
    shared_files: []
  acked_advisories: []
  allow_lazy_installs: true
cron:
  wrap_response: true
  max_parallel_jobs: null
kanban:
  dispatch_in_gateway: true
  dispatch_interval_seconds: 60
  failure_limit: 2
  worker_log_rotate_bytes: 2097152
  worker_log_backup_count: 1
  orchestrator_profile: ''
  default_assignee: ''
  max_in_progress_per_profile: null
  auto_decompose: true
  auto_decompose_per_tick: 3
  dispatch_stale_timeout_seconds: 14400
code_execution:
  mode: project
tools:
  tool_search:
    enabled: auto
    threshold_pct: 10
    search_default_limit: 5
    max_search_limit: 20
logging:
  level: info
  max_size_mb: 5
  backup_count: 3
  memory_monitor:
    enabled: true
    interval_seconds: 300
model_catalog:
  enabled: true
  url: https://hermes-agent.nousresearch.com/docs/api/model-catalog.json
  ttl_hours: 1
  providers: {}
network:
  force_ipv4: false
gateway:
  strict: false
  media_delivery_allow_dirs: []
  trust_recent_files: true
  trust_recent_files_seconds: 600
streaming:
  enabled: false
  transport: auto
  edit_interval: 0.8
  buffer_threshold: 24
  cursor: " \u2589"
  fresh_final_after_seconds: 60.0
sessions:
  auto_prune: false
  retention_days: 90
  vacuum_after_prune: true
  min_interval_hours: 24
  write_json_snapshots: false
onboarding:
  seen:
    busy_input_prompt: true
  profile_build: ask
updates:
  pre_update_backup: false
  backup_keep: 5
  non_interactive_local_changes: stash
lsp:
  enabled: true
  wait_mode: document
  wait_timeout: 5.0
  install_strategy: auto
  servers: {}
x_search:
  model: grok-4.20-reasoning
  timeout_seconds: 180
  retries: 2
secrets:
  bitwarden:
    enabled: false
    access_token_env: BWS_ACCESS_TOKEN
    project_id: ''
    cache_ttl_seconds: 300
    override_existing: true
    auto_install: true
    server_url: ''
paste_collapse_threshold: 5
paste_collapse_threshold_fallback: 5
paste_collapse_char_threshold: 2000
_config_version: 27
workspace:
  primary: /home/ccuser/hermes-work
  extra_read_only:
  - /home/ccuser/opsman-work
identity:
  name: Hermes
  emoji: "\u26A1"
title_generation:
  enabled: false
  provider: none
  model: ''
media:
  audio_understanding: true
  image_understanding: true
  image_provider: minimax/MiniMax-M2.7
platforms:
  whatsapp:
    extra:
      bridge_port: 3500
mcp_servers:
  airtable:
    command: npx
    args:
    - airtable-mcp-server
    env:
      AIRTABLE_API_KEY: patIQTejsB6G3elZs.f6a42ac8372935a2ec356debd00e7f0e33deb7f28ae6a901e6fbd02a8fe0a20d
    enabled: true
lfcs:
  jobs_root: /home/ccuser/opsman-work/Jobs

# ── 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
