How the /interview Preparation System Works in the AI Job Search Framework
The /interview command is a deterministic, six-step pipeline that converts tracked job applications into stage-specific preparation packs by orchestrating archived documents, cached research, and reusable STAR frameworks without mutating core knowledge-base files.
The MadsLorentzen/ai-job-search repository implements a file-based workflow system where the interview preparation system acts as a thin-pointer orchestrator. All persistent state resides in the documents/applications/ archive, while the command defined in .claude/commands/interview.md coordinates data retrieval and document generation through a reproducible, side-effect-free process.
The Thin-Pointer Architecture
The system adheres to the thin-pointer principle used throughout the framework. Rather than embedding logic in monolithic scripts, the interview preparation system maintains state in the archive (documents/applications/<company>_<role>/) and references immutable knowledge-base files.
This design ensures that .claude/commands/interview.md never modifies framework files unless you explicitly approve a change. The command reads from job_search_tracker.csv to resolve targets, pulls context from LaTeX and Markdown archives, and writes outputs only to the specific application subfolder.
Step-by-Step Workflow Execution
Step 1: Parse Input and Resolve Applications
The command receives $ARGUMENTS (e.g., /interview acme) and queries job_search_tracker.csv for matching rows. According to the source in .claude/commands/interview.md (Lines 11-17), if no argument is provided, the system lists all tracked applications with status interview, offer, or recent applied, presenting a selector interface.
Step 2: Load Application Context from Archive
Using the subfolder naming convention documents/applications/<company>_<role>/, the system loads three core artifacts: job_posting.md, the submitted cv_draft.tex and cover_letter.tex, and outcome.md. As implemented in .claude/commands/interview.md (Lines 24-30), fallback mechanisms trigger WebFetch for missing postings or locate older CV versions if the archive structure differs.
Step 3: Read Framework Knowledge Bases
Before processing, the command pre-loads four reusable markdown files located in .claude/skills/job-application-assistant/:
07-interview-prep.md(STAR examples and roleplay guidelines)01-candidate-profile.md(centralized candidate facts)02-behavioral-profile.md(behavioral feedback rules)04-job-evaluation.md(company research checklist)
The source in .claude/commands/interview.md (Lines 31-35) specifies these files are read once and cached for the duration of the workflow, preventing redundant I/O during subsequent generation steps.
Step 4: Execute Interview-Focused Company Research
The system checks the Company Research Cache at company_research/<normalized-company>.json. If the cache is stale, it executes the checklist defined in 04-job-evaluation.md, scraping company websites, reviews, LinkedIn, and media sources.
As detailed in .claude/commands/interview.md (Lines 38-50), this step includes interview-specific intelligence: identifying interviewer profiles and extracting 2-3 conversation hooks. All facts require independent WebFetch verification before inclusion. Fresh research writes back to the JSON cache for reuse in future /apply or /interview runs.
Step 5: Build the Interview Prep Pack
The workflow generates interview_prep_<stage>.md in the application archive. According to .claude/commands/interview.md (Lines 53-81), this document contains:
- Likely questions derived from posting requirements, fit-evaluation gaps, and prior feedback
- STAR answer mapping reusing examples from
07-interview-prep.mdor drafting new fact-based responses (pending user approval) - Consistency brief verifying alignment between prep content and submitted CV/cover letter claims
- Tough questions, Questions to ask, and Logistics (date, format, interviewer names)
Step 6: Offer Live Mock Interview Practice
Upon pack completion, the system prompts for roleplay practice. If accepted, .claude/commands/interview.md (Lines 85-90) initiates a dialogue following the Roleplay Guidelines in 07-interview-prep.md. After each response, the system delivers concise feedback calibrated against the behavioral metrics in 02-behavioral-profile.md.
Core Constraints and Safety Rules
The implementation in .claude/commands/interview.md (Lines 103-111) enforces five critical constraints:
- Consistency: Prep content must not contradict submitted CV or cover letter claims
- Honesty on gaps: Use bridge answers for experience gaps; never fabricate qualifications
- Verified research only: All company facts require independent confirmation via WebFetch or WebSearch
- Stage-appropriate: Output formats adapt to interview type (phone, technical, final)
- Write only to the archive: Framework files remain immutable unless you explicitly approve a STAR addition
Practical Command Examples
Invoke the interview preparation system via the CLI or chat interface:
# Target a specific company by name
/interview acme
# List all interview-ready applications
/interview
# Returns: Selector of applications with status "interview", "offer", or recent "applied"
After generation, view the structured prep document directly:
cat documents/applications/acme_software_engineer/interview_prep_phone.md
The workflow concludes by prompting you to run /outcome <company> post-interview, feeding new feedback into outcome.md for continuous improvement.
Summary
- The AI Job Search interview preparation system operates as a deterministic pipeline defined in
.claude/commands/interview.md - It orchestrates rather than mutates, reading from
job_search_tracker.csvand thedocuments/applications/archive while writing only to stage-specific prep files - Company research is cached in
company_research/<normalized-company>.jsonto avoid redundant WebFetch calls - The system generates
interview_prep_<stage>.mdcontaining STAR mappings, consistency checks, and logistics - Optional mock interviews provide immediate feedback against
02-behavioral-profile.mdbehavioral criteria - All outputs must maintain strict consistency with submitted materials and require verified facts only
Frequently Asked Questions
How does the system handle missing application files?
If job_posting.md or submitted CV files are missing from documents/applications/<company>_<role>/, the workflow invokes fallback mechanisms. According to .claude/commands/interview.md (Lines 24-30), the system attempts to retrieve the posting via WebFetch or locate older CV/cover-letter versions in alternate archive paths before failing.
Can I modify the STAR examples used in the prep pack?
Yes, but only through explicit user approval. The system reads reusable STAR examples from 07-interview-prep.md and maps them to likely questions. If drafting new examples, the workflow presents them for approval before writing to the archive, ensuring the central knowledge base remains immutable unless you authorize changes.
What determines which applications appear in the selector when running /interview without arguments?
The selector displays applications with tracker status interview, offer, or recent applied entries. As defined in .claude/commands/interview.md (Lines 11-17), the system filters job_search_tracker.csv for these status values, presenting only active pipeline candidates rather than closed or rejected applications.
How is feedback generated during the mock interview simulation?
During roleplay, the system evaluates your responses against the Roleplay Guidelines in 07-interview-prep.md and behavioral criteria from 02-behavioral-profile.md. As implemented in .claude/commands/interview.md (Lines 85-90), feedback is delivered immediately after each answer, calibrated to the specific behavioral profile dimensions defined in the framework.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →