MeowKit

Analyzing Tickets with Media

How MeowKit handles tickets containing screenshots, videos, Figma links, and documents.

Full flow for tickets containing images, video recordings, Figma design links, and PDF documents — with graceful fallback at every step.

Best for: Team leads, QA engineers, frontend developers Time estimate: Varies by media type (images ~30s, video 1–2 min, Figma ~1 min) Skills used: mk:intake, mk:jira-issue, mk:jira-collaborate, mk:figma, mk:multimodal, mk:investigate

Quick path

/mk:intake BUG-789          # pulls the ticket, its screenshots, video, Figma links
                            # then describes what it found
/mk:investigate             # use those findings as evidence
/mk:jira-collaborate add-comment BUG-789 --body "<what you learned>"

You end up with the media turned into text you can reason about, and a comment on the ticket recording it. Worth knowing the fallback chain degrades rather than fails: a missing tool means a lower-fidelity read, not an error.

Overview

Tickets often include more than text. Bug reports have screen recordings. Feature PRDs have Figma links. Specs have PDF attachments. MeowKit processes all of these through a fallback chain — it tries the best tool first, then degrades gracefully if that tool isn't available.

Prerequisites

Jira access needs the jira-as CLI and three variables in .meowkit/.env. Jira Integration covers the install, the token, what the skills will and will not do on their own, and what to check when authentication fails.

Optional media tools

ToolWhat it enablesInstall
Figma MCPExact design data (colors, spacing, tokens)claude mcp add figma
Gemini API keyBetter image/video analysisSet MEOWKIT_GEMINI_API_KEY in .meowkit/.env
FFmpegVideo frame extraction, image optimizationbrew install ffmpeg or npx mewkit setup --system-deps
ImageMagickImage resize/conversionbrew install imagemagick or npx mewkit setup --system-deps

None of these are required

MeowKit works without all of them. Each missing tool reduces capability but never blocks analysis. Text-only analysis always works.

Flow 1: Ticket with Screenshots

Scenario: Bug report BUG-456 has 2 screenshots attached (error-state.png, expected-state.png)

Step 1: Intake receives ticket

/mk:intake
# Paste ticket content, OR if MEOW_JIRA_* env vars are populated:
# mk:intake delegates to mk:jira-issue and reads BUG-456 automatically

Step 2: Detect image attachments

mk:intake finds .png files in the ticket attachments (read via mk:jira-issue).

Step 3: Image analysis — fallback chain

1. FFmpeg/ImageMagick available?
   → YES: Resize to ≤1920px (saves 60% tokens)
   → NO:  Use raw image (works, costs more tokens)

2. MEOWKIT_GEMINI_API_KEY available?
   → YES: mk:multimodal → detailed analysis
          "Error toast showing 'Session expired' at coordinates (340, 120).
           Background shows login form partially filled. Submit button is
           in loading state (spinner visible)."
   → NO:  Claude Read tool → good analysis
          "Screenshot shows an error message on a login page.
           The error says 'Session expired'. A loading spinner
           is visible on the submit button."

Step 4: Results in intake output

### Media Analysis
- **2 images** analyzed (error-state.png, expected-state.png)
- Error state: Login page with "Session expired" toast, submit button in loading state
- Expected state: Successful login redirect to dashboard
- **Key difference:** Error occurs during submission, not after idle timeout

What you lose without tools

Tool MissingImpact
FFmpeg/ImageMagickImages not resized — uses more tokens but still works
GeminiClaude Read instead — slightly less precise on small text/exact colors
Both missingClaude Read on raw images — works for most screenshots

Flow 2: Ticket with Video Recording

Scenario: Bug report BUG-789 has a screen recording (bug-reproduction.mp4, 2 minutes)

Step 1: Intake detects video

mk:intake finds .mp4 in attachments.

Step 2: Video processing — FFmpeg required

Step 3: Analyze extracted frames

Step 4: Timeline synthesis

mk:intake builds a timeline from frame analysis:

### Media Analysis
- **Video:** bug-reproduction.mp4 (2:14, 12 key frames extracted)
- **Timeline:**
  1. Login page loaded (0:00)
  2. User enters credentials (0:15)
  3. Clicks "Sign In" (0:22)
  4. Loading spinner appears (0:23)
  5. Spinner continues ~3 seconds (0:23-0:26)
  6. Error toast: "Session expired" (0:26)
  7. Automatic redirect to login page (0:28)
- **Key observation:** Session expiry during login attempt, not after.
  Token validation may run before auth completes.

