Chase Engine
Overview
The chase engine automatically sends reminder emails (and optionally SMS) to clients who have not completed their intake. You configure the cadence when you call define_intake; BriefGate handles timing, deduplication, and quiet hours from that point on. The agent never has to babysit email threads or remember to follow up.
When a client submits all required items, the chase engine stops automatically.
Schedules
| Schedule | Reminders | Cadence |
|---|---|---|
| gentle | T+3d, T+8d, then every 14 days | For sensitive client relationships |
| default | T+2d, T+5d, T+9d, then weekly | Recommended for most projects |
| aggressive | T+1d, T+3d, T+5d, then every other day | For hard deadlines |
| off | None | Manual only |
Set the schedule when creating the intake:
{
"project_name": "Bella Cucina Website",
"client": {"email": "[email protected]"},
"items": [...],
"chase_schedule": "default"
}Change the schedule on an existing intake:
PATCH /v1/intakes/:id{
"chase_schedule": "aggressive"
}Solo and Agency plans have access to all schedules. Free plan has access to default and off only.
Quiet hours
The chase engine respects client working hours to avoid sending reminders at inconvenient times.
- Reminders are held if the client's local time is outside 8:00–19:00.
- Client timezone is set via
client.timezoneindefine_intake(e.g."Europe/Prague"). Defaults to UTC if not set. - The gentle schedule never sends on weekends.
- Other schedules send Monday–Friday only unless
allow_weekends: trueis set on the intake.
If a scheduled send falls in a quiet window, it is held until the next allowed time — it is not skipped.
What the reminder email contains
Each reminder is tailored to what is still missing:
- Only the items the client has not yet submitted (not already-submitted ones)
- A progress summary ("3 of 8 items remaining, approximately 6 minutes")
- A direct link to the portal with a refreshed magic link (no login required)
- Your name and branding — on paid plans, "BriefGate" never appears in client-facing emails
The email is written from your perspective, not BriefGate's. Clients see a professional reminder from you, not from a third-party tool.
Custom sending domain (Agency)
On the Agency plan, configure your own sending domain (e.g. [email protected]) so clients see your domain in the From field. The account settings page provides a guided SPF/DKIM/DMARC setup wizard — typically takes 5–10 minutes.
Until a custom domain is configured, emails are sent from [email protected].
Manual chase
Send a reminder immediately, outside the schedule:
Via MCP:
send_chase(intake_id: "int_01J3K...", channel: "email")Via REST:
POST /v1/intakes/:id/chase{
"channel": "email"
}This does not reset the schedule — scheduled reminders continue as planned after the manual one.
SMS add-on
SMS reminders are available on Agency plans with SMS credits.
- Purchase SMS credits in billing: $5 / 50 messages
- Requires
client.phoneset atdefine_intaketime (E.164 format, e.g."+420601234567") - SMS is most effective as an escalation channel: after a bounce or after the
intake.stalledwebhook fires
To send an SMS reminder:
send_chase(intake_id: "int_01J3K...", channel: "sms")Or via REST:
POST /v1/intakes/:id/chase
{"channel": "sms"}Escalation flow
When email delivery consistently fails, the chase engine signals the agent:
- Client email hard-bounces →
chase.bouncedwebhook fires, BriefGate stops sending to that address - After 3 consecutive bounced emails →
intake.stalledwebhook fires withmissing_itemslist - Agent receives
intake.stalled, optionally callssend_chase(channel: "sms")to escalate - If SMS is not available or phone was not set, agent can escalate by other means (notify human, update project status, etc.)
The missing_items array in intake.stalled tells you exactly which items are still outstanding, so you can relay that to whoever handles escalation.
Bounce handling
When Resend reports a hard bounce or spam complaint, BriefGate:
- Fires the
chase.bouncedwebhook - Marks the email address as bounced on this intake
- Stops all future chase emails to that address (to protect your sender reputation)
Soft bounces (temporary delivery failures) are retried by Resend before being reported to BriefGate. You only see hard bounces and complaints.
To resume chasing after a bounce (e.g. after the client confirms a corrected email address), update the client email via PATCH /v1/intakes/:id with a new client.email and then send a manual chase.