A self-hosted personal AI assistant with multi-user support, topic-based conversations, task management, scheduling, and push notifications — delivered as a PWA.
- LLM-powered chat — conversations backed by Anthropic Claude (or any compatible API)
- Topics — organize conversations into named topics with member management
- Tasks — built-in task/project management via natural language
- Skills — custom per-chat skills that shape assistant behavior
- Scheduling — one-shot reminders and recurring cron-based prompts
- Push notifications — Web Push (VAPID) for real-time alerts
- Smart home — optional LG ThinQ device control
- Web search — optional Brave Search integration
- User profiles — auto-generated user profiles from conversation history
- Admin dashboard — inspect full LLM context for any user or topic chat
- PWA — installable progressive web app with WebSocket live updates
- Minimal dependencies — only 6 direct dependencies to reduce supply chain attack surface
- Go 1.23+
- An LLM API key (Anthropic or compatible provider)
# Install
go install github.com/esnunes/bobot@latest
# Create the first admin user
bobot create-admin <username>
# Configure (see Configuration below)
export BOBOT_LLM_BASE_URL=https://api.anthropic.com
export BOBOT_LLM_API_KEY=sk-ant-...
export BOBOT_LLM_MODEL=claude-sonnet-4-5-20250929
export BOBOT_JWT_SECRET=$(openssl rand -hex 32)
# Run
bobotThe server starts on http://localhost:8080 by default.
All configuration is done through environment variables.
| Variable | Description |
|---|---|
BOBOT_LLM_BASE_URL |
LLM API base URL (e.g. https://api.anthropic.com) |
BOBOT_LLM_API_KEY |
LLM API key |
BOBOT_LLM_MODEL |
LLM model identifier |
BOBOT_JWT_SECRET |
Secret for signing JWT tokens |
| Variable | Default | Description |
|---|---|---|
BOBOT_HOST |
0.0.0.0 |
Server bind address |
BOBOT_PORT |
8080 |
Server port |
BOBOT_BASE_URL |
http://localhost:8080 |
Public-facing base URL |
BOBOT_DATA_DIR |
./data |
Directory for SQLite databases |
BOBOT_SESSION_DURATION |
30m |
Session token lifetime |
BOBOT_SESSION_MAX_AGE |
168h |
Maximum session age |
BOBOT_SESSION_REFRESH_THRESHOLD |
5m |
Session refresh window |
BOBOT_CONTEXT_TOKENS_START |
30000 |
Context window start size (tokens) |
BOBOT_CONTEXT_TOKENS_MAX |
80000 |
Maximum context window (tokens) |
BOBOT_HISTORY_DEFAULT_LIMIT |
50 |
Default message history limit |
BOBOT_HISTORY_MAX_LIMIT |
100 |
Maximum message history limit |
BOBOT_SYNC_MAX_LOOKBACK |
24h |
Max lookback for message sync |
BOBOT_SCHEDULE_TIMEOUT |
5m |
Timeout for scheduled prompt execution |
LOG_LEVEL |
info |
Log level (debug, info, warn, error) |
Generate keys with bobot generate-vapid-keys.
| Variable | Description |
|---|---|
BOBOT_VAPID_PUBLIC_KEY |
VAPID public key (base64url) |
BOBOT_VAPID_PRIVATE_KEY |
VAPID private key (base64url) |
BOBOT_VAPID_SUBJECT |
VAPID subject (mailto: or https: URL) |
| Variable | Description |
|---|---|
BRAVE_SEARCH_API_KEY |
Brave Search API key for web search tool |
THINQ_TOKEN |
LG ThinQ API token |
THINQ_COUNTRY |
ThinQ country code |
THINQ_CLIENT_ID |
ThinQ client ID |
# Start the server
bobot
# Create an admin user
bobot create-admin <username>
# Generate VAPID keys for push notifications
bobot generate-vapid-keys
# Update user profiles from conversation history
bobot update-profiles| Target | Description |
|---|---|
make run |
Run with go run . |
make test |
Run all tests |
make build |
Build for current OS + linux/arm64 |
make deploy |
Build and deploy to remote server via SSH |
make logs |
Tail remote server logs |
The assistant has access to these tools during conversations:
| Tool | Description |
|---|---|
task |
Manage tasks within projects |
topic |
Create, delete, and manage conversation topics and members |
user |
Invite, block/unblock, and list users (admin only) |
skill |
Create, update, delete, and list custom per-chat skills |
remind |
Create one-shot reminders that fire at a specific time |
cron |
Manage recurring scheduled prompts on a cron schedule |
web_search |
Search the web via Brave Search (when configured) |
thinq |
Control LG ThinQ smart home devices (when configured) |
- add support for tuya devices
- add a weather tool
- add a web_fetch tool
- create a alexa skill to send messages to bobot
- improve overall logging
- cover solution with web tests
- use QMD as bobot's memory