The framework for production voice agents.

Dynamic prompting with full control, in plain code you own. Your coding agent can build, test, and simulate conversations before it ships.

npm create curb.js .
The Curb preview: a caller reports a burst pipe to an insurance agent, which opens the Report a claim skill, checks the policy and opens the claim, and on the right the context panel lists the skill in use and its tools.

Dynamic prompting

Your prompt is React, so it follows your state. At every moment of the call, the model gets only the instruction and tools that fit.

CurbJS

verified
true
export default function ReportClaim() {
  const [verified, setVerified] = useState(false);
  if (!verified) return <>
    <Instruction>Ask for the policy number.</Instruction>
    <Tool name="verify_policy" …
      onSubmit={() => { setVerified(true); … }} />
  </>;
  return <>
    <Instruction>Ask what happened.</Instruction>
    <Tool name="open_claim" … />
  </>;
}

Model context

Ask for the policy number.

Ask what happened.

verify_policy

open_claim

Everything you need to build a voice agent

Automated testing

Write a call down once and run it after every change, with no microphone. When a real call goes wrong, your coding agent finds the cause, fixes it and keeps the call as a test.

How testing works

$ npx curb test

--- opens a claim for a burst pipe
caller: A pipe burst at home last night
agent:  Your claim is open.
  pass  called open_claim

--- asks what happened before opening a claim
caller: I need to report some damage
agent:  What happened, and when?
  pass  did not call open_claim

--- answers a question without opening a claim
caller: Is water damage covered?
agent:  Water damage is covered.
  pass  did not call open_claim

3 of 3 scenario(s) passed in 0.6s.
A shortened curb test run on the quickstart agent, with a test model standing in for the LLM.

Built on a foundation you know

Works with your stack

Every part of the pipeline is a prop. Run it all on KugelAudio with one sign-in, or swap one part at a time.

LLM
KugelAudioAnthropicOpenAIAny OpenAI-compatible endpoint
Speech to text
KugelAudioOpenAIAzureDeepgramElevenLabs
Text to speech
KugelAudioOpenAIElevenLabsCartesia
Tools
Your APIsAny MCP server

Get started in seconds

npm create curb.js .

In an empty folder. Keep the defaults and the agent runs on KugelAudio with one sign-in.

npx curb login

Opens your browser once. There is no key to copy.

npm run dev

Type to your agent, or start a call, and watch what the model has.

npx curb test

Runs whole conversations from the terminal, with no microphone.

Start building