Track Jira sprint progress against what the team committed to

Each weekday morning: the share of committed story points done in the open sprint, the days left, and whether the pace so far gets you to the end.

Runs
Weekdays at 9:00
Uses
Jira
Posts
Stat tile

What lands on your board

AcmeCommitted points done62%+27% vs previous period, bettervs last report
Points done26 of 42
Days left4
Added5pts
Sprint elapsedDay 6 of 10
An example with made-up numbers. Your agent posts your real ones.

What it does

The burndown chart answers "will we make it", but only for people who open it and know how to read a jagged line against a diagonal. On a phone it is unreadable, and it says nothing about the issue that has sat in To Do all sprint.

The agent reads the open sprint, counts what was committed at the start against what is done now, and turns the slope into one percentage and a forecast. Scope added after planning is counted apart from the commitment, so a growing sprint does not hide behind a flat line.

How it works

  1. 1Find the open sprint

    GET /rest/agile/1.0/board/{boardId}/sprint?state=active returns its id, name, goal, startDate and endDate. Count the working days between today and endDate.

  2. 2Read its issues with history

    Search sprint = <id> through GET /rest/api/3/search/jql with fields=status,issuetype,summary,assignee,customfield_10016 and expand=changelog. The story points field differs per site (customfield_10016 is common); look it up once in GET /rest/api/3/field.

  3. 3

    3Separate commitment from added scope

    An issue is committed if it was in the sprint at startDate. One whose changelog shows the Sprint field gaining this sprint later is added scope. Leave sub-tasks out so each story counts once.

  4. 4

    4Compute progress and a forecast

    Progress is done points over committed points, or done issues over committed issues if the team does not estimate. Compare it with the share of working days elapsed, and forecast the finish from the average points closed per day so far.

  5. 5

    5Report

    The percent done, points done of committed, days left, added scope, and the three largest committed issues still in To Do.

  6. Post it to the board

    With BRIEFKIN_TOKEN set, the agent sends the result as one card that updates in place every run. Without it, you get the report in the chat.

What you get

  • Done: percent of committed points, and points done out of committed.
  • Days left in the sprint, and where an even pace would put you today.
  • Added scope since the sprint started, in points and issues.
  • Forecast: on track, at risk or behind, from the pace so far.
  • The largest issues not started yet, as the place to look first.

Install and run it

Pick your agent, where the data comes from and how to schedule it; the commands below follow.

Agent
Data
Schedule
  1. Install the skill

    One command. It puts the SKILL.md in ~/.claude/skills and in ~/.agents/skills, which Codex, Cursor, Gemini CLI, Copilot CLI and OpenCode read too.

    shellcurl -fsSL https://briefkin.dev/skills/jira-sprint-progress/install | sh
  2. Run it

    Ask Claude Code:

    promptRun the jira-sprint-progress skill

    Or paste the prompt instead of installing:

    promptUsing the Jira Agile API, find the active sprint on board 42 (GET /rest/agile/1.0/board/42/sprint?state=active), then read its issues with story points and changelog (GET /rest/api/3/search/jql, jql=sprint = <id>, expand=changelog). Split the issues into committed (in the sprint at its start date) and added later, leaving out sub-tasks. Tell me the percent of committed story points done, points done of committed, working days left, points added since the start, and a forecast from the average points closed per day: on track, at risk or behind. List the three largest committed issues still in To Do.
  3. Put it on a schedule

    Weekdays at 9:00, from cron on any machine where Claude Code is signed in:

    crontab0 9 * * 1-5 claude -p "Run the jira-sprint-progress skill"

    Add it with crontab -e. A laptop asleep at that time runs it when it wakes if you use launchd or Task Scheduler instead; GitHub Actions works for the API route.

  4. Send it to your board

    Connect Briefkin once with curl -fsSL https://briefkin.dev/install | sh and every run lands on your board as a stat tile. How setup works

View the SKILL.mdRaw file
SKILL.md---
name: jira-sprint-progress
description: "Each weekday morning: the share of committed story points done in the open sprint, the days left, and whether the pace so far gets you to the end. Use when the user asks for this, or when it runs on a schedule."
---

# Jira sprint progress

Each weekday morning: the share of committed story points done in the open sprint, the days left, and whether the pace so far gets you to the end.

The burndown chart answers "will we make it", but only for people who open it and know how to read a jagged line against a diagonal. On a phone it is unreadable, and it says nothing about the issue that has sat in To Do all sprint.

The agent reads the open sprint, counts what was committed at the start against what is done now, and turns the slope into one percentage and a forecast. Scope added after planning is counted apart from the commitment, so a growing sprint does not hide behind a flat line.

