Skip to main content

An interactive terminal AI agent you can fully undo — any model, acts on your real files, every action reversible.

Project description

                          _       _
  ___  _ __   ___ _ __   __| | ___ | |_
 / _ \| '_ \ / _ \ '_ \ / _` |/ _ \| __|
| (_) | |_) |  __/ | | | (_| | (_) | |_
 \___/| .__/ \___|_| |_|\__,_|\___/ \__|
      |_|

An interactive terminal AI agent you can fully undo.

CI PyPI Downloads License: MIT

opendot works directly on your real files and shell — but unlike other terminal agents, every action it takes is snapshotted first, so you can see exactly what it did and cleanly walk it back. Files and shell commands, not just in-repo edits. Commands whose effects escape your workspace (network, sudo, git push, deleting outside the working dir) are flagged and confirmed before they run, with an honest note about what can't be undone.

That's the point of opendot: an agent you can let loose because nothing it does is a surprise, and (almost) nothing is irreversible.

Install

# try it instantly, no install
uvx opendot

# recommended (isolated global CLI)
uv tool install opendot        # or: pipx install opendot

# also works
pip install opendot

Use

opendot                              # open an interactive chat
opendot -p "summarize this project"  # one-shot, for scripts / CI
opendot --model claude-sonnet-4-5    # any model (see below)

opendot log                          # audit: what has the agent done here?
opendot undo                         # revert the last action
opendot undo 000004                  # restore the workspace to before action #4

Inside the chat, slash-commands: /log, /undo, /clear, /compact, /model, /help.

Any model

opendot uses LiteLLM, so any model works — cloud, local, or Hugging Face. Set the provider's API key in your environment and pass --model:

Provider Env var Example --model
OpenAI OPENAI_API_KEY gpt-4o
Anthropic ANTHROPIC_API_KEY claude-sonnet-4-5
Google GEMINI_API_KEY gemini/gemini-2.0-flash
Ollama (local) ollama/qwen2.5

Reasoning models stream their thinking live.

Connect MCP servers

opendot is an MCP client: connect any MCP server and its tools become available to the agent alongside the built-in ones.

# a stdio server — put its launch command after `--`
opendot mcp add <name> --env KEY=VALUE -- <command> [args...]

# a remote server (http/sse)
opendot mcp add <name> --url <https url>

opendot mcp list           # show configured servers
opendot mcp remove <name>  # remove one

Servers are stored in ~/.opendot/mcp.json and connect automatically on the next launch; connected servers appear in the sidebar.

Because opendot can't know what an external tool does, every MCP tool call is treated as irreversible — it's confirmed before running and marked ✗ in the ledger. Your built-in file/shell actions stay snapshotted and undoable as usual.

Project rules — OPENDOT.md

Drop an OPENDOT.md in your project. Its prose is given to the agent as context. You can also control what gets snapshotted with an opendot block:

```opendot
# snapshot these even though they'd normally be skipped:
snapshot: dist
# never snapshot these:
skip: data, *.log
```

By default opendot skips .git, node_modules, virtualenvs, and build caches when snapshotting — your rules override those in either direction.

How the reversibility works

  • Before every file write or shell command, opendot snapshots the working directory into a content-addressed store in ~/.opendot (each unique file stored once, so snapshots are cheap).
  • Every action is recorded in an append-only ledger you can inspect with opendot log.
  • opendot undo restores the workspace to a chosen point, exactly.
  • A conservative classifier decides which shell commands are workspace- contained (auto-run, undoable) vs. escaping (confirmed first, marked irreversible). When unsure, it asks.

Honest boundary: opendot cannot undo effects that leave your machine (a sent email, a dropped remote database, a git push). It tells you before running those, rather than pretending otherwise.

Status

Early (alpha). The interactive agent, local tools, and the full reversibility engine work and are tested. Streaming, slash-commands, and OPENDOT.md rules are in. A richer TUI and more tools are coming.

MIT licensed.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

opendot-0.0.1.tar.gz (42.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

opendot-0.0.1-py3-none-any.whl (43.5 kB view details)

Uploaded Python 3

File details

Details for the file opendot-0.0.1.tar.gz.

File metadata

  • Download URL: opendot-0.0.1.tar.gz
  • Upload date:
  • Size: 42.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.6

File hashes

Hashes for opendot-0.0.1.tar.gz
Algorithm Hash digest
SHA256 4226bb03b59325294f4bd39a9aaa1d83e905855b112f2060d8947fe61282eccd
MD5 0d3ed66232c8ae45ec046774272c898f
BLAKE2b-256 689eb16c3da80bf45316f2f39f06226a6a2749c0a4369a1995ce98c987dcbcda

See more details on using hashes here.

File details

Details for the file opendot-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: opendot-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 43.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.6

File hashes

Hashes for opendot-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 59b370a337bed315b1fd6f2136d067fe33d5968c52ea871ee37e2fb741215132
MD5 1238a9b8337db7181f0ab202057399e5
BLAKE2b-256 1d3f58319d85dd9ce51e82c4365d56774bda2dd5c7b438b4f11938ad2f419351

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page