# NousResearch/hermes-agent · Windows cron scheduler bash path mangling issues

## Open now

- 3 issues, 6 PRs open on GitHub.
- #23404: fix(cron): bash script path mangled by backslash escaping on native Windows
- #46332: \[Windows\] Cron jobs with .sh scripts fail because WSL bash is picked over Git Bash + backslashes get eaten by MSYS"
- #62514: Windows: .sh/.bash cron jobs fail with exit 127 (backslash path collapsed by git-bash)
- PR #23405: fix(cron): use POSIX paths for bash scripts on native Windows
- PR #23489: fix(cron): normalize bash script paths on Windows
- PR #44350: fix(cron): use path.as_posix() for .sh scripts on Windows
- PR #46364: fix(cron): prefer Git Bash and POSIX paths on Windows (#46332)
- PR #99470: fix(cron): fail-closed WSL bash and MSYS script argv on Windows
- PR #103066: fix(cron): prefer Git Bash over the WSL launcher for .sh cron scripts on Windows

These issues and PRs concern a recurring problem where cron jobs running shell scripts on Windows receive mangled backslash paths when passed to bash (Git Bash, MSYS, or WSL), causing exit 127 errors. Multiple fix attempts explore POSIX path conversion, bash resolver selection, and MSYS argv conversion as potential approaches.

## TL;DR

- 19 member(s): 3 open issue(s), 4 closed issue(s), 6 open PR(s), 0 merged PR(s), 6 PR(s) closed without merging.
- No fix has been merged to main; one or more PRs were attempted (see below).
- **Recommended:** review the prior/competing PR(s) below. A fix was attempted but not merged; your case may extend or revive that work.

## Maintainer resolution verdict

- Internal-tracker verdict over this cluster's issue members: `unresolved`. 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.11`: 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

- #23404: fix(cron): bash script path mangled by backslash escaping on native Windows
- #46332: \[Windows\] Cron jobs with .sh scripts fail because WSL bash is picked over Git Bash + backslashes get eaten by MSYS"
- #62514: Windows: .sh/.bash cron jobs fail with exit 127 (backslash path collapsed by git-bash)

## Closed / duplicate issues

- #43073: Bug: .sh cron scripts fail on Windows - bash receives mangled backslash paths
- #60857: \[Bug\]: Windows cron scheduler loses backslashes in script paths (C:\\Users → C:Users)
- #62148: bug: cron scheduler breaks Windows paths with shlex.split
- #65317: fix: no_agent cron .sh scripts fail on Windows — MSYS/Git bash mangles the backslash script path (exit 127 'No such file or directory')

## Prior & competing PRs

- **#43076: fix(cron): pass shell scripts to bash with POSIX paths**. closed without merge · fix tier `suggested`
  - maintainer direction: category `uncategorized`; implication `needs_llm`
  - _suggested-tier fix detail withheld; re-request with `?tier=all` to include it._
- **#23405: fix(cron): use POSIX paths for bash scripts on native Windows**. open
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#77393`, `#23404`, `#65317`, `#43073`, `#77393`
  - files: `cron/scheduler.py`
- **#23489: fix(cron): normalize bash script paths on Windows**. open
  - maintainer direction: category `superseded_by_pr`; implication `superseded`; refs `#77393`, `#52204`, `#77393`, `#23404`, `#65317`, `#43073`, `#52204`, `#47920`, `#50191`, `#46364`, `#47837`, `#77393`
  - files: `cron/scheduler.py`, `tests/cron/test_scheduler.py`
- **#43281: fix(cron): pass shell scripts to bash with forward slashes**. closed without merge
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#43076`
- **#44350: fix(cron): use path.as_posix() for .sh scripts on Windows**. open
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#77393`, `#77393`
  - files: `cron/scheduler.py`, `tests/cron/test_cron_no_agent.py`
- **#46364: fix(cron): prefer Git Bash and POSIX paths on Windows (#46332)**. open
  - maintainer direction: category `partial_fix`; implication `needs_llm`; refs `#43073`, `#46364`
  - files: `cron/scheduler.py`, `tests/cron/test_cron_no_agent.py`, `tests/tools/test_blocked_command_guidance.py`, `tools/approval.py`
- **#64257: fix(cron): pass Git Bash-friendly paths for Windows .sh jobs**. closed without merge
  - maintainer direction: category `superseded_by_pr`; implication `superseded`; refs `#23405`, `#23405`
- **#77393: fix(cron): pass Git-Bash-safe script path to bash on Windows (.sh exit 127 class)**. closed without merge
  - maintainer direction: category `superseded_by_pr`; implication `superseded`; refs `#77393`, `#23405`, `#23405`, `#77393`, `#77532`, `#23405`, `#23405`, `#77393`, `#77393`, `#23405`, `#77393`, `#77532`, `#77393`, `#23405`
- **#77532: fix(cron): resolve bash for .sh jobs via shared Windows-aware resolver (#46332)**. closed without merge
  - maintainer direction: category `uncategorized`; implication `needs_llm`
- **#99470: fix(cron): fail-closed WSL bash and MSYS script argv on Windows**. open
  - maintainer direction: category `uncategorized`; implication `needs_llm`
  - files: `cron/scheduler.py`, `tests/cron/test_cron_script.py`
- **#103066: fix(cron): prefer Git Bash over the WSL launcher for .sh cron scripts on Windows**. open
  - maintainer direction: category `uncategorized`; implication `needs_llm`
  - files: `cron/scheduler_script.py`, `tests/cron/test_cron_script.py`
- **#105217: fix(cron): prefer shared Git Bash resolver for .sh jobs on Windows**. closed without merge
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#77532`

## Fix status

- No merged fix on record.
- Subsystem: `cron`
