Skip to content

Releases: santifer/career-ops

career-ops: v1.9.0

09 Jun 18:16
808cee5

Choose a tag to compare

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

15 May 09:20

Choose a tag to compare

1.8.0 (2026-05-15)

Features

  • scan: optional location_filter in portals.yml + persist location to scan-history (#570) (d692647)

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

12 May 17:27

Choose a tag to compare

1.7.1 (2026-05-12)

Bug Fixes

  • release: sync VERSION file to 1.7.0 (8e554cc)
  • update-system: include .agents/ in SYSTEM_PATHS (#600) (3a71469)

career-ops: v1.7.0

06 May 12:36

Choose a tag to compare

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...
Read more

v1.6.0

26 Apr 19:52
d725306

Choose a tag to compare

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

14 Apr 17:34
2051beb

Choose a tag to compare

1.5.0 (2026-04-14)

Features

  • add --min-score flag to batch runner (#249) (cb0c7f7)
  • add {{PHONE}} placeholder to CV template (#287) (e71595f)
  • dashboard: add manual refresh shortcut (#246) (4b5093a)

Bug Fixes

  • add stopword filtering and overlap ratio to roleMatch (#248) (4da772d)
  • dashboard: show dates in pipeline list (#298) (e5e2a6c)
  • ensure data/ and output/ dirs exist before writing in scripts (#261) (4b834f6)
  • remove wellfound, lever and remotefront from portals.example.yml (#286) (ecd013c)

v1.4.0

13 Apr 18:01
480652d

Choose a tag to compare

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

10 Apr 18:49

Choose a tag to compare

Free for everyone

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.

Read the full vision →

What's new

Zero-token portal scannerscan.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 flakenix develop sets 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

07 Apr 16:29

Choose a tag to compare

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 CodeCLAUDE.md (built and battle-tested)
  • OpenCode.opencode/commands/ (community-contributed)
  • CodexAGENTS.md coming soon (#41 in progress)

Upgrade

node update-system.mjs apply

Your 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.