본문으로 건너뛰기

© 2026 Molayo

HN요약2026. 05. 22. 04:44

Show HN: Unfucked - 모든 변경 사항 기록 (어떤 도구로든) - 로컬 우선 / 소스 공개

요약

AI 에이전트의 실수나 예기치 못한 파일 변경으로부터 작업물을 보호하기 위한 로컬 우선 버전 관리 도구입니다. Git이나 일반적인 백업과 달리 초 단위로 모든 변경 사항을 지속적으로 기록하여 특정 시점으로 즉시 복구할 수 있습니다.

핵심 포인트

  • 초 단위의 지속적인 파일 변경 사항 기록 및 복구 지원
  • AI 에이전트의 실수로 인한 코드 및 설정 파일 손실 방지
  • SQLite와 BLAKE3를 활용한 효율적인 로컬 저장 및 중복 제거
  • 낮은 리소스 점유율(CPU 1% 미만, RAM 100MB 미만) 및 오픈 소스

당신의 AI 에이전트가 방금 워크스페이스를 날려버렸습니다. 당신은 커밋(commit)을 하지 않았습니다.

UNF*는 모든 버전을 기록했습니다. 어떤 파일이든 원하는 시점으로 되돌리세요.

커밋은 필요 없습니다.

오픈 소스 · MIT / Apache-2.0 · GitHub에서 Star를 눌러주세요.

단 한 번의 명령어로 몇 초 만에 설치하세요.

Git은 도와줄 수 없습니다. 당신이 커밋을 하지 않았으니까요.

Ctrl+Z는 도와줄 수 없습니다. 당신이 에디터를 닫았으니까요.

Time Machine은 도와줄 수 없습니다. 한 시간마다 실행되니까요.

UNF*는 지속적으로 기록합니다. 모든 저장(save), 모든 초(second) 단위로.

파일 시스템(filesystem)이 이를 보았다면, UNF*가 가지고 있습니다.

실제 unf 출력. 컨텍스트 압축(context compaction) 이후의 에이전트 흐름.

macOS에서는 FSEvents, Linux에서는 inotify를 사용합니다. .gitignore를 준수하며, 바이너리(binaries) 파일은 건너뜁니다. 3초 스마트 디바운스(debounce)를 적용합니다.

<1% CPU · <100MB RAM

BLAKE3 콘텐츠 해싱(content hashing). ACID 보장을 제공하는 SQLite. 콘텐츠 주소 지정(Content-addressed) 방식이므로 동일한 파일은 한 번만 저장됩니다. 항상 로컬 전용(Local-only)입니다.

어떤 파일이든, 어떤 초 단위든 특정 시점으로 복구(Point-in-time restore)할 수 있습니다. 공간을 확보하려면 unf prune으로 수동 가지치기(pruning)를 하세요.

| unf watch | 현재 디렉토리 기록 시작 |
| unf unwatch | 기록 중지 (히스토리는 보존됨) |
| unf status | 워처(Watcher) 상태 + 스냅샷 통계 |
| ... |
상대적 시간: 5m (5분)

1h (1시간)

2d (2일)

절대적 시간: ISO 8601 타임스탬프

--json

— 모든 명령에 대해 기계 판독 가능한(machine-readable) 출력

--project <PATH>

— 어디서든 특정 프로젝트에 대해 동작

모든 텍스트 파일을 재귀적으로(recursively) 처리합니다. .gitignore를 준수하며, 매직 넘버(magic-number) 탐지를 통해 바이너리 파일을 건너뜁니다.

기본 저장 위치는 ~/.unfudged/ 입니다.

unf config --move-storage 명령어로 어디로든 이동할 수 있습니다.

프로젝트 디렉토리 내부에는 아무것도 남지 않습니다. 콘텐츠 중복 제거(Content-deduplicated)가 적용됩니다.

그다음: unf watch

. 그게 전부입니다.

당신의 AI 에이전트가 30개의 Rust 파일을 리팩터링(refactored)하다가, 27번째 파일에서 오류가 발생하여 모든 것을 오래된 버전으로 되돌려 버렸습니다. 3시간 동안의 훌륭한 작업이 사라졌습니다.

에이전트가 .env 파일이 "생성된(generated)" 것이라고 판단하여 삭제했습니다. API 키, 데이터베이스 URL, 로컬 설정들이 사라졌습니다. Git에도 없고, 어디에도 없습니다.

당신은 에이전트에게 "빌드 아티팩트(build artifacts)를 정리해줘"라고 요청했습니다. 에이전트는 dist/ 대신 src/rm -rf 해버리는 셸 스크립트를 작성했습니다.

에이전트가 Cargo.toml에서 "사용되지 않는" 6개의 크레이트(crates)를 제거했습니다. 그중 4개는 피처 플래그(feature flags) 뒤에 숨겨져 있었습니다. CI는 빨간불(실패)이 떴습니다.

에이전트(Agent)가 잘못된 설정으로 Prettier를 실행하여 200개의 TypeScript 파일을 다시 작성했습니다. 당신이 알아차리기도 전에 커밋(commit)까지 완료했습니다. git revert는 단 하나의 커밋만 되돌려줍니다. UNF*는 모든 파일을 가지고 있습니다.

당신이 직접 정성스럽게 만든 SQL 시드 데이터(seed data)와 JSON 픽스처(fixtures)가 일반적인 플레이스홀더(placeholder)로 덮어씌워졌습니다. 일주일 동안 공들인 엣지 케이스(edge cases)들이 사라졌습니다.

에이전트가 47개의 SQL 마이그레이션(migration) 파일을 보고 그것들이 "중복"되었다고 판단했습니다. 프로덕션(Production) 환경은 이 파일들이 순서대로 실행되는 것에 의존하고 있습니다.

당신이 기능 브랜치(feature branch)를 스쿼시 머지(squash-merge)했습니다. Git에는 최종 결과물만 남았습니다. 3일 동안 쌓인 40개의 중간 버전들은요? Git은 그것들이 존재했다는 사실조차 모릅니다.

컨텍스트 윈도우(Context window) 오버플로(overflow)가 발생했습니다. 에이전트가 4개의 리포지토리(repos)에 걸친 리팩터링(refactor)을 시작한 지 2시간 만에 충돌(crash)했습니다. 새로운 에이전트는 이전 에이전트가 멈춘 바로 그 지점에서 작업을 이어받아야 합니다.

에이전트를 밤새 실행해 두었습니다. 에이전트는 3개의 프로젝트에 걸쳐 80개의 파일을 건드렸습니다. 도대체 무엇을 한 걸까요?

AI 자동 생성 콘텐츠

본 콘텐츠는 HN OpenAI Codex의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0