SendsetsDocs

Reply agent

When someone replies, the reply agent (inbox agent) drafts a suggested reply in your voice and holds it in the unibox for you to approve, edit, or discard. Choose its model and classifier, give it instructions and knowledge, and try it in a test chat. Draft mode requires approval; automatic mode requires a human-created grant and send-time checks.

The reply agent (also called the inbox agent) watches your replies. When a real person replies to one of your campaigns, it reads the thread and classifies the reply. If its category is selected, it drafts a suggested reply in your voice and attaches it to the conversation for review. You approve and send it, edit it first, or discard it. Draft mode is the default. Automatic mode can send eligible replies after a person grants explicit, time-limited authority.

Only replies linked to a completed campaign send are eligible. The sender must match the campaign contact, and the message must reference that send or belong to its stored thread in the receiving mailbox. Other inbox messages, including new conversations from existing contacts, are not classified or answered by the Reply Agent.

This is a paid feature and it is off until you turn it on.

Turning it on

Open Reply agent in the main navigation and switch it On in the header (it needs the Manage settings permission). Eligible inbound human replies to a campaign then get a draft. The tab has three parts:

  • Activity shows what the agent did over the last 7 or 30 days: replies handled, answered (and how many automatically), interested replies, drafts waiting for you, and the median time from a reply to its answer. A chart shows drafted and answered replies per day, a breakdown shows how replies were classified (each class opens its group in the inbox), and a live feed lists the latest drafts with their state. The status orb in the header pulses while the agent is on and flashes when new activity arrives. The same numbers appear in a card on Home, and the navigation shows a green dot while the agent is on.
  • Setup holds what the agent offers and which reply categories it drafts for, its knowledge, a test chat, the model, classifier and instructions, and, collapsed under Automatic sending and confidence, the grant, caps and confidence thresholds.
  • Classifier shows the built-in reply classes and lets you add your own labels. See automatic inbox tagging.

Paid and opt-in

The reply agent is available on paid plans and is off by default. Turning it on is an explicit choice. On the SendSets model each reply it drafts costs 5 AI credits; with your own OpenRouter or API key it costs no credits. See AI credits.

Choosing the model

Under Reply agent, Setup, Model, pick where replies are written:

ChoiceWhat it usesCost
SendSets modelThe model this instance runs for the reply agent. The default5 AI credits per drafted reply
OpenRouterYour OpenRouter account and any model it offers, such as openai/gpt-4o-miniBilled by OpenRouter, no AI credits
Your own APIAny OpenAI-compatible endpoint (OpenAI, Groq, Together, or a model you host), with a base URL, model id and optional keyBilled by your provider, no AI credits

Connect OpenRouter sends you to OpenRouter, where you approve a key for SendSets and can give it a spending limit. OpenRouter returns you to the tab and the key goes straight from OpenRouter to your workspace, so it never appears in the browser. You can paste an OpenRouter API key instead. Pick the model by its OpenRouter id; Browse OpenRouter models lists them.

For Your own API, the base URL is the one /chat/completions is appended to, for example https://api.openai.com/v1. It must be HTTPS and publicly reachable; private, loopback and cloud-metadata addresses are refused when you save and again on every request.

Keys are encrypted with your workspace's key and never shown again; the page shows only the last four characters. A saved key is only ever sent to the endpoint it was saved for: changing the endpoint, or switching between OpenRouter and your own API, forgets the key and asks for a new one. Choosing SendSets model or Disconnect forgets it too. Disconnecting does not revoke the key at OpenRouter; revoke it there to stop it everywhere.

Your choice applies to new drafts, their factual-support check, the classifier when it is set to your reply model, and the test chat. If a workspace key stops working, no draft is created for that reply and it is retried up to three times; reply by hand meanwhile, and use the test chat to see the provider's error.

Classifier

Under Reply agent, Setup, Classifier, choose how the agent decides what kind of reply came in. Whatever you choose, built-in rules first catch unsubscribes, spam complaints, rejections and automated replies, and those are never answered. Only the categories selected under Drafting are then answered.

  • Calibrated classifier (default) is Jev, a purpose-built intent model. It runs on your OpenRouter key when you connected one, otherwise on the operator's OpenRouter or TypeSafe key. Its confidence is calibrated, so a 95% threshold means what it says. With neither key available it falls back to rules.
  • Rules only makes no model call. Its confidence is lower, so more drafts are held for review, and rule-classified drafts are never sent automatically.
  • Your reply model asks the model chosen above to classify as well. Its confidence is self-reported rather than calibrated, so keep the classification threshold high if you use automatic mode.

