SuperAPI AI Directory

projects-health-check

General & other

View repository

Updated 10-15 23:49

About this skill

Project Health Check

Purpose

Give the user an instant, multi-source situational snapshot of any client project before a call, during a status review, or when something feels off. Output is shown in chat only — never written anywhere automatically.

This skill is generic: it works for any project. Project name/key is supplied by the user at trigger time.


Key Constants

  • Jira / Confluence Cloud ID: use the Atlassian Cloud ID from your project context (e.g. yourorg.atlassian.net). If not set, ask the user.
  • User's Slack handle / email: use the identity from your project context, or ask the user if unknown.
  • Default scan window: last 14 days (covers sprint + a bit of buffer)

Step 0: Resolve the project

From what the user said, extract:

  • Project name (human-readable, e.g. "Acme", "ProjectX")
  • Jira project key if known (e.g. ACM, PX) — otherwise search for it
  • Slack channels — search for channels matching the project name if not known

If the project is ambiguous or multiple matches are possible, ask the user to clarify before proceeding. Don't guess.

Jira key lookup (if not known):

getVisibleJiraProjects → filter by name match

Slack channel lookup (if not known):

slack_search_channels(query="<project_name>")

Look for channels like #proj-<name>, #<name>-internal, #<name>-mgmt, etc.


Step 1: Scan all sources in parallel

Run everything below at the same time. Don't wait for one before starting another.

1a. Jira — sprint & backlog health

JQL: project = <KEY> AND updated >= -14d ORDER BY updated DESC
fields: summary, status, assignee, issuetype, priority, created, updated
maxResults: 40

Extract:

  • Tickets Done in the last 14 days → velocity signal
  • Tickets In Progress right now → active work
  • Tickets To Do / Backlog that are overdue or stale (updated > 14 days ago, still open)
  • Any tickets with no assignee (ownership gap)
  • Any Epics to understand current phase

Stale ticket heuristic: issuetype = Story or Task, status not in (Done, Cancelled), updated > 14 days ago → flag as potentially stale.

1b. Slack — recent activity & signals

Search across all channels related to the project:

slack_search_public_and_private(
  query="<project_name> after:<scan_start_date>",
  sort="timestamp",
  limit=30
)

If known channel IDs are available, also read them directly:

slack_read_channel(channel_id=<id>, oldest=<unix_ts>, limit=50)

For any message with escalation signals ("blocker", "stuck", "problem", "risk"), read the full thread to get complete context — the resolution or full backstory is almost always in the replies:

slack_read_thread(channel_id=<id>, thread_ts=<ts>)

