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

You Finished Onboarding Weeks Ago. Why Does Your Scheduled Agent Keep Asking You to Start It?

You finished onboarding weeks ago. You connected your tools, set your preferences, and started using the product every day. Then, on a quiet Tuesday morning, an email arrives telling you to complete step one of onboarding. A few days later, another one invites you to the getting-started walkthrough you already attended. Nothing broke. The workflow ran on time, the message went out, and the log shows success. The failure is quieter: your scheduled agent never learned that onboarding was finished,

You finished onboarding weeks ago. You connected your tools, set your preferences, and started using the product every day. Then, on a quiet Tuesday morning, an email arrives telling you to complete step one of onboarding. A few days later, another one invites you to the getting-started walkthrough you already attended. Nothing broke. The workflow ran on time, the message went out, and the log shows success. The failure is quieter: your scheduled agent never learned that onboarding was finished, so every run still treats you like a brand-new account.

This is one of the most common ways a scheduled agent embarrasses the business running it. The customer did everything right. The agent is the one that forgot, and the customer can tell.

Why completion gets lost between runs

A scheduled onboarding agent usually starts with a list, not a record of what each person already did. That distinction is where the repeat messages come from.

First, completion lives in a different tool than the list. Onboarding steps get finished inside the product: a settings page, a tutorial, a setup wizard, a first successful run. The scheduled agent reads a customer list, a segment, or an audience built days or weeks earlier. If no step carries the completion back from the product to the list the agent reads, the next run has no way to know the work is done. The product did its job. The agent simply never asked it.

Second, onboarding is rarely one event. It is a chain of steps spread across days: account created, profile completed, first project set up, first integration connected, first workflow run. A workflow that tracks only "onboarding started" and "onboarding sent" cannot tell a customer who finished step one from a customer who finished all five. When the list says "incomplete" for everyone who has not been marked done, every partially tracked customer looks the same as a customer who never began.

Third, the list gets rebuilt from an old snapshot. A fresh export, a re-imported audience, or a segment copied from last month can quietly drop the completion flags. The agent sends to the list it was given, and the list is stale. This is why repeat onboarding messages often arrive in waves: one bad rebuild can re-send a whole batch of getting-started messages to people who finished weeks ago.

Fourth, the same person appears under more than one identity. A customer signs up with a work email, then finishes setup while logged in with a different account, or completes onboarding on a phone while the agent matches on a desktop record. When the match fails, the completion belongs to a stranger as far as the agent is concerned, and the real customer gets asked to start over.

None of this means the agent is broken. It means no run ever wrote "onboarding finished" somewhere the next run would read it.

What an onboarding memory actually holds

A useful onboarding memory is not a tag. It is a short record the next run can act on without guessing. It needs four parts.

First, the current state: which steps are done, which are open, and whether onboarding as a whole is complete. One state per customer, not three overlapping labels across three tools.

Second, the date each step finished. A customer who finished onboarding yesterday and one who finished it six months ago are both done, but they should not get the same next message. The date lets the next run tell a new customer who needs a check-in from a long-standing customer who needs nothing at all.

Third, what triggered each completion: a settings save, a first successful run, a tutorial viewed to the end, a support conversation where the customer confirmed setup. The trigger lets the next run explain its decision: this message stopped because the setup step was recorded, not because someone guessed.

Fourth, what happens next. A finished onboarding should point the next run somewhere useful: normal usage messages, a feature check-in, or silence. "Done" is only useful if the run that reads it knows what to do instead of repeating step one.

The same record should travel with the customer across tools. The agent that sends onboarding email, the assistant that answers support questions, and the agent that drafts follow-ups should all read the same completion record, instead of each keeping its own stale copy.

How to stop the repeat messages

Start by making completion a first-class record, not a side effect of a list. Before any onboarding message goes out, the run should check the completion record for that customer: is onboarding done, which steps remain, and when did each step finish? If the record says done, the run sends nothing from the onboarding series.

Next, write completions back the moment they happen. When a customer finishes a step in the product, that event should update the shared record immediately, not wait for a nightly sync or a weekly export. The gap between "finished" and "recorded" is exactly the window where repeat messages are born.

Then, match on the customer, not the address. If a customer can appear under more than one email or device, the completion record needs one stable identity behind those appearances, so a finish recorded on one channel counts on every channel.

Finally, audit the list before the next send. If the onboarding list and the product's completion data disagree, trust the product. A list is a guess about who needs onboarding. A completion record is evidence about who finished it.

One memory every tool can read

This is the kind of shared state Vilix AI is built to hold. Vilix AI is a cloud-hosted memory layer, so there is nothing to install or maintain, and every tool connects to the same memory over MCP: the onboarding workflow, the support workflow, and the scheduled agent all read the same completion record, instead of each keeping its own stale copy.

Because Vilix AI stores full conversation history, not just extracted facts, the exchange where a customer confirmed setup, asked a setup question, or got help finishing a step stays retrievable in full, alongside the completion record. A later run can see not only that onboarding finished, but the context around it, which makes it much harder to send the wrong follow-up to the wrong stage of the relationship.

Getting started costs nothing: the free plan is free forever, and the Pro trial runs seven days with no credit card required. And the data stays portable: everything can be exported or deleted at any time.

The test before the next run

Before the next onboarding send goes out, check one customer who finished onboarding last week. Does the run that sends onboarding messages know that? If the answer is no, the problem is not the message copy or the send timing. It is that no run ever wrote the finish down where the next run would read it. Fix that record, and the repeat messages stop, not because the agent got smarter, but because it finally remembers what already happened.

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