Instructions

Under Reply agent, Setup, Instructions, write up to 4,000 characters of your own prompt: length, tone, what to propose next, what to avoid. The agent follows them unless they conflict with its safety rules. Instructions never count as evidence for a product claim, so put features, prices and approved answers in Product knowledge or the offer instead. Select Save model, classifier and instructions to apply the model, classifier and instructions together.

Test chat

Reply agent, Setup, Test chat runs the real pipeline on a conversation you type, with your saved settings, knowledge, offer and voice profile. Optionally add a subject and the email you sent (switch to Your email), then write replies as the prospect. Each answer shows the category, its confidence and who decided it, the drafted reply, whether your sources support its claims, whether it could be sent automatically under a grant, the model, and the tokens used. A reply the agent would not answer, such as an unsubscribe, shows why instead. Nothing is stored or sent, and the conversation clears when you leave the page. On the SendSets model each drafted test answer costs 5 AI credits; with your own key it costs none. Unsaved changes above the chat are not used until you save them.

Under Reply agent, Setup, What to say, set Signup URL to your product's absolute HTTPS signup link and Offer to approved product or offer details. The URL must have no embedded credentials or whitespace and fit within 2,048 bytes. The offer supports up to 2,000 characters. Both fields are optional; clear a field to remove it. Changes apply to newly generated drafts, not drafts already waiting for review.

Positive replies include the exact configured signup URL, preserving its path and query parameters. If the model omits it, the agent appends it to the draft. Other reply categories do not automatically get a signup link. The offer is provided as context for generation, alongside your existing voice profile. The agent checks factual product claims against the configured sources and flags answers that need attention. This model assessment can miss mistakes: review links, prices, terms, and answers before approving. Automatic mode also requires the grant and checks below.

Automatic replies

Draft mode keeps replies for review. To use automatic mode, first enable drafting, then open Automatic sending and confidence under Reply agent, Setup and select Set up grant. Choose specific connected mailboxes, a daily limit, and an expiry date within one year. Creating a grant requires both Manage settings and Access Unibox. Review and confirm the grant, then explicitly enable Automatic mode. A grant by itself does not enable automatic replies.

Only new drafts generated while automatic mode is enabled are candidates. The grant must predate the stored inbound message and the draft. Existing human-review drafts and imported drafts cannot be retroactively sent. Eligible categories are model-classified (calibrated classifier or your reply model) positive replies, questions, and objections meeting the current classification threshold, with a model_supported factual assessment meeting the current response threshold. Offline-only classification, referrals, unclear replies, opt-outs, automated messages, and unsupported answers stay out of automatic sending. These model assessments can be wrong; enable automatic mode only with suitable product sources and limits.

The defaults are 3 automatic dispatches per thread on this instance and 100 per workspace per UTC day. Configure limits from 1–100 per thread and 1–10,000 per day. The grant can impose a lower daily limit. Replacing a grant does not reset the day's workspace usage.

Immediately before worker dispatch, the backend rechecks mode, confidence, grant expiry and mailbox restrictions, suppression (addresses and domains), unsubscribed contacts, stored inbound safety, paid entitlement, credits and usage/spend budgets, workspace suspension, sender bans, mailbox status/risk/domain authentication, warmup health, live worker health, mailbox daily capacity, and whether the source is still the latest stored thread message. A newer manual reply task holds the automatic reply, including a queued manual reply. Checks and dispatch reservations serialize with manual task creation. A manual reply created after the automatic dispatch reservation cannot recall a message already handed off.

A held reply returns to Agent drafts with a reason and remains editable for human approval. If a newer pending draft already exists, it supersedes the held older draft. Held automatic attempts are not automatically retried. Revoking or replacing a grant, disabling drafting, or returning to draft mode holds queued automatic replies at their next execution check. An already dispatched reply cannot be recalled.

Each automatic action owns one durable reply task. Restarts repair queue registration without creating a second task. A dispatch reservation counts toward the caps even when a worker later fails or the handoff is uncertain; this conservative accounting prevents ambiguous attempts from exceeding limits. Imported settings reset to draft mode, and grants and automatic task reservations stay on the source instance.

Product knowledge