Look specifically for:

  • Escalations or frustration signals — "blocker", "stuck", "problem", "risk", "delay", "waiting", "no response", "not received" (or equivalent in your team's language)
  • Client interactions — messages to/from client, demo feedback, approval requests
  • Team signals — someone leaving, someone being added, capacity concerns
  • Open questions with no reply (thread with 0 responses or last message unanswered)

1c. Fireflies — recent meetings

fireflies_get_transcripts(keyword="<project_name>", fromDate=<scan_start>, limit=5)

Fallback: search by participants: ["<your-email>"], then filter manually.

For each relevant meeting: call fireflies_get_summary. Extract:

  • Action items that are still open
  • Decisions made (and whether they've been documented)
  • Risks or blockers mentioned verbally
  • Client sentiment (positive/neutral/negative tone in summary)

1d. Confluence — open decisions & documentation gaps

CQL: space = "<project_space>" AND type = page AND lastModified >= "<scan_start>"
     ORDER BY lastModified DESC
limit: 10

If you don't know the Confluence space, search:

getConfluenceSpaces → filter by project name match

Look for:

  • Decision Log — are there open/pending decisions? When was it last updated?
  • Meeting notes — is documentation current, or are recent meetings missing notes?
  • Any pages flagged as "Draft" or "TODO"

Step 2: Synthesise

Cross-reference all sources. Look for:

  1. Consistency gaps — something decided in Fireflies/Slack but not in Jira/Confluence
  2. Stale threads — open Slack questions with no follow-up, unactioned Fireflies items
  3. Silent risks — things that haven't been discussed recently but probably should be (e.g., a blocker mentioned 2 weeks ago with no resolution update)

Step 3: Output

Context mode — calibrate depth to situation

Before writing, determine which mode applies:

Mode When Output style
Pre-call (5-min) "I have a call in 30 min" Lead with ⚠️ flags and blockers, compress the rest. Total: ~200 words.
Weekly review Scheduled check-in, no urgency Full structured output. Total: ~300–400 words.
Deep review Something feels off, post-incident Expand OPEN THREADS and ATTENTION FLAGS, name sources explicitly. Total: up to 500 words.

Default to Weekly review if no context given.


Present in chat. Use this structure:

🩺 Health Check: <Project Name> — <DD.MM.YY>
Scan window: last 14 days | Mode: Pre-call / Weekly / Deep

📊 VELOCITY
• Done this period: X tickets  |  In Progress: Y  |  Stale/stuck: Z
• [1–2 sentence narrative — is the pace healthy? accelerating? stalling?]

✅ WHAT'S MOVING
• [Specific thing in active progress — name the feature, not just "development"]
• [Max 4 bullets — most recent / most impactful first]
• Omit this section if nothing material moved this period — don't list routine ongoing work.

🚧 BLOCKERS & RISKS
• [Blocker] — source: [Slack/Fireflies/Jira], since: [date if known]
• [Risk] — [brief context, what could go wrong]
• If nothing: "No active blockers identified in this scan window."

🔄 OPEN THREADS (need follow-up)
• [Unanswered question or unactioned item] — [where it lives, who owns it, how long it's been open]
• If nothing: "No open threads identified."

📋 DECISIONS
• [Decision made this period] — [source, date]
• [Pending decision awaiting input] — [from whom, since when]
• If nothing recent: "No new decisions in scan window. Decision Log last updated: [date]."

⚠️ ATTENTION FLAGS
[Only include if something warrants immediate action. Omit section entirely if nothing qualifies.]
• [Flag] — [why it matters] → [suggested next action]

Output rules

What to include:

  • Specific over generic. Name actual tickets, actual threads, actual decisions. Never write "development is progressing" — write what is being developed.
  • Evidence-based. Every bullet traceable to a source (Jira ticket, Slack message, Fireflies summary). If you can't source it, don't include it.

What to explicitly omit:

  • Don't list every Done ticket verbatim — group by theme or name only the 2–3 most significant.
  • Don't include standard ongoing work that has no change or signal ("backend development continued").
  • Don't populate a section with filler just to look complete. An honest "nothing to report" is better than a padded bullet.
  • Don't include something as a "risk" unless it's actually unresolved. Past resolved blockers aren't risks.

Per-section length targets (weekly review mode):

  • VELOCITY: 1 line of numbers + 1–2 sentence narrative
  • WHAT'S MOVING: 2–4 bullets, 1 line each
  • BLOCKERS & RISKS: 1–4 bullets; if more than 4, group by theme
  • OPEN THREADS: 1–3 bullets (surface only actionable ones)
  • DECISIONS: 2–4 bullets
  • ATTENTION FLAGS: 1–3 bullets maximum — if you have more, the project needs a call, not a health check

Language: match the language the PM writes in.


Customization points

When adapting this skill for a specific project (or another PM), update these fields:

Field Default Override
SCAN_WINDOW_DAYS 14 e.g. 7 for fast-moving sprints
JIRA_KEY resolved dynamically hardcode for frequent projects
SLACK_CHANNEL_IDS resolved dynamically hardcode known channels
CONFLUENCE_SPACE resolved dynamically hardcode if known
OUTPUT_LANGUAGE English Polish / mixed
STALE_THRESHOLD_DAYS 14 adjust per team cadence

For recurring projects, consider adding a ## Known Projects section below with pre-resolved constants (Jira key, Slack channel IDs, Confluence space) to skip the lookup steps and improve reliability.


After presenting

Ask: "Anything specific you want me to dig into further?"

Common follow-ups this skill can handle:

  • "Show me the stale tickets" → fetch and list them with summaries
  • "Check if this decision is in Jira" → cross-reference specific decision
  • "What did we agree with the client on the last call" → pull specific Fireflies summary
  • "Create tickets from these action items" → hand off to jira-create-ticket skill if available