Your task list now
runs itself β like a chief of staff.
It's the same Obsidian task board you already had. What's new: it now watches your work and nudges you on its own β proposes your 2β3 priorities each morning, chases overdue tasks until you clear them, walks you through an end-of-day wrap-up, and turns what you actually shipped into a brag-doc. It does all this from Telegram β now with tappable buttons, not just typed commands β and it can undo anything it touches.
The one-sentence version
A normal task tool is a shelf β things sit there until you look. This one is a chief of staff: it comes to you. The rest of this handbook is just the detail of how, when, and what you can tell it back.
/undo. That's the whole product.
The six parts β what U1 through U6 mean
The system was built as six pieces, labelled U1βU6 ("unit 1" β¦ "unit 6"). You never type those names β they're just how the parts are referred to in the code and the rest of this page. Here's each one in plain English, in the order they matter to you.
It never breaks on you
Everything it does is undoable
/audit shows you what it touched; /undo reverses it. Nothing it does is a one-way door.It keeps you to a focused 2β3
It keeps you on today's priorities, then chases overdue
It writes your brag-doc from what you shipped
/approve) the items that should be marked done. It never marks anything done on its own.It plans your day on the calendar
What it actually does on its own
"Autonomous" sounds scary, so here's the exact line. The system nudges you without being asked β but every change to your real world (a task marked done, a brag item approved, an email) is still yours to confirm. It acts on the things it can take back, and asks about the things it can't.
It does these on its own
- βProposes your 2β3 each morning in Standup, opening with the #1 you set last night (you pick from them).
- βSends the nags at 11 & 4 β today's priorities first (with a Start button), then worst-overdue, until you act.
- βDrafts the brag-doc at 5:30 from your PRs + mail.
- βRuns the guided end-of-day at 6pm β and the standups, evening reflection β on schedule.
- βCatches every error and logs it instead of crashing.
It waits for your word on these
- βMarking a task done β your Done tap, or
/done. - βConfirming the day's wins at end-of-day β nothing's recorded done without your Confirm tap.
- βApproving a brag item to mark it done β tap, or
/approve. - βRescheduling, snoozing, carrying or dropping β tap the button, or
/reschedule,/snooze. - βAnything irreversible β sending a real email, deleting a meeting β stays a draft forever. It never sends.
The rule underneath all of it
Every action is rated by how reversible it is β a "rung". Reversible things (move a line on your board, send a nag) can run automatically. Irreversible things (send mail, delete a real event) are rung 4 and can never auto-run, no matter how sure it is. If a rung is unknown, it defaults to "draft only" β the safe choice.
| Rung | What it means | How it behaves Β· example |
|---|---|---|
| 0 Β· read-only | can't change anything | Always automatic. Read tasks, /audit. |
| 1 Β· draft | reversible, shown not done | Drafted, never run without your "go". A brag narration. |
| 2 Β· with approval | reversible via snapshot | Proposes, waits for confirm / /undo. Mark done. |
| 3 Β· monitored-auto | reversible, undo window open | Runs + tells you, you can still undo. The nag fire. |
| 4 Β· no undo | not reversible | Never automatic. Always needs you. Send email, delete a meeting. |
A day with your chief of staff
This is a normal weekday. Amber dots are things it does on its own; green dots are you replying. You don't have to be at a computer β it all happens in Telegram.
Personal standup posts U3
A gentle "good morning" with the day ahead, in the Standup topic.
It proposes today's 2β3 U3
The work standup opens with the #1 you set last night at end-of-day, then the rest of the must-dos it picked, plus your current load vs. capacity. A deterministic cron now β it lands every weekday, reliably.
Today's 3: Ship payments migration Β· Reply to Brandon Β· Competitor landing page.
Active load 18h / ~25h this week β room for a little more.
You confirm or swap you
Reply in your own words, or just get on with it. Nothing's locked.
First nag β today's priorities first, then overdue U4
It leads with the priorities you committed to this morning that aren't done β tap βΆοΈ Start to actually begin one β then your worst overdue below. Every line is tappable; no IDs to copy. If there are more, it tells you how many.
π― Ship payments migration
[βΆοΈ Start] [Done] [Snooze 1d]π― Reply to Brandon
[βΆοΈ Start] [Done] [Snooze 1d]Worst overdue:
β οΈ Competitor landing page β 19d
[Done] [Snooze 1d] [Reschedule]β οΈ Lifetime outreach β 19d
[Done] [Snooze 1d] [Reschedule]+14 more overdue β
/nag all to see them.You tap to clear one, snooze one you
Tap [Done] and the message updates in place β that nag closes, it won't re-ask about something you just finished. (Prefer typing? /done still works.)
[Done] on payments migration Β· tap [Snooze 1d] on Lifetime outreachIt nags once more β only what's still open U4
Same shape, one more time in the afternoon. Done and snoozed tasks drop off; the next-worst rise to the top. (Cleared all your priorities? It still surfaces your worst overdue β it won't go silent.)
Your brag-doc draft arrives U5
In the Done topic: what you shipped this week, pulled from merged PRs and sent mail, matched to your tasks.
β’ Payments migration (matches "Ship payments migration")
[β
Approve]β’ B2B lifecycle design doc (no task β logged)
Tap
[β
Approve] (or /approve <id>) to mark the matched one done.You approve the real wins you
Tap [β
Approve] and it's marked done on the board β with a snapshot, so you can /undo if it was wrong.
[β
Approve] on payments migrationThe guided end-of-day U3
A real wrap-up in the Done topic, in three taps. First it shows what you got done and you confirm (nothing's recorded done without your tap). Then it walks every still-open task, one message at a time β Done / Carry to tomorrow / Reschedule / Drop β so the board never silently piles up stale work (capped, overdue-first, with a "+N more" line). Last, you set tomorrow's #1 β which tomorrow's standup will open on. This is the daily capture your Friday brag-doc rolls up.
[β
Confirm]β then, one at a time β
Still open: Competitor landing page
[Done] [Carry] [Reschedule] [Drop]+6 more to triage
β finally β
What's tomorrow's #1?
[β Set as #1]Evening reflection β
A reflective prompt in the Journal. Read or ignore β your call.
Check or reverse anything it did you
In the π§ Identity topic, /audit lists every move it made; /undo act_<id> rolls one back.
/audit β /undo act_8f2cWhat fires, and when
These are the scheduled jobs ("crons") that make up the chief of staff. Times are Pacific; the nag, brag and end-of-day jobs are weekday-only. New with this release: the 6pm guided end-of-day, plus the work standup and EOD now run as reliable command crons (the old fragile LLM-relay versions were retired). The nag now fires twice, not three times.
| When | What it does | Topic | Part |
|---|---|---|---|
| MonβFri 6:45 | Personal morning standup | π§ Standup | U3 |
| MonβFri 8:00 | Work standup β opens on last night's #1, proposes today's 2β3 | π§ Standup | U3 |
| MonβFri 9:05 | Standup nudge (single tick) | π§ Standup | U3 |
| MonβFri 11 Β· 16 | Nag β priorities first (Start), then overdue | π§ Standup | U4 |
| MonβFri 17:30 | Brag-doc draft from shipped work | β Done | U5 |
| MonβFri 18:00 | Guided end-of-day β confirm, triage every open task, set tomorrow's #1 | β Done | U3 |
| MonβFri 21:00 | Evening reflection prompt | π Journal | β |
| Sun 12:00 | Weekly review prompt | ποΈ Weekly | β |
NAG_DISPLAY_LIMIT, default 3) and each job's time is one cron edit. Ask and it's a one-line change. Your other crons β finance, sales, personal reminders β live outside this group and aren't touched by any of this.
One Productivity group, a few topics
It all happens inside a single Telegram supergroup β the Productivity group β split into topics. Each command belongs in a specific topic; the agent checks where a command came from before it acts and rejects one typed in the wrong place. (Real group IDs live only in your secrets file β this page uses the topic names.)
/approve, the 6pm guided end-of-day/audit + /undo live here/daily, and read (and tap) the nags here. Weekly (4) β /weekly. Done (5) β /done, /done7d, /ledger, /approve, /nag all, and the guided end-of-day. π§ Identity (1909) β /audit, /undo (owner-only).
[βΆοΈ Start], [Done], [Snooze 1d], [Reschedule], [Carry], [Drop], [β
Confirm], [β Set as #1]. Tap one and the message updates in place; no IDs to copy. Every typed command below still works as a fallback.
Every command
Everything you can type β most of it now has a tap-button shortcut too (the nags, brag-doc and end-of-day carry inline buttons; the typed commands below are the fallback). you type it = a reactive command, checked against where you sent it. it fires (cron) = the agent pushes it on schedule. owner-only = the π§ Identity topic. Click any row for the detail.
/daily β "Today's 3: β¦ (load 18h / ~25h)"/weekly[Done] button on a nag does exactly this with one tap./done migrate-payments[Reschedule] button on a nag or end-of-day card does the same./reschedule write-spec fri[Snooze 1d] button is the one-tap version./snooze deploy-staging 1d/nag all prints the whole overdue list, worst-first β read-only, it sends nothing and changes nothing. This is what the "+N more" pointer links to./nag all β "β¦17 overdue tasks total."/cancel-session; its check-in jobs self-delete, no orphans./body-double write-spec/done24h is the 24-hour version. Read-only β marks nothing done./ledger β draft β /approve <task>[β
Approve] button on the brag-doc draft does it with one tap./approve migrate-payments[βΆοΈ Start] button), then your worst overdue (with "+N more"), all tappable. You don't type this β it runs MonβFri at 11 & 16. Keeps re-firing per task until you act.[β
Confirm] β nothing's recorded done without your tap. (b) Walks every still-open task one message at a time for a one-tap disposition β [Done] / [Carry] / [Reschedule] / [Drop] β capped, overdue-first, with a "+N more" line. (c) Asks you to [β Set as #1] for tomorrow, which the morning standup opens on. It's the canonical daily capture the brag-doc rolls up. You don't type this β it runs MonβFri at 18:00./audit act_<id> shows the full record and the before-snapshot./audit Β· /audit act_8f2c/undo act_8f2cWhy it's safe to let it run
The whole thing rests on one promise: it must never break your trust. Four guarantees enforce that.
1 Β· No raw errors, ever
Every script runs inside a wrapper that catches failures. You get a calm one-liner; the real error goes to a private log. No traceback, no red wall, no leaked file paths.
# instead of /daily β Traceback β¦ ModuleNotFoundError # you get /daily β β οΈ Standup is unavailable right now. Logged for review. Retry: /daily
2 Β· Undo + audit, always
Every autonomous act is logged with a snapshot taken right before it writes. /audit shows what it touched; /undo reverses it inside its window. Nothing is a one-way door.
3 Β· It can't message the wrong place
Before any push, the destination is proven and locked β that proven target is the only place the message can go. A nag meant for your Productivity group can never leak into the Work group. Destinations come from your secrets, never hardcoded.
4 Β· It checks itself first
Before a job runs, a preflight checks its environment and, if something's wrong, says so in plain language and stops β instead of half-running. It writes only its own status file, never your live notes.
It's live β here's how it runs
The chief of staff is deployed and running on the production gateway (the task-tracker skill, repo kesslerio/task-tracker-openclaw-skill). Five of the six parts are on; U6 (calendar) is dormant until a focus calendar is connected. You don't have to do anything to keep it running β this section is for when you want to change it.
STANDUP_CALENDARS and a dedicated focus calendar before it switches on.
Change how often / how much it nags
The nag's top-list size and times are each one setting. No redeploy for the count β it's read live.
# show the top 5 instead of 3 (in secrets.conf) NAG_DISPLAY_LIMIT=5 # change when the nag fires (e.g. add an afternoon slot back) openclaw cron edit <u4-id> --cron "0 11,14,16 * * 1-5"
Pause or resume a part
# pause the nag for a while openclaw cron disable <u4-id> # turn it back on openclaw cron enable <u4-id>
Update the skill
The live gateway runs a copy of the skill that's synced from origin/main. To ship a change: merge to main, pull the checkout, restart the gateway. Never edit the running copy by hand β a restart would overwrite it.
git -C /home/art/projects/skills/shared/task-tracker pull origin main systemctl --user restart alphaclaw.service
What's still coming
| Not yet on | Switches on when |
|---|---|
| U6 β calendar pre-brief, debrief, focus blocks | A dedicated focus Google calendar is connected and STANDUP_CALENDARS is set. Until then it degrades silently. |
| A dedicated personal-tasks lane | A near-term release β splitting personal commitments out from the work board so each gets its own standup and nag rhythm. |
| Standup veto / approve buttons | A near-term release β tap to accept or veto the proposed 2β3 right in the standup, the same way nags and end-of-day already work. |
When something's off
A command returned "unavailable"
That's the safety wrapper catching a failed self-check. The notice names what's wrong in plain words β fix that and retry. The raw error is in the private log, never in chat.
log
task-tracker-errors.jsonl in the skill's state dir.
"What did it just do?"
Run /audit in the π§ Identity topic β every act with its undo window. Drill in with /audit act_<id>.
It did the wrong thing
/undo act_<id> in π§ Identity, inside the window (4h for nags, 7 days for board edits). Past the window? Fix it by hand and note it in the Journal.
The nag is too loud / too quiet
Too much: lower NAG_DISPLAY_LIMIT or drop the 4pm slot. Too quiet: it's weekday-only, fires 11am & 4pm β it leads with today's priorities, then your worst overdue, and won't go silent while anything's open.
A nag fired but nothing arrived
Expected if a destination env var is unset: the push is blocked and the task stays open β it never clears silently. Check the Productivity group + topic settings, then retry.
The brag-doc is empty
It only finds what's connected β merged PRs via gh, mail via the mail tool. Nothing shipped in the window means an honestly-empty draft, not an error.
<work-group> placeholders for the same reason.
Quick reference
| If⦠| Do this |
|---|---|
| A command says "unavailable" | Read the named check, fix it, retry. |
| Unsure what it changed | /audit in π§ Identity (1909). |
| Need to reverse something | /undo act_<id> in π§ Identity, inside the window. |
| Nag re-asks after you finished | You used something other than the [Done] button or /done β only those close the nag in the same turn. |
| Want the full overdue list | /nag all β read-only, shows everything. |
| "Always at cap" on day one | The cap only blocks new adds; it never cuts what you already have. |