# Todos, reminders and time (https://docs.vitrinka.ai/dev/cli/me)



## Todos that ripen [#todos]

A todo is a task of type `todo` in the checkout's project, and what makes one useful is its moment — the thing that ripens it. Ripeness is the server's call, never the client's: one evaluator answers the SessionStart hook, `vitrinka me schedule ripe`, the MCP `ripe_todos` tool and your desk, so a todo fires the same way wherever you look.

```bash
vitrinka me todo add "Drop the legacy checkout flag" --when "pr 472 merged"
vitrinka me todo add "Rotate the staging keys" --when "deployed prod"
vitrinka me todo add "Recheck the coupon rules" --when "path internal/billing/**"
vitrinka me todo add "Write the upgrade note" --milestone "v2 beta"
vitrinka me todo list --here --compact
vitrinka me todo done 512
```

Pick the smallest moment that fits:

| Moment                              | Ripens when                                                                                                                            |
| ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `--when "pr 472 merged"`            | That pull request merges, as the GitHub App reports it; `closed` fires on a close without a merge too.                                 |
| `--when "release cut"`              | A release is cut after the todo was filed; `release next` while a next release is open.                                                |
| `--when "deployed prod"`            | A deploy to that environment is recorded — optionally of one sha — with `vitrinka project deploy-mark`. Merges never count as deploys. |
| `--when "path internal/billing/**"` | A session edits a matching file; the PreToolUse hook announces it in that session.                                                     |
| `--when "task 423"`                 | Task 423 is picked up — a session on its `vt-423` branch.                                                                              |
| `--when "after 331"`                | Task 331 is done.                                                                                                                      |
| `--milestone <name>`                | The milestone is reached.                                                                                                              |
| `--due YYYY-MM-DD`                  | The day comes.                                                                                                                         |
| `--trigger "<text>"`                | Never on its own: prose an agent judges against the work in hand.                                                                      |

Text that does not parse as a condition stays prose. `vitrinka me todo backfill` proposes typed conditions for a project's prose todos — each lands as a proposal for a human verdict, nothing is rewritten silently. `--context-file` attaches a companion note a session weeks later reads before working the item (the list marks it `[ctx]`); `done` completes a todo, `drop` abandons it.

## Reminders [#schedule]

A reminder is a todo at a clock time. It ripens `--lead` before the time (2 hours by default) and can recur with `--every`.

```bash
vitrinka me schedule add "Send the sprint notes" --at "fri 09:00" --every 1w
vitrinka me schedule add "Check the canary" --in 30m
vitrinka me schedule list
vitrinka me schedule skip 530
vitrinka me schedule end 530
```

`list` buckets open reminders into overdue, today, this week and later; `move` reschedules one; `me todo done` on a recurring reminder records the completion and rolls it to its next occurrence, `skip` steps over one occurrence and `end` stops the series.

## Milestones [#milestones]

A milestone is a named point several todos wait on. Reaching it ripens every todo that waits on it — they are unblocked, not done.

```bash
vitrinka me todo milestone add "v2 beta" --due 2026-10-15
vitrinka me todo milestone reach "v2 beta"
vitrinka me todo milestone unreach "v2 beta"   # undo a mistake
```

Reuse the exact name `milestone list` prints: a near-spelling creates a second milestone.

## Where todos surface [#surface]

* **At a session start** — the SessionStart hook `vitrinka setup` installs prints only the todos that fired for this repository, so a session begins with what is due and nothing else — [hooks](/dev/cli/setup#hooks).
* **While you edit** — a `path` todo is announced the first time the session touches a matching file.
* **To an agent** — `ripe_todos` and `complete_todo` over MCP, and the `/vitrinka:me` skill of the Me module (`/vitrinka:me [add|list|done|drop|remind|milestone]`), which you invoke by name.
* **To you** — your day in the app — [your day](/use/day).

## Your agenda [#agenda]

The agenda is your own plan of days: existing tasks placed on a day, all-day or at a time. It never files a task, and a tick closes the item for you without moving the task's state, so review states and gates stay intact (a `todo` completes through its own door).

```bash
vitrinka me agenda                                  # today
vitrinka me agenda week --project shop
vitrinka me agenda add 4742 --tomorrow --at 09:30 --for 90m
vitrinka me agenda move 118 --to fri --all-day
vitrinka me agenda done 118
vitrinka me agenda rm 118
```

`add` takes a task id, `<workspace>/<id>`, key or url and plans it today unless `--tomorrow` or `--on <day>` names another day; planning a task already on your agenda moves its one open item. `--at` starts a block on the quarter hour and `--for` sets its length (1 hour by default). A listing prints each item's number under ITEM — the argument `done`, `move` and `rm` take; `rm` takes the item off its day and leaves the task alone. An unfinished item from an earlier day shows on today marked `from <day>` until you tick or move it, and an item whose task was done or cancelled shows ticked on its own day. Days resolve in this machine's time zone, else your timezone preference. `--people` reads other people's days in the workspace and `--person` plans on someone else's agenda (workspace admins). The SessionStart hook prints this project's Today beside the todos that fired — [every flag](/reference/cli#me-agenda).

## Work time [#time]

`me time` records how long people and agents actually worked, without a timer. It is opt-in per machine:

```bash
vitrinka me time enable --project shop
vitrinka me time service install   # macOS: keep capture running from login
vitrinka me time status
vitrinka me time disable
```

`enable` records your consent and registers the agent hooks in Claude Code and Codex (trust Codex's once with `/hooks`); agent sessions then report their own activity — prompts, tool calls, stops — as it happens. Human time comes from a native sampler that stores the foreground application and idle intervals only — window titles are matched on the machine against the repositories you opted in and discarded, and activity it cannot place stays unassigned. `--human=false` keeps agent time alone; `--exclude-application` names apps never recorded. `capture` runs the collector until stopped (`service install` does that at login); `disable` pauses at once and keeps what is queued without uploading it. What was recorded shows on your day in the app — [work time](/use/day#time).

## Diary and brief [#brief]

```bash
vitrinka me brief
vitrinka me diary promote 8812 --project shop
```

`me brief` prints the project brief as it looks from your seat — now, next, blocked, what changed, who holds what, and Eve's suggestions — [the brief](/pm/brief). `me diary promote` turns a recorded meeting on your diary into a meeting task in a project, with the audio and transcript attached.
