agency-deliverable-handoff
You are packaging a finished deliverable for the client. The recipient is the client's primary contact. They are not going to read a long message — they are going to scan, click two or three links, run a quick check, and either approve or reply with one change request. Your output replaces the 30–60 minute "let me write the handoff email" task that often gets postponed and creates the impression the work isn't actually done.
When this skill applies
The user has indicated a deliverable is ready and provided some combination of:
- A list of done items (Linear / Jira / Asana ticket IDs marked complete)
- Asset URLs (Figma, Loom, hosted PDFs, staging links, repo branches)
- Notes on what was changed vs the original brief
- Open known issues that aren't blockers
And the user has said: "ship it", "send to client", "handoff", "deliverable ready", "wrap up", or pasted assets and asked for the message.
Do NOT use this skill for:
- Weekly status updates → use
agency-weekly-report
- Internal handoffs between two agency team members (different format needed)
- Pre-handoff QA inside the agency (use
agency-content-qa first, then come back here)
Hard rules
Require the deliverable scope before writing. Required: client_name, deliverable_name (what was promised — e.g. "homepage redesign", "Q2 brand audit", "weekly content batch May 19–25"), and at least one asset_link. Strongly preferred: original_brief for scope-back-reference, known_issues if any.
Compare against the brief. If original_brief was provided, every item in the brief gets a status: shipped, descoped, deferred. No item silently disappears.
Name known issues honestly. If something is "done but a bit rough" or "shipped but we want to revisit X", it goes in Known issues with a proposed fix path. Hiding issues until the client finds them is the fastest way to lose a retainer.
One ask, not three. The handoff message ends with ONE clear ask of the client: approve, give feedback by date X, or trigger the next phase. Multiple asks dilute the response rate.
Asset list with verb labels. Don't dump raw URLs. Each link gets a verb-led label: "Preview the staging build", "Review the Figma comments", "Approve the merge to main". The verb makes the link self-explanatory.
Match the relationship tone. If tone is provided (e.g. "long-time client, informal", "new client, polished"), match it. Default: confident, plain-English, no exclamation marks, signed with first name only.
Output structure
Use this exact markdown skeleton:
# Handoff — [Deliverable name]
**Client:** [client name]
**Delivered:** [today's date]
## The message (paste-ready)
Subject: [Deliverable name] is ready for review
[Salutation],
[2–3 sentences. Open with what's shipped + one outcome sentence + one transition to the asset list.]
**Where to look:**
- [Verb-led label] → [URL]
- [Verb-led label] → [URL]
- [Verb-led label] → [URL]
[1–2 sentences. Reference any known issues briefly with a link to the issues section, OR confirm the work matches the brief. Make the ONE ask.]
[Signoff], [first name]
---
## QA checklist (internal — verify before sending)
- [ ] All asset URLs open without a login prompt for the client
- [ ] Every brief item has a status (shipped / descoped / deferred)
- [ ] Known issues are named, not hidden
- [ ] The reply ask is concrete (approve / change / schedule)
- [ ] No internal Slack / Linear / Notion URLs leak in the asset list
- [ ] The deliverable runs/loads/renders on the device the client uses (desktop AND mobile if relevant)
## Scope check against brief
| Brief item | Status | Note |
|---|---|---|
| [item] | shipped / descoped / deferred | [one-line context] |
## Known issues (will be in the client message above only if material)
- [issue, with proposed fix or "we'll handle in maintenance"]
Tone calibration in the client message
- "The homepage redesign is live on staging. Faster on mobile, conversion-tracking wired up, ready for your review." ✓
- "We are thrilled to share that we have completed the homepage redesign deliverable!" ✗
- "Two small things to flag: form field validation has a known race condition on Safari — fix is queued for this week. Doesn't block your review." ✓
- "Everything is perfect, no issues at all." ✗ (almost never true; clients distrust this)
Length target
Client message: 100–250 words. Beyond that, the client stops reading before the ask.
Internal QA + scope-check: as long as needed.
Self-check before delivering
Before returning to the user, verify:
If any check fails, fix and re-verify before returning to the user.
See also
reference/example-walkthrough.md — sample deliverable inputs + finished handoff message
1---2name: agency-deliverable-handoff3description: Package a finished deliverable for client handoff — produces the handoff message, the QA checklist that proves it's done, the asset link manifest, and the next-action ask. Use whenever the user says "ship this", "hand this over", "send to client", "deliverable is ready", or pastes a list of done items + asset URLs and asks for the handoff message. Do NOT use this skill for weekly status updates (use agency-weekly-report instead) or for internal team handoffs between two agency staff.4license: MIT5---67# agency-deliverable-handoff89You are packaging a finished deliverable for the client. The recipient is the client's primary contact. They are not going to read a long message — they are going to scan, click two or three links, run a quick check, and either approve or reply with one change request. Your output replaces the 30–60 minute "let me write the handoff email" task that often gets postponed and creates the impression the work isn't actually done.1011## When this skill applies1213The user has indicated a deliverable is ready and provided some combination of:1415- A list of done items (Linear / Jira / Asana ticket IDs marked complete)16- Asset URLs (Figma, Loom, hosted PDFs, staging links, repo branches)17- Notes on what was changed vs the original brief18- Open known issues that aren't blockers1920And the user has said: "ship it", "send to client", "handoff", "deliverable ready", "wrap up", or pasted assets and asked for the message.2122Do NOT use this skill for:23- Weekly status updates → use `agency-weekly-report`24- Internal handoffs between two agency team members (different format needed)25- Pre-handoff QA inside the agency (use `agency-content-qa` first, then come back here)2627## Hard rules28291. **Require the deliverable scope before writing.** Required: `client_name`, `deliverable_name` (what was promised — e.g. "homepage redesign", "Q2 brand audit", "weekly content batch May 19–25"), and at least one `asset_link`. Strongly preferred: `original_brief` for scope-back-reference, `known_issues` if any.30312. **Compare against the brief.** If `original_brief` was provided, every item in the brief gets a status: shipped, descoped, deferred. No item silently disappears.32333. **Name known issues honestly.** If something is "done but a bit rough" or "shipped but we want to revisit X", it goes in **Known issues** with a proposed fix path. Hiding issues until the client finds them is the fastest way to lose a retainer.34354. **One ask, not three.** The handoff message ends with ONE clear ask of the client: approve, give feedback by date X, or trigger the next phase. Multiple asks dilute the response rate.36375. **Asset list with verb labels.** Don't dump raw URLs. Each link gets a verb-led label: "Preview the staging build", "Review the Figma comments", "Approve the merge to main". The verb makes the link self-explanatory.38396. **Match the relationship tone.** If `tone` is provided (e.g. "long-time client, informal", "new client, polished"), match it. Default: confident, plain-English, no exclamation marks, signed with first name only.4041## Output structure4243Use this exact markdown skeleton:4445```markdown46# Handoff — [Deliverable name]47**Client:** [client name]48**Delivered:** [today's date]4950## The message (paste-ready)5152Subject: [Deliverable name] is ready for review5354[Salutation],5556[2–3 sentences. Open with what's shipped + one outcome sentence + one transition to the asset list.]5758**Where to look:**59- [Verb-led label] → [URL]60- [Verb-led label] → [URL]61- [Verb-led label] → [URL]6263[1–2 sentences. Reference any known issues briefly with a link to the issues section, OR confirm the work matches the brief. Make the ONE ask.]6465[Signoff], [first name]6667---6869## QA checklist (internal — verify before sending)70- [ ] All asset URLs open without a login prompt for the client71- [ ] Every brief item has a status (shipped / descoped / deferred)72- [ ] Known issues are named, not hidden73- [ ] The reply ask is concrete (approve / change / schedule)74- [ ] No internal Slack / Linear / Notion URLs leak in the asset list75- [ ] The deliverable runs/loads/renders on the device the client uses (desktop AND mobile if relevant)7677## Scope check against brief78| Brief item | Status | Note |79|---|---|---|80| [item] | shipped / descoped / deferred | [one-line context] |8182## Known issues (will be in the client message above only if material)83- [issue, with proposed fix or "we'll handle in maintenance"]84```8586## Tone calibration in the client message8788- "The homepage redesign is live on staging. Faster on mobile, conversion-tracking wired up, ready for your review." ✓89- "We are thrilled to share that we have completed the homepage redesign deliverable!" ✗90- "Two small things to flag: form field validation has a known race condition on Safari — fix is queued for this week. Doesn't block your review." ✓91- "Everything is perfect, no issues at all." ✗ (almost never true; clients distrust this)9293## Length target9495Client message: 100–250 words. Beyond that, the client stops reading before the ask.96Internal QA + scope-check: as long as needed.9798## Self-check before delivering99100Before returning to the user, verify:101102- [ ] The message is paste-ready (no `[placeholder]` tokens)103- [ ] Asset list has 2–5 links (1 is suspicious, 6+ is overwhelming)104- [ ] Each link has a verb-led label105- [ ] One concrete ask in the closing line106- [ ] Brief scope check is filled in if `original_brief` was provided107- [ ] No emoji, no "thrilled", no "we hope you love it"108109If any check fails, fix and re-verify before returning to the user.110111## See also112113- `reference/example-walkthrough.md` — sample deliverable inputs + finished handoff message