100% Private · Runs Locally · Multi-Platform · Zero Cloud
Chat with your own AI on Telegram, Discord, WhatsApp, and Slack — no data ever leaves your machine.
git clone https://github.com/DaveSimoes/CrustAI.git
cd CrustAI && npm install && npm startEvery AI assistant you use today sends your conversations to a cloud server. Your questions, your context, your data — all stored externally.
CrustAI is different. It runs entirely on your own machine using Ollama, meaning:
| Without CrustAI | With CrustAI |
|---|---|
| Conversations logged on cloud servers | Conversations stay on your machine |
| Data used to train external models | Zero data collection, ever |
| Requires paid API keys | 100% free, uses local models |
| One platform (e.g., only ChatGPT web) | Works on Telegram, Discord, WhatsApp, Slack |
| Internet required | Works fully offline |
| 🔒 100% Private | Every message stays on your device. No telemetry, no external APIs, no logs |
| 🧠 Powered by Ollama | Use llama3.2, mistral, phi3, tinyllama and any model you choose |
| 📱 4 Platforms, 1 Bot | Connect to Telegram, Discord, WhatsApp, and Slack simultaneously |
| 🧬 Long-Term Memory | Your assistant remembers facts about you across sessions |
| 🗣️ Voice Support | Speak and listen — fully offline voice mode (pt-BR) |
| ⚡ REST API | Integrate CrustAI into your own tools and workflows |
| 🎭 Personality Config | Give your assistant a custom name, tone, and identity |
| 🐳 Docker Ready | One-command deployment for servers and home labs |
| 🌐 Bilingual | Full English + Portuguese support out of the box |
- Node.js ≥ 20.0
- Ollama installed and running
- A platform token (e.g., Telegram Bot Token from @BotFather)
# 1. Clone the repository
git clone https://github.com/DaveSimoes/CrustAI.git
cd CrustAI
# 2. Install dependencies
npm install
# 3. Start Ollama and pull a model
ollama serve
ollama pull tinyllama # lightweight — 600MB, works on any machine
# or
ollama pull llama3.2 # more powerful — 2GB, recommended 8GB RAM
# 4. Configure
cp config/config.example.yml config/config.yml
# Edit config/config.yml with your platform tokens
# 5. Launch CrustAI
npm startEdit config/config.yml:
model: tinyllama # or llama3.2, phi3, mistral...
ollama_url: http://localhost:11434
language: en # or pt-BR
telegram:
enabled: true
token: YOUR_BOT_TOKEN_HERE
allowed_user_ids: [] # leave empty to allow all users
discord:
enabled: false
token: ""
whatsapp:
enabled: false
slack:
enabled: false
voice:
enabled: false
port: 8765| Command | Description |
|---|---|
/ping |
Check if the bot is alive |
/help |
Show all available commands |
/model |
Display which AI model is currently running |
/remember <fact> |
Store a fact in long-term memory |
/forget |
Erase all stored facts |
/clear |
Clear conversation history |
Messaging Platforms (Telegram / Discord / WhatsApp / Slack)
│
▼
┌─────────────────────┐
│ Message Orchestrator│
└────────┬────────────┘
│
┌──────────┴──────────┐
▼ ▼
┌─────────────┐ ┌──────────────┐
│ Ollama LLM │ │ Memory Store │
│ (local) │ │ (sql.js) │
└─────────────┘ └──────────────┘
│ │
└──────────┬──────────┘
▼
┌─────────────┐
│ REST API │
│ (Fastify) │
└─────────────┘
Design principle: Adapter boundaries make it trivial to add new messaging platforms without touching the core conversation logic.
- Adapters — Each platform (Telegram, Discord, WhatsApp, Slack) has its own isolated adapter. Messages are normalized into a unified format before reaching the orchestrator.
- Orchestrator — Receives messages, applies personality config, queries the LLM, and manages conversation context.
- Ollama LLM — Runs any compatible model locally. No network calls. No rate limits. No billing.
- Memory Store — Persists user-defined facts in a local SQLite database, available across sessions.
- REST API — Exposes endpoints for integrating CrustAI into custom tools, automations, and dashboards.
| Technology | Purpose |
|---|---|
| Node.js | Runtime environment |
| Ollama | Local LLM inference engine |
| node-telegram-bot-api | Telegram integration |
| @whiskeysockets/baileys | WhatsApp integration |
| discord.js | Discord integration |
| @slack/bolt | Slack integration |
| Fastify | REST API server |
| sql.js | Embedded database for memory |
| yaml | Configuration management |
crustai/
├── src/
│ ├── core/
│ │ ├── index.js # Main orchestrator
│ │ ├── llm.js # Ollama LLM client
│ │ └── commands.js # Command handler
│ ├── adapters/
│ │ ├── telegram/ # Telegram bot
│ │ ├── discord/ # Discord bot
│ │ ├── whatsapp/ # WhatsApp bot
│ │ └── slack/ # Slack bot
│ ├── memory/
│ │ └── store.js # Long-term memory (SQLite)
│ ├── personality/
│ │ └── prompt.js # System prompt builder
│ ├── voice/
│ │ └── server.js # Offline voice WebSocket server
│ └── api/
│ └── server.js # REST API
├── config/
│ ├── config.yml # Your config (git-ignored)
│ ├── config.example.yml # Template
│ └── personality.yml # Assistant personality
├── demo/
│ ├── terminal.gif
│ ├── ping.gif
│ └── chat.gif
└── data/ # Local database (git-ignored)
CrustAI was built with privacy as its core principle — not as a feature, but as a hard technical constraint:
- ✅ All conversations stay on your machine
- ✅ No API keys sent to external AI providers
- ✅ No telemetry, usage tracking, or analytics
- ✅ No accounts, no sign-up, no terms-of-service surprise
- ✅ Fully open source — inspect every single line
- ✅ Your data. Your models. Your rules.
| Model | Size | Best For |
|---|---|---|
tinyllama |
~600MB | Low-end machines, quick replies |
phi3 |
~2GB | Balanced performance |
llama3.2 |
~2GB | General purpose, highly capable |
mistral |
~4GB | Strong reasoning and coding |
llama3 |
~4GB | High quality conversations |
Any model available on ollama.ai can be used.
- Telegram integration
- Discord integration
- WhatsApp integration
- Slack integration
- Long-term memory
- REST API
- Bilingual support (EN / PT-BR)
- Web UI dashboard
- Docker one-click deployment
- Image understanding (multimodal LLMs)
- Plugin system for custom tools
- Mobile app companion
Contributions are very welcome! Please read CONTRIBUTING.md before opening a PR.
# Fork the repository, then:
git checkout -b feature/your-feature
git commit -m "feat: add your feature"
git push origin feature/your-feature
# Open a Pull Request"Connection refused" on Ollama — Make sure Ollama is running: ollama serve
Bot not responding on Telegram — Double-check your token in config/config.yml and that the bot was started with /start.
High memory usage — Switch to a lighter model like tinyllama. Edit model: in config/config.yml.
WhatsApp keeps disconnecting — WhatsApp Web sessions expire. Restart CrustAI to regenerate the QR code.
CrustAI é um assistente de IA totalmente privado e auto-hospedado que roda inteiramente na sua própria máquina — nenhum dado sai do seu computador. Conecta-se ao Telegram, WhatsApp, Discord e Slack com o poder de modelos de linguagem locais, sem depender de nenhum provedor externo.
| Funcionalidade | Descrição |
|---|---|
| 🔒 100% Privado | Todos os dados ficam na sua máquina. Sem nuvem, jamais |
| 🧠 LLM Local | Powered by Ollama — llama3.2, tinyllama, mistral e muito mais |
| 📱 Multi-Plataforma | Telegram, WhatsApp, Discord, Slack — um só assistente |
| 🧬 Memória Longa | Lembra fatos sobre você entre conversas |
| 🗣️ Voz Offline | Fala e escuta sem internet (pt-BR) |
| ⚡ REST API | Integre o CrustAI em qualquer fluxo de trabalho |
| 🎭 Personalidade | Configure nome, tom e comportamento do assistente |
# 1. Clone o repositório
git clone https://github.com/DaveSimoes/CrustAI.git
cd CrustAI
# 2. Instale as dependências
npm install
# 3. Inicie o Ollama e baixe um modelo
ollama serve
ollama pull tinyllama
# 4. Configure o projeto
cp config/config.example.yml config/config.yml
# Edite config/config.yml com seu token do Telegram
# 5. Inicie o CrustAI
npm startDave Simoes — Developer passionate about AI, privacy, and open source.
- 🐙 GitHub: @DaveSimoes
- 💼 LinkedIn: Dave Simoes
MIT — see LICENSE for details.
Made with 🦀 and ❤️ by Dave Simoes

