Repository navigation
v0.3.0
Windows support. Nothing about the harness was portable before this: the budget
hook was a shell script, registrations were shell form, and the guardian only
knew POSIX command shapes.
Changed
- The budget hook is now
castra-budget.py. Claude Code runs a shell-form hook
throughsh -con macOS and Linux but through Git Bash on Windows, falling back
to PowerShell when Git Bash is absent, so.shcould not work there. - Hooks register in exec form, spawning the interpreter directly with an
argument vector and no shell in between. This removes shell selection, quoting
and variable expansion from the path entirely. - The installer writes an absolute but deliberately unresolved interpreter path.
Resolving symlinks pinned a version-specific directory such as
.../Cellar/python@3.14/3.14.6/..., which disappears on the next patch upgrade
and takes every hook down without a word.
Added
install.ps1for Windows andinstall.shfor macOS and Linux, both thin
wrappers over a singleinstall.pyso every platform runs identical logic.
--dry-runreports what would change without writing.- PowerShell rules in the guardian: recursive
Remove-Item,Format-Volume,
Clear-Disk,Set-ExecutionPolicy,iwr | iex,Start-Process -Verb RunAs,
service stops, and reading.envwithGet-Content. tests/run.py, so the suite runs without a shell. CI now runs on Linux, macOS
and Windows, and installs into a throwaway config directory on each.