Review proposed updates
review_proposed_updatesPresent atomic proposed CRM updates for field-by-field approval. Pass the proposals you generated; each commit.tool must be an allowlisted write tool and commit.args must match that tool's input schema. Record creates/updates go through the GENERIC verbs — create_record takes { object_type, data: { …fields } }; update_record takes { object_type, id, patch: { …fields } } with id the resolved record UUID from your matches; the activity/domain verbs take flat args. It validates each proposal independently and, on hosts that render cards, shows the same field-by-field review as a card; invalid rows are flagged. It commits NOTHING itself: it returns server-generated proposal IDs plus a short-lived receipt, and after explicit selection you call commit_reviewed_updates once with that unchanged receipt. A proposal can link only to a record that already exists: when a batch creates a new parent (an account or contact), review and commit those creates first, then propose the rows that link to them in a second review using the ids commit_reviewed_updates returns. Retire a converted lead in that review only when it references nothing created there, such as a new opportunity; otherwise in a third review once those ids exist, since a retired lead can't be edited. Too large to seal? Split it into smaller reviews. The card DISPLAYS each row from commit.args (the fields that will actually be written), so args must carry everything the user should see; target, title and field_changes are legacy presentation hints only. When the changes come from a stored conversation, carry its source_touch_id into this review.
When to use: Right after propose_updates, or whenever you've assembled atomic updates from a prompt: pass the proposals (each with the write tool + args to commit it) to validate them and receive a short-lived review receipt. Commits nothing itself.
Example: Show me those changes as a card so I can approve the ones I want.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| proposals | Yes | 1–50 atomic proposals, each {confidence 0–1, commit:{tool, args}} plus optional rationale and field_changes; kind, title and target are optional presentation hints derived from commit.tool/args when omitted. commit.args is exactly what gets written. | |
| source_touch_id | No | Stored conversation used to derive this batch. Preserve the source_touch_id returned by propose_updates. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| count | No | ||
| receipt | No | ||
| warnings | No | ||
| proposals | No | ||
| review_id | No | ||
| expires_at | No | ||
| valid_count | No | ||
| invalid_count | No |