Recovery after a failed, stuck or uncertain run
No automatic paid retries, an uncertain task blocks further spend, and reconcile never resends inference. The exact commands to get unstuck.
π― For Operators on call
- Tell a failed task from an uncertain one
- Reconcile without resending inference
- Stop a lane without losing the others
Three things can go wrong, and they need different reactions:
- the task failed (the provider refused, or the request errored);
- the task is stuck (no output, and you want it to stop);
- the task is uncertain (the service does not know whether it was billed).
Only the third one blocks you, and it blocks you on purpose.
π§ First: look, do not re-run
Re-running blindly is the most expensive mistake in this system, because a second run is a second task with a second budget.
dsh status # last task: state, spend, held amount
dsh tasks # recent tasks
dsh task TASK_ID # one task in detail
dsh sessions # saved conversations
In the browser, the Usage tab shows the same information per task: provider, model, tokens, limit, spend, state.
πΉ Failed task
A failed attempt ends the task. There is no automatic paid retry β the client does not silently send the same request again.
What to do:
- Read the error class. An authentication or balance refusal happens before generation and costs 0. A timeout or server error may not be free.
- Fix the cause (scope too large, route unavailable, account limit reached).
- Decide whether to run a new task, with a smaller scope.
Do not paste the same prompt five times hoping for a different answer: five failures cost five times as much and teach you nothing.
πΉ Stuck task
dsh stop TASK_ID
Stopping ends the task and keeps the attempt in the ledger β the row stays, because money may already have moved. In the editor, Ctrl+C during a task does the same thing; Ctrl+C at the prompt just exits the chat.
πΉ Uncertain task
This is the state where the service cannot prove whether the call was billed. Behaviour you should expect:
- the task stays uncertain; it is not rewritten as zero;
- further paid turns are blocked until it is resolved;
dsh reconcile SESSION_IDinspects the uncertain task or grant and recovers it using the saved idempotency key β it never resends inference;dsh reconcile SESSION_ID --canceladditionally requests cancellation.
The rule behind this is simple: an unknown spend is not a zero spend. Resolving it is a deliberate action, not a timeout.
β‘οΈ Resuming work
A conversation can continue without re-sending history:
dsh sessions
dsh resume SESSION_ID
Resuming keeps the context; it does not refund or reopen a finished task. Each new question is still a new task with its own cap.
πΉ If you run several lanes
- A lane that fails does not invalidate the others β collect the finished outputs first.
- Stop a lane by its own id; never kill the whole process group if other lanes share it.
- Keep every lane's output and receipt, including the failed ones: the receipts are how you explain the cost.
π§ When this does NOT work
- You want the client to retry automatically. It will not. That is a design decision, not a missing feature.
- You expect a timeout to be free. It may be billed; the state stays uncertain until reconciled.
- You want to reconcile without knowing the task id. Find it in
dsh tasksor the Usage tab first. - The service itself is down. Then receipts stop appearing; do not keep firing tasks β wait for a terminal state.
β‘οΈ Next
- Costs, budgets and limits β why uncertain blocks the account.
- Splitting work across agents β isolating a failing lane.
- Models and routing β reading the receipt.
Sources
Each source was opened by a human on the date shown. Product behaviour is described from this deployment, not from marketing material.
π Article connections
Open the full knowledge graph βNext steps
Related reading
DSHREM robustness audit, October 2026
Six defects found in cancellation, retry, fallback and cost accounting. One money bug is fixed and covered by tests; five remain open with exact locations.
Costs, access and recoveryPermissions and data flow
What leaves your machine, what stays local, and which actions need an explicit human decision β including the licence question people skip.
Costs, access and recoveryRunning a Tvijo pilot and measuring the benefit
A pilot that can be judged: one workflow, one acceptance check, four numbers per week, and exit criteria agreed before the first task.
Costs, access and recoveryCosts, budgets and limits
Every task has a cap, every attempt is counted, and an unknown cost is shown as unknown. The arithmetic behind the receipt.
π¬ Comments