Apply to my task
arXiv:2609.25686 ★ 91 Sep 22, 2026

The Task-State Ladder: Explicit Commands and Self-Tracking Beat Passive Status Checklists

Key result

Here's the paradox: a precise status checklist, where every step is labeled 'done' or 'blocked,' actually works worse than simply asking the model to keep its own running log, with no correctness checking at all. The method gives an agent clear behavior on multi-step tasks: it stops confusing 'you mentioned this step again' with the command 'redo it.' The trick is to replace showing a fact with issuing a direct command: instead of 'step 3 is done,' say 'step 3 is DONE — do not redo it.' The jump from the 'show status' level to the 'command the action' level delivers the biggest gain in reliability.

01

TL;DR

Researchers tested four ways to tell an AI agent where a multi-step task currently stands — from a casual mention in the conversation to a hard block on incorrect actions — and found that the more actively the status is communicated, the more reliably the agent behaves. Just "telling" the model a fact is weak. "Commanding" the model what to do right now is strong.

The core pain point: even when models are shown an accurate, always up-to-date checklist of statuses ("step 3: done," "step 5: blocked"), they still mess up — redoing an already-completed step if the user simply mentions it again with a new order number, without an explicit "redo this." Even more surprising: if you ask the model to keep its own status ledger (with zero correctness checking), it performs better than when it's shown an accurate external checklist.

The method is a four-rung "ladder" connecting state to behavior: (1) status exists only in the conversation history, (2) an accurate checklist is shown, (3) a direct command precedes every action — something like "this step is DONE — don't redo it," (4) incorrect actions are blocked at the tool level. The jump from rung 2 to rung 3 — from showing to commanding — produces the biggest leap in reliability, and it's a pure prompting trick, no code required.


Method Blueprint

RUNG 1 (weak): Status lives only in chat history → the model often confuses "mentioned" with "do it again"
RUNG 2: An accurate status checklist is inserted into every message → better, but errors remain
RUNG 3 (usable in chat alone): Before each action, an explicit command based on status:
   "step X: DONE — don't redo it" / "step Y: BLOCKED — don't do it, name what's needed first" / "step Z: AVAILABLE — do it now"
   → error rate drops sharply
RUNG 4 (needs code/tooling): Hard block on incorrect actions at the system level → near-zero errors, but requires an external mechanism
BONUS (pure chat trick): Self-tracking — ask the model to maintain and print its own status ledger every turn, with no verification → outperforms even an accurate external checklist

Example in Action

Task: You're running a product launch on Amazon through an AI assistant acting as your virtual project manager. The stages: order samples from the factory → finalize the contract → shoot product photos → upload the listing → launch ads. The conversation spans several days, out of order: sometimes you ask about a stage that's already done, sometimes you cancel a step, sometimes you ask for a redo.

Prompt:

You are my project assistant for launching a product on Amazon. Track the status of these stages:

1. Order samples from the factory [completion code: O-101]
2. Finalize the contract with the factory [O-102] (requires: 1)
3. Shoot product photos [O-103] (requires: 2)
4. Upload the listing to Amazon [O-104] (requires: 3)
5. Launch ads [O-105] (requires: 4)

Rules:
- Each stage is completed EXACTLY ONCE.
- If I mention an already-completed stage again without the word "redo" — just confirm it's done, don't run it again.
- If a stage is blocked (prerequisites not met) — don't run it, explain what needs to happen first.
- If a stage is canceled — refuse to run it, even if I bring it up again.

Before executing or refusing any of my messages, first state explicitly, on one line:
STATUS: {stage} — {AVAILABLE, executing / ALREADY DONE, not redoing / BLOCKED, waiting on {what} / CANCELED, refusing}

After the status line — execute or refuse, and always print your ledger at the end:
LEDGER:
1: ..., 2: ..., 3: ..., 4: ..., 5: ...

My message: "Hey, take care of the product photos, here's a new order #4521"

Result: The model will first output a STATUS line, explicitly stating whether the stage is available or already done. If the stage was already completed earlier (even under a different order number), it will confirm that and won't redo it — because the instruction explicitly requires stating the status first, rather than jumping straight to action. At the end, it prints an updated ledger for all five stages, which the model maintains itself and will reference in subsequent messages.


Why This Works

LLM weakness: models are bad at connecting information they've seen to the behavior it implies. Seeing "step 3: done" on a checklist and then refusing a new action when the user asks about that same step again — these are two separate cognitive steps, and the model often stumbles between them. It reads the status but doesn't necessarily draw the right conclusion about what to do right now.

