Warm transfer: transfer_to_number can brief a human before it bridges
Warm transfer: transfer_to_number can brief a human before it bridges
The transfer_to_number builtin now takes a mode in its builtin_config, so one tool covers both ways to hand a caller to a person:
cold is unchanged: a SIP REFER on the caller’s own leg. The carrier takes it, the platform drops out, there is no second leg and no marginal cost, and the handoff is terminal — the caller must be on a phone line.
warm dials the destination into a private consult room, reads them an AI-generated summary of the call while the caller holds, and bridges the two only once they accept. It originates a leg the workspace pays for, so it clears the workspace spend gate and carries its own ringing and duration ceilings. It works for a web caller too, because the caller never moves. A no-answer or a decline fails soft — the caller stays with the agent.
mode is operator configuration, not an LLM-visible parameter: the model chooses whether to transfer and to whom, never which mechanism delivers it, because the two differ in who pays for the rest of the call. An agent that needs both mounts two instances under different names.
Nothing you already send changes — a transfer_to_number config with no mode is cold, exactly as before. (An interim transfer_to_human builtin shipped the same day was folded into this one before release; there is no separate builtin.)
Warm transfer on the flow canvas
The transfer_to_number flow node takes the same mode (cold | warm) and hold_message, with the destination baked into the node config rather than supplied by the model. A cold node is terminal. A warm node is not — because warm can fail soft back to the agent, the flow validator requires the node to have an outgoing edge for that path.
See Tools.