A Claude Code to-do list is a table of work you hand to the agent instead of to yourself. Mine lives in Airtable, holds eight kinds of rows, and gets worked by one typed sentence: work the queue. I start it before I feed the dogs and sit back down to finished work and a short list of things only I can decide. This post walks through how mine runs, what’s still wrong with it, and a generator that builds yours.

What I come back to after the smoothie
Most mornings I open my laptop, type “work the queue,” and walk away. Then I feed the dogs, make a smoothie, make tea, and do the rest of my morning. By the time I sit down at my desk for the actual workday, Claude has been going for a while, and there’s a pile waiting for me.
It’s usually post sweeps. Every time a blog post goes live, a check on it lands in the queue the next day, so the sweeps are the first thing I see. Behind those are the 90-day sweeps, which are the bigger version of the same idea on older posts. Those are the rows I’m involved in, because they end in judgment calls about my own writing.
The n8n errors are already handled by then. Any workflow that threw an error overnight filed a row about it, and Claude works those first and mostly finishes them without me. I read what happened instead of discovering it.
So technically, Claude starts working before I do. That’s the whole thing. I didn’t build a smarter assistant, I built a place to put work so the assistant has somewhere to start when I’m not there yet.
What does a Claude Code to-do list do?
It holds work for the agent the way your task app holds work for you. A row says what needs doing, what kind of work it is, how urgent it is, and everything the agent needs to act without asking. When I type “work the queue,” Claude reads the table, picks the top row, does it, writes back what happened, and moves to the next one.
I already have Asana, and it’s full of tasks. Those are mine. The queue is a different list with a different owner, and keeping them apart is what makes both usable:
| My Asana | My Claude Code to-do list | |
|---|---|---|
| Who works it | Me, and sometimes Claude | Claude Code |
| What’s in it | Business tasks, errands, things needing my hands | Post sweeps, n8n errors, audits, approvals waiting on me |
| How it gets worked | I open it and pick something | I type one sentence and leave |
| What I see at the end | What I did | What got done, plus what needs my call |
| Who files the rows | Me | My automations, mostly |
That last row is the one I underestimated. Since July 16 the queue has taken 281 rows and finished 269 of them, and only 15 of those rows came from me or from a chat session. The other 266 arrived on their own.
Who is a Claude Code to-do list for?
It’s for you if you already hand real work to Claude Code and keep losing it between sessions. The tab closes, the context goes with it, and next time you’re re-explaining the same job from scratch. A table fixes exactly that problem and nothing else. It’s also for you if your automations already find problems you don’t hear about until something breaks.
Skip it if any of these is you:
- You use Claude Code for one project, in one sitting. You don’t have a queue problem. You have a chat, and it’s enough.
- You want a project manager. This doesn’t plan, prioritize your life, or track goals. It’s an inbox for an agent.
- Your work needs you present at every step. If nothing on your list can move without your input, a queue just becomes a list of interruptions.

