How to Configure Your Identity, Location, and Salary Targets in Career‑Ops
Copy config/profile.example.yml to config/profile.yml and populate the candidate, location, and compensation blocks to establish your identity, work authorization status, and compensation expectations.
Career‑Ops treats config/profile.yml as the single source of truth for all personal data governing job evaluations, CV generation, and outreach automation. When you clone the santifer/career-ops repository, you receive a template file that defines every field the system expects, from your display location to your walk‑away salary minimum.
The Configuration File Structure
All identity and compensation data lives in one YAML file at the repository root. The system loads this file at runtime via the internal loadProfile utility, making the values available to every mode (evaluation, PDF generation, and outreach) without requiring environment variables or additional configuration files.
Identity and Location Settings
The candidate key stores your display identity, while the location block captures structured work‑authorization data.
candidate.location(line 16 of the template): A free‑form string displayed in the CV header and used by the location policy block during offer evaluation.locationblock (lines 76‑90): Structured fields that drive the work‑authorization signal in Block A of the oferta evaluation:country: Your primary country of residence.city: Specific city for timezone and tax considerations.timezone: Your working timezone (e.g.,PST,CET).visa_status: Human‑readable status (e.g.,"No sponsorship needed").authorized_in: Array of countries where you hold work authorization.needs_sponsorship: Boolean flag indicating if visa sponsorship is required.
Salary and Compensation Targets
The compensation key (lines 70‑75) defines your financial expectations:
target_range: Your desired total‑compensation band (e.g.,"$150K-200K").minimum: The walk‑away figure below which you will not consider offers.currency: ISO currency code (e.g.,USD,EUR).location_flexibility: Remote‑versus‑on‑site preferences used when scoring opportunities.
Step‑by‑Step Configuration Guide
1. Copy the Template
If config/profile.yml does not exist, generate it from the provided example:
cp config/profile.example.yml config/profile.yml
This operation creates a regular file with no secrets, making it safe to edit directly.
2. Configure Identity and Location
Edit config/profile.yml to set your display location and work authorization details:
candidate:
location: "San Francisco, CA"
location:
country: "United States"
city: "San Francisco"
timezone: "PST"
visa_status: "No sponsorship needed"
authorized_in: ["United States"]
needs_sponsorship: false
The candidate.location string appears in generated PDF headers, while the structured location block feeds into the evaluation logic in modes/oferta.md.
3. Set Compensation Targets
Define your salary expectations under the compensation key:
compensation:
target_range: "$150K-200K"
currency: "USD"
minimum: "$120K"
location_flexibility: "Remote preferred, 1 week/month on‑site possible"
These values are read by build-cv-html.mjs and build-cv-latex.mjs to populate compensation sections in your CV, and by the evaluation scripts to filter incoming offers against your minimum threshold.
4. Verify the Configuration
Confirm that Career‑Ops can parse your profile by running a quick Node.js check:
node -e "console.log(require('js-yaml').load(require('fs').readFileSync('config/profile.yml','utf8')).candidate.location)"
If the command prints your location string (e.g., San Francisco, CA), the file is valid and ready for use.
How Career‑Ops Uses Your Configuration Data
When you execute commands like career-ops evaluate or career-ops pdf, the system imports config/profile.yml through the loadProfile utility. This structured object is passed to:
- Evaluation modes (
modes/oferta.md): Compares yourlocationblock against job requirements to score work‑authorization fit. - CV generators (
build-cv-html.mjs,build-cv-latex.mjs): Injectscandidate.locationand compensation data into the generated output. - Outreach templates: References your
target_rangeandlocation_flexibilityto personalize cover letters.
Because the YAML is parsed once at startup, any change to config/profile.yml is instantly reflected across the entire pipeline without restarting the application or modifying source code.
Summary
- Career‑Ops stores all personal identity, location, and salary data in
config/profile.yml. - Copy
config/profile.example.ymlto create your initial configuration. - Populate the
candidatekey for display strings, thelocationblock for structured work‑authorization data, and thecompensationblock for salary targets. - Changes take effect immediately across evaluation modes and CV generators without requiring code modifications.
Frequently Asked Questions
Where does Career‑Ops store personal configuration data?
Career‑Ops stores all identity and compensation information in config/profile.yml. According to the DATA_CONTRACT.md specification, this file serves as the authoritative user‑layer configuration, separating personal data from system logic.
What is the difference between candidate.location and the location block?
The candidate.location field is a free‑form string displayed on your CV header, while the location block contains structured data (country, visa_status, authorized_in, etc.) used by the evaluation engine in modes/oferta.md to determine work‑authorization compatibility.
How do I update my salary expectations without changing code?
Edit the compensation section in config/profile.yml to modify target_range, minimum, or currency. The next time you run career-ops evaluate or generate a PDF, the new values propagate automatically through the loadProfile utility.
Does Career‑Ops support multiple currencies for compensation targets?
Yes. The compensation.currency field accepts any ISO currency code (e.g., USD, EUR, GBP). Ensure that target_range and minimum values are denominated in the specified currency, as the evaluation scripts treat these as opaque strings matched against offer data.
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 →