# How the /interview Preparation System Works in the AI Job Search Framework

> Discover how the /interview command in AI Job Search creates tailored prep packs from your applications. Learn about its deterministic six-step pipeline and data orchestration.

- Repository: [Mads Lorentzen/ai-job-search](https://github.com/MadsLorentzen/ai-job-search)
- Tags: deep-dive
- Published: 2026-08-29

---

**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](https://github.com/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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/job_posting.md), the submitted `cv_draft.tex` and `cover_letter.tex`, and [`outcome.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/outcome.md). As implemented in [`.claude/commands/interview.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/07-interview-prep.md) (STAR examples and roleplay guidelines)
- [`01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/01-candidate-profile.md) (centralized candidate facts)
- [`02-behavioral-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/02-behavioral-profile.md) (behavioral feedback rules)
- [`04-job-evaluation.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/04-job-evaluation.md) (company research checklist)

The source in [`.claude/commands/interview.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/04-job-evaluation.md), scraping company websites, reviews, LinkedIn, and media sources.

As detailed in [`.claude/commands/interview.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.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.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/07-interview-prep.md) or 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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/commands/interview.md) (Lines 85-90) initiates a dialogue following the **Roleplay Guidelines** in [`07-interview-prep.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/07-interview-prep.md). After each response, the system delivers concise feedback calibrated against the behavioral metrics in [`02-behavioral-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/02-behavioral-profile.md).

## Core Constraints and Safety Rules

The implementation in [`.claude/commands/interview.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.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:

```bash

# 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:

```bash
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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/outcome.md) for continuous improvement.

## Summary

- The **AI Job Search interview preparation system** operates as a deterministic pipeline defined in [`.claude/commands/interview.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/commands/interview.md)
- It **orchestrates** rather than mutates, reading from `job_search_tracker.csv` and the `documents/applications/` archive while writing only to stage-specific prep files
- **Company research** is cached in `company_research/<normalized-company>.json` to avoid redundant WebFetch calls
- The system generates **`interview_prep_<stage>.md`** containing STAR mappings, consistency checks, and logistics
- **Optional mock interviews** provide immediate feedback against [`02-behavioral-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/02-behavioral-profile.md) behavioral 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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.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`](https://github.com/MadsLorentzen/ai-job-search/blob/main/07-interview-prep.md) and behavioral criteria from [`02-behavioral-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/02-behavioral-profile.md). As implemented in [`.claude/commands/interview.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.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.