What do you need to build a Claude Code to-do list?
Not much, and the part doing the real work is free:
- Claude Code. The agent that works the rows. This is the whole engine.
- A skill. One file telling Claude how to work the list: pick a row, claim it, do it, write back, repeat. Free, and it’s the piece that makes “work the queue” mean something specific instead of something vague. I wrote about what a Claude Code skill is and how to make one if this is new.
- Somewhere to keep the rows. I use Airtable, on a plan I already pay for, but the free tier holds this easily. A Google Sheet or a Notion database works the same way. What matters is that it survives a closed tab.
- n8n, optional. This is how rows file themselves. Mine runs on my own VPS, and it’s the reason the queue fills overnight instead of waiting on me to remember something.
The optional one is where mine stopped being a to-do list and started being useful. Twenty-one different workflows file rows into my queue now, and none of them ask me first.
How does the queue decide what to work on first?
Priority, then age. Claude pulls every row marked Queued, sorts High before Normal before Low, and takes the oldest one inside each group. Then it marks the row In Progress so a second session can’t grab the same work, does the job, writes two to four sentences about what happened into the row, and sets it to Done or to Needs Jen.
The row’s type is what tells Claude how to do it. Mine has eight, and the split says a lot about what my mornings look like:
| Row type | Count so far | What it is |
|---|---|---|
| post-pass | 189 | A full check on a published post |
| incident | 50 | A workflow threw an error and filed it |
| custom | 26 | A one-off job I described |
| fleet-finding | 8 | Something an audit found across all my apps |
| reminder | 3 | A recurring thing with a date |
| sweeps | 4 | Monthly cross-promo and model-cost checks |
| approval | 1 | Waiting on my yes |
The producers are the half that runs without me. When a post publishes, my post-publish checklist files a sweep row for the next day, which is 90 rows so far. A separate workflow walks back through older posts and files the 90-day version, which is another 73. My dashboard files 26. My brain dump tool files 12, because when I talk at it, anything that turns out to be Claude’s job goes straight here instead of to Asana.
Needs Jen is the important status, and it’s the one I got wrong at first. It doesn’t mean the row is finished, it means Claude owes me a question. The rule now is that the moment a row lands there, it gets asked in the chat, in full, with a recommendation. Not left in the table for me to find. I don’t go into Airtable to work rows, and a beautifully written row I never read is work that didn’t happen.
I do have a Mission Control dashboard to monitor what’s going on, too, but it’s optional.
Get the generator
The generator asks you what kinds of work you’d hand an agent, then writes two things: a table spec you can build in Airtable, Notion, or a sheet in about ten minutes, and a skill plus a paste-in prompt that works it.
You get both because not everyone runs Claude Code. If you do, save the skill file and type your version of “work the queue.” If you’re in Claude or ChatGPT in a browser, paste the prompt into a chat and it does the same loop with you pasting the rows in. Same system, different door.
Two things you’ll want to change in whatever it gives you: your row types, and what counts as needing you. Those two decisions are the whole design, and they’re personal enough that a template can’t guess them.
What it doesn’t do
It’s inconsistent about when it talks to me, and that’s the thing I’d fix first. Some mornings Claude asks me about a row the moment it hits one, which is what I want. Other mornings it blasts through everything and hands me every question at once at the end, and I hate that version. Same skill, same table, different day. The rule is written down. It isn’t always followed, and the inconsistency bugs me more than any missing feature.
There’s no date field, so a monthly reminder row has no way to hide until its date. My Grow subscriber export row keeps floating to the top of every sweep, and every session reads the first line of it, says “not yet,” and puts it back. It’s been doing that since mid-August. The fix is a workflow that files the row on the day instead of a row that sits there waiting, and I just haven’t built it yet.
And a row can park on me for a long time. One research job has been sitting at Needs Jen since September 3, waiting on me to open a browser and look at something myself. The queue can’t make me do it. It’s honest about the fact that I haven’t, which is more than I can say for my Asana.
It also doesn’t plan. It never decides what’s worth doing, only what order to do the things in. Everything in there got there because a workflow or I put it there, and a queue full of the wrong work would run just as smoothly.

Frequently asked questions
What is a Claude Code to-do list?
It’s a table of work you hand to Claude Code instead of doing yourself, with one row per job. Each row carries what to do, what type of work it is, and enough detail for the agent to act on its own. You start it with a single instruction, and the agent works the rows in order.
Can Claude Code work through a list of tasks on its own?
Yes, if the list lives somewhere it can read and write. Claude Code can’t remember tasks between sessions on its own, so the table is the memory. Mine has worked 269 rows since July 16, most of them without a question.
Is this the same as the to-do list Claude Code shows in a session?
No. The one you see inside a session is Claude’s own scratchpad for the job in front of it, and it disappears when the session ends. This is an outside list that survives the closed tab, gets filled by other tools, and is the same list tomorrow morning.
Do I need Airtable to build one?
No. Any table your agent can read and write works, including a Google Sheet or a Notion database. I use Airtable because my other systems already live there, so a workflow filing a row is one step instead of three.
How does a task get into the queue without me adding it?
An automation files it. When one of my n8n workflows fails, it writes a row describing the failure. When a post publishes, my checklist files a sweep for the next day. Twenty-one workflows do this now, which is why the list is full before I’m awake.
What happens when the agent needs a decision?
The row gets marked as needing me and the question gets asked in chat right then, with the options and a recommendation. The table is where the work survives, not where I read things. A question parked in a row I never open is the same as no question at all.
Try it yourself
Open whatever you use for tables and make one with five columns: title, type, priority, status, and notes. Put three real jobs in it that you’ve handed Claude Code before and had to re-explain. Then run the generator below, save what it gives you, and type your version of “work the queue.”
The test is whether you can close the tab, come back tomorrow, and pick up without explaining anything twice. That’s the part a chat window can’t do, and it’s the only reason the table exists.
If it works, the next thing to build is the half that fills it. A single automation that files a row when something breaks turns the list from one you maintain into one that maintains itself, and that’s when I stopped thinking of it as a to-do list at all.
A tool I built
Dopamine Dealer
Track your habits and get a hit of dopamine every time you check one off. No willpower required.
Start your streak →I run an affiliate program on the tools I build. Approved affiliates earn 20% on what their referrals pay, for up to a year. US only for now. See the program →
Related reading
- I Built a Brain Dump Tool That Empties My Head
- How I Track What I Actually Got Done Without Logging It
- n8n Workflow to Turn Asana Tasks Into a Daily Plan
- What a Claude Code Skill Is, and How to Make One
Subscribe if you haven’t already. I’m writing up what the post sweeps actually check next, since that’s the part of this queue I’m in every single morning, and go forth and automate the boring stuff.
