---
name: progress-tracker
description: Use when the user asks for a progress tracker, build tracker, or live progress page for the work in this session, or invokes /progress-tracker. Creates this session's own live tracker artifact (or updates the one this session already made) and keeps its steps, active task and log current as implementation proceeds.
---
# Progress Tracker
A live artifact the user watches (often from their phone) while you build. The page is
static; all content lives in the artifact's `db`, so updates are `ArtifactData` writes,
never republishes.
## One tracker per session
- **This session already published a tracker** → keep updating that one (same URL).
- **Otherwise** → create a **new** tracker from `template.html`.
- **Never reuse a tracker from another session or an earlier conversation** (including
ones named in project memories) unless the user explicitly says to and gives or names it.
If they do, `Artifact read` it first, then reset its data (see Reset).
## Create
1. Load the `artifact-capabilities` skill (required before passing `capabilities`).
2. Copy the `template.html` next to this SKILL.md (`${CLAUDE_SKILL_DIR}/template.html`) to the session scratchpad as
`progress-tracker.html`. Replace `__STAGE__` (small eyebrow, e.g. "Acme App · Checkout
Flow") and `__PHASE__` (heading, e.g. "Build"), and set `
` to a 2–4 word name
for this build.
3. Publish: `Artifact` with that `file_path`, `capabilities: {"db": {}}`, `icon: "checklist"`,
and a one-sentence `description`. Republishing the same path later updates the same URL.
4. Seed the data in one `ArtifactData` batch (`meta/current` + every `steps/` as `todo`
+ a first log line).
5. Give the user the link.
## Data shape
| Doc | Fields |
|---|---|
| `meta/current` | `stage`, `phase`, `now` (one-line headline of what's happening), `ticket` (optional, see below), `updatedAt` (ms) |
| `steps/` | `order` (int), `title`, `status` (`todo`\|`active`\|`review`\|`done`\|`blocked`), `note`, `model` (e.g. "Sonnet 5.5"), `live` (what the active step is doing right now: "Writing tests", "Review round 2"), `liveAt` (ms), `sub` (optional, see below), `updatedAt` (ms) |
| `log/` | `at` (ms), `text` |
**Ticket** — `meta/current.ticket = {key, url, title}`, e.g.
`{key: "PROJ-142", url: "https://…/browse/PROJ-142", title: "Add order status page"}`.
Set it whenever the work in this session traces to a ticket (Jira, GitHub issue/PR, Linear…)
named in the conversation, branch name, plan, or commits; omit it if there is none — never
invent one. It renders as a link chip under the eyebrow; `url` must be `http(s)`.
**Sub-progress** — `steps/.sub = {done, total, label}` when a step breaks into smaller
pieces (review follow-ups, fix rounds, files to migrate). `done` = finished count, `label` is a
plural noun ("small follow-ups"). The active step's card shows pips and "On 2 of 3 small
follow-ups"; the step row shows `2/3`. Pair it with `live`, e.g. `live: "Approved — working
through review nits"`, `sub: {done: 0, total: 3, label: "small follow-ups"}`. Bump `done` as each
piece lands; drop `sub` (set to `null`) once the step is `done` if the count no longer matters.
Step ids are zero-padded and ordered (`s00`, `s01`, …); log ids ascend (`l0001`, `l0002`, …).
Timestamps are epoch milliseconds (`date +%s000`).
## Updating
- Track **implementation steps only** (plan tasks), not interviewing or planning.
- When a step starts, enters review, finishes, or blocks: update its `status`/`note`/`updatedAt`,
update `meta/current.now`, and add a log line. Batch these in one `ArtifactData` call.
- At each sub-step of the active step (implementing, testing, reviewing, fix round N), update
`live` and `liveAt`. When the remaining work is a known count of pieces, set or bump `sub`.
- If a ticket surfaces mid-session (e.g. a PR or issue gets created), add it to `meta/current.ticket`.
- Only one step should be `active` at a time unless work is genuinely parallel.
- Writes to existing docs need `if_version`; on a version conflict, re-read and retry.
## Reset (only when the user explicitly asks to reuse an existing tracker)
Delete the old `steps/*` and `log/*` docs, then seed the new build as in Create step 4.
If its `` doesn't fit the new build, republish its page with an updated title.