@clementprevot/pi-git-editor-guard
v0.1.2
Published
Pi extension that keeps git from opening an editor in the agent's non-interactive shell
Maintainers
Readme
@clementprevot/pi-git-editor-guard
A Pi extension that keeps git from hanging the coding agent on an editor: commands that would open an interactive TTY editor (rebase --continue after a conflict, a bare commit, an interactive rebase, ...) are rewritten in place with GIT_EDITOR=true so git keeps its prepared message and finishes immediately.
Why
Agents manage rebases all the time, and the classic failure is git rebase --continue after resolving a conflict opens the editor (e.g. VIM) to confirm the commit message. In the agent's non-interactive shell that editor either errors out or, worse, just sits there while the agent waits on a command that will never finish. The fix is well known (GIT_EDITOR=true, which overrides core.editor and EDITOR), but it relies on the model remembering it every single time. This guard makes forgetting impossible.
Install
pi install npm:@clementprevot/pi-git-editor-guardUpdates ship with pi update --extensions. The extension applies to your next session (quit and relaunch or issue a /reload command).
How it works
On every bash tool call, the extension:
- Splits the command chain into subcommands (respecting quotes and preserving the original separators).
- Classifies each one: does this git command open an editor, and is that editor already handled?
- When an editor is missing, prefixes the subcommand in place; the rewritten command is what executes and what the session records.
Covered commands
git rebase --continueand interactive rebases (-i,--interactive):GIT_EDITOR=true, plusGIT_SEQUENCE_EDITOR=truewhen the todo list is involved (--edit-todoneeds only the sequence editor)git commitwithout a message flag (-m,-F,--no-edit,-C, ...) orgit commit --amendalonegit merge, includinggit merge --continuegit cherry-pick --continueandgit revert -egit tag -a/-swithout-m(git then fails fast with a clear "no tag message" error instead of hanging)git noteswithout-m
Left alone
- Commands that already set their own editor:
GIT_EDITOR=,GIT_SEQUENCE_EDITOR=, or-c core.editor=.... An explicit choice is respected, even the one that would hang. - Any command that is not git, including
echo git rebase --continueand comments.
The rewrite is a no-op when git would not have opened an editor anyway (GIT_EDITOR=true on git rebase main changes nothing), so the guard errs on the side of prefixing.
Configuration
None. The rewrite is deterministic, always safe in a non-interactive shell, and needs no user interaction during a rebase.
License
MIT
