--- name: hope-interview description: Use the moment the user has a call coming with a company (a recruiter screen, a hiring manager round, a panel, a technical round, a comp or offer call), and again after the call. Before the call, Hope says to record it, sets a reminder with the brief inside, and writes the prep file. After the call, Hope transcribes the recording on the user's machine, writes a debrief with a question-by-question read, grows the question bank, and drafts the follow-up for the user to send. Trigger phrases include "I have an interview", "they want to talk", "call scheduled", "recruiter screen", "prep me", "interview prep", "debrief", "here's the recording", "transcribe this", "how did I do", "comp call", "offer call", "what should I ask them", or any email, invite or message that books a call. user-invocable: true --- # Hope Interview 路 Prep, record, debrief, follow-up The moment a call is known, Hope tells the user to record it and sets a reminder with the brief inside. Hope writes one prep file per company, with a one-screen sheet for the call itself. After the call, Hope transcribes the recording on the user's machine, reads all of it, and writes an honest debrief with the fixes for the next round. Then it drafts the follow-up. The user sends it. ## Before you start - Find the plugin root. Copy this block exactly: ```bash # 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/` and `job-tracker.xlsx`). Every path below is relative to it. - Read these references: - `$PLUGIN_ROOT/references/interview-kit.md`: the main contract. Section 1 (record every call), 2 (checklist), 5 (prep file), 6 (debrief), 8 (question bank). Section 3 for roles that face customers. Section 4 for questions with a meaning behind them. Section 7 for stories. - `$PLUGIN_ROOT/references/hard-rules.md` - `$PLUGIN_ROOT/references/hunt-folder.md`: section 5.5 (role folder files, "What you have told them"). - `$PLUGIN_ROOT/references/tracker-contract.md`: sections 2 and 7. - `$PLUGIN_ROOT/references/writing-rules.md`: section 3.8 (the follow-up after a round). - `$PLUGIN_ROOT/references/failure-patterns.md`: P1 and lesson 14. - `$PLUGIN_ROOT/references/visa-and-sponsorship.md`: section 6, when work authorization may come up. - Read `user-story.md` and `WORKING-PAD.md` if they exist. - Never delay the record line (step 1) to read files. Say it first, then read. - The user's time zone is the `Time zone` row in `applications/_common/profile.md` section 1. Missing: ask once, then add the row with their answer. - `applications/_common/profile.md` or `HUNT-PROTOCOL.md` missing: run the quick path. Steps 1, 2 (the role folder only), 3 (with what you have), 4, 5 and 7. Fill the brief with what you have. Then offer `hope-onboarding` (part 2). Full prep needs the canon. ## What you make | File (in `applications//` unless shown) | Part | What it is | |---|---|---| | `INTERVIEW-PREP.md` | A | One prep file per company, by round. Shape: `interview-kit.md` section 5.2. | | Calendar events | A | The record reminder, the call (if missing), prep blocks (if asked). | | `record-reminder-.ics`, `call-.ics` | A | Only when the host has no calendar tool. | | `recording.` | B | The user's recording, copied in. | | `transcript--.txt` | B | Made on the user's machine by `scripts/transcribe.py`. | | `debrief--.md` | B | Shape: `interview-kit.md` section 6. | | `email-draft--.md` | B | The follow-up. The user sends. | | `applications/_common/question-bank.md` | B | Every question asked, by category. Shape: `interview-kit.md` section 8. | Also updated: `applications/_common/interview-stories.md`, "What you have told them" in `APPLICATION-ANSWERS.md`, `job-tracker.xlsx`, `WORKING-PAD.md` (a call within the hour), and `user-story.md`. `` is the person's name exactly as the source gives it, lowercase, with hyphens (`sam-lee`). Note the order: the transcript puts the date first, the debrief puts the name first. ## Steps ### Part A: when a call is known **A time is confirmed when the other side has agreed to it in writing** (their calendar invite, or their reply naming the day and time). A slot the user picked but the other side has not yet agreed to is **proposed**: write the prep, but create no calendar events and no "booked" wording until it is confirmed; set the next action to "You: send the reply; tell Hope when they confirm". **If a source's weekday and date disagree** (for example "Thu 16 Oct" when 16 Oct is a Friday), do not pick one: ask the user to confirm the day with the sender first. **If the interviewer's name differs from the prep file**, use the newest source and note the change in the prep file. A call is known when it is in an email, an invite, a `hope-sync` report, or the user says so. **A call within the next hour outranks everything.** Do step 1. Add a "Paused" entry to `WORKING-PAD.md` for the work it interrupts (no `WORKING-PAD.md` yet: create it from `hunt-folder.md` section 5.7). Then do only the live-call sheet (step 3), the consent note (step 4) and the reminder (step 5). Say in one line that everything else waits until after the call. 1. **Say "Record this one. Start Voice Memos before you join." as the first line of your reply.** Then run `date "+%A %d %B %Y %H:%M %Z"`. Convert the call time to the user's time zone with a command, never in your head. Use full zone names: PT is `America/Los_Angeles`, MT `America/Denver`, CT `America/Chicago`, ET `America/New_York`. Change the date, the time and both zone names: ```bash python3 -c "from datetime import datetime; from zoneinfo import ZoneInfo as Z; t=datetime(2026,10,15,10,0,tzinfo=Z('America/Los_Angeles')); print(t.astimezone(Z('America/New_York')).strftime('%A %d %b %Y, %I:%M %p %Z'))" ``` Take the call's zone from the invite or the email. None given, or the invite, `JD.md` and `profile.md` disagree: treat it as unknown and ask. The time is not fixed yet: say the record line now, and do step 5 once it is. **Check:** your reply opens with the record line, and gives the call's weekday, date and time in the user's zone. 2. **Read before you write.** - The role folder: `JD.md`, `APPLICATION-ANSWERS.md` (read "What you have told them" closely), every `debrief-*.md` (its "Fix before ..." list), every `sent-*.md`, every `transcript-*.txt`. - `HUNT-PROTOCOL.md` (the canon), `applications/_common/profile.md` (sections 1, 2, 3, 4, 7), `applications/_common/interview-stories.md`, `applications/_common/question-bank.md`. - No role folder for this company (`ls applications/`): make one first. With a posting link: `python3 "$PLUGIN_ROOT/scripts/fetch_jd.py" "" --slug auto --hunt-dir "" --source ""`. Exit code 2 or no link: make the folder by hand and ask the user to paste the job text into `JD.md`. An agency that does not name its client: use the agency name as the company. **Check:** you can say in one line each: the round, who it is with, what the user already told this company, and the open fixes from the last debrief. 3. **Write or update `applications//INTERVIEW-PREP.md`** in the shape in `interview-kit.md` section 5.2. Update it in place. Never add a second copy of a section. Remove any round that is over. 1. The top: the posting link, the folder path, the band, the location. 2. The round line: weekday, date, time in the user's zone, length, who (name and title exactly as the invite gives them), the meeting link, what this round decides, the record and consent note. 3. **The live-call sheet**: two columns, "Question" and "Keywords". One screen. Aim for under ten words a cell. Keyword bullets, never sentences to read aloud. "Tell me about yourself" holds the three beats. "Pay, if asked" holds one number, then "Stop." "Keep the same" holds what is already settled (pay said, location, start date, work authorization, other processes), matching "What you have told them". 4. **Company brief**: their own one-line description, their customers, what they buy and why, dated news, and this role's part in that. Look each line up fresh every time you rebuild the prep, with a link and the date (P1). Never from memory. A source you cannot reach: write "unverified" next to that line. Check the brief against `JD.md`. 5. **Overlap**: what the JD asks, in its words, next to the user's evidence from the canon and `interview-stories.md`. 6. **Gaps**: a primer of two or three plain lines, then one true adjacent line in keywords. Pitch it at the depth people speak in the room: decisions and trade-offs, not trivia. 7. **Questions to ask**: three or four, specific to this person and this company, modelled on the user's best past questions in `question-bank.md` ("Closing"). Never generic. Offer them through `AskUserQuestion`. The user picks two. Put those two on the sheet. 8. **Likely questions**: from `question-bank.md` first. Add the follow-ups the user's own numbers will trigger ("37% of what?"). 9. **Recap of earlier calls** (a follow-up call with the same company): built from the transcripts, as a short play script grouped by topic (`interview-kit.md` section 5.3). Fact-check the user's own talking points. Every number on the sheet needs a hit: ```bash grep -n "" HUNT-PROTOCOL.md applications/_common/profile.md career-graph/career.json applications/_common/interview-stories.md ``` No hit: ask the user. Never leave an unchecked number on the sheet. **Check:** `grep -n "^## \|^### " applications//INTERVIEW-PREP.md` shows this round, "Live-call sheet", "Company brief", "Overlap", "Gaps" and "Questions to ask", and no finished round. Every number on the sheet had a hit. 4. **Write the consent note** into the round line. Clues to where the other person is: their email signature, the invite's time zone, the company's office in `JD.md`. All-party US states include California, Connecticut, Delaware, Florida, Illinois, Maryland, Massachusetts, Michigan, Montana, Nevada, New Hampshire, Oregon, Pennsylvania and Washington. If the person may be in one, the clues disagree, or you do not know: the user asks first ("Do you mind if I record this so I can take proper notes?"), or records only their own side. Outside the US, check the country's rule. This is background, not legal advice. The user decides. **Check:** the round line has a consent note that names the likely place and the action. 5. **Put it on the calendar**, after steps 3 and 4. A reminder for this call may already exist (`hope-sync` makes one): update its description with the brief, never add a second. Use the host's calendar tool if it has one. Use the user's personal calendar, never a work calendar their employer can see (rule 14). Not sure which calendar: ask. Never add attendees. Never send invites. Guest notifications: none. | Event | Title | Start | Length | Show as | Alarms | Description | |---|---|---|---|---|---|---| | The reminder | `馃敶 RECORD THE CALL - / in 10 min` | 10 min before the call | 10 min | free | 10 and 0 min | The brief, below | | The call, if not already there | ` - with ` | The call time | The call length | busy | 60 and 15 min | The meeting link, and `Full prep: applications//INTERVIEW-PREP.md` | | Prep blocks, only if asked | `Prep: - ` | When the user says | As asked | busy | The calendar default | The focus line, never just "prep" | The brief (`interview-kit.md` section 1). The user has not picked questions yet: use the first two options, and update the event once they pick. ``` Round: , . This call decides: . Three beats: 1) <...> 2) <...> 3) <...> Have ready: the r茅sum茅 as sent, the one comp number, the two questions, water. Ask: 1) 2) Already settled (do not reopen): Consent: may be in . Full prep: applications//INTERVIEW-PREP.md ``` No calendar tool: ask whether the invite is already on the user's calendar. Then make the `.ics` files. As in `interview-kit.md` section 1, the description file is `INTERVIEW-PREP.md` itself: its top holds the round line and the live-call sheet. `--start` is the user's own clock time, with no zone. ```bash Write the brief section of `INTERVIEW-PREP.md` (the round, three beats, have-ready list, two questions, consent note; never pay numbers) to `applications//record-brief.md` first; that short file is the event description. The whole prep file never goes into a calendar event. python3 "$PLUGIN_ROOT/scripts/make_ics.py" --title "馃敶 RECORD THE CALL - Acme Design Systems / Alex Kim in 10 min" --start "2026-10-15T12:50" --minutes 10 --alarm 10 --alarm 0 --free --description-file "applications/acme-senior-product-designer/record-brief.md" --out "applications/acme-senior-product-designer/record-reminder-2026-10-15.ics" python3 "$PLUGIN_ROOT/scripts/make_ics.py" --title "Acme Design Systems - hiring manager call with Alex Kim" --start "2026-10-15T13:00" --minutes 45 --alarm 60 --alarm 15 --description "Join: https://zoom.example/j/123 路 Full prep: applications/acme-senior-product-designer/INTERVIEW-PREP.md" --out "applications/acme-senior-product-designer/call-2026-10-15.ics" ``` Skip the second command if the invite is already on their calendar. Tell the user to double-click each `.ics` file to add it. **Check:** read the events back from the calendar tool. Or run `grep -E "SUMMARY|DTSTART|TRANSP|TRIGGER" applications//*.ics`: the reminder starts 10 minutes before the call and shows `TRANSP:TRANSPARENT`, `TRIGGER:-PT10M` and `TRIGGER:PT0M`. 6. **A comp or offer call gets one more page.** Add the "Comp call" section to `INTERVIEW-PREP.md` (`interview-kit.md` section 5.4): 1. The numbers on file: the floor, the ask and the ATS value from `profile.md` section 3, and what was already said, from "What you have told them". 2. The "if they say, you say" table, filled only from those numbers. Include the offer-below-the-floor row. Full lines are fine here: in a pay talk the exact words matter. 3. A monthly take-home estimate for the state where the user will work, from a current public paycheck calculator, marked "estimate", with the link and the date. 4. Benefits from `JD.md` (bonus, equity, retirement match, health, time off). "not stated" where the posting is silent. Those become questions. 5. Moving costs, if the role needs a move. Pay stays out of writing until the call. Never cite an offer that has lapsed or does not exist. **Check:** every number in the table appears in `profile.md` section 3 or "What you have told them". 7. **Update the tracker and the working pad.** ```bash python3 "$PLUGIN_ROOT/scripts/tracker.py" update --hunt-dir "" --match "" --role "" --status "Interviewing - on " --next "You: record the call; then hand Hope the file" (or "You: send the reply; tell Hope when they confirm" while the time is only proposed) --note " with booked for ,