AI Swarm — Marketer, Qualifier & “Mr. Onoots”
The AI Swarm is a set of eight autonomous agents that run the seller side of a brokerage: orchestrator, marketer, qualifier, scheduler, nurture, concierge, onboarder, and guardian. Each one is toggled on/off per agent from the dashboard (the Guardian is always on). This page covers two of them — the Marketer (outbound distribution) and the Qualifier (inbound replies) — plus the Guardian as the cross-cutting chokepoint.
Two clarifications that correct the intuition of the flow:
- Instagram inbound is not wired. Inquiries come in only through the web “ask agent” chat (a widget on the property/project page), the public lead form, and voice — there is no Instagram/Messenger/WhatsApp inbound webhook yet.
- Instagram outbound is not the default. The Marketer posts through a social integration whose default platform is Facebook (Instagram rejects text-only posts; it needs media). Instagram only goes out with explicit configuration + attached media.
End-to-end flow
Stage by stage
1. Publish the property → triggers the Marketer
- User: the agent creates the listing (or the Onboarder approves it); it goes live.
- Technical: when a listing becomes active, a database trigger inserts a
listing.publishedevent into the outbox. The relay routes it to the Marketer workflow. The autonomy actpost_socialdefaults tofull_auto.
2. Marketer → Guardian → social
- User: the Marketer builds a caption and posts the listing to the brokerage’s connected social network.
- Technical: the Marketer workflow (1) reads the listing and resolves the marketer agent
— if it’s disabled, it doesn’t post; (2) builds a static caption (not an LLM); (3) runs
the Guardian on the
post_socialact (fair-housing/PII scan, free-tier cap, resolves distribution — the brokerage’s own social account / the Onoots platform account / both, configured in the dashboard — anchors the result on-chain and records the action); (4) if the decision isallow, it posts to social. The social platform defaults to Facebook; Instagram requires explicit configuration and attached media.
3. Receive the inquiry → encrypted conversation
- User: a prospect opens the “ask agent” chat on the public page and writes.
- Technical: the request creates a lead (
source: ai_chat) and an end-to-end encrypted conversation (the message key is wrapped per participant). Inserting the message emits amessage.inboundevent, which the relay routes to the Qualifier workflow (or a generic responder if the conversation isn’t a lead).
The inbound auto-reply is live in production: the message trigger is applied and has processed real inbound inquiries end to end. The web inbound path works today; only the Instagram inbound path is missing (see Current limitations).
4. Reply with the Qualifier (“Mr. Onoots”)
- User: the assistant answers, signing as “Mr. Onoots” (or the name configured by the brokerage — e.g. “Mr. Nelson” for land-project developments).
- Technical: the Qualifier builds the persona prompt (default persona Mr. Onoots,
overridable per brokerage), generates the reply with Claude, runs it through the
Guardian on the
reply_leadact (full_auto), and ifallow, auto-sends the reply as the AI participant. It attaches a human-handoff summary when it detects one, but still replies.
Three “assistants”, two share the name
| Name | What it is |
|---|---|
| Mr. Onoots (Qualifier) | Answers client inquiries in the chat — the Qualifier’s default persona (gated reply_lead). |
| Mr. Onoots (internal concierge) | A help assistant for logged-in staff — read-only, scoped by row-level security. |
| Aria | Suggests draft replies to the agent in the inbox (does not auto-send). |
The two “Mr. Onoots” share the brand but are different code, prompts and gating. The one that answers chat inquiries is the Qualifier; the one in the help widget is the internal concierge.
Events, workflows & autonomy acts
| Event (outbox) | Workflow | Act (level) | Effect |
|---|---|---|---|
listing.published | Marketer | post_social (full_auto) | Social post via the integration |
message.inbound | Qualifier / responder | reply_lead (full_auto) | Qualifier reply |
lead.created | Qualifier | reply_lead | First contact |
Cross-cutting — Guardian + audit
Every outbound AI act passes through a single chokepoint, guardAction, reached by the
worker over an authenticated internal endpoint. For each act it:
- resolves the autonomy level (city → region → country → global chain);
- scans the text (fair-housing / PII);
- decides
allow | prepare | escalate | block; - enforces a hard free-tier cap (over cap → block);
- anchors the result on-chain;
- writes a row to the action log (act, level, status, payload hash, flags, anchor tx, reasons);
- meters credits.
Where it’s operated (UI)
- Swarm dashboard — the eight agents with per-agent switches (Guardian read-only).
- Distribution — social distribution config (own / platform / both, connection status).
- Conversations — the agent inbox (buyer ↔ AI ↔ agent threads + handoff summaries).
- Conversation audit — the broker’s compliance audit view.
- Leads — leads generated by the chat (
source: ai_chat) and the public form. - Help widget — the internal “Mr. Onoots” concierge.
Current limitations
- Instagram inbound: there is no Meta (Instagram/Messenger) webhook yet, so DMs and comments don’t flow in as messages. The web inbound path does work (see stage 3).
- Instagram outbound: to post to Instagram, the social platform must be set to include Instagram and media (a listing photo) must be attached, because Instagram rejects text-only posts.