Platform

Request flow

The same story, but drawn: every service a message touches from Slack to Anthropic.

Below is the path of a single message from the moment you hit send in Slack to the moment the reply lands in your DM. Each box is a separate Luna-owned service; each arrow is an internal call.

Slack interface slack-dm verify router dispatch agent-basal conversation ai-proxy credentials AI Gateway audit · limits Anthropic · Claude External

What each service does

  • Slack — your interface. Sends signed webhook events for every message it sees that involves Basal.
  • luna-slack-dm — verifies the webhook signature, checks your email domain, and passes the message on.
  • luna-router — picks the agent. Today it’s always Basal. Tomorrow it could be the Data Agent or any new agent we add.
  • luna-agent-basal — holds your private conversation history and builds the model request with the right context.
  • luna-ai-proxy — the single egress point for every model call. Injects credentials, strips identifying headers, adds audit metadata.
  • AI Gateway — Cloudflare’s layer for rate limits, cost caps, and the authoritative audit log.
  • Anthropic — the model (Claude) that actually generates the response.

Internal hops between Luna services stay inside Cloudflare’s private network — they don’t traverse the public internet. The only external call is the last step, from the AI Gateway to Anthropic.