leash states its own limits. This page lists behavior that is bounded by design, and capabilities deliberately deferred, so nothing here is a surprise in production. The architecture and durability docs cover the guarantees that do hold.
- The budget can overshoot by one in-flight call. Metering is
post-response - leash learns a call's cost only after the upstream has served
it - so the call that crosses a
--max-costbudget still completes.--max-cost-per-callbounds how large that final call can be, but does not eliminate the overshoot. Size the budget with one max-cost call of headroom. - Wrapper mode governs only base-URL-respecting SDKs. Tier 1 works by
injecting
OPENAI_BASE_URL/ANTHROPIC_BASE_URLinto the child. An SDK that ignores those (Amazon Bedrock's SigV4 client, Vertex's gRPC client, Azure OpenAI, or any client with a hard-coded base URL) sends traffic straight past leash. Those calls are simply not governed - run such agents through gateway mode with an explicit--upstream, or govern what you can reach. - Durable reactions have a bounded gap at the enqueue seam. With
--reactions-db, escalations are durable once enqueued, but the enqueue is asynchronous so the enforcement path never waits on it. A crash in the small window between a stop and the reaction's durable write loses that one reaction, and it does not re-fire (a stop is a live-only transition). This is deliberate (the meter is never blocked) and documented in ADR-0009; a boot-reconciliation sweep can close it if the window ever matters. - Stall detection is byte-exact. The stall boundary trips on verbatim
repeated responses. A loop that varies by a timestamp or an id each turn is
semantically stuck but not byte-identical, and will not trip it; lean on
--max-callsand--deadlinefor those. - Deadlines and rate windows use the wall clock. A large NTP step can make a
--deadlineor--ratewindow measure slightly early or late. leash does not discipline the system clock.
These are real capabilities leash does not have. They are scoped out of the
current releases, not overlooked. Each is tracked as a GitHub issue under the
roadmap label.
- Horizontal scale (#20).
One active governor owns a ledger at a time; throughput is one process. Per-run
sharding across governors (so a fleet can share one logical budget) is future
work.
--standbyis failover, not scale-out. - Hierarchical multi-tenant quotas (#21). Budgets are per run (per credential when auth is on). A quota that nests call < run < team < org, with limits at each level, is not modeled yet.
- OpenAI server-side tool pricing (#60). Per-request tool charges are read and priced for Anthropic; OpenAI's are not yet.
- Durable-reaction enqueue-seam sweep (#61). A crash between a stop and the reaction's durable write loses that one reaction; a boot-reconciliation sweep can close it.
- Vertex AI Gemini semantics (#62).
leash meters the Gemini API; Vertex reports
candidatesTokenCountdifferently. - Gemini API stability watch (#68).
Gemini's native support depends on the
usageMetadatafield names and the candidates-includes-thoughts semantics, which Google may change without notice; tracked so a silent metering regression is caught, not shipped.
Closed and released. See the CHANGELOG for the version each landed in, and security-model.md for verifying a release.
- Durable governance reactions (#54, closed).
- Native Gemini metering (#55, closed).
- Anthropic thinking tokens; fail closed on unpriceable tool spend (#56, closed).
- Opt-in priced dimensions (audio, cache-TTL, per-request tools, service tiers) (#57, closed).
- Soft limits and backpressure (#22, closed).
- Richer observability (#23, closed).
- Signed release supply chain (#24, closed).
- Windows SQLite governor lock (#25, closed).
- Idempotent ledger appends (#26, closed).
- Native Ollama metering (#59, closed).
Have a use case that one of these blocks? Comment on the issue - it helps prioritize.