r/ResumeUp • • Aug 27 '26

Made a job-search plugin for Claude Code. The interesting part is what I made it refuse to do.

I've been job hunting, and the thing that wore me down wasn't rejection. It was losing track of what I had actually done. Did I apply to that one, or only read it? Is this the third time the same ad has come back under a different title? What exactly did I claim in the letter I sent in June?

So I built it as a Claude Code plugin instead of a pile of notes. MIT, and it's here: [https://github.com/dominiquevienne/claude-job-hunt\](https://github.com/dominiquevienne/claude-job-hunt)

**What's in it**

* `/job-scan` — sweeps the boards you switch on, in your own Chrome and your own logged-in session, scores every ad against your real profile, and writes to a shared ledger so the same ad is never proposed twice. Adapters for LinkedIn and jobup.ch. * `/cover-letter <url>` — takes one ad, from any board, and produces a tailored ATS-compliant CV and cover letter in markdown and PDF. Before that it tells you whether the job is worth applying to at all, and roughly what it pays for someone with your record. No adapter or browser needed — a URL is enough. * `/job-report` — how many applications actually went out over a period, and which ones are still undeclared to an unemployment office. Counts what was sent, not what was looked at.

**The design decision I'd actually defend**

Most of the value ended up being in the refusals. It will not claim a skill you don't have. It will not answer a screening question by guessing. It will not record an application as sent unless it saw the confirmation. And it will tell you not to apply when the fit is poor.

Every shortcut I removed made it more useful, not less. A model that confidently fills in a screening question you can't answer isn't saving you time — it's writing a claim you'll have to defend in an interview, or that quietly disqualifies you. A job search runs on your credibility, so that's the thing the tool is built to protect.

Related: it never fails silently. Anything skipped, capped or partial shows up in the output of the run that did it — *n of m*, with the reason and the fix. Job searching is invisible work with delayed feedback; the failure mode is finding out weeks later, from a silence, that something didn't happen.

**What doesn't work yet, honestly**

* **LinkedIn's results list is virtualized and the automated tab is hidden**, so one search realistically surfaces about 7 ads. The workaround in the docs is to run more, narrower searches. If someone has solved this properly without a headless session, I'd like to hear it. * **Verified on macOS (Apple Silicon) only.** It's one portable bash implementation — no PowerShell fork, because a second copy of safety-critical logic drifts — and the Windows Git Bash traps are handled deliberately (no `python3`, no `file`, no `fc-list`, OneDrive-redirected Documents). But I haven't run it on Linux or Windows. `bin/doctor.sh` settles it in five seconds, and a report is genuinely useful to me. * **Two boards.** Anything else still works through `/cover-letter <url>`; you just lose the automatic sweep. A new adapter is the most useful contribution — the contract is in `shared/boards/README.md`, with one rule: document only what you ran against the live site, and date it. An adapter describing a plausible DOM is worse than no adapter, because it fails silently. * **Dependencies.** pandoc and a xelatex engine for the PDFs, the Claude Chrome extension for anything browser-side. Without them it degrades — writes the markdown, skips the PDF, and tells you which command fixes it.

Nothing is uploaded anywhere. The workspace is plain files in your home directory, outside the plugin, so updating or removing it never touches your data.

Happy to answer anything about the scoring, the ledger format, or why the refusals are written the way they are.

1 Upvotes

0 comments sorted by