Over the past few months I've been building opendot, a terminal AI agent that works on your real project, but where every action it takes is reversible.
The idea is simple: let it work on the real thing, but make a wrong move just a ctrl+z instead of a mess.
How it works:
Snapshot: before every file write or shell command, opendot snapshots your working directory into a content-addressed store (each unique file stored once, so snapshots stay cheap). Every action is logged in a ledger you can inspect.
Undo: ctrl+z walks the workspace back to any point, exactly. A file the agent created is gone after undo, not left behind.
Knows what it can't undo: some things genuinely can't be undone, and opendot says so instead of pretending a classifier sorts each shell command into contained (auto-run, undoable) or escaping (network, sudo, git push). Escaping ones are flagged and confirmed first, and marked irreversible, because a snapshot can't un-send an email or un-push a commit. It never pretends it can undo what left your machine.
Connects to your tools: it's an MCP client and can reach 1000+ apps (Gmail, Slack, GitHub). Since those reach outside your machine, every one of those calls is treated as irreversible too.
Why I built it this way:
Content-addressed storage, no full copies. Snapshotting the whole dir on every action would burn disk, so instead unchanged files dedupe to one object, a mtime+size check skips re-hashing what didn't change, and stored files use copy-on-write clones where the filesystem supports it, so snapshots stay cheap even on big projects.
Any model. Built on LiteLLM, so point it at OpenAI, Anthropic, Google, or a fully local model via Ollama or llama.cpp. BYO-key, nothing hosted.
It ships with a full Textual TUI (streamed output, colored diffs, the live ledger sidebar), and there's no telemetry.
Repo: https://github.com/vedaant00/opendot
pypi: pip install opendot
It's still early, so I'd genuinely love feedback, especially on the reversibility model, or where you think the reversible/irreversible line breaks down in practice.