Interview Prep

SkillFiles & storage

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.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Interview Prep skill

What this skill tells your AI

The instructions your AI receives, as published by matyasstoch/david-skills in skills/interview-prep/SKILL.md and read by ahel’s review.

Two files matter:

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

  1. Confirm the role with David if unclear (PA, YouTube strategist, AI dev, etc.).
  2. List ~/Downloads/*.csv by mtime, pick newest matching responses-*.csv.
  3. Read the entire file. Row 1 is the schema header (~30+ columns); row 2 is the answers.
  4. 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
  5. If they reference a company/channel/person, WebSearch to verify. Report concisely.
  6. 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.
  7. 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":

  1. Find #N in ## Generic Questions or ## Custom Questions.
  2. Remove that line.
  3. Append to ## Already Asked as - ✅ {question text}.
  4. 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":

  1. Read both source CSVs (NOT the candidate files — keep impressions out).
  2. 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
  3. 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"):

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

Signals

GitHub stars
59
Forks
11
Last commit
Jun 2026
Advanced
Catalog kind
skill
Gateway key
interview-prep-matyasstoch
Source
github.com/matyasstoch/david-skills