Gaby¶
An open-source AI support agent. Reads tickets from your help desk, investigates root causes against your own systems (Postgres, Keycloak, Stripe, Sentry, Redis) via MCP connectors, and writes back a grounded reply.
Apache 2.0 · Self-hostable · Runs in your infrastructure · Bring your own LLM key
Get started in 3 minutes Read the architecture
Why this exists¶
Gaby is built by Skycloak, a managed Keycloak-as-a-Service. We have a team, but not the bandwidth to throw people at a ticket queue, and we know we're not alone: most founders and small teams can't afford to burn themselves (or their few engineers) out on support, or to hire ahead of it.
So we're building Gaby to do the low-touch work: read a ticket, investigate the root cause against the systems it actually concerns, handle the routine ones, and raise the right person the moment something genuinely needs a human, with the evidence already gathered. Same workflows, connectors, and safety constraints any operator needs.
We open-sourced it from the start because every B2B SaaS team has this problem, and the closed-source alternatives (Intercom Fin, Forethought, Decagon, Ada) ask you to ship customer data into someone else's cloud, with someone else's LLM provider, and trust a closed audit trail.
Gaby is what we'd want pointed at our own queue, and what we'd want if we were anyone else.
How it works¶
-
1. Deploy
docker compose up. SQLite by default; Postgres optional. Ships with the agent loop, the safety pipeline, the API, and the web UI bundled. -
2. Connect
Add MCP connectors to your real systems: Postgres, Keycloak, Redis, Sentry, Stripe, a curated community server, or your own. Each is an MCP server — a local subprocess Gaby spawns, or a remote server at a URL — speaking the standard
initialize+tools/listhandshake. -
3. Tickets flow in
Help desk adapters poll for new tickets: Zoho Desk, IMAP email, or Slack via the reference MCP ticket-source. Gaby claims one and runs the agent loop.
-
4. Resolve or escalate
The loop walks
PLANNING → RETRIEVING → SAFETY_CHK → ACTING → OBSERVING → VERDICT → WRITING_BACK. Gaby drafts a reply, the safety pipeline gates writes, and every action lands in a hash-chained audit log.
What Gaby ships today¶
-
Embeddable chat widget
~12 KB gzipped Preact bundle. Shadow-DOM isolated, authenticated install. Drop one
<script>tag and visitors talk to Gaby. -
Slack inbound
Reference MCP server (
@gaby/mcp-slack) connects over Socket Mode (an outbound WebSocket — no public URL, no inbound webhook). Two tokens from a bundled app manifest; invite the bot and every top-level message becomes a ticket. -
Support Lead persona
Dashboard, playbook library (YAML), SLA board, CSAT queue, escalation rules with a tiny
if <cond> then <action>DSL. -
Open connector catalogue
First-party read-only servers (Postgres, Keycloak, Redis, Sentry, Stripe), a curated community catalogue, and bring-your-own — a local command or a remote MCP at a URL. Stripe is structurally read-only; money-touching writes are policy-excluded from the tool surface.
-
Ask Gaby + Inbox
Read-only Q&A console with cited answers. Unified Inbox merges tickets + widget + Slack chats into one SSE feed.
-
Escalation channels
Fan-out alerts to Slack, email (SMTP), SMS (Twilio), Opsgenie, and SIGNL4. Per-channel test buttons, per-row failure isolation.
The boring parts that matter¶
Safety pipeline at 100% line + branch coverage
Scopes DSL → authz matrix → PII redaction → hash-chained audit → approval queue. Five hypothesis property tests guard the invariants: deny-by-default, deny-beats-allow, hash-chain integrity, tamper detection, redaction idempotence. The CI gate fails the build on any drop. See Safety.
Structural agent loop, not a framework
backend/src/gaby/agent/loop.py is a hand-written state machine.
Working memory snapshots at every transition so a crashed investigation
resumes from the last snapshot without re-running tool calls. One Python
module per LLM-call purpose; prompts are versioned Markdown files.
BYOK, runs on your hardware
Anthropic + OpenAI direct SDK clients, no proxy. LiteLLM as a library only
when you want to swap providers. Pre-call BudgetGuard with token + USD
+ wall-clock + iteration caps. No outbound telemetry beyond opt-in
anonymous usage pings.
How is this "open"?¶
Apache 2.0. Self-host forever, no paywall, no feature gate, no "free tier." The code you read on GitHub is the code that runs on your servers.
No pricing tier exists yet. We may eventually offer a hosted SaaS or an Enterprise tier (SSO/SAML, on-prem support contracts, premium connectors), but those are open questions on a v0.5+ roadmap, not products today. See BUSINESS.md for the honest position on what's free now, what's likely to stay free, and what might one day cost money.
Where to go next¶
- Getting started,
docker compose upto a working install in 3 minutes - Architecture, the agent loop, the safety pipeline, the memory hierarchy
- Spec, what Gaby is for, the four personas, success metrics
- Connectors, what Gaby can talk to today
- Changelog, every iter, every shipped behavior
- Source on GitHub: Apache 2.0
Built by Skycloak, to run our own Keycloak SaaS support.