Alya
Autonomous Hinglish AI assistant on Telegram — Rasa NLU plus Groq fallback, 40-skill registry, MCP tool servers, OAuth workspace pipelines. Live on Telegram.
Counted 2026-09-13: 40 distinct /commands in actions/command_registry.py, 41 intent/action entries in domain.yml, 494 test functions across tests/*.py, 49 action modules. Older README copy says 37+ skills; the registry count (40) is authoritative. Bot handle verified live: t.me/Alya_Rasa_Bot (HTTP 200).
01 — Problem
Personal assistants either answer trivia or execute tools — rarely both, and almost never in Hinglish with real workspace access (Gmail, Drive, Calendar, Outlook) plus document generation (PDF, Excel, Word) plus headless code tools.
02 — Solution & Architecture
Dual-tier runtime: a Rasa 3.6 agent (port 5005) owns NLU and dialogue state; an async action server (port 5055) owns execution across 40 registered skills; Groq inference covers generative fallback; MCP clients reach GitHub (port 4097) and OpenCode (port 4096) tool servers; Nginx fronts the stack.
Rasa Agent (:5005) <───▶ Action Server (:5055, 49 modules)
command_registry.py — 40 /commands with planner metadata
agent_planner/executor/verifier/memory/triggers — orchestration loop
mcp_client.py — GitHub MCP (:4097) · OpenCode MCP (:4096)
llm_provider.py — Groq fallback when NLU rules need generation
api_gateway.py + api_reliability.py — weather, news, FX, crypto, jobs…
jobs_service/ — reminders, medicine, bills, commute, server diagnostics03 — Engineering challenges
Why split NLU from execution?
Slow tools (OAuth refreshes, document synthesis, MCP calls) must never stall conversation state. Rasa classifies intent and extracts slots; the action server runs non-blocking I/O around it.
How do you stop the agent inventing tools?
The registry derives planner metadata from skill descriptions — unregistered goals resolve to None instead of guessed actions. Authorization, container-isolation and webhook-auth tests guard the boundary.
How do 40 skills stay testable?
494 test functions: command inventory, routing, authorization, security regression, scheduler, LLM provider, Telegram UX, image tools, jobs/scholarships pipelines.
04 — Security
- OAuth 2.0 refresh cycles kept server-side; webhook auth on inbound Telegram traffic
- Container isolation for executed tools; authorization layer per skill
- Breach checks via HaveIBeenPwned SHA-1 k-anonymity — passwords never leave the host
- Security regression + red-team reports maintained in-repo
05 — Testing
- 494 test functions across tests/*.py (inventory, routing, auth, regression, scheduler, UX…)
- E2E acceptance report and production cutover docs in-repo
06 — Result & demo
An agent that chats in Hinglish, executes across workspaces, generates real documents, and drives headless code tools — with the registry and test suite to prove the boundary between "can do" and "guessed". Message it.