Career-Ops: The Terminal That Replaced His Job Hunt
Score job offers A to F, scan 45 portals, and ship ATS resumes without ever touching a spreadsheet.
What career-ops is
career-ops is an open-source repo at github.com/santifer/career-ops that turns any AI coding CLI into a job-search command center. It runs in Claude Code (primary), Codex, Gemini CLI, or OpenCode. No SaaS, no Chrome extension, no hosted dashboard.
Paste a job description URL. The system scrapes it, scores it A-F across 10 dimensions, drafts an ATS-tailored PDF, and logs the result to a local tracker. Below 4.0 out of 5 is a flagged skip.
Santiago Fernandez built it during his own search: 740 offers evaluated, 100-plus tailored CVs, one Head of Applied AI role landed. The quote on the repo: “Companies use AI to filter candidates. I just gave candidates AI to choose companies.”
The rest of this piece is the setup, the 14 modes, and 12 copy-paste prompts that work whether you ship YAML, Figma files, PRDs, or pull requests.
PS: Your shares are the main source of growth for this newsletter. My weekly goal is to get more than 100 shares for each article. It helps me maintain my laser-like focus on debugging production while keeping the article free.
Setup (Takes 5min)
Four commands and a paste:
git clone https://github.com/santifer/career-ops
cd career-ops && npm install
npx playwright install chromium
npm run doctornpm run doctor checks Node, Playwright, your AI CLI, and the config paths. Green means clear.
TBH, I gave the repo URL to Claude and asked it to set up the project:
Then two config copies:
cp config/profile.example.yml config/profile.yml
cp templates/portals.example.yml portals.ymlOpen config/profile.yml, fill in target archetypes, salary band, location, deal breakers. Drop your resume into the repo as cv.md in plain markdown, not PDF.
Open claude (or codex, gemini, opencode) in the same directory. Type /career-ops. Done.
Command Center
Four buckets:
Sourcing (3). Find roles.
scan: sweep all 45-plus pre-configured companies for matches against your archetype.pipeline: keep an ongoing watchlist of companies you actually want.deep: research a single company end-to-end, funding to attrition.
Evaluation (5). Decide if a role is worth your time.
oferta: score one JD, full 6-block report.ofertas: score a handful of related roles at once.batch: score 10-plus JDs in parallel and rank them.training: judge whether a course or cert will move you.project: judge whether a portfolio project is worth building.
Outreach and apply (3). Get in front of humans.
contacto: warm recruiter or hiring manager DM.apply: assemble the application package, staged for review.followup: the polite nudge that gets a reply.
Artifacts and tracking (3). Paperwork.
pdf: render an ATS-tailored resume via Playwright.tracker: log every evaluation, application, and reply.interview-prep: loop-specific prep notes and STAR+R stories.
Separately, /career-ops {paste a JD} triggers the auto-pipeline that chains scan, score, tailor, and log into one flow.
Most users live in oferta, batch, pdf, and tracker. The other ten earn their keep when the search gets serious.
The A-F scoring system
Every evaluation lands on an A-F scorecard across 10 weighted dimensions: role fit, level fit, comp band, growth trajectory, team signals, company stability, location and remote terms, mission alignment, tech stack overlap, and personalization room.
The floor is 4.0 out of 5. Anything below it is flagged as a hard pass you should review before submitting. That single rule kills spray-and-pray.
Just pasted JD, and it did crazy analysis. This is just a small one.
Above the scorecard sits the 6-Block Evaluation:
Role summary: what the company actually wants, in plain English.
CV match: which lines from your
cv.mdmap to which line of the JD.Level strategy: stretch, fit, or overqualified, and what to do about it.
Comp research: range pulled from Levels.fyi, Glassdoor, and recent reports.
Personalization: the specific hook for the cover note or recruiter ping.
Interview prep: 3-5 STAR+R stories from your existing history that match the loop.
Every evaluation contributes 5-10 STAR+Reflection stories to a master file. By application 20, you stop writing answers from scratch. You remix.
Copy-paste prompt library
Twelve prompts. Paste as-is into claude (or any CLI) inside the career-ops repo. Names and URLs are placeholders; the structure is the work.
Subscribe if you find it insightful!
Prompt 1: First-time onboarding
You are career-ops in onboarding mode. Read my cv.md and config/profile.yml.
Then ask me 8-12 follow-up questions, one at a time, to fill the gaps.
Specifically: my three strongest proof points with metrics, the two role types
I want to avoid and why, the comp band that would actually make me move, the
companies on my "would say yes immediately" list, and the dealbreakers (commute,
on-call, stack). After my answers, rewrite config/profile.yml and save it.Returns: a guided interview ending in a profile good enough to power every other mode.
Prompt 2: Score a single JD URL
/career-ops https://www.linkedin.com/jobs/view/4392483332
Run the full oferta mode. Give me the A-F scorecard across all 10 dimensions
first, then the 6-Block Evaluation. Be honest on level fit. If the score is
below 4.0, tell me why and what would need to change for it to clear.Returns: a one-shot evaluation, roughly 600-1000 words, scorecard at top.
Prompt 3: Batch-score 10 JDs in parallel
Run batch mode on these 2 URLs:
1. https://www.linkedin.com/jobs/view/4392483332/
2. https://www.linkedin.com/jobs/view/4390238482/
Return a single ranked table: rank, company, role, overall score, top blocker, top strength, recommend apply (yes/no). Sort by overall score desc. Do not write full reports yet, just the table.Returns: a ranked markdown table in under two minutes, ready to paste into the tracker. I tested with 2 only, but you can try 10 as well!
Prompt 4: Scan 45 portals for a target archetype
Run scan mode. Target archetype: Staff Platform Engineer or Senior SRE.
Geography: EU remote or hybrid Berlin/Amsterdam/London. Posted in the last
7 days. Comp floor: 130k EUR base. Exclude companies that did layoffs in
the last 6 months. Return a deduplicated list with company, role, link,
posted date, and a one-line why-this-fits.Returns: a fresh list of 15-40 roles from Ashby, Greenhouse, Lever, Wellfound, Workable, RemoteFront.
Prompt 5: Generate ATS-tailored PDF
Run pdf mode for the Anthropic Staff Platform Engineer evaluation from earlier.
Inject the top 12 keywords from the JD where they fit naturally in my bullets,
without inventing skills. Use the default Space Grotesk + DM Sans theme.
Output to output/anthropic-staff-platform-engineer.pdf and show me
the diff against my base cv.md before rendering.Returns: a diff-first review, then a one or two-page PDF rendered via Playwright.
Prompt 6: Deep-research a company
Run deep mode on ElevenLabs. I want: latest funding round and runway estimate,
public attrition signals, Glassdoor patterns (cluster the complaints), known
recent layoffs or restructures, leadership changes in the last 12 months,
public engineering blog cadence, and the three biggest red flags. Cite sources.Returns: a 5-8 paragraph briefing that goes past surface-level Crunchbase data.
Prompt 7: Build a STAR+R story for “tell me about a failure”
Mine my cv.md and the last 10 evaluations in tracker.md for incidents that
could become a "tell me about a failure" STAR+R story. Pick the strongest one.
Draft it in 250 words: Situation, Task, Action, Result, Reflection. The
reflection must include what you would do differently and what you actually
changed in your system or process afterward.Returns: one tight story added to the interview-prep story bank, reusable across loops.
Prompt 8: LinkedIn outreach DM
Run contacto mode. Draft a LinkedIn DM to the recruiter for the Cohere ML
Platform Engineer role. Three lines max. Open with a specific hook tied to
their recent engineering post about inference cost. Reference one concrete
result from my cv. Close with a single question, not a CTA. Warm tone, not
salesy. No "I hope this finds you well."Returns: a three-line DM that reads like a human wrote it on a Tuesday.
Prompt 9: Salary negotiation reply
Draft a reply to the recruiter at Pinecone. Context: they offered 165k base +
0.4% equity. There is a competing offer from Vercel at 180k base + 0.35% equity
that closes Friday. Write a 6-line reply that names the band (not the company),
acknowledges genuine interest, asks for a revised offer by Thursday EOD, and
leaves the door open if they cannot move. No threats, no apologies.Returns: a script that reads firm and professional, leaves both sides with room.
Prompt 10: Evaluate a cert or course
Run training mode. Should you spend 40 hours on the AWS Solutions Architect
Professional cert this quarter, given your target archetype is Senior Platform
Engineer at AI-native companies? Compare against alternatives: a Kubernetes
deep-dive course, a Rust side project, or contributing to an open-source
observability tool. Score each on signal-to-recruiter, skill compounding,
and time cost.Returns: a four-row comparison table and a recommendation with reasoning.
Prompt 11: Decide if a portfolio project will move the needle
Run project mode. Idea: build a small open-source tool that benchmarks LLM
inference latency across providers and publishes a weekly leaderboard.
Target audience: hiring managers at AI infra companies. Frame the decision
as opportunity cost: what could you ship in the same 60 hours that would
move the needle harder for the Staff Applied AI archetype? Return verdict
plus two alternatives.Returns: an opportunity-cost analysis that may talk you out of the project.
Prompt 12: Adapt modes to a non-engineering role
Rewrite the archetypes in modes/_shared.md so they describe Senior Product
Designer roles instead of platform engineering roles. Keep the 10 scoring
dimensions, but reweight: design craft, portfolio depth, cross-functional
fluency, and product taste should dominate. Update the keyword lists in
templates/portals.yml to match. Save changes and show me the diff.Returns: the entire system reshaped for a designer in one prompt. The repo modifies itself.
The dashboard
When the tracker has 20-plus roles, markdown stops working. The Go + Bubble Tea TUI takes over.
Six filter tabs, four sort modes, inline status changes. Previews lazy-load on the right pane, so the dashboard stays fast with 300 entries in the tracker. Runs in a second terminal next to the AI session.
It works without Claude
Codex runs every mode. Gemini CLI runs every mode, and the free tier (gemini-2.5-flash, 15 RPM, 1M tokens/day) covers a serious job search at zero cost. OpenCode runs every mode locally.
Slash commands, configs, and PDFs are identical across CLIs. If a vendor changes pricing or sunsets a model, your cv.md, story bank, and tracker carry over.
Honest limits
The first three evaluations are mediocre. The system has no idea who you are until you feed it context. Treat the first hour like onboarding a new recruiter.
The AI occasionally hallucinates skills onto a tailored CV. The
pdfmode shows a diff first. Use it.Never auto-submits. Human-in-the-loop is the design; you always click apply.
Respect the portal's terms of service. The configured scrapers are tuned to stay polite.
Below 4.0 is a flagged skip. Push through anyway, only with a documented reason.
See you next week. Try not to break production before then.
Keep Decoding, Bhanu









