Draft a package
draft_packageCreates a RelayLink draft of a package: a briefing or message for another person, which may reach their own AI assistant. Returns a preview for the user. Nothing is sent until confirm_send, the step that runs once the user approves in their own message. The recipient's assistant sees only what the package contains, so it is written for fidelity rather than compression. human_note_draft is a proposed note in the sender's voice, which the user approves or rewrites in their own words. message is everything the sender means to say, in their voice, as long as it needs to be, with their position and its reservations, hedges and tone: "leaning toward X but worried about Y" stays that, rather than becoming "X". It is approved with the package; cancel_draft and a new draft change its wording. A plain message, such as a one-line answer, needs only the note and a response shape. A first message to somebody who is not yet a contact also needs an ask and a brief. stated_by_human=true marks an assumption the user stated, which keeps it apart from one that was inferred. The private conversation itself is not included, and neither is anything the user marked as private or offhand.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"humanNoteDraft": "<humanNoteDraft>",
"responseShape": "<responseShape>",
"urgency": "<urgency>"
},
"name": "draft_package"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | The user's own tags to apply to the thread when this is confirmed — private, never sent, never seen by the recipient. list_tags shows names already in use. | |
| tldr | No | The quick read — what this is about and the main point, at most 400 characters. Optional: leave it out and the opening of the message (or of the note, when there is no message) stands in. | |
| topic | No | Short thread topic, a few words. Required for a new thread. | |
| askText | No | The one thing the sender wants from the recipient, in a sentence or two. Required unless response_shape is fyi; leave it out then and the package reads "No reply needed". | |
| message | No | Everything the sender means to say to the recipient, in their own voice — as long as it needs to be. Carry their position and its reservations, hedges and tone; do not tidy a maybe into a yes. Approved with the package; leave it out for a one-line message, where the note is the whole of it. How long it may be is set by the sender's plan, and a message past it is refused with the number rather than trimmed — never shorten it yourself. | |
| project | No | A notebook project to file this conversation under, by name — the same projects notebook_save and notebook_find use. Made if it does not exist. Filed when the send is confirmed, so list_threads and search_messages can narrow to it afterwards. | |
| toEmail | No | Recipient's email address. Use when the user gives an address, or when toContact reported the name as ambiguous. A new thread needs this, toContact, or toGroup; omit all three when replying (the thread determines it). The user's OWN address is valid: that is how a briefing is handed to another assistant connected to the same RelayLink account (e.g. drafted here, picked up in ChatGPT tonight). It needs no contact pair and sends no email; it waits in the account's inbox for whichever assistant asks next. | |
| toGroup | No | An owned group to start a NEW conversation with, by name — the same names list_groups and create_group use. Cannot be combined with toContact, toEmail, threadId or inReplyToPackageId: a group starts its own conversation. A Separate group sends each member their own private copy and none of them learns of the others; a Shared group is one thread they can all reply to. Only on the user's own explicit request, naming the group. | |
| urgency | Yes | Urgency hint: none | when_convenient | this_week | today. | |
| excerpts | No | At most 6 exact quotes from the session, each with why it is included — for words the recipient needs verbatim. Never a transcript. | |
| threadId | No | Existing thread_id when replying within a thread. | |
| decisions | No | Decisions reached, with confidence and reversibility. | |
| toContact | No | The recipient as the user names them: the nickname they set with rename_contact, or the name in list_contacts — a first name is enough when only one contact has it. Resolves only to accepted contacts, and reports a tie rather than guessing. A new thread needs this or toEmail; omit both when replying. | |
| references | No | Where supporting material already lives — up to 8 https links with a short title and why the recipient would open it. Pointers, never files: the recipient's own access to the document applies, and RelayLink shows the address as text. | |
| assumptions | No | Key assumptions, each tagged whether the user explicitly stated it. | |
| contextBrief | No | Background a reader with no history needs to answer well, and the message does not already carry: situation → thinking so far → where it stands, at most 6000 characters. Keep the reasoning and the qualifications; cut only what the recipient does not need. Optional: omit it for a plain message. | |
| openQuestions | No | Open questions the sender is still weighing. | |
| responseShape | Yes | Shape of the wanted response: opinion | decision | review | info | fyi. fyi means no reply is expected, and ask_text may be left out. | |
| humanNoteDraft | Yes | The sender's own words to the recipient — a few sentences, at most 2000 characters; the substance goes in message. A proposal — the user must approve or rewrite it before sending. | |
| optionsConsidered | No | Options weighed, with status: chosen | leaning | open | rejected. | |
| inReplyToPackageId | No | package_id being replied to, when replying. | |
| attachmentVersionIds | No | The sender's own Ready documents to attach, by version_id (from attachment_create_text, attachment_list, or attachment_upload_link) — at most 5, 5,242,880 bytes together. Only on the user's own explicit request, naming which document(s). The preview below lists every one with its size and hash, so approving the draft approves attaching them too. |