Review change requests
Apply or dismiss spec updates that coding agents stage after a release.
After the first release, coding agents still write through the CLI or MCP — but those writes no longer land in the live workspace. They become a change request you review in OriginAI. You apply what you want, dismiss what you don't (with a reason), then publish so the next implementation starts from a new snapshot.
Your own edits in the workbench still save directly. Change requests are the return path from agents (and from GitHub App spec findings), not a second copy of the file tree.
Why they exist
Coding agents read the latest published release, not the specs you're mid-edit. A direct write from that stale snapshot would overwrite work you haven't published yet.
Staging keeps authorship with you. When a write returns suggested: true, that is success — the request is waiting under Change requests, not a permission error.
| Who | After the first release |
|---|---|
| You (or the in-app agent) in the workbench | Writes the workspace directly |
| A coding agent via the CLI or MCP | Stages a change request |
| The GitHub App, when a review says the spec is wrong | Stages a change request |
Open Change requests
- Open the project.
- Select Change requests in the project tabs. A count on the tab is how many open requests still have documents to apply.
- Open a row to review it.
The empty state is expected until an agent (or GitHub review) proposes something. Workbench edits never appear here.
A first-time banner explains the same thing: a request is waiting for you to apply or dismiss.
Review a request
Each request is one proposed set of document changes, not a branch.
| What you see | What it means |
|---|---|
| Status | Open (still being written), Ready for review (the author marked it done), or Decided (every document was applied or dismissed). |
| Source | A coding agent, the GitHub App, or a person. GitHub-sourced rows can link back to the pull request. |
| Purpose | The issue the change addresses, plus design rationale (what was chosen and which documents changed). |
| Documents | Preview the visual result, or read the diff (side by side or in one file). |
| Write waves | Each sealed batch of writes. Agents can commit a wave without marking the whole set ready. |
| Older version | That document was written against a workspace revision that has since moved. |
You can also Review on canvas to walk the proposed screens in the workbench, the same way you inspect a live file.
Apply or dismiss
Nothing from a change request reaches the live specs until you apply it.
- Open the request.
- Review the documents you care about.
- Apply all, or apply one document at a time.
- If a document is an older version, either skip it, edit the live file yourself, or Apply anyway if the proposed body is still what you want.
- To reject the rest of the set, Close it and write a reason. Pending documents are dismissed; the next agent reads that reason before proposing again.
Closing needs a reason on purpose. list-proposals returns dismiss_reason on decided items, so an agent can learn instead of re-proposing the same change.
Apply writes the workspace. It does not publish. Publish a release when the specs are ready for implementation.
What the agent does
You don't have to run these commands yourself — the OriginAI skill already describes the loop. This is the contract you're reviewing:
npx originai list-proposals --status all # read dismiss reasons before writing again
npx originai write-document --name "…" --content "…"
# first staged write creates the Change Request (suggested: true + proposal_id)
# there is no create_change_request command
npx originai describe-proposal <id> --title "…" --note "…" --rationale "…"
npx originai submit-proposal <id>write-document reuses the latest open request for that token unless the agent passes --proposal <id> or --new-proposal. Apply, dismiss, and recording a conclusion stay in OriginAI — agents never apply their own requests.
After you apply and publish, a repository can bind that request so the next pull request implements it:
npx originai get-proposal-diff <id> --bind
npx originai get-diff # now: published release vs that change request
# implement the diff in code
npx originai sync # after a new release hash existssync does not clear proposal_id until a new release hash exists. See the CLI for the full command list.
You're doing it right when…
- Agent writes after a release show up under Change requests, and the workspace is unchanged until you apply.
- You can apply, skip an older-version document, or close with a reason — and the next agent sees the reason.
- A published release is what coding agents implement; a change request is only a proposed next snapshot.
- You don't treat
suggested: trueas a failure.
Troubleshooting
| Symptom | What's going on |
|---|---|
A write returns suggested: true | Expected after the first release. Open Change requests, apply, then publish. |
| The tab is empty | No agent has staged a request yet. Your own workbench edits save directly. |
| Apply all skips some documents | Those rows are an older version. Review them, then apply anyway or skip. |
| The agent proposes the same change again | Close with a clearer reason, or confirm it called list-proposals --status all before writing. |
| The workspace looks right but agents still implement the old spec | Apply is not publish — publish a release. |
| You want the next PR reviewed against this request | Bind it with get-proposal-diff <id> --bind, then see GitHub App review. |