Step 5: RCA with video evidence

mk:investigate uses the video timeline as evidence:

### Root Cause Analysis (5 Whys)
Why 1: User sees "Session expired" → expired token rejected
Why 2: Token expired → was checking OLD token during NEW login
Why 3: Old token checked → pre-auth validation runs before credentials processed
Why 4: Pre-auth runs first → middleware order: validateToken → authenticate
Why 5: Wrong order → auth middleware should run BEFORE token validation for login route

Root cause: Login route runs token validation middleware before authentication.
Fix: Exclude /login from token validation middleware, or reorder middleware chain.

What you lose without FFmpeg

With FFmpegWithout FFmpeg
12 key frames extracted automatically❌ No video analysis at all
Timeline synthesized from scene changes❌ Must manually screenshot key moments
Completeness score includes video evidenceScore drops ~15 points (media gap noted)
RCA has visual evidence chainRCA relies on text description only

FFmpeg is required for video

Unlike images (Claude Read always works), video analysis has no fallback without FFmpeg. Install it for teams that frequently attach screen recordings.


Scenario: Feature PRD PRD-123 includes: "Design: https://www.figma.com/design/abc123/MyApp?node-id=2304:512"

Step 1: Intake detects Figma URL

mk:intake regex matches: figma.com/(design|file|proto)/

Step 2: Figma analysis — fallback chain

Step 3: Design context in output

### Design Context
- **Figma:** MyApp / Login Screen (abc123:2304:512)
- **Components detected:** LoginCard, EmailInput, PasswordInput, SubmitButton, SocialLoginGroup
- **Layout:** Centered card, max-width 400px, vertical stack, 24px padding
- **Colors:** Primary #1A73E8, Background #F8F9FA, Text #202124, Error #D93025
- **Typography:** Inter 400 14px/20px (body), Inter 600 24px/28px (heading)
- **States visible:** Default login form (hover/error/loading states not exported)

### Suggested Breakdown
1. Create LoginCard component (centered, max-w-400, p-6)
2. Implement EmailInput + PasswordInput (Inter 14px, border-gray-300)
3. Add SubmitButton (bg-blue-600, text-white, hover:bg-blue-700)
4. Add SocialLoginGroup (Google + Apple, outlined buttons)
5. Responsive: stack vertically on mobile, center on desktop

Step 4: Implementation with mk:cook

User runs /mk:cook implement the login screen from PRD-123

→ mk:cook activates mk:figma IMPLEMENT mode → 7-step Figma→code workflow → Pixel-perfect implementation with exact design values


Flow 4: Ticket with PDF Specification

Scenario: Feature ticket has requirements-v2.pdf (15 pages)

Step 1: Intake detects PDF

Step 2: Claude Read handles natively

Claude Read tool opens PDF (built-in, no external tools needed):
→ Read pages 1-5: executive summary, requirements, acceptance criteria
→ Read pages 6-10: technical spec, API contracts
→ Read pages 11-15: wireframes, timeline

Note: Max 20 pages per Read call. For larger PDFs, read in chunks.

Step 3: Extract structured info

### Document Analysis
- **PDF:** requirements-v2.pdf (15 pages)
- **Requirements:** 12 functional, 5 non-functional
- **Acceptance criteria:** 8 defined (binary pass/fail ✓)
- **API contracts:** 3 endpoints specified (POST /auth, GET /user, PUT /profile)
- **Wireframes:** Pages 11-13 contain low-fidelity wireframes
- **Timeline:** Q2 2026 target, 3 sprints estimated

No external tools needed. PDFs work out of the box.


Posting analysis back to the ticket

After media analysis, post the structured findings via mk:jira-collaborate:

/mk:jira-collaborate add-comment BUG-789 \
  --body "$(cat .claude/state/intake-analysis.md)"

Fallback Summary

AttachmentBest ToolFallback 1Fallback 2No Tools
ImageFFmpeg resize + GeminiGemini (raw)Claude Read (raw)Claude Read (always works)
VideoFFmpeg frames + GeminiFFmpeg frames + Claude Read❌ No analysis❌ Manual screenshots needed
Figma linkFigma MCPPNG export + GeminiPNG export + Claude Read❌ Cannot access
PDFClaude ReadClaude Read (always works)
TextDirect analysisAlways works

Key takeaway

Images and PDFs always work. Videos need FFmpeg. Figma needs MCP or manual export. Text always works. Install FFmpeg + Figma MCP for the best experience, but MeowKit never blocks on missing tools.

On this page