For AI agents

The CMS your agent builds and your client edits.

Agents made building sites fast. That moved the bottleneck to handoff — the moment you give the site to someone who can’t open a terminal. Primo is the one CMS where the code your agent edits and the page your client edits are the same files. No export step, no second system, no glue code.

The handoff is the hard part now.

Point a coding agent at a site and it'll scaffold pages, write components, and fill in copy in minutes. The build was never the bottleneck. The bottleneck is what happens next — handing the site to a client who needs to change a price on a Tuesday night and has never seen a terminal.

Most stacks answer that with a second system: a headless CMS with its own admin, a data layer you instrument field by field, an API between the code and the content. Now there are two sources of truth and a translation layer to keep in sync.

Primo has one. Your agent pulls the whole site as plain files and edits anything. On push, those files sync to a relational database on the server, and your client edits the same site visually — on the rendered page, in the fields your blocks declared. The editor generates itself from each block's field schema. There's no glue code to write.

Pick your agent

Claude Code

Run the primo pull → edit → primo push loop from Claude Code’s terminal. Agent edits the whole codebase the way it would a SvelteKit app.

Cursor

Same loop inside Cursor’s agent. Pull the site into your workspace, let the agent edit files, push it back to the server.

Codex

Drive the loop from Codex. The repo is just files — no API, no data layer to instrument before content is editable.

Aider

Run the loop from Aider, which commits each edit to git as it goes. Same files, same push, reviewable diffs along the way.

One loop, any agent

Every per-agent page below walks the same four steps with that agent’s specifics. The CLI is identical — what changes is how you invoke the agent.

i. primo pull

Pull the site as files.

Components are Svelte; content and config are YAML. Your whole site — pages, blocks, content, routes — lands in the repo as plain files.

$ primo pull <your-site-host>
ii. agent

Let the agent edit anything.

Point Claude Code, Cursor, or Codex at the repo. It edits across the whole codebase — no fields to instrument first.

$ claude "redesign the pricing page"
iii. primo push

Push it back.

Changed files sync to a relational database on the server. Only what changed is uploaded.

$ primo push
iv. browser

Hand the client the browser.

Your client opens the live site and edits in place — on the rendered page, in the fields your blocks declared. Same source your agent reads.

$ open https://<your-site-host>

MIT · open source · works with any CLI agent. The loop is the same whether you drive it from Claude Code, Cursor, or Codex.

Questions

What is a CMS for AI agents?

A CMS an AI coding agent can edit directly as files in a repo — components, content, schema, and routes — instead of through a hosted admin UI or an API. Primo represents the whole site as files locally and database rows on the server, so an agent edits the source while a non-technical client edits the same source visually in the browser.

How is this different from a headless CMS like Tina or Sanity?

A headless CMS indexes your files into a separate data layer and makes you instrument each field before it’s editable — for example, Tina indexes files into a GraphQL layer and you wire each field with useTina. Primo has neither a data layer nor per-field instrumentation. The editor and the renderer both read the same Svelte files and database rows directly, and the editor generates itself from each block’s fields.yaml.

Which agents work with Primo?

Any CLI coding agent. Primo ships per-agent guides for Claude Code, Cursor, and Codex, but the loop is just primo pull → agent edits files → primo push, so any agent that can edit files in a repo works — Aider and others included.

Do my clients need to know how to code?

No. After the agent builds and you push, your client edits on the rendered page — click a heading and type, swap an image, reorder sections. They never touch the files or the terminal.

Build it with an agent. Hand it to a human.

One command to spin up a workspace. Point any agent at the repo, then hand your client the browser.

$ npx primo-cli init my-workspace
✓ workspace ready · server.yaml written

MIT · open source · free forever