作者打造 Handoff 開源求職工作流,讓 Claude Code 搜尋職位、調整 CV 並填寫申請表
I built a Claude Code workflow that finds jobs, tailors my CV and fills the forms
作者開發開源求職工作流 Handoff,讓 Claude Code 搜尋職位、按用戶提供的事實調整 CV 和撰寫求職信,並在真實瀏覽器中填寫申請表。工作流會在寄出電郵或提交申請前停下,由用戶在 dashboard 審閲並自行操作;助手不能發送、提交、建立帳戶、輸入密碼或讀取 vault。
Job hunting is mostly the same chores on repeat. Find a posting. Check it is still open. Rewrite your CV for it. Write a cover letter. Hunt for an email address, or fight with an application form.
Claude Code can do almost all of that. It can read a posting, rewrite a CV, draft an email, and with a browser it can even fill in a form. It could, in principle, go the whole way: email the company, submit the application, sign up on a job site.
But language models are unpredictable. One might invent a number on your CV, pick the wrong contact or send something you would never have approved. Once an email is out you can't take it back, and it carries your name.
That is why I built Handoff.
Handoff does the tiring chores for you. It searches the sites you choose, opens each posting and checks it is still live. It tailors your CV and writes a cover letter from facts you wrote. It finds a contact address that really appears on the company's page, drafts the email and fills in the application form in a real browser. It reads your mailbox for replies and reminds you to follow up.
Then it stops right before anything that can't be undone. It is an open-source workflow where Claude Code does the work, and you press the final button.
Everything in these screenshots is made-up demo data: a fictional person and fictional companies.
The one rule
The assistant can draft, fill and record. It cannot send, submit, create accounts, type passwords or read my vault.
I did not leave that to a prompt that says "please don't". The assistant and the human use different interfaces. The assistant's tools simply have no way to send an email or press Submit. Those steps live in a dashboard that only I use. A database check also blocks any job state change that skips the rules.
How it fits together
Claude Code --(MCP, stdio)--> Handoff MCP server --> SQLite database (on your computer)
| ^
+--> Playwright MCP --> shared Chromium |
|
Dashboard (127.0.0.1) <-- HTTP server ----------------------+
+-- Vault (encrypted: mail login, site passwords)
- Claude Code runs the slash commands.
- The MCP server gives the assistant a fixed set of tools. None of them can send, submit or read secrets.
- SQLite holds your facts, jobs, drafts and history in one file.
-
The dashboard is where you review, edit, send and submit. It listens only on
127.0.0.1. - A shared browser lets the assistant fill forms in a real window you can watch and take over.
What it does, step by step
1. You write your facts once.
You enter your jobs, projects, education, skills and true statements about your work. Everything the assistant writes comes only from these.
2. It finds jobs.
/discover searches the sites you choose, opens each posting, checks it is still live and scores it against what you said you want. If you already have links, /add <link> takes them.
3. It tailors your CV and cover letter.
/tailor builds a CV PDF and /cover writes a letter. Every claim has to cite one of your facts, and every number has to match it. Each CV also gets an ATS-style score with the keywords it is missing.
If a job asks for a skill you don't have, it shows up as a gap. You can say what you really did, or have the assistant draft it from facts you already saved. Nothing is saved until you press a save button.
4. It applies, up to the last click.
For email, /email finds a contact address that really appears on the company's page, checks the domain takes mail and drafts the message. For forms, /apply fills the application in a real browser and leaves the tab open.
5. You review and press the button.
Everything that needs a person lands in one place. You edit the email and send it from the dashboard. You read the form and press Submit yourself.
6. It follows up.
The dashboard reads your mailbox (read-only), matches replies to your jobs and reminds you when to follow up. Possible matches are suggestions for you to check, and nothing moves by itself.
If you want to skip the middle, /go <id> takes one job as far as it can and then stops for you.
It gets better as you use it
Nothing is trained. But everything you teach it is kept in a local file and reused. Close a gap once and every later CV can use it. Answer a form question once and it is filled in next time. A bullet with no number becomes a card you answer once.
It all stays on your machine
One SQLite file, a dashboard on 127.0.0.1 and an encrypted vault for your mail login. Nothing is sent to a Handoff server, because there isn't one.
Set it up
You need Node.js 20 or newer, Claude Code signed in and a Chromium-based browser. A Gmail app password is optional, for sending email and reading replies.
git clone https://github.com/DeazStar/handoff
cd handoff
npm install
npm run build
cp .mcp.json.example .mcp.json # tells Claude Code where the tools are
npx playwright install chromium # once, for form filling
npm start -w @jobhunt/server # prints a dashboard link
Then:
- Open the dashboard link it prints. It contains a private token.
- In Settings, fill in About you and What you are looking for.
- In CV and Facts, enter your jobs, projects, education and skills, and the true statements about your work.
- In Vault, create a passphrase. Save a Gmail app password if you want email.
- Open Claude Code in the Handoff folder and try:
/add https://example.com/jobs/123 go
Then look at Needs you in the dashboard.
Want to look around first? There is a made-up demo job hunt that needs none of your own data:
JOBHUNT_HOME=/tmp/handoff-demo npm run demo:data
JOBHUNT_HOME=/tmp/handoff-demo JOBHUNT_NO_BROWSER=1 JOBHUNT_NO_DRAFTER=1 npm start -w @jobhunt/server
The demo refuses to run if the folder already has a profile, so it can never mix with real data.
The commands
| Type | What it does |
|---|---|
/discover |
Search for jobs that fit your settings |
/add <link> |
Add job links you already have |
/tailor <id> |
Build a tailored CV |
/cover <id> |
Write a cover letter |
/email <id> |
Find a contact and draft the email |
/apply <id> |
Fill an application form (never submits) |
/go <id> |
Take one job as far as it can, then stop for your review |
Honest limits
- It is a pre-release and tuned for developer jobs. The CV rules and writing examples are written for software roles.
- I built it on macOS. Linux should mostly work, and Windows is untested.
- Form filling depends on each site. Some pages still need a manual click.
- Matching replies to form applications is a suggestion for you to check, never automatic.
What's next
Making it work for any profession, with swappable packs for CV sections and writing examples, and an easier first-run setup. If you work outside software, I would love to hear what a good CV and message look like in your field.
Repo: github.com/DeazStar/handoff
Guide: How to apply for jobs with Claude Code
If you try it and something breaks, open an issue and tell me what you were trying to do. That is the most useful feedback I can get right now.
來源:DEV Community · dev.to





