# How the Candidate Profile Is Defined and Managed in the AI Job Search Framework

> Discover how the AI Job Search Framework defines and manages candidate profiles using structured markdown and simple commands. Learn to maintain a single source of truth for your job search.

- Repository: [Mads Lorentzen/ai-job-search](https://github.com/MadsLorentzen/ai-job-search)
- Tags: how-to-guide
- Published: 2026-09-03

---

**The AI Job Search Framework stores the candidate profile as structured markdown in [`CLAUDE.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/CLAUDE.md) and [`.claude/skills/job-application-assistant/01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/skills/job-application-assistant/01-candidate-profile.md), managing it through dedicated commands like `/setup`, `/expand`, and `/reset` to ensure a single source of truth across all AI-driven job search workflows.**

The MadsLorentzen/ai-job-search repository treats your professional identity as version-controlled data that powers automated job ranking, application generation, and skill-gap analysis. By centralizing **candidate profile** information in specific markdown files and manipulating them through slash commands, the framework eliminates redundancy while maintaining strict factual accuracy across all AI interactions.

## Where the Candidate Profile Is Stored

The framework implements a dual-file strategy to balance human readability with machine consumption.

**[`CLAUDE.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/CLAUDE.md)** serves as the human-readable source of truth located in the repository root. This file contains the complete **candidate profile** starting at line 14, structured with markdown headers for sections such as **Identity**, **Education**, **Professional Experience**, **Technical Skills**, **Behavioral Profile**, **Certifications**, target sectors, and deal-breakers. According to the repository source, this file is automatically populated during initial setup and includes a verification checklist at lines 108-110 to enforce factual accuracy before generating any application materials.

**[`.claude/skills/job-application-assistant/01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/skills/job-application-assistant/01-candidate-profile.md)** functions as the machine-readable canonical source. All AI skills—including job ranking, application assistance, and upskilling—reference this file when retrieving candidate facts. Located within the hidden `.claude` directory, this file mirrors the structured sections found in [`CLAUDE.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/CLAUDE.md) but serves as the definitive programmatic interface for the framework's agents.

## Structure of the Candidate Profile

Both storage locations follow an identical section hierarchy to ensure consistency between human editing and AI consumption.

### Core Identity and Background

The profile begins with **Identity** and **Education** sections that establish your legal name, contact information, degrees, institutions, and graduation dates. These fields provide the foundational data required for CV headers and application forms.

### Professional History and Skills

The **Professional Experience** section chronicles work history with position titles, companies, dates, and quantifiable achievements. Adjacent to this, **Technical Skills** catalogs programming languages, frameworks, tools, and proficiency levels. The **Behavioral Profile** subsection captures soft skills, leadership style, and communication preferences essential for culture-fit analysis.

### Strategic Preferences

Additional sections document **Certifications**, **Target Sectors** for industry focus, and **Deal-Breakers** that define non-negotiable requirements such as remote work policies or compensation floors. These parameters filter job opportunities during the automated ranking phase.

## Managing the Candidate Profile Lifecycle

The framework provides three primary commands to manipulate profile data without risking manual corruption of the structured markdown.

### Initial Creation with /setup

The `/setup` command, documented in [`.claude/commands/setup.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/commands/setup.md), initiates an interactive prompt sequence that populates both [`CLAUDE.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/CLAUDE.md) and [`01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/01-candidate-profile.md) simultaneously. This command writes the complete profile structure with your responses, establishing the foundational data layer required before executing any other workflow steps.

### Incremental Enrichment with /expand

The `/expand` command, implemented in [`.claude/commands/expand.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/commands/expand.md), performs additive updates to the candidate profile by ingesting external data sources such as PDF résumés, LinkedIn exports, or project documentation. This operation appends newly discovered competencies to existing sections without overwriting current data, ensuring the profile grows monotonically. For example, running `/expand pdf path/to/resume.pdf` extracts skills and certifications and merges them into the appropriate markdown sections.

### Resetting Profile Data with /reset

When switching context to a different candidate or clearing stale data, the `/reset profile` sub-command—defined in [`.claude/commands/reset.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/commands/reset.md)—selectively clears profile-related content from the skill files while preserving other workflow artifacts such as job listings or generated cover letters. This granular reset prevents cross-contamination between candidate identities.

### Verification and Accuracy Enforcement

Before any CV or cover letter generation, the framework enforces a verification routine via the checklist embedded at lines 108-110 of [`CLAUDE.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/CLAUDE.md). This checkpoint requires explicit confirmation that all claims match the stored candidate profile, preventing the AI from hallucinating qualifications or experiences not present in the canonical source files.

## Accessing the Candidate Profile Programmatically

Developers and power users can interact with the profile directly through standard filesystem operations or within custom scripts.

Initialize the profile for a new user:

```bash
/setup

```

Add competencies discovered in external documents:

```bash
/expand pdf documents/resume.pdf

```

Clear the current profile to start fresh:

```bash
/reset profile

```

Preview the human-readable profile content:

```bash
cat CLAUDE.md | grep -A 20 "## Candidate Profile"

```

Access the machine-readable version within Python automation:

```python
from pathlib import Path

# Load the canonical profile used by AI skills

profile_path = Path(".claude/skills/job-application-assistant/01-candidate-profile.md")
profile_content = profile_path.read_text(encoding="utf-8")

# Extract specific sections for custom analysis

print(profile_content[:500])  # Display first 500 characters

```

Reference the profile within skill development, as shown in [`.claude/skills/upskill/SKILL.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/skills/upskill/SKILL.md), to eliminate already-known skills when generating learning recommendations.

## Summary

- The **candidate profile** lives in two synchronized locations: [`CLAUDE.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/CLAUDE.md) for human editing and [`.claude/skills/job-application-assistant/01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/skills/job-application-assistant/01-candidate-profile.md) for machine consumption.
- Profile structure includes **Identity**, **Education**, **Professional Experience**, **Technical Skills**, **Behavioral Profile**, and strategic preferences such as target sectors and deal-breakers.
- **Lifecycle management** occurs through `/setup` (creation), `/expand` (additive updates), and `/reset profile` (targeted deletion).
- A **verification checklist** at lines 108-110 of [`CLAUDE.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/CLAUDE.md) enforces factual accuracy before generating application materials.
- Agents treat the profile as read-only outside designated commands, maintaining a single source of truth across the job search pipeline.

## Frequently Asked Questions

### What file format stores the candidate profile?

The framework uses **Markdown** files with structured headers. [`CLAUDE.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/CLAUDE.md) provides the human-readable interface, while [`.claude/skills/job-application-assistant/01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/skills/job-application-assistant/01-candidate-profile.md) serves as the machine-readable source that AI skills reference directly.

### How do I update my profile after adding new work experience?

Use the `/expand` command with relevant source material. For example, `/expand pdf new_role_offer.pdf` extracts details from the document and appends them to your existing **Professional Experience** section without overwriting previous entries, preserving your complete history.

### Will resetting my profile delete my saved job applications?

No. The `/reset profile` command specifically targets only the candidate data within the skill files. According to [`.claude/commands/reset.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/commands/reset.md), this operation clears identity and experience sections while preserving other workflow artifacts such as ranked job lists and generated cover letters stored elsewhere in the repository.

### Which AI skills depend on the candidate profile?

All major skills reference the profile, including the **Job Application Assistant** (`.claude/skills/job-application-assistant/`), the **Upskill** advisor ([`.claude/skills/upskill/SKILL.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/skills/upskill/SKILL.md)), and the job ranking system. These tools read from [`.claude/skills/job-application-assistant/01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/skills/job-application-assistant/01-candidate-profile.md) to personalize outputs and filter opportunities based on your documented skills and deal-breakers.