LLM strength: models are excellent at following direct commands. When, instead of a status description, they're told "don't redo this" or "do it now" — that's already a finished conclusion, not a task requiring them to draw one. Less room for misinterpretation.

The method strips out the intermediate reasoning step: instead of "here's a fact, draw the right conclusion," it's straight to "here's the conclusion, act on it." Self-tracking works similarly: when the model generates and records its own status, it essentially "commits" to that status — and is more likely to honor it next time than when the status is simply handed to it from outside.

Control lever: you can tailor the command wording to your task — swap "AVAILABLE/DONE/BLOCKED" for your own status categories (e.g., "needs approval," "in progress," "overdue"). Drop the ledger requirement if you don't want to clutter the output — but accuracy will suffer.


Prompt Template

You are my project management assistant for "{project name}". Track the status of these stages:

{list of stages with dependencies and completion codes}

Rules:
- Each stage is completed {how many times} time(s).
- If I mention an already-completed stage again without an explicit "redo" — confirm it's done, don't run it again.
- If a stage is blocked — don't run it, explain what needs to happen first.
- If a stage is canceled — refuse to run it.

Before acting, first state on one line:
STATUS: {stage} — {AVAILABLE / ALREADY DONE / BLOCKED / CANCELED}

Then execute or refuse. At the end, always print your ledger for all stages.

My message: {request}

Placeholders: {project name} — the gist of the task; {list of stages} — your steps and what each depends on; {how many times} — usually "one"; {request} — the user's current message.

🚀 Quick Start — paste into the chat:

Here's a task status-tracking template. Adapt it to my project: {your task}.
Ask me questions to fill in the fields.

[paste the template above]

The model will ask about your stages and their dependencies — because without a clear "what depends on what" list, the directives won't work. It will lift the command structure from the template and slot in your real stages.


Limitations

⚠️ Not for "eyeball it" tasks: if the correct behavior depends on interpreting free-form text (rather than a clear "done/blocked" status), hard commands and blocks can backfire — if the model misread the request, the command just locks in that mistake.

⚠️ Enabling reasoning mode partly fixes weak rungs 1–2: for powerful models that "think" before answering, the gap between a simple checklist and explicit commands narrows — but a fully passive approach (chat history only) is still weaker.

⚠️ Hard blocking (rung 4) needs an external mechanism — code or a tool that physically prevents an incorrect action from executing. In a plain chat with no integrations, this can't be literally reproduced — only approximated by requiring the model to double-check itself.


How the Research Was Done

The team built a test bed of "projects": 5–18 steps with dependencies (procurement, approval, delivery, etc.), generated according to a scenario — the user brings up steps out of order, cancels one, asks for a redo on another. Every episode contained deliberate "traps": re-mentioning a completed step without saying "redo," or asking about a blocked or canceled step.

They tested three models (including the strong Qwen3-235B and the weaker Qwen3.6-35B, plus the closed-source DeepSeek V4 Pro), both with and without reasoning mode enabled. Scoring wasn't based on another model's judgment — it used strict execution-code matching: either the step ran correctly or it didn't.

It turned out that simply showing an accurate status barely moved the needle (from 0.38 to 0.55 for the top model), while explicit command-style directives moved it a lot (up to 0.84–0.87), and hard blocking pushed it almost to the ceiling (0.98). But on an external project-management benchmark, where correctness depends on interpreting free-form text rather than a clear status, the pattern flips: simply showing the record beats both "command" versions, and hard-blocking the model's flawed judgment only makes things worse. The takeaway: how forcefully you should impose status depends on how clearly "correct behavior" is even defined.


Adaptations and Extrapolations

🔧 Technique: replace the passive checklist with a "status first, then action" requirement → effect: the model can't accidentally skip past the status straight to an action, because it's forced to state it explicitly first.

Example: in a prompt for tracking client negotiations, ask the model to write, before every reply, "NEGOTIATION STATUS: {stage} — {what's settled, what's open}" — this carries the technique over from project tasks to any long dialogue with accumulated context (e.g., managing a deal, customer support, or legal document review).

🔧 Technique: self-tracking instead of an external tracker → if you're currently maintaining the project status by hand and pasting it into every prompt, try asking the model to maintain it itself and just remind it to "continue from your last ledger." It saves you time and, according to the research, works even better than an accurate external checklist.


Resources

How Strongly Should Task State Influence an LLM Agent? — Chenyu Zhang (University of Waterloo), Wonbin Kweon (Sungkyunkwan University), Jiawei Han (University of Illinois Urbana-Champaign). Preprint. The τ²-bench (airline) and PMBench (project management) benchmarks are cited as external validation of the findings.

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.

