---
name: risk-scorer
description: "Compute a fall-through risk score per stalled deal from observable signals. The score drives the ranking and a one-line cause description; the number itself is never shown to the operator. Built for use inside chase-progression."
---

# Risk scorer

A building-block skill called by `chase-progression`. Computes the risk score that `priority-ranker` uses to order the stalled list, and the cause sentence the operator reads.

## Signals

The score is a weighted combination of:

- Days since any party's last contact
- Days since the last positive progress event
- Mortgage offer expiry date approaching (offers usually valid 3 to 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

The weights are profile-learned from outcome correlation. Deals that the workflow flagged as high risk and that actually fell through reinforce the weighting. Deals flagged high that completed without incident reduce the weighting on whatever signal triggered the flag.

## Opacity rule

The numeric score is never surfaced to the operator. Showing a number invites debate. Showing a one-line cause invites action. The skill returns the score for the ranker to use internally and returns the cause sentence for the operator to see.

## What it does not do

- It does not write to the CRM.
- It does not produce a probability of fall-through as a percentage. The score is a relative ranking signal, not a forecast.
- It does not draft messages.

## Connectors

Read: CRM, email, WhatsApp, calendar, mortgage offer data if held in CRM. No writes.

## Profile keys

- `realagent.risk_weights.*` (per signal, learned)
- `realagent.risk_weights.fee_multiplier` (how heavily fee value modulates the rank, default 1.0)
