A personal assistant that helps you stay consistent.
Kest lives in Telegram. It keeps track of your workouts, meals, sleep and focus, checks in at the right moments, and talks to you like a steady friend: warm, direct, never preachy. Behind the chat it can read and send email, work with Notion, and connect to hundreds of other tools through a plugin system.
Status: early development. Phases 1 and 2 are largely built: Kest answers text and voice notes in Telegram (owner-only), keeps history and memory in SQLite, runs a persistent scheduler, sets reminders, keeps a task list, reads web pages, and asks before doing anything risky. Phase 3 added the coach: habits, a daily rhythm, a notification budget and a sleep model. Email and Notion integrations come next. See the roadmap.
- Built around consistency, not streaks. Missing a day does not reset your progress or trigger guilt. Kest uses research-backed methods (tiny habits, if-then plans, autonomy-supportive coaching) and a gentle "never miss twice" rule. See the coaching approach.
- Knows your rhythm. It estimates your sleep from how you use the chat and from simple check-ins, then times its messages around it and respects quiet hours. See sleep modeling.
- Talks like a person. Not formal, not slangy. See the voice guide.
- Modular and careful. Every integration is a plugin with a manifest and a risk level. Anything that sends data out or deletes needs your tap on a button, and content from the internet can never talk Kest into acting. Built-in plugins are compiled in; MCP servers are planned. See plugins and security.
- Easy to host. One static Go binary, one data folder, SQLite inside. Ships with a Pterodactyl egg. See deployment.
You ──▶ Telegram ──▶ Kest ──▶ OpenRouter (general / transcription / tts models)
│
├──▶ Coach engine (habits, sleep model, check-ins)
├──▶ Scheduler (persistent, timezone-aware, quiet hours)
└──▶ Plugins (Gmail, SMTP, Notion, MCP servers, ...)
Full design: architecture overview and file structure.
You need a Telegram bot token from @BotFather, an OpenRouter API key, and your numeric Telegram user ID.
export KEST_TELEGRAM_TOKEN=123456:abc
export KEST_OPENROUTER_API_KEY=sk-or-...
export KEST_OWNER_ID=123456789
go run ./cmd/kestConfiguration reference: docs/guides/configuration.md. Example files: config.example.toml and .env.example.
- Pterodactyl: import
egg-kest.jsonfrom the latest release (or the file in this repo). Guide: docs/deployment/pterodactyl.md. Versioning: docs/guides/releasing.md. - Docker: see deploy/docker/Dockerfile.
| Area | Where |
|---|---|
| Conventions for contributors and AI agents | AGENTS.md |
| Roadmap | docs/roadmap.md |
| Architecture | docs/architecture/ |
| Research notes and sources | docs/research/ |
| Architecture decision records | docs/decisions/ |
| Voice and persona | docs/persona/ |
| Guides | docs/guides/ |
make check # format check, vet, lint, tests
make build # builds ./bin/kestRequires Go (version pinned in go.mod) and golangci-lint. Read AGENTS.md before contributing.
Kest is single-user and self-hosted. Your data stays in your data directory. Messages are sent to OpenRouter and to the services you connect, and nowhere else. See security.
Kest is a habit and scheduling aid. It does not diagnose, treat or give medical guidance. Talk to a professional about health concerns.