TL;DR Open the run from History and read Claude's last message first. If it doesn't say what it did, look in the run for
denied by the Claude Code auto mode classifier,host_not_allowedandNo such tool available: each one tells you what to fix before the next run.
In History, a finished run whose row doesn't end in Error or Cancelled is a Succeeded run, and all that means is the session ended without Claude Code reporting a failure. Succeeded doesn't say whether Claude did what your prompt asks. A request the network blocked, a connector tool that wasn't there or work Claude couldn't finish all land in the run's transcript, not on its row.
It doesn't tell a run that couldn't from a run that had nothing to do, either. This morning my Platform routine had no rows in its queue and finished in 34 seconds. An excerpt of what the scheduled tasks API returns:
{
"name": "Platform (cloud)",
"last_run": {
"status": "ROUTINE_RUN_STATUS_SUCCEEDED",
"fired_at": "2026-11-08T07:01:22.143519Z",
"finished_at": "2026-11-08T07:01:55.960891Z"
}
}
A run that was missing its connector looks every bit as clean. The difference is only inside.
What never reaches the row
The run that wrote this tip is a cloud scheduled task, and it started in auto mode, as every run that opens a new session on Anthropic's cloud does unless auto mode is unavailable. While it tested what a run sees when something fails, the auto mode classifier blocked three of its commands: a curl to a host outside the allowlist and two claude -p tests. What Claude got back, verbatim:
Permission for this action was denied by the Claude Code auto mode classifier. Reason: [Exfil Scouting].
The other two came with Reason: [External System Writes] and Reason: [PII Data Handling]. One block doesn't stop the run: Claude carries on without that action, and whatever the block left undone only shows inside. These three weren't in a row; only when auto mode blocks 3 actions in a row or 20 in total does a permission prompt appear and wait in the session for someone to answer.
What to look for inside
| What you read in the run | What happened | Where it gets fixed |
|---|---|---|
denied by the Claude Code auto mode classifier. Reason: [...] |
auto mode stopped that action and Claude went on without it | a narrow allow rule, such as Bash(npm test), in the repository's .claude/settings.json, when the task has a single repository |
a 403 with x-deny-reason: host_not_allowed |
the environment's network doesn't allow that host | the task environment's Allowed domains |
Claude says it can't find a tool for Slack, Linear or whatever it needed; if it searched, you'll see No matching deferred tools found, and if it called one, No such tool available: ... |
the connector isn't on the task, or your MCP server only exists on your machine | the task's Connectors tab: why the cloud can't see your MCP |
| a last message that asks something or says it couldn't | it stopped halfway or is waiting for a yes | write to it in the run: how to pick up a finished run |
Connectors don't go through the environment's network, so a failing connector never shows host_not_allowed: the 403 belongs to requests the session's commands make, such as a curl or a script.
How to read a run
1. Open it
At claude.ai/code/routines, open the task and click the run under History. It opens as a full session, with everything Claude did.
2. Start at the end
Claude's last message is its report. If it says what it did and what it couldn't, you have what you need. If it's a bare "done", go up through the tool calls that returned an error and look for the strings in the table.
3. Or ask from the terminal
/schedule why did my nightly review do nothing this morning?
Claude lists the task's recent runs with their status and a link to each one, and reads the run's log to explain what happened: tool errors, permission denials and the final result. It needs Claude Code v2.1.227 or later signed in with your claude.ai account, and it doesn't work inside a cloud session.
4. Make the next one tell you without opening it
End the task's prompt with an instruction like this:
Finish with a single line: DONE, NOTHING TO DO or BLOCKED BY <what and where>.
The row will look exactly the same, but the last message now tells you which of the three it was.
What the row does tell you
| At the end of the row | Means |
|---|---|
| nothing (Succeeded) | the session ended without a Claude Code failure, whether or not the work got done |
| Error (Failed) | the session didn't finish normally: it stopped, ended on an error or was archived before it started |
| Cancelled | it didn't fail and its session was archived; archiving one that went fine turns it Cancelled too |
Official docs: View and interact with runs · Manage scheduled tasks from the CLI
Requirements
- Cloud scheduled tasks, on a Pro, Max, Ultra, Team or Enterprise plan. To ask with
/schedule, Claude Code v2.1.227 or later signed in with a claude.ai subscription.