Your AI agent just wiped your workspace. You didn't commit.
UNF* recorded every version. Rewind any file to any second.
UNFUDGED
Diff Raw Cargo.lock @ 6:33 PM
--- 1861 lines hidden ---
@@ -1862,7 +1862,7 @@
18631863[package]
18641864name = "unfudged"
1865version = "0.7.1"
1865version = "0.7.8"
18661866dependencies = [
18671867 "anyhow",
18681868 "assert_cmd",
$ brew install --cask cyrusradfar/unf/unfudged # includes the CLI automatically
$ brew install cyrusradfar/unf/unf $ unf watch
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.
Commands
| 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 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 |
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.
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
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.
$ unf log --since 3h --include "*.rs" --stats $ unf diff --at 10m $ unf restore --at 10m -y
The agent decided .env was "generated" and deleted it. API keys, database URLs, local config. Not in git. Not anywhere.
$ unf log .env $ unf cat .env --at 5m $ unf restore --at 5m .env -y
You asked the agent to "clean up build artifacts." It wrote a shell script that rm -rf'd src/ instead of dist/.
$ unf diff --at 1m $ unf restore --at 2m --dry-run $ unf restore --at 2m -y
The agent removed 6 "unused" crates from Cargo.toml. Four were behind feature flags. CI is red.
$ unf log Cargo.toml --stats $ unf cat Cargo.toml --at 1h $ unf restore --at 1h Cargo.toml -y
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.
$ unf log --since 30m --include "*.ts" --stats $ unf diff --at 30m $ unf restore --at 30m -y
Your hand-crafted SQL seed data and JSON fixtures got overwritten with generic placeholders. A week of edge cases, gone.
$ unf log --include "fixtures/*" --stats $ unf diff --at 20m $ unf restore --at 20m -y
The agent saw 47 SQL migration files and decided they were "redundant." Production depends on them running in order.
$ unf log --include "migrations/*.sql" $ unf diff --at 15m $ unf restore --at 15m -y
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.
$ unf log --since 3d --include "*.py" $ unf diff --from 3d --to 1d $ unf cat app/models.py --at 2d
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.
$ unf recap --global --json $ unf log --sessions --since 2h $ unf diff --session
You left an agent running overnight. It touched 80 files across 3 projects. What did it do?
$ unf log --global --since 8h --stats $ unf diff --at 8h $ unf restore --at 8h --dry-run