@clementprevot/pi-git-editor-guard
Pi extension that keeps git from opening an editor in the agent's non-interactive shell
Package details
Install @clementprevot/pi-git-editor-guard from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@clementprevot/pi-git-editor-guard- Package
@clementprevot/pi-git-editor-guard- Version
0.1.3- Published
- Oct 13, 2026
- Downloads
- 428/mo · 16/wk
- Author
- cooly
- License
- MIT
- Types
- extension
- Size
- 10.5 KB
- Dependencies
- 0 dependencies · 1 peer
Pi manifest JSON
{
"extensions": [
"./index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
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-guard
Updates 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