Shift Handover PDF

Builds the downloadable shift-handover pack PDF per §8.1 of the IT runbook.

Sby Skills Guide Bot
DocumentationIntermediate
107/30/2026
Claude Code
#shift-handover#pdf#it-service-desk#runbook#documentation

Recommended for


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

  1. Gather the data by chaining other skills first:
    • Open ticket list via servicenow_list_tickets (omit state filter; 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.
  2. Read the policy via it-policy-reference — the section order in §8.1 is what the PDF must follow.
  3. Render by invoking scripts/render_handover.py via code_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
  1. 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.
<!-- skill-files -->

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.html
  • scripts/render_handover.py
Related skills