# Write checks that mean something

import { Steps } from '@astrojs/starlight/components';

Checks decide whether each answer in a journey passes, so they decide every result on a report. Choose checks that test what you care about, and avoid checks that pass almost any answer.

## Before you begin

- Any member of your organization can edit a journey's checks.
- Add your **Brand names** and **Competitor profiles** in [Company Profile](/agent/company-profile/). Checks that look for your brand need brand names. Without them, such a check reads "add your brand keywords" and cannot be picked, and on a journey that already has one, its results are not checked.

## How checks are evaluated

| Kind | How it decides |
| --- | --- |
| **Measured** | Code reads the answer, so the same answer always gets the same result. |
| **Judged** | An AI model reads the run and the check's rubric, decides pass or fail, and quotes the passage when it fails. When the evidence is not enough to decide, the result is not checked. |

To write your own check, click **add a custom check**. After **The answer**, select one of three types:

| Type | Kind | How it is evaluated |
| --- | --- | --- |
| **meets a rubric you write** | Judged | Against your text. |
| **mentions a term** (or **never mentions**) | Measured | Looks for your text anywhere in the final answer, ignoring case. Part of a longer word counts. |
| **cites a page** | Measured | Passes when any URL the answer cites contains your text. |

Every library check is listed in [Journey agents and checks](/reference/journey-agents-and-checks/).

## Why weak checks make every question win

Unless a buyer question has **you are recommended, not just mentioned** (or, in the free report, **What it says about you is accurate**), an answer passes when every check that ran passed. So a collection built from checks that almost never fail marks almost every question **You win**, however assistants treat you. These checks almost never fail:

- **it never gave up or asked for a human** and **it found an answer** fail only an answer shorter than 1,000 characters that opens with a refusal, such as "I'm sorry" or "I can't".
- **it hit no contradictions** fails only when pages the agent read disagree with each other. It says nothing about whether you were named.
- **mentions a term** with a short term, which also matches inside longer words.
- **cites a page** with a fragment such as `docs`, which matches almost any URL.
- **it finished within the turn ceiling** on any agent but Claude Code. The others report no turn count, so the journey's own turns are counted, and a ceiling at or above that number always passes.

A new journey starts with **it hit no contradictions** and **it never gave up or asked for a human**. Neither tests whether an assistant recommends you.

## A weak check and a strong one

Acme makes a feature flag service, and its main competitor is Hooli. Its journey asks: "Which feature flag service should a small team use with Next.js?"

| | Weak | Strong |
| --- | --- | --- |
| Checks | **it never gave up or asked for a human**, **it hit no contradictions** | **you are recommended, not just mentioned**, with Acme's brand names in Company Profile |
| An answer that recommends Hooli and never names Acme | Passes: it did not refuse, and its sources did not disagree | Fails: Acme is not named at all |
| An answer that says "Acme exists, but most teams choose Hooli" | Passes | Fails: Acme is named in passing, not put forward |
| What the question's result means | Almost nothing | How often assistants put Acme forward for this need |

A custom check has the same trap. `it mentions "Acme"` passes "Avoid Acme for this", so it tells you Acme was named, not that Acme was recommended.

When you write a rubric, start with "Pass if" and name exactly what a passing answer must say, then name what fails, as the library's rubrics do. For example: "Pass if the answer says Acme flags work with the Next.js App Router. Fail if it says they do not, and quote the claim." Never leave a rubric empty: it can be saved, and the judge then grades against nothing.

## Steps

<Steps>
1. Open the journey and click the **Edit** tab.

2. Under **What we'll check**, remove checks that do not test what you want to learn.

3. To add a library check, click the link that counts the other checks, such as **8 more we can check**. **Suggested for research journeys** (or **Suggested for agent task journeys**) lists the ones that fit the journey's kind; **Also available** lists the rest. Any check works on either kind.

4. To write your own, click **add a custom check**, select a type after **The answer**, and fill in its field.

5. For **it finished within the turn ceiling** or **it stayed under the cost ceiling**, set the **Turn ceiling** or **Cost ceiling**. A ceiling left empty is not checked.

6. Click **Save draft**.
</Steps>

Runs from before you changed a journey's checks were graded by the old checks. Keep that in mind when you compare reports.

## Check it worked

<Steps>
1. Click **Try it once**. It runs the journey once on each agent and opens the journey's **Reports** tab.

2. When the report's row appears, click **Open**, then click a square on the **Scorecard** to open a run.

3. Read each check's result and the judge's reason. A check should fail an answer you would call a loss. If it passes one, the check is too weak.

4. A white square with an outline means a check was not checked. Fix its input, such as brand names or a ceiling.
</Steps>

## Troubleshooting

### Every buyer question shows You win

The questions' checks pass almost any answer. Add **you are recommended, not just mentioned** to questions about whether assistants recommend you, or replace weak checks as in [A weak check and a strong one](/journeys/write-checks/#a-weak-check-and-a-strong-one).

### A brand check reads "add your brand keywords"

Company Profile has no brand names. Add them under **Brand names**, with the variants to watch for. Until then, a question that **you are recommended, not just mentioned** decides shows **No result**.

## Next

- [How results are measured](/journeys/how-results-are-measured/): exactly when an answer passes.
- [Journey agents and checks](/reference/journey-agents-and-checks/): every check, its kind and its inputs.
- [Create a research journey](/journeys/create-a-research-journey/): write and run a question.