vjra.us / portfolio

VP Portfolio Health Report

← Research Library
Agent: 3-Agent Pipeline
01 · Business Problem
The Problem
A VP of Engineering needs weekly portfolio health reports across 5+ Jira projects. Today this means manually exporting Jira, reviewing 50+ epics for RAG status, writing an exec narrative, formatting slides — 4+ hours of TPM time every week. Plus daily monitoring for escalations happens ad-hoc.
The Solution
A 3-agent automated pipeline:
Daily Jira Monitor — detects changes and emails delta reports
Escalation Agent — identifies Red/Critical triggers, drafts VP-ready escalation emails
Weekly Report Generator — exports Jira → Claude analysis → 5-slide PPTX deck
Total cost: ~$0.05/run
02 · Solution Description
Why Not Manual Reports?
4+ hours of TPM time every week
RAG classification is subjective and inconsistent
Escalations caught too late — after the meeting, not before
No audit trail of what changed between reports
Why 3-Agent Pipeline?
Daily monitoring catches issues within 24 hours
Escalation agent drafts VP emails with specific triggers
Claude generates consistent RAG analysis + exec narrative
Full audit trail via JSON + snapshots
03 · Technical Architecture
Model
Claude
claude-sonnet-4-6
Anthropic SDK
max_tokens=16000
Data
Jira REST API (KAN project)
CSV export
Daily JSON snapshots
Agent 1
jira_monitor.py
Daily delta detection
Email report
Agent 2
escalation_agent.py
Red/Critical triggers
VP email draft
Agent 3
run_weekly_report.py
Jira CSV → Claude → 5-slide PPTX
Output
PPTX deck
JSON audit trail
Escalation emails
04 · System Architecture 3-agent Jira → PPTX pipeline
Daily Pipeline (Agents 1 & 2)
📊
Jira REST API
KAN project · daily pull
1
Jira Monitor · jira_monitor.py
Compares today's snapshot vs yesterday → detects new/changed/resolved issues → emails daily delta report
2
Escalation Agent
escalation_agent.py
Snapshot + meeting notes → Red/Critical triggers → VP escalation email draft
📝
Meeting Notes
meeting_notes.txt
Auto-updated from live Jira data via Claude — 2 items per section (risks, wins, decisions). Fed into both escalation agent & weekly report as context.
📧
Delta Email
Daily change summary
New issues · status changes · priority shifts
Weekly Pipeline (Agent 3)
📄
Jira CSV Export
5+ projects · 50+ epics
📝
meeting_notes.txt
Auto-updated from Jira · risks · wins
3
Weekly Report Generator · run_weekly_report.py
Jira CSV → Claude API (RAG analysis + exec narrative) → pptxgenjs → 5-slide PPTX
claude-sonnet-4-6
5-SLIDE PPTX
VP_Portfolio_YYYY-MM-DD.pptx
Cover · Snapshot · Decisions · Wins · Narrative
JSON AUDIT
VP_Analysis_YYYY-MM-DD.json
Full Claude analysis + RAG data
ESCALATION
escalation_draft.json
VP email draft if triggers fire
meeting_notes.txt — Format & Auto-Update
📄 File Format
## Weekly TPM Sync — YYYY-MM-DD ### Attendees Alice Chen, Tom Nguyen, Sarah Kim... --- ### Risks Raised 1. CLOUD-003 vendor contract unsigned... Owner: Sarah Kim. Likelihood: High. Impact: Critical. Mitigation: escalate to CPO... 2. DATA-001 had 3 pipeline failures... Owner: Data Eng 2. Likelihood: High. Mitigation: freeze upstream changes... --- ### Dependencies Discussed - PROD-002 blocked by CLOUD-003... - SEC-002 shares resources with CLOUD-003... --- ### Key Wins 1. PROD-001 hit 100K beta users... 2. INT-001 CI/CD pipeline 40% faster...
🔄 Auto-Update via Claude
Step 0b in run_weekly_report.py:

Before generating the report, the script calls Claude with the live Jira DataFrame to auto-generate 2 fresh items per section:

Risks Raised — 2 items from overdue/critical issues Dependencies — 2 items from blocked/linked issues Key Wins — 2 items from recently resolved/completed

