Skip to main content
Concrete call graphs an agent can follow. Each one resolves IDs first, configures where needed, confirms before high-stakes steps, and verifies after. See Building agents for the principles behind them.

Launch a sequence safely

1

Resolve the sequence

reply_search_sequences by name → resolve the exact sequenceId (ask the user if ambiguous).
2

Inspect its channels

reply_get_sequence_steps → see which channels the sequence uses.
3

Attach a mailbox (if email steps)

reply_list_email_accounts, then reply_assign_email_account_to_sequence if none is attached.
4

Attach LinkedIn (if LinkedIn steps)

reply_list_linkedin_accounts, then reply_assign_linkedin_account_to_sequence; warn if the account is unhealthy.
5

Set a schedule

reply_list_schedules, then reply_assign_schedule_to_sequence if none is set.
6

Optional AI SDR config

reply_attach_offer_to_sequence / reply_attach_playbook_to_sequence / reply_attach_knowledge_base_to_sequence, then reply_set_sequence_reply_mode.
7

Confirm, then start

Confirm with the user (“Start sequence X? This begins outreach to its contacts.”), then reply_start_sequence — expect NoContacts / NoEmailAccounts / Archived if configuration was skipped.
8

Verify

reply_get_sequence_stats or reply_search_sequences to confirm it is Active.

Add a contact to a sequence

1

Find the contact

reply_search_contacts by email or LinkedIn URL (the tool does not accept names — ask the user for an email if that’s all you have).
2

Create if missing

If missing and the user confirms details, reply_create_contact (needs a name plus at least one of email/LinkedIn URL).
3

Resolve the sequence

reply_search_sequences for the target sequence.
4

Confirm, then enroll

Confirm, then reply_add_contact_to_sequence (up to 100 IDs; per-contact skips arrive in NotProcessed, e.g. ContactAlreadyInSequence, ContactInBlackList).
5

Verify

reply_get_contact_activity to verify enrollment.

Supervise Jason in Review mode

1

Ensure Review mode

reply_set_sequence_reply_modeReview (if not already).
2

Read the queue

reply_list_pending_approvals — filter by sequence, owner, or channel.
3

Act on each draft (addressed by sequenceId + contactId)

Inspect the contact and context, compare against the attached playbook/knowledge base, then:
  • reply_approve_message (optionally overriding body/subject) — sends immediately;
  • reply_regenerate_message with specific feedback to revise the draft;
  • reply_reject_message only if the contact should leave the sequence entirely — rejection is irreversible and removes them from the sequence.
4

Bulk approve carefully

reply_bulk_approve_messages only after every draft in the batch was reviewed — the batch is atomic: one stale reference rejects the whole batch and nothing is sent.

Switch Jason to Autonomous

1

Verify configuration

Verify the sequence has an offer, playbook, and knowledge base attached and reviewed.
2

Confirm explicitly

Autonomous mode sends replies without per-message approval. Get explicit confirmation.
3

Switch

reply_set_sequence_reply_modeAutonomous.
4

Keep watching

Keep watching reply_get_inbox_emails and reply_get_sequence_stats.

Reply to an inbox thread

1

Find the thread

reply_get_inbox_emails (pagination only in v1 — no filters; previews only, not full bodies) → resolve the exact threadId and note its channel.
2

Draft and confirm

Draft the reply and show it to the user for approval.
3

Send

reply_send_inbox_reply with the matching channel (Email or LinkedIn) — v1 supports message body only (max 32,000 chars); no Cc/Bcc, attachments, or scheduling. Expect ChannelMismatch, ContactOptedOut, or ThreadSendFailed as the named failure modes.
4

Optionally categorize

reply_change_inbox_category to reflect the new state.

Handle an unsupported request

1

Confirm no tool fits

Confirm no tool in tools/list can do it.
2

Check the app map

reply_get_app_map — the action may be a UI-only setting; return the exact in-app link.
3

Check the Help Center

reply_search_knowledge_base + reply_get_knowledge_base_article — answer a how-to and cite the source.
4

Report if truly missing

Only if genuinely missing, reply_report_unsupported_request with a stable kebab-case requestKey and a category from its enum — then tell the user plainly you cannot do it. Offer the REST API if it covers the gap.
These recipes power the task-based guides, which add the cross-surface view (CLI, Skills, API):