Releases: santifer/career-ops
career-ops: v1.9.0
1.9.0 (2026-06-09)
Features
- add npx career-ops scaffolder for one-command install (#856) (ce4fa58), closes #855
- add structured machine summaries to evaluations (#444) (19a1820)
- add Ukrainian language and market support (#323) (06d70d3)
- batch: add --model flag to batch-runner.sh (#504) (44def35)
- dashboard: /-key live search across pipeline rows (#526) (433f34f)
- i18n: add Turkish (TR) language modes (#341) (e87eb57)
- interview-prep: split prep by interviewer audience (#489) (d86b86c)
- make PDF auto-generation configurable via auto_pdf_score_threshold (#715) (fdbf4e1)
- scan: add --verify flag to drop expired postings before pipeline append (#487) (82f0c2e)
- scan: add local-parser provider and agent skip rules (#595) (b3ef0ae)
- scan: add optional always_allow tier to location_filter (#652) (d152da3), closes #650
- scan: add Workable, SmartRecruiters, Recruitee ATS parsers (#653) (ea7b2a6), closes #651
Bug Fixes
- batch: wait and retry batch workers on rate limits (#816) (f498ccf), closes #505
- dashboard: width-aware Markdown rendering with table wrapping in viewer (#513) (dc3a247)
- gemini: auto-merge Gemini evals into the tracker instead of a manual-edit reminder (#820) (6efac1a)
- make tracker report links relative to the tracker file (#760) (#761) (c0d42cd)
- pdf: don't spell out ambiguous ¥ currency symbol (4c415a9)
- pdf: normalize arrows, middots, and currency symbols for ATS extraction (#731) (f164eba), closes #730
- register the career-ops skill in Claude Code via user_invocable key (#801) (3ddb00c), closes #763
- release: sync VERSION file to 1.8.0 (541917f)
- scaffolder: don't pre-create user config so agent onboarding triggers (#858) (cd827be), closes #855
- scan: bootstrap providers/ on update + harden greenhouse detect() (#696) (4b12081)
- scan: raise Ashby provider timeout + add backoff retry (#755) (1aa6c63)
- scan: surface websearch-handoff companies in the run summary (#814) (137c7b3), closes #747
- scope npm package as @santifer/career-ops (#857) (87ef561)
- update-system: add tracker-links.mjs to SYSTEM_PATHS (8287cf4)
- update-system: apply() safety violation reverts cleanly and releases lock (#484) (980153c)
- update-system: bootstrap liveness-browser.mjs for v1.7→v1.8 upgrades (#725) (1ea95f2), closes #704
- update-system: rollback() removes paths absent from backup branch (#483) (f94a3be)
- update: distribute missing modes, locales and CLI configs via update-system (#868) (03b2c94)
- update: timestamp backup branches and roll back to the newest (#813) (1717f9c), closes #733
career-ops crossed 50,000 stars this week, two months after launch. Every feature in this release came from the community — Ukrainian and Turkish support, the ATS parsers, the npx installer, dozens of fixes. Thank you to everyone who shaped it.
career-ops: v1.8.0
1.8.0 (2026-05-15)
Features
Bug Fixes
- batch: workers read modes/_profile.md and config/profile.yml (#537) (150e223), closes #534
- deps: update dotenv to v17 (#499) (ce1330e)
- gemini-eval: include profile.yml and _profile.md in evaluation (#618) (73dc603), closes #617
- gemini-eval: redact API key from error logs, harden summary parsing (#582) (fdca4de)
- gemini-eval: switch default model to non-deprecated endpoint, surface 429 guidance (#615) (dd3e036), closes #614
- manifest: align plugin.json skills field with Claude Code plugin schema (#612) (a77d3f6)
- merge-tracker: preserve short specialty acronyms, require non-baseline overlap (#634) (5ed3b3d), closes #633
- modes: make /career-ops deep respect user language, not JD language (#568) (e5f0508)
- portals: update Weights & Biases entry to CoreWeave acquisition (#493) (1411cdc)
- release: sync VERSION file to 1.7.1 (2ebfcab)
- scan: validate Greenhouse URL hostname against allowlist to prevent SSRF (#602) (988f7bb)
- templates: align CV certification rows on a 3-column grid (#638) (082cd11)
- update-system: allow writing-samples/README.md as system-owned file (#562) (207fd07)
- update-system: bootstrap .agents/ for v1.6→v1.7 migration (#654) (4714504)
- update-system: defensive VERSION parsing for release-please marker (#547) (bf84886)
career-ops: v1.7.1
career-ops: v1.7.0
1.7.0 (2026-05-06)
Features
- adapt contacto mode by contact type (recruiter/HM/peer/interviewer) (9fd5a90)
- add --min-score flag to batch runner (#249) (cb0c7f7)
- add {{PHONE}} placeholder to CV template (#287) (e71595f)
- add Block G — posting legitimacy assessment (3a636ac)
- add Claude Code plugin manifests (path-stable) (62b767d)
- add follow-up cadence tracker mode (4308c37)
- add Gemini CLI native integration and evaluator script (#349) (0853486)
- add Gemini CLI native integration and evaluator script (closes #344) (0853486)
- add GitHub Actions CI + auto-labeler + welcome bot + /run skill (2ddf22a)
- add LaTeX/Overleaf CV export mode with pdflatex compilation (#362) (b824953)
- add LaTeX/Overleaf CV export mode with pdflatex compilation (closes #47) (b824953)
- add Nix flake devshell with Playwright support (c579fcd)
- add OpenCode slash commands for career-ops (#67) (93caaed)
- add scan.mjs — zero-token portal scanner (8c19b2b)
- add writing-samples folder for AI-detection-evading voice calibration (9ae201d)
- cv: add cv.output_format to route between html and latex generation (b82bb5f)
- dashboard: add Catppuccin Latte light theme with auto-detection (ff686c8)
- dashboard: add manual refresh shortcut (#246) (4b5093a)
- dashboard: add progress analytics screen (623c837)
- dashboard: add rejected and discarded pipeline tabs (7d05967)
- dashboard: add vim motions to pipeline screen (#262) (d149e54)
- dashboard: aligned tables and markdown syntax rendering in viewer (dbd1d3f)
- dashboard: show tracker IDs in pipeline list (8d289c6)
- expand portals.example.yml with 8 dev-tools companies + 23 search queries (#140) (b7f555d)
- i18n: add Japanese README + language modes for Japan market (20a2c81)
- latex: add tectonic engine auto-detect with pdflatex fallback (4b71b2c)
- multi-CLI support via open agent skill standard (#572) (7605a5e)
- portals: add Canada/Vancouver and automation companies to example template (590ba6e)
Bug Fixes
- 10 bug fixes — resource leaks, command injection, Unicode, navigation (cb01a2c)
- add data/ fallback to UpdateApplicationStatus (#55) (3512b8e)
- add stopword filtering and overlap ratio to roleMatch (#248) (4da772d)
- align portals.example.yml indentation for new companies (26a6751)
- ci: correct first-interaction@v3 input names (c5196a8)
- ci: gracefully handle missing dependency graph in dependency-review (#343) (7c5fecb)
- ci: gracefully handle missing dependency graph in dependency-review workflow (#352) (7c5fecb)
- ci: use pull_request_target for labeler on fork PRs (#260) (2ecf572)
- correct _shared.md → _profile.md reference in CUSTOMIZATION.md (closes #137) (a91e264)
- correct dashboard launch path in docs (#80) (2b969ee)
- dashboard: show dates in pipeline list (#298) (e5e2a6c)
- ensure data/ and output/ dirs exist before writing in scripts (#261) (4b834f6)
- filter expired WebSearch links before they reach the pipeline (#57) (ce1c5a3)
- improve default PDF readability (#85) (10034ec)
- liveness checks ignore nav/footer Apply text, expired signals win (3a3cb95)
- liveness: detect closed postings with applications-closed banner variants (7f8217e)
- merge-tracker: filter seniority and location stopwords + require overlap ratio in roleFuzzyMatch (7821113)
- pt: restore diacritical marks in PT-BR modes (#358) (3a4c596)
- pt: restore diacritical marks in PT-BR modes (#359) (3a4c596)
- release: sync VERSION and package.json via release-please-config (6a3dc22)
- remove wellfound, lever and remotefront from portals.example.yml (#286) (ecd013c)
- replace grep -P with POSIX-compatible grep in batch-runner.sh (637b39e)
- test-all.mjs scans only git-tracked files, avoids false positives (47c9f98)
- update-system: cross-check GitHub Releases API when VERSION file is stale (b0ee6eb)
- update-system: e...
v1.6.0
1.6.0 (2026-04-26)
Features
- add Gemini CLI native integration and evaluator script (#349) (0853486)
- add Gemini CLI native integration and evaluator script (closes #344) (0853486)
- add LaTeX/Overleaf CV export mode with pdflatex compilation (#362) (b824953)
- add LaTeX/Overleaf CV export mode with pdflatex compilation (closes #47) (b824953)
- cv: add cv.output_format to route between html and latex generation (b82bb5f)
- dashboard: add rejected and discarded pipeline tabs (7d05967)
- dashboard: show tracker IDs in pipeline list (8d289c6)
- latex: add tectonic engine auto-detect with pdflatex fallback (4b71b2c)
- portals: add Canada/Vancouver and automation companies to example template (590ba6e)
Bug Fixes
- ci: correct first-interaction@v3 input names (c5196a8)
- ci: gracefully handle missing dependency graph in dependency-review (#343) (7c5fecb)
- ci: gracefully handle missing dependency graph in dependency-review workflow (#352) (7c5fecb)
- liveness: detect closed postings with applications-closed banner variants (7f8217e)
- merge-tracker: filter seniority and location stopwords + require overlap ratio in roleFuzzyMatch (7821113)
- pt: restore diacritical marks in PT-BR modes (#358) (3a4c596)
- pt: restore diacritical marks in PT-BR modes (#359) (3a4c596)
- update-system: cross-check GitHub Releases API when VERSION file is stale (b0ee6eb)
- update-system: expand SYSTEM_PATHS to cover all language modes and current scripts (34fe3fb)
v1.5.0
v1.4.0
1.4.0 (2026-04-13)
Features
- add GitHub Actions CI + auto-labeler + welcome bot + /run skill (2ddf22a)
- dashboard: add Catppuccin Latte light theme with auto-detection (ff686c8)
- dashboard: add progress analytics screen (623c837)
- dashboard: add vim motions to pipeline screen (#262) (d149e54)
- dashboard: aligned tables and markdown syntax rendering in viewer (dbd1d3f)
Bug Fixes
- ci: use pull_request_target for labeler on fork PRs (#260) (2ecf572)
- correct _shared.md → _profile.md reference in CUSTOMIZATION.md (closes #137) (a91e264)
- replace grep -P with POSIX-compatible grep in batch-runner.sh (637b39e)
- test-all.mjs scans only git-tracked files, avoids false positives (47c9f98)
- use execFileSync to prevent shell injection in test-all.mjs (c99d5a6)
v1.3.0 — Community, Security, and the Road to Free Local AI
The Vision
We published our roadmap: career-ops will run on your own machine with free local AI models — no API keys, no subscriptions. Or connect your preferred AI provider if you want the power of cloud models. Your choice. Job hunting shouldn't be a premium feature.
What's new
Zero-token portal scanner — scan.mjs hits Greenhouse/Ashby/Lever APIs directly. 73+ companies scanned with zero LLM tokens. Resolves #98.
Block G: ghost job detection — new evaluation block that flags suspicious listings using free signals (JD quality, reposting history, market data). Doesn't affect the 1-5 score — it's an independent legitimacy check. (@FReptar0)
Follow-up cadence tracker — new mode that tracks when to follow up on applications, with configurable cadence rules per status. (@Alfredao)
Contact mode by type — LinkedIn outreach now adapts the message framework based on whether you're reaching out to a recruiter, hiring manager, peer, or interviewer. (@FReptar0)
10 bug fixes — resource leaks in PDF generation, command injection in merge-tracker, Unicode truncation in dashboard (fixes Japanese/Korean display), sed injection in batch runner, and more. (@hobostay)
Liveness fix — expired job pages with generic "Apply" text in navigation no longer fool the liveness checker. (@lawrence3699)
Resume filename — generated PDFs now use your actual name from profile.yml instead of "candidate". (@shra1-honade)
Languages
4 new languages, bringing the total to 8:
🇧🇷 Brazilian Portuguese · 🇰🇷 Korean · 🇯🇵 Japanese (with full market modes) · 🇷🇺 Russian (with interview prep for Yandex, VK, Ozon, T-Bank)
Previously shipped: 🇺🇸 English · 🇪🇸 Spanish · 🇩🇪 German · 🇫🇷 French
Community
- Code of Conduct — Contributor Covenant 2.1 with enforcement actions
- Governance — BDFL model with contributor ladder (Participant → Contributor → Triager → Reviewer → Maintainer)
- Security policy — private vulnerability reporting
- Support guide — routes how-to questions to Discord/Discussions
- PR template — checklist for contributors
- Issue templates — CoC checkbox, duplicate search, CLI/OS fields
- GitHub Discussions — now enabled
- Discord integrated across all touchpoints
Dev experience
- Nix flake —
nix developsets up the full environment with Playwright browsers. (@Enriquefft)
Contributors
Thanks to everyone who made this release possible:
@Arc-the · @Alfredao · @FReptar0 · @hobostay · @lawrence3699 · @shra1-honade · @Enriquefft · @filipemarraa · @minwoo-data · @eltociear · @Fighter90
v1.2.0 — Community contributions
What's new
7 community PRs merged — first batch of external contributions since the viral launch.
Bug fixes
- Windows cross-platform paths — tracker scripts now work on Windows (#58 by @wlvchandler)
- Batch runner parallel fix — report number reservation and state writes are now serialized (#31 by @moelomda)
New features
npm run doctor— setup validation script with actionable fix hints for new users (#50 by @vraj00222)- Expired link filtering — WebSearch results are now checked for liveness before entering the pipeline (#57 by @wlvchandler)
- French language modes — native
modes/fr/for the francophone job market: CDI/CDD, SYNTEC, RTT, mutuelle, and more (#69 by @2soum) - OpenCode support — 14 slash commands in
.opencode/commands/for OpenCode CLI users (#67 by @joaobertacchi) - Canva CV generation — optional visual CV pipeline that preserves your Canva design while tailoring content per JD (#68 by @tomron87)
Legal & governance
- LEGAL_DISCLAIMER.md — full legal terms covering data privacy (GDPR), EU AI Act, acceptable use, indemnification, and third-party ToS compliance
- README disclaimer — visible disclaimer in both EN and ES sections
- CONTRIBUTING.md — explicit "what we do NOT accept" policy (scraping, auto-submit, personal data PRs)
Multi-CLI direction
career-ops is now engine-first, CLI-agnostic. The evaluation engine (modes, scripts, templates) works with any AI CLI:
- Claude Code —
CLAUDE.md(built and battle-tested) - OpenCode —
.opencode/commands/(community-contributed) - Codex —
AGENTS.mdcoming soon (#41 in progress)
Upgrade
node update-system.mjs applyYour personal data (cv.md, profile.yml, data/, reports/) is never touched by updates. See DATA_CONTRACT.md.
Thanks to all contributors: @wlvchandler, @moelomda, @vraj00222, @2soum, @joaobertacchi, @tomron87.
