name: handover-pack-pdf description: Build the downloadable shift-handover pack PDF — per §8.1 of the IT runbook. Cover with outgoing/incoming shifts, then sections for open P1/P2, awaiting-user, pending escalations, VIP watchlist, network/change in flight, notes for incoming. Renders via the inline HTML template + Playwright. enabled: true
Instructions
Use this skill when Aaron asks for "the handover pack", "the PDF", "end-of-shift summary", or any variation. This is the deliverable the persona exists to produce.
Workflow
- Gather the data by chaining other skills first:
- Open ticket list via
servicenow_list_tickets(omitstatefilter; render handles the bucketing). - For each P1/P2, fetch recent work notes:
servicenow_list_work_notes(ticket_id, limit: 3). - For VIP callers: cross-join via workday + m365-graph for status / OOO.
- Open ticket list via
- Read the policy via it-policy-reference — the section order in §8.1 is what the PDF must follow.
- Render by invoking
scripts/render_handover.pyviacode_interpreter:
python /app/use-cases/it-service-desk/skills/handover-pack-pdf/scripts/render_handover.py \
--outgoing-shift "Day (Aaron Cole, AGT-301)" \
--incoming-shift "Night (Chen Wu, AGT-303)" \
--shift-date 2026-06-08 \
--tickets-json '<JSON object — see below>' \
--notes-for-incoming "Free text from Aaron…" \
--out /tmp/handover-2026-06-08-day-to-night.pdf
- Confirm in chat: "Handover saved to
/tmp/handover-…pdf— N pages, X open P1/P2, Y awaiting user, Z pending escalations." Reference the path so file-sharing picks it up.
Tickets-JSON shape
The render script expects a single object with these keys:
{
"p1_p2_open": [{ "id": "INC-7002", "priority": "P1", "state": "In Progress", "caller": "Diana Whitfield", "caller_vip": true, "assigned_to": "Bea Lindgren (AGT-302)", "short_description": "...", "last_note": "..." }, ...],
"awaiting_user": [{ "id": "INC-7001", "caller": "Jamal Carter", "assigned_to": "Aaron Cole (AGT-301)", "short_description": "...", "what_we_asked": "..." }, ...],
"pending_escalations": [{ "id": "INC-7004", "escalated_to": "Network L2", "escalated_when": "2 hours ago", "why": "..." }, ...],
"vip_watchlist": [{ "id": "INC-7002", "caller": "Diana Whitfield", "vip_rationale": "Executive (CEO)", "status": "..." }, ...],
"network_change_in_flight": [{ "id": "CHG-9001", "type": "Change", "state": "Scheduled", "summary": "..." }, ...]
}
Assets
assets/handover-pack.html— Jinja-style template (string substitution, no Jinja). Cool-grey + ServiceNow-blue theme. Cover + one section per §8.1 bullet.
Constraints
- Always include the §8.1 sections in order. Print empty sections with "None" rather than skipping.
- The handover is not a triage doc — keep each ticket row to 2-3 lines.
- VIP names appear (this is internal); do not include any §7.2-prohibited content (the PDF is internal-only, but stay consistent with the tone rules).
- Do not auto-email. §8.2 explicitly says PDF only; email is a separate workflow.
When NOT to use
- Spot question on a single ticket — use ticket-triage.
- Verbal queue summary — use queue-overview, answer inline.
Available Files
This skill directory contains the following files you can read with read_file using their absolute paths (prefix /app/use-cases/it-service-desk/skills/handover-pack-pdf/):
assets/handover-pack.htmlscripts/render_handover.py
API Documentation Generator
Documentation
Automatically generates OpenAPI/Swagger API documentation.
Technical Writer
Documentation
Writes clear technical documentation following top style guides.
Document Update
Documentation
Align technical documents with actual code implementation and correct documentation drift. Use when updating docs to match current behavior.