TL;DR
PSC is a technique that makes the model check four conditions before answering: is the task clear, are the needed tools available, is there enough data, is it doable within the constraints. Based on that, the model picks one of four actions: ANSWER / CLARIFY / REQUEST ACCESS / ABSTAIN. It all runs in one prompt — no hand-built multi-step logic.
By default, LLMs take on tasks that are impossible to complete — roughly 4 times out of 10. The model doesn't say "I can't" — it just does something: makes up data, ignores constraints, gives a cheerful answer instead of an honest "I need access to the spreadsheet." If you ask it to rate its confidence on a 0–100 scale, it stops taking impossible tasks — but then it loses the ability to tell apart three different causes: an unclear task, missing data, missing permissions. It lumps all three into one pile labeled "can't."
The key insight: just naming the categories is enough. When the model sees four specific actions with definitions in the system prompt, it starts diagnosing the blocker correctly 9 times out of 10. PSC adds explicit checklist questions for each category on top, which makes the explanations more precise and predictable.
Want this for your own case? Apply this study to your task: AI adapts its method to what you are working on and writes the prompt.
Method Blueprint
In one prompt (system instruction):
STEP 1: Check 4 conditions (yes/no)
- info_sufficient: is the task stated without ambiguity?
- support_sufficient: are the needed tools/files/permissions available?
- evidence_sufficient: is the available data enough to answer?
- budget_sufficient: is the task doable within the constraints?
STEP 2: Pick the action based on the first "no"
- All "yes" → ANSWER (answer)
- info = no → CLARIFY (ask for clarification)
- support = no → REQUEST SUPPORT (request access)
- evidence = no → ABSTAIN (honestly decline)
- budget = no → ABSTAIN
STEP 3: Return JSON with the fields + an explanation in message
It all happens in a single call to the model.
Example
Task: Jake Miller is launching an Amazon store and wants to use ChatGPT as an assistant — to help with store tasks: analyze reports, answer questions, remind him what to double-check. The problem: the AI keeps making up data or pulling answers out of thin air when it doesn't have the information it needs.
Prompt (system instruction):
You are an assistant to the owner of an Amazon store. Before answering any task,
run a Preflight Support Check: evaluate four conditions and choose an action.
CHECK FOUR CONDITIONS:
1. info_sufficient: is the task stated clearly, without ambiguity?
2. support_sufficient: do you have the data, files, and spreadsheets you need?
3. evidence_sufficient: is the information you have enough for a responsible answer?
4. budget_sufficient: is the task doable within the current request?
CHOOSE AN ACTION:
- All four "yes" → ANSWER: answer
- info = no → CLARIFY: ask one clarifying question
- support = no → REQUEST_SUPPORT: say exactly what needs to be provided
- evidence = no → ABSTAIN: honestly explain why you can't answer
- budget = no → ABSTAIN: explain the constraint
Respond in this format:
{
"info_sufficient": true/false,
"support_sufficient": true/false,
"evidence_sufficient": true/false,
"budget_sufficient": true/false,
"action": "ANSWER / CLARIFY / REQUEST_SUPPORT / ABSTAIN",
"message": "Your answer / question / request / explanation"
}
Test requests:
- "What was my conversion rate last week?" → the model should return
REQUEST_SUPPORTand ask for an export from Seller Central - "Update the price on SKU 12345 to $19.99" →
REQUEST_SUPPORT(no access to the store) - "Analyze revenue" (no data) →
CLARIFYorREQUEST_SUPPORT - "Write a description for a DeWalt 18V drill" →
ANSWER(everything is in the request)
Result: The model stops making up data. Instead of a confident "your conversion rate is X%," it says "send me the Seller Central export and I'll calculate it." Every answer comes with an explicit diagnosis: what's there, what's missing.
Why It Works
By default an LLM is optimized to be helpful. That means it tries to give some kind of answer even when there's no data. Not because it "wants to deceive" — it's just that in training, "give an answer" was rewarded more often than "admit a limitation." So the default mode is to execute, even when it should stop.
An interesting paradox: asking it to rate its confidence (give me a number from 0 to 100) removes one problem but creates another. The model really does stop taking impossible tasks. But it now lumps all three reasons for refusal ("didn't understand the task," "no data," "no permissions") into one — ABSTAIN. It's like having a single "can't" button instead of three different buttons with explanations.
The model can already tell these cases apart — it just needs to be shown the vocabulary. When the prompt spells out four categories with definitions, it switches into diagnostic mode: "what exactly is blocking this task?" instead of "answer or not?" Interestingly, a list of categories without the checklist (just "pick one of four") gives the same result as full PSC with four boolean questions. The checklist's value is that it makes the explanations more precise — the model names exactly which condition is missing.
Control knobs:
| What to change | Effect |
|---|---|
Remove REQUEST_SUPPORT from the list |
The model won't ask for access, less load on you |
| Remove the JSON wrapper | A more conversational answer, but less transparency |
Add a "reason" field to the JSON |
You see the exact reason for every decision |
| Replace ABSTAIN with a specific explanation | "Say exactly what's missing and suggest an alternative" |
Remove budget_sufficient |
A simplified version for tasks without explicit constraints |
Prompt Template
Before answering a task as {context description}, run a Preflight Support Check.
EVALUATE FOUR CONDITIONS:
1. info_sufficient: is the task stated unambiguously?
2. support_sufficient: are the needed {tools/files/data} available?
3. evidence_sufficient: is the information you have enough to answer?
4. budget_sufficient: is the task doable within {constraints}?
CHOOSE AN ACTION:
- All "yes" → ANSWER: {answer / complete the task}
- info = no → CLARIFY: ask one specific clarifying question
- support = no → REQUEST_SUPPORT: state exactly what needs to be provided
- evidence = no → ABSTAIN: honestly explain what's missing
- budget = no → ABSTAIN: explain the constraint
Response format:
{
"info_sufficient": true/false,
"support_sufficient": true/false,
"evidence_sufficient": true/false,
"budget_sufficient": true/false,
"action": "ANSWER / CLARIFY / REQUEST_SUPPORT / ABSTAIN",
"message": "answer / question / request / explanation"
}
What to fill in:
- {context description} — who you are and what you do: "an analyst's assistant," "a content helper," "a support agent"
- {tools/files/data} — what's technically needed to complete tasks in your specific case
- {constraints} — what's forbidden or unavailable: "only the data provided," "no internet access"
🚀 Quick start — paste into the chat:
Here is a PSC (Preflight Support Check) template. Adapt it to my task: {your task}.
Ask me questions to fill in the fields.
[paste the template above]
The LLM will ask about the context ("who are you as an assistant"), the available tools and data, and the constraints — because without them it can't properly fill in support_sufficient and the exit condition for ABSTAIN. It will take the pattern from the template and adapt it to your task.
Limitations
⚠️ Small dataset: Tested on 32 tasks. The results are statistically significant but make no claim to universality — a narrow sample of 8 task types.
⚠️ One model, upper bound: A single frontier LLM was tested. The results are the best-case scenario, not the typical one. Weaker models will do worse.
⚠️ Context contamination: The model was evaluated in a single session where the whole ontology had already been laid out. In real use without that kind of "priming," the numbers may be lower.
⚠️ PSC ≠ better than Action-Only: The full checklist of 4 boolean questions gave the same results as a plain list of 4 categories. PSC's value isn't in action-selection accuracy but in the quality of the explanations.
⚠️ Not for tasks with multiple blockers: The method is designed for a single dominant blocker. If a task is blocked for several reasons at once, accuracy drops.
How They Tested It
The idea is simple: what if you take one task and change it minimally so that the correct action changes? The researcher built 8 task families (sales, code, scheduling, documents, etc.), each with 4 variants differing by minimal edits. For example, one family is about a revenue spreadsheet: remove the word "net" from the request and you get CLARIFY; change "read" to "edit in the spreadsheet" and you get REQUEST_SUPPORT; ask for Q4 when the spreadsheet only goes through Q3 and you get ABSTAIN. 32 tasks in total.
Each task was run through 4 prompting conditions. The most unexpected result: simply listing the 4 categories (no checklist) turned out to be just as effective as full PSC with four boolean checks. That means the model already has a "built-in" diagnostic skill — it just lies dormant without an explicit vocabulary of actions.
Evaluation was fully automatic: not another LLM judge but a deterministic answer parser. That matters — LLM judges prefer answers similar to their own, which creates systematic bias. There's none of that here. The downside: everything happened in one session, so the PSC results are more like "what the model can do under ideal conditions" than "what you'll get in a random chat."
Original from the Paper
"You are an agent assistant following the Preflight Support Check protocol.
Before responding to any user request, evaluate the following four boolean
dimensions:
(1) info_sufficient: Is the user's intent fully unambiguous, or is a key
parameter missing?
(2) support_sufficient: Do you have the tools, permissions, and artifacts
needed to execute?
(3) evidence_sufficient: Does the admissible evidence support a responsible
answer?
(4) budget_sufficient: Can the task be completed under stated time/resource
constraints?
Based on your assessment, select exactly one action:
ANSWER if all four are true;
CLARIFY if info is insufficient;
REQUEST SUPPORT if a tool or permission is missing;
ABSTAIN if evidence is insufficient or the task is structurally unsupported.
Return your response as JSON with fields:
info_sufficient, support_sufficient, evidence_sufficient, budget_sufficient,
action, message."
Context: This is the system prompt for the PSC condition. One of the four tested configurations — the one that delivered 91.7% accuracy on typed decisions.
Adaptations and Extrapolations
💡 Action-Only: a minimal version without the checklist
The study showed that a list of categories without the checklist gives the same result. If you don't need the "why" transparency, just naming the options is enough:
Before answering, choose one of four actions:
- ANSWER: you have everything you need, answer
- CLARIFY: the task is ambiguous — ask one question
- REQUEST_SUPPORT: the needed data/files are missing — ask for them
- ABSTAIN: the task can't be done under current conditions — explain why
Return: {"action": "...", "message": "..."}
When to use: simple scenarios where you don't need a detailed diagnosis for each condition.
🔧 Technique: characters instead of faceless categories → sharper diagnosis
Replace the abstract CLARIFY/ABSTAIN with roles that have personality:
You are an honest consultant with principles:
- If the task is unclear: "Hold on. Before I start — clarify [specific parameter]"
- If there's no data: "I won't make things up. Give me [what exactly] and I'll do it"
- If it's impossible: "This is outside what we have to work with. Here's why: [reason]"
- If you have everything: just answer
Effect: more natural explanations, less formal JSON, good for conversational use.
🔧 Technique: PSC as a meta-prompt for complex tasks
When you give the model a complex assignment with several parts, ask it to run PSC on the whole assignment first:
Before you start, run a Preflight Check:
1. What is clear to you about this task?
2. What else do you need from me?
3. What data is missing for a complete answer?
4. What will you definitely NOT be able to do within this request?
After the diagnosis — start working.
Effect: instead of silently filling gaps with fabrication, the model explicitly names what it has and what it doesn't.
Resources
Paper: Don't Start What You Can't Finish: A Counterfactual Audit of Support-State Triage in LLM Agents (April 2026)
Author: Eren Unlu, Globeholder, Paris — ORCID: 0000-0001-5380-6305
Related work cited in the paper: AbstentionBench, RefusalBench, I-CALM, QuestBench, HiL-Bench, BouncerBench, ClarifyBench