@bacnh85/pi-checkpoint

Git-backed undo/redo for Pi — snapshots file state at each turn into a dedicated ref namespace, so /undo rolls back the last message AND its file changes. Fills PI's gap vs OpenCode's git-backed /undo /redo (PI has conversation-level /tree but not file-st

Packages

Package details

extension

Install @bacnh85/pi-checkpoint from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:@bacnh85/pi-checkpoint
Package
@bacnh85/pi-checkpoint
Version
0.1.9
Published
Sep 30, 2026
Downloads
1,335/mo · 49/wk
Author
bacnh85
License
MIT
Types
extension
Size
23 KB
Dependencies
0 dependencies · 0 peers
Pi manifest JSON
{
  "extensions": [
    "./extensions/index.js"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

pi-checkpoint

Git-backed undo/redo for Pi.

Snapshots file state into a dedicated ref namespace at the start of each turn, so /undo rolls back the last message and its file changes together. Fills Pi's gap vs OpenCode's git-backed /undo//redo — Pi has conversation-level /tree//fork//clone but no file-state snapshots tied to turns.

Install

pi install npm:@bacnh85/pi-checkpoint

Commands

Command Description
/undo [n] Restore file state to n turns ago (default 1)
/redo [n] Re-apply file changes after /undo
/checkpoint Show the checkpoint stack for this session

How it works

  • Once per user turn (at the turn's first turn_start), captures the working/index tree via git stash create (which does not touch your stash list) and stores it under refs/pi-checkpoints/<sessionId>/<n>. Continuation rounds within the same turn are not re-snapshotted, and hostless sessions (a2a inbound children) are skipped.
  • /undo pops snapshots into a redo buffer and restores the prior checkpoint with git checkout <ref> -- . (tracked files only; untracked files are left alone).
  • /redo re-applies from the redo buffer.
  • Uses a dedicated ref namespace so it never touches your working refs, branches, or stash.

Requirements

  • The project must be a git repository. Outside a git repo, the commands no-op gracefully with a notification.

Why

Pi's /tree lets you navigate conversation history, but if the agent made 20 edits across 8 files and you want to roll back one message, you'd manually git stash or git checkout — disconnected from the conversation. pi-checkpoint ties file state to turns so /undo is a single command.

Caveats

  • Snapshots are per-session and in-memory; they are not persisted across Pi restarts (the git refs are, but the undo/redo stack resets). After a Pi restart the stack is empty even though ref numbering continues: a resumed session reuses the same sessionId and continues numbering from the highest existing ref (<sid>/<max+1>, so old restore points are never overwritten), but /undo reports nothing until new turns have been snapshotted.
  • Restore is tracked-files-only. Untracked files created during the undone turn remain until you remove them — and tracked files that were added during the undone turn also remain after restore (git checkout <ref> -- . only updates paths tracked at the snapshot; files newly added to the index stay behind). Remove them manually if unwanted.
  • Checkpoint refs are pruned on session_start when older than 30 days (refs/pi-checkpoints/<sid>/<n>, by commit date); older restore points are deleted permanently.

License

MIT