Open source · for voice agents

Self-improving voice agents

sopops checks every call against your agent's instructions, groups the misses by cause, and drafts the fix. Your team approves it, publishes it, and watches the miss rate drop by release.

sop·ops — short for SOP Operations, as in running your agents' standard operating procedures.

Works with LiveKit ElevenLabs Vapi
tonys-pizza · pickup linechecking · release #14
Caller

Hi, can I get a large pepperoni for pickup?

Agent

Sure thing. Anything else with that?

Caller

Garlic knots. That's it.

Agent

Great, it'll be ready in 20 minutes. Bye!

Take-out order procedure3 of 4
✓Ask pickup or delivery
✓Take each item and its size
✕Read the order back before closingmissed at 0:41
✓Give a pickup time
What teams running voice agents tell us

Most teams hear about a bad call from the customer who had it

We find out from a complaint, days later.No one checks calls until something goes wrong.
We changed the prompt. Did it help?No way to compare one version of the instructions against the last.
The prompt lives in a dashboard text box.No history, no review, no record of which version a call ran on.
Nobody has time to listen to every call.Spot checks miss the calls that matter.
How it works

Every call feeds the next release

Start with the instructions your agents run today. sopops splits them into shared instructions and step-by-step procedures, and keeps every version.

1

Your agent loads its instructions at call start

One line in a LiveKit agent, or no code at all on ElevenLabs and Vapi. Every call records the release it ran on.

from sopops_client.livekit import attach

ins = await attach(ctx, session, agent="livekit:tonys-pizza")
await session.start(agent=Agent(instructions=ins.text))
sopops: tonys-pizza release 14 (live)
2

Each call is checked, step by step

sopops picks the procedures a call was supposed to follow and checks each step against the transcript. If the caller hung up early, the step doesn't count against the agent.

Ask pickup or deliveryfollowed
Read the order back before closingmissed
Offer a drink with any pizzadidn't apply
Never quote a delivery fee before the addressfollowed
3

Misses are grouped by cause

A team reviews a handful of groups, each with example calls, instead of hundreds of flags. Each verdict teaches the checker for next time.

Closes the call without reading the order back

37 calls · 4 agents
"Great, it'll be ready in 20 minutes. Bye!"
"Perfect, see you soon."
4

sopops drafts the fix

The edit goes to the procedure that caused the miss. Save it as a draft, or open a pull request against your repo.

procedures/take-out-order.md
## Before you close
+ Read the full order back and ask "Is that right?"
Give the pickup time.
Open PRSave as draft
5

Publish, then compare releases

Agents pick up the new release on their next call. sopops compares miss rates release by release, so a team knows whether the change worked.

Read-back miss rateexample data
18%
17%
10%
4%
#11#12#13#14
Coming soon · Runtime enforcement

Catch the miss while the caller is still on the line

Runtime enforcement checks each step as the call happens. When the agent is about to close without a required step, sopops nudges it — and the caller never notices.

0:31Caller: "Garlic knots. That's it."
0:39
Nudge to agent: read the order back before closing.
0:41Agent: "So that's one large pepperoni and garlic knots. Is that right?"
0:45Caller: "Yep."
Platforms

Works with the platform your agent already runs on

PlatformInstructionsCalls, after they endCalls, as they happen
LiveKitone line of codeAdd attach() where the agent starts a call.no codeAdd a project key and a webhook.no codesopops joins each call to listen.
ElevenLabsno codesopops updates the agent when you publish.no codeAdd a post-call webhook.no code on EnterpriseLive phone calls on an ElevenLabs Enterprise plan.
Vapino codesopops updates the assistant when you publish.no codePoint the Server URL at sopops.no codeTurn on live updates in Vapi.
Open source and hosted

Run it yourself, or have us run it

Open source

Apache-2.0. Your servers, your model keys.

  • Instructions and procedures, versioned in releases
  • Two-way sync with a GitHub repo
  • Every call checked, with your own model keys
  • Grouped misses, verdicts and drafted fixes
  • Miss rates by release, procedure and agent
  • Teams, roles and sign-in with email or GitHub
Self-host from GitHub
Managed

Hosted

Everything in open source, run by us.

  • Runtime enforcement during calls coming soon
  • An MCP server for your QA data
  • SSO, SCIM and audit export
  • Data retention controls
  • Model keys managed for you
Talk to us

Start with the instructions you already have

Paste them in, or point Claude Code at your agents' repo. Your first calls are checked the same day.