# How Candidate Profiles Are Structured in 01-candidate-profile.md for Application Generation

> Discover how candidate profiles are structured in 01-candidate-profile.md using a strict Markdown layout for automated CV generation cover letter drafting and interview prep.

- Repository: [Mads Lorentzen/ai-job-search](https://github.com/MadsLorentzen/ai-job-search)
- Tags: architecture
- Published: 2026-07-14

---

**The candidate profile in [`01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/01-candidate-profile.md) follows a strict section-based Markdown layout that enables automated parsing for CV generation, cover-letter drafting, and interview preparation.**

The **ai-job-search** repository by MadsLorentzen uses a structured Markdown file located at [`.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 store all personal data required for job applications. When you run the `/setup` command, this file populates with your information, serving as the single source of truth that downstream agents grep and parse to generate LaTeX-based application artifacts.

## Overview of the Profile Structure

The **candidate profile structure** is designed for deterministic parsing. Each section uses a specific Markdown pattern that the automation expects, ensuring reproducible extraction of data for templates. The file is **additive only**—the system never overwrites existing content unless you explicitly invoke the `/reset profile` command.

Agents access this profile to populate `cv/main_<company>.tex` templates, insert personalized paragraphs into `cover_letters/cover_<company>_<role>.tex`, and generate STAR-method interview examples by re-using bullets from your work history.

## Section-by-Section Format Requirements

### Identity

The **Identity** section contains core contact information and personal attributes. It uses a bullet list with bolded field names followed by values.

```markdown

## Identity

- **Name:** Jane Doe
- **Location:** Copenhagen, Denmark
- **Phone:** +45 1234 5678
- **Email:** jane.doe@example.com
- **LinkedIn:** https://linkedin.com/in/janedoe
- **GitHub:** https://github.com/janedoe
- **Languages:** English (Fluent), Danish (Native)
- **Status:** Open to new opportunities
- **Constraints:** Willing to relocate within Scandinavia

```

### Education

The **Education** section requires a Markdown table with four columns: Degree, Period, Institution, and Key Topics.

```markdown

## Education

| Degree               | Period      | Institution          | Key Topics                     |
|----------------------|-------------|----------------------|--------------------------------|
| MSc Computer Science | 2018-2020   | University of Copenhagen | Distributed Systems, ML        |

```

### Professional Experience

Each role in the **Professional Experience** section uses a level-3 heading followed by a location line and bullet points describing achievements.

```markdown

## Professional Experience

### Data Scientist - TechCorp (2020-2023)

Copenhagen, Denmark
- Designed a recommendation engine that increased user engagement by 12%.
- Built automated data pipelines with Apache Airflow.
- Presented findings to senior leadership monthly.

### Software Engineer Intern - StartUpX (Summer 2019)

Copenhagen, Denmark
- Developed a micro-service in Go that handled 10k req/s.
- Refactored legacy codebase to improve test coverage from 45% to 80%.

```

### Independent Projects

The **Independent Projects** section lists side-projects and open-source contributions using a simple bullet list with the project name in bold.

```markdown

## Independent Projects

- **MyApp**: A personal finance tracker built with Python and React
- **OpenSourceLib**: Contributed CI/CD automation and documentation

```

### Technical Skills

**Technical Skills** uses categorized sub-headings (`### Programming & ML`, `### Domain Expertise`, `### Software & Tools`) containing bullet lists with proficiency levels.

```markdown

## Technical Skills

### Programming & ML

- **Python** (Advanced): pandas, NumPy, PyTorch
- **SQL** (Intermediate): PostgreSQL, query optimization

### Software & Tools

- **Git**: Advanced branching strategies and rebasing
- **Docker**: Containerization and multi-stage builds

```

### Publications, Awards, and References

These sections follow simpler formats:
- **Publications**: Ordered list with full academic citations
- **Awards**: Bullet list with honor details and dates
- **References**: Bullet list with name, title, company, email, and phone

```markdown

## Publications

1. Doe, J. (2022). Advanced Machine Learning Techniques. Journal of AI Research.

## Awards

- Best Paper – XYZ Conference (2021)
- Dean's List 2019-2020

## References

- Jane Smith, Senior Manager, Acme Corp (jane@acme.com, +1-555-1234)

```

## Parsing the Profile Programmatically

The automation accesses specific sections using pattern matching on the Markdown headers. Below is the Python-style logic used by the CLI to extract section content:

```python
import re, pathlib

def read_section(file_path: str, heading: str) -> str:
    txt = pathlib.Path(file_path).read_text()
    # Grab content until next top-level heading

    pattern = rf"## {heading}\n(.*?)(?:\n## |\Z)"

    return re.search(pattern, txt, re.S).group(1).strip()
    
identity = read_section(".../01-candidate-profile.md", "Identity")
print(identity.splitlines()[:3])   # shows first three bullets

```

This parsing strategy allows the system to safely extract data without complex Markdown parsers, enabling quick population of LaTeX templates defined in [`05-cv-templates.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/05-cv-templates.md).

## Integration with the Application Workflow

The candidate profile connects to several key files in the workflow:

- **[`CLAUDE.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/CLAUDE.md)**: The human-readable master profile where you initially document your experience; the `/setup` command extracts data from here into the structured [`01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/01-candidate-profile.md)
- **[`04-job-evaluation.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/04-job-evaluation.md)**: Defines how your profile scores against specific job postings
- **[`05-cv-templates.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/05-cv-templates.md)**: Provides LaTeX templates that consume the structured profile data to generate company-specific CVs

Because the profile is pure Markdown, agents can deterministically locate sections using simple regex patterns, ensuring that updates to your experience automatically propagate to all generated application materials.

## Summary

- **The candidate profile structure** in [`01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/01-candidate-profile.md) uses strict Markdown conventions to enable automated parsing for job applications.
- **Eight required sections** (Identity, Education, Professional Experience, Independent Projects, Technical Skills, Publications, Awards, References) each follow specific formatting rules for bullets, tables, or headings.
- **The file is additive only** and persists across sessions unless explicitly reset with `/reset profile`.
- **Downstream agents** grep section headers to populate LaTeX CV templates and cover letters stored in `.claude/skills/job-application-assistant/`.
- **Pattern-based extraction** allows the `/setup` command to reliably convert human-readable input into structured data for the application generation pipeline.

## Frequently Asked Questions

### What happens if I modify the formatting in 01-candidate-profile.md?

The automation relies on specific Markdown patterns (bullet lists with bold prefixes, tables with explicit headers, level-3 headings for jobs). If you alter these structures—for example, removing bold markers from field names or changing table column counts—the parsing regex in the CLI will fail to extract your data, resulting in empty sections in generated CVs or cover letters.

### How does the system handle updates to my experience?

The profile file follows an **additive-only** policy. When you run `/setup` again, the system appends new information or updates placeholders without removing existing content. If you need to completely rebuild your profile from scratch, you must explicitly use the `/reset profile` command, which clears the file and re-initializes it from [`CLAUDE.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/CLAUDE.md) or interactive input.

### Can I use this profile structure for non-technical roles?

Yes. While the example content emphasizes software engineering and data science fields, the **candidate profile structure** is agnostic to industry. Simply adapt the **Technical Skills** section to reflect relevant competencies (e.g., "Project Management", "Salesforce", "Legal Research") and use the **Professional Experience** section to highlight achievements in your specific domain using the same bullet-point format.

### Where does the initial data come from when setting up the repository?

The `/setup` command extracts initial data from the `documents/` folder in your repository or prompts you interactively. This information populates the placeholders in [`01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/01-candidate-profile.md), which then serves as the canonical source for all subsequent application generation, as defined in the workflow configuration and [`CLAUDE.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/CLAUDE.md).