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:

json
{
  "project_name": "Bella Cucina Website",
  "client": {"email": "[email protected]"},
  "items": [...],
  "chase_schedule": "default"
}

Change the schedule on an existing intake:

PATCH /v1/intakes/:id
json
{
  "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.

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:

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
json
{
  "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.

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:

  1. Client email hard-bounces → chase.bounced webhook fires, BriefGate stops sending to that address
  2. After 3 consecutive bounced emails → intake.stalled webhook fires with missing_items list
  3. Agent receives intake.stalled, optionally calls send_chase(channel: "sms") to escalate
  4. 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:

  1. Fires the chase.bounced webhook
  2. Marks the email address as bounced on this intake
  3. 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.