Free forever, no credit card.Get Started for Free →
← All posts
October 28, 2026 · 6 min read

Your Scheduled Agent Is Still Working on Cancelled Orders. It Never Got the Cancellation.

A customer cancels an order on Monday. On Wednesday, your scheduled agent sends the shipping preparation message anyway. On Thursday, it chases the payment. By Friday, the customer is writing a support ticket asking why a cancelled order is still moving, and someone on your team is apologizing for work that should never have happened. Nothing in the automation errored. Every run completed. The agent simply never learned about the cancellation, because a cancellation is not a task sitting in its

A customer cancels an order on Monday. On Wednesday, your scheduled agent sends the shipping preparation message anyway. On Thursday, it chases the payment. By Friday, the customer is writing a support ticket asking why a cancelled order is still moving, and someone on your team is apologizing for work that should never have happened.

Nothing in the automation errored. Every run completed. The agent simply never learned about the cancellation, because a cancellation is not a task sitting in its queue. It is a change of state in another system, and a scheduled agent that wakes up blank has no way to know the world changed while it slept.

This is one of the most expensive ways a scheduled agent fails, because the damage is not a missed task. It is work actively done against a customer's explicit decision. A cancelled order that keeps moving costs a refund, a chargeback risk, a support conversation, and trust that is hard to buy back.

Why the agent keeps working on dead orders

A scheduled agent usually starts a run by reading a list: open orders, pending shipments, unpaid invoices. That list was correct when it was built. The problem is that the list is a snapshot, and cancellations happen after the snapshot.

Cancellations hide in at least three places, and a run that checks only one of them will miss the rest:

  1. The store or order system. The customer clicked cancel, or support cancelled the order in the admin panel. The order status changed, but the agent's working list still says "open."
  2. The support inbox. The customer emailed "please cancel this" instead of using the cancel button. A human would read that email and stop the work. The agent's run never opens the inbox, so the request never reaches the workflow.
  3. The payment processor. A subscription was cancelled at the billing layer, or a payment was refunded. The fulfillment workflow lives in a different tool and never sees the billing change.

Each run then does exactly what it was told to do with the list it was given. It prepares the shipment, sends the follow-up, or drafts the invoice, because nothing in its input says "stop." The agent is not malfunctioning. It is faithfully executing stale instructions, and stale instructions are the default state of any agent that starts every run from zero.

The fix is a gate, not a better list

You cannot fix this by building a cleaner order list. Lists go stale the moment they are built. What a scheduled agent needs is a gate at the start of every run: before acting on any item, check whether that item is still alive.

A run-start gate has three parts, and all three matter:

First, re-check status at run time, not at list-build time. The agent should verify each order's current status in the system of record right before acting on it, not trust the status from when the queue was assembled. An order that was open at midnight may be cancelled by morning, and the run that acts at 9 a.m. needs the 9 a.m. truth.

Second, record cancellations as shared memory, not as one-run knowledge. When any run, tool, or teammate learns that an order was cancelled, that fact needs to live somewhere every future run can read. A cancellation noted in one run's log, one chat thread, or one person's head will not protect the next run. The next run starts blank, so it needs the cancellation waiting for it in a place it always checks.

Third, record what "cancelled" means for downstream work. A cancelled order is not just a status flag. It answers several questions the next run will ask: should fulfillment stop, should payment chasing stop, should onboarding messages stop, and should the customer get a confirmation instead of another sales message? When the cancellation memory carries those answers, the next run does not have to guess. It stops the right work and sends the right message, which is usually a short confirmation, not silence and not another pitch.

Teams sometimes try to solve this with a shared spreadsheet or a status table the agent reads each run. That can work at small scale, and it is better than nothing. But it has the same weakness as every hand-built memory: someone has to keep it updated, in every place a cancellation can arrive, and the agent has to know to look there. The moment a cancellation arrives through a channel nobody wired into the table, the gate fails open and the dead order moves again.

What a memory layer changes

A shared memory layer over MCP changes the shape of the problem. Instead of each workflow maintaining its own cancellation list, every run, tool, and assistant reads and writes one shared memory. When a cancellation is recorded anywhere, whether by the support assistant, the billing workflow, or the agent itself, it is visible to the next scheduled run before that run touches the order.

Vilix AI is built for exactly this pattern. It is a cloud-hosted memory layer, so there is nothing to install or maintain. The same memory follows your agents across tools over MCP, so the cancellation your support tool recorded is the cancellation your fulfillment agent reads. It stores full conversation history, not just extracted facts, so the next run can see not only that the order was cancelled but why, and what the customer was promised in the cancellation conversation. It is free forever, with a 7-day Pro trial that needs no credit card, and you can export everything or delete it anytime.

The practical pattern becomes simple: at the start of a run, the agent recalls the relevant state for the items it is about to touch, including cancellations. It skips what is dead. It does the work that is still alive. At the end of the run, it saves what changed, so the run after that starts from the same truth.

A short checklist for your next run

If your scheduled agent touches orders, subscriptions, or fulfillment, give it this gate before its next run:

  • Re-check order status at run time, in the system of record, before acting on any item.
  • Keep one shared cancellation record that every tool and run reads, not a separate list per workflow.
  • Record the reason and the date with each cancellation, plus which downstream steps stop.
  • Treat support-inbox cancellations and billing cancellations as equal to store cancellations. A customer who asked to cancel has cancelled, whatever channel they used.
  • When a run skips a cancelled item, have it log the skip. A skipped item with a reason is a healthy run, not a failed one.

Your scheduled agent does not need to be smarter about cancellations. It needs to start each run knowing what changed since the last one. Give it that memory, and cancelled orders stop moving on their own.

Learn more about giving your scheduled agents shared memory at Vilix AI.

Get Started for Free

Persistent memory across ChatGPT, Claude, and the AI tools you already use in Vilix AI.

Get Started for Free

Free forever, no credit card.

Keep reading
She Asked for Email. Your Scheduled Agent Called Anyway. Its Channel Memory Is Missing

She Asked for Email. Your Scheduled Agent Called Anyway. Its Channel Memory Is Missing A customer tells your team, plainly, that email works best. Calls during the workday are a problem. Email can be read, saved, and answered when there is time to act on it. The team notes the preference and moves on. Then a scheduled agent runs its weekly check-in, and the customer gets a phone call in the middle of a meeting. The message itself is fine. The channel is the insult. The customer asked for one th

That Ticket Was Closed on Tuesday. Why Did Your Scheduled Agent Reopen It on Wednesday?

That Ticket Was Closed on Tuesday. Why Did Your Scheduled Agent Reopen It on Wednesday? A support ticket gets closed on Tuesday. A human agent resolved the issue, confirmed it with the customer, and marked it done. On Wednesday morning, the customer gets a message saying the team is looking into their issue again. The ticket is open again, back in the queue, with a fresh timestamp and no trace of the resolution. Nothing broke. The schedule fired on time, the agent ran its checks, and the ticke

Your Scheduled Agent Keeps Retrying the Same Failed Task. Its Memory Is the Missing Brake

Your Scheduled Agent Keeps Retrying the Same Failed Task. Its Memory Is the Missing Brake A nightly report fails on Monday. On Tuesday, the scheduled agent tries the exact same report, the exact same way, and fails again. On Wednesday it fails again. Nothing in the setup looks broken, because the schedule is firing on time and the agent is doing what it was told. The problem is quieter than that: every run starts from zero, so the agent never learns that this task already failed, or why. That