DesignAPI DesignPython

Why We Built Guava to Be Terse

January 12, 2026 7 min readGuava Engineering

There's a pattern we see constantly when teams first migrate to Guava from other voice AI platforms. They open up their old system prompt — the massive, meandering wall of text that used to drive their bot — and they freeze up. "Where does all of this go?"

The honest answer: most of it doesn't go anywhere. Most of it shouldn't have existed in the first place.

The System Prompt Trap

Here's what a typical "classic" voice bot looks like under the hood:

python
system_prompt = """
You are a friendly and professional dental scheduling assistant for Bright Smile Dental.
Your name is Grace. You work at the front desk and help patients schedule appointments.

When a patient calls, greet them warmly and ask how you can help. If they want to schedule an appointment, ask for their name, date of birth, and insurance provider. Then check availability and offer three time slots. If they ask about costs, tell them to contact their insurance. Do not discuss other dental offices or make negative comments about competitors. Always confirm the appointment before hanging up. If the patient seems upset, empathize and offer to transfer them to a human agent. Do not discuss politics, religion, or any topics unrelated to dental scheduling. Always speak professionally and warmly... """

# ... 200 more words of edge cases and guardrails ```

This is not software engineering. This is wishful thinking written in English.

The problem isn't just aesthetics. When you express your bot's behavior as prose, you get prose-quality guarantees — which is to say, none. You can't test it. You can't reason about it statically. You can't point to line 47 and say "this handles the case where a patient asks about cost." Every call is a negotiation between your instructions and whatever the underlying model decided to prioritize today.

What a Contract Looks Like

A good API expresses intent precisely. It's a contract: if you provide these inputs and invoke these methods, you get these behaviors. The best APIs in software — Unix pipes, React hooks, SQL — are terse because precision and verbosity are enemies.

Guava's set_task() is designed around this principle. Instead of asking you to describe behavior, it asks you to declare structure:

python
import guava

class DentalSchedulingBot(guava.CallController): def __init__(self): super().__init__() self.set_persona( organization_name="Bright Smile Dental", agent_name="Grace", ) self.set_task( objective="Schedule a follow-up appointment for the patient", checklist=[ guava.Field( key="patient_name", field_type="text", description="Full name of the patient", ), guava.Field( key="date_of_birth", field_type="date", description="Patient date of birth for verification", ), guava.Field( key="appointment_time", field_type="calendar_slot", description="Appointment time selected by the patient", choice_generator=self.get_available_slots, ), guava.Say("Confirm the appointment details and end the call warmly."), ], on_complete=self.end_call, )

def get_available_slots(self): return fetch_calendar_availability() ```

That's the whole bot. Twenty-two lines. It handles scheduling, confirmation, and call teardown — and every behavior is explicit in the structure.

Why Terseness Is Not Simplicity

We want to be precise here: terse does not mean simple. A complex multi-branch call flow can still be expressed tersely. What terseness means is that there is no gap between what you wrote and what the system does.

When you use a Field with field_type="calendar_slot", Guava knows to offer choices, handle reformulation when a patient asks for "something earlier," and persist the selected value. That behavior is encoded in the type — not in prose you hope the model reads carefully.

When you use guava.Say(...), you're being explicit: this exact content should be communicated. Not approximately this content. Not content in the spirit of this content. This content.

When you write a plain string in the checklist, you're handing the model exactly the right amount of latitude: achieve this goal, naturalistically, in your own words. You're not writing a script — you're writing a spec.

The Comparison in Practice

Teams that migrate from prompt-based platforms to Guava consistently report two things. First, their bots behave more consistently. Not because Guava has a smarter underlying model (though we do obsess over latency), but because the behavior surface is smaller and more predictable.

Second, they report that code review is possible again. You can look at a Guava bot definition and understand what it does. You can write a test that exercises each checklist item. You can open a pull request and have a meaningful review of whether the bot logic is correct.

That's what a terse API buys you: the ability to reason about your system. In production voice AI, that's not a nice-to-have. It's the whole game.

Try Guava