Where Does the AI Job Search Framework Store Candidate Profile Information?
The AI Job Search Framework stores candidate profile information in immutable markdown files—specifically CLAUDE.md and .claude/skills/job-application-assistant/01-candidate-profile.md—that serve as the single source of truth for all factual grounding during job application workflows.
The MadsLorentzen/ai-job-search repository implements a factual grounding architecture that prevents hallucinated claims in generated documents. Instead of storing candidate data in databases or ephemeral JSON files, the framework persists profile information in version-controlled markdown files. This design ensures that every CV bullet, cover letter paragraph, and job evaluation metric can be traced back to a specific, immutable line in a candidate profile document.
Immutable Markdown as the Single Source of Truth
The framework rejects traditional database storage in favor of human-readable markdown files located in the repository root and the .claude/skills/ directory. According to the source code, all downstream skills—such as /upskill and /rank—read from these files to obtain verified facts about the candidate's identity, education, and experience. The CLAUDE.md file explicitly mandates that "All claims match actual profile (CLAUDE.md / candidate profile)" through its verification checklist before any document generation occurs.
Core Profile Storage Files
The framework distributes candidate information across three primary markdown files, each serving a distinct purpose in the factual grounding pipeline.
CLAUDE.md — The Master Profile
Located in the repository root, CLAUDE.md functions as the master human-readable profile. Created and updated via the /setup command, this file contains high-level identity information, education history, work experience, and skills. Every workflow step references CLAUDE.md when evaluating job postings or tailoring application materials. The verification checklist within this file enforces that all output claims must match the data stored in either CLAUDE.md or the structured candidate profile.
01-candidate-profile.md — Structured Machine-Readable Data
The file .claude/skills/job-application-assistant/01-candidate-profile.md mirrors the data in CLAUDE.md but organizes it into machine-readable sections such as Identity, Languages, and Skills. This structured format enables deterministic parsing by downstream automation scripts. All evaluation gates and document generation skills parse this file to extract specific factual claims—such as email addresses, programming languages, or degree titles—that must appear verbatim in generated outputs.
02-behavioral-profile.md — Assessment Data
While not strictly hard facts, .claude/skills/job-application-assistant/02-behavioral-profile.md stores behavioral assessments including PI (Predictive Index), DISC, and MBTI results. These psychological traits influence fit evaluation algorithms and contribute to the factual grounding used when determining role compatibility. The framework treats these assessments as immutable reference data during the screening process.
Programmatic Access to Profile Data
Developers and automation scripts can parse these markdown files using standard text processing tools. The repository expects tools to read directly from these canonical paths rather than querying APIs or databases.
The following Python script demonstrates how to extract structured data from the candidate profile using the repository's expected file structure:
import pathlib, json
# Path to the canonical profile file
profile_path = pathlib.Path(
"/__modal/volumes/vo-cSqLfqnnIwYXEonuEJnnZa/repos/github.com/MadsLorentzen/ai-job-search/master/.claude/skills/job-application-assistant/01-candidate-profile.md"
)
# Simple parser to extract key-value pairs under the "Identity" section
def load_profile(path):
data = {}
in_identity = False
for line in path.read_text().splitlines():
if line.startswith("## Identity"):
in_identity = True
continue
if in_identity:
if line.startswith("- **"):
key, val = line[4:].split(": ", 1)
data[key.strip()] = val.strip()
elif line.strip() == "":
break
return data
profile = load_profile(profile_path)
print(json.dumps(profile, indent=2))
Verifying Factual Grounding at Runtime
Before generating any application document, the framework executes validation routines that cross-reference output claims against the canonical profile files.
This bash snippet demonstrates the verification pattern used to ensure CV content matches the stored email address in 01-candidate-profile.md:
# Check that the CV contains the declared email address
profile_email=$(grep -E '^- \*\*Email:\*\*' \
.claude/skills/job-application-assistant/01-candidate-profile.md | cut -d' ' -f3-)
cv_contains=$(grep -F "$profile_email" cv/main_example.tex && echo "yes" || echo "no")
echo "Email in CV? $cv_contains"
Summary
- The AI Job Search Framework stores candidate profile information in immutable markdown files at
CLAUDE.mdand.claude/skills/job-application-assistant/01-candidate-profile.md. CLAUDE.mdserves as the human-readable master profile created and maintained by the/setupcommand.- The
01-candidate-profile.mdfile provides structured, machine-readable sections for deterministic parsing by automation scripts and evaluation gates. 02-behavioral-profile.mdcontains behavioral assessment data that supports fit evaluation gates alongside factual profile data.- All generated documents must pass verification against these files to ensure factual accuracy and prevent hallucinated claims.
Frequently Asked Questions
What is the primary file for storing candidate profile information in the AI Job Search Framework?
The primary storage location is CLAUDE.md in the repository root, which acts as the master human-readable profile containing identity, education, experience, and skills. For programmatic access, the framework uses .claude/skills/job-application-assistant/01-candidate-profile.md as the structured data source.
How does the framework ensure factual accuracy in generated documents?
The framework enforces a verification checklist that requires all claims in generated CVs, cover letters, and evaluations to match the immutable data stored in CLAUDE.md and the candidate profile markdown files. This prevents hallucinated or fabricated qualifications from appearing in outputs.
Can I edit the candidate profile files manually?
Yes, you can edit CLAUDE.md and the files in .claude/skills/job-application-assistant/ manually, though the /setup command provides a guided interface for updating CLAUDE.md. Because these are markdown files under version control, all changes are tracked and auditable.
Where does the AI Job Search Framework store behavioral assessment data?
Behavioral assessments such as PI, DISC, and MBTI results are stored in .claude/skills/job-application-assistant/02-behavioral-profile.md. This file feeds into the fit evaluation gates alongside factual profile data to determine role compatibility.
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 →