Research digest

Key result

Here's the paradox: a precise status checklist, where every step is labeled 'done' or 'blocked,' actually works worse than simply asking the model to keep its own running log, with no correctness checking at all. The method gives an agent clear behavior on multi-step tasks: it stops confusing 'you mentioned this step again' with the command 'redo it.' The trick is to replace showing a fact with issuing a direct command: instead of 'step 3 is done,' say 'step 3 is DONE — do not redo it.' The jump from the 'show status' level to the 'command the action' level delivers the biggest gain in reliability.

Principle

Inside is a four-rung ladder, each step more reliable than the last. Level 1: status only lives in the conversation history — the model forgets it. Level 2: an exact checklist repeated in every message — better, but the model still confuses 'seeing a fact' with 'drawing the right conclusion from it.' Level 3: before acting, the model gets a ready-made command instead of a fact: 'do not redo this' or 'do this now.' The model doesn't reason — it just obeys, and errors drop sharply. Level 4 is a hard lock enforced at the code level, with almost zero errors, but it requires an external tool outside the chat.

Why it works

LLMs are bad at linking a fact to the correct conclusion drawn from it. The model reads 'step 3: done' in a checklist, but doesn't always conclude — therefore, don't redo it. For the model, these are two separate actions: reading the status and deciding what to do right now. A direct command removes that middle step — instead of 'here's a fact, figure it out yourself,' it's 'here's the conclusion, just do it.' Self-tracking works similarly — when the model writes its own status, it's essentially making itself a promise and keeps it better than it keeps someone else's checklist, even with zero verification.

When to apply

Multi-step processes run through an AI agent → specifically for tasks with clear-cut statuses (done / blocked / cancelled), especially when the conversation is spread out over several days and the user tends to confuse old requests with new ones. Not suited for tasks judged by feel — where the correct behavior depends on interpreting free-form text rather than a clear status.

Mini recipe

1. Describe the stages: a list of steps with dependencies and completion codes ('step 3 requires step 2'). 2. Set a hard rule: each stage runs exactly once, and the word 'redo' means hands off — don't touch it. 3. Force the model to state status first: before any action, the model writes a single line — 'STATUS: step X — AVAILABLE / DONE / BLOCKED.' 4. Turn on self-tracking: ask the model to maintain and print a ledger of all stages at the end of every reply — without any verification, this works even better than an external checklist.

Examples

[BAD]: `Take care of the product listings, here's new order #4521` [GOOD]: `First, state a single line: STATUS: {stage} — {AVAILABLE, proceeding / ALREADY DONE, not redoing / BLOCKED, waiting}. Then either complete the task or decline. At the end, print a ledger covering all five stages.`

In plain words

Most AI agents fumble long tasks for one simple reason: they can see the task status, but they don't know how to draw conclusions from it. Reading a line in the conversation history like "step 2 complete" is a piece of cake for a model. But figuring out that this means it should skip a repeat action when the user brings it up again — that's an unbearable cognitive glitch for the model.

It's like a rookie intern with a checklist: the box next to the task is ticked, but the moment the boss yells "do it now, we're behind!" in a panic, the intern runs off and redoes the whole thing from scratch. Technically, the data is right there in front of them, but the urge to please overrides logic. To keep an agent from screwing up, just handing it a status cheat sheet isn't enough — you need to steer it through the process with an iron grip.

The researchers tested 4 ways of feeding in state: from a passive mention in the context to hard-blocking disallowed actions. The verdict is clear: just dumping the status into the model's context is a waste of tokens. What actually works is a direct imperative — explicitly telling the system which step to do right now, or physically locking it out of the wrong functions.

The experiments ran on basic pipelines, but the principle is universal. It applies to any autonomous system whatsoever: coding assistants, customer support bots, complex CRM integrations, you name it. The moment a task stretches beyond a single prompt, passive memory stops saving the day — the agent needs a strict state machine, not "polite hints dropped into the chat."

Bottom line: stop hoping the LLM will just figure out where it is in the process on its own. Active control always beats clever prompting. If you want a reliable agent, hardcode the transition logic and lock down the action space by force — otherwise your virtual manager will burn a ton of time endlessly redoing steps that were already finished.

AI lab assistant

Apply this study to your task

Describe what you're working on. AI takes the method and the measured results from this paper and adapts them to your case, or writes a ready prompt built on them.

Based on The Task-State Ladder: Explicit Commands and Self-Tracking Beat Passive Status Checklists arXiv:2609.25686

Sign in to apply this study New accounts get 50 free credits.