Availability, slots and reservations that never double-book — as JSON, on a box you own. No dashboard to click, because the thing doing the booking doesn't have hands.
Same calendar, same rules, same moment in time. Pick a slot and watch what an agent would actually send — the page never calls the network, it just shows you the shape of the conversation.
Ada Lovelace
Pick a time to see the request.
An agent scheduling on your behalf cannot drive a calendar widget. It wants times it can parse, an answer it can branch on, and a way to learn the tool without being told.
creneau slots returns RFC3339 UTC, sorted. Availability minus
bookings minus buffers minus notice — already computed, nothing to scrape.
A taken slot exits 95, not a red toast. Missing thing is
92. An agent branches on the number instead of parsing prose.
creneau guide returns the model, the ordered happy path and
the traps, offline, from the binary. No docs site to crawl.
The criteria were written down and committed before the code, so they could not be quietly relaxed once the answers arrived.
7,467 booking attempts at concurrency 16 for 60 seconds against six deliberately overlapping starts. Zero overlapping confirmed pairs — asserted with SQL against the datastore, never against the API's own answer.
A fresh agent, given only the binary and forbidden from reading the source, went from nothing to a confirmed booking in six calls. The threshold was ten. It found three bugs in the docs on the way.
creneau is application code on bkn, a single-binary backend core over embedded SQLite. Your calendar stays a file you can copy.
Said plainly, because finding out later is worse.