Make one by texting it
Say when, then what:
every morning at 7, audit deps and open a PR if there's a CVE
every weekday at 9am, summarize yesterday's merged PRs
every friday at 5pm, draft what shipped this week
every hour, check the webhook retry queue
on the 1st of every month at 7am, pull last month's invoices
The thread replies with the schedule it made and its next run. Name an agent to pin it ("every night at 11, have codex ..."); otherwise it uses your default agent. A raw cron expression works too: /schedule add "0 7 * * 1-5" run the tests.
Manage them
/schedule list, with next run times
/schedule add <text>
/schedule pause <name or id>
/schedule resume <name or id>
/schedule delete <name or id>
/schedule run <name or id> run it now
Plain English works for the common ones: "pause the dependency audit". The terminal has the same verbs: tweetybird schedule list, add, pause, resume, delete, run.
How a scheduled run works
- It runs on your Mac, in the schedule's repo, through Claude Code or Codex, with that day's shared memory. Scheduled runs use the repo's policy; anything that needs a tap buzzes your phone and waits.
- The result is texted to you. Prompts written to be quiet answer "NOTHING TO REPORT" when there is nothing worth a text, and you get no message.
- Files the run produces (a screenshot, a PDF, a report) arrive as attachments.
- Runs go one at a time, so a pile-up after a long sleep does not start five agents at once.
Catch-up on wake
If the Mac was asleep or off when a schedule was due, the most recent missed run happens once when it wakes, marked as a catch-up. Missed runs are never silently skipped, and a week of sleep does not replay seven times. A Mac mini that never sleeps is the easy answer for schedules that must run on time; see Two Macs.
The Night Shift pack
Ten pre-written, tested scheduled prompts. Install them one at a time or all at once:
/schedule pack list the pack, tap to install
tweetybird schedule pack install dependency-audit
tweetybird schedule pack install all
| Key | When | What it does |
|---|---|---|
dependency-audit | Daily 7:00 AM | Audits every dependency, opens a PR for any real CVE, leaves intentional pins alone. |
webhook-watch | Hourly | Checks the Stripe webhook retry queue. Texts only if something is stuck. |
night-shift | Nightly 11:00 PM | Picks up the highest-priority open thread from today and pushes a PR. |
morning-qa | Daily 6:30 AM | Clicks through the real signup flow in a real browser. Screenshot only if it broke. |
ship-summary | Friday 5:00 PM | Drafts what shipped this week for X and LinkedIn, from the commits. |
invoice-pull | Monthly, the 1st, 7:00 AM | Pulls invoices from Stripe, AWS, Vercel, and Supabase in your Chrome and texts the PDFs. |
flaky-test-hunter | Monday 6:00 AM | Finds tests that failed then passed on retry and fixes the one it can. |
daily-digest | Daily 6:00 PM | What both agents decided today, in one text. |
backup-verify | Sunday 3:00 AM | Checks the backup ran and actually restores. |
cross-review | Every 15 minutes | Codex reviews what Claude wrote, and the other way round, when a PR opens. |
Every pack prompt respects decisions already in memory, never pushes to main or deploys, and opens a PR when a change is warranted. More on the Night Shift page.