Under Reply agent, Setup, Knowledge, add up to 20 product documents as text or Markdown and select Save knowledge. A title of up to 200 characters and content of up to 65,536 bytes are required. The document can contain product features, pricing, limitations, and approved answers. Saving keeps an immutable version of its normalized text and replaces only that source’s active version atomically. An invalid or failed save leaves the previous version active. Identical title and content within a source reuse the existing version. Select a document to edit it, or choose Add document for another source.

You can also select Upload document to load a .txt, .md, .markdown, or text-based .pdf file into the editor. Text files support UTF-8 (with or without a BOM) up to 64 KiB; PDF files can be up to 5 MiB, with at most 64 KiB of extracted text. Scanned PDFs without extractable text, encrypted PDFs (including those with an empty password), and malformed PDFs are rejected. Extraction is limited to ten seconds. Review PDF text for missing content or changed layout before selecting Save knowledge. Uploads and failed extraction never replace saved knowledge. The original file is not retained; only the text you save becomes a knowledge version.

For each eligible reply, Postgres full-text search retrieves up to four relevant excerpts from the active version, using words from the current unquoted reply. Generation and the factual-support check receive those same excerpts. Search can miss relevant context, especially across languages or chunk boundaries; review the final answer. If retrieval fails, the draft is marked for review even if the other workspace sources support it. Text search does not call another AI model or add a separate credit charge.

Remove document stops retrieval from that source for new drafts without affecting other documents. Saved versions and evidence in existing drafts remain available in workspace archives. Website discovery and scheduled refresh are not available. Voice instructions remain in the AI voice profile, separate from factual evidence.

What triggers a draft

A draft is created when all of these are true:

  • A person replies to one of your campaign emails (automated replies like out-of-office and bounces never trigger it).
  • Your workspace is on a paid plan and has the reply agent turned on.
  • You have at least 5 AI credits, or the agent runs on your own OpenRouter or API key.
  • The reply has enough substance to answer. Short interest such as "send it", "yes please", or "send me the link" and short questions such as "Pricing?" qualify. A one-line acknowledgement ("thanks", "got it") is skipped, including when a longer original email is quoted underneath it.
  • The reply is not an opt-out, spam complaint, or clear rejection such as "not interested". These replies never trigger a paid draft.

The agent does not start new conversations and never messages a new recipient. It only ever drafts a reply to someone who already replied to you.

Reviewing a draft

A new draft shows up two ways:

  • In the conversation itself: open the thread in the unibox and the draft appears below the messages, in an editable box, with Approve and send, and Discard.
  • In the Agent drafts view: Needs you on Home links to it with the number waiting, and it lists every conversation with a draft. The count and list update the moment a new draft lands, no refresh needed.

From the draft box you can:

  • Edit the text right there. The box is editable, so tweak a line, fix a detail, or rewrite it before sending.
  • Approve and send. Sends the text as it stands (with your edits) through the normal reply path, from the same mailbox, threaded to their reply. This is the only action that sends.
  • Discard. Dismisses the draft without sending. Use it when the reply is better handled by hand.

Each thread holds at most one generation or unpaid draft in progress, and at most one pending draft at a time, and once you approve or discard it the draft is resolved. Approval freezes your final reply and creates its send task in one database transaction. Retrying approval reuses that task, including after a queue error, and does not charge another drafting fee. Once approved, a different reply body cannot replace the queued message. Use the normal scheduled-send cancellation control during the undo window. Approval means queued, not confirmed delivery.

The backend recovers approved tasks interrupted before queue registration on startup and every minute. This uses the same task and reply body; it does not reopen the draft or generate another reply. Mailbox and subscription checks still run through the normal reply task path before dispatch.

Categories and reply model

The draft card shows a separate Reply Agent category. The classifier only classifies the current reply; the reply model writes the response and validates product claims. Under Reply agent, Setup, What to say, choose which categories trigger drafting: positive interest is selected by default, and you can also enable questions, objections, and referrals. An empty selection generates no drafts.

While SendSets model is chosen under Choosing the model, you can name another OpenRouter Reply model, such as openai/gpt-4.1-mini, or leave it blank to use the default configured by your operator. It runs on the instance's key and costs AI credits like the default. This model handles both writing and factual validation. With your own key, the model you pick there is used instead.

