🤖 DoItAgent — State-of-the-Art AGI · Powered by NVIDIA NIM + Moonshot Kimi 2.5
Control your entire PC from anywhere via Telegram, voice, or Python.
Natural language. 100+ frontier models. 100% free tier. Runs 24/7. Fully autonomous.🟢 Primary AI: NVIDIA NIM — FREE access to Moonshot Kimi 2.5, DeepSeek R1, LLaMA 405B, and 100+ models.
⚡ What is DoItAgent?
DoItAgent is a Python library that turns any computer into an AI-powered agent you can control from anywhere in the world via Telegram. Tell it what to do in plain English — it executes.
from doitagent import Agent
ai = Agent() # auto-loads config
ai.do("take a screenshot and save it to Desktop")
ai.do("find all PDFs in Downloads, zip them, email to me")
ai.do("search for today's AI news and create a Word summary doc")
ai.do("play lofi music on YouTube")
ai.do("what processes are consuming most memory?")
ai.do("create an Excel budget spreadsheet with 3 months of data")
Or message your Telegram bot from your phone — your laptop executes it instantly.
🚀 Quick Start
# Install
pip install doitagent
# Setup (interactive wizard — takes ~3 minutes, NVIDIA NIM is default)
doit setup
# Start the 24/7 Telegram bot
doit start
# Or use the interactive terminal
doit
The wizard walks you through getting a free NVIDIA NIM API key and selecting your model.
🟢 NVIDIA NIM — Primary AI (Free Tier)
Get a free API key at build.nvidia.com and unlock:
| Model | Best For |
|---|---|
| 🌙 Kimi 2.5 (default) | General intelligence, long context, multimodal |
| 🧠 DeepSeek R1 | Complex reasoning, math, science |
| 🦙 LLaMA 3.1 405B | Most capable open model |
| ⚡ Nemotron Super 49B | NVIDIA-optimised, blazing fast |
| 🔢 Qwen 2.5 Coder 32B | Code generation |
| 💡 DeepSeek V3 | Latest frontier model |
doit models # See all 100+ available models
doit switch-model deepseek-r1 # Swap model instantly
📱 Telegram Setup
After doit setup, message your bot from anywhere:
take a screenshot
list files on my Desktop
create a Word doc about AI trends
open Chrome and go to YouTube
run: ipconfig
search for Python news
make an Excel file with my budget
set volume to 60%
zip my Documents folder
say "task complete" out loud
teach skill morning: take screenshot, check email, play music
run morning skill
🧠 Supported LLM Backends
| Backend | Cost | Privacy | Notes |
|---|---|---|---|
| 🟢 NVIDIA NIM ★ | Free tier | API | 100+ models incl. Kimi 2.5, DeepSeek R1 |
| Ollama | Free | 100% local | Runs on your GPU/CPU |
| Anthropic | ~$0.05/task | API | Claude Opus 4 |
| OpenAI | ~$0.05/task | API | sk-... key |
| DeepSeek | ~$0.001/task | API | Key from platform.deepseek.com |
# Ollama (free, local)
ai = Agent.with_ollama("mistral")
# NVIDIA NIM (free tier)
ai = Agent.with_nvidia("nvapi-your-key", model="llama-3.1-70b")
# Anthropic
ai = Agent.with_anthropic("sk-ant-...", model="claude-opus-4-6")
# OpenAI
ai = Agent.with_openai("sk-...", model="gpt-4o")
# DeepSeek
ai = Agent.with_deepseek("your-key")
🔧 12 Capability Modules
ai.screen — See the Screen
ai.screen.screenshot() # Full screenshot → file path
ai.screen.screenshot(region=(0,0,800,600)) # Region screenshot
ai.screen.read_text() # OCR all text on screen
ai.screen.find_text_on_screen("Submit") # → (x, y) coordinates
ai.screen.find_image_on_screen("icon.png") # Template matching
ai.screen.watch_for_change((0,0,300,100), cb) # Monitor region
ai.files — File CRUD
ai.files.create_file("~/Desktop/notes.txt", "content")
ai.files.read_file("~/Desktop/notes.txt")
ai.files.list_folder("~/Desktop", "*.pdf")
ai.files.find_files("*.pdf", "~/Downloads")
ai.files.move("~/Downloads/file.pdf", "~/Documents/")
ai.files.copy("~/file.txt", "~/backup/")
ai.files.trash("~/old.txt") # Recycle bin (safe)
ai.files.zip_folder("~/Project")
ai.files.unzip("~/archive.zip", "~/extracted/")
ai.files.read_json("~/config.json")
ai.files.write_json("~/config.json", {"key": "val"})
ai.browser — Web Browser (Playwright)
ai.browser.open("https://google.com")
ai.browser.goto("https://news.ycombinator.com")
ai.browser.click("text=Sign In")
ai.browser.type_text("input[name='q']", "python")
ai.browser.search_google("best Python books 2024")
ai.browser.get_text() # Full page text
ai.browser.screenshot("page.png", full_page=True)
ai.browser.fill_form({"#email": "me@x.com", "#pw": "pass"})
ai.browser.download_file("https://x.com/file.pdf", "~/file.pdf")
ai.browser.execute_js("return document.title")
ai.shell — Commands & Scripts
ai.shell.run("ipconfig")
ai.shell.run("dir C:/Users")
ai.shell.powershell("Get-Process | Sort CPU -Desc | Select -First 10")
ai.shell.open_app("notepad")
ai.shell.open_app("chrome")
ai.shell.kill_process("notepad.exe")
ai.shell.run_python("~/scripts/process.py", ["--input", "data.csv"])
ai.shell.run_python_code("import math; print(math.pi)")
ai.shell.pip_install("pandas numpy")
ai.kb — Keyboard & Mouse
ai.kb.click(500, 300)
ai.kb.click(500, 300, clicks=2) # Double-click
ai.kb.click_text("OK") # Find & click text on screen
ai.kb.type("Hello World!")
ai.kb.type_fast("Long text goes here...") # Paste method
ai.kb.hotkey("ctrl", "c")
ai.kb.hotkey("ctrl", "shift", "esc") # Task manager
ai.kb.hotkey("win", "d") # Show desktop
ai.kb.press("enter")
ai.kb.scroll(-5) # Scroll down
ai.kb.drag(100, 100, 500, 100)
ai.kb.set_clipboard("Copy this!")
ai.system — Windows System
ai.system.notify("DoItAgent", "Task complete!")
ai.system.list_processes() # → List[dict]
ai.system.kill_process("notepad.exe")
ai.system.get_system_info() # CPU, RAM, disk
ai.system.get_battery()
ai.system.get_network_info()
ai.system.set_volume(70)
ai.system.lock_screen()
ai.system.get_installed_apps()
ai.system.schedule_task("MyTask", "python script.py", "daily")
ai.media — Audio & Video
ai.media.play("C:/Music/song.mp3")
ai.media.play_youtube("lofi hip hop study")
ai.media.play_spotify("Discover Weekly")
ai.media.pause()
ai.media.next_track()
ai.media.set_volume(80)
ai.media.text_to_speech("Task completed!")
ai.media.record_audio(duration=10, save_path="~/recording.wav")
ai.docs — Document Creation
# Word
path = ai.docs.create_word("report.docx", title="Q3 Report",
paragraphs=["Revenue up 20%", "New markets: Asia, Europe"])
ai.docs.add_table_to_word("report.docx",
headers=["Name","Sales"], rows=[["Alice","$50K"]])
# Excel
path = ai.docs.create_excel("data.xlsx",
headers=["Date","Revenue","Units"],
rows=[["Jan",50000,120], ["Feb",62000,155]])
# PDF
path = ai.docs.create_pdf("report.pdf", title="Annual Report",
paragraphs=["Summary paragraph here."])
text = ai.docs.read_pdf("document.pdf")
# CSV
ai.docs.create_csv("export.csv", ["Name","Email"], [["Alice","a@b.com"]])
data = ai.docs.read_csv("export.csv")
ai.db — SQLite Database
ai.db.connect("~/myapp.db") # or ":memory:"
ai.db.create_table("tasks", {
"id": "INTEGER PRIMARY KEY AUTOINCREMENT",
"name": "TEXT NOT NULL",
"done": "INTEGER DEFAULT 0",
"created_at": "TEXT DEFAULT CURRENT_TIMESTAMP",
})
id = ai.db.insert("tasks", {"name": "Buy groceries"})
rows = ai.db.select("tasks")
rows = ai.db.select("tasks", "done = ?", (0,))
ai.db.update("tasks", {"done": 1}, "id = ?", (id,))
ai.db.delete("tasks", "done = 1")
ai.db.execute("SELECT COUNT(*) as total FROM tasks")
ai.db.export_to_csv("tasks", "~/tasks.csv")
ai.search — Web Search & Scraping
results = ai.search.web_search("Python automation 2024", num_results=10)
summary = ai.search.search_and_summarize("latest AI news")
text = ai.search.scrape_page("https://example.com")
links = ai.search.scrape_page("https://example.com", extract="links")
news = ai.search.search_news("artificial intelligence", num_results=5)
page = ai.search.get_page_text("https://docs.python.org", max_chars=5000)
ai.voice — Speech I/O
command = ai.voice.listen() # Listen 5 seconds
command = ai.voice.listen(duration=10)
ai.voice.speak("Task completed successfully!")
text = ai.voice.transcribe_file("~/meeting.mp3")
path = ai.voice.save_speech("Hello", "~/hello.mp3")
voices = ai.voice.list_voices()
ai.email — Send & Read Email
ai.email.configure("me@gmail.com", "app_password")
ai.email.send("boss@company.com", "Report Ready", "See attached.", ["~/report.pdf"])
emails = ai.email.read_inbox(limit=10, unread_only=True)
found = ai.email.search_emails("invoice")
🔗 Advanced Features
Pipelines — Chain tasks
ai.pipeline(
"search the web for top 5 Python frameworks in 2024",
"create a Word document summarizing the results with a comparison table",
"save it to Desktop as python_frameworks_2024.docx",
)
Watch Triggers — React to events
ai.watch(
trigger="CPU usage exceeds 90%",
action="notify me and save a list of top processes to Desktop/cpu_alert.txt",
interval=60,
)
ai.watch(
trigger="new PDF appears in Downloads folder",
action="move it to Documents/PDFs/ and send me a Telegram notification",
interval=15,
)
Schedule Tasks — Time-based automation
ai.schedule("take a screenshot and save with timestamp", "every day at 9am")
ai.schedule("search for AI news and append to ~/daily_news.txt", "every morning at 7am")
ai.schedule("clear old files in ~/Downloads older than 30 days", "every sunday at midnight")
Learn Skills — Reusable workflows
ai.learn(
skill_name="morning_briefing",
description="My morning routine",
steps=[
"take a screenshot of current desktop",
"search the web for today's top tech news",
"create a text file ~/Desktop/briefing.txt with the news",
"say 'Good morning! Your briefing is ready.'",
],
)
ai.do("run morning_briefing skill")
Voice Command Mode
ai.listen() # Speak commands aloud. Say "DoIt stop" to exit.
🛡️ Security
- Safe mode — confirms before deleting files or dangerous actions
- Sandbox — shell commands run in isolated temp directory
- Risk classification — CRITICAL/HIGH/MEDIUM/LOW for every command
- Audit log — every action logged to
~/.doitagent/logs/audit.jsonl - Approval workflow — Telegram bot asks before destructive actions
- User whitelist — only your Telegram user ID can control the bot
- Secrets in keyring — API keys stored in OS keyring, not plain text
🔄 24/7 Daemon
doit start # Start with watchdog (auto-restarts on crash)
doit stop # Stop the daemon
doit status # Check status
Features:
- Automatic restart on crash (configurable max attempts)
- Periodic Telegram heartbeat messages
- Cross-platform: Windows Task Scheduler / Linux systemd / macOS LaunchAgent
- PID file management
- Full crash log
📦 Installation Options
# Minimal
pip install doitagent
# With voice (Whisper STT + pyttsx3 TTS)
pip install doitagent[voice]
# With Windows-specific extras
pip install doitagent[windows]
# Everything
pip install doitagent[all]
🗂️ Project Structure
doitagent/
├── core.py # Agent — the main class
├── config.py # Secure configuration
├── cli.py # CLI (doit command)
├── exceptions.py # Exception hierarchy
├── _version.py
├── agent/
│ ├── executor.py # LLM reasoning loop
│ └── memory.py # Persistent memory
├── llm/
│ └── client.py # Multi-backend LLM client
├── modules/
│ ├── screen.py # Screen vision & OCR
│ ├── files.py # File CRUD
│ ├── browser.py # Playwright automation
│ ├── shell.py # Shell execution
│ ├── keyboard_mouse.py
│ ├── system.py # Windows system
│ ├── media.py # Audio/video
│ ├── documents.py # Word/Excel/PDF
│ ├── database.py # SQLite
│ ├── search.py # Web search
│ ├── voice.py # STT + TTS
│ └── email_mod.py # Email
├── telegram/
│ └── bot.py # Telegram bot
├── security/
│ └── sandbox.py # Sandboxing + audit
├── daemon/
│ └── watchdog.py # 24/7 daemon
└── utils/
├── logger.py # Rich logging
└── installer.py # Auto-install deps
💻 CLI Reference
doit setup # First-time setup wizard
doit start # Start Telegram bot (24/7)
doit stop # Stop daemon
doit status # Show agent status
doit "take a screenshot" # Run a single task
doit # Interactive chat mode
doit listen # Voice command mode
doit run reset # Reset configuration
doit --version # Show version
🤝 Contributing
git clone https://github.com/doitagent/doitagent
cd doitagent
pip install -e .[dev]
pytest tests/
📄 License
MIT License — Free to use, modify, distribute.
Because life's too short to click things yourself.
Metadata
Release files for doitagent 2.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| doitagent-2.1.0.tar.gz | 96.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| doitagent-2.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 195.6 kB
Release files / doitagent-2.1.0.tar.gz
| Download URL | doitagent-2.1.0.tar.gz |
|---|---|
| Size | 96.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
453e35c78b7a7a68da345609c6c34d0813d144df62d630a096563963968efa47
|
|
BLAKE2b-256 checksum How to use checksums |
39752ba1d6581270b0929772431f4971eb6e367c6365406c70c85468dea3061e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.0rc1
|
Release files / doitagent-2.1.0-py3-none-any.whl
| Download URL | doitagent-2.1.0-py3-none-any.whl |
|---|---|
| Size | 99.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7a64ba6d5ac78b7b77032d7872563eb7f635f114bd06af60fcfcae9e4aae4586
|
|
BLAKE2b-256 checksum How to use checksums |
8f68d9737fb51e2e08fe693c7921c98d24793437a910d19b1310995f5cc69bfb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.0rc1
|