skills/spm/project-insights/SKILL.md
Generate project health insights including schedule variance, resource utilization, risk indicators, milestone tracking, and executive dashboard summaries
npx skillsauth add happy-technologies-llc/happy-servicenow-skills project-insightsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill enables you to generate comprehensive project health insights from ServiceNow's Strategic Portfolio Management (SPM) module. It covers:
When to use: When project managers, PMO leaders, or executives need a data-driven assessment of project health, portfolio status, or sprint performance in ServiceNow SPM.
com.snc.project (Project Portfolio Management), com.snc.sdlc.agile.2.0 (Agile Development 2.0)project_manager, program_manager, portfolio_manager, or adminpm_project, pm_project_task, planned_task, pm_resource_plan, rm_story, rm_sprint, risk tablesFetch the core project record and its current status.
Using MCP (Claude Code/Desktop):
Tool: SN-Read-Record
Parameters:
table_name: pm_project
sys_id: [project_sys_id]
fields: sys_id,number,short_description,description,state,phase,priority,risk,percent_complete,start_date,end_date,actual_start_date,actual_end_date,work_start,work_end,schedule_variance,cost_variance,budget_cost,actual_cost,project_manager,program,portfolio,business_unit,health,health_reason
If you only have the project number:
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: pm_project
query: number=PRJ0010001
fields: sys_id,number,short_description,state,phase,percent_complete,start_date,end_date,actual_start_date,schedule_variance,cost_variance,budget_cost,actual_cost,project_manager,health,risk
limit: 1
Using REST API:
GET /api/now/table/pm_project?sysparm_query=number=PRJ0010001&sysparm_fields=sys_id,number,short_description,state,phase,percent_complete,start_date,end_date,actual_start_date,schedule_variance,cost_variance,budget_cost,actual_cost,project_manager,health,risk&sysparm_limit=1&sysparm_display_value=true
Query project tasks to identify overdue, at-risk, and on-track items.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: pm_project_task
query: parent=[project_sys_id]^stateNOT IN3,4,7^end_date<javascript:gs.nowDateTime()
fields: sys_id,number,short_description,state,percent_complete,start_date,end_date,actual_start_date,actual_end_date,assigned_to,priority,milestone
limit: 50
Using REST API:
GET /api/now/table/pm_project_task?sysparm_query=parent=[project_sys_id]^stateNOT IN3,4,7^end_date<javascript:gs.nowDateTime()&sysparm_fields=sys_id,number,short_description,state,percent_complete,start_date,end_date,assigned_to,priority,milestone&sysparm_limit=50&sysparm_display_value=true
Query upcoming tasks due within the next 14 days:
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: pm_project_task
query: parent=[project_sys_id]^stateNOT IN3,4,7^end_date>=javascript:gs.nowDateTime()^end_date<=javascript:gs.daysAgoEnd(-14)
fields: sys_id,number,short_description,state,percent_complete,end_date,assigned_to,priority,milestone
limit: 30
Using REST API:
GET /api/now/table/pm_project_task?sysparm_query=parent=[project_sys_id]^stateNOT IN3,4,7^end_date>=javascript:gs.nowDateTime()^end_date<=javascript:gs.daysAgoEnd(-14)&sysparm_fields=sys_id,number,short_description,state,percent_complete,end_date,assigned_to,priority&sysparm_limit=30&sysparm_display_value=true
Query resource plans to understand allocation versus actual effort.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: pm_resource_plan
query: task=[project_sys_id]^state=2
fields: sys_id,resource,planned_hours,actual_hours,remaining_hours,utilization,start_date,end_date,resource_type,group
limit: 50
Using REST API:
GET /api/now/table/pm_resource_plan?sysparm_query=task=[project_sys_id]^state=2&sysparm_fields=sys_id,resource,planned_hours,actual_hours,remaining_hours,utilization,start_date,end_date,resource_type,group&sysparm_limit=50&sysparm_display_value=true
Calculate utilization metrics:
actual_hours > planned_hoursutilization < 50%Query the risk table for project-specific risks and issues.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: risk
query: task=[project_sys_id]^state!=6
fields: sys_id,number,short_description,category,risk_score,probability,impact,state,response,assigned_to,due_date,mitigation_plan
limit: 20
Using REST API:
GET /api/now/table/risk?sysparm_query=task=[project_sys_id]^state!=6&sysparm_fields=sys_id,number,short_description,category,risk_score,probability,impact,state,response,assigned_to,due_date,mitigation_plan&sysparm_limit=20&sysparm_display_value=true
Query milestone tasks to assess progress against key deliverables.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: pm_project_task
query: parent=[project_sys_id]^milestone=true^ORDERBYend_date
fields: sys_id,number,short_description,state,percent_complete,end_date,actual_end_date,assigned_to,priority
limit: 20
Using REST API:
GET /api/now/table/pm_project_task?sysparm_query=parent=[project_sys_id]^milestone=true^ORDERBYend_date&sysparm_fields=sys_id,number,short_description,state,percent_complete,end_date,actual_end_date,assigned_to,priority&sysparm_limit=20&sysparm_display_value=true
For projects using Agile methodology, query sprint and story data.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: rm_sprint
query: release.product.project=[project_sys_id]^state=3^ORDERBYDESCend_date
fields: sys_id,number,short_description,start_date,end_date,story_points,capacity,state
limit: 5
Query completed stories per sprint to calculate velocity:
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: rm_story
query: sprint=[sprint_sys_id]^state=3
fields: sys_id,number,story_points,state,sprint
limit: 100
Using REST API:
GET /api/now/table/rm_story?sysparm_query=sprint=[sprint_sys_id]^state=3&sysparm_fields=sys_id,number,story_points,state&sysparm_limit=100
Calculate velocity: Sum of story_points for completed stories in each sprint. Average the last 3-5 sprints for a reliable velocity metric.
Assemble all collected data into a structured health report:
=== PROJECT HEALTH DASHBOARD ===
Project: PRJ0010001 - Cloud Migration Phase 2
Manager: Sarah Chen | Program: Digital Transformation
Phase: Execution | Health: [Green/Yellow/Red]
SCHEDULE PERFORMANCE:
Planned End: 2026-06-30 | Projected End: 2026-07-15
Schedule Variance: +15 days (at risk)
Tasks Overdue: 4 of 32 (12.5%)
Tasks Due Next 14 Days: 7
Milestones Completed: 3 of 8 (37.5%)
Next Milestone: "Integration Testing Complete" due 2026-04-01
COST PERFORMANCE:
Budget: $450,000 | Actual Spend: $285,000 (63.3%)
Cost Variance: -$12,000 (under budget)
Burn Rate: $47,500/month
Projected Total: $427,500
RESOURCE UTILIZATION:
Total Resources: 12
Over-allocated (>100%): 2 (John D. 120%, Maria S. 115%)
Under-utilized (<50%): 1 (Alex K. 35%)
Average Utilization: 82%
RISK SUMMARY:
Open Risks: 5 (2 High, 2 Medium, 1 Low)
Top Risk: "Vendor API deprecation" (Score: 16, Impact: High)
Overdue Mitigations: 1
AGILE VELOCITY (Last 3 Sprints):
Sprint 14: 34 pts | Sprint 15: 38 pts | Sprint 16: 31 pts
Average Velocity: 34.3 pts/sprint
Remaining Backlog: 142 pts
Projected Sprints to Complete: 4.1 sprints
RECOMMENDATIONS:
1. [URGENT] Address 4 overdue tasks blocking Integration Testing milestone
2. [ACTION] Rebalance workload from John D. and Maria S. to Alex K.
3. [MONITOR] Vendor API deprecation risk - mitigation plan overdue
4. [PLAN] At current velocity, backlog completion extends 1 sprint beyond plan
For PMO leaders, aggregate project health across the portfolio.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: pm_project
query: portfolio=[portfolio_sys_id]^stateNOT IN-5,3,4
fields: sys_id,number,short_description,state,phase,health,percent_complete,schedule_variance,cost_variance,budget_cost,actual_cost,risk,project_manager,end_date
limit: 50
Using REST API:
GET /api/now/table/pm_project?sysparm_query=portfolio=[portfolio_sys_id]^stateNOT IN-5,3,4&sysparm_fields=sys_id,number,short_description,state,phase,health,percent_complete,schedule_variance,cost_variance,budget_cost,actual_cost,risk,project_manager,end_date&sysparm_limit=50&sysparm_display_value=true
| Tool | When to Use |
|------|-------------|
| SN-Read-Record | Retrieve a single project or task record by sys_id |
| SN-Query-Table | Query tasks, resources, risks, milestones, sprints, and stories |
| SN-NL-Search | Natural language search for projects (e.g., "find at-risk projects in Q2") |
| SN-Aggregate | Calculate counts, sums, and averages across project data |
| Endpoint | Method | Purpose |
|----------|--------|---------|
| /api/now/table/pm_project | GET | Query project records and portfolio data |
| /api/now/table/pm_project_task | GET | Query tasks, milestones, schedule data |
| /api/now/table/pm_resource_plan | GET | Resource allocation and utilization |
| /api/now/table/risk | GET | Project risks and mitigations |
| /api/now/table/rm_sprint | GET | Sprint data for velocity calculations |
| /api/now/table/rm_story | GET | Story completion for burndown metrics |
| /api/now/table/pm_portfolio | GET | Portfolio-level aggregation |
| /api/now/table/pm_program | GET | Program-level project grouping |
sysparm_display_value=true in REST calls for readable output in dashboardspercent_complete * budget_cost to derive earned value for EVM analysissys_updated_on timestamps to ensure metrics reflect current stateCause: Percent complete may be calculated from planned duration, not task completion
Solution: Check the project's percent_complete_method field. Options include "manual," "task-based," and "duration-based." Verify task states are correctly updated.
Cause: Resource plan records may not have actuals logged
Solution: Verify that time entries are being recorded against the project tasks. Check actual_hours on pm_resource_plan records.
Cause: Risks may be linked via the task field to project tasks rather than the project itself
Solution: Query with task.parent=[project_sys_id] to find risks linked to child tasks. Also check risk_condition for auto-generated risk records.
Cause: Stories may be moved between sprints or completed after sprint closure
Solution: Filter for stories where sprint matches the target sprint and state=3 (Complete). Exclude stories moved out via sprint_changed field if available.
Step 1 - Gather data:
Tool: SN-Query-Table
Parameters:
table_name: pm_project
query: number=PRJ0010042
fields: sys_id,number,short_description,state,phase,health,percent_complete,schedule_variance,budget_cost,actual_cost,project_manager,end_date
limit: 1
Step 2 - Get overdue tasks:
Tool: SN-Query-Table
Parameters:
table_name: pm_project_task
query: parent=[sys_id]^state=2^end_date<javascript:gs.nowDateTime()
fields: number,short_description,end_date,assigned_to,priority
limit: 10
Output:
WEEKLY STATUS - PRJ0010042 ERP Upgrade
Report Date: 2026-03-19
Health: YELLOW | Phase: Testing | Complete: 72%
Schedule: 8 days behind plan | Budget: $12K under budget
KEY ISSUES:
- 3 overdue tasks in Integration Testing phase
- UAT environment provisioning delayed by vendor
MILESTONES:
[DONE] Requirements Complete (Feb 15)
[DONE] Development Complete (Mar 01)
[LATE] Integration Testing (Due Mar 10, now projected Mar 22)
[UPCOMING] UAT Sign-off (Due Apr 05)
[UPCOMING] Go-Live (Due Apr 30)
ACTIONS NEEDED:
1. Escalate vendor environment issue to procurement
2. Add 2 QA resources for parallel testing
Tool: SN-Query-Table
Parameters:
table_name: pm_project
query: portfolio.short_description=Digital Transformation^stateNOT IN-5,3,4
fields: number,short_description,health,percent_complete,schedule_variance,budget_cost,actual_cost,end_date,project_manager
limit: 20
Output:
PORTFOLIO DASHBOARD - Digital Transformation
Active Projects: 8 | Total Budget: $3.2M
HEALTH DISTRIBUTION:
Green: 5 projects (62.5%)
Yellow: 2 projects (25.0%)
Red: 1 project (12.5%)
AT-RISK PROJECTS:
[RED] PRJ0010042 - ERP Upgrade (8 days behind, vendor dependency)
[YELLOW] PRJ0010055 - API Gateway (resource constraints)
[YELLOW] PRJ0010061 - Data Lake (scope change pending approval)
BUDGET SUMMARY:
Allocated: $3,200,000
Spent: $1,890,000 (59.1%)
Projected: $3,050,000 (4.7% under budget)
spm/agile-story-generation - Generate and manage user storiesspm/planning-summarization - Summarize planning sessions and portfolio decisionsspm/feedback-summarization - Analyze retrospective and stakeholder feedbackreporting/executive-dashboard - Build executive dashboards and visualizationsreporting/trend-analysis - Trend analysis for project metrics over timetesting
Manage supplier onboarding, qualification, performance monitoring, and offboarding with auditable lifecycle controls
tools
Identify emerging risks, prioritize intake signals, and route candidates into formal GRC risk assessment workflows
documentation
Screen inbound documents for completeness, policy risk, and routing readiness before extraction or case workflows
testing
Generate concise task summaries with status, timeline, blockers, SLA risk, and recommended next actions