Conservative offline rules skip clear opt-outs, spam complaints, automated replies, and rejections before classification. With the calibrated classifier, Jev classifies eligible replies using the current reply and thread context: on your own OpenRouter key when you connected one, otherwise on the operator's dedicated OpenRouter key or direct TypeSafe key. With Your reply model, the chosen model classifies instead. The category and confidence are stored separately from campaign intent. Unclear, failed, malformed, or unselected classifications produce no draft and no drafting charge. Without a classifier, or with Rules only, the selected categories use offline rules. Changing routing or the model affects future drafts; it does not regenerate existing ones. Automatic dispatch also rechecks that the draft's category is still selected.

What the draft is grounded in

The agent writes with the same context as an AI reply draft: the full thread, contact details, your workspace voice profile, and enabled skills. Thread messages are read in full rather than from previews. Quoted history is removed from the current reply, including when a mailbox flattens a short reply and its quoted email onto one line. The writing model receives the latest recipient message explicitly and writes on behalf of your workspace. Keep your voice profile and contact records complete to make replies specific to the conversation.

Factual support and source references

After writing the final draft, including any appended signup link, the agent asks the reply model to check product claims against your workspace product description, offer, signup URL, and retrieved knowledge excerpts. The thread, contact fields, voice instructions, and enabled skills guide the conversation but do not establish product facts. The checker records which workspace sources support the claims and requires response confidence meeting your workspace threshold (0.90 by default) for a model_supported assessment.

Both positive and negative product claims require explicit source support. Missing documentation is not evidence that a feature or integration is unavailable. When a detail is unknown, the agent should ask for clarification or say it needs confirmation.

The draft card shows the result and the sources checked. Unsupported claims, lower confidence, missing product sources, or an unavailable or malformed check produce a draft flagged for review with a reason. The draft remains editable; a supported assessment alone does not authorize sending. Your edits are not rechecked automatically. A model can overlook a claim or judge it incorrectly, so check the final answer yourself.

Each new source reference carries its internal ID, SHA-256 content hash, and the exact source text used for that draft. Knowledge references also identify the document version and excerpt position. Expand Sources checked, then View evidence used to read the original evidence, even after settings change or knowledge is cleared. Older references can contain only a hash; their original text cannot be recovered. These references and knowledge versions travel in the Assistant archive group.

Credits and failures

The agent reserves generation ownership before model work. Duplicate deliveries share that reservation. After generation, it saves the exact reply, factual evidence, model, and token count before charging. A draft appears for review only after its minimum charge and token settlement succeed. If billing or finalization is interrupted, recovery retries the saved result using the same charge keys, without regenerating or charging twice. Interrupted generation can retry up to three attempts; provider calls interrupted before their result is saved may run again.

  • Your own key. Drafts written with OpenRouter or your own API spend no AI credits and skip the balance check; your provider bills you for the tokens.
  • 5 credits per handled reply on the SendSets model, charged once when a draft is created, with generation and factual-check tokens included in usage settlement. A factual-check failure retains a reviewable draft and its normal charge. If generation is unavailable, no draft is created and nothing is charged.
  • Out of credits. On the SendSets model, when your balance is below 5, the agent simply does not draft that reply. Your inbox and campaigns are unaffected; you just handle that one by hand. Top up under Settings, Billing.
  • Automatic replies. Sending adds no AI charge. A metered workspace with exhausted credits, reached usage caps, or a reached workspace spend limit holds queued automatic replies for human review.

From the API or an agent

Everything on the Setup tab except the automatic-sending grant and the OpenRouter sign-in can be done with an API key that has the AI_AGENT permission: switching the agent on, the signup link and offer, the model, classifier and instructions, knowledge, labels, and the test chat. See the reply agent API. Test chat answers cost AI credits on the SendSets model, as they do in the dashboard. Automatic sending still needs a grant a person creates here.

Turning it off

Switch the agent Off in the Reply agent header. New replies stop getting drafts immediately. Any drafts already waiting stay until you approve or discard them.

See also

Confidence thresholds

Under Reply agent, Setup, Automatic sending and confidence, set classification confidence (95% by default) and response confidence (90% by default). Values must be greater than 0% and at most 100%. The API stores them as fractions from greater than 0 to 1.

New drafts use these settings. A factual assessment below the response threshold receives low_response_confidence. If factual support passes but the reply intent confidence is below the classification threshold, the draft receives low_classification_confidence. Factual and retrieval failures take priority. Low confidence keeps the draft available for human review, with its original evidence. Settings changes do not reassess existing drafts. Draft mode still requires explicit approval. In automatic mode, confidence scores must pass alongside the human-created grant and send-time checks described above.

On this page