| name | interview-prep |
| description | Use when David is interviewing a candidate for an office hire. Parses the latest candidate application CSV from ~/Downloads, builds a TLDR + flags, copies the master question list into a per-candidate file, generates 5–6 sharp custom questions, tracks asked questions + live notes during the call, and runs a post-interview debrief. Triggers on interview prep, parse the candidate, candidate TLDR, build interview questions, custom questions for this guy, mark question as asked, reset to un-asked, next candidate, compare candidates, post-interview verdict, debrief. |
Interview Prep
Two files matter:
-
Master question files (role-specific): work/hiring/interview-questions-{role}.md
- One master per role (e.g.,
interview-questions-pa.md, interview-questions-yt-strategist.md, interview-questions-ai-dev.md).
- Fallback:
work/hiring/interview-questions.md if no role-specific file exists.
- Generic, reusable questions only.
- Never edited during interviews. Source of truth.
- Numbered list 1–N.
-
Per-candidate file: work/hiring/candidates/{firstname-lastname}.md (kebab-case)
- Created at the start of each interview by COPYING the role-appropriate master.
- Holds: TLDR, generic questions, custom questions, her-questions section (if relevant), notes, asked log, post-interview verdict.
- Everything live happens in this file only.
When to Use
- "Next candidate" / "parse the CSV" → run Parse + Init.
- "Give me X custom questions" / "attack the gaps" → run Generate.
- "Mark #N as asked" → run Track.
- "Note:" / "add to notes" / any live observation → run Note.
- "Compare candidates X and Y" / "CSV vs CSV" → run Compare.
- "Debrief" / "interview over" / "extract my impressions" → run Post-Interview Verdict.
- "Edit the master" → edit master only, no candidate file involved.
Procedure
1. Parse + Init candidate file
- Confirm the role with David if unclear (PA, YouTube strategist, AI dev, etc.).
- List
~/Downloads/*.csv by mtime, pick newest matching responses-*.csv.
- Read the entire file. Row 1 is the schema header (~30+ columns); row 2 is the answers.
- Build TLDR:
- Identity: name, general location, current status
- The good: concrete numbers, real achievements, verifiable experience
- Yellow/red flags: evasions, vague claims, contradictions, mismatches
- What's MISSING: dodged questions, blanks, no portfolio links
- Bottom line: one sentence verdict
- If they reference a company/channel/person, WebSearch to verify. Report concisely.
- Create the candidate file:
work/hiring/candidates/{firstname-lastname}.md (lowercase kebab-case).
- Read the role-specific master (or fallback master).
- Copy its full numbered list into the candidate file under
## Generic Questions.
- If the applicant submitted return questions in the CSV (the "Do you have any questions for us?" field), add a
## Her Questions to Address (end of interview) section listing them.
- Use the template below.
- Open the file in Cursor:
cursor work/hiring/candidates/{name}.md.
Candidate file template
# Interview — {Full Name}
**Date:** DD-MM-YYYY
**Source CSV:** ~/Downloads/{filename}.csv
## TLDR
{Identity, the good, flags, missing, bottom line}
## Generic Questions
1. {copied from master}
2. {copied from master}
...
## Custom Questions
{added in step 2 — candidate-specific only}
## Her Questions to Address (end of interview)
{only if the applicant returned questions in the form}
1. {their question}
2. {their question}
## Notes during interview
(none captured)
## Already Asked
- ✅ {question text}
- ✅ [her] {their question} ← when David addresses one of HER questions
2. Generate custom questions
5–6 questions. Append under ## Custom Questions in the candidate file, continuing the numbering from where the generic list ended.
Rules:
- Direct, specific, uncomfortable when warranted. No softballs.
- Attack gaps (dodged questions, blanks, vague answers).
- Probe inconsistencies.
- Test whether stated experience holds up under specifics.
- Match David's actual hiring need.
- Add one-line italic context under each — explaining what the question probes.
If David later says "these aren't candidate-specific, they're generic": move them from ## Custom Questions to ## Generic Questions, keep their numbers. Then ask David whether to promote them to the master file too.
3. Track ✅ live (during interview)
When David says "mark #N as asked":
- Find #N in
## Generic Questions or ## Custom Questions.
- Remove that line.
- Append to
## Already Asked as - ✅ {question text}.
- DO NOT renumber. Gaps are intentional.
When David says "mark her #N as asked" / "mark #N (her question) as asked" (or generic #N is already asked → only her list has it):
- Same flow, but log as
- ✅ [her] {her question}.
When David says "add a new question 'X'": append to the active list with the next sequential number.
4. Note (during interview)
Append a bullet to ## Notes during interview in the candidate file. Terse, one bullet per insight.
Trigger words/phrases: "note:", "add to notes", "observation:", or any in-passing remark about vibe/energy/setup/professionalism/red flag/green flag. Always capture — David won't always say "note:".
5. Compare candidates (CSV vs CSV)
When David says "compare X and Y" / "CSV vs CSV":
- Read both source CSVs (NOT the candidate files — keep impressions out).
- Build a side-by-side table covering:
- 24/7 commitment answer
- Current status (student/full-time/etc.)
- Travel/role-specific proof
- Scenario answer
- Video quality signal
- Curiosity (# of return questions)
- Age (if known)
- Polish + driver's license
- End with a 1–2 sentence verdict on who's stronger on paper, explicitly noting interview impressions are excluded.
6. Post-Interview Verdict
When the interview ends ("interview over" / "extract my impressions" / "debrief"):
- Use
AskQuestion to collect structured input. Default questions:
- Overall verdict (strong yes / maybe / pass / backup)
- Energy & vibe (high / mid / low / off)
- 24/7 commitment (yes / verbal-only / no / unclear)
- Top strengths (multi-select)
- Red/yellow flags (multi-select)
- Next step (reject / paid trial / 2nd round / wait / offer)
- Anything else (freeform skip option)
- Adapt the multi-select options to the role.
- Write a
## Post-Interview Verdict section at the bottom of the candidate file (after ## Already Asked). Use clear headers, bullet lists for strengths/flags, bold the verdict + next step.
7. Editing a master
When David says "edit the master" (specify role if ambiguous):
- Edit the relevant
work/hiring/interview-questions-{role}.md directly.
- Master is just the numbered list — no Custom/Notes/Asked sections.
- Do NOT touch any candidate files when editing the master.
Live Interview Mode — auto-commit + push
Trigger: Activates when David indicates the interview is actively happening (e.g. "the interview is about to start", "I'm on a call with her", "going forward", or any "mark #N as asked" / "note:" sequence in quick succession).
While in live mode, after every single edit to the candidate file (mark asked, add note, add question, etc.):
git add -A && git commit -m "interview: <terse description>" && git push
Do this immediately and silently — David needs the editor clean (no unstaged state) while focusing on the call.
Live mode ends when: David says "interview over" / "done" / runs the post-interview debrief. Before/after the interview, default to normal workflow (commit only when David asks).
Pitfalls (real failures to avoid)
- Don't edit the master during a live interview. All live actions happen in the candidate file.
- Don't drop reusable questions during a master edit. Many "custom" questions are role-generic. Ask David before dropping.
- Don't renumber when marking asked. Numbers are burned. Gaps are intentional.
- Don't restart numbering for custom questions. Generic + custom share one continuous sequence.
- Don't soften flags in TLDRs. If the candidate is weak, say so directly.
- Don't fabricate verification. If WebSearch finds nothing, say "couldn't verify."
- Don't pre-fill answers. Only mark a question asked when David explicitly says so.
- Don't lose notes by overwriting. Always Edit (append) — never Write the whole file unless reconstructing.
- Don't auto-push outside live mode. Only auto-commit during an active interview.
- Don't mix interview impressions into a CSV-vs-CSV compare. That defeats the purpose.
- Don't ambiguously interpret "mark #N as asked". If both Generic #N and Her #N exist, the one still in the active list is the target. If both exist, ask.
Verification
After each operation, verify:
- Parse + Init: candidate file exists with TLDR + Generic Questions + (Her Questions if any) + empty Custom/Notes/Asked sections.
- Generate: new
## Custom Questions entries, numbering continues, italic context under each.
- Track: question gone from active list, present as
- ✅ ... in Already Asked, remaining numbers unchanged.
- Note: new bullet in
## Notes, nothing else changed.
- Compare: side-by-side table, no interview impressions, explicit "on paper" verdict.
- Post-Interview Verdict: new section at bottom, structured fields, bolded verdict + next step.
- Live mode commits: every edit was followed by
git add -A && git commit && git push.