career-ops is a job-search system built inside an agent workspace
career-ops turns a local project directory into a job-search command center. An AI coding CLI reads the candidate profile, CV, preferences, modes, and pipeline files, then evaluates listings into a structured report. It can tailor CVs, create PDFs, scan supported job boards, track outcomes, prepare interviews, research companies, and draft outreach. The README draws an important boundary: the system does not submit applications. The candidate reviews the recommendation and takes the final action.
The scope is much larger than resume rewriting. The repository contained 1,171 files, about 182,051 source lines, and measured 42 MB before installation. GitHub showed 68,705 stars and 291 open issues and pull requests combined. The last push was August 27, 2026, two days after release v1.29.0. This is active software with frequent changes to providers, scanners, PDFs, locking, and the web interface, so users should back up their personal layer before updates.
The system filters jobs instead of sending applications
Each evaluation produces blocks covering the role, profile match, seniority, compensation research, personalization, interview preparation, posting legitimacy, and a possible next action. The global score uses judgment across stated dimensions rather than simple keyword arithmetic. The README recommends against applying below 4.0 out of 5 and only drafts its highest-level action block at 4.5 or above. That approach can reduce low-value applications if the profile and scoring instructions match the candidate.
It also creates a feedback loop from outcomes. The tracker, rejection-pattern analysis, interview story bank, repost detection, follow-up cadence, and channel statistics can reveal where a search stalls. Results still depend on accurate records. A model can misread a job description, invent a connection between experiences, or overvalue polished wording. Release v1.29.0 added a tiered source-of-truth boundary and a story-provenance check, which is a useful control rather than a guarantee of factual CV output.
What happened when we ran it
Our sandbox cloned commit b15a963 into an unprivileged container described as lab-node:22, with 3 CPUs and 8 GB of RAM. Installation failed with exit code 1 after 14 seconds. Because install did not finish, the harness did not run a build or tests and reported no installed package or disk-use count.
The log says the running version was Node 18.20.8 and that Playwright requires Node 20 or newer. The failing command was the package installation hook that invoked npx playwright install chromium --with-deps, retried through the same command, and exited with code 1. The supplied image name and process-reported version disagree. The log does not explain that mismatch, so the finding is limited to the observed runtime and Playwright refusal.
The repository has 17 CI workflow files, a Dockerfile, a Compose file, and a tests directory. None of those signals turns our failed install into a pass. A prospective user should confirm node --version in the exact shell used by npm, run the documented doctor command, install Chromium only where PDF generation is needed, and complete the project test command before trusting an upgrade with live career data.
Onboarding quality determines evaluation quality
The README says first evaluations will not be good because the system does not yet know the candidate. It asks for a CV, career story, proof points, preferences, strengths, and exclusions. That is honest and important. A generic profile will produce generic ranking and generic documents. A useful setup takes time because the user must separate proven accomplishments from aspirations, choose target roles, and explain constraints such as location, work authorization, compensation, or travel.
Tailored documents need line-by-line verification
The PDF and cover-letter paths use job descriptions and the user's record to customize material. That can help surface the most relevant work, yet keyword mirroring creates pressure to overstate. Every skill, number, title, date, and project claim should trace to the candidate's source material. The release's provenance check supports that goal. The applicant still needs to compare the final PDF with the source CV and open the rendered file before uploading it.
The application-email feature is draft-only, and the README repeats that it never sends, submits, or clicks. Keep that gate. Contact research can identify a manager, recruiter, or peer and draft a short message, but identity matching can be wrong. Confirm the employer, role, and person through a current public source. A personalized mistake sent to the wrong person is worse than a plain application.
Portal automation changes whenever employers change their sites
career-ops supports named providers and company pages through browser and API logic. Release v1.29.0 added or changed Job Bank Canada, MyCareersFuture, Recruitee, Ashby, SmartRecruiters, Hacker News, Greenhouse, Lever, and liveness behavior. That activity is useful, and it shows the upkeep required. Job boards revise HTML, pagination, rate limits, and access controls without coordinating with downstream tools.
Technical candidates get the most from this design
The quick path uses npx @santifer/career-ops init, followed by an agent CLI inside the new directory. Claude Code, Codex, OpenCode, Antigravity, Qwen, and other agent-skill clients have documented routes. For Claude Code users, the shared skill and command router make the project feel native, which is why the claude-code tag matters. Nontechnical applicants may find files, agents, Node, Chromium, permissions, and Git updates more work than a hosted tracker.
career-ops makes sense for someone who enjoys tuning a system and wants a local record of a serious search. The failed 14-second install prevents an unconditional recommendation from our run. Fix the Node path, pass the doctor and tests, then trial it on 10 previously judged listings. If its rankings match your reasoning and every generated claim survives review, it can save time without handing over the final application decision.

