An agent that says "done" when it isn't will quietly wreck a five-task run — which is why people hover, and why nothing is truly automated. So the loop below is deliberately boring: a plain checkbox file as the only source of truth, completion judged on the exact line the agent claimed, and a defined way out of every stall. Boring is what lets you close the laptop. Identical behaviour in the extension, the CLI and the desktop app.
TODO.md with a ## Todo section of - [ ] checkboxes.[~] in progress.[x] with a date.[ ]
[~]
[x]
[!]
[ ]; the loop pauses until the parsed reset time, then retries.One file — the only source of truth the loop reads and writes.
[ ] pending
[~] in progress
[x] done
[!] retried
Completion it cannot fake. Done is keyed to the exact line the loop claimed — not to matching text — so a reworded or reshuffled list never tricks it into moving on early.
A way out of every stall. Anything still thinking after 30 minutes is retried or set aside. One bad task never holds the whole list hostage.
Patience, handled for you. Hit a rate limit and the task returns to [ ] while the loop sleeps until the quota resets — then carries on exactly where it stopped. You find out afterwards, not at 2am.
“Most people are other people. Their thoughts are someone else’s opinions, their lives a mimicry, their passions a quotation.”
A raw large language model is exactly the mimic Wilde describes. It has no self of its own: no memory of yesterday, no fixed identity, no judgment accumulated across the work. Each session it becomes whoever the prompt makes it, and its "passions" are a quotation of the system message. Point the same model at the same repo twice and two strangers show up. An agent is meant to be your proxy — but a proxy with no soul is just a stranger wearing your name badge.
The task loop above solves continuity of work — the list keeps draining. Underneath it, AutoDev gives each agent continuity of self, so the thing draining the list is the same colleague from one session to the next. Three parts make up that soul.
Each agent keeps a persistent identity and profile — a name, a role, and a self-description it builds by proactively discovering what it is and verifying that against its own work, rather than being re-invented by every fresh prompt. The identity travels with the agent even when you switch the underlying model.
Decisions, conventions and how the pieces of a codebase connect are written into a durable knowledge and project graph the agent reads back on later tasks. What it learned on task three is still there on task fifty — and still there tomorrow — instead of being re-discovered from cold each run.
Sessions resume by default, so an interrupted run picks up its own thread rather than starting over as a stranger. History, tasks and memory stay attached to the agent, and the provider becomes a setting you can change — not an identity the agent loses when it does.
Nothing here invents new intelligence — it is the same model you already pay for. The soul is simply everything the agent is allowed to keep between the moments it is thinking.
The task loop above empties a TODO.md once. Some jobs aren't one-and-done, though — you want them to happen again on a cadence. That's what an agent's calendar is for: put a task on it and it fires on a schedule you choose, no prompt from you. We call a recurring scheduled task a loop — run this every morning, check the deploy every five minutes, sweep the inbox on the hour.
Each schedule carries the task text sent to the agent on every fire, a trigger that sets the cadence (interval like 5m/2h/1d, a cron expression like 0 9 * * *, or a one-off once date), and a rule for what happens if the agent is mid-task — queue, skip, or force. There's also a self-pacing variant, the Thought Giver, that simply hands the agent a grounded next step on a timer.
Pick an interval, a cron expression, or a single future moment. Interval and cron triggers are the loops — they keep coming back; the agent's calendar fires them on time.
A fire that lands while the agent is working can queue until it's idle, skip that round, or force through. Optional conditions hold a loop until the agent is idle or inside a time window.
Flip on the Thought Giver and pick an interval; the agent gets a grounded next-step thought on that timer, skipped while it's busy. The nearest thing to an agent that paces itself.
Full walkthrough with screenshots → Loops & the agent calendar · jump straight to how to make a loop or the Thought Giver.