Contributor summary: Test the Windows workflow on a real Windows machine and document or fix what you find. Clear test notes are useful even when something does not work. (Difficulty: medium)
Context
Two files handle Windows: the loop runner harness/ralph.ps1 (the PowerShell twin of ralph.sh), and the bit of harness/cli.py that decides which of the two to run:
launcher = (
["powershell.exe", "-NoProfile", "-File", str(loop_dir / "ralph.ps1")]
if IS_WINDOWS # support windows with twin script
else [str(loop_dir / "ralph.sh")]
)
GitHub CI runs the Windows tests, but nobody has ever run an actual loop on a real Windows machine. So we don't know if it works. That's all this issue is: find out, and write down what you find.
You need a Windows box and an agent CLI you're already logged into. That's it.
What to try
Please report your Windows version and PowerShell version ($PSVersionTable), then work through these.
1. A normal run
Two iterations, one minute each. Check that the agent actually receives the prompt, that RALPH_ITERATION is set for each pass, that a log file appears under scratchpad\runs\, and that it finishes cleanly instead of hanging.
2. The script directly, with awkward arguments
powershell.exe -NoProfile -File harness/ralph.ps1 2 1 claude -p --model "some model with spaces"
Quoting and spaces are where PowerShell usually bites. Try flags, quoted strings, and arguments containing spaces.
3. A worker that fails
Point it at a command that exits nonzero. The exit code should come back out of harness run, and the next iteration should not start. A loop that keeps going after a failure is the worst outcome here.
4. A real commit through the hooks
Let an agent make a small change and commit it. Confirm RALPH_LOOP=1 is set and the gate actually runs. This is the one that matters most — if the hooks don't fire on Windows, none of the protection exists there.
Also worth checking, if you have the patience
harness configure-agents (cli.py:537) writes settings into ~/.claude/settings.json and ~/.codex/config.toml. Those paths should be fine on Windows, since Python's Path.home() knows about %USERPROFILE%, but nobody has watched it happen. Run it and check RALPH_LOOP=1 really landed in both files, and that it made the .bak backup first.
The part I'd worry about more is the deny rules in CLAUDE_RULES. They match on the text of a bash command:
"Bash(*git commit*--no-verify*)",
If Claude Code runs commands through PowerShell on Windows instead of bash, patterns like that may match nothing at all — and containment would quietly stop working. No error, no warning, just absent. That's a bigger deal than the loop runner, so if you can test it, please do.
And an honest question nobody here knows the answer to: does Codex CLI run natively on Windows, or is it WSL only? If it's WSL only, that's worth writing down.
Two things we already know are broken on Windows
Don't waste time rediscovering these:
Optional
Fixes to ralph.ps1 and its test, test_ralph_ps1.py.
Done when
- Any PowerShell-version or argument-passing problem is either fixed or written down.
- Either a small Windows smoke test lands, or the docs say what works and what doesn't.
"I tried this and it doesn't work on Windows" is a perfectly good result. We would much rather document a real limitation than leave people guessing. A comment with your version numbers and what broke is a genuine contribution on its own.
How to contribute
Leave a short comment with your plan before coding. Keep changes focused, add or update tests, and run the checks in CONTRIBUTING.md. This is agentic developer tooling; pull requests from Python, Rust, and generalist contributors are welcome.
Contributor summary: Test the Windows workflow on a real Windows machine and document or fix what you find. Clear test notes are useful even when something does not work. (Difficulty: medium)
Context
Two files handle Windows: the loop runner
harness/ralph.ps1(the PowerShell twin ofralph.sh), and the bit ofharness/cli.pythat decides which of the two to run:GitHub CI runs the Windows tests, but nobody has ever run an actual loop on a real Windows machine. So we don't know if it works. That's all this issue is: find out, and write down what you find.
You need a Windows box and an agent CLI you're already logged into. That's it.
What to try
Please report your Windows version and PowerShell version (
$PSVersionTable), then work through these.1. A normal run
Two iterations, one minute each. Check that the agent actually receives the prompt, that
RALPH_ITERATIONis set for each pass, that a log file appears underscratchpad\runs\, and that it finishes cleanly instead of hanging.2. The script directly, with awkward arguments
Quoting and spaces are where PowerShell usually bites. Try flags, quoted strings, and arguments containing spaces.
3. A worker that fails
Point it at a command that exits nonzero. The exit code should come back out of
harness run, and the next iteration should not start. A loop that keeps going after a failure is the worst outcome here.4. A real commit through the hooks
Let an agent make a small change and commit it. Confirm
RALPH_LOOP=1is set and the gate actually runs. This is the one that matters most — if the hooks don't fire on Windows, none of the protection exists there.Also worth checking, if you have the patience
harness configure-agents(cli.py:537) writes settings into~/.claude/settings.jsonand~/.codex/config.toml. Those paths should be fine on Windows, since Python'sPath.home()knows about%USERPROFILE%, but nobody has watched it happen. Run it and checkRALPH_LOOP=1really landed in both files, and that it made the.bakbackup first.The part I'd worry about more is the deny rules in
CLAUDE_RULES. They match on the text of a bash command:"Bash(*git commit*--no-verify*)",If Claude Code runs commands through PowerShell on Windows instead of bash, patterns like that may match nothing at all — and containment would quietly stop working. No error, no warning, just absent. That's a bigger deal than the loop runner, so if you can test it, please do.
And an honest question nobody here knows the answer to: does Codex CLI run natively on Windows, or is it WSL only? If it's WSL only, that's worth writing down.
Two things we already know are broken on Windows
Don't waste time rediscovering these:
sleepwon't catch PowerShell'sStart-Sleep(see Stop agents from sleeping — they should work while long commands run #59).ralph.shhasralph.ps1.Optional
Fixes to
ralph.ps1and its test,test_ralph_ps1.py.Done when
"I tried this and it doesn't work on Windows" is a perfectly good result. We would much rather document a real limitation than leave people guessing. A comment with your version numbers and what broke is a genuine contribution on its own.
How to contribute
Leave a short comment with your plan before coding. Keep changes focused, add or update tests, and run the checks in CONTRIBUTING.md. This is agentic developer tooling; pull requests from Python, Rust, and generalist contributors are welcome.