Cairnloop 🏔️
An embedded, Phoenix-native customer support automation layer for Elixir applications.
Installation
The fastest way to install Cairnloop is with the Igniter installer. First, add Igniter to your dependencies if it is not already present, then run:
mix deps.get
mix cairnloop.install
The installer adds {:cairnloop, "~> 0.1.0"} to your mix.exs deps and generates a
create_cairnloop_tables migration against your detected Ecto repo.
Manual install (without Igniter)
Add Cairnloop to your mix.exs dependencies:
def deps do
[
{:cairnloop, "~> 0.1.0"}
]
end
Then run mix deps.get and generate the migration manually (see the quickstart guide for the
migration contents).
Why Cairnloop?
- Host-owned support truth. Conversations, drafts, governed actions, and outbound follow-ups all live in your Postgres database — no external CRM sync required.
- Safe automation by default. The AI drafts; your operators approve. Every proposed action passes through a durable approval state machine before execution.
- KB substrate built in. Hybrid pgvector + full-text retrieval keeps AI answers grounded in your published knowledge base, not hallucinated context.
- Additive, not invasive. Cairnloop is a library embedded in your existing Phoenix monolith. No separate service, no separate deploy.
- Observable without lock-in. Bounded
:telemetryspans on every meaningful operation. Export to any APM; your app stays in control.
What it does
Cairnloop turns support conversations into answers, product signals, knowledge-base improvements, and safe automated actions — all inside your existing Phoenix app. Incoming messages route through Phoenix Channels to a durable Ecto-backed conversation record. An Oban worker drafts an AI-grounded reply using your published KB and offers it to the operator for approval. Resolved conversations feed back into the KB maintenance queue through a governed review workflow, and support-triggered outbound follow-ups route durably through a configurable Notifier behaviour.
Explore the guides
- Quickstart — Clone, install, boot the example app, and walk your first support conversation end-to-end.
- JTBD Walkthrough — A prose walkthrough of every Jobs-To-Be-Done stage in the seeded example: inbox → draft approval → governed tool proposal → resolve → outbound follow-up → bulk recovery.
- Host Integration — Wire up
ContextProvider,Notifier,AutomationPolicy, andSLAPolicyProviderin your app. Includes telemetry patterns and Oban configuration. - Troubleshooting — Common install errors, migration order, pgvector setup, and Oban worker timing.
Contributing
Contributions are welcome. Open an issue or pull request on
GitHub. Please follow the existing code style and run
mix test before submitting.
License
MIT. See LICENSE.