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

They Sent It Back. Why Does Your Scheduled Agent Keep Asking Them to Review It?

They Sent It Back. Why Does Your Scheduled Agent Keep Asking Them to Review It? The return label was printed, the parcel went back, and the refund landed. A week later, a message arrives asking the customer to review the product they sent back. The business asked for an opinion about a product the customer no longer owns, for a reason the customer already explained. That message does more damage than a mistimed email. A duplicate message says the system is careless. A review request for a retu

They Sent It Back. Why Does Your Scheduled Agent Keep Asking Them to Review It?

The return label was printed, the parcel went back, and the refund landed. A week later, a message arrives asking the customer to review the product they sent back. The business asked for an opinion about a product the customer no longer owns, for a reason the customer already explained.

That message does more damage than a mistimed email. A duplicate message says the system is careless. A review request for a returned product says the system never learned what happened. The customer told the business, through the return itself, that the product did not work out. Asking for a review anyway reads as if that message was never received.

A return is an outcome, not a footnote

Every order ends in one of a few ways. Some end with a happy customer. Some end with an exchange. Some end with a return and a refund. A review request only makes sense for the first kind of ending. It makes the least sense of all when the return happened because the product was faulty, the wrong size, or not what was described.

Scheduled agents break this rule in a few predictable ways.

First, the review list is built from shipped orders, not from kept orders. The workflow pulls everything that went out the door, waits a set number of days, and sends a review request for each row. If the list never gets filtered by what happened after shipping, a returned order looks exactly like a kept order. The agent is not choosing to ignore the return. The return simply is not in the list it reads.

Second, the return lives in a system the agent never checks. The shop system records the return, the warehouse scans the parcel back in, and the payment tool issues the refund. If the scheduled run only reads the order list, the return can be a settled fact in several places and still be invisible to the one run that sends the message. The agent works from an incomplete picture, and the customer pays for the gap.

Third, the run has no memory of its own past decisions. A retry after a timeout or a duplicated schedule can send the review request again, even for an order the agent already excluded once. Sending is treated as a fresh decision every time, instead of a step checked against what already happened.

Fourth, timing works against the customer. Review requests are often scheduled a fixed number of days after delivery, with no check for what changed in between. A return that arrives on day five still meets a review request scheduled for day seven, because nothing in the workflow re-checks the order before sending.

All four failures share one root cause. The agent's knowledge resets between runs, or lives in fragments scattered across tools, so "returned" never becomes a single durable fact that every run must respect.

Make the return stick

The fix starts with one rule: a returned or refunded order never receives a review request. That rule sounds obvious, and it is exactly the rule that breaks when it lives only in somebody's head instead of in the memory every run reads.

Start by defining the outcome record for each order. Before any review run sends anything, it should be able to answer four questions: was it delivered, was it returned, was it refunded, and was it exchanged? If any answer points to a return or a refund, the order leaves the review list. If the order was exchanged, any review request should be about the replacement, not the original item. The record needs a date for each outcome, so a return that happened yesterday can still block a request scheduled for today.

Next, make the return check the last thing that happens before sending, not a filter applied when the list was built. Lists go stale. A return processed between list-building and sending should still stop the message. The check costs one lookup. Sending the wrong message costs a customer relationship.

Then, record what the run did. Every review request should leave a note: which order, which product, which customer, when it was sent. The next run reads that note before deciding. That is how a retry or a re-run stops turning into a second request for the same returned product.

Why this keeps happening to scheduled runs

A scheduled run is the worst place for this failure to hide, because the run looks successful. The workflow ran on time, the message went out, and the log shows no error. There is no crash to investigate and no alert to chase. The failure is quiet: the right message, sent to the wrong customer, at the wrong point in their story with the business.

That quiet failure repeats because each run starts fresh. A run that cannot recall the previous run's outcomes has to rebuild the whole picture from whatever lists it is handed. If the return is missing from those inputs, the run has no way to know.

The pattern that fixes it is simple, and it repeats every run. Recall first: before the run plans anything, it reads the order's outcome record, including returns, refunds, and exchanges. Work second: it sends only the messages that still make sense given that record. Save third: at the end of the run, it writes back what changed, including any new return and any message sent. The next run then starts one step further along instead of back at zero.

How Vilix AI fits

This is the gap Vilix AI is built to close. Vilix AI is a cloud-hosted memory layer, so there is no infrastructure to set up and nothing to install. A scheduled agent connects to the same Vilix AI account over MCP as the rest of your tools, and every run reads and writes the same memory.

That shared memory is what makes "returned" stick. The return recorded by one tool, the refund issued by another, and the review run scheduled by a third all read the same outcome record.

Vilix AI stores full conversation history, not just facts, so the customer's explanation for the return stays attached to the order, in their own words, instead of being reduced to a status code.

There is a free plan forever, and a 7-day Pro trial with no credit card, so the pattern can be tested on a real scheduled run before committing to it. And the data stays portable: export everything or delete it anytime.

A short checklist before the next review run

Before the next batch of review requests goes out, check three things. Does the review list exclude returned and refunded orders? Is the return check the last step before sending? Does every sent request leave a record the next run will read?

If any answer is no, that is where the next wrong review request will come from.

For a scheduled agent, remembering a return is not a courtesy. It is the difference between a business that listens and a business that keeps asking a question the customer already answered.

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
Does Base44 Remember Between Sessions? Two Different Memories, Two Different Answers

Does Base44 Remember Between Sessions? Two Different Memories, Two Different Answers Short answer: yes, in two separate places, and neither one is the memory most people mean when they ask the question. The AI chat that builds your app keeps its conversation, its plans, and the instructions you wrote for that app. The AI agents you build inside your app have their own memory, on by default, that carries preferences and facts across conversations with your app's users. Both are real. Both stop a

Does v0 Remember Between Sessions? Chat Context, Knowledge, and Where It Stops

Does v0 Remember Between Sessions? Chat Context, Knowledge, and Where It Stops Short answer: inside one chat, yes. Across chats, projects, and the rest of your tools, mostly no, unless you wrote the context down yourself in the places v0 calls Knowledge and custom instructions. That distinction matters because v0 feels continuous while you work in it. You return to a chat, the conversation is still there, the generated app is still there, and iteration picks up where it left off. It is easy to

Does Bolt Remember Between Sessions? Chat Threads, Knowledge, and Short-Term Memory, Explained

Does Bolt Remember Between Sessions? Chat Threads, Knowledge, and Short-Term Memory, Explained Short answer: the project remembers, because the project never goes away. Your code, your chat thread, your version history, and your backups are all still there when you come back tomorrow, so picking the work back up feels continuous. But Bolt does not build a learned memory of you or your decisions the way a memory product does. What carries between sessions is the work itself, plus whatever contex