# NousResearch/hermes-agent · DaemonThreadPoolExecutor compatibility fixes for Python 3.14

## Open now

- 2 issues, 1 PR open on GitHub.
- #59896: \[Bug\] DaemonThreadPoolExecutor breaks on Python 3.14 — parallel tool calls fail with AttributeError
- #63769: bug(delegation): saturated child pool crashes synchronous fallback with missing _initializer
- PR #95364: fix(tools): DaemonThreadPoolExecutor compatibility with Python 3.14

Multiple reports and proposed fixes for DaemonThreadPoolExecutor breaking on Python 3.14 due to internal ThreadPoolExecutor changes, specifically the removal or restructuring of the _initializer attribute and _worker signature.

## TL;DR

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

- #59896: \[Bug\] DaemonThreadPoolExecutor breaks on Python 3.14 — parallel tool calls fail with AttributeError
- #63769: bug(delegation): saturated child pool crashes synchronous fallback with missing _initializer

## Closed / duplicate issues

- #58596: DaemonThreadPoolExecutor crashes on Python 3.14: \`_initializer\` attribute removed

## Prior & competing PRs

- **#112209: fix(tools): daemon pool spawns workers on Python 3.14 (#58596, #111813, salvage #111814)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `contributors/emails/[redacted:email]`, `contributors/emails/[redacted:email]`, `tests/tools/test_daemon_pool.py`, `tools/daemon_pool.py`
- **#58598: fix(tools): adapt DaemonThreadPoolExecutor for Python 3.14 _worker signature**. closed without merge
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#57459`, `#57459`
- **#58699: fix(daemon-pool): support Python 3.14 _worker signature change (#58596)**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `4432bccea8`, `#112209`
- **#59157: fix(daemon_pool): guard against missing _initializer attr on Python 3.14**. closed without merge
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#57459`, `#57459`, `#58598`, `#57459`, `#47634`
- **#59897: fix(tools): DaemonThreadPoolExecutor Python 3.14 compatibility**. closed without merge
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#57459`, `#57459`, `#57459`, `#59897`, `#59896`, `#58596`
- **#63777: fix(daemon_pool): handle missing initializer in _adjust_thread_count**. closed without merge
  - maintainer direction: category `superseded_by_pr`; implication `superseded`; refs `#57459`, `#57459`, `#57459`
- **#63780: fix(daemon_pool): support Python 3.14 ThreadPoolExecutor WorkerContext signature**. closed without merge
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#57459`
- **#65182: fix(daemon_pool): support CPython 3.14 ThreadPoolExecutor internals**. closed without merge
  - maintainer direction: category `superseded_by_pr`; implication `superseded`; refs `#58699`, `#58699`, `#58699`
- **#72955: fix(tools): spawn daemon workers with the 3.14 worker context**. closed without merge
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#65182`, `#57459`
- **#76756: fix(tools): support Python 3.14 worker context in DaemonThreadPoolExecutor (#76621)**. closed without merge
  - maintainer direction: category `superseded_by_pr`; implication `superseded`; refs `#65182`, `#70873`, `#61224`, `#63780`, `#63777`, `#76621`, `#58596`
- **#95364: fix(tools): DaemonThreadPoolExecutor compatibility with Python 3.14**. open
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#65182`
  - files: `tools/daemon_pool.py`

## Fix status

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