Team Maturity Engine
Use this workflow for deterministic sprint analysis and intervention selection.
The engine is intentionally thin; the executable logic lives in the shared core runner.
Step 0 — Offer the entry menu
At the start of an analysis conversation, before doing anything else, offer
these five modes as a plain numbered list (must render identically in
claude.ai, the desktop app, Claude Code, and Cowork — a structured choice UI
like Cowork's AskUserQuestion may layer on top, but the numbered list is the
spec):
- Team comparison — compare all teams in a specific sprint window → §6 Team Comparison
- Morning brief — a short status scan across teams: state + top priorities, no extra narration → Morning Brief (see references/morning-brief-template.md)
- Full team analysis — one team, one sprint window, in depth → §3 Full Sprint Analysis
- Trend analysis — one team across the last 3 (or N) sprint windows → §5 Trend Analysis
- Last open sprint — in-progress risk signal for one team's current sprint → §4 Leading Indicators, from a
--window run (mid_sprint_drift_check / sprint_start_risk_flag)
Soft default, never a gate. If the user's first message already states
enough to proceed directly (a mode, or enough of team/sprint/window to
reasonably infer one), skip the menu and proceed. If the user answers
something other than 1–5, or asks a different question entirely — mid-menu
or mid-report — follow that instead. Never insist the user pick from the
menu before answering a clear, differently-phrased request.
Required workflow
- Read the mandatory files first:
- maturity/manifest.json
- maturity/org-config.md
- maturity/org-kpi-definitions.md
- catalog.yaml
- Follow the output template in maturity-engine/references/output-template.md.
- Use the shared runner at maturity-core/run_analysis.py for Tier A execution.
- If the runner cannot execute, degrade gracefully and mark the output as unverified rather than fabricating numbers.
- For every report's
👉 Next Step section, select exactly one question —
the single highest-priority match via
references/next-step-routing.md —
never invented. When it routes to "which tasks/epics are behind this,"
run run_analysis.py --drill-down TEAM SPRINT_ID INDICATOR_ID
(read-only — see references/guardrails.md
Rule 11) rather than guessing.
Runtime behavior
- Tier A: run the shared runner and use the generated JSON output.
- Tier B: if code execution is unavailable, compute from the same rules in prose and mark the output as unverified.
- Tier C: if the data files are missing, stop and report the gap without inventing values.
Guardrails
- Never invent KPI values.
- Never invent interventions.
- Never change formulas mid-session.
- Always separate facts, hypotheses, and interventions.
- Include the assumptions and limitations section.
Analysis entry point
When the user asks for an analysis, run the shared runner and present the result in the output-template structure. The runner emits a JSON report with the computed KPIs, triggered patterns, recommended interventions, and a verified compute mode.
1---2name: maturity-engine3description: Use this skill when the user asks about team maturity, sprint analysis, KPI computation, pattern detection, or intervention recommendations based on Jira data. The workflow is deterministic and uses the checked-in engine runner and catalog.4---56# Team Maturity Engine78Use this workflow for deterministic sprint analysis and intervention selection.9The engine is intentionally thin; the executable logic lives in the shared core runner.1011## Step 0 — Offer the entry menu1213At the start of an analysis conversation, before doing anything else, offer14these five modes as a plain numbered list (must render identically in15claude.ai, the desktop app, Claude Code, and Cowork — a structured choice UI16like Cowork's AskUserQuestion may layer on top, but the numbered list is the17spec):18191. **Team comparison** — compare all teams in a specific sprint window → §6 Team Comparison202. **Morning brief** — a short status scan across teams: state + top priorities, no extra narration → Morning Brief (see [references/morning-brief-template.md](references/morning-brief-template.md))213. **Full team analysis** — one team, one sprint window, in depth → §3 Full Sprint Analysis224. **Trend analysis** — one team across the last 3 (or N) sprint windows → §5 Trend Analysis235. **Last open sprint** — in-progress risk signal for one team's current sprint → §4 Leading Indicators, from a `--window` run (`mid_sprint_drift_check` / `sprint_start_risk_flag`)2425**Soft default, never a gate.** If the user's first message already states26enough to proceed directly (a mode, or enough of team/sprint/window to27reasonably infer one), skip the menu and proceed. If the user answers28something other than 1–5, or asks a different question entirely — mid-menu29or mid-report — follow that instead. Never insist the user pick from the30menu before answering a clear, differently-phrased request.3132## Required workflow33341. Read the mandatory files first:35 - [maturity/manifest.json](maturity/manifest.json)36 - [maturity/org-config.md](maturity/org-config.md)37 - [maturity/org-kpi-definitions.md](maturity/org-kpi-definitions.md)38 - [catalog.yaml](catalog.yaml)392. Follow the output template in [maturity-engine/references/output-template.md](maturity-engine/references/output-template.md).403. Use the shared runner at [maturity-core/run_analysis.py](maturity-core/run_analysis.py) for Tier A execution.414. If the runner cannot execute, degrade gracefully and mark the output as unverified rather than fabricating numbers.425. For every report's `👉 Next Step` section, select exactly one question —43 the single highest-priority match via44 [references/next-step-routing.md](references/next-step-routing.md) —45 never invented. When it routes to "which tasks/epics are behind this,"46 run `run_analysis.py --drill-down TEAM SPRINT_ID INDICATOR_ID`47 (read-only — see [references/guardrails.md](references/guardrails.md)48 Rule 11) rather than guessing.4950## Runtime behavior5152- Tier A: run the shared runner and use the generated JSON output.53- Tier B: if code execution is unavailable, compute from the same rules in prose and mark the output as unverified.54- Tier C: if the data files are missing, stop and report the gap without inventing values.5556## Guardrails5758- Never invent KPI values.59- Never invent interventions.60- Never change formulas mid-session.61- Always separate facts, hypotheses, and interventions.62- Include the assumptions and limitations section.6364## Analysis entry point6566When the user asks for an analysis, run the shared runner and present the result in the output-template structure. The runner emits a JSON report with the computed KPIs, triggered patterns, recommended interventions, and a verified compute mode.