| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
The open-source AI teaching assistant that lives on WhatsApp
You're not teaching alone.
Quick Start · Features · Languages · Content Library · Agent-Native · Docs · Website
Rumi gives every teacher a coach in their pocket. It runs entirely on WhatsApp — the app teachers already have — and offers classroom coaching on real lessons, reading assessments from a voice note, lesson plans, curriculum quizzes, and professional development, in the teacher's own language, 24 hours a day.
It is built to be cloned and run by anyone. Bring your own API keys, point it at a WhatsApp number, and you have a teaching assistant for your schools — no commissioning, no vendor, no lock-in.
| Meets teachers where they are | No app to install, no login to remember, no training day. If a teacher can send a WhatsApp message, they can use Rumi. |
| Coaches right after the lesson | A teacher records their class and gets a framework-scored report plus a reflective conversation — while the lesson is still fresh, not at an annual workshop. |
| Hears children read | A student reads aloud into a voice note; Rumi returns words-per-minute, accuracy, pronunciation and comprehension against grade benchmarks. |
| Ships with real content | 890 curriculum videos, 10,929 QA-certified questions, 15,557 voice clips and 3,217 illustrations — free, CDN-hosted, one command to import. |
| Speaks their language | 15 languages for chat, voice-note transcription and spoken replies — including a full Indian-language suite and Pakistan's regional languages. |
| Try it without Meta | Link your own WhatsApp with a QR code and start chatting in about fifteen minutes. No Business account, no app review, no waiting. |
| Set up by talking to it | The repo is agent-native: open it in Claude Code, Cursor or Codex and say "set me up". Or run one guided wizard that asks in plain language and checks every answer for you. |
| Your keys, your data | Your Supabase, your WhatsApp number, your model provider. Nothing routes through us. Apache-2.0. |
# 1. Fork this repo on GitHub, then clone YOUR fork
git clone https://github.com/YOUR-ORG/rumi-platform.git
cd rumi-platform
# 2. Install — tools, dependencies, and the `rumi` command
./install.sh
# 3. Connect Rumi to your accounts — guided, one question at a time
rumi setup
# 4. Start it
rumi startThen message the number Rumi linked and send Hi.
About fifteen minutes, most of it waiting for a Supabase project to start. rumi setup asks in plain language rather than by variable name ("where should Rumi keep its memory", not SUPABASE_URL), checks every value against the real service as you type it, creates the whole database for you, and saves each answer as it goes — so Ctrl+C is safe and running it again picks up where you stopped.
⚠️ By default Rumi links your own WhatsApp account, the same way WhatsApp Web does — so Rumi is your number. You cannot have a useful conversation with yourself, so you need a different number to message it from.
Any of these works: a spare SIM, an old phone, a work phone, a family member's phone, or a second WhatsApp account logged into WhatsApp Web in your browser. Both numbers need WhatsApp installed and active.
If you skip this you will pair successfully, send a message, and see nothing happen — not because anything is broken, but because Rumi is on the other end of your own chat.
| Where to get it | What it's for | Cost | |
|---|---|---|---|
| Node.js 20+ and git | nodejs.org | Running Rumi | free |
| A Supabase project | supabase.com | Where Rumi remembers teachers, lessons and assessments | free tier is plenty |
| An OpenRouter key | openrouter.ai/keys | How Rumi thinks — one key, 500+ models | a few dollars goes a long way |
| A Redis address | Upstash · Railway · or local Docker | Conversations in progress, and background jobs | free tier is plenty |
| WhatsApp on your phone | — | The number Rumi answers as | free |
| A second number with WhatsApp | a spare SIM, old phone, or colleague | The number you message Rumi from — see above | free |
The wizard offers to start Redis locally with Docker if you have it, so that row is often one keypress. A Meta WhatsApp Business account is not required to try Rumi — see the two ways to run it.
Optional feature keys (Soniox, ElevenLabs, Uplift, Gamma, Kie.ai, Azure, Mistral) unlock the features that use them, and only those. rumi setup offers them at the end and skipping is a real answer — every one can be added later by setting its key. Each is documented in .env.template.
| Command | What it does |
|---|---|
| rumi setup | Connect Rumi to your accounts. Start here. --reconfigure re-asks everything. |
| rumi start | Start Rumi |
| rumi status | Is Rumi running, which WhatsApp number it answers as, what's switched on |
| rumi doctor | Check every connection in detail, with where to get anything missing |
| rumi pair | Link (or re-link) WhatsApp — sessions do expire |
| rumi graduate | Move to an official WhatsApp Business number |
If install.sh could not put rumi on your PATH, node bin/rumi.js <command> is identical.
Would rather not type it yourself? Open the repo in a coding agent (Claude Code, Cursor, Codex) and say "set me up" — it walks you through the same sequence in conversation, following the /setup skill. Setting up a real deployment (hosting, the Meta webhook, WhatsApp Flows, background workers), or prefer the manual route? SETUP.md has the full walkthrough, including getting a WhatsApp number from scratch.
Rumi's messaging channel is pluggable. You pick one during setup, in plain language, and you can change your mind later.
| Just trying it out | Real deployment | |
|---|---|---|
| What it is | Rumi becomes a linked device on your own WhatsApp, exactly like WhatsApp Web | An official WhatsApp Business number through Meta's Cloud API |
| To get started | Scan a QR code. ~2 minutes. | A Meta Business account, a verified number, and their app-review process |
| Good for | Evaluating, demos, development | Schools, districts, anything with real teachers on it |
| Limits | One personal account; WhatsApp may disconnect it. Tap-through forms, approved templates and picture-menu carousels are Meta-only — Rumi asks the same questions as an ordinary chat instead, so nothing is blocked, but it looks plainer. | None — the full experience |
Moving across is one command: rumi graduate. Teachers, conversations and past assessments all carry over on their own, because Rumi identifies people by phone number rather than by channel. The one thing that cannot follow you is the number itself, so tell your testers to start a chat with the new one.
Future channels (Slack, Telegram, …) plug into the same registry — see docs/onboarding/sandbox-production-design.md.
Across the world, millions of teachers work in isolation — in rural schools, multigrade classrooms, and under-resourced systems where instructional coaches simply don't exist. Traditional professional development reaches teachers once or twice a year at best. The gap between what teachers need and what the system provides is enormous.
Rumi fills that gap. By meeting teachers on WhatsApp — the world's most widely used messaging app — Rumi provides instant coaching on real lessons, reading-fluency assessment, curriculum-aligned content, and multilingual support, all on the phone already in their pocket. The core insight: the best time to coach a teacher is right after they teach, and the best tool is the one they already have.
Why open source? Good teaching support shouldn't depend on which country or company you happen to work for. Any ministry, NGO, school network, or research team can stand up their own instance — adapt the frameworks to their curriculum, run it in their languages, keep their data in their own systems, and improve it for everyone.
Every feature lives on WhatsApp. Click any feature for its own page — what it is, how it works, and the API key(s) that switch it on.
| Feature | What it does | Switches on when you set |
|---|---|---|
| 💬 AI Chat | Ask any teaching question by text or voice; get an expert, pedagogy-grounded answer | core (uses OPENROUTER_API_KEY); voice needs SONIOX_API_KEY |
| 📝 Registration | Friendly WhatsApp onboarding for teachers | always on (core) |
| 🎯 Classroom Coaching | A class recording → framework-scored report + reflective conversation | SONIOX_API_KEY |
| 📖 Reading Assessment | A student reads aloud → fluency, accuracy, pronunciation, comprehension | SONIOX_API_KEY |
| 📋 Lesson Plans | A topic + grade → a full lesson-plan PDF | GAMMA_API_KEY |
| 📸 Pic-to-LP | A photo of a textbook page → an illustrated 2-page lesson plan | KIE_API_KEY |
| 📚 Homework | Pick a class + chapters → a curriculum homework bundle PDF | HOMEWORK_FLOW_ID |
| 🧠 Quiz | Teacher sends a topic quiz to a class; students answer on their parents' WhatsApp, teacher gets a results report | core (uses OPENROUTER_API_KEY) |
| 🎬🎓 Video Quizzes | A curriculum video → its quiz, 3 s later — pictures, voice notes, class share links, and a next-morning reteach report. Ships with the open Taleemabad content library (see below ↓) | one import script + DEFAULT_REGION=pakistan |
| 🗣️ Voice Messages | Full spoken interaction in many languages | SONIOX_API_KEY + ELEVENLABS_API_KEY |
| 🎬 Video Generation | A topic → a short narrated educational video | VIDEO_GENERATION_ENABLED + KIE_API_KEY |
| ✅ Attendance | Voice- or tap-based attendance via WhatsApp Flows | always on (core) |
| 🧮 Exam Checker | Photograph answer sheets → vision OCR + AI grading | MISTRAL_API_KEY |
No tiers, no toggles to hunt for. Rumi gates features by presence: set a feature's API key and it switches on; leave it blank and it stays off cleanly — the bot never crashes over a missing key. Run rumi status or rumi doctor anytime to see exactly which features are live and which key would switch each remaining one on.
Go deeper: browse the full feature library · understand how lesson plans get routed in LP_PATHS.md · or look at a real sample coaching report (PDF) rendered by the actual pipeline.
Utility flows round it out — settings (language + coaching framework), status (your active sessions), edit-class (roster), and a student-video library.
15 languages, for text chat, voice-note transcription (STT), and spoken replies (TTS) alike. Alongside English, Urdu, Arabic and Spanish, Rumi covers Pakistan's regional languages — Punjabi, Sindhi, Pashto and Balochi (via Meta's MMS-ASR) — Sri Lankan Tamil, and a complete Indian-language suite:
🇮🇳 हिन्दी Hindi · বাংলা Bengali · मराठी Marathi · తెలుగు Telugu · தமிழ் Tamil · ಕನ್ನಡ Kannada
Every one works end to end — teachers chat and send voice notes in their language, get spoken and written replies back, and generate lesson plans localized to their classrooms (₹ money problems, locally familiar names and contexts). Pick a language anytime with /language, or just message Rumi in your own script. Which languages appear is driven per-region by config (region_features), so a deployment shows only what it serves.
▶ 68 seconds: a phone on a charpai, one message, and 890 lessons — watch the film
Rumi ships with a real, complete content library — free and openly hosted. Between 2015 and 2021, Taleemabad's content team hand-wrote question banks, hand-drew the artwork, and studio-recorded voice clips for the Taleemabad Student App, used by hundreds of thousands of Pakistani children. That entire archive has been rescued, matched to its 890 curriculum videos (Nursery–Grade 6, English + Urdu), QA-certified question by question, and rebuilt for WhatsApp:
node bot/scripts/setup/import-video-quiz-library.js --applyThe library is Pakistani national-curriculum content, so the quiz feature is region-gated to pakistan out of the box (DEFAULT_REGION=pakistan in .env switches it on — the seed data does the rest). If you serve another curriculum, the gate is one row of config, and the full pipeline for building your own corpus is documented in docs/features/video-quizzes.md.
Rumi is agent-native: the repository is structured so a coding agent (Claude Code, Cursor, Codex, …) can read it, set it up, debug it, and customize it with you. This is what makes "clone and run it yourself" realistic for a small, non-specialist team.
Start at CLAUDE.md → it points the way.
rumi-platform/ ├── bin/rumi.js # The `rumi` CLI — setup, start, status, doctor, pair, graduate ├── install.sh # One-time bootstrap: tools, dependencies, .env, the rumi command ├── bot/ # WhatsApp bot (Node.js + Express) │ ├── whatsapp-bot.js # Entry point — webhook, inbound routing, message dispatch │ ├── shared/ │ │ ├── config/ # Presence-based feature gating, branding, languages, regions │ │ ├── services/ │ │ │ ├── messaging/ # Pluggable channel drivers (meta | baileys) + text-flow rendering │ │ │ ├── queue/ # Pluggable queue (sqs | bullmq) │ │ │ └── … # LLM, coaching, reading, lesson plans, quiz, video, … │ │ ├── handlers/ # text / voice / image / flow / exam / attendance │ │ ├── routes/ # WhatsApp Flow endpoints (also drive the text fallbacks) │ │ └── utils/ # Structured logging, correlation IDs, html-to-pdf │ ├── workers/ # Async workers (coaching, video, lesson plans, quiz, exam, …) │ └── scripts/setup/ # The wizard, doctor, pairing, flow registration, encryption ├── dashboard/ # Observability portal — analytics, health ├── portal/ # Teacher web portal (React) ├── infrastructure/ │ └── supabase/ # SQL schema (76 tables), RLS policies, seed data + bootstrap ├── docs/ # Architecture, features, customization, cost, samples └── .claude/ # Agent-native config — CLAUDE.md routers + 16 operational skills
Teacher on WhatsApp
→ Meta Cloud API (webhook) ·OR· linked-device socket (sandbox)
→ one normalized inbound shape → message dispatch
→ user lookup (Supabase) → language detection → feature routing
→ text | voice | image | flow handler
→ LLM (OpenRouter) → reply
→ async job queue (Redis or SQS) → background workers → reports / media
→ delivered back to the teacher on WhatsApp
Both channels converge on the same dispatch, so a feature is written once and works on either. A correlation id threads each request across the webhook, the queue, and the workers, so any flow can be traced end to end. See docs/architecture.md for the full picture.
Rumi is meant to be adapted to your context — your curriculum, your frameworks, your languages, your brand.
Quick (environment variables):
BOT_NAME=MyAssistant
ORG_NAME=My School Network
SUPPORT_CONTACT=help@example.org
LLM_MODEL=anthropic/claude-sonnet-4Deep (agent-first): this repo is designed to be customized by AI-assisted IDEs. The Agent Customization Guide maps each goal to exact files:
| I want to… | Guide |
|---|---|
| Swap the coaching framework (TEACH / Danielson / custom) | Section 1 |
| Use ASER / EGRA instead of DIBELS for reading | Section 2 |
| Change the lesson-plan format (5E, UbD, …) | Section 3 |
| Add a language | Section 4 |
| Switch LLM provider/model | Section 5 |
| Rebrand the bot | Section 11 |
| Layer | Technology | Purpose |
|---|---|---|
| Runtime | Node.js 20+ | Server-side JavaScript |
| Web | Express.js | Webhook + API routes |
| Messaging | WhatsApp Cloud API or linked-device socket (pluggable via CHANNEL_DRIVER) | Messages, media, interactive Flows |
| AI / LLM | OpenRouter (500+ models) | Chat, analysis, content |
| Database | Supabase (PostgreSQL) | 76 tables with Row-Level Security |
| Queue | Redis or AWS SQS (pluggable via QUEUE_DRIVER) | Transcription, reports, video, exams |
| Speech-to-Text | Soniox, Whisper, Modal MMS-ASR | Multilingual transcription |
| Text-to-Speech | ElevenLabs (+ Uplift for Urdu/regional) | Voice replies, reflective questions |
| PDFKit / pdfmake / Playwright | Coaching & reading reports | |
| Images / Video | Kie.ai (Nano Banana Pro), FFmpeg | Educational visuals & video |
| OCR | Mistral vision (+ Chandra, Surya) | Exam-sheet scanning |
| Pronunciation | Azure Speech (optional) | Reading-assessment scoring |
| Hosting | Railway / Docker / any Node host | Deployment |
| Observability | Console + correlation IDs; Axiom optional | Structured logs + tracing |
npm test # the full suite
npm run test:security # secret scan — no hardcoded credentials
npm run test:schema # database schema validation
npm run test:setup # setup tooling
rumi doctor # live preflight: which services + features are configured
npm run simulate # CLI simulator — try features without WhatsAppEvery push and PR is gated by CI: an automated secret scan (gitleaks) plus conformance guards that verify the schema, the docs, the agent skills, and the link web all stay honest.
| Doc | What it covers |
|---|---|
| SETUP.md | Full setup — the two-command path, then the manual/production walkthrough |
| docs/features/ | Per-feature deep dives (what / how / enable) — one page each |
| docs/onboarding/sandbox-production-design.md | How the channel drivers work, and how rumi graduate moves between them |
| docs/onboarding/whatsapp.md | Getting a WhatsApp Business number, start to finish |
| docs/onboarding/api-keys.md | Every API key: what it unlocks and where to get it |
| docs/LP_PATHS.md | How a lesson-plan request is routed (pre-generated vs Gamma vs photo) |
| docs/architecture.md | System architecture & message flow |
| CLAUDE.md + .claude/ | Agent-native context: the routers + the 16 operational skills |
| docs/agent-customization.md | Agent-first deep customization (frameworks, languages, branding) |
| docs/cost-guide.md | Monthly cost estimates — core baseline + per-feature add-ons |
| docs/monitoring.md | Observability & debugging |
| docs/railway-operations.md | Running on Railway (scaling, logs, workers) |
| docs/pulling-updates.md | Keeping your fork in sync with upstream |
| docs/samples/ | Sample artifacts (e.g. a rendered coaching report) |
| SECURITY.md | Security policy & responsible disclosure |
| .github/CONTRIBUTING.md | Development setup, code style, testing, PR guidelines |
| Symptom | What's happening |
|---|---|
| I paired successfully but Rumi never replies | You are almost certainly messaging from the same number Rumi is linked to. Use a second number. |
| rumi doctor says everything is "not configured" | Run it from the repo root, or make sure .env is there. rumi status will tell you what it can see. |
| WhatsApp keeps syncing, or the session drops | Two processes must never share one WhatsApp session. Run rumi status to see what's holding it, stop that, then rumi pair. |
| The bot won't start — "Missing REQUIRED env var(s)" | rumi doctor names each missing value and where to get it. |
| A feature says it isn't available | It's presence-gated. rumi status lists which key switches it on. |
More: docs/monitoring.md · or open the repo in your coding agent and paste the error.
Contributions are welcome. See .github/CONTRIBUTING.md for development setup, code style, testing, and PR guidelines.
Rumi is built by Taleemabad and shared with the world as open source. The name comes from Jalaluddin Rumi, the 13th-century poet and teacher who believed that education is not the filling of a vessel but the kindling of a flame.
Website: hellorumi.ai · Research: hellorumi.ai/research
Apache License 2.0 — see LICENSE. You are free to use, modify, and distribute this software. We encourage contributing improvements back to the community.
| Back | FazBrowse Home | New Git URL |