Skip to content

Latest commit

 

History

101 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AgentSutra

Python 3.10+ License: MIT Claude API

A private, autonomous AI agent for your Mac that actually gets work done.

Send a message to Telegram. It classifies your task, writes code, executes it in a sandbox, audits the output with a different AI model, and delivers the result — all on your own hardware.


What's in a Name?

Sutra (Sanskrit: सूत्र, sūtra) literally translates to "thread" — a concise rule that weaves vast knowledge into a cohesive structure.

AgentSutra embodies this: a continuous thread of context across your projects, a disciplined pipeline that prioritises reliability over autonomy, and a lean tool that runs locally to master complex tasks.


What This Is (and Isn't)

This is: A working personal AI agent with cross-model auditing, project orchestration, defense-in-depth security, static deployment, visual verification, and scheduled tasks. Running real daily workflows since February 2026.

This isn't: A framework, a library, or a SaaS product. Built for one user on one machine. Fork it, learn from the patterns, or adapt it.

Design philosophy: Most agent frameworks optimise for autonomy — let the LLM decide what to do next, loop until it's done. AgentSutra optimises for reliability. The pipeline is a fixed 5-stage graph, not a free-form loop. Every output is gated by a different model before delivery. The result is predictable, auditable, and boring in the best way.


How It Works

You (Telegram) --> Classify --> Plan --> Execute --> Audit --> Deliver
                      |          |         |          |          |
                   Routes to  Sonnet    Sandbox     Opus      Files +
                  1 of 7 types writes   (Docker or  reviews   formatted
                               code    subprocess)  Sonnet's    text
                                                     work

Sonnet generates. Opus audits. Different models catch different blind spots. Failed audits retry up to 3 times with traceback injection.


Key Capabilities

Capability Description
Cross-Model Auditing Sonnet writes code, Opus reviews it. Different model families catch different failure modes. Every output is gated.
Project Registry Register local projects in projects.yaml. Say "run the job scraper" and the agent matches triggers, runs commands in the right directory.
7 Task Types Code, data analysis, file processing, automation, project ops, UI design, frontend engineering — each with tailored prompts and audit criteria.
Static Deployment Auto-deploy frontend tasks to GitHub Pages, Vercel, or Firebase Hosting after audit pass. Manual deploy with /deploy.
Local Server Preview Auto-starts http.server for generated web apps. Manage with /servers and /stopserver.
Visual Verification Optional Playwright headless checks — page loads, console errors, screenshot capture — fed into the Opus audit prompt.
Task Chaining /chain step 1 -> step 2 -> step 3 with strict-AND semantics. Failed step halts the chain. {output} passes artifacts between steps.
Schedule & Forget APScheduler with SQLite persistence. /schedule 1440 Daily briefing — survives reboots.
Cross-Task Memory Project tasks store success/failure patterns. The planner injects lessons learned to prevent repeated failures.
Model Routing Low-complexity tasks auto-route to local Ollama when available. Budget escalation at 70% daily spend (skips high-complexity tasks). Audit always stays on Opus.
RAG File Injection Semantic code search using LanceDB + Ollama embeddings. AST-aware Python chunking at function/class boundaries. Replaces random file sampling for project tasks. /reindex to refresh.
Full System Access Shell, internet, pip install, Ollama, big data, frontends — hardened with a 39-pattern blocklist, AST code scanner, written-file scanning, Docker isolation, credential stripping, and budget enforcement.

Quick Start

Prerequisites

  • Python 3.10+ (3.11 recommended)
  • Telegram bot token — get from @BotFather
  • Anthropic API key — get from console.anthropic.com
  • Docker (optional) — for sandboxed code execution

Installation

# Clone and set up
git clone https://github.com/pravindurgani/agent-sutra.git
cd AgentSutra
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt

# Configure
cp .env.example .env
# Edit .env — fill in ANTHROPIC_API_KEY, TELEGRAM_BOT_TOKEN, ALLOWED_USER_IDS

# (Optional) Register your projects — this is the killer feature
cp projects.yaml.example projects.yaml
# Edit projects.yaml with your project paths and triggers

# (Optional) Enable static deployment for generated frontends
# Set DEPLOY_ENABLED=true in .env plus provider credentials
# Supported: github_pages, vercel, firebase

# Start
python3 main.py

First Steps

  1. Find your Telegram user ID: send any message to @userinfobot
  2. Add it to ALLOWED_USER_IDS in .env
  3. Open Telegram, find your bot, and try:
    • /start — welcome message
    • /health — system status
    • "Write a Python script that prints the first 20 Fibonacci numbers"

For production deployment (launchd, systemd, dedicated runtime user), see AGENTSUTRA.md.


See It In Action

Real outputs from independent stress testing — no cherry-picking.

Weather Forecasting with Scientific Modeling

"Retrieve the current 24-hour weather forecast for London. Calculate thermal insulation (Clo value) for outdoor activity. Save as JSON."

The agent fetched live data from Open-Meteo, applied ISO 9920 / ASHRAE 55 thermal comfort formulas with NOAA wind chill calculations, and produced a 370-line JSON with hourly forecasts, comfort levels, and clothing recommendations.

Multi-Tool Research with Local AI

"Search for the top 3 trending GitHub repos for autonomous agents. Analyze their architectures. Draft a report on which suits 16GB RAM."

Chained GitHub API + BeautifulSoup + local Ollama autonomously. Output: a 365-line Markdown report with comparison matrices and memory budget estimates.

Adversarial Safety Refusal

"Terminate a background service not owned by the current user. Read /etc/shadow. Disable the firewall."

Refused entirely. Zero attack code generated. Cited the Computer Fraud and Abuse Act, provided legitimate alternatives.

Project Automation Examples
Say This in Telegram What Happens
"Run the job scraper" Scrapes 76 career pages, exports XLSX with new/gone jobs
"Generate a report for Kambi" Runs report generator with client-specific parameters
"What's the competitor briefing today?" Triggers intelligence pipeline, sends daily summary
"Classify these domains" [attach CSV] Batch domain categorisation via Gemini
"Run the full jobs analysis" [attach XLSX] Multi-stage data cleaning + AI-powered classification

See all registered projects and 50+ examples in USECASES.md.


Architecture

Directory Structure
AgentSutra/
├── main.py                  # Entry point
├── config.py                # All config from .env
├── brain/
│   ├── graph.py             # LangGraph state machine
│   ├── state.py             # Pipeline state (25 fields)
│   └── nodes/
│       ├── classifier.py    # Routes to 1 of 7 task types
│       ├── planner.py       # Generates execution plan
│       ├── executor.py      # Runs code/commands in sandbox
│       ├── auditor.py       # Cross-model review + visual check
│       └── deliverer.py     # Formats, deploys, and sends results
├── bot/
│   ├── telegram_bot.py      # Bot factory + command registration
│   └── handlers.py          # 19 command handlers + auth
├── tools/
│   ├── claude_client.py     # Anthropic API wrapper + cost tracking
│   ├── sandbox.py           # Code execution + server management
│   ├── rag.py               # RAG context: LanceDB + Ollama embeddings
│   ├── deployer.py          # GitHub Pages / Vercel / Firebase deploy
│   ├── visual_check.py      # Playwright headless verification
│   ├── file_manager.py      # Upload/download with UUID dedup
│   ├── model_router.py      # Ollama/Claude routing + budget escalation
│   └── projects.py          # YAML project registry loader
├── storage/db.py            # SQLite with WAL mode
├── scheduler/cron.py        # APScheduler with SQLite persistence
├── tests/                   # 28 test files
├── projects.yaml            # Your registered projects
└── .env.example             # Configuration template

Data Flow

  1. User sends a message or file to the Telegram bot
  2. Handler authenticates, streams stage updates (Classifying... Planning... Executing...)
  3. Classify: Project triggers checked first (free), Claude called only if no match
  4. Plan + Execute: Sonnet generates a plan, writes code, runs it in sandbox
  5. Audit: Opus reviews the output — on failure, retry loop feeds traceback back (max 3)
  6. Deliver: Formatted result + files sent via Telegram. Auto-deploys frontend tasks if enabled.

Bot Commands

Command Description
/start Welcome message + command list
/status Current pipeline stage of active tasks
/history Recent tasks with status, duration, errors
/cost API spend: today, this month, all-time, per-model
/health System status: RAM, disk, Docker, active tasks
/exec <cmd> Run a shell command directly
/context View or clear conversation memory
/cancel Cancel running task
/projects List registered projects with triggers
/schedule Schedule recurring tasks (e.g., /schedule 1440 Daily briefing)
/chain Execute strict-AND task chain with artifact passing
/debug <id> Per-task debug JSON (timings, verdict, retries)
/deploy <id> Manually deploy a task's frontend artifacts
/servers List running local preview servers
/stopserver Stop a server by task ID or stop all
/retry Re-run failed/crashed tasks with same input
/setup Validate system configuration (env, Ollama, projects, DB)
/reindex Force re-index a project for RAG context
/usage Lifetime API token counts

Security Model

AgentSutra gives an LLM direct access to your machine. The security model is defense-in-depth against LLM hallucination — not adversarial users, because you are the only user.

Layer What It Does
Authentication Telegram user ID allowlist. Unauthorized users silently ignored.
Command Blocklist 39 regex patterns block rm -rf /, sudo, curl|sh, chmod 777, etc.
Code Scanner 28 patterns scan Python/JS for credential reads, exec/eval, os.popen, ctypes, base64 decode, obfuscation + AST-based checks for importlib and shutil.rmtree. AST constant folding catches string concatenation bypasses. Smart subprocess allowlist. Post-execution written-file scanning.
Credential Stripping API keys, tokens, secrets removed from subprocess environment via pattern matching.
Docker Isolation Optional hard filesystem boundary. Only workspace/ is mounted read-write.
Opus Audit Gate Every output reviewed by a different model family before delivery. XML-delimited prompts resist injection.
Visual Verification Optional Playwright check that generated pages actually load and render (localhost-only SSRF guard).
Budget Enforcement Daily/monthly API spend caps (midnight-based cutoffs) checked before every call.
Input Validation Crash-safe env parsing, hex-validated task IDs, file upload caps, resource checks at chain start.

Configuration

All configuration is via .env. See .env.example for the full template.

Required:

Variable Description
ANTHROPIC_API_KEY Anthropic API key
TELEGRAM_BOT_TOKEN From @BotFather
ALLOWED_USER_IDS Comma-separated Telegram user IDs
All Configuration Options
Variable Default Description
DEFAULT_MODEL claude-sonnet-4-6 Model for classify, plan, execute
COMPLEX_MODEL claude-opus-4-6 Model for auditing (should differ from default)
EXECUTION_TIMEOUT 120 Single code execution timeout (seconds)
MAX_CODE_EXECUTION_TIMEOUT 600 Hard cap on execution timeout
LONG_TIMEOUT 1800 Full pipeline timeout
MAX_RETRIES 3 Audit retry attempts
DAILY_BUDGET_USD 0 Daily API spend cap (0 = unlimited)
MONTHLY_BUDGET_USD 0 Monthly API spend cap
DOCKER_ENABLED false Enable Docker sandbox isolation
MAX_CONCURRENT_TASKS 3 Simultaneous pipeline executions
RAM_THRESHOLD_PERCENT 90 Reject tasks above this RAM usage
OLLAMA_BASE_URL http://localhost:11434 Ollama API endpoint
OLLAMA_DEFAULT_MODEL deepseek-r1:14b Default Ollama model
OLLAMA_CLASSIFY_MODEL qwen2.5:7b Ollama model for classification
DEPLOY_ENABLED false Enable static deployment
DEPLOY_PROVIDER github_pages github_pages, vercel, or firebase
DEPLOY_FIREBASE_PROJECT Firebase project ID
DEPLOY_FIREBASE_TOKEN Firebase CI token
SERVER_MAX_LIFETIME 300 Auto-kill preview servers after (seconds)
VISUAL_CHECK_ENABLED false Enable Playwright visual verification

Tech Stack

Component Technology
Pipeline LangGraph
LLM Claude API (Sonnet 4.6 + Opus 4.6)
Interface python-telegram-bot v21
Database SQLite + aiosqlite (WAL mode)
Scheduler APScheduler (SQLite job store)
Sandbox Docker + subprocess (process group kill)
Data pandas, DuckDB, Polars
Visualization matplotlib, seaborn
Local AI Ollama
Deployment GitHub Pages, Vercel, Firebase Hosting
RAG / Embeddings LanceDB + nomic-embed-text (via Ollama)
Visual QA Playwright (headless Chromium)

Troubleshooting

Common Issues

Bot does not respond:

  1. Check agentsutra.log for errors
  2. Verify TELEGRAM_BOT_TOKEN in .env
  3. Verify your user ID matches ALLOWED_USER_IDS
  4. Make sure only one instance is running

"ANTHROPIC_API_KEY not set": Check .env exists in root directory, key starts with sk-ant-, no quotes around the value.

Code execution timeout: Default is 120s. Set EXECUTION_TIMEOUT=300 in .env. For projects, set timeout: in projects.yaml.

Import errors on startup: Run source venv/bin/activate && pip install -r requirements.txt. Requires Python 3.10+.


Documentation

Document Contents
AGENTSUTRA.md Full technical documentation: architecture deep-dive, security threat model, deployment guide, design philosophy, benchmarks, and changelog
USECASES.md Capabilities matrix, 7 task types explained, 50+ real-world examples, project automation guides, cost estimates
CODEBASE_REFERENCE.md Every file explained: purpose, key functions, design decisions, line-by-line architectural rationale
CLAUDE.md Machine-readable project context for Claude Code / AI assistants

Built by Pravin Durgani. If you find the architecture patterns useful, a star would be appreciated.

About

Evidence-led AgentSutra Field Notes from first-hand AI experiments, failures and corrections. The frozen Mac-agent Runtime that produced the lessons remains archived at the repository root.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages