Pushes progress on long-running or delegated work so the human never has to poll. It publishes milestones with ETAs and the evidence each needs, sends reports only when something meaningful changed, labels every claim with an evidence level, logs ETA accuracy, watches time since last merge, and audits "done" against evidence before declaring it. Use for any delegated, multi-hour or overnight run, when a brief sets a report contract, or when the user asks "status?", "ETA?", "where are we?", "what happened overnight?", "hour by hour" or "are you done?".
npx skills add https://github.com/github/lever --skill progress-contract
Every "status?" a human types is a polling loop they are running by hand. This skill turns progress into a push. At kickoff it publishes milestones with ETAs and the evidence that will prove each one. After that it reports only when something meaningful changed, in a fixed shape (templates/status-digest.md). It holds itself to its own forecasts, and it watches for stalls. It ends with a done-audit that checks every claimed-done item against evidence.
brief skill's report contract invokes this skill.Do not use it for short interactive tasks that the user is watching live.
Use the weakest level that is true. Never round up.
| Level | Meaning | Proof to cite |
|---|---|---|
| claimed | The agent says it's done | Nothing yet. Say "claimed". |
| pushed | Code is on a remote branch or PR | Branch or PR link |
| green | Required checks pass on the exact head SHA | Check-run link + SHA |
| merged | It is on the default branch | Merge commit link |
| deployed | It is running where users are | Release or deploy link + version |
| measured | The outcome metric moved on real traffic | metric: x → y (Δz%), n, link |
A status record counts only after you have read it back. Write the artifact, fetch it, then report. Key artifacts by <lane>/<pr>/<head-sha>, so a re-run on the same head is a no-op by construction.
/lever status with no argsList what lever is running for the user: is:open label:lever assignee:@me in this repo and every repo with a dial in ~/.copilot/lever.yml. Print lever:needs-you items first, each with its one question and a recommended answer. Then one line per issue: outcome, lanes done/total, weakest evidence level, last check, runner. A check older than 2 hours, or a workflow run waiting for approval, is flagged as stalled. Given #issue, print that issue's digest. See docs/tracking.md.
/lever status is read-only. It never merges, rekicks, refills, edits the issue or schedules anything. For a stall, it prints the command that acts on it, usually /lever deliver #<issue>.
When a run is tracked on an issue, the digest goes in the issue's ## Status section, edited in place. Comment only for a milestone, a needs-you question (add the lever:needs-you label) or the final done-audit.
status.timezone in .github/lever.yml, otherwise ask once), the evidence level that counts as done, and a confidence. If there is a deadline, add a checkpoint projection: what will be true at each checkpoint up to the deadline ("hour by hour until midnight").A scheduled wake with no changes produces no message. Never let status writing replace delivery.
metric: x → y (Δz%) and p50/p90 where relevant. Then give:Every human-only item is surfaced once. Don't repeat it unless something about it changed.
deliver run, that's its sweep (autonomous-delivery step 4), which:pr-shepherd, which lands them if autonomy-dial's may_merge allows it;Then report what it did. Don't report an alarm and wait. A bare /lever status only reports the stall and the command to fix it.
Report the audit table as the final digest, including the ETA accuracy summary.
| Dial | Default | Options |
|---|---|---|
| Cadence | Event-driven, plus a 30-min backstop sweep | 15 min; hourly; milestones only; daily digest |
| Destination | The delegator's chat or session | Pinned issue; PR comment; discussion; morning brief automation |
| Silence threshold | The change list in step 3 | Always report on schedule; headline-only heartbeat |
| Timezone and labels | Operator's timezone; milestone names | UTC; include PR numbers |
| Planning horizon | Next milestone + end of run | Next 2 h; overnight; hour by hour to a deadline |
| Slip tolerance | 25% of remaining time, or one checkpoint | Any minutes value |
| Watchdog metric | Time since last merge | Time since last evidence advance; since last release |
| Stall threshold | 2 h during active hours, report only | 45 min with auto-rekick; off |
| Stuck threshold | 2 h with no progress on one outcome → re-plan | 30 min – 8 h |
| Done-audit confidence threshold | 80 | 50–100; require a second reviewer always |
| Verbosity | Headline + table + links | Headline only; full detail |
templates/status-digest.md, sent only when something changed.automations/, on a daily interval trigger.brief.Take github/progress-contract from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.