Open source

open_blog: a blog engine for Rails that an agent can operate

Version 0.1.0 · MIT licence · Ruby 3.2 to 4.0 · Rails 8.0 and 8.1

What it is

open_blog is a Rails engine. It publishes Markdown and rich-text posts, serves the reader pages, and keeps a record of every publish, edit, approval and removal. It has no admin screen. An agent, a script or an editorial tool operates it through Ruby operations, a JSON API or MCP tools.

We built it to give a blog the features that the Open Blog Baseline asks for: a modified date that moves only on a substantive change, an approval tied to one exact revision, and a notice on the page when a post has no such approval.

Install

bundle add open_blog
bin/rails generate open_blog:install

The generator installs the tables, mounts the engine at /blog, copies the reader views into your app, writes the initialiser and publishes a sample post. Then bin/rails open_blog:doctor checks the setup.

What is in it

Part What it gives
Reader pages Light and dark themes, categories, tags, authors, series, search, Atom and JSON feeds, a sitemap and structured data. The templates are copied into your app, so you can change them.
Publishing operations Each revision gets an identifier calculated from its content. Each release is recorded. An edit of a public post must say if it is substantive, a correction or maintenance.
JSON API and MCP Scoped tokens let an editorial tool or an AI agent publish through the same path. Six agent skills ship in the gem: install, publish, update, adopt, policy pages and report.
Approvals and provenance A post carries who wrote it, who reviewed which revision, and whether the facts were checked. The AI notice on the page follows those records.
Adoption An existing blog comes in with its known history, dates and redirects, without a claim of a new first publication.
Operations Policy pages, page views, diagnostics, and reports that compare what a reader gets with the stored records.
AdminSuite Optional generated resources for an editor in a browser.

Approval is a question, not a gate

Before an agent sends a post, it asks its user one time to approve the draft. The agent sends the answer with the publish call: the name of the reviewer and whether the facts were checked. The gem stores what it gets.

Nothing stops a publication by default. A post with no recorded approval is published with a notice that says so. One optional setting makes an approval necessary. It is off by default.

What it does not claim

The gem has surface checks that read the live pages. A pass of the surface checks does not establish conformance to the Baseline. No software can check that a figure is true or that a source says what a post says it does. A person does that.

TrustGrowth has not moved its own blog to open_blog yet. This page will say when it does.

Licence

The code has the MIT licence. The text of the Baseline has a separate licence, CC BY 4.0. Issues and pull requests go to the GitHub repository.