IT DOESN'T SUGGEST PLANS. IT HANDLES THEM.
Quickstart Β· How it works Β· CLI Β· Docs Β· The Colony Β· Discord
Beetlebot is an open-source AI agent that autonomously plans your social life, weekend adventures, travel, and downtime. It reads your calendar, watches the weather, understands the season, knows your budget, learns your taste β and acts. Not a chatbot you talk at. A personal assistant that works for you.
Other tools give you text. Beetlebot gives you your time back.
The first time you wake up to a fully planned weekend you didn't have to think about β that's the moment. This is what AI was supposed to feel like.
- Autonomous by default β Beetlebot doesn't wait for you to ask. It monitors your calendar, checks the forecast, and acts when the moment is right. You set the goal once β it takes it from there.
- Autopilots β goal + trigger + action. "Empty Weekend + Rain" fires Friday at noon and books an indoor plan before you even open your phone.
- Packs β community-built planning skills for your city. Toronto Date Night. Rainy Day Rescue. Cottage Weekend. Install a pack or build your own.
- Modes β Auto picks the best planning type by default, or switch to Explore, Date Night, Family, Social, Travel, Relax, or Focus. Different priorities, different actions, same intelligence.
- Memory β learns your preferences, remembers your history, and gets better over time. Local-first β your data never leaves your machine.
- Multi-channel β talks to you on web chat, Telegram, WhatsApp. Meets you where you already are.
- Soft-holds β proactively reserves time on your calendar, then follows through. No more "I should have booked that."
- Smart guardrails β you control what runs on autopilot and what needs a thumbs-up. Full audit trail on every action.
Telegram / WhatsApp / Web Chat
β
βΌ
ββββββββββββββββββββββββββββββββ
β Beetlebot Runtime β
β Next.js + TypeScript β
β http://localhost:3000 β
ββββββββββββββββ¬ββββββββββββββββ
β
ββββββββββββββΌβββββββββββββββββ
β β β
βΌ βΌ βΌ
Autopilot Plan Memory
Engine Compiler Layer
β β β
βββ Triggers βββ Packs βββ Profile
βββ Schedulerβββ Modes βββ Taste
βββ Runs βββ Soft-holds βββ Logistics
βββ History
β
ββββββββββββββΌβββββββββββββββββ
β β β
βΌ βΌ βΌ
Calendar Weather Guardrails
(Google) (context) (you control)
Runtime: Node >= 18.
git clone https://github.com/richardsondx/beetlebot.git
cd beetlebot
npm install
cp .env.example .env # then fill in your keys (see below)
npm run db:push # push schema to local SQLite
npm run devThat's it. The beetle is alive.
Copy .env.example to .env and configure:
# Required for local dev and self-host
DATABASE_URL="file:./dev.db"
ENCRYPTION_KEY="<generate with: openssl rand -base64 32>"
# Required β at least one AI provider
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
OPENROUTER_API_KEY=sk-or-...Only needed when you want public callbacks/webhooks (OAuth, WhatsApp, Telegram webhooks):
NEXT_PUBLIC_APP_URL="https://xxxx.ngrok-free.app"
BEETLEBOT_BASE_URL="https://xxxx.ngrok-free.app"Recommended model:
- Keep Beetlebot private on the server (
127.0.0.1:48653) - Expose only callback/webhook paths through a local edge (
127.0.0.1:8787) - Tunnel the edge with ngrok (temporary or stable hostname)
This keeps the admin panel off the public internet while still enabling integrations like Google Calendar and WhatsApp.
For the full step-by-step setup (Caddy allowlist, ngrok config, systemd services, and verification), see:
Beetlebot uses SQLite (via Prisma) β zero config, local-first.
npm run db:push # Push schema to local SQLite
npm run prisma:generate # Generate Prisma clientSensitive integration credentials (OAuth tokens, API keys) are encrypted at rest in the database using AES-256-GCM. Generate your key once and keep it in .env:
openssl rand -base64 32
# paste the output as ENCRYPTION_KEY in .envBeetlebot ships with a full CLI and interactive TUI.
npm run cli -- --helpbeetlebot tui # Interactive terminal UI
beetlebot dev # Dev mode
beetlebot autopilot list # List autopilots
beetlebot autopilot run <id> # Run an autopilot
beetlebot pack list # List installed packs
beetlebot pack install <slug> # Install a community pack
beetlebot approvals list # Pending approvals
beetlebot memory list --bucket taste # Inspect memory
beetlebot integrations list # Integration status
beetlebot integrations connect telegram # Connect Telegram
beetlebot svc restart # Restart beetlebot systemd service
beetlebot svc status ngrok # Check ngrok systemd service status
beetlebot svc endpoint # Print active ngrok public URL(s)Launch with beetlebot tui, then use:
| Command | Description |
|---|---|
/help |
Show all commands |
/status |
Session status |
/model set <provider/model> |
Switch AI model |
/autopilots |
List autopilots |
/packs |
Browse packs |
/runs |
Recent autopilot runs |
/approvals |
Pending approvals |
/memory [bucket] |
Inspect memory |
/connect <provider> |
Connect integration |
/new |
New conversation |
/context show |
Toggle context overlay |
TUI keys: Enter submit, Ctrl+K toggle context, Ctrl+L clear, Ctrl+C quit.
Tell the beetle what you care about. It figures out the when, the how, and the follow-through.
"Plan a date night when Saturday is open and weather is good"
β Goal: Date night
β Trigger: Saturday free + clear forecast
β Action: Generate plan, hold calendar, book restaurant
β Result: You wake up Saturday with a plan ready to go
Trigger classes:
- Time triggers β cron-backed schedules (e.g., every Friday at noon).
- Context triggers β reacts to real-world changes (calendar opens up, weather shifts, budget resets).
- Event triggers β lifecycle events (booking fail, RSVP, birthday windows).
Community-curated capability bundles for life planning.
{
"slug": "cottage-weekend-pack",
"name": "Cottage Weekend Pack",
"city": "Muskoka",
"modes": ["family", "relax"],
"budgetRange": "$120-$380",
"description": "Plans cottage weekends with weather fallback, drive buffers, and grocery stop reminders."
}Every city deserves a local expert. Build a pack, share it with the Colony.
Beetlebot remembers everything β your preferences, your history, what worked and what didn't. The more you use it, the better it gets. All stored locally on your machine.
| Bucket | What the beetle learns |
|---|---|
profile_memory |
Who you are, your relationships, hard constraints |
taste_memory |
What you love, what you hate, your vibe |
logistics_memory |
How far you'll drive, your timing, budget defaults |
history_memory |
Past plans, outcomes, what landed and what flopped |
You can inspect, correct, or wipe any memory at any time. Your data, your machine, your rules.
The beetle proactively blocks time on your calendar when it spots an opportunity β then follows through with the full plan. No more "I should've booked that" moments.
Fully managed through the web UI β no env vars needed. Go to Settings, click Connect for Google Calendar, enter your OAuth client ID and secret, then sign in with Google. Beetlebot stores the credentials encrypted in the local database and handles token refresh automatically.
The OAuth callback URL is <your-base-url>/api/integrations/google-calendar/callback β register this in your Google Cloud Console.
# Or via CLI
beetlebot integrations connect google_calendarbeetlebot integrations connect telegram --bot-token <TOKEN>
# Or in TUI: /connect telegram botToken=<TOKEN>beetlebot integrations connect whatsapp --access-token <TOKEN> --phone-number-id <ID>Full REST API for building on top of Beetlebot.
| Area | Endpoints |
|---|---|
| Chat | POST /api/chat |
| Autopilots | GET/POST /api/autopilots, PATCH/DELETE /api/autopilots/:id, POST .../preview, POST .../run |
| Packs | GET/POST /api/packs, POST /api/packs/install |
| Calendar | GET /api/calendar/availability, POST/PATCH/DELETE /api/calendar/soft-holds |
| Memory | GET /api/memory, POST /api/memory/upsert, POST /api/memory/forget |
| Approvals | GET /api/approvals, POST /api/approvals/:id/approve|reject |
| Weather | GET /api/weather/context |
| Integrations | GET/POST /api/integrations/:provider/connect|disconnect|test |
| Scheduler | GET /api/scheduler/jobs, POST /api/scheduler/reconcile |
| Audit | GET /api/audit, GET /api/debug/traces |
| Layer | Tech |
|---|---|
| Framework | Next.js 16 (App Router) |
| Language | TypeScript |
| Styling | Tailwind CSS v4 |
| Database | SQLite via Prisma |
| AI | OpenAI / Anthropic (configurable) |
| Tests | Vitest |
| CLI | Commander + tsx |
| Validation | Zod |
beetlebot/
βββ app/ # Next.js app (pages + API routes)
β βββ (app)/ # App pages (chat, autopilots, calendar, packs, settings)
β βββ api/ # REST API routes
βββ components/ # React components
βββ lib/ # Core runtime modules
β βββ chat/ # Chat engine, safety, research loop
β βββ runtime/ # Autopilot runner + scheduler
β βββ repositories/ # Data access layer
β βββ tools/ # Tool registry (weather, calendar, OpenTable)
β βββ integrations/ # Channel adapters (Telegram, WhatsApp, Google)
β βββ weather/ # Weather service
βββ packages/
β βββ cli/ # CLI + TUI package
β βββ travel-cli/ # Travel planning CLI (Go)
βββ prisma/ # Database schema
βββ docs/ # Architecture + spec docs
βββ tests/ # Test suites
npm run dev # Start dev server
npm run build # Production build
npm run test # Run tests
npm run lint # Lint
npm run typecheck # Type-check
npm run db:push # Push Prisma schemaDeep reference docs live in docs/:
- PRD β product requirements
- Architecture β system design and phases
- Autopilot Runtime β trigger classes, execution guarantees
- Pack Spec β how to build a pack
- Memory Model β buckets, governance, user controls
- Plan Object Schema β the plan contract
- API Routes β full endpoint reference
- CLI β commands, TUI, integration setup
Beetlebot isn't a product with a waitlist. It's a movement with a repo.
The Colony is the community building the autonomous life agent they actually want to use. No corporate roadmap. No feature gates. Just people who believe AI should handle the boring parts of life so you can live the interesting parts.
- Build Packs β create planning skills for your city. Share local knowledge globally. Every city deserves a local expert.
- Shape the roadmap β the best features come from real people with real weekends. Open issues, open PRs, open conversations.
- Fork it. Own it. β open source means your agent, your rules. Self-host it, extend it, make it yours. No vendor lock-in. Ever.
See CONTRIBUTING.md for guidelines.
- Discord β join The Colony
- GitHub Issues β bugs, features, ideas
- GitHub Discussions β questions, show & tell
AI/vibe-coded PRs welcome.
Built by Richardson Dackam (@richardsondx) while Beetlebot handled his weekends.
MIT β the beetle is free. Always.
