The job market in the technology sector has become a battlefield of ruthless algorithms. One developer, however, decided to flip the rules of the game – he built the Career-Ops system, sent over 700 personalized applications, and landed his dream job. Today this powerful tool built on Claude Code is fully open source.
A new era of job hunting: When manual CV sending stops working
Anyone who has tried to change jobs in the IT sector or the broader technology industry over the past dozen‑plus months knows this scenario well. Hours spent browsing job boards, dozens of tabs open in the browser, painstakingly tailoring every paragraph of the CV to a specific employer’s requirements, and finally – soulless ATS (Applicant Tracking Systems) forms that force you to re‑type the same data you just attached in a PDF file. In the end, a deep silence usually follows.
This situation has become frustrating for thousands of qualified specialists. The recruitment process on the employer side has been dominated by automatic filters that reject applications based on missing keywords before any human even looks at them. In this asymmetric battle, candidates are at a lost position – unless they decide to fight back with the same weapon.
That’s exactly what Spanish software engineer Santi Fernandez (@santifer) did. Instead of succumbing to the routine of manual applications, he approached the problem as a programmer should: he decided to automate it. Leveraging the latest capabilities of programming assistants, including the revolutionary developer tool Claude Code from Anthropic, he created a complete recruitment automation ecosystem called Career-Ops. The result? Over 700 sent applications, precisely matched to each posting, numerous interview invitations, and ultimately – landing the dream job. Best of all for everyone, the author released the entire project under an open‑source license, giving everyone a chance to level the playing field against corporate algorithms.
How the Career-Ops system was built? The role of Claude Code in rapid prototyping
Creating a system that not only searches for job postings but also semantically analyzes them, dynamically rebuilds application documents, and interacts with complex web forms is a massive engineering challenge. In traditional conditions, building such software could take a single programmer many months of hard work. The key to success turned out to be the use of modern AI‑assisted tools.
Santi Fernandez based his development process on Claude Code – an advanced CLI interface from Anthropic that allows language models to interact directly with the local file system, run tests, debug code, and write entire application modules in real time. If you want to learn how to effectively harness the potential of these models in everyday programming, it’s worth checking how to turn Claude AI into a personal mentor and software engineer.
Thanks to Claude Code, the author was able to move from idea to working code in an instant. The system required integration of many technologies: Go for building a fast and stable CLI layer and dashboard, Node.js and the Playwright library for browser automation, and LLM model APIs for the cognitive layer (text analysis and synthesis). Claude Code acted here as a super‑assistant, generating boilerplate, suggesting optimal approaches to parsing complex HTML structures of career pages, and helping debug asynchronous operations in Playwright.
The result is a system that implements highly advanced workflow design, combining deterministic code with the nondeterministic capabilities of language models. AI does not make decisions in a vacuum – it operates within strictly defined boundaries, executing step‑by‑step tasks that previously required hours of human attention.
Career-Ops Architecture: Automation from scanning to sending
Career-Ops is not a simple spam‑sending script. It is a thoughtful platform that cares about quality and personalization at every stage. We can divide its operation into four main phases:
- Scanning and aggregation (Scraping): The system directly monitors the career pages of selected companies and popular aggregators. It fetches full job posting content, cleans out navigation noise, and stores it in a structured database.
- Fit scoring (Scoring): Before the system spends even a fraction of a cent on advanced LLM processing of a posting, it performs an initial analysis. Then the language model compares the candidate’s profile with the job requirements, rating the fit on a scale of 1 to 100. If the score is too low, the posting is discarded, preventing applications to roles where we have no chance.
- Document tailoring (Tailoring): For postings that pass the verification, the system launches a process that generates a dedicated CV and cover letter. AI analyzes which experiences from our work history best address the challenges described in the posting, and rewrites the sections while preserving full factual accuracy.
- Automatic application (Auto‑apply): Using a headless browser driven by Playwright, the system navigates to the application page, locates form fields (such as first name, last name, GitHub, LinkedIn, salary expectations), fills them in, and attaches the freshly generated, personalized PDF CV.
This division makes the whole process extremely precise. The user does not send a generic document to hundreds of companies – they send hundreds of documents, each looking as if it were hand‑crafted by a professional career advisor specifically for that one role.
The heart of the system: 14 specialized work modes
The power of Career-Ops lies in its modularity. Instead of a single monolithic process, the system offers 14 different work modes (sub‑commands in the CLI) that the user can run independently or combine into complex processing pipelines. This provides full control over each stage and simplifies debugging.
- 1.
scan(Job scanning): Responsible for querying the configured sources and fetching new job postings. - 2.
parse(Data normalization): Transforms raw HTML or JSON responses from recruitment sites into a structured Markdown format, facilitating further AI analysis. - 3.
score(Analysis and scoring): Uses an LLM to compare the user’s profile with the job requirements. Assigns a score and generates a short justification for why the position is (or isn’t) worth pursuing. - 4.
tailor(CV optimization): Generates a personalized version of the professional profile, highlighting those projects and technologies from the user’s work history that are crucial for the specific employer. - 5.
pdf(Document generation): Compiles the tailored profile into HTML, then renders it into a perfect PDF file using Playwright. - 6.
cover-letter(Cover letter): Creates a unique, context‑aware cover letter that directly addresses the problems the company aims to solve by hiring for the role. - 7.
ats-check(ATS verification): Simulates the behavior of popular scanning systems, checking whether the generated PDF will be correctly read by automatic parsers. - 8.
apply(Form filling): Automates the data entry process on platforms such as Greenhouse, Lever, or Workday using precise Playwright scripts. - 9.
track(Status management): Updates the local database with the application status (e.g., “sent”, “pending”, “rejected”, “interview”). - 10.
skills-gap(Competency gap analysis): Analyzes rejected offers or those with low scores, indicating to the user which technologies or skills are missing from their portfolio to qualify for desired roles. - 11.
company-research(Market intel): Retrieves additional information about the company (e.g., recent funding rounds, key products, organizational culture) to prepare the candidate for a potential interview. - 12.
clean(Database maintenance): Cleans outdated or inactive postings and duplicates from the database. - 13.
verify(Link validation): Checks whether application links are still active, preventing wasted effort on stale offers. - 14.
analytics(Reporting): Generates detailed statistics on process effectiveness (conversion rates, employer response times, API costs).
This granularity makes Career-Ops more than just a CV‑sending bot; it is a comprehensive analytical environment for anyone who treats job hunting as an engineering project.
Terminal dashboard: Managing recruitment from the console in Go
For many programmers and engineers, the terminal is the natural work environment. Santi Fernandez decided that instead of building a complex web application that would require a local server, databases, and a React frontend, he would create a minimalist yet highly functional dashboard directly in the console.
Written in Go, using modern libraries for building TUI (Terminal User Interface) such as likely Bubbletea from Charm, the dashboard provides the user with all essential information at a glance. Go offers lightning‑fast performance, minimal resource consumption, and easy distribution as a single executable.
What exactly does the user monitor with this dashboard? Primarily:
- Recruitment funnel status: Visual representation of the number of postings at each stage (discovered, scored, tailored, sent, interview invitations).
- Success metrics: Percentage of positive responses relative to all sent applications.
- API costs: Since the system heavily uses language models (e.g., Anthropic Claude or OpenAI GPT), the dashboard continuously monitors token usage and estimates the financial cost of operations.
- Operational logs: Live view of actions performed by Playwright – the user sees which step of the form‑filling bot is currently executing.
This is a perfect example of how modern AI agents at work can take over repetitive, boring office tasks, allowing the human to focus solely on what matters most – preparing for a substantive interview.
Perfect ATS‑friendly CVs thanks to Playwright
One of the biggest challenges in modern recruitment is how ATS systems interpret PDF files. Many popular templates from services like Canva or Novoresume, while attractive to the human eye (two‑column layout, colorful skill bars, icons), are completely unreadable for machine parsers. The text can be fragmented, read in the wrong order, or even invisible to the filtering algorithm.
Career-Ops solves this problem in a brilliantly simple way. Instead of generating PDFs with complex graphics libraries, the system creates documents in clean, semantic HTML/CSS. The layout is single‑column, fonts are standard, and the heading hierarchy (H1, H2, H3) perfectly matches screen‑reader and ATS parser expectations.
Then Playwright enters the scene – a tool built for browser automation and testing. Playwright launches a headless Chromium instance in the background, loads the generated HTML page with our personalized CV, and takes a snapshot as a PDF. The resulting document:
- Is 100% compliant with ATS guidelines (text is fully vector, selectable, and in the correct order).
- Looks extremely professional, clean, and minimalist, inspiring confidence in human recruiters at later stages.
- Can be generated in hundreds of unique versions within seconds, without risking margin or formatting issues.
Thanks to this approach, applications sent by Career-Ops exhibit a very high pass rate through the first, automated recruitment filter.
Over 45 ready‑made integrations: From Anthropic to Stripe
Career-Ops is not just an academic project – it is a tool proven in battle‑tested market conditions. In the system’s repository you will find pre‑configured templates and selectors for more than 45 leading tech companies and the world’s most popular recruitment systems. Among them are giants such as:
- Anthropic (creators of Claude models)
- openai (creators of ChatGPT)
- elevenlabs (leaders in AI voice synthesis)
- Stripe (online payments giant)
This configuration means the system knows exactly how to navigate the career portals of these firms, how to identify their custom recruitment questions (e.g., a link to a GitHub profile or portfolio), and how to flawlessly submit the required documents.
Crucially, the system’s architecture allows extremely easy customization. If you want to apply to smaller firms or local software houses, you simply add a new JSON/YAML configuration file with CSS selectors for that site’s forms. This turns the system into a universal tool that can be adapted to any market niche.
Open Source movement and the future of automation
Santi Fernandez’s decision to release Career-Ops as an open‑source project has huge significance for the whole community. In an era where the software market is increasingly dominated by closed, paid SaaS subscriptions, handing over such a powerful tool to users democratizes access to advanced technologies.
It is worth reflecting on the nature and durability of such initiatives. History shows that projects born out of passion, solving real painful problems for creators, often become the foundation for entire software domains. Analyzing this, what Daniel Stenberg taught us about Open Source longevity using the iconic curl tool, we see that the key to success is simplicity, openness to community contributions, and a focus on reliably solving one concrete task. Career-Ops has the chance to become the “curl” of the job market if the community engages in its development, updating form selectors and adding new work modes.
Deploying Career-Ops: Requirements, costs, and potential risks
Before you decide to launch Career-Ops and automate your recruitment process, you need to be aware of the technical requirements and challenges involved. This is not a “click‑and‑forget” app for non‑technical people – it requires some software engineering knowledge.
System requirements and configuration
To run the system locally on your computer you must have installed:
- Go (Golang): To compile and run the CLI layer and dashboard.
- Node.js and NPM/pnpm: Required for the Playwright library that handles browser automation.
- API keys: Access to language model APIs (e.g., Anthropic Claude API or OpenAI API). This is where the magic of text analysis happens.
API cost considerations
While the Career-Ops source code itself is completely free, using it incurs real financial costs. Every call to an LLM for scoring a posting or generating a personalized CV consumes tokens. With intensive scanning and applying to hundreds of positions, these costs can range from a few to several dozen dollars per month.
To minimize expenses, it is advisable to configure the system to perform an initial deterministic local filter (e.g., keyword matching on title or location) before invoking advanced AI models only for a carefully selected subset of postings.
Ethical and technical challenges: Where is the line?
Automating recruitment at this scale also raises important ethical and practical questions. Does mass‑sending applications with bots further damage the market? Will recruiters, flooded with automatically generated CVs, adopt even stricter and more ruthless verification methods?
The key to responsible use of Career-Ops is the Human‑in‑the‑Loop principle. The system should act as a powerful assistant that does the grunt work (searching, preliminary formatting, filling boring fields), but the final decision to send an application and the substantive verification of the generated CV must always remain with the user. Hallucinations from language models are a fact – sending a CV that attributes projects to you that you never worked on can permanently damage your reputation.
Summary: Is this the beginning of an algorithm war in recruitment?
The Career-Ops project is a fascinating showcase of the power that lies in combining modern language models, developer tools like Claude Code, and classic browser automation. It demonstrates that in the face of a job‑market crisis and increasingly complex recruitment processes, candidates do not have to be defenseless.
We are, however, entering an era that can be called the “algorithm war”. On one side stand AI‑driven ATS systems whose goal is to reject as many candidates as possible. On the other side are tools like Career-Ops that optimize applications to glide past those filters. How will this clash end? Most likely with a return to the roots – solid, direct verification of technical skills during live interviews and building personal networks. Until then, Career-Ops remains one of the most advanced and effective tools in the hands of a modern engineer seeking new professional challenges.
Comments