# NousResearch/hermes-agent · python-olm build breakage on Windows and extras

## Open now

- 2 issues, 2 PRs open on GitHub.
- #62401: \[Bug\]: \[platform.matrix\] Matrix gateway blocked on macOS arm64 with E2EE off — _is_satisfied() ignores the \[encryption\] extra, so a mautrix pin-drift forces an unneeded python-olm build
- #64065: fix(platform.matrix): mark unsupported on macOS so 'hermes update' skips instead of failing
- PR #62433: fix(matrix): split lazy e2ee deps
- PR #93860: fix(matrix): gate only the olm-bound E2EE part to Linux so plaintext Matrix installs on macOS

These issues and fixes relate to python-olm failing to build on Windows due to CMake 4.x incompatibility, with workarounds including skipping lazy refresh, patching CMake policy, and excluding the matrix extra from the \[all\] group.

## TL;DR

- 16 member(s): 2 open issue(s), 4 closed issue(s), 2 open PR(s), 2 merged PR(s), 6 PR(s) closed without merging.
- A fix was merged to main in PR #4615. Verify it addresses your case.
- **Recommended:** read PR #4615 (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: `partially_resolved` · deciding PR(s): `pr-4615,pr-72361`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_PARTIAL`): some members are connected by structural evidence (shared changed files, or a closing/superseded reference); the rest are joined by an automated relevance judgement over their text.
- Members outside that structural core may belong to a different underlying problem.
- Pairwise link density `0.12`: 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.

## Open related issues

- #62401: \[Bug\]: \[platform.matrix\] Matrix gateway blocked on macOS arm64 with E2EE off — _is_satisfied() ignores the \[encryption\] extra, so a mautrix pin-drift forces an unneeded python-olm build
- #64065: fix(platform.matrix): mark unsupported on macOS so 'hermes update' skips instead of failing

## Closed / duplicate issues

- #4178: \[Bug\]: python-olm build fail
- #44404: fix(lazy-deps): active_features() presence-only check causes false-positive activation and unnecessary downgrades
- #58063: \[platform.matrix\] Lazy backend refresh fails on Windows: python-olm source build incompatible with CMake 4.x
- #58458: lazy_deps: shared aiohttp pin marks never-enabled backends active; matrix refresh then fails on Windows (python-olm needs make)

## Prior & competing PRs

- **#4615: fix: exclude matrix from \[all\] extras — python-olm is upstream-broken**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `pyproject.toml`, `tests/test_project_metadata.py`
  - fix hunks:
  - `pyproject.toml`

    ```diff
    @@ -76,7 +76,10 @@ all = [
       "hermes-agent[modal]",
       "hermes-agent[daytona]",
       "hermes-agent[messaging]",
    -  "hermes-agent[matrix]",
    +  # matrix excluded: python-olm (required by matrix-nio[e2e]) is upstream-broken
    +  # on modern macOS (archived libolm, C++ errors with Clang 21+). Including it
    +  # here causes the entire [all] install to fail, dropping all other extras.
    +  # Users who need Matrix can install manually: pip install 'hermes-agent[matrix]'
       "hermes-agent[cron]",
       "hermes-agent[cli]",
       "hermes-agent[dev]",
    ```
  - `tests/test_project_metadata.py`

    ```diff
    @@ -11,8 +11,12 @@ def _load_optional_dependencies():
         return project["optional-dependencies"]
     
     
    -def test_all_extra_includes_matrix_dependency():
    +def test_matrix_extra_exists_but_excluded_from_all():
    +    """matrix-nio[e2e] depends on python-olm which is upstream-broken on modern
    +    macOS (archived libolm, C++ errors with Clang 21+).  The [matrix] extra is
    +    kept for opt-in install but deliberately excluded from [all] so one broken
    +    upstream dep doesn't nuke every other extra during ``hermes update``."""
         optional_dependencies = _load_optional_dependencies()
     
         assert "matrix" in optional_dependencies
    -    assert "hermes-agent[matrix]" in optional_dependencies["all"]
    +    assert "hermes-agent[matrix]" not in optional_dependencies["all"]
    ```
- **#72361: fix(lazy_deps): anchor-gated activation stops phantom backend refreshes**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `contributors/emails/[redacted:email]`, `tests/test_project_metadata.py`, `tests/tools/test_lazy_deps.py`, `tools/lazy_deps.py`
- **#44416: fix(lazy-deps): use version-aware check in active_features() to prevent unnecessary downgrades**. closed without merge
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `#72361`, `#27878`
- **#44461: fix(lazy-deps): use _is_satisfied in active_features() to prevent false-positive activation on transitive installs (#44404)**. closed without merge
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#44416`, `#44404`
- **#58416: fix(matrix): set CMake policy for Windows lazy install**. closed without merge
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `058873805a85c1195afe23159c714c9522484423`
- **#58575: fix(lazy_deps): use sentinel package for active-feature detection**. closed without merge
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#54178`, `#54178`
- **#58652: fix(lazy-deps): detect active features by primary package**. closed without merge
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `#72361`, `#27878`
- **#62433: fix(matrix): split lazy e2ee deps**. open
  - maintainer direction: category `uncategorized`; implication `needs_llm`
  - files: `plugins/platforms/matrix/adapter.py`, `tests/gateway/test_matrix.py`, `tests/gateway/test_matrix_plugin_setup.py`, `tests/tools/test_lazy_deps.py`, `tools/lazy_deps.py`
- **#64078: fix(gateway): hide platform.matrix on macOS too (#64065)**. closed without merge
  - maintainer direction: category `uncategorized`; implication `needs_llm`; refs `#64078`
- **#93860: fix(matrix): gate only the olm-bound E2EE part to Linux so plaintext Matrix installs on macOS**. open
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `#62401`, `#122733`
  - files: `contributors/emails/[redacted:email]`, `hermes_cli/gateway_setup_wizard.py`, `plugins/platforms/matrix/adapter.py`, `pm/extras.py`, `pyproject.toml`, `tests/gateway/test_matrix.py`, `tests/gateway/test_matrix_plugin_setup.py`, `tests/hermes_cli/test_gateway_platform_gating.py`, `tests/pm/test_extras.py`, `website/docs/user-guide/messaging/matrix.md`, `website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/user-guide/messaging/matrix.md`

## Fix status

- Merged to main in PR #4615 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-07-27`.
- Subsystem: `agent`