The updated file is then read by both the escalation agent (context for VP email drafts) and the report generator (risk register slides).
Each entry includes: issue key, description, owner, likelihood, impact, mitigation, and dates — providing full traceability
Agent Manifest
Agent Script Trigger Input Output
Jira Monitorjira_monitor.pyDaily 8:08 AMJira REST API snapshotsDelta email + JSON snapshot
Escalation Agentescalation_agent.pyDaily (after monitor)Jira snapshot + triggersVP escalation email draft
Weekly Reportrun_weekly_report.pyWeekly (manual/scheduled)Jira CSV export5-slide PPTX + JSON analysis
PPTX Slide Contents — 5 Slides
1
Cover— Title, date, project scope
2
Snapshot— RAG KPIs + project-level table (Red/Amber/Green counts per project)
3
Decisions— Escalations, blockers, items needing VP decision
4
Wins + Risk— Completed milestones, upcoming risks, dependency status
5
Narrative— Claude-generated executive summary, 3-5 sentences, VP-ready
Escalation Triggers
New issue with Highest or Critical priority detected
Issue overdue by 3+ days (past due date)
Priority escalated overnight (e.g. Medium → Highest)
3+ overdue issues in the same project area
Scheduled Tasks (Claude Code Routines)
Task Schedule
Jira daily dummy injector7:00 AM daily
Daily portfolio health dashboard report8:08 AM daily
Risk and dependency report8:00 AM Mondays
Environment & Config
API & Model
ANTHROPIC_API_KEY
Model: claude-sonnet-4-6
Anthropic Python SDK
Jira
JIRA_BASE_URL
JIRA_EMAIL
JIRA_API_TOKEN
Email
GMAIL_USER
GMAIL_APP_PASSWORD
SMTP via Gmail
GitHub
Repo: vppuri-vjra/vp-report-generator
GitHub Actions for CI
Output Artifacts
VP_Portfolio_YYYY-MM-DD.pptx 5-slide executive deck
VP_Analysis_YYYY-MM-DD.json Full Claude analysis + RAG data
snapshots/jira_YYYY-MM-DD.json Daily Jira state snapshot
escalation_draft.json VP escalation email draft
Cost
Weekly Report
~$0.05 per run
1,500–2,500 tokens per Claude call
Daily Monitor + Escalation
~$0.02/day
Snapshot comparison + trigger check
End-to-End Flow — 8 Steps
1
Jira API Pull— Fetch current issues from Jira REST API (KAN project), save as JSON snapshot
2
Snapshot Compare— Diff today's snapshot vs yesterday's — detect new issues, status changes, priority shifts
3
Delta Email— Email daily change summary to stakeholders via Gmail SMTP
4
Escalation Check— Scan snapshot for Red/Critical triggers — if any fire, draft VP escalation email
5
CSV Export— Export Jira data as CSV for weekly report generation
6
Claude Analysis— Send CSV to Claude API for RAG classification, risk analysis, and executive narrative generation
7
PPTX Build— Generate 5-slide PPTX deck from Claude's structured analysis using pptxgenjs
8
Auto-Open / Email— Open PPTX locally or email to VP with attached deck and JSON audit trail
Slide Deck Structure — 5 Slides
SLIDE 1 · Cover
VP Portfolio Health Report
June 28, 2026
Projects: KAN, PLAT, INFRA, DATA, MOBILE
Generated by Claude Agent Pipeline
SLIDE 2 · Snapshot
G: 12 A: 5 R: 2
KAN: 8G 2A 1R
PLAT: 4G 3A 1R
INFRA: all green
SLIDE 3 · Decisions
Needs VP Decision:
• KAN-234: API migration blocked on vendor
• PLAT-89: Infra budget increase request
• DATA-156: Schema change timeline
SLIDE 4 · Wins + Risk
Wins:
• MOBILE sprint 8 completed on time
• INFRA migration 100% done
Risks:
• KAN vendor dependency
• DATA team at capacity
SLIDE 5 · Narrative
"Portfolio is largely on track with 12 of 19 epics Green. Two Red items in KAN require VP decision on vendor timeline. INFRA migration completed ahead of schedule. Recommend focusing next sprint on clearing the 5 Amber items before Q3 planning."
Escalation Email Example
To: vp-engineering@company.com
Subject: ESCALATION: 2 Critical Issues Detected — KAN Project
From: portfolio-agent@company.com (automated)

Good morning,

The daily portfolio scan detected 2 escalation triggers requiring your attention:

KAN-234 — API vendor contract expired. Priority escalated from Medium to Highest overnight. Blocking 3 downstream tasks.
KAN-267 — Security patch overdue by 4 days. Originally due June 24. Assigned to: J. Park.

Recommended action: Schedule 15-min sync with KAN lead (K. Matsumoto) to unblock vendor decision.

This email was auto-generated by the Portfolio Health Agent. Full snapshot: snapshots/jira_2026-06-28.json

Delta Report Example — Daily Change Summary
To: tpm-team@company.com
Subject: Daily Portfolio Delta — June 28, 2026
New Issues (3)
KAN-301 — Add rate limiting to public API (Medium, To Do)
PLAT-112 — Dashboard performance regression (High, In Progress)
DATA-170 — ETL pipeline timeout on large datasets (Medium, To Do)
Status Changes (5)
KAN-289 — In Progress → Done
KAN-291 — To Do → In Progress
MOBILE-45 — In Review → Done
MOBILE-48 — To Do → In Progress
INFRA-78 — In Progress → Done
Resolved (2)
KAN-289 — User authentication refactor (completed)
INFRA-78 — Database migration to v3 (completed)