How Behavioral Profile Integration (PI/DISC) Powers Tone Matching in AI-Job-Search
The ai-job-search repository uses a candidate’s PI or DISC behavioral profile as the single source of truth to dynamically adjust the tone of every generated job-application document, ensuring the voice matches the candidate’s natural communication style.
Behavioral profile integration (PI/DISC) transforms static assessment results into a dynamic tone matching system that governs the entire job-search pipeline. The repository treats the candidate’s dominant drives and behavioral patterns—captured during an initial setup phase—as rules that dictate word choice, sentence structure, and emotional emphasis across cover letters, CVs, and interview scripts.
Profile Capture and Storage
The foundation of the tone-matching engine rests in the file 02-behavioral-profile.md. This markdown file is populated during the /setup command and serves as the canonical record of the candidate’s behavioral identity.
The profile stores:
- Dominant behavioral pattern (e.g., Dominant-D, Influential-I, Steady-S, Conscientious-C)
- Core drives and strongest behaviors
- Preferred work environments
- Growth areas and potential friction points
Source: [02-behavioral-profile.md](https://github.com/MadsLorentzen/ai-job-search/blob/master/.claude/skills/job-application-assistant/02-behavioral-profile.md)
During setup, this data is serialized to data/profile.json, creating a machine-readable snapshot that downstream rendering scripts consume. This JSON file contains the structured data required to make runtime tone decisions without re-parsing the original markdown.
Mapping Behavioral Drives to Language
Within 02-behavioral-profile.md, the "Mapping to Job Posting Language" section translates abstract behavioral concepts into concrete lexical signals. This mapping identifies keywords that indicate either a strong behavioral fit or a potential friction point between the candidate’s natural style and the role’s demands.
The tone-matching engine uses these keywords to select between four primary vocal registers:
- Enthusiastic – high-energy, relationship-focused phrasing
- Collaborative – team-oriented, consensus-building language
- Detail-focused – precise, analytical, process-oriented terminology
- Assertive – confident, results-driven, directive statements
This lexical mapping ensures that when the system encounters a job description emphasizing "fast-paced decision making," it can match that requirement against a Dominant-D profile and select appropriately confident phrasing.
Writing-Style Guidelines by Profile Type
The companion file 03-writing-style.md defines concrete tonal rules for each DISC/PI archetype. Although generated on-the-fly during the /setup workflow, its schema mirrors the behavioral-drive matrix defined in 02-behavioral-profile.md.
The guidelines specify exact phrasing patterns:
- Dominant-D: Use confident, results-oriented phrasing; lead with outcomes; minimize hedging language
- Influential-I: Stress relationship-building, enthusiasm, and persuasive storytelling
- Steady-S: Emphasize reliability, support, and collaborative listening
- Conscientious-C: Prioritize accuracy, analysis, and systematic methodologies
These rules are stored as key-value pairs that map directly to template placeholders, allowing the rendering engine to substitute generic adjectives and verbs with profile-specific alternatives.
Dynamic Template Rendering Pipeline
When generating application materials, the system executes a three-stage rendering process that injects behavioral tone into LaTeX and markdown templates.
First, the loader reads the JSON representation from data/profile.json:
import json
from pathlib import Path
import jinja2
# Load the behavioral profile created by `/setup`
profile_path = Path("data/profile.json")
profile = json.loads(profile_path.read_text())
# Determine tone style based on DISC type
disc_type = profile["profile_type"] # e.g., "Dominant-D"
tone_rules = {
"Dominant-D": {"adjective": "confident", "verb": "lead"},
"Influential-I": {"adjective": "enthusiastic", "verb": "collaborate"},
"Steady-S": {"adjective": "supportive", "verb": "listen"},
"Conscientious-C": {"adjective": "meticulous", "verb": "analyze"},
}
tone = tone_rules.get(disc_type, {"adjective": "professional", "verb": "contribute"})
Second, the engine selects the appropriate tonal rule set from 03-writing-style.md based on the profile_type field.
Third, the renderer injects these values into Jinja2-compatible LaTeX templates:
\documentclass{cover}
\begin{document}
\coverletter{
to={Hiring Manager},
from={{ name }},
subject={Application for {{ role }}},
}
Dear Hiring Manager,
I am {{ adjective }} about the opportunity to {{ verb }} at {{ company }}.
My background demonstrates a consistent ability to drive results through
{{ behavioral_strength }}.
\end{document}
The Python rendering script processes this template:
template_loader = jinja2.FileSystemLoader(searchpath="cover_letters")
env = jinja2.Environment(loader=template_loader)
template = env.get_template("cover_template.tex")
rendered = template.render(
name=profile["name"],
role="Senior Product Manager",
adjective=tone["adjective"],
verb=tone["verb"],
behavioral_strength=profile["strongest_behaviors"][0],
company="Target Corporation"
)
Path("output/cover_letter.tex").write_text(rendered)
This pipeline guarantees that the voice of the output aligns with the candidate’s natural communication style, increasing perceived authenticity and cultural fit.
Integration Points Across Application Documents
The behavioral profile integration extends across three critical application components, each referencing the same data/profile.json source to maintain consistency.
Cover-Letter Generation
The template cover_letters/cover_example.tex utilizes placeholder tags such as [[TONE_ADJECTIVE]] and [[BEHAVIOR_STRONG]]. During rendering, these tags are replaced with values derived from the active profile, ensuring the opening paragraph immediately signals the candidate’s dominant behavioral style.
CV Tailoring
In cv/main_example.tex, sections marked with [[BEHAVIOR_STRONG]] or [[BEHAVIOR_GROWTH]] are dynamically populated. A Conscientious-C profile might expand the technical skills section while compressing the "leadership narrative," whereas a Dominant-D profile would receive the opposite treatment.
Interview Preparation
The file .claude/skills/job-application-assistant/07-interview-prep.md selects STAR (Situation, Task, Action, Result) examples that reflect the candidate’s strongest drives. An Influential-I profile receives prompts emphasizing relationship resolution scenarios, while a Conscientious-C profile receives prompts focused on quality assurance or process improvement examples.
All three pipelines consume the identical profile data, ensuring that a candidate’s application presents a coherent behavioral narrative across every touchpoint.
Summary
- Behavioral profile integration in ai-job-search treats PI/DISC assessments as the central configuration for tone matching.
- The
02-behavioral-profile.mdfile captures dominant drives during/setup, withdata/profile.jsonserving as the runtime source of truth. - Tone rules defined in
03-writing-style.mdmap DISC types (Dominant-D, Influential-I, Steady-S, Conscientious-C) to specific adjectives, verbs, and phrasing patterns. - Dynamic rendering uses Jinja2 templates with placeholders like
[[TONE_ADJECTIVE]]to inject profile-specific language into LaTeX documents. - The system maintains cross-document consistency by referencing the same JSON profile during cover-letter generation, CV tailoring, and interview prep.
Frequently Asked Questions
How does the system determine which DISC type to use for tone matching?
The system reads the profile_type field from data/profile.json, which is generated during the /setup command when the candidate completes the assessment in 02-behavioral-profile.md. This field contains the dominant behavioral pattern (e.g., "Dominant-D") that drives the tone selection logic.
Can the tone matching handle hybrid or secondary DISC profiles?
The current implementation prioritizes the single dominant type stored in profile_type. However, the tone_rules dictionary in the rendering script can be extended to check for secondary traits or hybrid classifications (such as "DI" or "SC") by parsing additional fields in the profile JSON and mapping them to blended tonal guidelines.
What happens if no behavioral profile is present during document generation?
If data/profile.json is missing or the profile_type key is absent, the rendering pipeline falls back to default "professional" tone values—using neutral adjectives like "experienced" and verbs like "contribute"—ensuring the system remains functional while producing generic rather than personalized output.
Are the writing-style rules hardcoded or configurable?
The schema in 03-writing-style.md is generated during setup based on the 02-behavioral-profile.md template, making it configurable by editing the source profile file. The Python tone rules dictionary can also be modified to adjust the specific adjectives and verbs assigned to each DISC type without changing the underlying LaTeX templates.
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 →