opendot: A terminal AI agent that snapshots every action so you can undo it Opendot, a new terminal AI agent that snapshots every action before execution, allows users to undo file edits and shell commands, flagging irreversible operations like network calls or sudo commands. The model-agnostic tool works with any LLM via LiteLLM or local Ollama, supports MCP servers, and is installable via pip or uvx. https://pypi.org/project/opendot/ An interactive terminal AI agent you can fully undo. 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. opendot is model-agnostic — it works with any model through LiteLLM OpenAI, Anthropic, Google, DeepSeek, … and runs fully local via Ollama. Ollama is just the zero-setup local option; use whatever backend you prefer. try it instantly, no install uvx opendot recommended isolated global CLI uv tool install opendot or: pipx install opendot also works pip install opendot opendot open an interactive chat opendot -p "summarize this project" one-shot, for scripts / CI opendot --model claude-opus-4-5 launch with a specific 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: /model searchable model picker , /provider connect a provider + paste an API key , /log , /undo , /clear , /compact , /help . Any model works — cloud, local, or Hugging Face. You need an API key for the provider you want to use opendot is BYO-key; it doesn't host models . Pick a model and paste a key right inside the chat with /model and /provider , or set the key in your environment and pass --model : Provider names link to where you get a key. | Provider | Env var | Example --model | |---|---|---| | OPENAI API KEY gpt-5.1 Anthropic https://console.anthropic.com/settings/keys ANTHROPIC API KEY claude-opus-4-5 GEMINI API KEY gemini/gemini-3-pro DeepSeek https://platform.deepseek.com/api keys DEEPSEEK API KEY deepseek/deepseek-chat Groq https://console.groq.com/keys GROQ API KEY groq/llama-3.3-70b-versatile Hugging Face https://huggingface.co/settings/tokens HF TOKEN huggingface/together/deepseek-ai/DeepSeek-R1 Ollama https://ollama.com local, no key ollama/qwen3 Reasoning models stream their thinking live. Local OpenAI-compatible servers llama.cpp / llama-server , vLLM, LM Studio : point opendot at the server with --api-base and an openai/ -prefixed model. e.g. llama.cpp: llama-server -m model.gguf --port 8080 opendot --model openai/local --api-base http://localhost:8080/v1 Which model runs. The default is gpt-5.1 . If its key OPENAI API KEY isn't set but another provider's key is, opendot automatically switches to that provider on launch — e.g. with only DEEPSEEK API KEY set, a bare opendot uses deepseek/deepseek-chat . If no provider key is found, opendot starts fine but the first message shows a hint to set a key or run /provider rather than a raw provider error . ollama/ models need no key — just a local Ollama. opendot is an MCP https://modelcontextprotocol.io client: connect any MCP server and its tools become available to the agent alongside the built-in ones. Manage them from inside the chat with /mcp a dropdown of your servers and their status, with "➕ Add a server" , or from the command line: a stdio server — put its launch command after -- opendot mcp add