Pattern 13 · Chat or assistant · Interaction pattern
Out-of-scope refusal with a next step
Practice view. What to build, the words on screen and how to measure it. Switch to Research for why it should work, the framework properties and the references.Research view. The research side is shown below the card: why it should work, the properties it targets and the references. Switch to Practice to hide it.
A refusal state with fixed wording: what the assistant is not trained for, where to turn instead (a person, a service, a helpline) and what it can still help with. Entering that state is a code decision on a scope flag, never left to the model's judgement of the moment.
The right amount of trustThe system shows how it worksCase: Goose conversation guide
Done right, done wrong
Schematic screens, not real products. Click a screen to enlarge it.In practice
Goose’s refusal screen for a crisis message says three things: I am not trained for this, here is the suicide prevention line and the emergency number, and here is what I can still do, such as suggesting a warm and supportive reply that asks whether the friend is safe. Three of four participants found the scope control on sensitive topics clearly better in version 4 than in version 3.
The bug is the lesson. In two comparable sessions one participant saw the helpline and the other did not, a bug in the refusal state. The team made that the first item of its action plan, above every usability fix, because it touches both the safety claim and the architecture claim. If you build this pattern, the refusal wording lives in code, the trigger is a flag the code evaluates, and a test sends the same message twice and expects the same screen.
Words on screen
Obligations to keep in mind (AI Act, GDPR)
- Name the limit in plain words. A bare 'I can't help with that' reads as a malfunction. (O1, IUI 2026, Table 1)
- The refusal must be deterministic and logged. Test it by sending the same scenario twice. (O2, Goose v4)
Design considerations, not legal advice or a conformity assessment. What O1 to O5 mean.
Build it
Illustrative signatures, not a published library: the names below are suggestions to adapt to your stack. Thresholds are examples to tune on your own data.
States: in-scope, refused-crisis, refused-scope, redirected
Component: <Refusal reason="crisis" nextSteps={[helpline, person]} stillCan={[reply]} />
Prompt snippet: If the message is out of scope, set out_of_scope to true with a reason. Do not answer the request.
Output schema: { "out_of_scope": true, "reason": "crisis | medical | legal | other" }
Measure it
Same idea, other names
Applied by: nobody yet · Replicated by: nobody yet · Used this pattern? Tell us and get listed
Research side · why it should work
Why it should work
Properties targeted
Across contexts
| Context | Users | State | Result |
|---|---|---|---|
| Goose conversation guide, v4 | adults, mobile | Seen in a case | scope control judged clearly better by 3 of 4; helpline shown inconsistently (bug, first priority in the action plan) |
| Your context | Bring your case |