Propose updates
propose_updatesFlagship source-to-updates flow. Pass ANY source text — a transcript, an email, notes, or a freeform request describing changes — and get context to reason over: matched accounts/contacts/opportunities, the active workspace schema, and recent history for each matched record. USE THE CONTEXT to assemble ATOMIC proposed updates, then call review_proposed_updates with ALL of them for field-by-field approval (it returns a review receipt); after the user chooses, call commit_reviewed_updates with that receipt and only the selected proposal IDs. matched_entities ALREADY resolves the people/companies/deals in the source (with ids, state and recent history) — reference those ids directly; do NOT call get_context or the search_* tools to re-find records you already have here. Ignore junk candidate names (filler words, roles, the rep/vendor). When the source came from a STORED touch (a recorded meeting's transcript or a logged call read from Capable), ALSO pass source_touch_id: the touch's own linked account/contact/opportunity are pinned into matched_entities (pinned:true) and are the authoritative subject — trust them over name-matched rows when the two disagree, and use source_touch.participants' captured emails/names, never the transcript's spellings, when proposing new contacts. Do NOT call write tools yourself: that skips the user's approval. Never invent ids. For lowercase names or scripts without capitalization, supply candidate_names copied from the source. Entity matching is heuristic; entity_resolution reports unresolved and ambiguous candidates — resolve ambiguity before proposing a write. text may be omitted when source_touch_id names a touch with a stored transcript (returned in full as source_touch.transcript).
When to use: After any meaningful conversation, email, or note about a relationship. Pass the text in text.
Example: [paste a call transcript, email, or notes and ask] Pull out anything that needs to be updated in the CRM.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Any source text: a transcript, an email, meeting notes, or a freeform request. | |
| transcript | No | Deprecated alias for `text`, kept for the old transcript-only signature; used only when `text` is omitted — prefer `text`. | |
| source_type | No | What the source text is (transcript, email, note, request, other); defaults to transcript and is echoed back as source_type. | |
| candidate_names | No | Entity names copied from the source, especially lowercase or uncased-script names. These are match candidates, not authoritative identities; names absent from the source are ignored. | |
| source_touch_id | No | When the text is the transcript/summary of a stored touch (recorded meeting, logged call), its touch id — pins the touch's linked records into the match. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| guidance | No | ||
| workspace | No | ||
| source_type | No | ||
| source_touch | No | ||
| source_length | No | ||
| recent_history | No | ||
| source_excerpt | No | ||
| matched_entities | No | ||
| entity_resolution | No | ||
| matched_account_states | No | ||
| extracted_candidate_names | No |