Focus
Your day in one place. What today is for, what slipped, the week and month, the roadmap in flight, who is waiting on you, your standup, and where every session left off.
A long task board is a backlog, not a plan. The focus skill turns it into a view you can glance at in the morning, in standup, or when there's too much going on: up to three things for today, what carried over, what the week and month are for, the roadmap milestones in flight, and the pull requests and reviews waiting on you. The same skill writes your standup and keeps track of your sessions. Ask in plain words ("what should I work on?", "plan my day", "I'm overwhelmed", "standup is coming up", "where am I") or run it as /agent-kevin:focus in Claude Code or $focus in Codex.
The view is derived. Tasks, goals, and roadmaps are its source of truth, and it re-renders on every task change, so there is nothing to save.
Plans date themselves
Each task can carry a horizon: the period it is planned for, stored as the period itself.
horizon | Lane |
|---|---|
2026-10-05 (a day) | Today on that day; carried over once it has passed |
2026-W41 (an ISO week) | This week; carried over after it |
2026-10 (a month) | This month; carried over after it |
later | Later |
| empty | Not planned |
Say today, week, next-week, month, or later and the agent stores the period. Because the date is in the plan, nothing has to roll over at midnight: once its period ends, the task simply reads as carried over. Week and month progress count everything planned inside the period, including work since pulled into today and work sync has already archived.
A task due today or earlier that nobody planned shows up under Today in its own block, rather than hiding in a collapsed lane.
The dashboard for everything, a page per project
| You run | Where it shows | Holds |
|---|---|---|
focus | the dashboard's Today → Focus tab (dashboard.html#today/focus) | every project, plus today's, the week's and the month's goals |
focus <project> | projects/<project>/focus.html | that project's tasks only |
Focus is the tab the dashboard opens on, and its numbers lead the Today page. See Today. A project's page is linked from its project card; it exists once you first run focus for that project, and from then on every rebuild keeps it current.
The roadmap feeds it
The home view reads your north-star roadmap.html; a project page reads its own roadmap, plus the north-star milestones that name one of the project's task ids. The Roadmap section lists the milestones that matter now: slipped ones, whose period ended with items open, then the ones in flight, with an item in progress or a period covering today. Each shows how far along it is, the tasks its text names and where they stand, and a flag when no open task is behind it, which is the gap focus plan offers to fill.
This works because roadmaps keep their data as JSON inside the page. See Roadmaps are data.
The queue
The queue is who is waiting on you, pulled when you run focus and shown with the time it was pulled:
- My pull requests, with review state, mergeability, and age, from the GitHub pack.
- Reviews I owe, and how long each has waited.
- Replies I owe, when a Slack server is connected: mentions that asked you something and have no answer from you yet.
A source that can't be read says so once, under its group, rather than showing an empty, reassuring list; the note never counts as an item. On a project page the queue narrows to the repo (and channels) the project's README names.
Playbooks
you > what should I work on today?
you > /agent-kevin:focus plan
you > I'm overwhelmed, help me get organized
you > /agent-kevin:focus standup 48| Playbook | Ask | You get |
|---|---|---|
| refresh | focus, focus <project> | The queue pulled fresh, the view re-rendered, and a short card |
| add | "take this on", focus add <text or link> | A line of text, a pasted list, a GitHub issue or pull request link, or a Slack link turned into a task with a horizon, after one confirming question. It checks the board first so the same work doesn't become two tasks |
| plan | "plan my day", focus plan | Today's three, picked from carried-over work, what's due, sessions you already started, replies owed, tasks behind the roadmap's milestones, and the week's P0 and P1 tasks, each with its reason. Then each carried item is settled (this week, later, drop, or keep), and a task is offered for any milestone nothing on the board moves forward |
| organize | "I'm overwhelmed", "get organized", focus organize | Everything on your mind sorted into tasks and notes, questions only about the gaps (overdue work, unset week goals, dates), today cut to three, a first move, and what's parked. See When there's too much in your head |
| standup | "standup is coming up", focus standup 48 | Did / next / blocked from git, pull requests, sessions, and the board, as a card to glance at while you talk, with the full update saved as a report |
| where-am-i | "where am I", focus where-am-i | Every session from the last 24 hours, where it left off, and its resume command |
| triage | "which session needs me", focus triage | The sessions waiting on you, ranked, and the one to resume |
| checkpoint | "checkpoint this session" | A short pickup note for the session you're in |
| backfill | first refresh, Slack connected | The priorities already posted in Slack, triaged into tasks you confirm |
focus help lists them. Nothing is created or moved without your answer, and focus never comments on, reviews, or merges anything.
When there's too much in your head
plan treats the board as the whole picture. On an overwhelmed day that's rarely true: the real load is what's in your head and not on the board yet, and the board is too noisy to trust. organize starts with your head and gets to the board second.
-
It reads the board first, silently: overdue tasks, unset week goals, a slipped milestone with no task behind it. None of it is shown yet.
-
It asks what's on your mind in plain chat: dump all of it, unsorted, and say whether the week is light, normal, or heavy.
-
It sorts the dump against your existing tasks, so nothing becomes a duplicate:
Bucket What happens Tracked Already a task; it gets a horizon if it has none New task Drafted and placed, the way adddoes itWaiting on someone A task only when you have to chase it Worry or note Not actionable now; captured to the inbox -
It asks only about the gaps it found, most urgent first: a new date for an overdue task, the week's goals when none are set (one on a heavy week, up to three on a light one), a task for a milestone nothing moves.
-
It cuts today to three with
plan's ranking, except that something you raised outranks a board item in the same tier, because it's what's actually on your mind. A heavy week gets fewer than three.
Worries and notes go to the inbox in one capture, so the next compile keeps them and you don't have to. The run is saved as a plans report, and the reply is a card:
🧹 Organized · Thu 1 Oct · heavy week
FIRST MOVE Reply to the vendor about the renewal quote
TODAY 1 Renewal quote reply (ac-014) 2 Fix the export timeout (ac-021)
WEEK Ship the export fix
PARKED Onboarding revamp (later) · Conference talk (not this week)
CAPTURED 3 new tasks · 5 already tracked · 4 notes to the inboxParked lists what this run moved to later, dropped, or left out of the week, so what isn't happening is written down too. Questions stop after three rounds. When the board has a large stale pile, organize offers to settle it another time rather than piling a second job onto a bad day.
The week
Setting and scoring the week belongs to the goals skill's week playbook, since goals are outcomes and focus is tasks. On Monday, goals week proposes two or three week goals, starting from the roadmap's slipped and in-flight milestones, and applies the ones you pick in one step: each goal's task is planned for the week, and the Weekly Goals block in projects/TASKS.md is rewritten to match, so the dashboard's Goals tab and the week lane never disagree. On Friday it scores every task planned for the week (done, partial, or missed, with a reason for each miss) and asks where the open ones go. The standup playbook runs it on those two days. plan also reads today's goals from goals day and ranks the tasks that serve them first. See Daily rhythm.
Standup and sessions
The standup playbook builds what you did, what's next, and what's blocked, deriving all three rather than asking: Next comes from Today, and Did from what landed, what the sessions did, and the tasks you closed. Its report keeps the standup name, so the next run can tell what a skipped day left unsaid.
The chat reply is a glance card, meant to be read mid-sentence when standup reaches you: section headers with counts, one line per item (handle, a short cue, a one-glyph state), and a rule between what happened and what's next.
🍌 STANDUP · Tue Jan 06 · last 24h
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚢 SHIPPED · 2
#101 retry flaky webhook sends ✓ verified
#102 cap the export page size ● merged
🔧 IN FLIGHT · 1
#105 signup flow test pass ◌ needs review
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
👉 NEXT
1 #106 search demo tomorrow
⏳ WAITING ON
Alex #103 repro steps today✓ is verified or done, ● merged but unverified, ◌ waiting on someone, ✗ failed. The full update, with its evidence below the line, is the saved report you open when someone asks a follow-up. The card opens with your agent's own emoji. With Slack connected, standup checks what you already posted so you don't announce it twice.
where-am-i is the session radar. It writes a report that the dashboard's Sessions page shows and that plan reads, so work you already started ranks above anything new. The dashboard and sync run it to keep the radar fresh. triage ranks the sessions that need you, and checkpoint leaves a pickup note the session capture files into knowledge. To find a past session by what it worked on rather than when, use find-session.
The page is data too
Every focus view carries what it shows as JSON, in a <script type="application/json" id="focus-data"> block, the same shape the focus_write tool returns: the dashboard's for the home view, each project page's for its project. Another skill, a script, or another agent can read it without rendering anything. Task paths inside it are relative to the home, so the data never embeds a machine path.
Roadmaps are data
A roadmap page keeps its content in one JSON block, <script type="application/json" id="roadmap-data">, which the page parses and renders. Periods can carry machine dates (start and end, as a day, an ISO week, or a month) next to their human labels, and a milestone that names a task id in its text is linked to that task. The roadmap skill writes both, and checks the page after every edit.
Roadmaps made before this format move over in the 0.5.3 upgrade. Each page is rewritten beside itself, both versions are rendered, and the new one replaces the old only when the rendered page is identical, down to the pixel, and the original hasn't changed meanwhile; otherwise the page is left exactly as it was and keeps working. A migrated roadmap has no dates until you ask roadmap to add them (it proposes each one for you to confirm), so until then focus sees only its in-progress items. See Upgrades.
Upgrading from 0.5
Version 0.6.0 folds the standup and where-am-i skills into focus as playbooks: ask the same way, or run focus standup and focus where-am-i. The home focus.html moves into the dashboard, and the upgrade removes the generated file; a hand-made file at that path is left alone. Their permission grants are no longer needed, and the upgrade offers to drop them.
Second-model review
Put a different model on anything you made, a proposal, a plan, a document, or code. It documents what it finds on one dossier; your agent verifies every finding, fixes the real ones, and hands back the next round.
Tax and books
Know what tax you owe at every moment, for your companies and your personal return. Every obligation becomes a dated task, receipts land in one ledger, the month closes for your accountant, and the estimate is planned before the penalty, not after.