# Tune the scorer

> Find the borderline people, label them with the user, tighten targeting, and rescore.

Source: https://rivomi.com/docs/use-cases/tune-the-scorer



**Done when:** the borderline band has been labelled, any targeting change is saved, and the
rescoring run reports `finished: true`.

Scores are only as good as the targeting and the counter-examples behind them. This loop is how a
workspace teaches the scorer. Needs `write`; the rescore spends credits.

## 1. Pull the borderline band [#1-pull-the-borderline-band]

```
rivomi_search_prospects { list_id, min_score: 55, max_score: 75, limit: 25 }
```

These are the people the scorer was least sure about, so a label here teaches it the most.

## 2. Label them with the user [#2-label-them-with-the-user]

Show each person's title, company, signal and score reason. For each verdict:

```
rivomi_update_prospect { prospect_id, fit: "good" }
rivomi_update_prospect { prospect_id, fit: "not", notes: "Agency, resells rather than buys" }
```

`fit: "not"` suppresses the person and records them as a **counter-example** that every later scoring
run sees. It is the main teaching signal, and it keeps the person in the workspace. `fit: "none"`
undoes a label.

## 3. Tighten the targeting [#3-tighten-the-targeting]

When the labels show a pattern (the wrong seniority, an industry to exclude), change the agent:

```
rivomi_get_agent { agent_id } → targeting
rivomi_update_agent_targeting { agent_id, exclude_keywords: [ …current…, "agency" ] }
```

Each array you send **replaces** the whole array. Read the current values first and send the full
list you want to end up with.

## 4. Rescore [#4-rescore]

```
rivomi_process_list { list_id, stages: ["score"], rescore: true } → run_id
```

Poll `rivomi_get_run` until `finished`, then rerun step 1 and report how the band moved.
