Skip to content

Releases: santifer/career-ops

career-ops: v1.12.0

18 Jun 17:38
f7b426f

Choose a tag to compare

1.12.0 (2026-06-18)

Features

  • batch: add --status and --watch progress monitoring to batch-runner.sh (#922) (#966) (802552f)
  • cli: add Antigravity CLI compatibility (61de18d)
  • i18n: add Chinese language modes for China-market job seekers (#934) (#965) (207f960)
  • pdf: render Japanese CVs with a lang="ja" CJK font fallback (#1053) (d0d57d1)
  • providers: add Jobstreet and Glints providers for the Indonesian market (728d547), closes #1085
  • providers: add RemoteOK, Remotive, Working Nomads, IBM board providers (349bacc), closes #1075
  • providers: port Arbeitsagentur to an in-process provider (#1095) (504a2f0)
  • scan: add content/description filter for providers (#974) (21d6c86)

Bug Fixes

  • ashby: include secondaryLocations so EU-eligible roles surface (a84d3f5), closes #1073
  • batch: reconcile pipeline.md inbox after batch runs (#712) (34c3d0e)
  • dashboard: archetype regex matches English and Spanish reports (#977) (d619d3b)
  • dashboard: open Windows targets without shell (#987) (6dc36fb)
  • dashboard: report last-contact in calendar days, not hours-since-midnight (#1057) (4e05cfd)
  • followup: resolve report path relative to tracker directory (752f3b9), closes #1070
  • followup: use the real application date from notes, not the eval date (#1096) (#1097) (53785c8)
  • gemini: validate evaluation report shape (#819) (a0aa264)
  • latex: language-agnostic section validation + CJK guard (#1054) (b147504)
  • merge-tracker: require company match for number-based dedup (2bb514f), closes #912
  • pdf: auto-install Playwright chromium after update (eb504ad)
  • pdf: use ATS-safe system fonts for clean CV text extraction (17033e8), closes #1074
  • pipeline: add batch liveness sweep for unconfirmed entries (#750) (#973) (e9eba87)
  • scan: sanitize external metadata before writes (#1098) (61bad36)
  • security: harden local-parser against command/arg injection and scan-ats against SSRF (721f1a8)
  • tracker: preserve notes column when rewriting rows without a trailing pipe (#1004) (0569518)
  • update: materialize skill entrypoints without symlinks (#1067) (3ef63c8)
  • updater: git-safety on abort + preserve user files on safety-violation rollback (#915) (#1099) (deef636)

career-ops: v1.11.0

16 Jun 17:29
1b0c365

Choose a tag to compare

1.11.0 (2026-06-15)

Features

  • add first-class OpenCode support alongside Claude Code (#707) (2710fbe)
  • cover: add optional salutation/greeting to cover letters (#1010) (99346c1)
  • cover: load _profile.md so personalization governs the letter (#1012) (dff56d3)
  • doctor: warn when Playwright MCP tools are not configured (#938) (0222224)
  • tracker: map tracker columns by header name (#954) (57b34c0)
  • tracker: SQLite derived index over applications.md — phase 1 (#919) (5465f16)

Bug Fixes

  • cv: align certification org column width across rows (#931) (e27b051)
  • deps: update npm dependencies to v1.61.0 (#1023) (5407247)
  • eval: gate dead links before evaluation in oferta and auto-pipeline (#937) (ebf9a13)
  • generate-pdf: inline local fonts as data: URLs so they actually embed (#952) (08d1e9a)
  • merge-tracker: serialize concurrent tracker merges with a filesystem lock (#941) (0d57994)
  • pdf: wait for load instead of networkidle during render (#929) (fd2ce04)
  • remove story-bank.md from git tracking (#944) (67662b9)
  • skill: surface latex mode in command menus (#928) (2803348)
  • tests: run tracker-mutating scripts with --dry-run in script checks (#925) (1acf27d)
  • tracker: prevent dedup from deleting distinct same-company roles (#950) (98b32a4)
  • update: distribute missing runtime paths (#991) (85ae717)
  • update: match Release Please component-prefixed tags in version check (#926) (6f0e289)
  • update: rebuild dashboard binary after Go source changes (#953) (5382d37)
  • update: use target updater manifest during apply (#983) (539e47b)

career-ops: v1.10.0

11 Jun 08:13
edc971a

Choose a tag to compare

career-ops v1.10.0 — the community week

This release is different from any before it.

In the span of a few days, this project merged work from more than 20 different contributors — including a dozen first-timers. Career-ops now speaks its first right-to-left language, interviews you instead of asking you to write config files, writes your cover letters, runs inside Docker on locked-down machines, and recovers gracefully when your AI session hits its limits mid-batch. Almost none of it was written by me. That's the whole point of this project.

✨ Highlights

New capabilities

  • 🇸🇦 Full Arabic support — career-ops's first RTL language, with real right-to-left engineering in the PDF template (mirrored layout, Arabic-capable font stack), not just translated strings (#764)
  • 🎤 Interactive interview onboardingcareer-ops interview builds your profile and CV by asking you questions, instead of requiring you to write cv.md first (#909)
  • ✉️ Cover letter mode — the most-requested missing piece, rendered through the existing PDF pipeline with zero new dependencies (#807)
  • 🐳 Docker support — run the full pipeline (Playwright included) on hosts where native installs are blocked (#625)
  • 💰 Salary filtering in the zero-token scanner — conservative by design: jobs without salary data always pass (#677)
  • 🔭 Reverse ATS discoveryscan:full sweeps public ATS APIs (Greenhouse, Lever, Ashby, and now Workday) to find matching roles across companies you haven't configured (#746)
  • 🛡️ Apply preflight gate — before drafting any application answer, career-ops verifies the posting is still live and matches your report. On any mismatch it asks you — it never guesses (#887)
  • ⏸️ Batch pause on session limits — hitting your AI plan's limit now pauses the batch (keeping retry budgets) instead of burning every remaining offer to failed. Resume with --resume-paused (#874)
  • Plus: SolidJobs provider + generic job_boards config (#853), scan-history TTL (#895), --rediscover-404 for moved postings (#808), LaTeX CV renderer (#905), configurable follow-up cadence (#889), portals.yml validator (#886), doctor --json as the single onboarding source of truth (#888)

Important fixes

  • 🔐 Security: SSRF guard hardening in the liveness checker — bracketed IPv6 literals, mapped IPv4, 0.0.0.0 and trailing-dot hostnames could bypass the private-host guard (#917)
  • 🩹 v1.8.x upgrades repaired — updating from 1.8.x no longer leaves the install broken (tracker-links.mjs missing). If you're on 1.8.x: this release fixes the path forward — see the note below (#921)
  • 🧯 Batch workers no longer deadlock fighting over a shared browser in parallel runs (#809), and min-score skips no longer fall through to "completed" (#873)
  • 📒 Two tracker data-loss fixes: number collisions can no longer overwrite an unrelated company's row (#867, #793)
  • 🧾 PDF generation now validates section order against your cv.md, not a hardcoded convention (#817)
  • Liveness checking no longer false-expires postings hiding behind anti-bot walls (#783)

i18n — 🇫🇷 French README (#906) · 🇵🇱 Polish README (#837) · 🇸🇦 Arabic README + modes (#764) · last root-level modes translated to English (#903)

⬆️ Upgrading from 1.8.x

The 1.8.x updater has a known gap (#920): run node update-system.mjs apply twice (the first run updates the updater itself), or check the issue for a one-line manual fix. From 1.9.0 onward this class of bug is covered by an automated migration test (#833 — thanks @ncoprod).


📈 And the project itself?

Growing faster than we can triage it, honestly:

Live star telemetry of santifer/career-ops

live star telemetry by warpchart.dev

To everyone who opened an issue before a PR, rebased twice without complaining, or translated a README into their language: thank you. Every one of those stars is someone's job search getting a little less lonely.

— Santiago


📋 Full changelog

1.10.0 (2026-06-11)

Features

  • apply: add preflight liveness and role-match gate (#887) (42bb9ab)
  • batch: pause batch runner on Claude session limits (#874) (ae6beec)
  • cover: add cover letter generation mode (#807) (493f822)
  • cv: add build-cv-latex.mjs structured JSON to LaTeX renderer (#905) (b4af01f)
  • dashboard: keep discard reason visible in pipeline preview (#914) (3200dfe)
  • dashboard: sortable Location, Pay, and Last-contact columns in pipeline view (#798) (265a95b)
  • dockerize project for hosts blocked from native Playwright install (#625) (66404a8)
  • doctor: adopt doctor --json as the single onboarding state source (#888) (35e2124)
  • followup: read cadence settings from profile.yml (#889) (8050c37)
  • i18n: add full Arabic language support and modes (#764) (333bb81)
  • modes: add interactive interview onboarding subcommand (#909) (46a5c59)
  • scan: add --rediscover-404 fallback for moved tracked postings (#808) (7096dbc)
  • scan: add configurable salary filtering to the zero-token scanner (#677) (a6ea02e)
  • scan: add portals.yml schema validator (#886) (3340695)
  • scan: add scan-ats-full.mjs — reverse-discover jobs from public ATS APIs (#746) (7801dc7)
  • scan: add scan-history TTL and recheck policy (#895) (1db4cf2)
  • scan: add SolidJobs provider and job_boards support (#853) (79862a9)

Bug Fixes

  • apply: preserve form field contracts (#821) (2b38fd0)
  • batch: append profile context to worker prompts (#815) (4989afc)
  • batch: isolate workers from inherited MCP to prevent parallel deadlock (#809) (c8c0dbd)
  • batch: stop after min-score skip instead of falling through to completed (#873) (888ca31)
  • dashboard: resolve tracker-relative report links against the tracker directory (#780) (858fc93), closes #779
  • doctor: single source of truth for onboarding state via doctor --json (#765) (eb536c4)
  • flake: declare systems so the devShell resolves on macOS (#848) (e5f0903), closes #334...
Read more

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)