Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsBlogPro
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges
  • Chrome Extension
  • Skill Manager

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Tprm Issue Summarization

ASecurity

Summarize Third-Party Risk Management issues including vendor risk exposure, assessment gaps, remediation status, and compliance impact across the TPRM lifecycle

15 stars
0 votes
0 copies
0 views
Added 6/7/2026
ai-agentsgobashgitapisecuritydocumentation

Works with

claude codeapimcp

Security Analysis

A100/100

Scanned 6/7/2026

$npx -y skills add ThomasMoreAI/legal-skills-open --skill tprm-issue-summarization --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Tprm Issue Summarization?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Tprm Issue Summarization
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/thomasmoreai-tprm-issue-summarization/badge)](https://www.skillsdirectory.com/skills/thomasmoreai-tprm-issue-summarization)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
Files
SKILL.md
---
name: tprm-issue-summarization
title: TPRM Issue Summarization
description: Summarize Third-Party Risk Management issues including vendor risk exposure, assessment gaps, remediation status, and compliance impact across the TPRM lifecycle
author: Happy-Technologies-LLC
author_url: https://github.com/Happy-Technologies-LLC/happy-platform-skills/tree/main/skills/grc/tprm-issue-summarization
license: Apache-2.0
version: 0.1.0
execution_mode: open
jurisdiction: general
practice: regulatory
language: en
tags: [grc, tprm, vendor-risk, third-party, assessment, remediation, compliance, risk-exposure]
---

# TPRM Issue Summarization

## Overview

This skill generates comprehensive summaries of Third-Party Risk Management (TPRM) issues in ServiceNow. It covers:

- Aggregating TPRM issues by vendor, risk tier, and assessment cycle
- Evaluating vendor risk exposure across security, operational, financial, and compliance dimensions
- Identifying assessment gaps where vendors lack current or complete assessments
- Tracking remediation status for open findings and overdue corrective actions
- Measuring compliance impact by mapping vendor issues to regulatory requirements
- Producing executive-ready dashboards for vendor risk committees

**When to use:**
- Preparing for vendor risk committee meetings or board reporting
- During annual or periodic third-party assessment reviews
- When onboarding new vendors and evaluating risk posture
- After a vendor security incident requiring rapid exposure analysis
- For regulatory examinations requiring third-party risk documentation

## Prerequisites

- **Roles:** `sn_tprm.viewer`, `sn_tprm.manager`, `sn_grc.manager`, or `admin`
- **Plugins:** `com.sn_tprm` (Third-Party Risk Management), `com.sn_grc`
- **Access:** Read access to sn_tprm_assessment, sn_tprm_issue, sn_tprm_vendor_assessment, sn_grc_profile, core_company tables
- **Knowledge:** Understanding of vendor risk tiering methodology and organizational third-party risk appetite

## Key TPRM Tables

| Table | Purpose | Key Fields |
|-------|---------|------------|
| `sn_tprm_assessment` | TPRM assessment records | number, short_description, state, assessment_type, vendor, risk_tier, due_date, score |
| `sn_tprm_issue` | Issues found during assessments | number, short_description, state, priority, vendor, assessment, remediation_plan, due_date |
| `sn_tprm_vendor_assessment` | Vendor-level assessment rollups | vendor, assessment_status, overall_risk, last_assessment_date, next_assessment_date |
| `core_company` | Vendor/company master records | name, sys_id, vendor_type, stock_symbol, city, state, country |
| `sn_grc_profile` | GRC profile linked to vendors | number, short_description, profile_type, applies_to |
| `sn_grc_risk` | Risk records associated with vendor profiles | number, risk_score, state, treatment, residual_risk, inherent_risk |

## Procedure

### Step 1: Retrieve Open TPRM Issues

Query all active TPRM issues to establish the current issue landscape.

**Using MCP (Claude Code/Desktop):**
```
Tool: SN-Query-Table
Parameters:
  table_name: sn_tprm_issue
  query: active=true^ORDERBYDESCpriority
  fields: sys_id,number,short_description,description,state,priority,vendor,assessment,remediation_plan,due_date,assigned_to,category,risk_rating,sys_created_on
  limit: 200
```

**Using REST API:**
```bash
GET /api/now/table/sn_tprm_issue?sysparm_query=active=true^ORDERBYDESCpriority&sysparm_fields=sys_id,number,short_description,description,state,priority,vendor,assessment,remediation_plan,due_date,assigned_to,category,risk_rating&sysparm_limit=200&sysparm_display_value=true
```

### Step 2: Gather Vendor Assessment Context

For each vendor with issues, retrieve their assessment history and current risk posture.

**Using MCP:**
```
Tool: SN-Query-Table
Parameters:
  table_name: sn_tprm_vendor_assessment
  query: vendor=[vendor_sys_id]
  fields: sys_id,vendor,assessment_status,overall_risk,last_assessment_date,next_assessment_date,risk_tier,assessment_score
  limit: 10
```

**Using REST API:**
```bash
GET /api/now/table/sn_tprm_vendor_assessment?sysparm_query=vendor=[vendor_sys_id]&sysparm_fields=sys_id,vendor,assessment_status,overall_risk,last_assessment_date,next_assessment_date,risk_tier,assessment_score&sysparm_limit=10&sysparm_display_value=true
```

### Step 3: Identify Assessment Gaps

Find vendors with overdue or missing assessments to highlight blind spots.

**Using MCP:**
```
Tool: SN-Execute-Background-Script
Parameters:
  script: |
    var gaps = [];
    var va = new GlideRecord('sn_tprm_vendor_assessment');
    va.addQuery('next_assessment_date', '<', new GlideDateTime().toString());
    va.addOrCondition('assessment_status', 'incomplete');
    va.addOrCondition('assessment_status', 'not_started');
    va.query();

    while (va.next()) {
      var vendor = new GlideRecord('core_company');
      vendor.get(va.vendor);
      gaps.push({
        vendor_name: vendor.name.toString(),
        vendor_sys_id: va.vendor.toString(),
        assessment_status: va.assessment_status.getDisplayValue(),
        overall_risk: va.overall_risk.getDisplayValue(),
        risk_tier: va.risk_tier.getDisplayValue(),
        last_assessment: va.last_assessment_date.toString(),
        next_assessment: va.next_assessment_date.toString(),
        days_overdue: gs.dateDiff(va.next_assessment_date.toString(), new GlideDateTime().toString(), true)
      });
    }

    gs.info('ASSESSMENT GAPS (' + gaps.length + ' vendors):\n' + JSON.stringify(gaps, null, 2));
  description: "TPRM: Identify vendors with overdue or incomplete assessments"
```

### Step 4: Generate Vendor Risk Exposure Summary

Produce aggregate metrics across all vendors and risk tiers.

**Using MCP:**
```
Tool: SN-Execute-Background-Script
Parameters:
  script: |
    var summary = {
      generated_date: new GlideDateTime().toString(),
      issue_overview: { total_open: 0, critical: 0, high: 0, medium: 0, low: 0, overdue: 0 },
      by_vendor: {},
      by_category: {},
      remediation_status: { with_plan: 0, without_plan: 0, plan_overdue: 0 },
      assessment_coverage: { total_vendors: 0, assessed_current: 0, assessed_overdue: 0, never_assessed: 0 },
      risk_tier_distribution: {}
    };

    var now = new GlideDateTime();

    // Issue metrics
    var gr = new GlideRecord('sn_tprm_issue');
    gr.addQuery('active', true);
    gr.query();
    while (gr.next()) {
      summary.issue_overview.total_open++;
      var pri = gr.priority.toString();
      if (pri == '1') summary.issue_overview.critical++;
      else if (pri == '2') summary.issue_overview.high++;
      else if (pri == '3') summary.issue_overview.medium++;
      else summary.issue_overview.low++;

      if (gr.due_date.toString() && new GlideDateTime(gr.due_date.toString()).compareTo(now) < 0) {
        summary.issue_overview.overdue++;
      }

      var vendorName = gr.vendor.getDisplayValue() || 'Unknown';
      summary.by_vendor[vendorName] = (summary.by_vendor[vendorName] || 0) + 1;

      var cat = gr.category.getDisplayValue() || 'Uncategorized';
      summary.by_category[cat] = (summary.by_category[cat] || 0) + 1;

      if (gr.remediation_plan.toString()) {
        summary.remediation_status.with_plan++;
        if (gr.due_date.toString() && new GlideDateTime(gr.due_date.toString()).compareTo(now) < 0) {
          summary.remediation_status.plan_overdue++;
        }
      } else {
        summary.remediation_status.without_plan++;
      }
    }

    // Assessment coverage
    var va = new GlideRecord('sn_tprm_vendor_assessment');
    va.query();
    while (va.next()) {
      summary.assessment_coverage.total_vendors++;
      var tier = va.risk_tier.getDisplayValue() || 'Untiered';
      summary.risk_tier_distribution[tier] = (summary.risk_tier_distribution[tier] || 0) + 1;

      if (!va.last_assessment_date.toString()) {
        summary.assessment_coverage.never_assessed++;
      } else if (va.next_assessment_date.toString() && new GlideDateTime(va.next_assessment_date.toString()).compareTo(now) < 0) {
        summary.assessment_coverage.assessed_overdue++;
      } else {
        summary.assessment_coverage.assessed_current++;
      }
    }

    gs.info('TPRM EXECUTIVE SUMMARY:\n' + JSON.stringify(summary, null, 2));
  description: "TPRM: Generate executive risk exposure summary"
```

### Step 5: Analyze Remediation Effectiveness

Evaluate how effectively issues are being remediated across the vendor portfolio.

**Using MCP:**
```
Tool: SN-Execute-Background-Script
Parameters:
  script: |
    var remediation = {
      avg_days_to_close: 0,
      closed_on_time: 0,
      closed_late: 0,
      still_open_on_time: 0,
      still_open_overdue: 0,
      top_overdue_vendors: []
    };

    var now = new GlideDateTime();
    var closedDays = [];

    // Closed issues - resolution time
    var closed = new GlideRecord('sn_tprm_issue');
    closed.addQuery('active', false);
    closed.addQuery('closed_at', '>=', gs.daysAgo(180));
    closed.query();
    while (closed.next()) {
      var created = new GlideDateTime(closed.sys_created_on.toString());
      var closedAt = new GlideDateTime(closed.closed_at.toString());
      var days = gs.dateDiff(created.toString(), closedAt.toString(), true);
      closedDays.push(parseInt(days));

      if (closed.due_date.toString() && closedAt.compareTo(new GlideDateTime(closed.due_date.toString())) <= 0) {
        remediation.closed_on_time++;
      } else {
        remediation.closed_late++;
      }
    }

    if (closedDays.length > 0) {
      var total = 0;
      for (var i = 0; i < closedDays.length; i++) total += closedDays[i];
      remediation.avg_days_to_close = Math.round(total / closedDays.length);
    }

    // Open issues - on-time vs overdue
    var vendorOverdue = {};
    var open = new GlideRecord('sn_tprm_issue');
    open.addQuery('active', true);
    open.query();
    while (open.next()) {
      if (open.due_date.toString() && new GlideDateTime(open.due_date.toString()).compareTo(now) < 0) {
        remediation.still_open_overdue++;
        var v = open.vendor.getDisplayValue() || 'Unknown';
        vendorOverdue[v] = (vendorOverdue[v] || 0) + 1;
      } else {
        remediation.still_open_on_time++;
      }
    }

    // Sort vendors by overdue count
    var sorted = Object.keys(vendorOverdue).sort(function(a, b) { return vendorOverdue[b] - vendorOverdue[a]; });
    for (var j = 0; j < Math.min(5, sorted.length); j++) {
      remediation.top_overdue_vendors.push({ vendor: sorted[j], overdue_count: vendorOverdue[sorted[j]] });
    }

    gs.info('REMEDIATION ANALYSIS:\n' + JSON.stringify(remediation, null, 2));
  description: "TPRM: Analyze remediation effectiveness across vendor portfolio"
```

### Step 6: Generate Compliance Impact Narrative

Search for issues with regulatory or compliance implications.

**Using MCP:**
```
Tool: SN-Natural-Language-Search
Parameters:
  table_name: sn_tprm_issue
  query: "third-party vendor issues related to data privacy, GDPR, SOC 2, regulatory compliance, or security controls"
  limit: 30
```

**Post the summary as work notes:**
```
Tool: SN-Add-Work-Notes
Parameters:
  table_name: sn_tprm_vendor_assessment
  sys_id: [vendor_assessment_sys_id]
  work_notes: |
    === TPRM ISSUE SUMMARY ===
    Vendor: [vendor_name]
    Report Date: [current_date]
    Risk Tier: [tier]

    OPEN ISSUES: [count] ([critical] critical, [high] high)
    OVERDUE ISSUES: [overdue_count]

    ASSESSMENT STATUS:
    - Last Completed: [date]
    - Next Due: [date]
    - Coverage Gaps: [gap_details]

    COMPLIANCE IMPACT:
    - Regulatory Findings: [count]
    - Affected Frameworks: [SOC 2, GDPR, HIPAA, etc.]
    - Remediation Timeline: [estimated_completion]

    RECOMMENDED ACTIONS:
    1. [action_1]
    2. [action_2]
    3. [action_3]
```

## Tool Usage

| Operation | MCP Tool | REST Endpoint |
|-----------|----------|---------------|
| Query TPRM Issues | SN-Query-Table | GET /api/now/table/sn_tprm_issue |
| Search Issues by Theme | SN-Natural-Language-Search | N/A |
| Query Assessments | SN-Query-Table | GET /api/now/table/sn_tprm_assessment |
| Query Vendor Assessments | SN-Query-Table | GET /api/now/table/sn_tprm_vendor_assessment |
| Aggregate Analysis | SN-Execute-Background-Script | POST /api/now/table/sys_trigger |
| Schema Discovery | SN-Discover-Table-Schema | GET /api/now/table/sys_dictionary |
| Post Summary Notes | SN-Add-Work-Notes | PATCH /api/now/table/{table}/{sys_id} |

## Best Practices

- **Risk Tiering:** Always segment vendor analysis by risk tier (critical, high, medium, low) to prioritize attention and resources appropriately
- **Assessment Currency:** Flag any Tier 1 or Tier 2 vendor whose assessment is more than 12 months old as an immediate gap
- **Remediation SLAs:** Define clear remediation timelines by issue severity: Critical (30 days), High (60 days), Medium (90 days), Low (180 days)
- **Trend Analysis:** Include quarter-over-quarter trends to show whether the vendor risk posture is improving or degrading
- **Concentration Risk:** Highlight vendors with disproportionate numbers of open issues, which may indicate systemic risk management failures
- **Fourth-Party Awareness:** Note any vendor issues that stem from their subcontractors or fourth-party dependencies
- **Regulatory Mapping:** Map TPRM issues to specific regulatory requirements (OCC, FFIEC, GDPR) for examination readiness

## Troubleshooting

### Empty Vendor Assessment Records

**Symptom:** sn_tprm_vendor_assessment returns no results for known vendors
**Cause:** Vendor assessments may use a different relationship model or the vendor record is in core_company but not linked to TPRM
**Solution:**
```
Tool: SN-Discover-Table-Schema
Parameters:
  table_name: sn_tprm_vendor_assessment
```
Verify the vendor reference field name. Some configurations use `entity` or `company` instead of `vendor`.

### Assessment Score Fields Return Null

**Symptom:** Assessment scores are empty despite completed assessments
**Cause:** Scoring may be calculated at the questionnaire response level, not stored on the assessment record
**Solution:** Query `sn_tprm_assessment` with the assessment sys_id to check for child questionnaire records or `asmt_metric_result` entries that hold the computed scores.

### Issue-to-Vendor Linkage Missing

**Symptom:** Issues show no vendor association in query results
**Cause:** Issues may be linked via the assessment record rather than directly to the vendor
**Solution:** Join through the assessment reference: query the issue's `assessment` field, then read the assessment record to find its `vendor` field.

## Examples

### Example 1: Quarterly Vendor Risk Committee Report

**Scenario:** VP of Risk needs a portfolio-wide TPRM summary for the quarterly committee meeting.

```
Tool: SN-Natural-Language-Search
Parameters:
  table_name: sn_tprm_issue
  query: "all open third-party risk issues with critical or high priority updated in the last quarter"
  limit: 50
```

**Generated Summary:**
- **Total Open Issues:** 83 across 34 vendors (down from 91 last quarter)
- **Critical/High Priority:** 18 issues requiring immediate attention
- **Overdue Remediation:** 12 issues past due date (14% overdue rate)
- **Top Risk Category:** Data Security (28 issues, 34%)
- **Assessment Coverage:** 92% of Tier 1 vendors current; 3 Tier 1 vendors overdue
- **Average Remediation Time:** 47 days (target: 30 days for critical)
- **Recommendation:** Escalate 3 Tier 1 vendors with overdue critical findings; initiate reassessment for 5 vendors approaching annual review

### Example 2: Vendor-Specific Deep Dive After Incident

**Scenario:** A critical vendor reported a data breach; need immediate risk exposure summary.

```
Tool: SN-Query-Table
Parameters:
  table_name: sn_tprm_issue
  query: vendor=[vendor_sys_id]^active=true
  fields: sys_id,number,short_description,state,priority,category,due_date,remediation_plan
  limit: 50
```

**Generated Detail:**
- **Vendor:** DataCorp International (Tier 1 - Critical)
- **Open Issues:** 7 (2 critical, 3 high, 2 medium)
- **Pre-Existing Security Issues:** 3 issues related to access controls and encryption
- **Last Assessment:** 2025-11-15 (Score: 62/100 - Below Acceptable Threshold)
- **Overdue Remediations:** 2 critical findings past 90-day SLA
- **Compliance Impact:** SOC 2 Type II gaps; GDPR Article 28 processor requirements unmet
- **Recommended Actions:** Invoke contractual audit rights; require 30-day remediation plan; evaluate alternative vendors

## Related Skills

- `grc/issue-summarization` - General GRC issue summarization for broader risk context
- `grc/risk-assessment-summarization` - Deep risk analysis behind vendor risk scores
- `grc/regulatory-alert-analysis` - Monitor regulatory changes affecting third-party requirements
- `grc/control-objective-management` - Manage controls mapped to vendor risk areas
- `security/audit-compliance` - Audit trail and compliance reporting for vendor assessments

## References

- [ServiceNow TPRM Documentation](https://docs.servicenow.com/bundle/utah-governance-risk-compliance/page/product/third-party-risk-management/concept/tprm-overview.html)
- [OCC Third-Party Risk Management Guidance](https://www.occ.gov/topics/supervision-and-examination/third-party-relationships/index-third-party-relationships.html)
- [NIST SP 800-161 Supply Chain Risk Management](https://csrc.nist.gov/publications/detail/sp/800-161/rev-1/final)

Attribution

ThomasMoreAIThomasMoreAI
View sourceSee grades on GitHubMore from ThomasMoreAI →
SSkills Directory ProSkills Directory

Get any skill into Claude in one click.

Download any skill as a ZIP for Claude.ai, Claude Desktop, or .claude/skills. $9/mo.

See Pro

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills Directory ProSkills Directory

Get any skill into Claude in one click.

Download any skill as a ZIP for Claude.ai, Claude Desktop, or .claude/skills. $9/mo.

See Pro

Related Skills

Caveman

Terse caveman voice: answer first, fluff gone, every technical fact kept. Use for /caveman, "caveman mode", "talk like caveman", "be brief", "less tokens". Stays on until "stop caveman" or "normal mode".

1100021 votes

Hyperplan

Adversarial multi-agent planning skill. Self-orchestrates 5 hostile category members (unspecified-low, unspecified-high, deep, ultrabrain, artistry) via team-mode for ruthless cross-critique debate, distills only the defensible insights, then MANDATORILY hands the distilled insight bundle to the `plan` agent for executable plan formalization. Use when planning needs maximum rigor and surfacing of weak assumptions, blind spots, and over-engineering. Triggers: 'hyperplan', 'hpp', '/hyperplan', ...

698431 votes

Writing Skills

Create and manage Claude Code skills in HASH repository following Anthropic best practices. Use when creating new skills, modifying skill-rules.json, understanding trigger patterns, working with hooks, debugging skill activation, or implementing progressive disclosure. Covers skill structure, YAML frontmatter, trigger types (keywords, intent patterns), UserPromptSubmit hook, and the 500-line rule. Includes validation and debugging with SKILL_DEBUG. Examples include rust-error-stack, cargo-dep...

3931 votes

Mcp Code Execution

Routes multi-tool workflows through MCP servers for large datasets and pipelines. Use when Bash tool overhead is limiting throughput on data-heavy tasks.

3421 votes

catchup

Recovers the conversation and failed tool calls of a previous Codex, Amp, Claude Code, Antigravity, Cline, Copilot CLI, Cursor, DeepSeek Harness, Grok Build, Kimi, OpenCode, Pi Agent, or ZCode session. Use when the user says "catch up", "what did the last session do", "get me up to speed", "I switched agents", asks to recover/summarize a previous session before continuing, or asks to diagnose or report a catchup failure. Do NOT use for the current conversation, git history, or any non-agent log.

741 votes
View all in ai-agents →