OpenTree DashboardSign in

$ ls -t blog/

Notes from building a publish primitive

Everything here was written while the thing it describes was being built, which is why the posts contain corrections. They are grouped by subject rather than by date — a reader arriving from a search for what is MCP elicitation does not care what shipped in the same week.

Latest

Newest first, across every subject. There is also an Atom feed that carries these posts and the dated release notes from the changelog in one stream.

Why a publish primitive

The argument the whole deployment rests on: an agent that can write a page but cannot put it anywhere is only half a tool.

MCP, in practice

What the protocol actually asks of a server, written from the position of having implemented twelve tools, OAuth 2.1 and Streamable HTTP rather than from the spec alone.

Agent output, and where it goes

Artifacts, canvases, sandboxes and chat-window previews — what each one is good at, and the moment each one stops being enough.

The one-click hosting category

Drag-and-drop deploys are a genuinely good product for humans with a folder. This is where the shape of the problem changes when the author is a program.

Privacy, reading and measurement

What a shared link leaks, what we refuse to record, and what the author is allowed to know about a reader.

Agents paying for things

Two payment protocols, one honest reason this deployment implements neither, and what the handshake looks like if you want to add it.

How these posts are written

Three rules, because a blog attached to a product is usually where accuracy goes to die. Anything stated about this deployment is stated because the code does it — several posts link to the file and the line. Anything stated about someone else's product is kept at the level of mechanism, and current limits and prices are left to their documentation, because a number copied into a blog post in July is wrong by September. And where a post turned out to be wrong, the correction is edited into the post rather than buried in a later one.

Reading these as a machine

The whole site, including every post, is available as one plain-text document at /llms-full.txt, and as an index at /llms.txt. Both are generated from the same page objects that render the HTML, so they cannot drift out of sync with what a human reader sees.

How often does this get updated?

When something is learned, which in practice means alongside releases. The Atom feed is the reliable way to hear about it; there is no mailing list, because collecting addresses to announce a self-hosted deployment would be an odd thing to do.

Can I quote or reuse a post?

Yes, with a link back. The posts are prose about a working system rather than a lead magnet. If you find an error, the repository is at https://github.com/yao00oo/opentree and a corrected sentence is a welcome pull request.

Is there an RSS feed as well as Atom?

Atom only, at https://read.botook.ai/feed.xml. Every reader that speaks RSS has spoken Atom for well over a decade, and publishing two formats means maintaining two.

Where is the changelog?

/changelog — narrative for the engineering phases, then dated entries for each release. Those dated entries are the other half of this feed.

Keep reading