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.
Hi, can I get a large pepperoni for pickup?
Sure thing. Anything else with that?
Garlic knots. That's it.
Great, it'll be ready in 20 minutes. Bye!
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.
Start with the instructions your agents run today. sopops splits them into shared instructions and step-by-step procedures, and keeps every version.
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 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.
A team reviews a handful of groups, each with example calls, instead of hundreds of flags. Each verdict teaches the checker for next time.
The edit goes to the procedure that caused the miss. Save it as a draft, or open a pull request against your repo.
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.
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.
| Platform | Instructions | Calls, after they end | Calls, as they happen |
|---|---|---|---|
| LiveKit | one 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. |
| ElevenLabs | no codesopops updates the agent when you publish. | no codeAdd a post-call webhook. | no code on EnterpriseLive phone calls on an ElevenLabs Enterprise plan. |
| Vapi | no codesopops updates the assistant when you publish. | no codePoint the Server URL at sopops. | no codeTurn on live updates in Vapi. |
Apache-2.0. Your servers, your model keys.
Everything in open source, run by us.
Paste them in, or point Claude Code at your agents' repo. Your first calls are checked the same day.