Back Original

Show HN: Unfucked - version all changes (by any tool) - local-first/source avail

Skip to content

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

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.

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