You've got recurring things Claude should do for you. Check a list. Draft a weekly summary. Run through a checklist. But each one ends up as its own prompt, its own custom instruction, its own thing to maintain.
There's a simpler pattern: keep all your scheduled tasks as rows in a single Stash collection. When to run, does it repeat, what to do, how to report back — all in one place. Claude checks the list. You don't manage a task-per-task prompt ever again.
This is the "scheduler in one list" pattern. Here's how to set it up.
The natural way people try to automate Claude tasks: add an instruction for each one. "At the start of each week, remind me to update my OKRs." "When I say good morning, run through my tasks list." "Every Friday, summarise what I worked on."
It works. Until you have six of them. Custom instructions fill up fast — they cap out at a few hundred characters. Then you start forgetting which ones exist. Then you forget to update them when the task changes.
The other natural move: a separate task manager (Todoist, Notion, whatever). But now Claude and your task manager are two separate systems. Claude doesn't know what's in your task list unless you paste it in.
The Stash pattern collapses both: the task list lives in Stash, Claude reads it with a single tool call, and one line in your custom instructions sets up the whole thing.
A Stash collection is just key-value rows with full-text search. You define your own schema by being consistent about what you put in the text field. For a scheduler, something like this works well:
task: weekly-okr-review schedule: every Monday next_run: 2026-06-09 repeat: yes action: search my OKRs collection and ask me one focused question about each one report: bullet list of answers, then prompt to update anything stale
Add a row per task. The key is the task name. The text is everything else — schedule, repeat rule, what to do, how to report.
To add your first scheduled task, tell Claude:
add to my tasks collection: key = "weekly-okr-review" text = "schedule: every Monday | next_run: 2026-06-09 | repeat: yes | action: search my OKRs collection and ask one focused question about each | report: bullet list, then flag anything stale"
Once your tasks are in Stash, you need Claude to check them. The simplest trigger:
At the start of each conversation, call context() to load my standing context. Then search(collection="tasks", query="schedule") and run any task whose next_run is today or earlier.
That's it. Every new conversation, Claude loads your context and scans your task list. If anything is due, it runs it.
Why this works without a cron job: You're not automating Claude to fire on a timer — you're automating what Claude does when you start a conversation. For personal productivity tasks, that's usually fine. The task runs when it's relevant, not at 03:00 when you're asleep.
Once a task runs, Claude should update the next_run field. Tell it to:
After running a task from my tasks collection, update the row: - set next_run to the next scheduled date based on the repeat rule - add a note field: "last_run: [today's date]"
Or, if you want tighter control, handle it manually: after the task runs, say "mark that as done until next Monday" and Claude updates the row. One sentence, no dashboard.
key = "weekly-summary" text = "schedule: every Friday | repeat: yes | action: search my notes collection for entries this week, then draft a 5-bullet summary of what I worked on | report: paste draft directly, ask me to edit"
key = "okr-checkin" text = "schedule: every Monday | repeat: yes | action: search my OKRs collection, show me each one, ask for a 1-10 progress score | report: table of OKR / score / any note I added"
key = "follow-up-check" text = "schedule: every Tuesday | repeat: yes | action: search my contacts collection where follow_up_date is this week | report: list of names with follow-up reason, ask me which to action today"
key = "prep-q3-planning" text = "schedule: 2026-07-28 | repeat: no | action: search my goals and okrs collections, draft an agenda for a 60-minute planning session | report: paste agenda"
Non-repeating tasks run once, then you (or Claude) can delete the row or set repeat: no, done: yes so it gets filtered out of future checks.
| Approach | Setup time | Claude access | Maintenance |
|---|---|---|---|
| Custom instructions per task | 30 sec each | Always on | Hits char limit fast |
| Notion/Todoist + Claude MCP | 10–20 min | Via connector | Two systems to keep in sync |
| Stash tasks collection | 2 min total | One search call | Claude updates the rows |
The Stash pattern isn't for running server-side cron jobs at scale — it's for personal productivity tasks that run when you're working with Claude anyway. If you need something that runs at 03:00 every night without you, you need actual cron. But for the "remind me, summarise, check in" class of tasks, this is lighter and more maintainable.
https://app.stashlite.com/mcp). Sign in with Google when prompted. Takes 60 seconds.Stash is free to start — 2,500 records, 50 queries/month, no card required.
Add to Claude →Or read how it works: MCP connectors explained