250 lines
12 KiB
YAML
250 lines
12 KiB
YAML
# Career-Ops Profile Configuration
|
||
# Copy this file to config/profile.yml and fill in your details.
|
||
# This is the single source of truth for your personal data across all modes.
|
||
|
||
candidate:
|
||
full_name: "Jane Smith"
|
||
email: "jane@example.com"
|
||
phone: "+1-555-0123"
|
||
# Optional. Used by `/career-ops email` contact blocks in markets where WeChat
|
||
# is an expected recruiting channel. Omit or leave blank if not applicable.
|
||
wechat: ""
|
||
location: "San Francisco, CA"
|
||
linkedin: "linkedin.com/in/janesmith"
|
||
portfolio_url: "https://janesmith.dev"
|
||
github: "github.com/janesmith"
|
||
twitter: "https://x.com/janesmith"
|
||
# Optional profile photo for the PDF CV (opt-in, #264). Leave empty to omit it
|
||
# entirely: US/UK and many-market ATS penalize photos, so the photoless layout
|
||
# is the default. Set it only for DACH/European markets (Germany, Austria,
|
||
# Switzerland) where a professional photo is expected. Use a local file path or
|
||
# a data: URL — the PDF renderer inlines local images.
|
||
photo: ""
|
||
|
||
target_roles:
|
||
# Your North Star roles — what you're optimizing for
|
||
primary:
|
||
- "Senior AI Engineer"
|
||
- "Staff ML Engineer"
|
||
# Archetypes help the evaluation system score fit
|
||
archetypes:
|
||
- name: "AI/ML Engineer"
|
||
level: "Senior/Staff"
|
||
fit: "primary" # primary = dream role, secondary = good fit, adjacent = stretch
|
||
- name: "AI Product Manager"
|
||
level: "Senior"
|
||
fit: "secondary"
|
||
- name: "Solutions Architect"
|
||
level: "Mid-Senior"
|
||
fit: "adjacent"
|
||
|
||
narrative:
|
||
# Your professional headline (1 line)
|
||
headline: "ML Engineer turned AI product builder"
|
||
# Your exit story — what makes you unique
|
||
exit_story: "Built and sold my SaaS after 5 years. Now focused on applied AI at scale."
|
||
# Your top 3-5 superpowers
|
||
superpowers:
|
||
- "End-to-end ML pipelines"
|
||
- "Fast prototyping (idea to prod in 2 weeks)"
|
||
- "Cross-functional communication"
|
||
# Proof points — projects, articles, case studies with measurable impact
|
||
proof_points:
|
||
- name: "Project Alpha"
|
||
url: "https://janesmith.dev/project-alpha"
|
||
hero_metric: "Reduced inference latency 40%"
|
||
- name: "Open Source Tool"
|
||
url: "https://github.com/janesmith/tool"
|
||
hero_metric: "2K+ GitHub stars"
|
||
# Optional: dashboard/demo URL with credentials
|
||
# dashboard:
|
||
# url: "https://janesmith.dev/demo"
|
||
# password: "demo-2026"
|
||
|
||
compensation:
|
||
target_range: "$150K-200K" # Your target total comp
|
||
currency: "USD"
|
||
minimum: "$120K" # Walk-away number
|
||
location_flexibility: "Remote preferred, 1 week/month on-site possible"
|
||
|
||
location:
|
||
country: "United States"
|
||
city: "San Francisco"
|
||
timezone: "PST"
|
||
visa_status: "No sponsorship needed"
|
||
# For remote roles outside your country:
|
||
# onsite_availability: "1 week/month in any city"
|
||
|
||
language:
|
||
# Human-facing output language for reports, tracker notes, PDFs, cover
|
||
# letters, outreach, and form answers. Use an ISO language code.
|
||
# This is separate from language.modes_dir: modes_dir selects market
|
||
# vocabulary/rules, while output selects the prose language.
|
||
output: en
|
||
# modes_dir: modes/de # optional: use DACH market vocabulary while still writing in English
|
||
|
||
# Optional follow-up cadence preferences for `node followup-cadence.mjs`.
|
||
# CLI flags still win for one-off runs (for example `--applied-days 10`).
|
||
# followup_cadence:
|
||
# applied_first_days: 7
|
||
# applied_subsequent_days: 7
|
||
# applied_max_followups: 2
|
||
# responded_initial_days: 1
|
||
# responded_subsequent_days: 3
|
||
# interview_thankyou_days: 1
|
||
|
||
# Controls which model tier evaluates your offers. Valid values:
|
||
# economy -- cheapest/fastest model, no extended thinking. Best for high-volume scanning.
|
||
# standard -- balanced model, no extended thinking. Default if this key is absent.
|
||
# premium -- most capable model, adaptive extended thinking. Best for high-stakes offers.
|
||
# See the tier -> model mapping table in modes/_shared.md.
|
||
spend_tier: standard
|
||
|
||
cv:
|
||
output_format: "html" # "html" (default) or "latex"
|
||
# (Optional) Canva resume design ID for visual CV generation via /career-ops pdf.
|
||
# Find it in your Canva design URL: https://www.canva.com/design/DAxxxxxxx/...
|
||
# The ID starts with "D" and is 11 characters long.
|
||
# canva_resume_design_id: "DAxxxxxxxxx"
|
||
# Which CV template to use by default. Value is the kebab-case name of a file
|
||
# in templates/ named cv-template.<name>.html (e.g. "modern" ->
|
||
# templates/cv-template.modern.html). Leave unset/commented to use the built-in
|
||
# templates/cv-template.html. You can also pick per-generation just by asking
|
||
# (e.g. "use the modern template").
|
||
# template: modern
|
||
|
||
# ── Culture Screen ───────────────────────────────────────────────────────────
|
||
#
|
||
# Enforces structural capping on the "Cultural signals" dimension during evaluation.
|
||
#
|
||
# culture_screen:
|
||
# # What you actively look for in a team culture (e.g. org size, meeting frequency, async-first).
|
||
# # If absent/commented, the dimension is scored qualitatively without a hard cap.
|
||
# require:
|
||
# - "Small, flat teams (under 15 engineers)"
|
||
# - "Async-first communication, low meeting overhead"
|
||
# # If true, the dimension is capped at 2/5 if the JD lacks any evidence for the required criteria.
|
||
# # If false (or absent), lack of evidence defaults to a neutral 3/5.
|
||
# deprioritize_if_absent: true
|
||
|
||
# Optional user-owned LaTeX CV for `/career-ops latex-tex` (opt-in tailoring in place).
|
||
# cv.md remains the default source of truth for evaluations and auto-pipeline.
|
||
# latex:
|
||
# source: resume.tex
|
||
|
||
# ── Cover Letter Settings ──────────────────────────────────────────────────
|
||
#
|
||
# Used by `/career-ops cover` and the cover letter sub-flow in `/career-ops pdf`.
|
||
# All fields are optional — omit any you don't need.
|
||
|
||
cover_letter:
|
||
# Your notice period in calendar days. Surfaced as a prompt default when the
|
||
# JD requests an immediate start. The user confirms the actual value before it
|
||
# appears in the letter.
|
||
notice_period_days: 30
|
||
# Which cover-letter template to use by default. Kebab-case name of a file in
|
||
# templates/ named cover-letter-template.<name>.html. Unset -> built-in
|
||
# templates/cover-letter-template.html.
|
||
# template: modern
|
||
|
||
# Your current professional domain (used to detect domain gaps vs the JD).
|
||
# Plain English, e.g. "digital media", "fintech", "healthcare IT".
|
||
primary_domain: "your current domain"
|
||
|
||
# Languages you are actively learning. Each entry MAY produce a closing
|
||
# sentence in that language IF the JD location matches one of the listed
|
||
# countries AND the user confirms inclusion during the cover letter flow.
|
||
# Remove the block entirely if not applicable.
|
||
language_learning:
|
||
- language: Spanish
|
||
current_level: B1
|
||
target_level: B2
|
||
target_date: "end of 2026"
|
||
# The sentence to include, written in that language. Keep it one line.
|
||
sentence: "Estoy aprendiendo español y espero alcanzar el nivel B2 a finales de 2026."
|
||
# Only trigger this entry when the JD location is in one of these countries.
|
||
countries: [Spain, Mexico, Argentina, Colombia, Chile]
|
||
|
||
# ── Contact Preferences ──────────────────────────────────────────────────────
|
||
#
|
||
# Used by `/career-ops contacto` (outreach CTA) and `/career-ops email` (contact
|
||
# block) to steer drafted messages toward how you actually want to be reached.
|
||
# Optional. Omit the whole block, or set preferred_channel to "either", to keep
|
||
# today's behavior unchanged (no channel steering).
|
||
#
|
||
# contact_preferences:
|
||
# preferred_channel: "email" # email | phone | either — default "either" if omitted
|
||
# # Optional. Surfaced near the contact block in `/career-ops email` drafts and
|
||
# # can inform the CTA wording in `/career-ops contacto`. Keep it one line.
|
||
# note: "Screens unknown numbers — please email or text first to schedule a call"
|
||
|
||
# ── Outreach / greeting ─────────────────────────────────────────────────────
|
||
#
|
||
# Used by the greeting variant of `/career-ops contacto` (the short first-touch
|
||
# message for BOSS Zhipin 打招呼, job-board chat, or a cold-email opener).
|
||
#
|
||
# greeting_max_chars is the hard character budget for that message. Default when
|
||
# the key is absent: 150 (BOSS Zhipin's greeting limit). Raise or lower it to
|
||
# match the platform you're messaging on.
|
||
# outreach:
|
||
# greeting_max_chars: 150
|
||
|
||
# ── Application Email Drafts ────────────────────────────────────────────────
|
||
#
|
||
# Used by `/career-ops email` when drafting formal application emails. This is
|
||
# separate from `contacto` short outreach and `cover` full cover letters.
|
||
# All fields are optional.
|
||
#
|
||
# application_email:
|
||
# include_contact_block: true
|
||
# include_attachment_checklist: true
|
||
# # Use this when you want the email body to say "the email used to send this
|
||
# # message" instead of printing a concrete email address from candidate.email.
|
||
# # default_sender_note: "the email used to send this message"
|
||
# # signature_name: "Jane Smith"
|
||
|
||
# ── Scan / JD extractor ─────────────────────────────────────────────────────
|
||
#
|
||
# How the scan and JD-extraction steps read SPA job pages.
|
||
# mcp (default) — the browser MCP (browser_navigate + browser_snapshot). Works
|
||
# out of the box; the snapshot is token-heavy.
|
||
# cli — the headless `browser-extract.mjs` helper: renders the page
|
||
# and returns compact JSON, cutting per-page tokens ~2–5×. Opt-in.
|
||
# If the helper isn't available, the modes fall back to mcp
|
||
# silently, so nothing breaks. `doctor` reports the active mode.
|
||
# scan:
|
||
# extractor: mcp # mcp (default) | cli
|
||
|
||
# ── Auto-PDF threshold ──────────────────────────────────────────────────────
|
||
#
|
||
# Auto-PDF threshold during evaluation (used by `/career-ops pipeline` and
|
||
# `bash batch/batch-runner.sh`).
|
||
#
|
||
# An offer's tailored CV PDF is auto-generated only when its score is
|
||
# >= this threshold. Generating a PDF costs ~30-60s per offer (Playwright
|
||
# launch + HTML render), and most offers in a scan score 2.x/3.x and never
|
||
# become an actual application — so the gate avoids wasted renders.
|
||
#
|
||
# Default (key absent OR commented out): 3.0 — the original gate of
|
||
# `/career-ops pipeline`. Both evaluation paths apply the same default, so
|
||
# a batch run and an interactive run treat the same offer identically.
|
||
#
|
||
# Raise it (e.g. 4.0) to auto-generate PDFs only for stronger matches and
|
||
# leave the rest report-only — those can still be produced on demand via
|
||
# `/career-ops pdf {company-slug}`. Fractional thresholds work (e.g. 3.5 —
|
||
# half-point scores like 3.5/5 occur in evaluations). Set it to 0 to
|
||
# generate a PDF for every offer.
|
||
# auto_pdf_score_threshold: 4.0
|
||
|
||
# ── Re-apply Cooldown Windows ──────────────────────────────────────────────
|
||
#
|
||
# Define cooldown windows for companies where you've recently applied.
|
||
# The scanner will skip new postings at these companies during the window.
|
||
#
|
||
# re_apply_windows:
|
||
# CompanyA:
|
||
# same_role_days: 180
|
||
# cross_role_bucket: "all_EM_roles"
|
||
# applied_to: ["Senior Software Engineer"]
|
||
# last_apply_date: "2026-01-01"
|