Personal AI assistant. Self-hosted gateway that routes a single Telegram chat (or web panel) into multiple LLM providers, with persistent memory, skills, hooks, and cron.
Compressed from OpenClaw's 1000+ files to ~100 source files while keeping the same architecture: gateway → routing → sessions → providers → tools.
Status: personal project. Use as a reference, fork freely.
- Multi-provider — Anthropic, OpenAI, Google, DeepSeek, Groq, OpenRouter, Together, Fireworks, Moonshot, Ollama. Switch per-route.
- Persistent memory — SQLite + sqlite-vec hybrid search (BM25 + embeddings) with reranking and decay.
- Skills —
SKILL.mddiscovery, auto-trigger via description matching. - Hooks —
HOOK.mdevent dispatch (pre/post turn, on tool call, etc.). - Cron — schedule prompts, persisted to SQLite, parsed via cron-parser.
- Channels — Telegram (grammY), Web panel (Lit 3 + Vite), CLI.
- OpenAI OAuth — login with ChatGPT subscription via Codex flow (
mineclaw login). - Tools — bash, browser (Playwright), web-fetch, memory-search, channel-send.
| Layer | Choice |
|---|---|
| Runtime | Bun (not Node) |
| Language | TypeScript (strict) |
| AI SDK | Vercel AI SDK |
| Telegram | grammY |
| Web | Lit 3.x + Vite |
| DB | bun:sqlite + sqlite-vec |
| Validation | Zod |
| Logging | pino |
| Config | JSON5 at ~/.mineclaw/config.json5 |
bun install
cp .env.example .env # fill provider keys + Telegram token
bun run build
bun run start # runs gatewayWeb panel:
bun run ui:dev # dev
bun run ui:build # prodOpenAI OAuth (use ChatGPT subscription instead of API key):
mineclaw loginSingle source: ~/.mineclaw/config.json5. Hot-reloaded on change.
Env vars override:
ANTHROPIC_API_KEY,OPENAI_API_KEY,GOOGLE_GENERATIVE_AI_API_KEYDEEPSEEK_API_KEY,GROQ_API_KEY,OPENROUTER_API_KEYTELEGRAM_BOT_TOKEN,MINECLAW_TOKEN,MINECLAW_PORT,MINECLAW_HOST
Stored OAuth credentials at ~/.mineclaw/state/auth/openai.json auto-load when OPENAI_API_KEY is unset.
src/
config/ Zod schema, JSON5 loader, hot-reload
gateway/ HTTP + WebSocket server, RPC router, event stream
agents/ Vercel AI SDK runner, tool registry, bootstrap
providers/ Provider registry, model factory
routing/ Session keys, route resolution, bindings
sessions/ JSONL persistence, session manager
channels/ Channel abstraction, message handler
telegram/ grammY adapter, commands, streaming
memory/ SQLite + sqlite-vec, hybrid search, reranking, decay
tools/ bash, browser, web-fetch, memory-search, channel-send
skills/ SKILL.md discovery, built-in skills
hooks/ Event dispatcher, HOOK.md discovery
cron/ Scheduler, SQLite store, executor
auth/ Ed25519 device identity, pairing, rate limiter, OpenAI OAuth
infra/ Logger, paths, env helpers, mDNS
shared/ Errors, typed events, utils
ui/ Lit 3.x web panel (separate package)
OpenClaw — borrowed the architecture, compressed the surface area.