# 04 — Chase Progression

**Cadence:** Daily (auto, part of morning round) and on-demand
**Default delivery:** Surfaced in morning round; expanded on request
**Risk level:** Multiple outbound messages, each individually gated
**Pre-req reading:** `00-architecture-and-customization.md`

---

## 1. Purpose

This is the headline workflow. Sales agents lose more fee income to stalled chains than to any other single cause, and chain progression is exhausting, repetitive, emotionally draining work that an agent should not be doing manually. Done well, this workflow protects every pipeline fee the agent has worked to earn.

Anthropic's invoice-chaser is the closest pattern in the SMB plugin. This is the same pattern, applied to the highest-value cash conversion problem in estate agency: turning sale-agreed into completed.

## 2. Trigger recognition

The router invokes this workflow when the operator says any variant of:

- "chase the chain" / "chase progression"
- "where is everyone on [address]"
- "push [name]'s deal" / "push the chain on [address]"
- "follow up on the [name] solicitors"
- "what's stalled" / "stalled deals"
- "any updates on [address]"

Also runs automatically as a sub-flow of the morning round, surfacing stalled items there. Expanding any stalled item from the morning round (the operator says "show me what's holding up [address]") brings the full workflow into focus on that deal.

## 3. What it produces

A ranked list of stalled deals with drafted, tone-matched messages per stakeholder. Two views:

**Across the pipeline.** Every sale-agreed deal that has stalled past its threshold (default 7 days; learns per stakeholder type), ranked by fall-through risk × fee value. Each deal shows: property, days since last contact, last contact summary, fall-through risk score, what is most likely holding it up, who to chase, draft message ready.

**Single deal deep-dive.** When the operator names a property, the workflow produces the full state of that chain: every party, every last-known status, every outstanding action, every risk flag. Draft messages for every stakeholder who needs chasing, each in the right tone.

Each draft message identifies recipient, channel (email vs WhatsApp vs SMS), and is written in the agent's voice for that recipient type. The operator can approve all, approve some, edit any, or skip.

## 4. Fall-through risk scoring

The workflow computes a risk score per deal from observable signals:

- Days since last contact (any party)
- Days since last positive progress event
- Mortgage offer expiry approaching (offers usually valid 3–6 months)
- Searches outstanding past day 21
- Survey booked but not done past day 14
- Vendor or buyer disengagement signals (slow replies, terse messages)
- Chain complexity (number of linked transactions)
- Onward-purchase status if known

Scores are not shown as numbers to the operator — they drive the ranking and a one-line cause description. "Mortgage offer expires in 9 days and survey is booked but not done" is the surface; the score is underneath.

The scoring weights are profile-learned. If the operator routinely deprioritises deals that the workflow flagged as high risk, the weighting shifts. If they routinely action deals the workflow flagged as low risk, the weighting shifts the other way.

## 5. Tone matching per recipient type

Different stakeholders get different voices. The profile carries a tone preference per type, calibrated from the agent's voice samples and from edit-before-send diffs over time.

| Recipient type | Default tone | Channel default |
|---|---|---|
| Vendor (familiar) | Conversational, first-name | WhatsApp / mobile |
| Vendor (formal) | Polite, surname | Email |
| Buyer (familiar) | Conversational, first-name | WhatsApp / mobile |
| Buyer (formal) | Polite, surname | Email |
| Vendor solicitor | Formal, surname, references file | Email |
| Buyer solicitor | Formal, surname, references file | Email |
| Mortgage broker | Polite, first-name, references buyer | Email or phone |
| Surveyor | Brief, polite, references property | Email |

The defaults are starting points. Within a month of use, each agent's tone profile is distinct.

## 6. Skills composed

| Skill | Purpose |
|---|---|
| `chain-progression-tracker` | Builds the state-of-the-chain view per deal |
| `risk-scorer` | Computes fall-through risk from observable signals |
| `priority-ranker` (cross-cutting) | Orders the stalled list by risk × fee |
| `tone-matched-drafter` (cross-cutting) | Drafts each message in the right voice |
| `compliance-flag-checker` (cross-cutting) | Flags anything that should not be said by an agent (GDPR, advertising standards, AML disclosures) |

## 7. Connectors

Read: CRM, email, WhatsApp, calendar, mortgage offer expiry data if held in CRM.
Write: Email, WhatsApp Business, SMS — each on explicit per-message approval.

## 8. Approval gates

Per-message. The workflow presents drafts in a batch (typically 5–15 messages for a normal stalled list) and the operator can:

- **Approve all** — fires every message as drafted
- **Approve, edit some** — operator edits inline; edits are captured for learning; remaining approved messages fire as drafted
- **Approve some, skip some** — fires only approved ones; skipped ones are dropped from the run and the recipient is excluded from chase for 24 hours
- **Pause** — saves the batch; returns to it later

The workflow never fires a message that has been edited but not re-approved. Edit-then-fire requires a second approval click.

## 9. The "spoke to them" override

The most frequent operator action with this workflow is "don't chase [name], I spoke to them yesterday." The workflow recognises this phrasing, removes the recipient from the current batch, and records the verbal contact in the CRM with timestamp and a note "operator confirms verbal contact, no chase needed."

This is a learning signal: that recipient now has a logged interaction, and the stalled-threshold clock resets for them.

## 10. Continuous learning hooks

- **Cadence per stakeholder type.** "I chase solicitors at 5 days, brokers at 3, vendors weekly." Learned from explicit corrections and from edit-frequency patterns.
- **Tone profile.** The deepest learning hook in the whole product. Every edit-before-send diff is gold here. Within a quarter, the workflow should be drafting messages the agent sends without editing 80% of the time.
- **Risk weights.** Reweighted by which deals actually fall through (negative outcome) and which complete (positive outcome). Slow signal, high quality.
- **Skip patterns.** Recipients the agent never chases (a friend, a regular client they handle in person) get excluded automatically once a pattern is recognised.
- **Channel preferences per recipient.** If the operator always changes the drafted email to a WhatsApp, the channel preference for that recipient is updated.
- **Phrasing pet-peeves.** The agent edits out "I hope this finds you well" every single time → the workflow stops using it. Within weeks, the drafts read as the agent's writing, not Claude's.

## 11. Build notes

- This is workflow two by build order, after morning round. The morning round earns the right to look; chase-progression earns the right to act.
- Pilot with Muvin (Amelia, Alison) as the existing live deployment. They will tolerate the early iteration and the edit-feedback they generate is exactly the signal `tone-matched-drafter` needs.
- The risk scorer should be opaque to the operator. Showing a number invites debate; showing a one-line cause invites action.
- WhatsApp Business API is rate-limited and template-restricted for the first interaction with a recipient. The workflow needs to know when a recipient is on an open 24-hour conversation window and when a template message is required. This is a routine integration detail but trips up most builds at first.
- Keep the maximum batch size capped (suggest 15 messages). If the operator has 30 stalled deals, surfacing them all at once invites approve-all-and-regret. Two batches of 15 with a pause between is safer.