## Two ways to get the data

Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.

## Route A: API or MCP server

### What you need

- The ID of the team's Scrum board (from its URL) and read access to the project behind it.
- An MCP server or connector for Jira, or an Atlassian API token in `JIRA_API_TOKEN` with your login email (`JIRA_EMAIL`) and site URL (`JIRA_BASE_URL`) for the Agile and REST APIs.

If something is missing, say what and stop; do not invent numbers.

### Steps

1. **Find the open sprint** (Jira): `GET /rest/agile/1.0/board/{boardId}/sprint?state=active` returns its `id`, `name`, `goal`, `startDate` and `endDate`. Count the working days between today and `endDate`.
2. **Read its issues with history** (Jira): Search `sprint = <id>` through `GET /rest/api/3/search/jql` with `fields=status,issuetype,summary,assignee,customfield_10016` and `expand=changelog`. The story points field differs per site (`customfield_10016` is common); look it up once in `GET /rest/api/3/field`.
3. **Separate commitment from added scope**: An issue is committed if it was in the sprint at `startDate`. One whose changelog shows the `Sprint` field gaining this sprint later is added scope. Leave sub-tasks out so each story counts once.
4. **Compute progress and a forecast**: Progress is done points over committed points, or done issues over committed issues if the team does not estimate. Compare it with the share of working days elapsed, and forecast the finish from the average points closed per day so far.
5. **Report**: The percent done, points done of committed, days left, added scope, and the three largest committed issues still in To Do.

## Route B: the browser

### What you need

- Signed in to Jira with Browse permission on the project behind the board; the board must be a Scrum board with an active sprint.

If something is missing, say what and stop; do not invent numbers.

### Steps

Start at https://home.atlassian.com/. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.

1. **Open the Scrum board**: From Atlassian Home open Jira, then **Projects**, the project and **Board**. The header shows the active sprint's name, goal and how many days remain; click the sprint name for the exact start and end dates.
2. **Open the Sprint report**: In the project sidebar choose **Reports**, then **Sprint report**, and pick the active sprint. The **Completed work items** and **Work items not completed** tables show each item's estimate and status, and rows marked with an asterisk were added after the sprint started.
3. **Separate commitment from added scope**: Committed points are the estimates of every row without an asterisk across both tables; added scope is the asterisked rows. Sub-tasks do not appear in the tables, so each story counts once. If the team does not estimate, count rows instead.
4. **Compute progress and a forecast**: Progress is committed points done over committed points. Compare it with the share of working days elapsed, and forecast the finish from the points completed per day so far; the burndown chart on the same page shows the slope.
5. **Report**: Percent done, points done of committed, days left, added scope, and the three largest committed items whose status is still To Do, read from the Not completed table.

Note: Reports > Sprint report is a company-managed project feature. Team-managed projects offer **Sprint burndown** instead, which gives the same totals but does not star added items; the board's **Insights** panel shows sprint progress there. Whichever field is set under Board settings > Estimation is the one both reports use.

## The report

- **Done**: percent of committed points, and points done out of committed.
- **Days left** in the sprint, and where an even pace would put you today.
- **Added scope** since the sprint started, in points and issues.
- **Forecast**: on track, at risk or behind, from the pace so far.
- The largest issues not started yet, as the place to look first.

## Post it to Briefkin

When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.

```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
  -H "authorization: Bearer $BRIEFKIN_TOKEN" \
  -H "content-type: application/json" \
  -d @- <<'JSON'
{
  "v": 1,
  "event_id": "jira-sprint-progress/<date of this run, e.g. 2026-10-16>",
  "item_key": "jira-sprint-progress",
  "project": "Acme",
  "source": "Jira sprint progress skill",
  "kind": "metric",
  "title": "Sprint 31 is 62% done with 4 days left",
  "metric": {
    "label": "Committed points done",
    "value": 62,
    "unit": "%",
    "better": "higher",
    "period_start": "<start of the period, ISO 8601>",
    "period_end": "<end of the period, ISO 8601>"
  },
  "glance": [
    {
      "type": "Grid",
      "props": {
        "columns": 3
      },
      "children": [
        {
          "type": "Stat",
          "props": {
            "label": "Points done",
            "value": "26 of 42"
          }
        },
        {
          "type": "Stat",
          "props": {
            "label": "Days left",
            "value": 4
          }
        },
        {
          "type": "Stat",
          "props": {
            "label": "Added",
            "value": 5,
            "unit": "pts",
            "tone": "warn"
          }
        }
      ]
    },
    {
      "type": "Progress",
      "props": {
        "label": "Sprint elapsed",
        "value": 60,
        "text": "Day 6 of 10"
      }
    }
  ],
  "widget": [
    {
      "type": "Table",
      "props": {
        "columns": [
          "Not started yet",
          "Points",
          "Assignee"
        ],
        "align": [
          "left",
          "right",
          "left"
        ],
        "rows": [
          [
            "ACME-731 Bulk invite members from a CSV",
            8,
            "Priya"
          ],
          [
            "ACME-728 Error states on the billing page",
            5,
            "Tom"
          ],
          [
            "ACME-735 Seat count on the plan summary",
            3,
            "Unassigned"
          ]
        ]
      }
    },
    {
      "type": "Callout",
      "props": {
        "text": "At 4.3 points a day the 16 committed points left close by day 10. The 5 added points do not fit.",
        "tone": "warn"
      }
    }
  ],
  "size": "md"
}
JSON
```

Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.

