Skip to content

PRD Intake Automation

Automated ticket analysis: product area classification, completeness scoring, root cause analysis, technical assessment, and structured recommendations — powered by MeowKit skills with the mk:jira-* leaf family.

Best for: Team leads, engineering managers, DevOps teams Time estimate: ~2 min per ticket (automated) Skills used: mk:intake, mk:jira-issue, mk:jira-evaluator, mk:jira-lifecycle, mk:jira-relationships, mk:jira-collaborate, mk:scale-routing, mk:scout, mk:investigate, mk:decision-framework

Overview

When a new PRD or ticket lands in Jira, MeowKit can analyze it automatically: classify the product area, score description completeness, run root cause analysis (for bugs), scan the codebase for technical context, and post structured results back as a Jira comment.

MeowKit talks to Jira through the mk:jira-* leaf family, which uses the jira-as CLI under the hood. mk:intake orchestrates the analysis pipeline; the leaves handle Jira I/O.

Prerequisites

Install the jira-as CLI (used by every mk:jira-* leaf):

bash
npx mewkit setup

This installs jira-as into .claude/skills/.venv/bin/jira-as. No global install needed.

Then populate .claude/.env (gitignored) with three vars:

VarPurpose
MEOW_JIRA_API_TOKENAtlassian Cloud API token — get one at id.atlassian.com
MEOW_JIRA_EMAILAtlassian account email
MEOW_JIRA_SITE_URLe.g. https://your-company.atlassian.net

Verify with the SessionStart hook output: [mk:jira] env OK means all three keys are loaded.

Escape hatch — Atlassian MCP (mTLS, multi-profile, or non-jira-as workflows)

If jira-as is unusable (e.g. mTLS-required tenants, multi-profile setups), the leaves accept Atlassian MCP as a fallback transport:

bash
claude mcp add --transport http atlassian https://mcp.atlassian.com/v1/mcp

The router does NOT auto-fallback — you invoke the leaf with the MCP transport explicitly. See mk:jira reference for details.

Define Product Areas

Create a YAML file mapping product areas to code paths and team ownership:

yaml
# .claude/product-areas.yaml
areas:
  - name: Authentication
    paths: ["src/auth/**", "src/middleware/auth*"]
    keywords: ["login", "session", "token", "OAuth", "JWT"]
    pic: ["alice", "bob"]

  - name: Payments
    paths: ["src/billing/**", "src/stripe/**"]
    keywords: ["payment", "invoice", "subscription", "charge"]
    pic: ["charlie"]

  - name: API
    paths: ["src/api/**", "src/routes/**"]
    keywords: ["endpoint", "REST", "GraphQL", "route"]
    pic: ["alice", "dave"]

This feeds into mk:scale-routing for automatic product area detection.

Configure Trigger

Two options:

Option A: Jira Automation (webhook → Claude)

Jira Automation Rule:
  When: Issue created, type = PRD
  Then: Send webhook to your service
  Your service: calls `claude -p` with ticket content

Option B: Manual / On-demand

/mk:cook analyze PRD-123 using the intake workflow

Step-by-step Guide

Simplified with mk:intake (v2.0)

MeowKit v2.0 introduced mk:intake which orchestrates the entire intake workflow automatically. Instead of chaining skills manually, just run:

bash
/mk:intake

The steps below describe what mk:intake does internally.

Step 1: Fetch the ticket

MeowKit reads the ticket via mk:jira-issue:

bash
/mk:jira-issue get PRD-123

The leaf reads the description, acceptance criteria, comments, attachments, and linked issues via the jira-as wrapper. See mk:jira-issue for the full read surface.

Step 1.5: Evaluate ticket complexity

Optionally, assess ticket complexity before proceeding with full intake:

bash
/mk:jira-evaluator PRD-123

This produces a qualitative complexity assessment (Simple/Medium/Complex), detects missing acceptance criteria, vague language, and unlinked dependencies. The evaluation feeds into estimation and sprint planning. See Ticket Evaluation & Estimation for details.

Evaluator vs completeness scoring

mk:jira-evaluator assesses implementation complexity for estimation. mk:plan-creator scope challenge assesses structural completeness of the ticket description. They answer different questions — use both.

Step 2: Classify product area (mk:scale-routing)

MeowKit scans the ticket description for domain keywords and matches against .claude/product-areas.yaml:

