Files
santifer--career-ops/config/profile.example.yml
T
wehub-resource-sync d083df1fdb
CodeQL Analysis / Analyze (javascript-typescript) (push) Failing after 2s
Web CI / web typecheck + build (push) Failing after 1s
Release Please / release-please (push) Failing after 1s
CodeQL Analysis / Analyze (go) (push) Failing after 16s
chore: import upstream snapshot with attribution
2026-07-13 12:02:43 +08:00

250 lines
12 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 ~25×. 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"