Source profileQuality 87/100

gethouston/houston/store/agents/people/.agents/skills/draft-a-people-document/SKILL.md

draft-a-people-document

Draft a people document for you, like an offer letter, an onboarding plan, a performance improvement plan (PIP), or a stay conversation script. I draft against your comp bands, voice, leveling framework, and hard nos so it sounds like you wrote it. Drafts only, you ship every one.

Source repository stars
91
Declared platforms
0
Static risk flags
0
Last source update
2026-08-04
Source checked
2026-08-04

Decision brief

What it does—and where it fits

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.

Best for

  • 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 hir…
  • type=pip - "draft a PIP for {employee}", "performance improvement plan for {employee}", "{manager} flagged {employee} for performance concerns". Always triggered by you - never implicitly.

Not for

  • Tasks that require unconfirmed production actions or broad system permissions.
  • Environments where the pinned source and install steps cannot be inspected.

Compatibility matrix

Platform support, with evidence labels

PlatformStatusEvidenceWhat to check
CodexNot declaredNo explicit evidencePortability before use
Claude CodeNot declaredNo explicit evidencePortability before use
CursorNot declaredNo explicit evidencePortability before use
Gemini CLINot declaredNo explicit evidencePortability before use
Open the compatibility checker

Installation

Inspect first. Install second.

The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

Source-detected install commandSource
npx skills add https://github.com/gethouston/houston --skill "store/agents/people/.agents/skills/draft-a-people-document"
Safe inspection promptEditorial

Inspect the Agent Skill "draft-a-people-document" from https://github.com/gethouston/houston/blob/10d9551da3a639803421a9004117f9e5633ce3a1/store/agents/people/.agents/skills/draft-a-people-document/SKILL.md at commit 10d9551da3a639803421a9004117f9e5633ce3a1. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

Workflow

What the source asks the agent to do

  1. 01

    Parameter: type

    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.

    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.
  2. 02

    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=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 hir…type=pip - "draft a PIP for {employee}", "performance improvement plan for {employee}", "{manager} flagged {employee} for performance concerns". Always triggered by you - never implicitly.
  3. 03

    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)
  4. 04

    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.

    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: "Conne…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?"
  5. 05

    Steps

    1. 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. 2.…

    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, ha…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 of…

Permission review

Static risk signals and limitations

No configured static risk pattern was detected

This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.

Evidence record

Why each signal appears

EvidenceSourceComputedTestedEditorial
SignalValueEvidence typeMeaning
Quality score87/100ComputedDocumentation, specificity, maintenance, and trust rules
Repository stars91SourceRepository attention, not individual Skill quality
Compatibility0 platformsSourceDeclared in the catalog source record
Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

Pinned source

Provenance and original SKILL.md

Repository
gethouston/houston
Skill path
store/agents/people/.agents/skills/draft-a-people-document/SKILL.md
Commit
10d9551da3a639803421a9004117f9e5633ce3a1
License
MIT
Collected
2026-08-04
Default branch
main
View the original SKILL.md

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

  1. 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.

  2. Read ledger + fill gaps with ONE targeted question per missing required field per the type's Information section above.

  3. 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.

  4. Branch on type.

    • If type = offer-letter:

      1. 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.
      2. 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.
      3. 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).
      4. Tone check. Re-read draft against voice notes. If tone drifts (too corporate, too casual, wrong sign-off), revise before writing.
      5. 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:

      1. 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).
      2. 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.
      3. 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.
      4. 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."
      5. 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:

      1. 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).
      2. 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."
      3. 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.
      4. 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.
      5. 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.
      6. Write to performance-docs/pip-{employee-slug}.md atomically (*.tmp → rename).
    • If type = stay-conversation:

      1. 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").
      2. Read recent check-ins. Last 4-6 checkins/{YYYY-MM-DD}.md files. Read optional employee-dossiers/{employee-slug}.md for tenure + role history.
      3. 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.
      4. Header at top of file: "This is a script for a verbal 1:1, not an email. Do not send."
      5. Write to performance-docs/stay-conversation-{employee-slug}.md atomically (*.tmp → rename).
  5. 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-lettertype: "offer", domain: "hiring", escalation: "n/a".
    • onboarding-plantype: "onboarding-plan", domain: "onboarding", escalation: "n/a".
    • piptype: "performance-doc", domain: "performance", escalation as classified (drafted when clear, needs-lawyer when triggered).
    • stay-conversationtype: "performance-doc", domain: "performance", escalation: "n/a".
    • Status stays draft - this skill never flips to ready.
  6. 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.