# NousResearch/hermes-agent · User-defined providers Phase 4 implementation and docs cleanup

## Open now

- Nothing open on GitHub.

The three members all refer to 'Phase 4' of user-defined providers: two titles concern implementing it (one mentioning resolution, one mentioning cleanup), and one is a docs change removing a stale 'TODO: Phase 4' note from a get_provider docstring. Titles alone do not show the scope or status of any of these changes.

## TL;DR

- 3 member(s): 0 open issue(s), 1 closed issue(s), 0 open PR(s), 1 merged PR(s), 1 PR(s) closed without merging.
- A fix was merged to main in PR #12902. Verify it addresses your case.
- **Recommended:** read PR #12902 (and any competing PRs below) before filing. Confirm the merged change covers your symptom.

## Maintainer resolution verdict

- Internal-tracker verdict over this cluster's issue members: `resolved` · deciding PR(s): `pr-12902`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_SPANNING`): every member is connected by structural evidence: shared changed files, or a closing/superseded reference.
- Pairwise link density `0.67`: the share of member pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36. `1.00` means every pair is linked.

## Closed / duplicate issues

- #12309: Implement Phase 4 resolution for User-Defined Providers

## Prior & competing PRs

- **#12292: implement user-defined providers (Phase 4) and cleanup**. closed without merge · fix tier `suggested`
  - maintainer direction: category `uncategorized`; implication `needs_llm`; refs `#12309`, `#12902`
  - _suggested-tier fix detail withheld; re-request with `?tier=all` to include it._
- **#12902: docs(providers): drop stale 'TODO: Phase 4' from get_provider docstring**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`
  - files: `hermes_cli/providers.py`
  - fix hunks:
  - `hermes_cli/providers.py`

    ```diff
    @@ -322,12 +322,16 @@ def normalize_provider(name: str) -> str:
     
     
     def get_provider(name: str) -> Optional[ProviderDef]:
    -    """Look up a provider by id or alias, merging all data sources.
    +    """Look up a built-in provider by id or alias.
     
         Resolution order:
           1. Hermes overlays (for providers not in models.dev: nous, openai-codex, etc.)
           2. models.dev catalog + Hermes overlay
    -      3. User-defined providers from config (TODO: Phase 4)
    +
    +    User-defined providers from config.yaml (``providers:`` / ``custom_providers:``)
    +    are resolved by :func:`resolve_provider_full`, which layers ``resolve_user_provider``
    +    and ``resolve_custom_provider`` on top of this function. Callers that need
    +    user-config support should use ``resolve_provider_full`` instead.
     
         Returns a fully-resolved ProviderDef or None.
         """
    ```

## Fix status

- Merged to main in PR #12902 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-04-20`. This confirmation is old and may be out of date (a revert/reopen would not have invalidated it here); re-verify.
