# NousResearch/hermes-agent · blocking launchctl-based gateway restart loops on macOS

## Open now

- Nothing open on GitHub.

These issues and fixes address a macOS-specific vulnerability where the gateway lifecycle guard can be bypassed using launchctl submit or similar launchd mechanisms, causing infinite restart loops. The work focuses on detecting and blocking these persistent self-restart paths within the guard.

## TL;DR

- 6 member(s): 0 open issue(s), 1 closed issue(s), 0 open PR(s), 1 merged PR(s), 4 PR(s) closed without merging.
- A fix was merged to main in PR #75972. Verify it addresses your case.
- **Recommended:** read PR #75972 (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-75972`. 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.33`: 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

- #62891: macOS gateway lifecycle guard can be bypassed via launchctl submit, creating an infinite restart loop

## Prior & competing PRs

- **#75972: fix(guard): block launchctl submit/bootstrap and wrapped-script gateway restarts**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `cron/lifecycle_guard.py`, `tests/hermes_cli/test_gateway_restart_loop.py`, `tools/terminal_tool.py`
- **#51003: fix(gateway): block launchd restart helper loops**. closed without merge
  - maintainer direction: category `uncategorized`; implication `needs_llm`; refs `#62891`, `#62891`, `#62891`
- **#62896: fix(gateway): block launchctl submit in the gateway lifecycle guard**. closed without merge
  - maintainer direction: category `uncategorized`; implication `needs_llm`; refs `#75972`, `#63272`, `#62891`
- **#63272: fix: block persistent gateway self-restart jobs**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `#75972`, `#62891`
- **#75557: fix(terminal): block launchctl submit inside gateway**. closed without merge
  - maintainer direction: category `partial_fix`; implication `needs_llm`; refs `9aefd62eba5c`, `#51003`, `#62896`, `#63272`, `#75557`, `#75972`, `#20489`, `#56517`, `#57305`, `#58289`, `#20489`, `#62891`, `#51003`, `#75972`, `#75972`, `#56517`, `#57305`, `#58289`, `#62896`, `#75972`, `#75972`, `#63272`, `#75972`, `#62891`, `#75972`, `#75557`, `#75972`, `#75557`, `#75972`, `#75972`, `#62891`, `#51003`, `#62896`, `#63272`, `#75557`, `#75972`, `#62896`, `#51003`, `#63272`, `#75557`, `#20489`, `#56517`, `#57305`, `#58289`, `#75557`, `#75972`, `#75557`, `#75972`, `#51003`, `#62896`, `#63272`, `#75972`, `#75557`, `#75972`, `#75557`, `#20489`, `#56517`, `#57305`, `#58289`, `#62891`, `#1`, `#1`, `#15803`, `#14532`, `#6`, `#1`, `#9`, `#374151`, `#4338`, `#62891`, `#51003`, `#62896`, `#63272`, `#75557`, `#75972`

## Fix status

- Merged to main in PR #75972 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-08-01`.
- Subsystem: `cron`
