---
name: jira-progress-pulse
description: Use when running the twice-daily project progress pulse — pulling Jira/Linear tasks and sending a Slack alert on key project movement (status changes, blockers, due-soon items).
---

# Jira/Linear → Slack Progress Pulse

Runs twice daily (morning/EOD) as a scheduled routine. Pulls task state from
Jira or Linear, identifies what actually matters to an EM, and posts a short
Slack alert — not a full dump.

## Steps

1. Pull current state via the **official MCP servers** — don't scrape or
   hand-roll API calls; the official connectors handle auth, pagination, and
   stay current with the API:
   - **Linear MCP** (`linear` plugin / official Linear MCP server): `list_issues`
     filtered by team/project, `list_cycles` for the active cycle
   - **Atlassian MCP** (official Atlassian Remote MCP server, ships Jira +
     Confluence tools): `searchJiraIssuesUsingJql` with a JQL scoped to the
     project + sprint
   - Compare against the previous run (keep a small state note — e.g. last-seen
     status per issue — so you can detect *changes*, not just current state)
   - If neither MCP server is connected, say so explicitly and point to setup
     (`claude mcp add` / Settings → Connectors) rather than falling back to
     scraping or asking the user for raw API tokens.

2. Filter for what's "key progress", not noise:
   - Status transitions into/out of "Blocked", "In Review", "Done"
   - Items due within 2 days that are not yet in progress
   - New high-priority issues created since the last pull
   - Anything that moved backward (e.g. Done → In Progress)

3. Draft a short Slack message (not a wall of text):
   ```
   📊 Project Pulse — <project> (<AM/PM>)
   ✅ Done: <issue keys/titles, max 3>
   🚧 Newly blocked: <issue keys — flag these first, an EM cares most here>
   ⏰ Due soon, not started: <issue keys>
   ```
   Omit any section with nothing to report — don't pad.

4. Send via the configured Slack integration/webhook. If no Slack MCP/integration
   is connected yet, say so and show the drafted message instead of failing silently.

## Notes
- This is a *scheduled* routine — set it up with `/schedule` (runs this skill
  twice daily, e.g. 9am and 5pm) rather than running it ad hoc.
- Keep the alert skimmable in <10 seconds; link out to Jira/Linear for detail.
- Never invent status changes — only report what the API actually returned.
