When to use Bridle
What Bridle is for, what it replaces, and where to reach for something else.
Bridle is a harness, not a framework. Reach for it when you want an agent that runs like a program — deterministic control flow, typed values at every boundary, full visibility into every model turn.
Use Bridle when
- You need typed outputs at every step. Each
stepvalidates against a Pydantic schema. Bad outputs get corrective feedback and a retry; persistent failures raiseSchemaSatisfactionError, they do not corrupt downstream code. - The control flow is yours, not the model's. Branching, looping, retry policy, fallback chains, escalation — all expressed in Python. The model fills typed holes; the program decides what runs next.
- You want to debug what happened. A trace records every call, model turn, tool call, retry, cache hit. Replay it, stream it, assert on it in tests.
- You want caching, retries, timeouts, and mocks as composable wrappers. Wrap any call without rewriting it. Test by swapping the dispatch with
mock. - Your agent is a Python function and you want to keep it that way. No DAG builder, no graph DSL, no string-templated prompt chains. Just functions calling primitives.
Reach for something else when
- You need a multi-agent orchestration framework today. v0.1.0 is single-agent. Multi-agent coordination is on the v0.2.0 roadmap. Until then, compose agents by calling them as functions.
- You need streaming. v0.1.0 is sync and non-streaming. Token-level streaming and async lands in v0.2.0.
- You need a provider other than Anthropic. v0.1.0 ships an Anthropic adapter and a mock client. Other providers land with the model abstraction in v0.2.0.
- You want the model to choose tools and replan freely without a typed contract. That is what raw tool-calling APIs do. Use the SDK directly. Bridle is for programs where the shape of each step is known upfront.
How Bridle compares
If you have used another agent framework, here is the rough mapping.
| You're used to | Bridle equivalent |
|---|---|
| Building a graph of nodes and edges | Writing a Python function whose body calls step, branch, loop |
| String prompts that produce strings | Prompts that produce values typed by Pydantic schemas |
| A "router" or "supervisor" agent | An if/elif over branch results |
| Tool-calling loops you wrote yourself | A step with tools=[...] — the loop is built in |
| Bolted-on retry logic | The retry wrapper around any call |
| Logging by hand | The trace, plus the log wrapper |
Bridle does not replace your model SDK. It wraps it. You still bring an Anthropic key.