Set `period_start` and `period_end` to the window the number covers: the tile names it from them ("Last 7 days", "Today", "This month"). For a count right now (open items, a balance), send `"period_label": ""` so no period shows; for another name, send it as `period_label` (at most 24 characters).

## Run it on a schedule

Suggested: Weekdays at 9:00 (`0 9 * * 1-5`). From cron, with the agent signed in on that machine:

```bash
0 9 * * 1-5 claude -p "Run the jira-sprint-progress skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```

Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/jira-sprint-progress#schedule

Source: https://briefkin.dev/skills/jira-sprint-progress

What your agent needs

  • The ID of the team's Scrum board (from its URL) and read access to the project behind it.

  • An MCP server or connector for Jira, or an Atlassian API token in JIRA_API_TOKEN with your login email (JIRA_EMAIL) and site URL (JIRA_BASE_URL) for the Agile and REST APIs.

Connecting Jira

  1. Atlassian Rovo MCP Server, Atlassian's official remote server for Jira and Confluence at https://mcp.atlassian.com/v2/mcp. In Claude, add the Atlassian connector from the directory; in Claude Code, run claude mcp add --transport http atlassian https://mcp.atlassian.com/v2/mcp and authenticate with /mcp. It signs in with OAuth 2.1 or an API token and respects your Jira permissions (getting started).
  2. Atlassian CLI. After acli jira auth login, acli jira workitem search --jql "sprint in openSprints()" --json returns the same issues from a terminal.
  3. REST API with an API token. Create a token at id.atlassian.com under Security > API tokens. The skill reads JIRA_EMAIL, JIRA_API_TOKEN and JIRA_BASE_URL (https://acme.atlassian.net) and uses basic auth. A scoped token limited to read:jira-work and read:jira-user is narrower; scoped tokens call https://api.atlassian.com/ex/jira/{cloudId} instead of your site URL.

A classic token can do anything your account can, so prefer a scoped token with read scopes only, or an account that just has Browse permission on the projects in the report.

Questions

We do not estimate in story points. Does it still work?

Yes. When the points field is empty it counts issues instead, so the number becomes issues done out of issues committed. Sub-tasks are left out either way, so a story with eight sub-tasks counts once.

Why does its number differ from the burndown chart?

Usually because of the estimation field or the start time. Check which field the board uses under Board settings > Estimation and point the skill at it, and note that issues finished before the sprint started count as done from the first day.

Do I need Briefkin to use the Jira sprint progress skill?

No. The skill runs with your own agent and gives you the report in the chat. With a Briefkin token set, each run also posts it to your board as a stat tile, so you can glance at it instead of asking again.

Which agents can run it?

Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot CLI, OpenCode, Windsurf and Amp all read SKILL.md files. The install command puts it in ~/.claude/skills and ~/.agents/skills, where they look. ChatGPT, the Claude app and Grok take the prompt instead. Pick your agent under "Install and run it" and the commands change to match.

Can it work without an API or MCP server, from my browser?

Yes. Switch the data source to "Your browser" and the steps change to the Jira pages themselves: the agent opens home.atlassian.com in a browser you are signed in to and reads the numbers off the page. Claude Code, Codex, Cursor, Claude app and ChatGPT can drive a browser out of the box; Gemini CLI, Copilot CLI and OpenCode need a Playwright or Chrome DevTools MCP server first. It is slower than the API and needs you signed in, so it suits a report you run by hand or from a scheduler on your own computer.

Watch committed points done on your board, run after run

Skills are free to use with any agent. Briefkin is where their results land: one board for every report, number and question your agents send, with a ping when something needs you.

Free during the open beta. No card.