AI-powered local automation agent โ controlled via Telegram. Manages your whole computer.
Project description
๐๏ธ Doit v2.0 โ Your AI-Powered Computer Butler
Doit runs silently on your machine and executes real OS-level tasks โ controlled through Telegram in plain language. From a developer managing servers to a non-technical user who wants to automate their desktop, Doit understands what you mean and does it.
No GUI. No web dashboard. No daily terminal usage. Just Telegram.
What's New in v2.0
| Category | New in v2.0 |
|---|---|
| Shell | shell_exec โ run any command; repl_python, repl_js โ run code snippets |
| Git | Full git workflow: status, pull, add, commit, push, clone, log, diff, branch |
| Docker | List, start, stop, exec, logs, images |
| Packages | Install/uninstall via apt/brew/pip/npm/cargo/winget (auto-detected) |
| SSH/SFTP | Run commands on remote hosts; upload/download via SCP |
| Desktop | Open apps, desktop notifications, screenshot, clipboard r/w, type text, hotkeys, volume, TTS |
| Dev Tools | Run tests (pytest/jest), lint (ruff/flake8), format (black/prettier), build (make/npm/cargo) |
| Files+ | PDF text extract + merge, image resize/convert, CSV read, JSON query, file hash, QR gen |
| Web | DuckDuckGo search, web page scraping, webhook POST |
| Productivity | Math calculator, translate (LibreTranslate), weather (no key needed), timed reminders |
| Memory | Persistent named facts (remember X is Y, recall later) |
| Notes & Todo | Full CRUD notes (Markdown) and todo list with priorities |
| Secrets | Encrypted keychain โ store API keys, passwords; AI auto-fetches when needed |
| AI Engine | Dynamic tool discovery (prompts always match live tools), multi-turn conversation context |
| Telegram UX | Inline confirm buttons for dangerous ops, voice message support, /tools, /memory, /run, /clear |
Quick Start
pip install doit-fm
doit init
The wizard:
- Trust grant (once)
- AI provider & model selection
- Telegram bot setup
- Auto-start service installation
Then just talk to your bot.
What Doit Can Do
Files & Folders
list files in ~/Downloads
find all .log files older than 7 days and delete them
find duplicates in ~/Pictures
diff requirements.txt with requirements.old.txt
organize my Downloads folder
backup ~/Documents to ~/Backups every day at 9am
System
show system health
what's using the most RAM?
kill process 1234
check battery status
how much disk space is left on /?
Shell / Code
run: ls -la ~/Projects
execute this Python: print(sum(range(100)))
run my tests in ~/myapp
lint the code in ~/myproject
build the project in ~/myapp
Git
git status of ~/myproject
pull the latest code in ~/myrepo
commit everything in ~/myproject with message "fix login bug"
push ~/myproject to origin
show git log for ~/myproject
clone https://github.com/user/repo to ~/Projects
Docker
list all my containers
start the postgres container
show logs for the api container
run "npm test" in the webapp container
list docker images
Packages
install htop
install pandas with pip
uninstall imagemagick
Network & Web
download https://example.com/report.pdf to ~/Desktop
ping google.com
search DuckDuckGo for "python asyncio best practices"
scrape text from https://docs.python.org/3/
send a webhook to https://hooks.zapier.com/... with payload {"event": "deploy"}
check if https://mysite.com is up
Remote (SSH)
run "df -h" on server 192.168.1.100 as ubuntu
upload ~/deploy.tar.gz to user@host:/tmp/
Desktop Automation
open Safari
take a screenshot
read my clipboard
write "Hello World" to clipboard
type this text: "Dear John,"
send notification: Meeting in 5 minutes
set volume to 60
say "your build is complete"
Development
run tests in ~/myproject
lint ~/myproject/src
format code in ~/myproject
build ~/myproject
Productivity
what's the weather in London?
translate "hello world" to Spanish
calculate 15% of 847.50
remind me to take a break in 25 minutes
generate a QR code for https://mysite.com
hash the file ~/important.zip
Memory & Notes
remember that my prod server is 10.0.0.5
what did you remember?
create a note called "meeting notes" with content "..."
list my notes
add todo: review PRs - high priority
list todos
mark done: review PRs
Secrets
store secret GITHUB_TOKEN = ghp_xxxx
get my GITHUB_TOKEN
Architecture
doit/
โโโ cli/ # Bootstrap + onboarding wizard
โโโ core/ # Config, constants, paths
โโโ ai/ # Multi-provider AI engine (dynamic tools, conversation memory)
โโโ telegram_bot/ # Telegram interface (inline buttons, voice, docs, photos)
โโโ tools/ # 70+ tool implementations across 15 categories
โโโ task_engine/ # Async queue, workers, retry, resource guard
โโโ scheduler/ # Natural language + cron scheduler
โโโ security/ # Encryption, auth, injection guard, secret keychain
โโโ persistence/ # SQLite: tasks, schedules, logs, audit, memory
โโโ plugins/ # Dynamic plugin discovery (add your own tools)
โโโ services/ # systemd / LaunchAgent / Windows service
โโโ supervisor/ # Crash recovery + auto-restart
โโโ logging_system/ # Structured logging to file + DB
โโโ updates/ # Safe version updates + rollback
AI Providers
| Provider | Free Tier | Notes |
|---|---|---|
| NVIDIA NIM | โ Llama 3.3 70B | High quality, free |
| Zhipu AI | โ GLM-4 Flash | Fast, free |
| OpenAI | โ | GPT-4o recommended |
| Anthropic | โ | Claude 3.5 Sonnet recommended |
| Ollama | โ All models | Fully offline, privacy-first |
| Custom | Any OpenAI-compatible | Your own endpoint |
Security Model
- Single user โ only your Telegram ID can control Doit
- Encrypted config & secrets โ Fernet symmetric encryption
- Tool sandboxing โ AI can only invoke registered tools
- Injection protection โ pattern-based prompt injection detection
- Dangerous op confirmation โ inline โ /โ buttons before destructive actions
- Path blocklist โ /etc, /boot, /sys, /proc protected
- No inbound ports โ outbound-only to Telegram API
- Full audit trail โ every action logged to SQLite
Plugin API
Drop a .py file in ~/.config/doit/plugins/:
PLUGIN_NAME = "my_plugin"
PLUGIN_VERSION = "1.0.0"
PLUGIN_DOIT_MIN_VERSION = "2.0.0"
PLUGIN_DESCRIPTION = "What this plugin does"
async def my_tool(arg1: str, count: int = 1, **kwargs) -> dict:
return {"result": f"Did {arg1} x{count}", "success": True}
TOOLS = [
("my_tool", "Description of my tool", my_tool, False),
]
Restart Doit. Your tool is now available to the AI โ the system prompt updates automatically.
CLI
doit init # Onboarding wizard
doit run # Start agent
doit update # Check and install updates
doit status # Check if service running
doit uninstall # Remove service + optionally data
Telegram Commands
/status โ Agent status + AI health
/health โ System resources + battery
/tasks โ Recent task history
/logs โ Recent log entries
/tools โ Browse all 70+ available tools
/memory โ View stored facts
/clear โ Reset conversation context
/run <cmd> โ Direct shell command
/safe โ Pause execution
/resume โ Resume execution
/export โ Download audit log (json/csv)
/help โ Full help
Requirements
- Python 3.10+
- A Telegram bot token (free, from @BotFather)
- An AI API key (NVIDIA/Zhipu free, or OpenAI/Anthropic/Ollama)
Optional for full power:
gitfor git toolsdockerfor Docker toolsssh/scpfor remote toolsscrot(Linux) / built-in (macOS/Windows) for screenshotsnotify-send(Linux) for desktop notificationsespeak(Linux) / built-in (macOS/Windows) for TTSxdotool(Linux) for type_text / hotkeys
License
MIT โ free to use, modify, distribute.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file doit_fm-2.0.0.tar.gz.
File metadata
- Download URL: doit_fm-2.0.0.tar.gz
- Upload date:
- Size: 65.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.0rc1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6cf625e00eff392848bc7819ea7c8fecff71fb6176c7dd1716ac1412ce8747ba
|
|
| MD5 |
9207419a939b4131d689a6dacfe9acb2
|
|
| BLAKE2b-256 |
e814fb0431df8f842bb77484be4a5546dc39725e77f074bc593ef4785ff171bb
|
File details
Details for the file doit_fm-2.0.0-py3-none-any.whl.
File metadata
- Download URL: doit_fm-2.0.0-py3-none-any.whl
- Upload date:
- Size: 67.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.0rc1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b7cef0b662c8d13f7ccb3cc72d34e4c0f95f10c3a3f1160f5744d68af21782dd
|
|
| MD5 |
76276bb227b2e8b8dd0531a02b10b34e
|
|
| BLAKE2b-256 |
70b4f44ebf71de9e4a3c9bea83401d9b8819b07a44b60ccbebe8eb08172e4cc5
|