How the spec workflow works
Follow a SpecsGraph change from idea to Git commit: how agents propose over MCP, what each proposal status means, and why only people can approve.
From idea to commit
Every change to the spec, large or small, takes the same path. The model only changes through proposals, and a proposal only reaches your repository after a person approves it.
- Someone has an idea. An engineer asks their agent to update the spec, or starts a proposal in the web app.
- The agent reads the graph. Over MCP it calls read tools such as
get_project_overview,get_contextandlist_glossary_termsto find where the change belongs and which words to use. - The agent drafts a proposal. Write tools such as
propose_requirementnever edit the graph. They open a proposal, and later calls can add to the same one. - People review it. Reviewers read the changes node by node, open threads and ask for changes. The agent can read the threads and revise.
- A person approves it. Approval is a web app action for members with the Editor role or above.
- SpecsGraph opens a pull request. The GitHub App commits the change under
specsgraph/on the proposal branch and, by default, opens a pull request to the base branch. A project can switch to direct commits instead; see Branches and pull requests. - Merging publishes it. Merging the pull request marks the proposal Published, and the graph shows the change as the current revision.
Proposal statuses
A proposal is always in exactly one of these statuses. Other pages in these docs use the same names.
Draft -> Open -> Approved -> Published (pull request merged)
| ^
v |
Changes requested
Draft, Open or Changes requested -> Withdrawn
Approved, pull request closed without merging -> WithdrawnIf a pull request is closed without merging, the proposal stays Approved and shows a warning. Reopen the pull request, choose Retry publish to open a new one, or withdraw the proposal. Several proposals can be open at once, even on the same node; Proposals and reviews explains how to review them in turn.
People approve, agents propose
Agents never publish on their own, and the tool surface enforces it. The MCP server exposes read tools and a small set of write tools (propose_requirement, propose_term, propose_structure_change, comment_on_proposal, record_decision, update_task), and none of them approves, publishes or merges anything. The full list is in the MCP tool reference.
- An agent authenticates with a personal access token, so it acts as the person who created the token and can never do more than that person can.
- Approval happens only in the web app, by a signed-in member with the Editor role or above.
- The spec commit comes from your GitHub App after approval, not from the agent.
- Merging the pull request follows your repository's own rules, such as branch protection and required reviewers, and marks the proposal Published.
Note
Reviewing your own agent's work
The person whose token an agent used can approve that agent's proposal. When you work alone, that is the normal flow. On a team, you may want a second person to approve anything that touches another team's context.
What the agent sees and what the reviewer sees
Example: spec/checkout-reserve
An engineer on the Orders team in Northwind Commerce is changing checkout so stock is reserved before payment. They ask Claude Code to update the spec first.
The agent reads Orders and Billing
It calls
get_contextfor Orders and Billing and finds the glossary term Reservation, so it uses that word instead of "hold" or "lock".It opens one proposal with three requirements
With
propose_requirementit draftsORD-12"Reserve stock for every line item at checkout",ORD-13"Release reservations after 15 minutes idle" andBIL-04"Capture payment only once stock is reserved", each with scenarios. Withrecord_decisionit drafts a decision explaining why reservation comes before payment. The proposal "Checkout reserves stock before payment" is now Open onspec/checkout-reserve, with the author shown as "Coding agent via MCP".A Billing reviewer asks a question
On
BIL-04a reviewer asks what happens if a reservation expires between payment authorization and capture, and requests changes. The agent reads the thread withget_proposal, adds a scenario for that case and replies withcomment_on_proposal. The proposal returns to Open.The reviewer approves
The reviewer resolves the thread and approves. The proposal moves to Approved.
The pull request opens and merges
SpecsGraph commits the files below to the proposal branch and opens a pull request. The workstream file is included because the proposal is linked to
WS-3. The team merges the pull request alongside the code change, or on its own, following their usual rules, and the proposal becomes Published.Files changed on spec/checkout-reserveText specsgraph/contexts/orders/requirements/ORD-12.md specsgraph/contexts/orders/requirements/ORD-13.md specsgraph/contexts/billing/requirements/BIL-04.md specsgraph/decisions/0007-reserve-stock-before-payment.md specsgraph/workstreams/WS-3.md specsgraph/README.md specsgraph/graph.json
Next steps
- Proposals and reviews: threads, requesting changes and approval in detail.
- Branches and pull requests: how proposal branches and pull requests behave.
- MCP tool reference: every tool an agent can call.
- Decision log: record the reasoning behind a change.