Section 11 · Pricing, Proposals & Closing
11.1Pricing guardrails
Built — needs DMA's data- No.
- 11.1
- DMA's reference
- Decision Book p.24
- Phase
- Phase 1
- Autonomy
- L3 · Act within rules
- DMA's decision
- Yes
◆ Amended in v3 of the book.
What DMA asked for · Decision Book p.24
The AI may talk about price, and make pricing decisions, only within rules DMA approves.
Why it matters to DMA: It stops the AI freelancing on pricing: the foundation for any AI-led selling.
In our words, from DMA's Product Decision Book v3, page 24.
How we do it
- Prices live in one place: DMA's rate card, stored as a rule that changes only with a second person's approval. The POC's card holds sample prices, and it is still in review, so today no card is live.
- Proposals are priced by code from that card: the AI chooses the services and writes the words, but never sees or writes a price. Every line is checked against the card.
- In the website chat, a price question gets a range worded by code from the approved card only, such as "Local SEO usually runs $1,200–$2,100 a month; a strategist confirms exact pricing on a call". The AI never sees the figures: its pricing tool hands it a placeholder, and the chat puts the approved sentence in its place after every check has run.
- Any other number the AI writes next to a price is refused before the visitor sees it. With no approved card, or nothing on the card for that service, the chat says a strategist covers pricing on the call. A pricing question still goes to Josh's team, so a person confirms the exact price.
- What this needs from DMA: its real rate card, and which ranges the chat may show, approved by two people. Until then the live demo stays honest and shows no figures; the tests run the same code on a sample card.
The flow
It plays on its own while it's on screen; hover or use the controls to pause or step through.
One rate card
Changed only with a second person's approval.
- Stored data
- Person
- AI
- Rule in code
- Screen
Where the data goes
The same six stages on every page. Nothing reaches Nutshell except through the write gate.
- 1DMA's rate card
Source
Entered once, approved by two people.
- 2Sync
Copies Nutshell changes into the bridge database
Not involved.
- 3Bridge database
A copy of the CRM data, plus what the AI works out
The approved rate card, every proposal priced from it, and a log line for each price question (which card version, never the figure).
- 4AI
Claude models, only through DMA's own gateway
Chooses services and words; places the price placeholder; never sees or writes a price.
- 5Write gate
The only way back into Nutshell: checked, approved when needed, sent once
Proposal outcomes go to Nutshell through the gate.
- 6Nutshell
The system of record
The deal carries the proposal's value.
The tables behind it
Drawn from the POC's database catalogue: structure only, no data.
PK primary keyFK reference the database enforces (solid line)ID reference kept by id (dashed line)
| Table | What it holds | Columns |
|---|---|---|
| ctrl.policy_rules | DMA's rules as approved versions, including the rate card and the discount band. | 21 |
| ai.proposals | Each proposal: lines priced by code, totals, discount, the checks it passed and its approval. | 36 |
| ctrl.decision_log | Each price question the chat answered: the service, range or strategist line, and the card version. No figures. | 28 |
How the tables connect (6)
| Column | Points to | Kept by |
|---|---|---|
| ctrl.policy_rules.approval_id | ctrl.approvals | The application (by id) |
| ai.proposals.supersedes_id | ai.proposals | The database (foreign key) |
| ai.proposals.approval_id | ctrl.approvals | The database (foreign key) |
| ctrl.decision_log.agent_version_id | agent.agent_versions | The application (by id) |
| ctrl.decision_log.run_id | agent.runs | The application (by id) |
| ctrl.decision_log.conversation_id | conv.conversations | The application (by id) |
Worked example
Synthetic demo data: every name, business and number is made up.
A price question in the website chat
What you see
1.The rate card is a rule
Only an approved, active card counts. Today's sample card is still in review.

What happens in the system
- Bridge database
ctrl.policy_rules · rate_card.defaultThe chat reads the ACTIVE version only; a card in review is no card.
- Rule engine
four-eyesA second person approves the card before it is live.
Worded by code from the POC's sample rate card (sample prices, not DMA's). The tests run it as the approved card; the live demo's card is still in review, so the live chat shows the strategist line.
What the chat shows for "how much is …?" (sample card, as the tests run it)
| Visitor asks about | From | To | What the chat shows |
|---|---|---|---|
| Local SEO | $1,200 | $2,100 | "Local SEO (per location) usually runs $1,200–$2,100 a month; a strategist confirms exact pricing on a call." |
| SEO | $2,500 | $4,300 | "SEO (organic search) usually runs $2,500–$4,300 a month; a strategist confirms exact pricing on a call." |
| Paid search | $1,500 | $4,300 | "Paid search management usually runs $1,500–$4,300 a month; …" |
| Reputation | $600 | $2,100 | "Review and reputation management usually runs $600–$2,100 a month; …" |
| A new website (not on the card) | "Pricing depends on what you need, so a strategist covers pricing on the call." | ||
| Any service, no approved card (today's live demo) | The same strategist line: no figure at all. |
What the AI writes, and what the visitor sees
| The AI writes | The output gate | The visitor sees |
|---|---|---|
| "Good question. [[price:lane.local]] Would you like me to find you a time?" | Passes: no figure in the AI's text | The Local SEO range sentence, word for word, then the offer of a call |
| "[[price:lane.local]] For 3 locations that's about 3,600 a month." | Refused: a number of the AI's own next to the price | The strategist line and the offer of a call |
| "Local SEO is about $900 a month." | Refused: a price the AI wrote itself | The strategist line and the offer of a call |
A sample proposal, priced by code (sample rate card)
| Line | Qty | Price | Total |
|---|---|---|---|
| Local SEO (per location) | 3 | $1,200/mo | $3,600/mo |
| Review and reputation management | 1 | $600/mo | $600/mo |
| Monthly reporting and strategy call | 1 | $300/mo | $300/mo |
| Discount (within the 10% band) | 5% | −$225/mo | |
| Monthly total | $4,275/mo |
In the running POC

1 / 5One rule opened: what it does, its version and who approved it. The rate card is a rule like this.
- 1The rule in plain words.
- 2Its live version and its approval.
Dashboard · Govern → Rules, one escalation rule open. Captured from the running POC on September 25, 2026; synthetic data.
See it live
Opens the exact screen in the running POC, in a new tab.
Status
Built — needs DMA's data. This capability runs in the POC today. It needs DMA's own content or data to go live; no code change is needed for that.