Skip to content

AI Craft

AI-powered message, note, comment, and follow-up writing with brand voice.

Full name: campaignstack_craft_message

workflows:write Read-only

Draft a personalized LinkedIn first message using full campaign context; it does not send anything. Call this when the user asks for a first-touch message to a specific lead. Show the draft for approval, then send it with campaignstack_send_message (connected lead) or campaignstack_send_inmail (not connected). Use only for first messages; for follow-ups, use campaignstack_craft_followup instead.

NameTypeRequiredDefaultDescription
leadIdstringYes(min length: 1)
campaignIdstringNo
workspaceIdstringNoWorkspace ID. REQUIRED for a user key (csu_), which spans every workspace you belong to; omitted for a workspace key (cs_), which is bound to one and ignores this argument. campaignstack_whoami reports which kind of key you are holding and, for a user key, the workspaces it can reach.
workflowIdstringNoWorkflow the craft belongs to. Used to resolve signal-agent playbooks. Injected automatically for runner agents.
instructionsstringNo
messageTemplatestringNo

Full name: campaignstack_craft_note

workflows:write Read-only

Draft a personalized LinkedIn connection note (max 300 characters); it does not send the connection request. Call this when the user asks for a note for a connection request. Show it to the user, then pass it as the note argument to campaignstack_send_connection_request. For first messages after connecting, use campaignstack_craft_message instead.

NameTypeRequiredDefaultDescription
leadIdstringYes(min length: 1)
campaignIdstringNo
workspaceIdstringNoWorkspace ID. REQUIRED for a user key (csu_), which spans every workspace you belong to; omitted for a workspace key (cs_), which is bound to one and ignores this argument. campaignstack_whoami reports which kind of key you are holding and, for a user key, the workspaces it can reach.
workflowIdstringNoWorkflow the craft belongs to. Used to resolve signal-agent playbooks. Injected automatically for runner agents.
instructionsstringNo

Full name: campaignstack_craft_comment

workflows:write Read-only

Draft a relevant, rapport-building comment on a lead’s LinkedIn post; it does not post the comment. Call this when the user asks for a comment on a specific lead’s post. Show the draft to the user, then post it with campaignstack_comment_on_post; for a reply to someone else’s comment, use campaignstack_reply_to_comment instead.

NameTypeRequiredDefaultDescription
leadIdstringYes(min length: 1)
campaignIdstringNo
workspaceIdstringNoWorkspace ID. REQUIRED for a user key (csu_), which spans every workspace you belong to; omitted for a workspace key (cs_), which is bound to one and ignores this argument. campaignstack_whoami reports which kind of key you are holding and, for a user key, the workspaces it can reach.
workflowIdstringNoWorkflow the craft belongs to. Used to resolve signal-agent playbooks. Injected automatically for runner agents.
postContentstringYes(min length: 1)
instructionsstringNo

Full name: campaignstack_craft_followup

workflows:write

Draft a contextual follow-up message that accounts for the full conversation history; it does not send the message. Call this when the user asks for a reply or a follow-up nudge in an existing LinkedIn thread. The thread is read from the stored conversation, plus any new lead messages you pass (see conversationMessages). Also detects lead intent (interested, not_interested, asking_for_info, scheduling_call, other). Show the draft to the user, then send it with campaignstack_send_message. For first messages, use campaignstack_craft_message instead.

NameTypeRequiredDefaultDescription
leadIdstringYes(min length: 1)
leadSourceglobal | privateNoOptional. Leave it out unless you know which lead store the id came from: the server derives it from the leadId and ignores a value that disagrees.
campaignIdstringNo
workspaceIdstringNoWorkspace ID. REQUIRED for a user key (csu_), which spans every workspace you belong to; omitted for a workspace key (cs_), which is bound to one and ignores this argument. campaignstack_whoami reports which kind of key you are holding and, for a user key, the workspaces it can reach.
workflowIdstringNoWorkflow the craft belongs to. Used to resolve signal-agent playbooks. Injected automatically for runner agents.
accountIdstringYes(min length: 1)
conversationMessagesobject[]NoOptional. Messages the LEAD sent that you read on screen and the platform may not have synced yet. The thread itself is read from the stored conversation. Never include your own messages: every message this account sent already has a row, and a self entry is ignored.
instructionsstringNo

Full name: campaignstack_reply_to_comment

workflows:write Read-only

Draft a contextual threaded reply to a comment on a LinkedIn post; it does not post the reply. Call this when the user asks for a reply to a specific comment. When addDmHint is true (a DM is also being sent), the reply includes a ‘Sent you a DM!’ nudge. Nothing is posted here: after showing the draft to the user, the runner agent types the returned replyText on the post via browser_* tools; there is no separate send tool for this one.

NameTypeRequiredDefaultDescription
leadIdstringYes(min length: 1)
campaignIdstringNo
workspaceIdstringNoWorkspace ID. REQUIRED for a user key (csu_), which spans every workspace you belong to; omitted for a workspace key (cs_), which is bound to one and ignores this argument. campaignstack_whoami reports which kind of key you are holding and, for a user key, the workspaces it can reach.
workflowIdstringNoWorkflow the craft belongs to. Used to resolve signal-agent playbooks. Injected automatically for runner agents.
commentTextstringYes(min length: 1)
postContentstringYes(min length: 1)
addDmHintbooleanNo
instructionsstringNo