Draft a People Document
One skill for every first-draft people document the founder needs. type param picks template + structure + checks. "Drafts only, never sent / scheduled / delivered" discipline shared.
Parameter: type
offer-letter - offer letter for a new hire at a specific level, anchored on comp bands + equity stance.
onboarding-plan - Day 0, Week 1, 30-60-90 plan plus welcome Slack message + welcome email in your voice.
pip - performance improvement plan. Mandatory escalation check first. If a protected-class + pretextual-timing trigger fires, STOP and write an escalation note instead.
stay-conversation - verbal 1:1 SCRIPT, not email. Five sections: Open → Listen → Surface → Ask → Propose. Filtered against hard nos.
User names type in plain English ("draft an offer for {candidate}", "plan {new hire}'s onboarding", "draft a PIP for {employee}", "script the stay conversation") → infer. Ambiguous → ask ONE question naming the four options.
When to use
type=offer-letter - "draft an offer for {candidate}", "write the offer letter", "offer letter for {candidate} at {level}". Prereq: candidate record + debrief exist, founder decided to proceed.
type=onboarding-plan - "draft the onboarding plan for {new hire}", "first 90 days for {new hire}", "{new hire} starts {date} - get them ready", "first-morning checklist for {new hire}", "Day-0 welcome Slack for {new hire}". Implicit: routed after draft-a-people-document type=offer-letter → offer accepted.
type=pip - "draft a PIP for {employee}", "performance improvement plan for {employee}", "{manager} flagged {employee} for performance concerns". Always triggered by you - never implicitly.
type=stay-conversation - "draft a stay conversation for {employee}", "{employee} might be leaving", "someone flagged RED - what do I say", "retention conversation prep".
Connections I need
I run external work through Composio. Before this skill runs I check that the categories below are linked. Missing → I name the category, ask you to connect it from the Integrations tab, stop.
- Docs (Google Docs, Notion) — write the offer letter or onboarding plan where you want to ship it from. Optional. (
offer-letter, onboarding-plan)
- Inbox (Gmail, Outlook, Loops) — sample your past offer / performance / hard-news voice if I haven't already. Optional, all types. Sharper voice match with one connected.
- Chat (Slack) — draft the welcome Slack in the right channel voice; read recent 1:1 threads if you keep notes there. Optional. (
onboarding-plan, pip, stay-conversation)
- HR platform (Gusto, Deel, Rippling, Justworks) — pull start date, role, manager, location for
onboarding-plan; confirm role / level / tenure / manager for pip / stay-conversation. Optional.
This skill never sends, schedules, or delivers, so no integration is strictly required.
Information I need
I read your people context first. For every required field that's missing I ask ONE plain-language question (best modality: connected app > file drop > URL > paste) and wait.
All types:
- People context — Required. Why I need it: leveling, voice, hard nos, escalation rules. If missing I tell you to run the
set-up-my-people-info skill first.
- Voice samples — Optional for
offer-letter / onboarding-plan, Required for pip / stay-conversation. Why I need it: tone-sensitive drafts in the wrong register land harder or softer than you mean. If missing I ask: "Connect your inbox so I can sample two or three past messages, or paste one."
type=offer-letter:
- Candidate record and debrief — Required. Why I need it: I draft against background and the hire decision. If missing I ask: "I don't have a debrief on file for this candidate. Have you decided to make the offer?"
- Comp bands — Required. Why I need it: every number traces to a band or a written override. If missing I ask: "What's the comp band for this level, base range plus equity range, and any location adjustment?"
- Equity stance — Required. Why I need it: vesting, cliff, and grant type can't be guessed. If missing I ask: "What's our standard equity grant, type, vesting schedule, and cliff?"
- Offer terms — Required. Why I need it: locks in the specific offer. If missing I ask: "Confirm the level, base, equity, start date, and location for this offer."
type=onboarding-plan:
- New hire core details — Required. Why I need it: every section of the plan keys off these. If missing I ask: "Tell me their name, role, level, manager, start date, and whether they're remote or in office."
- Leveling framework — Required. Why I need it: 30 / 60 / 90 milestones map to the bar at this level. If missing I ask: "How would you describe what 'meeting the bar' looks like at this level over the first 90 days?"
- Welcome channel — Optional. Default: generic team channel + TBD.
- Buddy assignment — Optional. Default: TBD.
type=pip:
- Employee identity — Required. Why I need it: I won't draft a PIP for someone I can't pin down. If missing I ask: "Which employee, full name, role, and how long they've been here?"
- Leveling framework and hard nos — Required. Why I need it: PIP expectations map to your bar and your hard nos. If missing I ask: "How would you describe the bar at this level, and what levers are off the table?"
- Escalation rules — Required. Why I need it: I run a protected-class and pretextual-timing check before any draft. If missing I ask: "Who do discrimination, harassment, and retaliation concerns route to. Is there a named lawyer, or should we mark it TBD until you have one?"
- Recent concerns and timeline — Required. Why I need it: timing window is load-bearing for the escalation check. If missing I ask: "When did the performance concerns first come up, and has the employee made any protected request like leave, accommodation, complaint, or pregnancy disclosure in the last 90 days?"
type=stay-conversation:
- Employee identity — Required. If missing I ask: "Which employee, full name, role, and how long they've been here?"
Steps
-
Read people-context doc at context/people-context.md. If missing/empty: "I need your people context first - run the set-up-my-people-info skill." Stop. Pull leveling framework, comp bands, equity stance, voice notes, hard nos, escalation rules. Load-bearing for every type.
-
Read ledger + fill gaps with ONE targeted question per missing required field per the type's Information section above.
-
Read config: config/voice.md for hiring/performance-voice tone (greeting/sign-off, sentence length). Missing → ask ONE targeted question naming best modality ("Connect your inbox via Composio so I can sample 2-3 past offers / hard-news messages, or paste one"). Write voice.md, continue.
-
Branch on type.
-
If type = offer-letter:
- Read candidate context. Open
interview-loops/{candidate-slug}.md for debrief and agreed level/scope signal. Open candidates/{candidate-slug}.md for background. If neither exists, tell user run debrief-an-interview-loop first. Stop.
- Confirm offer terms with founder. ONE question if any missing: "Confirm - level: {X}, base: {Y}, equity: {Z}, start date: {D}, location: {L}. Override any of these? (Note: {Y} {Z} pulled from comp band {band-name} in context/people-context.md.)" If founder overrides outside band, require explicit written reason. Record in offer letter footer.
- Draft offer letter. Structure:
- Salutation (voice-matched per
config/voice.md + people-context voice notes).
- Role, title, level, reporting line.
- Base comp (from comp band).
- Equity - grant size, vesting schedule, cliff, type (ISO/NSO/RSU if stated in equity stance).
- Start date + location/remote designation.
- Benefits pointer ("per our benefits policy canon - context/people-context.md").
- Contingencies (background check, reference check, authorization to work, signed IP/PIIA).
- Deadline to accept.
- Sign-off (voice-matched).
- Tone check. Re-read draft against voice notes. If tone drifts (too corporate, too casual, wrong sign-off), revise before writing.
- Write to
offers/{candidate-slug}.md atomically (*.tmp → rename). Header file with metadata block: { level, base, equity, start, location, band, overrideReason? } plus full letter body.
-
If type = onboarding-plan:
- Read HR platform context if connected (read-only - agent never modifies HR records). Pull start date, role, manager, location, remote/in-office. If core hire details missing, ask ONE targeted question covering all gaps (best modality: HR platform record > pasted offer letter > paste).
- Discover tools via Composio as needed:
composio search hris, composio search chat, composio search inbox, composio search calendar. If category missing, name which to link from Integrations tab and continue with rest.
- Compose plan with these sections:
- Day 0 prep - accounts to provision (email, Slack, tooling by role), equipment to ship + tracking, buddy assignment, calendar blocks for Week 1, welcome-message queue.
- Week 1 - welcome-packet contents, intro meetings (founder, team, cross-functional), tooling walkthrough, read-me docs, first shadow tasks.
- Day 30 milestones - deliverables + check-in prompts pulled from leveling-framework expectations for this level/track.
- Day 60 milestones - expanded deliverables + first solo ownership.
- Day 90 milestones - full ownership + first review anchor point.
- Draft welcome Slack message + welcome email. Read voice notes from
context/people-context.md (and config/voice.md if present). Match tone fingerprint. Include buddy intro, Day-1 calendar link, one-line "here's what matters in your first week."
- Write plan atomically to
onboarding-plans/{new-hire-slug}.md (*.tmp → rename). Include welcome Slack + welcome email at bottom under clearly labeled sections so founder can lift verbatim.
-
If type = pip - run escalation check first:
- Read escalation-rules section of
context/people-context.md. Note every trigger listed. Canonical set: protected class (race, gender, age 40+, pregnancy, disability, religion, national origin, sexual orientation, veteran status - confirm jurisdiction's list in context doc); protected activity within trigger window (medical-leave request, pregnancy disclosure, accommodation request, whistleblower / good-faith complaint, union activity, workers' comp claim); timing trigger (concerns arising or escalating within 30-90 days of protected activity - window defined in doc).
- Assess: ask you directly (or read dossier if present) for employee's protected-class status, recent protected activity, timeline of when concerns first documented vs. when activity occurred. Do NOT guess - if unknown, ask + explain: "I need this to run the escalation check - nothing is drafted until it clears."
- If ANY trigger match: STOP. Do NOT draft PIP. Write escalation note (not PIP) to
performance-docs/pip-{employee-slug}.md: "This case needs a human lawyer before any PIP is written because: {specific trigger}. The match: {class/activity} + {timing}." Add short paragraph on why (retaliation claims hinge on pretextual timing; fair PIP in this window still create risk). Append to outputs.json with type: "performance-doc", escalation: "needs-lawyer". Summarize: "Escalation triggered - stopped. Do not draft or deliver a PIP until a lawyer has reviewed. Specific trigger: {trigger}." Stop.
- Read recent check-ins. Last 4-6
checkins/{YYYY-MM-DD}.md files - pull every response from this employee (blockers, frustrations, themes). Read optional employee-dossiers/{employee-slug}.md for tenure, role history, recent performance notes, prior manager feedback. If missing, note gap + work from checkins/ + your stated concerns.
- If clear, draft PIP with structure:
- Context - what specifically underperforming, with concrete examples dated + sourced. Evidence-first. Never invent - if example can't sourced, leave out.
- Expectations - what "meeting the bar" look like at this level, pulled from leveling framework. Each expectation observable + measurable.
- Milestones - 30 / 60 / 90-day checkpoints. Each name measurable criteria employee must demonstrate by that date. Tied to expectations, not vibes.
- Support - what you + manager provide: weekly 1:1s, feedback cadence, training budget, pairing with senior, clearer project scope. PIP without real support = paper.
- Consequences - what happens if milestones not met at 30 / 60 / 90. Plainly stated in your voice - neither softened nor threatening.
- Write to
performance-docs/pip-{employee-slug}.md atomically (*.tmp → rename).
-
If type = stay-conversation:
- Read retention-score reasoning. If
analyses/retention-risk-{...}.md flagged this employee RED, read reasoning block. Script surface themes signals revealed - never signals literally (employees don't need hear "your commit cadence dropped"; need hear "I've sensed something is off").
- Read recent check-ins. Last 4-6
checkins/{YYYY-MM-DD}.md files. Read optional employee-dossiers/{employee-slug}.md for tenure + role history.
- Draft script in five sections:
- Open - warm, specific, your voice. One/two sentences that land purpose without ambushing.
- Listen - 3-4 open-ended questions designed get them talking first. What going well. What frustrating. What they'd change.
- Surface - what you noticed, framed as observation not accusation. Draw from check-in themes + dossier history. Never cite engagement signals literally.
- Ask - direct question: "What would make you want to stay here for another year?" (or equivalent in your voice). One clear ask.
- Propose - concrete levers: scope change, title change, project move, manager change, comp review. Filter every lever against hard nos in
context/people-context.md - if "we never counter-offer on resignations" written, comp off table; redirect to scope / title / project.
- Header at top of file: "This is a script for a verbal 1:1, not an email. Do not send."
- Write to
performance-docs/stay-conversation-{employee-slug}.md atomically (*.tmp → rename).
-
Append to outputs.json atomically (read-merge-write):
{
"id": "<uuid v4>",
"type": "<offer | onboarding-plan | performance-doc>",
"title": "<plain title>",
"summary": "<2-3 sentences>",
"path": "<path>",
"status": "draft",
"escalation": "drafted | blocked-on-escalation | needs-lawyer | n/a",
"createdAt": "<ISO>",
"updatedAt": "<ISO>",
"domain": "<hiring | onboarding | performance>"
}
offer-letter → type: "offer", domain: "hiring", escalation: "n/a".
onboarding-plan → type: "onboarding-plan", domain: "onboarding", escalation: "n/a".
pip → type: "performance-doc", domain: "performance", escalation as classified (drafted when clear, needs-lawyer when triggered).
stay-conversation → type: "performance-doc", domain: "performance", escalation: "n/a".
- Status stays
draft - this skill never flips to ready.
-
Summarize to user. One short paragraph in plain language: what you drafted, key elements, and the next move. Never mention file names or paths.
offer-letter: name, level, base, equity, start. Close: "This is a draft. I do not send offers. Review, edit, and send from your inbox."
onboarding-plan: start date, Day-0 checklist length, welcome messages drafted but not sent. "You ship them on the start date."
pip (clear): Context summary, 30/60/90 at glance, escalation classification. Close: "This is a draft. PIPs are never delivered without your sign-off and, ideally, a second set of eyes. Read, tell me what to change, flip status to ready after sign-off."
pip (escalated): "Escalation triggered - stopped. Do not draft or deliver a PIP until a lawyer has reviewed. Specific trigger: {trigger}."
stay-conversation: "This is a prompt for a verbal 1:1 - don't send it. Read before your next 1:1 and adapt in the moment."
What I never do
- Send, schedule, post, or deliver any draft. Founder delivers, sends, or has the conversation. Every artifact opens with a clear "DRAFT - NOT FOR DELIVERY" stamp, or "This is a script for a verbal 1:1, not an email" for stay conversations.
- Draft a PIP without running the escalation check first. No exceptions.
- Write a stay conversation as an email. Verbal by design. Decline + explain if asked for an email version.
- Recommend a counter-offer unless
context/people-context.md explicitly allows it.
- Invent comp numbers, equity terms, leveling expectations, examples, dates, or quotes. If the source is missing, mark
UNKNOWN and ask. Invented evidence destroys both legal and human legitimacy on PIPs.
- Promise benefits not in the policy canon.
- Commit a start date without founder confirmation.
- Modify HR platform / ATS / payroll records - read-only on every system of record.
- Flip any draft to
ready automatically - you sign off.
Outputs
offers/{candidate-slug}.md (type=offer-letter).
onboarding-plans/{new-hire-slug}.md (type=onboarding-plan).
performance-docs/pip-{employee-slug}.md (type=pip).
performance-docs/stay-conversation-{employee-slug}.md (type=stay-conversation).
- Appends to
outputs.json with the per-type type, domain, and escalation classification.