Your AI agent just wiped your workspace. You didn't commit.
UNF* recorded every version. Rewind any file to any second.
No commits required.
Open source · MIT / Apache-2.0 · Star us on GitHub
Install in seconds with one command.
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.
Real commands. Real output.
FSEvents on macOS, inotify on Linux. Respects .gitignore. Skips binaries. 3-second smart debounce.
<1% CPU · <100MB RAM
BLAKE3 content hashing. SQLite with ACID guarantees. Content-addressed, so identical files are stored once. Local-only, always.
Point-in-time restore for any file, any second. Manual pruning with unf prune to reclaim space.
| unf watch | Start recording the current directory |
| unf unwatch | Stop recording (history preserved) |
| unf status | Watcher status + snapshot stats |
| unf log <file> | Timeline of every version of a file |
| unf log --since / --until | Filter log to a time range |
| unf diff --at "5m" | What changed in the last 5 minutes |
| unf restore --at TIME | Rewind files to any point in time |
| unf cat --at TIME | View file contents at a point in time |
| unf recap | Summarize session activity + context |
| unf list | Show all watched directories |
| unf prune | Clean up old snapshots per retention policy |
| unf stop / restart | Control the background daemon |
| unf config | Show storage location and disk usage |
| unf config --move-storage | Move storage to a new location |
Relative: 5m 1h 2d
Absolute: ISO 8601 timestamps
--json — machine-readable output for all commands
--project <PATH> — operate on any project from anywhere
All text files, recursively. Respects .gitignore. Skips binaries by magic-number detection.
Defaults to ~/.unfudged/. Move anywhere with unf config --move-storage. Nothing inside your project directory. Content-deduplicated.
Then: unf watch. That's it.
Your AI agent refactored 30 Rust files, hit an error on file 27, and reverted everything to stale versions. Three hours of good work — gone.
The agent decided .env was "generated" and deleted it. API keys, database URLs, local config. Not in git. Not anywhere.
You asked the agent to "clean up build artifacts." It wrote a shell script that rm -rf'd src/ instead of dist/.
The agent removed 6 "unused" crates from Cargo.toml. Four were behind feature flags. CI is red.
The agent ran Prettier with the wrong config and rewrote 200 TypeScript files. It committed before you noticed. git revert gives you one commit. UNF* has every file.
Your hand-crafted SQL seed data and JSON fixtures got overwritten with generic placeholders. A week of edge cases, gone.
The agent saw 47 SQL migration files and decided they were "redundant." Production depends on them running in order.
You squash-merged a feature branch. Git only has the final result. The 40 intermediate versions across 3 days? Git doesn't know they existed.
Context window overflow. The agent crashed 2 hours into a refactor across 4 repos. The new agent needs to pick up exactly where the old one left off.
You left an agent running overnight. It touched 80 files across 3 projects. What did it do?