How User-Specific Archetypes and Targeting Narratives Are Stored in config/profile.yml
User-specific archetypes live under target_roles.archetypes and targeting narratives reside in the narrative section of config/profile.yml, with both driving the career evaluation engine by mapping job descriptions to personalized career tracks.
The santifer/career-ops repository uses a YAML-based personalization layer to power its evaluation engine. Understanding how user-specific archetypes and targeting narratives are stored in config/profile.yml is essential for customizing the system's output to match individual career goals and storytelling needs.
Understanding the Profile Configuration Structure
The config/profile.yml file serves as the user-layer data contract that separates personal career data from system logic. According to the source code in the examples/dual-track-engineer-instructor/profile.yml template, the configuration organizes personalisation data into distinct semantic blocks that the evaluation engine consumes at runtime.
The candidate Section
Basic contact information for the job seeker resides in the candidate mapping, typically found at lines 10-19. This section anchors the profile identity before the system evaluates role-specific positioning.
The target_roles.archetypes Array
User-specific archetypes are defined in the target_roles.archetypes list (lines 28-55). Each archetype represents a distinct career track with five required fields:
name– Human-readable label (e.g., "Senior AI Engineer")level– Seniority tier specificationfit– Priority classification (primary, secondary, or adjacent)track– High-level domain classification (engineering, teaching, hybrid)sell_when– Trigger text that tells the evaluator when to highlight this archetype
target_roles:
archetypes:
- name: "Senior AI Engineer"
level: "Senior/Staff"
fit: "primary"
track: "engineering"
sell_when: "JD emphasizes shipping production AI, agent infra, LangChain/LangGraph"
- name: "Senior Technical Instructor (AI/ML)"
level: "Senior/Lead"
fit: "primary"
track: "teaching"
sell_when: "JD emphasizes curriculum, cohort delivery, bootcamp lectureship"
The narrative Section
Targeting narratives that inject into CVs, cover letters, and interview scripts live under the narrative key (lines 56-86). This section contains:
headline– One-line "rare-combination" taglineexit_story– Explanation of why the candidate is transitioningsuperpowers– Bulleted list of core strengthsproof_points– Concrete achievements withname,url,hero_metric, andtrackfields
narrative:
headline: "Senior AI engineer who also runs the curriculum – 60K LOC in production, 5,200+ teaching hours"
exit_story: "Spent 4 years running an AI subsystem ... now optimizing for a single role that uses both sides"
superpowers:
- "Ship production AI systems end-to-end (LangChain, LangGraph, Neo4j, Redis)"
- "Design curriculum that produces hireable engineers (92% completion, 80+ placed)"
proof_points:
- name: "Knowledge-Graph SaaS AI subsystem"
url: "https://sam-rivera.example.dev/case-study-knowledge-graph"
hero_metric: "60K LOC owned, 4M+ agent events/month"
track: "engineering"
- name: "AI Engineering 4-Week Intensive (curriculum)"
url: "https://sam-rivera.example.dev/curriculum-ai-eng"
hero_metric: "6 cohorts, NPS 71, 92% completion"
track: "teaching"
How Archetypes Drive the Evaluation Engine
When processing a job description, the scoring script reads target_roles.archetypes and matches JD keywords against each archetype's sell_when text. The system selects the best-fit archetype while respecting the fit priority, then pulls corresponding narrative elements—headline, relevant superpowers, and proof points whose track matches the archetype's track—into the final report.
Accessing Profile Data Programmatically
You can load these structures in Node.js using js-yaml to manipulate the user-specific archetypes and targeting narratives programmatically:
import yaml from 'js-yaml';
import { readFileSync } from 'fs';
const profile = yaml.load(readFileSync('config/profile.yml', 'utf8'));
const archetypes = profile.target_roles.archetypes;
const headline = profile.narrative.headline;
Summary
- User-specific archetypes are stored in
target_roles.archetypeswith fields for name, level, fit, track, and sell_when triggers - Targeting narratives reside in the
narrativesection, containing headline, exit_story, superpowers, and proof_points - The evaluation engine matches job descriptions to archetypes via sell_when text, then pulls matching narrative elements by track alignment
- Data lives in the user-layer
config/profile.yml, keeping it safe from system updates that might overwrite default configurations - Reference the
examples/dual-track-engineer-instructor/profile.ymltemplate for the complete structure and line-numbered examples
Frequently Asked Questions
What is the difference between user-specific archetypes and targeting narratives?
User-specific archetypes define the career tracks you want to be evaluated against, including priority levels and trigger conditions. Targeting narratives provide the storytelling content—headlines, proof points, and superpowers—that the system injects into application materials once an archetype is selected.
How does the evaluation engine choose which archetype to use?
The engine reads the sell_when field of each archetype in target_roles.archetypes and matches it against keywords in the job description, selecting the best fit while respecting the fit priority classification (primary, secondary, or adjacent).
Can I store additional custom narrative text without risking system overwrites?
Yes. Place extended narrative content in modes/_profile.md, which serves as a safe location for custom text that never gets overwritten by system updates, unlike the main config/profile.yml which you edit directly.
What fields are required for proof points in the narrative section?
Each proof point must include name (achievement title), url (link to evidence), hero_metric (quantifiable impact), and track (alignment with engineering, teaching, or hybrid domains) to ensure proper matching with archetype tracks.
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 →