Job hunting has an annoying loop: read the posting, rewrite the CV, work out
who to contact, write the message. Then do it again for the next job. Most
people skip the rewrite and send the same CV everywhere, and that CV is rarely
the right one.
So I built jobhunt: eleven skills for the coding agent you already use
(Claude Code, Codex, Gemini CLI, Cursor, Cline or Windsurf). You paste a job
link, and you get a CV built for that posting, the people worth messaging, and
the message to send them.
▶️ 22-second demo · 🌐 Site · 💻 Code
Same facts, better order
Here's the idea in one picture. The same six lines from one profile, against
one posting:
Most readers stop after the first screenful. On the CV you send everywhere,
your three strongest lines for this job sat below it. Nothing about your
experience changed, only what a reader meets first.
What happens when you paste a link
You say something like:
prepare an application for https://boards.greenhouse.io/acme/jobs/42
and it runs, in order:
-
Your profile, once. The first run reads your CV into
profile.yamland stops so you can check it. A model just read your career, so you approve it once and everything after is built on facts you agreed to. - The posting. It reads the page in your own browser and pulls out what the job actually asks for.
- Fit, before. Every requirement is checked against your own work: what backs it, and what's a real gap.
- A CV for this job. Your strongest lines for this posting move to the top.
- Fit, after. The same check again, so you can see what the tailoring bought you.
- Cover letter and PDFs. The letter is written in the posting's language, and you get PDFs of both.
- Critique. What's still weak, before you send.
- Outreach. Who to message (alumni first, because they're the ones who reply), the LinkedIn searches that find them, and a draft note.
Everything lands in one folder per job. Each skill also works on its own: "how
good is my CV?" runs just the review, and "how well do I match " runs
just the fit score.
How it's built
Each skill is two halves:
-
SKILL.md, the judgement half. It holds plain-language instructions for the model: what to read, what to decide, when to stop and ask. - A small Python script, the exact half. Argv in, JSON out. It does the scoring, the ordering and the PDFs: anything that should be the same every time.
That split is why there's no API key. Your agent is the model, so whatever
you already pay for covers it. The scripts use only the Python standard
library, run on the 3.9 that ships with macOS, and each skill carries its own
copy of the library, so one skill installed alone works exactly like all
eleven.
Not making things up
A CV tool built on a language model has one obvious failure: inventing things.
jobhunt handles it structurally rather than with a promise:
- Roles come from your profile. The CV is assembled from roles picked out of your profile, not written from scratch.
- Added skills are dropped. A skill the model adds that your profile doesn't list is removed, and you're told.
-
Unbacked claims are flagged. If the tailored CV still names something
your profile doesn't back, the after score says so:
claimed but not evidenced.
It also never applies, never logs in and never sends anything. LinkedIn walls
off automated access, and the risk would land on your account, so it builds the
searches and you run them.
Try it
Inside Claude Code:
/plugin marketplace add mohamedaminehamdi/job-hunter
/plugin install jobhunt@jobhunt
Any other agent, on macOS or Linux:
curl -fsSL https://raw.githubusercontent.com/mohamedaminehamdi/job-hunter/main/install.sh | sh
Or download the folders from the site
and drop them in. It needs Python 3.9+ and Chrome, Chromium, Edge or Brave.
What's next
One-click apply on the boards that allow it, jobs found for you, and
application tracking. None of that is built yet: today it prepares the
application, and you send it.
jobhunt is free for your own job search, and the code is on GitHub. If you try
it, I'd love to hear where it breaks: open an issue, or leave a comment here.
I built jobhunt with Claude Code, and drafted this post with Claude's help.

Top comments (0)