15 August 2026
The install commands we print actually installLatest
Three things this site told agents to do could not be done. They can now, and the pricing figures stopped living in four places at once.
curl -fsSL /install.sh | sh works. That command has been printed in llms.txt, the docs and /api/skill/version since the first build, and the URL answered 404 the whole time. The script downloads skill.md, checks it against a SHA-256 this server computed over the same bytes, and writes one file into a skills directory it names before it writes anything.
- The Hermes well-known install works too: /.well-known/skills/index.json lists the skill with its size and checksum, and /.well-known/skills/oi returns the skill itself — the same bytes
skill.md serves, so a runtime and a reader cannot end up with different instructions.
?mode=agent on the homepage selects the agent view for any client. We had documented it as a structured agent view and were ignoring the parameter, which meant a browser-shaped agent following our own link got the marketing page.
- /pricing is a page. The navigation said "Pricing" and handed you a markdown file, and the URL anyone would guess answered
404. Every figure on it — and in pricing.md, the docs limits table, and the homepage cards — is now read from one table, so four surfaces can no longer quote three different numbers.
- Every asset this origin serves is addressed by a digest of its own bytes, the favicon included: its version moved out of a
?v= query and into the filename, where a shared cache cannot drop it. The conventional paths still answer for the clients that ask for them by name.
15 August 2026
One front door, and error pages that stop pretending
A tidying release: four of the five below are things the site was doing that it should not have been.
- Sign-in moved to a single page at /dashboard. There were two before — one to sign in, one to sign up — which was one too many, because a one-time email code already does both jobs from one field.
- Unrouted apex paths now return a plain error page instead of a full page of product chrome. A dead end is not a destination, and the recovery links a lost agent needs are in the
Link header of every document already.
- Removed font preloads for a typeface the pages never actually requested. Type is now honestly whatever your system already has.
- Fixed a caching bug on the icons and share card: unhashed files were being served
immutable for a year, so a browser that had seen the old artwork could never be given the new artwork. Only content-addressed URLs get the long cache now.
- llms-full.txt was missing the workspace invitation endpoints. It has them.
15 August 2026
A browser surface to go with the API
Until this release oi was an API with a text file at the front door. Now there is a site.
- The pages you are on: a homepage, plan cards, and answers to the questions people actually ask before trusting a host with their files.
- /docs grew a sticky sidebar with scroll tracking, search that runs in your browser over the entire page with no request to us, and a foldable table of every operation in openapi.json — generated from that file, so the two cannot disagree.
- Terms, a privacy notice, a data processing addendum, a security page that lists what is not in place as well as what is, and an abuse address that a human reads.
- /status checks the database, the blob directory, the serving tier and the sweeper at the moment you load it, rather than showing a green square somebody typed in last month.
- Icons, favicon and the link-preview card are drawn by the service at boot, so there is no build step for them and no stale asset checked into a folder.
15 August 2026
Everything an agent needs to find its way in
The point of oi is that an agent can use it without a human reading the docs first. This release is that promise, in files.
- llms.txt and llms-full.txt for context, skill.md as the operating manual, openapi.json for the machine description, and docs.md for agents that would rather read prose than schema.
- Structured entry points: agent.json, an RFC 9727 API catalog, a schema map, and a JSONL resource feed — all cross-linked, so landing on any one of them gets you the rest.
- The storage origin now returns errors in the same envelope as the rest of the API. Before this, an upload that failed answered in a different dialect from the call that created it, which is a miserable thing to debug from inside an agent loop.
- ETags on the discovery documents, a routing fix for the storage host, and a stale
OPTIONS route removed.
15 August 2026
First build: publish, serve, expire
The whole idea, in the smallest thing that could work.
- Anonymous publishing end to end — declare the files, upload them, finalize, and the URL is live. No account, no build step.
- The 24-hour clock, and a sweeper that runs every minute to enforce it. An expired URL answers
410 Gone, not 404, so an agent can tell a site that expired from a slug it got wrong.
- The serving engine: a single file gets an auto-viewer, a folder gets a browsable listing, a single-page app gets fallback routing, and everything gets a correct content type and an ETag.
- Content-addressed blob storage. Two identical files are stored once, and a republish that changes nothing uploads nothing.
- Uploads on their own origin, behind signed URLs that are time-limited and bound to exactly one object key each.