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.
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.
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.
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.
Same loop inside Cursor’s agent. Pull the site into your workspace, let the agent edit files, push it back to the server.
Drive the loop from Codex. The repo is just files — no API, no data layer to instrument before content is editable.
Run the loop from Aider, which commits each edit to git as it goes. Same files, same push, reviewable diffs along the way.
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.
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>
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"
Changed files sync to a relational database on the server. Only what changed is uploaded.
$ primo push
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.
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.
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.
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.
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.
MIT · open source · free forever