Skip to content

fufu

git that flies itself.

fufu (ff) is an opinionated version control interface for humans and agents: automatic snapshots, effortless branching, whole-repo undo. It is built on ordinary git, so your tools, your teammates, and your remotes all still work.

fufu is version control done the right way:

  • Commits, all the way down. Your working copy is an open commit. There is nothing to stage, nothing to stash, and nothing to track. When you are done making changes, close the current commit and start on the next.
  • Move HEAD, without friction. The working copy stays with the branch. Switch, and the open commit goes with it. When you return, everything is right where it should be.
  • Nothing stops the world. Step back onto any commit and edit it; everything above it rebases on its own. A conflict is just another edit. Walk away from one mid-rebase: switch branches, come back whenever you like.
  • Undo recorded work. Recorded local work is undoable. This is git's reflog for the whole repo — captured mid-commit file edits, a bad merge on top of changes, a hard git reset.
  • First-class agent support. A shipped skill and built-in nudging. Active hooks attempt a snapshot before each supported tool call, letting a sloppy agent reverse its bad decisions.
  • It's still git. Real commits, real branches, an ordinary repository that every tool and teammate reads as one. Worktrees, remotes, hooks, and the rest of git are all still there.

Where to go

  • Install, then ff hook — optional, recommended: it wires the shells and agent clients on this machine, and without it fufu captures only when you type an ff command.
  • The tutorial: the whole loop once, with real transcripts.
  • Already have a repository git made? Adopting fufu is ff init inside it.
  • Deciding whether to switch from plain git: fufu vs git — what disappears, what stays, and what your aliases cannot do.
  • Working alongside people who type git: plain-git teammates — what they see, what typing git yourself does, and what fufu can and cannot do about someone else's force-push.
  • Coming from jj, or wondering why this exists at all: fufu vs jj is the thesis.
  • Pointing an agent at a repository: why agents want fufu and setup.