Architecture Diagram

One Agent.
Every Channel. Every Tool.

Message Tempa on WhatsApp, Slack, or the Dashboard — it reaches the same tools, the same memory, and replies on the channel you used.

WhatsApp Slack Dashboard Agent Brain Unified Memory Shared Tools

How everything connects

All channels share one daemon, one agent, one memory — your data stays local.

WhatsApp Slack Dashboard Agent Brain Unified Memory Shared Tools
Tempa System Architecture You — use any channel WhatsApp DMs · groups · voice notes Baileys bridge :8080 Slack DMs · @mentions · threads Socket Mode (Bolt) Dashboard Chat · approvals · QA tab localhost:8787 Tempa Daemon FastAPI · REST + WebSocket · port 8787 Tempa Agent Brain Coordinator → Varys (Claude CLI) or LangGraph (Groq) reads + writes memory on every request Channel-agnostic — same tools regardless of where you asked read/write Unified Memory ChromaDB · RAG harness.db · tickets data/vault · rules local stores ingest Shared tools — accessible from every channel Gmail read · send · search Calendar events · reminders Google Meet join · record · minutes GitHub / QA CI · scans · fixes Jira · Notion tickets · docs solid = request path · dashed = reply on same channel · read/write = agent syncs memory each turn
Local-first: audio files, transcripts, embeddings, and session tokens are stored on your machine. Inference goes through Groq API and Claude CLI — no data leaves without your approval.

Same tools from every channel

The channel you use only decides where the reply lands — never which tools are available.

Tool Capabilities WhatsApp Slack Dashboard
Gmail read · send · search
Calendar events · reminders
Google Meet join · record · minutes
GitHub / QA CI · scans · fixes
Jira · Notion tickets · docs

From message to answer in four steps

Every request — whether from WhatsApp, Slack, or Dashboard — follows the same pipeline.

Step 01 You message WhatsApp DM, Slack @mention, or Dashboard chat. The channel only decides where the reply lands.
Step 02 Daemon ingests Message hits the FastAPI daemon at :8787. It's indexed to ChromaDB instantly so Tempa has context.
Step 03 Agent + tools Coordinator reads memory, picks Varys or LangGraph, and calls Gmail, Calendar, Meet, QA, or Jira as needed.
Step 04 Reply back Answer streams to the same channel. Risky actions queue for approval — say go to confirm.
sequenceDiagram
    actor User
    participant Ch as WhatsApp / Slack / Dashboard
    participant Daemon as Daemon :8787
    participant Mem as Unified Memory
    participant Agent as Agent Brain
    participant Tool as Gmail · Calendar · Meet · QA · Jira
    participant AI as Claude / Groq

    User->>Ch: "What's on my calendar tomorrow?"
    Ch->>Daemon: inbound message + channel context
    Daemon->>Mem: ingest message to ChromaDB
    Daemon->>Agent: run_coordinator_full()
    Agent->>Mem: read vault rules + search RAG
    Mem-->>Agent: relevant context + rules
    Agent->>Tool: calendar specialist — fetch events
    Tool-->>Agent: live event data
    Tool->>Mem: ingest result to ChromaDB
    Agent->>AI: prompt + context + tool results
    AI-->>Agent: natural language reply
    Agent-->>Daemon: response
    Daemon-->>Ch: post / stream answer
    Ch-->>User: "You have 2 meetings tomorrow..."