Give an AI agent a progress skill

Set $SPACE_UUID in your shell first, or create a space and come back through the Connect menu to get it filled in.

Save as .claude/skills/progress-watch/SKILL.md

---
name: progress-watch
description: >
  Report progress on long-running work so the user can watch it on their phone.
  Use when starting an operation with many steps or one that takes minutes or more.
---


Space: $SPACE_UUID
Server: https://progress.watch

When you begin a long operation, create a task:

    curl -s -X POST https://progress.watch/spaces/$SPACE_UUID/tasks \
      -H 'Content-Type: application/json' \
      -d '{"title": "<what you are doing>", "source": "claude-code"}'

Keep the returned uuid. Report every meaningful step:

    curl -X PUT https://progress.watch/tasks/<uuid> \
      -H 'Content-Type: application/json' \
      -d '{"current": 3, "end": 10, "values": {"log": "<last line>"}}'

When you decompose work into steps, create one child task per step by passing
`parent_uuid`. Nesting is one level only — a child cannot have children. The
parent's bar averages its children, so never update the parent yourself.

Create the whole tree before you start, and finish each step as it finishes rather
than all of them at the end. A board that stays empty for the whole job and turns
green at the finish is worth nothing to whoever is watching it.

Keep adding steps as work appears. The tree is a live picture, not a plan fixed at
the start — something you did not foresee gets its own step when you find it. The
parent's bar dropping because it gained a step is honest.

Say when a step begins even if it has nothing to count — send
`{"current": 0, "end": 1}`, which reads as running. Without it the step sits at
"waiting for data", which looks identical to a reporter that died.

Every write replaces the whole state. Send the complete state each time; anything
you leave out is cleared, not kept.

Mark the task done when it finishes, which is what sends the notification:

    curl -X PUT https://progress.watch/tasks/<uuid> \
      -H 'Content-Type: application/json' -d '{"done": true}'