Aider's `--yes` flag combined with a git-based loop works honestly better than I expected for this, like it'll just commit and you review the diff. Pi I've tried headless and it's fine but you kinda have to wire up the exit conditions yourself since it's so minimal by design.
Fwiw the janky `claude -p` approach you described is actually pretty solid once you stop fighting it, the simplicity is the feature I think.
Finally found another Aider user to ask. How does Pi compare to it?