Problem
Profile-specific config.yaml files (e.g. ~/.hermes/profiles/scraper/config.yaml) support a model section:
model:
provider: minimax-cn
base_url: https://api.minimaxi.com/anthropic
default: MiniMax-M2.7
The main agent config (~/.hermes/config.yaml) supports fallback_providers as a top-level list:
fallback_providers:
- provider: deepseek
model: deepseek-v4-flash
base_url: https://api.deepseek.com/v1
- provider: openrouter
model: tencent/hy3-preview:free
base_url: https://openrouter.ai/api/v1
However, when kanban dispatcher spawns worker agents via _default_spawn(), those workers (AIAgent instances) are initialized with fallback_model=None, regardless of what is configured in the worker's profile config. The fallback_providers field in a profile config is never read — only gateway/run.py:_try_resolve_fallback_provider() reads fallback_providers from the main config, not from profile-specific configs.
Impact
Workers (e.g. scraper profile agents) have no fallback if their primary provider fails (rate limit, timeout, etc.). The agent simply fails instead of failing over to a backup provider.
Root Cause
In hermes_cli/kanban_db.py:_default_spawn(), workers are spawned as:
hermes -p <profile> --skills kanban-worker chat -q work kanban task <id>
The profile's config.yaml is loaded but only model.provider / model.base_url / model.default are extracted. fallback_providers is never read from the profile config and is not passed to AIAgent.__init__(fallback_model=...).
Additionally, run_agent.py:AIAgent.__init__() accepts fallback_model as a constructor argument, but callers (the hermes CLI entry points) never extract fallback_providers from the active profile config to pass it through.
Expected Behavior
When a worker agent is spawned with hermes -p <profile>, the profile's config.yaml fallback_providers (if present) should be used as the worker's fallback chain, just as the main config's fallback_providers is used for the main agent.
Suggested Fix
In hermes_cli/ where a profile config is loaded and an AIAgent is constructed (e.g. the CLI entry point that handles -p <profile> chat or the kanban dispatcher path), extract fallback_providers from the profile config and pass it as fallback_model=fallback_providers to AIAgent.__init__().
Specifically:
- Profile config loading in the CLI path should also extract
config.get("fallback_providers")
- That value should be passed to the AIAgent constructor as
fallback_model
- This applies to both the interactive CLI path and the kanban worker spawn path
Problem
Profile-specific config.yaml files (e.g.
~/.hermes/profiles/scraper/config.yaml) support a model section:The main agent config (
~/.hermes/config.yaml) supportsfallback_providersas a top-level list:However, when kanban dispatcher spawns worker agents via
_default_spawn(), those workers (AIAgentinstances) are initialized withfallback_model=None, regardless of what is configured in the worker's profile config. Thefallback_providersfield in a profile config is never read — onlygateway/run.py:_try_resolve_fallback_provider()readsfallback_providersfrom the main config, not from profile-specific configs.Impact
Workers (e.g. scraper profile agents) have no fallback if their primary provider fails (rate limit, timeout, etc.). The agent simply fails instead of failing over to a backup provider.
Root Cause
In
hermes_cli/kanban_db.py:_default_spawn(), workers are spawned as:The profile's config.yaml is loaded but only
model.provider/model.base_url/model.defaultare extracted.fallback_providersis never read from the profile config and is not passed toAIAgent.__init__(fallback_model=...).Additionally,
run_agent.py:AIAgent.__init__()acceptsfallback_modelas a constructor argument, but callers (the hermes CLI entry points) never extractfallback_providersfrom the active profile config to pass it through.Expected Behavior
When a worker agent is spawned with
hermes -p <profile>, the profile'sconfig.yamlfallback_providers(if present) should be used as the worker's fallback chain, just as the main config'sfallback_providersis used for the main agent.Suggested Fix
In
hermes_cli/where a profile config is loaded and anAIAgentis constructed (e.g. the CLI entry point that handles-p <profile> chator the kanban dispatcher path), extractfallback_providersfrom the profile config and pass it asfallback_model=fallback_providerstoAIAgent.__init__().Specifically:
config.get("fallback_providers")fallback_model