---
name: jira-weekly-status-report
description: "Every Friday afternoon: what got done, what is in flight, what is blocked and what scope was added, written for people who never open Jira. Use when the user asks for this, or when it runs on a schedule."
---

# Jira weekly status report

Every Friday afternoon: what got done, what is in flight, what is blocked and what scope was added, written for people who never open Jira.

Every Friday someone filters the board four ways and retypes issue titles into sentences leadership can follow. Stakeholders want three answers: did the team finish what it said, what is stuck, and did the plan change.

The agent answers those straight from Jira for one project or sprint, one short section each, with issue keys kept at the end of each line for anyone who wants to click through. Scope that came in mid-week gets its own section, which is the part hand-written updates usually leave out.

## 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

- Browse permission on the project, and the board ID for sprint reports (it is the number in the board URL, `.../boards/42`).
- Jira access through an MCP server or connector, or basic auth with `JIRA_EMAIL`, `JIRA_API_TOKEN` and `JIRA_BASE_URL`; the token also works for the Agile API under `/rest/agile/1.0`.

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

### Steps

1. **Fix the scope** (Jira): Use one project or one sprint per report. For a sprint, read it with `GET /rest/agile/1.0/board/{boardId}/sprint?state=active` to get its `id`, `name`, `goal`, `startDate` and `endDate`; for a project, cover the last 7 days.
2. **Pull what got done** (Jira): `GET /rest/api/3/search/jql` with `jql=project = ACME AND statusCategory = Done AND statusCategoryChangedDate >= -7d` and `fields=summary,issuetype,assignee,parent,labels`. Group by epic (`parent`) so the report reads as features, not tickets.
3. **Pull work in flight and stuck** (Jira): Query `statusCategory = "In Progress"` for active work and `(Flagged is not EMPTY OR status = Blocked)` for blocked work, both within the same project or `sprint = <id>`. For each blocked issue, read the latest comment to find what it waits on.
4. **Find added scope** (Jira): Query `created >= -7d` within the scope. For a sprint, also search its open issues with `expand=changelog` and keep the ones whose `Sprint` field gained this sprint after `startDate`. Report the count and any story points added.
5. **Write it for stakeholders**: Four short sections (Done, In progress, Blocked, Added), each line in plain language with the issue key at the end. Open with one sentence on whether the sprint goal or milestone is on track.

## Route B: the browser

### What you need

- Signed in to Jira with Browse permission on the project; the Sprint report also needs the board to be a Scrum board.

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 project and note the goal**: From Atlassian Home open Jira, then **Projects** and the project. For a sprint report open **Board**: the active sprint's name and goal sit at the top, and clicking the sprint name shows its start and end dates. For a project report, the window is the last 7 days.
2. **Pull what got done**: In the sidebar choose **Filters** > **View all work items**, switch to **JQL** and run `project = ACME AND statusCategory = Done AND statusCategoryChangedDate >= -7d`. Add the **Parent** column and sort by it so done work reads by epic.
3. **Pull work in flight and stuck**: Run `project = ACME AND statusCategory = "In Progress"` and then `project = ACME AND statusCategory != Done AND (Flagged is not EMPTY OR status = Blocked)`. Open each blocked item and read the newest entry under **Activity** > **Comments** to see what it waits on.
4. **Find added scope**: Run `project = ACME AND created >= -7d`. For a sprint, open **Reports** > **Sprint report** and pick the active sprint: items added after the sprint started are marked with an asterisk, and their estimates show in the table.
5. **Write it for stakeholders**: Four short sections (Done, In progress, Blocked, Added), each line in plain language with the key at the end, opening with one sentence on whether the sprint goal or milestone is on track.

Note: The asterisk for items added mid-sprint appears in the Sprint report of company-managed projects. Team-managed projects show a Sprint burndown instead; there, compare the scope line on day one with today and use the `created >= -7d` query for names.

## The report

- **Headline**: on track or not, against the sprint goal or milestone.
- **Done this week**, grouped by epic.
- **In progress**, with the owner of each item.
- **Blocked**, with what each issue waits on and who can clear it.
- **Added**: issues and points that arrived after the plan was set.
- A copy-ready version for Slack or email.

## 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-weekly-status-report/<date of this run, e.g. 2026-10-16>",
  "item_key": "jira-weekly-status-report",
  "project": "Acme",
  "source": "Jira weekly status report skill",
  "kind": "update",
  "title": "On track for the sprint goal, one blocker",
  "summary": "Sprint 24 goal: **self-serve SSO setup**. 11 issues done this week, 6 in progress, 1 blocked and 3 added.",
  "widget": [
    {
      "type": "Grid",
      "props": {
        "columns": 4
      },
      "children": [
        {
          "type": "Stat",
          "props": {
            "label": "Done",
            "value": 11,
            "tone": "ok"
          }
        },
        {
          "type": "Stat",
          "props": {
            "label": "In progress",
            "value": 6
          }
        },
        {
          "type": "Stat",
          "props": {
            "label": "Blocked",
            "value": 1,
            "tone": "bad"
          }
        },
        {
          "type": "Stat",
          "props": {
            "label": "Added",
            "value": 3,
            "tone": "warn"
          }
        }
      ]
    },
    {
      "type": "Table",
      "props": {
        "columns": [
          "Section",
          "Item",
          "Note"
        ],
        "rows": [
          [
            "Done",
            "Upload SAML metadata from the admin page (ACME-611)",
            "Live behind the sso flag"
          ],
          [
            "Done",
            "Verify a domain with a DNS TXT record (ACME-603)",
            ""
          ],
          [
            "In progress",
            "Enforce SSO for all members of a workspace (ACME-618)",
            "Priya, in review"
          ],
          [
            "Blocked",
            "Listing in the Okta app catalog (ACME-622)",
            "Waiting on Okta partner review since Oct 12"
          ],
          [
            "Added",
            "SCIM deprovisioning (ACME-640)",
            "Asked for by a customer on Oct 14"
          ]
        ]
      }
    },
    {
      "type": "Callout",
      "props": {
        "text": "ACME-622 needs a contact at Okta to move. The rest of the sprint goal can ship without it.",
        "tone": "warn"
      }
    }
  ]
}
JSON
```

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

## Run it on a schedule

Suggested: Fridays at 15:00 (`0 15 * * 5`). From cron, with the agent signed in on that machine:

```bash
0 15 * * 5 claude -p "Run the jira-weekly-status-report 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-weekly-status-report#schedule

Source: https://briefkin.dev/skills/jira-weekly-status-report
