UNF*

Your AI agent just rewrote 47 files. You didn't commit.

UNF* recorded every version. Rewind any file to any second.
No commits required.

$ brew install --cask cyrusradfar/unf/unfudged # includes the CLI automatically
$ brew install cyrusradfar/unf/unf $ unf watch
Read the docs

Files disappear between commits.

An AI agent rewrites 47 files. You weren't watching.
You delete the wrong branch. No backup.
A refactor breaks everything. The working version is gone.
You close the editor. It saved over the good version.

Git can't help. You didn't commit.

Ctrl+Z can't help. You closed the editor.

Time Machine can't help. It runs hourly.

UNF* records continuously. Every save, every second.

If your filesystem saw it, UNF* has it.

$ unf watch Watching /Users/dev/myproject (1,247 files) ... AI agent mass-refactors 47 files ... $ unf log src/main.rs --since 30m 14:32:07 +12 -3 before AI touched it 14:32:45 +89 -67 AI refactor (47 files in burst) 14:33:01 +4 -2 AI follow-up change $ unf restore --at 14:32:07 ✓ Restored 47 files to pre-AI state $ unf recap Session: 2h 14m | 847 snapshots | 132 files touched AI Bursts: 2 detected, safety points created

Real commands. Real output.

How it works
01
WATCH

FSEvents on macOS, inotify on Linux. Respects .gitignore. Skips binaries. 3-second smart debounce.

<1% CPU · <100MB RAM

02
STORE

BLAKE3 content hashing. SQLite with ACID guarantees. Content-addressed, so identical files are stored once. Local-only, always.

03
REWIND

Point-in-time restore for any file, any second. Automatic retention decay: 24h full, 7d hourly, 30d daily.

Read the technical deep dive
Commands
unf watchStart recording the current directory
unf unwatchStop recording (history preserved)
unf statusWatcher status + snapshot stats
unf log <file>Timeline of every version of a file
unf diff --at "5m"What changed in the last 5 minutes
unf restore --at TIMERewind files to any point in time
unf cat --at TIMEView file contents at a point in time
unf recapSummarize session activity + context
unf listShow all watched directories
unf pruneClean up old snapshots per retention policy
unf stop / restartControl the background daemon

Time formats

Relative: 5m 1h 2d

Absolute: ISO 8601 timestamps

Global flags

--json — machine-readable output for all commands

--project <PATH> — operate on any project from anywhere

What gets recorded

All text files, recursively. Respects .gitignore. Skips binaries by magic-number detection.

Storage

Everything in ~/.unfudged/. Nothing inside your project directory. Content-deduplicated.

Install
# Install the Desktop App (includes CLI) $ brew install --cask cyrusradfar/unf/unfudged # Update later $ brew upgrade --cask unfudged
# Install the CLI $ brew install cyrusradfar/unf/unf # Update later $ brew upgrade unf

Then: unf watch. That's it.

Fast <1% CPU. You won't notice it.
Local-first No cloud. Nothing leaves your machine.
Free No subscription. No limits.
Secure No accounts. No telemetry. No network.
Use cases