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

Two People, One Task: Why Your Scheduled Agent Keeps Assigning the Same Work Twice

Two team members start the same task on the same morning. Each believes they own it. By midday, both have done part of the work, neither version is complete, and someone has to sort out which one counts. The scheduled agent that handed out the work did not make a typo. It assigned the task twice because, from its point of view, the task was still unassigned both times. This is a memory failure, not a scheduling failure. A task assignment is a claim: once someone takes a task, every later run sh

Two team members start the same task on the same morning. Each believes they own it. By midday, both have done part of the work, neither version is complete, and someone has to sort out which one counts. The scheduled agent that handed out the work did not make a typo. It assigned the task twice because, from its point of view, the task was still unassigned both times.

This is a memory failure, not a scheduling failure. A task assignment is a claim: once someone takes a task, every later run should see that claim and move on to the next item. When the claim lives only inside a single run, the next run cannot see it, and it assigns the task again with full confidence.

How one task becomes two assignments

Scheduled work usually flows through a queue. A list of open tasks sits in a spreadsheet, a project board, or a CRM. On a schedule, the agent reads the list, picks the next open item, and assigns it to the next available person. So far, so reasonable.

The trouble starts with what happens after the assignment. The agent may send a message, create a ticket, or update a row, but the queue itself often keeps the task marked as open. The assignment happened in a message or a ticket, not in the record the next run reads. The next run opens the same list, finds the same open task, and assigns it to someone else.

There are three common ways this happens.

The first is an assignment that never writes back. The agent notifies a person but never updates the shared list. The list stays open, so the next run treats the task as untouched.

The second is two workflows reading the same list. One workflow assigns tasks in the morning, another assigns follow-ups in the afternoon, and neither knows about the other's assignments. Each one works correctly from its own list, and together they double-assign.

The third is a retry that looks like a new task. A run starts, assigns the task, and then fails partway through, or a duplicate trigger fires. The retry reads the list again, finds no record of the first assignment, and assigns the task a second time. The system now has two owners and no way to tell which assignment was the retry.

In each case, the agent is not careless. It is blind. It cannot see a claim that was never written to a place all runs share.

Why a checklist cannot fix this

Teams often try to fix double assignment with a checklist or a rule: "check before assigning" or "only assign tasks marked unassigned." Those instructions fail for the same reason the original workflow failed. A checklist is a static document. An assignment is a changing fact. A run that reads a checklist at the start cannot know what another run assigned five minutes later unless the checklist itself is updated by every run, immediately, in a shared place.

What the agent actually needs is a record with four properties. First, the task has a single identity, so the same job arriving through two triggers is recognized as one task, not two. Second, the record shows who claimed it and when, so a later run can see the claim at a glance. Third, the claim is written before the work starts, not after it finishes, so no second run can slip in during the gap. Fourth, the claim can expire or be released, so a task abandoned by one person returns to the pool instead of staying locked forever.

Without that record, every run makes its decision from stale information, and stale information assigns the same task twice.

The pre-assignment check

Before a scheduled agent assigns any task, it should answer three questions from a record shared with every other run.

Has this task already been claimed, and by whom? If the answer is yes, the run should skip it, no matter what the original queue still says.

Is the claim still live? A claim from last week, with no progress since, may need to be released back to the pool. A claim from this morning does not. The record needs timestamps and progress notes to tell the difference.

What is the current state of the task? A task that is already in progress, already done, or already blocked needs a different action than a task that is genuinely unassigned. Sending it to a second person is the wrong action in all three cases.

When those answers come from shared memory, the visible change is simple: each task gets one owner at a time. The second person never receives the duplicate assignment, never starts the parallel version, and never has to reconcile two half-finished attempts.

How shared memory changes assignment

Vilix AI gives scheduled agents a shared memory they can read before they act and write to after they act. It is cloud-hosted, so there is no infrastructure to run, and the same memory is available to every tool over MCP, not just the tool that made the first assignment. That cross-tool reach matters here, because the morning workflow and the afternoon workflow may live in different tools. A memory stored inside one workflow cannot stop the other workflow from assigning the same task again.

The memory also holds full conversation history, not just extracted facts. A bare status that says "assigned" hides the details a later run needs: who was assigned, what they were told, what they have already done, and whether the task changed hands. Full history carries those details, so a later run can tell a live claim from a stale one and a handover from a duplicate.

With that in place, the assignment workflow changes in one practical way: the run checks the shared record first, claims the task there, and only then notifies the owner. The claim and the notification draw on the same record, so the next run, in any tool, sees the same owner.

Vilix AI is free forever, with a 7-day Pro trial that needs no credit card, and you can export or delete your data anytime. Get started for free. Free forever, no credit card.

The test to run this week

Pick one assignment workflow and look at its last twenty assignments. Count how many tasks were assigned to more than one person, or assigned again after someone had already started. If the count is more than zero, the workflow does not have a people problem or a workload problem. It has a memory problem: the run that made the second assignment could not see the first one.

Fix that visibility first. A scheduled agent that remembers who already claimed a task does not need a stricter schedule. It needs the one thing its current setup cannot give it: a claim record that survives from one run to the next, in a place every run can read.

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