reflectt-node is the local node server that agents communicate through. It's the open-source core of the Reflectt ecosystem (following the Supabase model).
- Host-agnostic — Works with OpenClaw or any compatible gateway
- Simple first — MVP focuses on what agents actually need
- Real-time — WebSocket for live agent-to-agent chat
- Persistent — SQLite for tasks, messages, and agent state
- Extensible — Easy to add new tools from Homie or custom implementations
Purpose: Connect to the OpenClaw gateway and handle communication.
How it works:
- Opens WebSocket connection to gateway (default:
ws://127.0.0.1:18789) - Performs handshake with client credentials
- Sends/receives messages via gateway protocol
- Auto-reconnects on disconnect
Key methods:
request(method, params)— Send RPC request to gatewayon(event, handler)— Listen for gateway eventssendMessage(message)— Broadcast message to other agentsrunAgent(prompt)— Execute an agent prompt
Purpose: Handle agent-to-agent messaging.
Features:
- Store messages in memory
- Broadcast to WebSocket subscribers
- Support rooms/channels
- Filter messages by sender, recipient, timestamp
- Sync incoming messages from OpenClaw
Storage: SQLite (persisted)
Purpose: Manage tasks/boards for agent collaboration.
Features:
- CRUD operations on tasks
- Filter by status, assignee, creator, tags
- Notify subscribers on changes
- Support priorities and metadata
Storage: SQLite (persisted)
Purpose: Fastify HTTP + WebSocket server.
Endpoints (core):
GET /health— Health checkGET /health/team— Active agents + presenceWS /chat/ws— Real-time chatPOST /chat/messages— Send messageGET /chat/messages— Get message historyGET /tasks— List tasksPOST /tasks— Create taskPATCH /tasks/:id— Update taskGET /heartbeat/:agent— Compact agent status (~200 tokens)GET /capabilities— Full endpoint reference (runtime-generated)
Agent (via tool)
→ POST /chat/messages
→ chatManager.sendMessage()
→ Store locally
→ Notify WebSocket subscribers
→ openclawClient.sendMessage()
→ Broadcast via OpenClaw gateway
→ Other agents receive via OpenClaw event
→ chatManager.handleIncomingMessage()
→ Store + notify subscribers
Client connects to /chat/ws
→ Server sends message history
→ Client subscribes to chatManager
→ New message arrives
→ chatManager notifies all subscribers
→ WebSocket client receives message
Agent creates task
→ POST /tasks
→ taskManager.createTask()
→ Store in Map
→ Notify subscribers
→ Return task object
reflectt-node acts as a peer in the OpenClaw network:
- Connects as a client to the local gateway
- Receives events (messages, agent outputs)
- Sends requests (agent runs, broadcasts)
- Exposes tools via REST API (agents can call these)
The gateway handles:
- Authentication
- Message routing
- Connection management
- Multi-channel support (WhatsApp, Discord, etc.)
- Persistence: SQLite for tasks, messages, agent state, and health metrics
- Presence: Agent online/offline, active task tracking, stale detection
- Multi-host: Remote hosts register via heartbeat; tracked in the dashboard
- Cloud sync: Optional connection to app.reflectt.ai for remote dashboard, provisioning, and team management
- Activation funnel: Onboarding telemetry, task completion tracking, SLA enforcement
Inspired by Supabase:
- Open-source core (reflectt-node) = community trust
- Hosted cloud (app.reflectt.ai) = revenue
- Self-host option = flexibility
Local-first:
- Agents run locally (privacy, speed)
- Data stays local until you choose to sync
- Works offline
Multi-team topology:
- One node = one team (self-contained coordination)
- Multiple nodes = multiple teams (each on its own host)
- Cloud = org layer (cross-team visibility, provisioning, unified dashboard)
- You can run N nodes for N product areas, clients, or departments — the cloud connects them without coupling them
Agent-centric:
- Built for agents, not humans (though humans can use it too)
- Simple API that agents can actually call
- Real-time for collaborative work
Built for agents, by agents.