Publish a release
Snapshot your product context into an immutable release that coding agents can implement.
Publishing a release freezes your current specs into an immutable, versioned snapshot. That's what makes handoff reliable: coding agents implement from a fixed point, not from a workspace that keeps changing under them. Before you publish, make sure your specs are in a state you'd hand to an engineer, and that you're the project owner.
What a release actually is
- An immutable snapshot of the project's file tree, identified by a content hash.
- The default source for agent read commands — the latest release is what they see unless told otherwise.
- Optionally, a public HTML preview (published when the pipeline succeeds) at:
https://spec.getoriginai.com/{projectId}/{hash}/ - Accompanied by agent-readable plain text, published next to the HTML and requiring no login:
- An index / file list at
…/{hash}/llm.txt - The full sources at
…/{hash}/llm-full.txt
- An index / file list at
Publish a release
- Open the project in the workbench.
- Open Releases.
- Review the summary or notes if the UI prompts you for them.
- Click Publish.
- Confirm a new row (with a new hash) appears in the history.
- Optionally, open the public preview link.
- Hand it off to a coding agent by copying a prompt from the Releases panel:
- Implement — a hash-based prompt for the CLI or MCP.
- Markdown — points the agent at
llm-full.txt(a public fetch, no login). - Visit URL, CLI, hash, or get-diff — other handoff shapes for different situations.
You've succeeded when…
- A release row exists with a stable hash.
- Agents listing documents see the snapshot, not your mid-edit workspace.
- The preview URL loads (assuming the HTML step succeeded).
llm.txtandllm-full.txtare fetchable for agents that prefer HTTP over the CLI.
Troubleshooting
| Symptom | What it means |
|---|---|
| Publish reports "unchanged" | The content hash matches the previous release, so the HTML step was skipped — nothing changed. |
| An agent still sees old files | The agent needs to run get-diff or re-read the latest release; check the release_hash in .origin.json. |
| An agent can no longer write the workspace directly | Expected after the first release — the write stages a change request. |
| The preview is missing | HTML upload is a separate step after the database snapshot; check for publish errors. |
How the pipeline works (for operators)
Under the hood, publishing runs three stages:
- A frontend mutation calls the
publish_releaseRPC, which writes the immutable release row. - On success, the
publish-release-htmlEdge Function renders the HTML and uploads it to R2. - The
origin-previewWorker serves that HTML atspec.getoriginai.com.