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.
  • location block (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 your location block against job requirements to score work‑authorization fit.
  • CV generators (build-cv-html.mjs, build-cv-latex.mjs): Injects candidate.location and compensation data into the generated output.
  • Outreach templates: References your target_range and location_flexibility to 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.yml to create your initial configuration.
  • Populate the candidate key for display strings, the location block for structured work‑authorization data, and the compensation block 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:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →