contract-testing-flywheel is a workflow plugin, not a knowledge skill — instead of standing by to answer contract-testing questions, it does one job on demand: turn a short Q&A into a complete onboarding backlog that takes a team from "we've never written a contract test" to "consumer and provider contracts are published, verified, and gating deploys on PactFlow."
It's invoked as a slash command, /contract-testing-flywheel, and it's scrum-tool-agnostic — it can create the backlog live in Jira, GitHub Issues/Projects, or Azure DevOps, or (if none of those is connected) render the whole thing as a markdown document you paste into whatever tool your team actually uses.
The backlog follows the Contract Testing Flywheel methodology: Planning → Requirements → Design (knowledge + demo) → Implementation (consumer + provider) → Testing → Deployment → Lessons-Learned, with an optional Management Dashboard phase.
See the root README's install section for the exact commands. Short version:
/plugin marketplace add pactflow/pactflow-agent-skills
/plugin install contract-testing-flywheel@pactflow-agent-skills
No credentials or MCP server are required to install it — it has no bundled MCP of its own. Live ticket creation is unlocked separately, per scrum tool, as described below.
Run the slash command:
/contract-testing-flywheel
It asks a short, ordered set of questions — answer each, or supply the project/repo identifier as an argument (/contract-testing-flywheel PACT, /contract-testing-flywheel my-org/my-repo, /contract-testing-flywheel my-ado-org/my-ado-project):
- Which scrum tool — Jira, GitHub Issues/Projects, Azure DevOps, or Other/manual export.
- Project or workspace identifier (shaped by the tool you picked).
- Team / unit name.
- Consumer system name.
- Provider system name.
- Primary language / stack (Node/TS, JVM, Python, Go, .NET, Ruby, Rust, Other).
- CT mode — CDCT, BDCT, or Both.
- Broker URL (optional — falls back to "your Pact Broker or PactFlow tenant" if left blank).
- CI tool (GitHub Actions, GitLab CI, Buildkite, Jenkins, CircleCI, Other).
- Whether to include the optional management-dashboard ticket.
- If you picked Azure DevOps: which process template (Agile / Scrum / Basic), since that decides what the delivery-item type is called.
It then checks whether a matching backlog already exists (so reruns don't duplicate work), shows a dry-run preview of exactly what it's about to create, and — once you confirm — creates the root item and every child item, links them together, and (for the two Implementation tickets) posts the matching CLAUDE.md drop-in file as a comment so whoever picks up that ticket can copy it straight into the new repo.
If you picked "Other/manual export," or the tool you picked isn't actually connected, it skips straight to rendering the entire backlog as one markdown document instead — nothing is created, there's nothing to confirm, and the CLAUDE.md snippets are inlined directly under the relevant sections rather than posted as comments.
- Jira — via the Atlassian MCP. Root item is an Epic, delivery-phase items are Stories, idempotency is a JQL search on a
contract-testing-flywheellabel. - GitHub Issues/Projects — via the
ghCLI (or a GitHub MCP if one is connected). Root item is a tracking issue; delivery-phase items use GitHub's native "Feature" issue type where available, else a label. - Azure DevOps / Azure Boards — via the
az boardsCLI (or an Azure DevOps MCP if connected). Root item is an Epic; delivery-phase item type depends on the process template you name (User Story for Agile, Product Backlog Item for Scrum, Issue for Basic). - Anything else (Linear, Trello, Asana, ClickUp, …) — pick "Other/manual export." Not first-class, but fully usable: you get the same backlog as one markdown document to import by hand.
The full mechanics — exact idempotency queries, create/link/comment calls per tool — live in the plugin's lib/scrum-tool-adapters.md reference file, which is also where you'd add a new tool as a first-class adapter later.
- CDCT (consumer-driven contract testing via Pact) — the Implementation tickets reference the right Pact library for your stack automatically (
@pact-foundation/pact,pact-jvm,pact-python,pact-go,PactNet,pact-ruby,pact-rust). - BDCT (Bi-Directional Contract Testing via OpenAPI + Drift) — the provider-side ticket switches to a Drift-shaped checklist: install the Drift CLI, generate test cases from the OpenAPI spec, run them in CI, publish the spec via PactFlow's BDCT flow, and cross-verify against the consumer's recorded expectations.
- Both — generates both tracks in one bundle, for teams running mixed integrations.
<root item> ── Contract Testing Onboarding: <team> (<consumer> ↔ <provider>)
├── Task ── 1. Planning
├── Task ── 2. Requirements Analysis
├── Task ── 3a. Design — Knowledge ramp-up
├── Task ── 3b. Design — Local CT demo
├── <delivery item> ── 4. Consumer-side contract tests
├── <delivery item> ── 4b. Provider-side verification
├── <delivery item> ── 5. Testing — first CI trigger
├── <delivery item> ── 6. Deployment — can-i-deploy + record-deployment
├── Task ── 7. Internal docs — lessons learned + best practices
└── <delivery item> ── 8. Management dashboard (optional, opt-in)
Every item carries its own Why, What to do, Acceptance criteria, and References sections, filled in from your answers. Phases 1, 2, 3a, 3b, and 7 are bounded prep/learning/doc-capture work (filed as Tasks in every tool); phases 4, 4b, 5, 6, and 8 are user-value delivery work (filed as the tool's delivery-item type).
The plugin ships three ready-made CLAUDE.md templates, one per repo role, so a future Claude Code session in the new consumer or provider repo inherits the right skills and house rules automatically:
CLAUDE.md.cdct-consumer.md— Pact consumer repo.CLAUDE.md.cdct-provider.md— Pact provider repo (CDCT).CLAUDE.md.bdct-drift-provider.md— Drift-based provider repo (BDCT).
In live-creation mode these get posted as a comment on the matching Implementation ticket; in manual-export mode they're inlined directly in the export.
None are required — the manual-export path always works with nothing connected. To unlock live ticket creation, connect one of:
- An Atlassian (Jira) MCP server, authenticated, with write access to the target Jira project.
- The
ghCLI, authenticated (gh auth login), with write access to the target repo — or a GitHub MCP server. - The
az boardsCLI extension, configured (az devops configure --defaults organization=<org> project=<project>) — or an Azure DevOps MCP server.
Before creating anything, the plugin searches the chosen tool for an existing root item labelled contract-testing-flywheel for the same team name. If one already exists, it stops and tells you where, with a hint to re-run with --force if you actually want a second backlog (e.g. a different consumer/provider pair for the same team). Manual-export mode skips this check entirely — it never creates anything, so there's nothing to collide with.
- "A root item already exists" but you wanted a fresh one — pass
--force, or use a different team name if this is genuinely a different rollout. - You picked a tool but got the manual-export output anyway — the plugin couldn't confirm that tool's MCP/CLI is connected. Connect it (see Prerequisites) and re-run for live creation next time; the export you already got is still valid to import by hand.
- Azure DevOps items come out with an unexpected type name — double check the process template you named (Agile/Scrum/Basic); each maps to a different delivery-item type name.
The backlog's Implementation and Testing tickets point teams at:
/swagger-contract-testing— end-to-end help authoring and running contract tests (CDCT and BDCT).swagger-contract-testing:pact-generator/:pact-revieweragents — author and review Pact tests.swagger-contract-testing:pactflowskill — publish contracts, run can-i-deploy, inspect the matrix.swagger-contract-testing:drift-testing/:openapi-parserskills — BDCT-only; write and debug Drift test cases, and generate them from complex OpenAPI schemas.
For the full technical reference (exact placeholders, per-tool adapter mechanics, template layout), see the plugin's own README and SKILL.md.