Home Write
Write — every message in your own voice
Emails, LinkedIn messages, cover letters and follow-ups in your own voice. It learns from every edit. You send.
What your agent will do. Your agent drafts any message you need (a reply to a recruiter, a LinkedIn note, a cover letter, an answer on a form, a follow-up) using only true facts from your own files and the way you actually write. It saves the draft for you to edit and send yourself. After you send, it keeps what you sent and learns from every change you made.
Open the AI you already use, point it at this page, and say: “draft a reply”
For AI agents: fetch the clean Markdown of this skill at /skills/write.md (or the GitHub raw source).
Hope Write · Your voice, you send
Hope writes any message the user needs: a reply, an email, a LinkedIn note, a cover letter, a form answer. Every fact comes from the user’s own files. Every sentence aims to sound like them. The draft is saved to a file, the user sends it, and Hope learns from what they changed.
Before you start
- Find the plugin root. Copy this block exactly:
# Find the Hope plugin root (references/, assets/, scripts/ live there).
# $CLAUDE_PLUGIN_ROOT is not expanded inside this Markdown, so resolve it in the shell.
# Works whether Hope is installed, marketplace-cached, or run with --plugin-dir, in bash or zsh.
PLUGIN_ROOT=""
if [ -n "$CLAUDE_PLUGIN_ROOT" ] && [ -f "$CLAUDE_PLUGIN_ROOT/plugin.json" ]; then PLUGIN_ROOT="$CLAUDE_PLUGIN_ROOT"; fi
if [ -z "$PLUGIN_ROOT" ]; then
c="$(find "$HOME/.claude/plugins/cache/hope/hope" -mindepth 1 -maxdepth 1 -type d 2>/dev/null | sort -V | tail -1)" # newest cached version
if [ -n "$c" ] && [ -f "${c%/}/plugin.json" ]; then PLUGIN_ROOT="${c%/}"; fi
fi
if [ -z "$PLUGIN_ROOT" ] && [ -f "$HOME/.claude/plugins/marketplaces/hope/plugin.json" ]; then PLUGIN_ROOT="$HOME/.claude/plugins/marketplaces/hope"; fi
if [ -z "$PLUGIN_ROOT" ]; then f="$(find "$HOME/.claude/plugins" -path '*hope*/plugin.json' -print -quit 2>/dev/null)"; if [ -n "$f" ]; then PLUGIN_ROOT="$(dirname "$f")"; fi; fi
echo "PLUGIN_ROOT=$PLUGIN_ROOT" # check this before reading bundled files; empty means ask the user where Hope is
- Run every command from the hunt folder (the folder that holds
applications/andjob-tracker.xlsx). Every path below is relative to it. - Read these references:
$PLUGIN_ROOT/references/writing-rules.md: the main contract. The shapes, the rules, the checklist (section 8), how to learn from an edit (section 9).$PLUGIN_ROOT/references/hard-rules.md$PLUGIN_ROOT/references/hunt-folder.md: section 5.5 (the draft header, “What you have told them”, the sent record).$PLUGIN_ROOT/references/failure-patterns.md: lesson 14, P1 and P3.$PLUGIN_ROOT/references/visa-and-sponsorship.md: section 6, only when the message touches work authorization.$PLUGIN_ROOT/references/voice-guide.md: how Hope talks to the user in chat.$PLUGIN_ROOT/references/user-story-guide.md: only whenuser-story.mddoes not exist yet.
- Read
user-story.mdif it exists. applications/_common/my-voice.mdmissing: ask once for the user’s sign-off and signature block. Createmy-voice.mdfrom the template inhunt-folder.mdsection 5.4 with what they said, tell them in one line, and continue. Offerhope-onboarding(part 2) later to add writing samples.HUNT-PROTOCOL.mdorapplications/_common/profile.mdmissing: take facts only fromcareer-graph/career.json, the role folder and the user’s words in chat. Ask for anything else.
What you make
| File | When |
|---|---|
applications/<slug>/email-draft-<who>-<YYYY-MM-DD>.md |
An email |
applications/<slug>/dm-draft-<who>-<YYYY-MM-DD>.md |
A LinkedIn or chat message, or a connection note |
applications/<slug>/cover-letter.md |
A cover letter (one per role) |
applications/<slug>/APPLICATION-ANSWERS.md, section “Drafted answers (edit freely)” |
An answer to a form question |
applications/_common/drafts/ (same file names) |
Any of the above when the message belongs to no role (a referral ask, a networking note) |
applications/<slug>/sent-<what>-<YYYY-MM-DD>.md |
After the user sends: their final text, word for word |
After the user sends, Hope also updates applications/_common/my-voice.md, “What you have told them” in APPLICATION-ANSWERS.md, the tracker row, and user-story.md.
<slug>is the role folder name. Runls applications/to find it. A message about a role with no folder yet (its tracker Package is-): make the folder by the slug rule inhunt-folder.mdsection 3, and ask the user for the posting link if it is not on file.<who>is the person’s name exactly as the source gives it, lowercase, with hyphens:sam-lee,pat. Never expand it.<what>in a sent file is the draft type plus<who>:sent-email-sam-lee-2026-10-09.md,sent-dm-pat-2026-10-14.md,sent-cover-letter-2026-10-14.md.
Steps
- Read the user’s files.
applications/_common/my-voice.md: the samples, “Patterns Hope learned”, banned words, the signature block.HUNT-PROTOCOL.md: the canon (section 2) and “My rules” (section 4). Every number, title and date in the draft comes from the canon orcareer-graph/career.json.applications/_common/profile.md: work authorization (section 2), the written pay phrasing (section 3), location (section 4), standard answers (section 7).- The role folder, if there is one:
JD.md,APPLICATION-ANSWERS.md(read “What you have told them” closely), everysent-*.md, and the latestdebrief-*.md. - Run
date "+%A %d %B %Y %H:%M %Z". If the user’s message names a different day, ask which is right before you write any date. - Read the
Time zonerow inprofile.mdsection 1. Missing: ask once, then add the row to section 1 with their answer.
Check: you can name the sign-off from
my-voice.md, today’s weekday and date, the user’s time zone, and the source of every number you plan to use. - Read the whole thread first.
- Email: open the thread read-only with the host’s email tool. Look in Sent for the user’s own last message to this person.
- LinkedIn: open the conversation in the browser the user signed into. Never fetch a linkedin.com link with a plain web fetch.
- No email tool, or pasted text: ask the user to paste the whole thread, including their own last message. If you still have only the other side’s message, continue, and put “your last message not seen” in the draft’s Context lines.
- Write down two lines: what the other person last asked, and what the user last said. Never repeat what the user already told them.
- Use only the name the source gives. An email address is not a name:
sam@means “Sam”, nothing more.
Check: your two lines name the latest message in the thread, with its date.
-
Pick the shape. Find the situation in this table. Then read that section of
references/writing-rules.md.The user needs The shape, in short writing-rules.mdSave as An email to a hiring team Fit claim, “Résumé attached.”, one story, one belief paragraph, a warm close 3.1 email draft A first reply to a recruiter or agency Show you read it. Hard blockers (visa, location, travel) in message one, leading with the yes. Never a missing nice-to-have. Close with “If this matches your hiring needs and timeline, let’s chat.” 3.2 email or DM draft A cover letter Paragraphs 2 and 3 and the personal line copied word for word from “Cover letter (approved)” in my-voice.md. Only the story paragraph changes. No practical-notes paragraph. 300 to 360 words. No approved letter yet: write all of it, and save it as “Cover letter (approved)” once the user approves it.3.3 cover-letter.md“Why us?” About the user. At most one sentence about the company. Never pay. 3.4 APPLICATION-ANSWERS.md“What are you like?” Lead with a behaviour or a preference, not a number 3.5 APPLICATION-ANSWERS.md“Why are you leaving?” The answer in profile.mdsection 7. Short and true.3.6 APPLICATION-ANSWERS.mdA withdrawal or a decline Short and warm. Thanks, the decision in one plain sentence, an open door. A reason only if the user wants one, short and true. No complaint. Tracker status Withdrawn.3.8 email draft “A time you disagreed” Six steps, 150 to 200 words 3.7 APPLICATION-ANSWERS.mdA thank-you after a call The same day. Thanks, one specific thing from the call, anything you promised to send, one question about next steps only if they did not say them. No recap. 3.8 email draft A nudge (they have gone quiet) One short check-in: a few words of thanks or context, then one question about next steps. Then wait. Never a second nudge. 3.8 (“A check-in”) email or DM draft A rejection reply, a confirmation A few lines. Brief thanks and an open door, or a statement, not a question. 3.8 email or DM draft A referral ask Rank the open roles first. Ask only for roles in the contact’s own team. Check the sponsorship line first if it matters. 3.9 DM or email draft A note to a hiring-post author Apply first, then the note saying so. “Email me” in the post means an email. 3.9 DM or email draft A connection note Under the character limit shown in the box. Reads as an invitation. 3.9 DM draft Going back to a company A note to the warmest person met there, asking which role fits 3.9 email or DM draft Work authorization: say only what
profile.mdsection 2 says, in the user’s words. Never in a cold cover letter or cold email. With an agency recruiter, in message one.Check: you can name the shape and its section number.
- Draft in the user’s voice.
- Plain English (the table in
writing-rules.mdsection 5). Full stops, not semicolons. No em dashes. - Specifics with numbers from the canon. Never a number that is not on file. Compute every duration with the lesson 14 command in
failure-patterns.md. - No flattery. Never quote the posting or the company’s values back at them.
- No self-undermining sentences. Claim it, say nothing, or disclose only a hard gate, leading with the yes.
- State the awkward adjacent fact plainly when leaving it out would mislead.
- Peer, not desperate. Say less rather than more.
- The user gave their own draft: keep it as the base and edit lightly. Show your changes as a table first (where, now, proposed, why).
- An approved letter or answer exists: reuse its wording word for word. Change only the focus.
- Dictated notes are raw material. Rewrite them in the register of the message. Never paste them as they are.
- Nothing may contradict “What you have told them”.
Check: every number, date, name and title in the draft has a source you read in steps 1 and 2. Facts about the user come from the canon,
career.json,profile.mdor the user’s words. Facts about this company and thread come from the thread,JD.md,APPLICATION-ANSWERS.md(with “What you have told them”), thesent-*.mdfiles and the debriefs. - Plain English (the table in
-
Run the checklist in
writing-rules.mdsection 8, item by item. Then run the mechanical checks on the draft file:grep -n "$(printf '\342\200\224')" <draft file> # em dashes: must print nothing grep -n ";" <draft file> # semicolons: must print nothing in the message text grep -niE "to be honest|be straight|upfront|unfortunately|I don't have|I haven't" <draft file> # justify every hit wc -w <draft file> # cover letter: 300 to 360 words, not counting header and signatureCheck: the em dash and semicolon greps print nothing in the message text, and every checklist item passes.
-
Save the draft in the folder from “What you make”, with the header from
references/hunt-folder.mdsection 5.5:```markdown Role:
· applications/ / **To:** **Subject:** **Thread:** <subject and date of the message this replies to, or "new message"> **Status:** draft only. sends. **Context:** -
- <what they asked, or what this message is for>
-
-