{"repo":"NousResearch/hermes-agent","public_id":"23362","display_label":"Passing profile fallback_providers config to agents (oneshot, kanban)","summary":"The members concern fallback_providers from profile config not reaching agents: one issue reports kanban worker agents not inheriting it, and two pull requests with near-identical titles propose passing it to AIAgent in oneshot. Whether the kanban and oneshot cases share a cause is not established by the titles alone.","subsystem":"hermes_cli","counts":{"members":3,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":28409,"merged_at":"2026-05-19T03:37:24+00:00"},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-05-19T03:37:24+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.6666666666666666},"fix_edges":[{"issue_number":23362,"pr_number":28409,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-05-19T03:37:24+00:00"}],"members":[{"kind":"issue","number":23362,"title":"Profile config fallback_providers not inherited by kanban worker agents","url":null,"state":"closed"},{"kind":"pr","number":23368,"title":"fix(oneshot): pass fallback_providers from profile config to AIAgent","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#28409","number":28409}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":28409,"title":"fix(oneshot): pass fallback_providers from profile config to AIAgent (#23368)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["hermes_cli/oneshot.py"],"fix_hunks":[{"file":"hermes_cli/oneshot.py","hunks":["@@ -301,6 +301,14 @@ def _run_agent(\n         toolsets_list = sorted(_get_platform_tools(cfg, \"cli\"))\n \n     session_db = _create_session_db_for_oneshot()\n+    # Read fallback chain from profile config — supports both the new list\n+    # format (fallback_providers) and the legacy single-dict (fallback_model).\n+    # Mirrors the same normalization in cli.py so oneshot workers (e.g. kanban\n+    # workers spawned via `hermes -p <profile> chat -q ...`) honour the\n+    # profile's fallback chain just like interactive sessions do.\n+    _fb = cfg.get(\"fallback_providers\") or cfg.get(\"fallback_model\") or []\n+    if isinstance(_fb, dict):\n+        _fb = [_fb] if _fb.get(\"provider\") and _fb.get(\"model\") else []\n \n     agent = AIAgent(\n         api_key=runtime.get(\"api_key\"),","@@ -313,6 +321,7 @@ def _run_agent(\n         platform=\"cli\",\n         session_db=session_db,\n         credential_pool=runtime.get(\"credential_pool\"),\n+        fallback_model=_fb or None,\n         # Interactive callbacks are intentionally NOT wired beyond this\n         # one.  In oneshot mode there's no user sitting at a terminal:\n         #   - clarify  → returns a synthetic \"pick a default\" instruction\n"]}]}],"trust":{"default_tier":"verified","includes_suggested":false}}