How do I set guardrails for sales AI?

Enforce guardrails in the system, not the prompt. Minimum days between touches, daily caps per mailbox and domain, business-hours windows, suppression re-checked at send, and a confidence floor below which the action goes to review.

An admin approves every new account by hand. Nothing is created until then. We reply by email; no newsletter, no sequence.

app.salescrew.io/inbox
The unified reply inbox with classified threads

The short answer

  • Enforce guardrails in the system that executes the action, not in the prompt that instructs the model. A cap, window or check written into code cannot be talked around the way an instruction in a prompt sometimes can.
  • A working starting set covers five things. A minimum number of days between touches to the same contact. Daily send caps per mailbox and per domain. A business-hours send window. A suppression check that runs again at the moment of send. A confidence threshold below which the action routes to review.
  • These guardrails apply the same way whichever agent or cadence triggered the action. They are not settings an individual agent can be configured to skip.
  • A guardrail the agent can be told to ignore, because it lives in the prompt rather than the system, is a suggestion, not a guardrail.

Why the prompt is the wrong place for a hard rule

It is tempting to write guardrails as instructions. "Never email the same contact twice in one week." "Only send between 9am and 5pm." These read like rules, and a model following them carefully will usually respect them. The problem is "usually". A long conversation, an ambiguous edge case, or an instruction elsewhere in the same context that conflicts with the rule can all produce an exception the prompt did not anticipate. None of that requires the model to be malicious, or even wrong in a way anyone would call a bug. It is how instructions in natural language behave under pressure.

A guardrail enforced in the system that executes the send does not have this problem. If the code checks "has three days passed since the last touch to this contact" before allowing a send, that check runs whatever the model decided, whatever the prompt said, and however the conversation got there. The model can recommend a send. The system decides whether it is allowed to happen.

A starting guardrail set

Values here are a reasonable starting point, not a fixed standard; tighten or loosen based on your own reply and complaint data.

GuardrailValue to start withWhat it prevents
Minimum days between touches3 days per contactThe same contact getting hit repeatedly in a short window
Daily send cap per mailbox and domainSet per sender based on account age and reputationA burst of sends that damages deliverability or reads as automated
Business-hours send windowConfigurable per cadence or instanceMessages landing at odd hours that make the sender look like a bot
Suppression re-checked at sendEvery send, not only at list-build timeA contact who unsubscribed or bounced getting a message anyway
Confidence thresholdBelow the threshold, route to review instead of auto-sendA low-confidence draft going out unattended

Making guardrails visible, not only enforced

A guardrail that silently blocks a send without telling anyone creates its own confusion. A rep will eventually ask why a follow-up never went out. The useful version surfaces the block. This contact was skipped because of the three-day rule. This draft was held because its confidence was below the threshold. That visibility turns a guardrail from an invisible constraint into something the team can reason about and request changes to.

Disclosure: SalesCrew is our product, and this exact set of guardrails ships as the default and is editable in Agents → Guardrails. Minimum days between touches, per-cadence caps, per-mailbox and per-domain daily caps, a business-hours send window, suppression re-checked at send, and a confidence threshold that routes low-confidence actions to review. None of it lives in a prompt an agent could be argued out of.

A guardrail the agent can be told to ignore is a suggestion

If the only thing enforcing a rule is an instruction in a prompt, it is not a guardrail. It is a request. Guardrails that matter live in the code path the action has to pass through, not in the words asking the model to behave.

Questions

Why do guardrails belong in the system rather than the prompt?
A prompt is an instruction the model can be talked out of, by an ambiguous request, a long conversation that drifts, or a user asking it to ignore prior instructions. A guardrail enforced in code, like a hard cap the system checks before a send is allowed, does not depend on the model choosing to comply.
What is a reasonable starting cap for touches per contact?
A minimum of three days between touches to the same contact is a reasonable starting point. Tighten or loosen it based on your own reply and complaint data over time. The number matters less than that it is enforced automatically across every cadence step, not tracked by hand.
Should guardrails be visible to the sales team, or just to the system?
Visible. A team that can see the caps and windows in place can reason about why an agent held back a send. They can ask for a specific guardrail to be adjusted rather than assuming the agent malfunctioned.