An OpenSource AI agent that speaks your language. Memory that's shared.
Send a voice note in Urdu, Hindi, or Arabic — your whole family or team benefits. Open source, self-hosted, free to run.
| Feature | ClewMind | ChatGPT | Discord bots | Hermes Agent |
|---|---|---|---|---|
| Voice-first (hold to speak) | ✅ | ❌ | ❌ | ❌ |
| Shared team memory | ✅ | ❌ | ❌ | Partial |
| Non-English native | ✅ Urdu/Arabic/Hindi | English-first | English-first | English-first |
| Works on WhatsApp | ✅ | ❌ | ❌ | ❌ |
| Self-hosted, no subscription | ✅ | ❌ | ❌ | Partial |
| Mobile-first web UI | ✅ | Partial | ❌ | ❌ |
ClewMind is built for families and small teams who communicate in non-English languages on WhatsApp — not for English-speaking developers with Slack.
git clone https://github.com/yourname/clewmind
cd clewmind
bash setup.shThen edit .env:
GROQ_API_KEY=your_key_here # free at console.groq.comnpm run dev
# → http://localhost:3000That's it. The web UI works immediately — no other config needed.
- Create a bot at discord.dev/applications
- Copy the token to
.env:DISCORD_BOT_TOKEN=your_token_here
- Restart — ClewMind joins Discord automatically.
WHATSAPP_SESSION_NAME=clewmindRestart and scan the QR code printed in the terminal with your phone.
This is ClewMind's core feature. Memory is per-team, not per-user.
🗣️ Ahmed (voice note in Urdu):
"Kal Lahore jana hai train se"
🧠 ClewMind:
"Noted! I'll remember your Lahore trip tomorrow by train."
— later —
🗣️ Ammi: "Ahmed ka koi plan hai kal ka?"
🧠 ClewMind:
"Ji! Ahmed ne bola tha ke kal Lahore ja rahe hain train se."
Every fact is extracted automatically — no /save command needed. Facts are scoped to the team (Discord server, WhatsApp group, or web session), so anyone in the team can ask about anything anyone else has mentioned.
ClewMind detects language automatically and replies in kind.
| Language | Code | STT | TTS |
|---|---|---|---|
| 🇵🇰 Urdu | ur |
✅ | ✅ |
| 🇸🇦 Arabic | ar |
✅ | ✅ |
| 🇮🇳 Hindi | hi |
✅ | ✅ |
| 🇧🇩 Bengali | bn |
✅ | ✅ |
| 🇮🇩 Indonesian | id |
✅ | ✅ |
| 🇹🇷 Turkish | tr |
✅ | ✅ |
| 🇨🇳 Chinese | zh |
✅ | ✅ |
| 🇪🇸 Spanish | es |
✅ | ✅ |
| 🇵🇹 Portuguese | pt |
✅ | ✅ |
| 🇫🇷 French | fr |
✅ | ✅ |
| 🇩🇪 German | de |
✅ | ✅ |
| 🇮🇹 Italian | it |
✅ | ✅ |
| 🇷🇺 Russian | ru |
✅ | ✅ |
| 🇯🇵 Japanese | ja |
✅ | ✅ |
| 🇬🇧 English | en |
✅ | ✅ |
STT via Groq Whisper · TTS via Microsoft edge-tts (free, no key)
┌─────────────────────────────────────────────────────────────┐
│ Channels │
│ ┌──────────┐ ┌─────────────┐ ┌────────────────────────┐ │
│ │ WhatsApp │ │ Discord │ │ Web (Express + WS) │ │
│ └────┬─────┘ └──────┬──────┘ └───────────┬────────────┘ │
│ └───────────────┴──────────────────────┘ │
│ │ IncomingMessage │
│ ┌────▼──────────────────┐ │
│ │ Engine │ │
│ │ 1. Commands (/help) │ │
│ │ 2. STT (Whisper) │ │
│ │ 3. Skills router │ │
│ │ 4. Memory context │ │
│ │ 5. LLM (Groq) │ │
│ │ 6. Fact extraction │ │
│ │ 7. TTS (edge-tts) │ │
│ └────────────────────┬─┘ │
│ │ OutgoingMessage │
│ ┌─────────────────────────────────────▼──────────────────┐│
│ │ Core ││
│ │ memory.ts · llm.ts · voice.ts ││
│ └────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘
Message flow: Channel → Engine → (skill OR LLM) → async fact extract → (TTS?) → reply
Three skills ship out of the box:
| Skill | Triggers | Example |
|---|---|---|
| Reminders | remind me, in 2 hours, kal subah, at 5pm |
"remind me to call Ali in 30 minutes" |
| Notes | note:, save this, shopping list, yaad rakhna |
"note: server password is abc123" |
| Web Search | search for, who is, google, dhoondho |
"who is the president of Pakistan" |
import type { Skill, SkillContext } from '../types.js'
export const WeatherSkill: Skill = {
name: 'weather',
description: 'Get current weather for a city',
canHandle(message: string): boolean {
return /\bweather\b/i.test(message) || message.includes('barish')
},
async execute(message: string, ctx: SkillContext): Promise<string> {
const city = extractCity(message)
const data = await fetchWeather(city)
return `${city}: ${data.temp}°C, ${data.description}`
},
}Register it in src/core/engine.ts → loadSkills().
| Command | Description |
|---|---|
/start |
Welcome message |
/help |
List all commands |
/memory |
Show team memories |
/forget <text> |
Delete matching memories |
/team |
List team members |
/private <msg> |
Chat without saving to memory |
/name <name> |
Change your display name |
| Variable | Required | Default | Description |
|---|---|---|---|
GROQ_API_KEY |
Yes | — | LLM + Whisper STT (get free) |
OPENROUTER_API_KEY |
No | — | Fallback LLM provider |
DISCORD_BOT_TOKEN |
No | — | Enables Discord channel |
WHATSAPP_SESSION_NAME |
No | — | Enables WhatsApp channel |
DEFAULT_LANGUAGE |
No | en |
Fallback language code |
VOICE_ENABLED |
No | true |
Set false to disable TTS |
DATA_DIR |
No | ./data |
Where to store memory/notes/reminders |
WEB_PORT |
No | 3000 |
Web UI port |
- Web chat UI with voice recording
- WhatsApp + Discord channels
- Shared team memory with auto-extraction
- Reminders, Notes, Web Search skills
- Multilingual STT + TTS (15 languages)
- Persistent reminder restore on server restart
- WhatsApp group mention (
@clewmind) - Telegram channel
- Image understanding (describe photos in voice)
- Skill marketplace / plugin install via npm
- Multi-team isolation with invite codes
- Admin dashboard for memory management
PRs welcome. High-priority areas:
- New channels — Telegram, SMS (Twilio), email
- New skills — Weather, currency converter, prayer times
- Language support — More TTS voices, RTL UI fixes
- Tests — Integration tests for the engine pipeline
git clone https://github.com/yourname/clewmind
cd clewmind && bash setup.sh
npm run devFile structure is intentionally flat — each file has one job. Read src/types.ts first to understand the data model, then src/core/engine.ts for the message pipeline.
MIT © 2025 — free to use, modify, and self-host.