skills/hrsd/sidebar-summarization/SKILL.md
Generate sidebar discussion summaries for HR cases with key decision points, stakeholder input, and next actions
npx skillsauth add happy-technologies-llc/happy-servicenow-skills hr-sidebar-summarizationInstall 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 provides a structured approach to generating concise sidebar summaries for HR service delivery cases. It covers:
When to use: When HR cases have extensive discussion threads and agents need a quick overview of what has been discussed, decided, and what remains to be done. Particularly valuable during shift handoffs, manager escalations, or when multiple HR specialists collaborate on a case.
Plugin required: com.sn_hr_core (HR Service Delivery Core)
sn_hr_core.case_reader, sn_hr_core.case_writer, or sn_hr_core.adminsn_hr_core_case, sys_journal_field, sys_auditcom.sn_hr_core must be activatedPull the case header information to establish context.
Using MCP:
Tool: SN-Get-Record
Parameters:
table_name: sn_hr_core_case
sys_id: [case_sys_id]
fields: sys_id,number,short_description,description,state,priority,hr_service,subject_person,subject_person.name,assigned_to,assignment_group,opened_at,sys_updated_on,escalation,active
Using REST API:
GET /api/now/table/sn_hr_core_case/[case_sys_id]?sysparm_fields=sys_id,number,short_description,description,state,priority,hr_service,subject_person,assigned_to,assignment_group,opened_at,sys_updated_on,escalation,active&sysparm_display_value=true
Retrieve all journal entries (work notes and additional comments) for the case.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: sys_journal_field
query: element_id=[case_sys_id]^name=sn_hr_core_case^elementINwork_notes,comments^ORDERBYsys_created_on
fields: sys_id,element,value,sys_created_by,sys_created_on
limit: 100
Using REST API:
GET /api/now/table/sys_journal_field?sysparm_query=element_id=[case_sys_id]^name=sn_hr_core_case^elementINwork_notes,comments^ORDERBYsys_created_on&sysparm_fields=sys_id,element,value,sys_created_by,sys_created_on&sysparm_display_value=true&sysparm_limit=100
Pull associated HR tasks that provide additional context on actions taken.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: sn_hr_core_task
query: parent=[case_sys_id]^ORDERBYsys_created_on
fields: sys_id,number,short_description,state,assigned_to,opened_at,closed_at,close_notes,work_notes
limit: 20
Using REST API:
GET /api/now/table/sn_hr_core_task?sysparm_query=parent=[case_sys_id]^ORDERBYsys_created_on&sysparm_fields=sys_id,number,short_description,state,assigned_to,opened_at,closed_at,close_notes,work_notes&sysparm_display_value=true&sysparm_limit=20
Review the audit trail to understand how the case progressed.
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: sys_audit
query: tablename=sn_hr_core_case^documentkey=[case_sys_id]^fieldnameINstate,priority,assigned_to,assignment_group,escalation^ORDERBYsys_created_on
fields: sys_id,fieldname,oldvalue,newvalue,user,sys_created_on
limit: 50
Using REST API:
GET /api/now/table/sys_audit?sysparm_query=tablename=sn_hr_core_case^documentkey=[case_sys_id]^fieldnameINstate,priority,assigned_to,assignment_group,escalation^ORDERBYsys_created_on&sysparm_fields=sys_id,fieldname,oldvalue,newvalue,user,sys_created_on&sysparm_display_value=true&sysparm_limit=50
Compile the extracted data into a structured sidebar summary.
Using MCP:
Tool: SN-Execute-Background-Script
Parameters:
description: Generate a structured sidebar summary for an HR case
script: |
var caseId = '[case_sys_id]';
gs.info('=== HR CASE SIDEBAR SUMMARY ===');
// Case header
var caseGr = new GlideRecord('sn_hr_core_case');
caseGr.get(caseId);
gs.info('Case: ' + caseGr.number + ' | ' + caseGr.short_description);
gs.info('State: ' + caseGr.state.getDisplayValue() + ' | Priority: ' + caseGr.priority.getDisplayValue());
gs.info('Subject: ' + caseGr.subject_person.getDisplayValue());
gs.info('Assigned: ' + caseGr.assigned_to.getDisplayValue() + ' (' + caseGr.assignment_group.getDisplayValue() + ')');
gs.info('Opened: ' + caseGr.opened_at + ' | Updated: ' + caseGr.sys_updated_on);
// Discussion summary - key entries
gs.info('\n--- KEY DISCUSSION POINTS ---');
var journal = new GlideRecord('sys_journal_field');
journal.addQuery('element_id', caseId);
journal.addQuery('name', 'sn_hr_core_case');
journal.addQuery('element', 'work_notes');
journal.orderBy('sys_created_on');
journal.query();
var noteCount = 0;
while (journal.next()) {
noteCount++;
var noteText = journal.value.toString().replace(/<[^>]*>/g, '').substring(0, 200);
gs.info('[' + journal.sys_created_on + ' | ' + journal.sys_created_by + '] ' + noteText);
}
gs.info('Total work notes: ' + noteCount);
// State transitions
gs.info('\n--- STATE TRANSITIONS ---');
var audit = new GlideRecord('sys_audit');
audit.addQuery('tablename', 'sn_hr_core_case');
audit.addQuery('documentkey', caseId);
audit.addQuery('fieldname', 'state');
audit.orderBy('sys_created_on');
audit.query();
while (audit.next()) {
gs.info(audit.sys_created_on + ': ' + audit.oldvalue + ' -> ' + audit.newvalue + ' (by ' + audit.user + ')');
}
// Related tasks status
gs.info('\n--- RELATED TASKS ---');
var task = new GlideRecord('sn_hr_core_task');
task.addQuery('parent', caseId);
task.orderBy('sys_created_on');
task.query();
while (task.next()) {
gs.info(task.number + ': ' + task.short_description + ' | State: ' + task.state.getDisplayValue() + ' | Assigned: ' + task.assigned_to.getDisplayValue());
}
// Pending actions
gs.info('\n--- PENDING ACTIONS ---');
var pending = new GlideRecord('sn_hr_core_task');
pending.addQuery('parent', caseId);
pending.addQuery('state', '!=', 'closed_complete');
pending.addQuery('state', '!=', 'closed_incomplete');
pending.query();
if (!pending.hasNext()) {
gs.info('No pending tasks.');
}
while (pending.next()) {
gs.info('ACTION NEEDED: ' + pending.short_description + ' | Assigned: ' + pending.assigned_to.getDisplayValue());
}
Structure the output into a concise sidebar format.
Sidebar Summary Template:
=== CASE SUMMARY ===
[Case Number] - [Short Description]
Status: [State] | Priority: [Priority]
Employee: [Subject Person] | Dept: [Department]
Agent: [Assigned To] | Group: [Assignment Group]
Age: [Days since opened]
=== KEY DECISIONS ===
1. [Date] - [Decision description] (by [Person])
2. [Date] - [Decision description] (by [Person])
3. [Date] - [Decision description] (by [Person])
=== STAKEHOLDER INPUT ===
- [Person/Role]: [Summary of their contribution]
- [Person/Role]: [Summary of their contribution]
=== TIMELINE ===
[Date] - Case opened
[Date] - [Key event]
[Date] - [Key event]
[Date] - Current state reached
=== NEXT ACTIONS ===
[ ] [Action item 1] - Assigned to [Person]
[ ] [Action item 2] - Assigned to [Person]
[x] [Completed action] - Done by [Person]
Attach the generated summary as a work note for team visibility.
Using MCP:
Tool: SN-Add-Work-Notes
Parameters:
table_name: sn_hr_core_case
sys_id: [case_sys_id]
work_notes: |
=== SIDEBAR DISCUSSION SUMMARY ===
Generated: [current date/time]
KEY DECISIONS:
1. [Decision summary]
2. [Decision summary]
STAKEHOLDERS:
- [Name]: [Input summary]
NEXT ACTIONS:
- [Pending action 1]
- [Pending action 2]
CASE AGE: [X] days | NOTES: [count] entries
| Tool | When to Use |
|------|-------------|
| SN-Get-Record | Retrieve HR case header details |
| SN-Query-Table | Query journal entries, audit trail, related tasks |
| SN-NL-Search | Natural language queries for case context |
| SN-Update-Record | Update case with summary or state changes |
| SN-Add-Work-Notes | Post the summary as a work note |
| SN-Execute-Background-Script | Generate comprehensive summaries from multiple data sources |
| Endpoint | Method | Purpose |
|----------|--------|---------|
| /api/now/table/sn_hr_core_case | GET/PATCH | Read case details and update with summary |
| /api/now/table/sn_hr_core_task | GET | Review related tasks and pending actions |
| /api/now/table/sys_journal_field | GET | Extract work notes and comments |
| /api/now/table/sys_audit | GET | Track state changes and escalation history |
| /api/now/table/sn_hr_le_case_type | GET | Understand case type context |
Cause: Case communication happened through comments (visible to employee) rather than work notes (internal)
Solution: Query both work_notes and comments elements from sys_journal_field. Combine both for a complete picture.
Cause: Audit policies may not track all fields or auditing may be disabled for certain fields
Solution: Check System Audit configuration for the sn_hr_core_case table. Verify that state, priority, and assigned_to fields are audited.
Cause: Case has extensive discussion spanning many weeks or contributors Solution: Limit the summary to the most recent 5-7 key events. Focus on decisions and pending actions rather than verbose note content.
Cause: Tasks may be on a different table or linked through a different relationship field
Solution: Check sn_hr_core_task.parent field matches the case sys_id. Also query for tasks linked via parent.parent for nested task structures.
# 1. Get case details
Tool: SN-Get-Record
Parameters:
table_name: sn_hr_core_case
sys_id: [case_sys_id]
fields: number,short_description,state,priority,assigned_to,assignment_group,opened_at
# 2. Get recent work notes (last 5)
Tool: SN-Query-Table
Parameters:
table_name: sys_journal_field
query: element_id=[case_sys_id]^name=sn_hr_core_case^element=work_notes^ORDERBYDESCsys_created_on
fields: value,sys_created_by,sys_created_on
limit: 5
# 3. Get pending tasks
Tool: SN-Query-Table
Parameters:
table_name: sn_hr_core_task
query: parent=[case_sys_id]^stateNOT INclosed_complete,closed_incomplete
fields: number,short_description,state,assigned_to
limit: 10
Tool: SN-Query-Table
Parameters:
table_name: sys_audit
query: tablename=sn_hr_core_case^documentkey=[case_sys_id]^fieldnameINstate,priority,escalation,assignment_group^ORDERBYsys_created_on
fields: fieldname,oldvalue,newvalue,user,sys_created_on
limit: 30
Tool: SN-Execute-Background-Script
Parameters:
description: Summarize all open cases for a specific HR team
script: |
var groupName = 'HR Benefits Team';
var gr = new GlideRecord('sn_hr_core_case');
gr.addQuery('assignment_group.name', groupName);
gr.addQuery('active', true);
gr.orderBy('priority');
gr.query();
gs.info('=== TEAM CASE SUMMARY: ' + groupName + ' ===');
gs.info('Open Cases: ' + gr.getRowCount());
while (gr.next()) {
var taskCount = new GlideAggregate('sn_hr_core_task');
taskCount.addQuery('parent', gr.sys_id.toString());
taskCount.addQuery('active', true);
taskCount.addAggregate('COUNT');
taskCount.query();
taskCount.next();
var pending = taskCount.getAggregate('COUNT');
gs.info(gr.number + ' | P' + gr.priority + ' | ' + gr.state.getDisplayValue() + ' | ' + gr.short_description + ' | Pending Tasks: ' + pending);
}
hrsd/email-recommendation - Draft email responses based on sidebar summary contexthrsd/kb-generation - Convert recurring discussion patterns into knowledge articleshrsd/case-summarization - Full case summarization for closing or reportingitsm/incident-summarization - Similar summarization approach for ITSM incidentstesting
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