Product area: Authentication
Confidence: HIGH (keywords: "login", "session timeout", matched paths: src/auth/**)
Suggested PIC: alice, bob

If multiple areas match, MeowKit reports all with confidence scores.

Step 3: Evaluate completeness (mk:plan-creator scope challenge)

MeowKit checks the PRD against required sections:

SectionStatusNotes
Goal / Problem statement✅ PresentClear: "Users get logged out after 24 hours"
Acceptance criteria❌ MissingNo pass/fail criteria defined
Scope (in/out)⚠️ Partial"In scope" listed, "out of scope" missing
Steps to reproduce❌ MissingBug ticket with no repro steps
Technical constraints✅ Present"Must not break existing SSO flow"

Completeness score: 55/100

Step 4: Scan codebase (mk:scout)

MeowKit pulls latest code and scans for relevant files:

Related files:
  src/auth/session-manager.ts (session timeout logic)
  src/middleware/auth-guard.ts (token validation)
  src/config/auth.ts (timeout configuration: 24h)
  tests/auth/session.test.ts (existing test coverage)

Technical considerations:
  - Session timeout is hardcoded to 86400s in auth.ts:15
  - Token refresh logic exists but only triggers on page navigation
  - No background refresh mechanism for idle sessions

Step 5: Root cause analysis (mk:investigate)

For bug tickets, MeowKit runs structured RCA:

RCA Method: 5 Whys (single-event, simple causal chain)

Why 1: Users get logged out → session token expires
Why 2: Token expires → 24h timeout reached
Why 3: Timeout reached → no refresh during idle period
Why 4: No idle refresh → refresh only triggers on navigation
Why 5: Navigation-only refresh → design gap (no background keep-alive)

Root cause: Token refresh is tied to user navigation events.
           Idle users (reading, in meetings) get no refresh.

Suggested fix: Add background token refresh interval (e.g., every 20min)
                OR extend timeout to 7 days with sliding expiration.

Step 6: Generate structured output

MeowKit posts a structured comment back to Jira via mk:jira-collaborate:

markdown
## AI PRD Analysis — PRD-123

### Product Area

**Authentication** (confidence: HIGH)

### Completeness Score: 55/100

Missing:

- ❌ Acceptance criteria (add pass/fail conditions)
- ❌ Steps to reproduce (add exact repro steps)
- ⚠️ Out-of-scope section (clarify boundaries)

### Technical Considerations

- Session timeout hardcoded at 24h (`src/config/auth.ts:15`)
- Token refresh only triggers on navigation (no idle refresh)
- Existing test coverage: `tests/auth/session.test.ts` (12 tests)

### Root Cause (for bugs)

Token refresh tied to navigation events. Idle users receive no refresh.

### Suggested Breakdown

1. Add background refresh interval (src/auth/session-manager.ts)
2. Update session config to support sliding expiration (src/config/auth.ts)
3. Add integration test for idle session scenario

### Related Tickets

- PRD-098: "Session management improvements" (similar scope)
- BUG-045: "Intermittent logout" (possibly same root cause)

### Suggested PIC

**alice** (Authentication domain owner, 3 open tickets)
**bob** (Authentication domain, 5 open tickets — alice preferred for load balance)

Step 7: Auto-assign and transition

If configured, MeowKit can:

  • Assign the ticket to the suggested PIC via mk:jira-lifecycle
  • Transition status (e.g., "New" → "In Analysis") via mk:jira-lifecycle
  • Link related tickets via mk:jira-relationships

Execute the suggested actions

After reviewing intake analysis, run the suggested Jira actions directly:

bash
/mk:jira-lifecycle transition PRD-123 "In Analysis"
/mk:jira-relationships link PRD-123 blocks BUG-045
/mk:jira-lifecycle assign PRD-123 alice

Skill Graph

mk:intake (orchestrator)
  ├─ mk:jira-issue          → fetch ticket
  ├─ mk:scale-routing       → product-area classification
  ├─ mk:plan-creator        → completeness scoring (scope challenge)
  ├─ mk:scout               → codebase context
  ├─ mk:investigate         → RCA (bug tickets)
  ├─ mk:decision-framework  → triage rules
  ├─ mk:jira-collaborate    → post analysis comment
  ├─ mk:jira-lifecycle      → transition + assign (Step 7)
  └─ mk:jira-relationships  → link related tickets (Step 7)

MeowKit Skills Used

StepSkillWhat It Does
Ticket I/Omk:jira-issueRead issue + attachments + linked tickets via jira-as
Complexity assessmentmk:jira-evaluatorRead-only complexity + inconsistency analysis
Product area detectionmk:scale-routingMatches keywords against domain-complexity CSV / product-areas YAML
Completeness evaluationmk:plan-creatorScope challenge validates goal, criteria, constraints, scope
Codebase scanningmk:scoutParallel file discovery + architecture fingerprint
Root cause analysismk:investigate4-phase investigation with RCA method selection
Structured recommendationmk:decision-frameworkClassify → rules → score → escalate
Comment postingmk:jira-collaboratePost AI analysis as a Jira comment
Lifecycle (Step 7)mk:jira-lifecycleTransition + assign
Linking (Step 7)mk:jira-relationshipsLink blockers / related issues

What MeowKit Does NOT Do

Be honest about boundaries:

  • Team roster management — You maintain .claude/product-areas.yaml. MeowKit reads it.
  • Workload balancing — MeowKit reports open ticket count per PIC (via mk:jira-search). Your rules decide assignment.
  • Jira workflow rules — MeowKit suggests transitions. Your Jira automation enforces them.
  • Duplicate detection — MeowKit finds related tickets via keyword search. Exact dedup is your JQL.

Gotchas

  • No MEOW_JIRA_* env = no Jira I/O: The analysis skills work standalone (you can paste ticket text), but automated read/write requires the three env vars in .claude/.env.
  • Product areas YAML must be maintained: Stale domain mappings = wrong classification. Update when team structure changes.
  • RCA only for bugs: Feature PRDs get completeness scoring + breakdown, not root cause analysis.
  • PIC suggestion ≠ assignment: MeowKit suggests based on domain + load. Human confirms. Never auto-assign without review unless your team explicitly opts in.
  • Rate limits: If running on every Jira webhook, consider batching or filtering (e.g., only PRD type, only specific projects).

Released under the MIT License.