SeldonFrame
Sell AI front offices. Deploy them in minutes.
SeldonFrame is the agent-native, open-source alternative to GoHighLevel for agencies serving local businesses. Give your coding agent a client's URL and it can create a branded website, booking flow, intake, CRM, and AI agent in one workspace. Run evals, publish, and hand it off — then operate every client from one agency view.
Website · For agencies · For builders · Docs · Discord
Live demos: HVAC · Med spa · Med spa · Weight loss
Ship your first client front office
claude mcp add seldonframe -- npx -y @seldonframe/mcp
Or as an auto-updating Claude Code plugin:
/plugin marketplace add seldonframe/seldonframe
/plugin install seldonframe@seldonframe
> Build a branded AI front office for my HVAC client in New Orleans.
✓ Workspace ready at acme-hvac.app.seldonframe.com
Build the first client workspace before paying. Hosted Managed uses SeldonFrame's keys; Builder and Agency plans are BYOK. Your agency owns the client relationship, workspace data, and delivery margin.
See a real one — a live workspace, not a mockup:
And here's the agent on that site handling a real inbound — checking the live calendar, and, when asked for a price, refusing to invent one (that's the quote-guard, not a scripted reply):
Click any screenshot — this HVAC workspace is live and books real appointments. More live workspaces: Metro MedSpa · SKINNEY Medspa · Vive Ageless Weight Loss — and more on seldonframe.com.
The agency delivery loop
- Start with the client URL. SeldonFrame extracts the business facts and creates the workspace.
- Apply your agency playbook. Brand the site, booking flow, intake, CRM, and agent.
- Verify before handoff. Run evals and complete a real test booking.
- Publish and operate. Give the client a branded portal while your agency keeps the master view.
The same loop works from the dashboard, Claude Code, Cursor, Windsurf, or any MCP-compatible agent. See the agency workflow.
What an agent is made of here
Most "agent frameworks" hand you a chat loop and wish you luck. SeldonFrame gives your IDE agent the full production anatomy:
The agent model — Trigger × Skill × Channel
An agent isn't a chatbot UI; it's three independent axes:
- Trigger — when it runs: inbound (a call / chat / email / SMS arrives) · event (a domain event fires —
booking.completed,lead.created,invoice.paid…) · schedule (a cron cadence). - Skill — what it does: receptionist · review-requester · speed-to-lead · win-back · digest…
- Channel — how it speaks: voice · web chat · SMS · email · internal digest.
- Tools — what it can touch: native tools (book against the real calendar · read/write the CRM · send SMS & email · take a message) plus 1,000+ app integrations via Composio (Google Calendar, Sheets, Slack, HubSpot, Notion, …), bound per-agent.
surface: voice | chat (the old receptionist-only knob) is just one point in this space — trigger=inbound. One builder creates any agent; the marketplace sells any agent.
From agent to production loop
A production agent is a loop, not a single prompt:
Trigger → (Model + Tools + State) → Verify → Iterate, bounded by a Stop condition, improved by Evals, kept honest by Observability + Guardrails.
Two non-negotiables drive the roadmap: the checker must be separate from the maker (a model grading its own work is too generous a grader), and the loop must have brakes (or it bills you in silence). Where each primitive stands today:
| Primitive | Status | What's there |
|---|---|---|
| Trigger | ✅ Shipped | Inbound + event triggers on the SeldonEvent bus. booking.completed → review-requester; lead.created → speed-to-lead, both sending outbound SMS/email. |
| State | ✅ Shipped | Agent loop-memory in Brain v2 — agents recall what they did before acting and record after. The review "ask once per customer" throttle is now a memory recall, not a bespoke flag. |
| Verify (maker ≠ checker) | ✅ Shipped | Deterministic validators grade every run — pass rates surface on each agent's health card and /runs; run_agent_evals replays scripted scenarios. Rolling out: the same checker as a hard pre-send gate + an LLM judge for judgment calls. |
| Guardrails / Stop | ✅ Shipped | Quote-guard (never invent prices), enforced read-back before booking, per-contact throttles, booking-policy enforcement (hours · duration · required fields), hard call/iteration caps. Rolling out: generic token-budget brakes for long-looping agents. |
| Generate-by-default | ✅ Shipped | One English sentence → trigger + skill + channel + tool bindings + guardrails, generated together. "text every customer for a Google review the day after their job — never twice, only if completed" compiles into a real agent. The generate_agent MCP tool and the Studio wizard both run this pipeline. |
| Record → Agent | 🗺 Roadmap | Skip describing it — screen-share your workflow once. SeldonFrame watches, compiles the steps into a draft agent (skill + tool bindings + eval scenarios derived from the recording), and you deploy in minutes. Live behind a flag at /record; becoming the default on-ramp next. |
The loop, drawn
One sentence builds it; triggers drive it; the ring is the loop running — Model → Tools → State → Verify — with tools orbiting the core,
/runs+ Brain observing, and the Stop brakes bounding every pass. Everything in the diagram is shipped today. (Animated SVG — if your viewer freezes it, the still frame reads the same.)
Deeper — the pre-wired stack, the architectural bet, the roadmap: docs/ARCHITECTURE.md.
Five agents you can ship today
Trigger × Skill × Channel are independent axes — pick one of each and you've architected an agent:
| Agent | Trigger | Skill | Channel | The interesting part |
|---|---|---|---|---|
| AI receptionist | inbound call | qualify + book | voice | Books against the real calendar. Quote-guard, enforced read-back, take_message escalation to the owner. |
| Website chatbot | inbound chat | the same receptionist skill | web embed | Same blueprint, different channel — channels are swappable. |
| Speed-to-lead | lead.created event |
first-touch + qualify | SMS | Fires seconds after a form submit, straight off the event bus. |
| Review requester | booking.completed event |
review ask | SMS / email | Brain recall enforces "never ask the same customer twice." |
| Anything you describe | any | one English sentence | any | The Studio wizard adapts its questions to the primitives your agent needs. |
The Brain — memory that compounds
Agents that forget are demos. Every SeldonFrame workspace owns a Brain:
- The Soul — the single source of truth an agent grounds on (identity, services, hours, pricing). Install someone else's agent and it re-grounds on your Soul, never their facts.
- Loop memory — agents recall before acting and record after. "Did I already ask this customer for a review?" is a memory recall, not a bespoke flag.
- Notes → distilled rules — raw observations get compiled and promoted into durable knowledge on a schedule, so every run starts smarter than the last one ended.
Money rails, built in
Agents that do real work end up touching real money — so the rails are platform primitives, not an integration project:
- A prepaid wallet ledger — UNIQUE idempotency keys and guarded never-negative decrements: a charge can't double-fire, a balance can't go below zero.
- Stripe Connect payouts —
seldonframe payoutmoves accrued earnings to a bank account. - Checkout that fulfills — a marketplace sale auto-provisions the deployment and re-grounds it on the buyer's business.
- Per-use rental billing — every agent exposes a signed MCP endpoint; other LLMs can rent it and the ledger meters each use.
- Real phone numbers — provision a number per agent (bring your own Twilio today; SF-managed metered numbers are rolling out).
Fee fine print: SeldonFrame takes a 5% GMV fee only when the marketplace brings the buyer, ~2% on sales through your own SeldonFrame storefront, and $0 anywhere else.
Operate every client from any IDE
One npm package — @seldonframe/mcp — runs as a local MCP server in every major AI-native editor. Pick yours, paste the snippet, and ask your agent to create or update a client workspace — website, booking page, intake form, CRM, and agent in one pass.
claude mcp add seldonframe -- npx -y @seldonframe/mcp
Or as a plugin (auto-updates, one-liner via the marketplace):
/plugin marketplace add seldonframe/seldonframe
/plugin install seldonframe@seldonframe
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"seldonframe": {
"command": "npx",
"args": ["-y", "@seldonframe/mcp"]
}
}
}
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"seldonframe": {
"command": "npx",
"args": ["-y", "@seldonframe/mcp"]
}
}
}
Add to .vscode/mcp.json:
{
"servers": {
"seldonframe": {
"command": "npx",
"args": ["-y", "@seldonframe/mcp"]
}
}
}
Add to settings.json:
{
"context_servers": {
"seldonframe": {
"source": "custom",
"command": "npx",
"args": ["-y", "@seldonframe/mcp"]
}
}
}
Add to ~/.codex/config.toml:
[mcp_servers.seldonframe]
command = "npx"
args = ["-y", "@seldonframe/mcp"]
Or one line: codex mcp add seldonframe -- npx -y @seldonframe/mcp
Once connected, restart your IDE (MCP connectors load at session start), then just say:
> Build a workspace for my client: [business name]. [city, state]. [services]. [phone, optional].
See the same six snippets, kept in sync, at seldonframe.com/build.
Self-host the whole thing
Prefer to run it yourself? The entire monorepo is AGPL-3.0 — and there's a prebuilt image, so you don't even build it:
git clone https://github.com/seldonframe/seldonframe.git && cd seldonframe
cp .env.docker.example .env.docker # add your ANTHROPIC_API_KEY or OPENAI_API_KEY
docker compose -f docker-compose.yml -f docker-compose.ghcr.yml up # pulls the prebuilt image
Brings up Postgres, migrations, and the app on localhost:3000 — the same dashboard, generated public sites, and API as the hosted version. Multi-arch image (amd64 + arm64) at ghcr.io/seldonframe/seldonframe; or docker compose up --build to build from source. Bring your own LLM key (Anthropic or OpenAI); SMS/voice (Twilio), email (Resend), and 1,000+ integrations (Composio) are add-your-own-key. Full guide: QUICKSTART.md.
When you're ready to scale
Your agency hub is seldonframe.com/agencies — deploy branded client workspaces, set your own client pricing, and keep the master view. Builders can still publish portable agents through seldonframe.com/build and let other LLMs rent them over MCP.
Pricing — no surprises
| Self-host | $0 — AGPL-3.0, the entire monorepo · docker compose up and you're running |
| Builder | $29/mo · BYOK · workspaces for businesses you operate |
| Managed | $49/mo · SeldonFrame-managed AI · one workspace |
| Agency Starter | $99/mo · white-label · 10 client workspaces · 0% GMV |
| Agency Growth | $199/mo · 30 client workspaces · 0% GMV |
| Agency Scale | $299/mo · unlimited client workspaces · API/MCP + marketplace access · 0% GMV |
| Build before checkout | Create the first client workspace free, then choose the hosted plan that matches your delivery needs |
| Marketplace sales | 5% only when the marketplace brings the buyer |
Tech stack
- Next.js 16 (App Router) + React 19 + TypeScript — one deployable app: dashboard, generated public sites, and API
- Drizzle ORM on Postgres (Neon in production; any Postgres 15+ when self-hosting)
- Tailwind CSS 4
- pnpm workspaces + Turborepo (monorepo)
- MCP server —
@seldonframe/mcp, plain Node, runs locally inside your IDE - Anthropic / OpenAI (bring your own key) · Stripe payments · Twilio voice/SMS · Resend email
Contributing
The highest-leverage PR here is an agent template or a vertical skill-pack — merged templates ship to the marketplace where every SeldonFrame user can find them, and you can list your own paid variants alongside. Core, connector, and eval PRs are equally welcome.
- Start with CONTRIBUTING.md, then issues labeled
good first issue/help wanted - House rule: agent-behavior changes ship with eval scenarios; runtime changes ship with tests
Community
- 💬 Discord — fastest way to get help, feedback, or just say hi
- 🐦 @themaxthule on X — release notes, tips, dogfood notes
- 📚 Docs — deeper guides than this README
- 🐛 Issues · 📡 Discussions
- ✉️ Partnerships: [email protected]
License
AGPL-3.0 for the whole monorepo. Self-host freely; if you modify it and run it as a network service, your modifications stay open. For closed-source embedding, the hosted plan is the commercial alternative — see LICENSING.md. Same dual model as Mattermost, Plausible, and Postiz.
Build an agent. Sell it. Get paid. — from your IDE.
If this is the platform you've been looking for, ⭐ star the repo — it helps more builders find it.
No comments yet
Be the first to share your take.