<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Naod Ararsa</title>
    <description>The latest articles on DEV Community by Naod Ararsa (@deadstar).</description>
    <link>https://dev.to/deadstar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1360104%2F3bdddac8-1df5-4710-9c3f-bdc999aa2b6f.jpg</url>
      <title>DEV Community: Naod Ararsa</title>
      <link>https://dev.to/deadstar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/deadstar"/>
    <language>en</language>
    <item>
      <title>I built a Claude Code workflow that finds jobs, tailors my CV and fills the forms</title>
      <dc:creator>Naod Ararsa</dc:creator>
      <pubDate>Sun, 18 Oct 2026 08:40:31 +0000</pubDate>
      <link>https://dev.to/deadstar/i-built-a-claude-code-workflow-that-finds-jobs-tailors-my-cv-and-fills-the-forms-ghg</link>
      <guid>https://dev.to/deadstar/i-built-a-claude-code-workflow-that-finds-jobs-tailors-my-cv-and-fills-the-forms-ghg</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;That is why I built Handoff.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frmpnk4suixe1ca3ctve8.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frmpnk4suixe1ca3ctve8.gif" alt="Handoff demo: tasks waiting, an email draft, a CV with its score, a gap and a reply" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Everything in these screenshots is made-up demo data: a fictional person and fictional companies.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The one rule
&lt;/h2&gt;

&lt;p&gt;The assistant can &lt;strong&gt;draft, fill and record&lt;/strong&gt;. It cannot &lt;strong&gt;send, submit, create accounts, type passwords or read my vault&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it fits together
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Code --(MCP, stdio)--&amp;gt; Handoff MCP server --&amp;gt; SQLite database (on your computer)
     |                                                      ^
     +--&amp;gt; Playwright MCP --&amp;gt; shared Chromium                |
                                                            |
Dashboard (127.0.0.1) &amp;lt;-- HTTP server ----------------------+
     +-- Vault (encrypted: mail login, site passwords)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code&lt;/strong&gt; runs the slash commands.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The MCP server&lt;/strong&gt; gives the assistant a fixed set of tools. None of them can send, submit or read secrets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQLite&lt;/strong&gt; holds your facts, jobs, drafts and history in one file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The dashboard&lt;/strong&gt; is where you review, edit, send and submit. It listens only on &lt;code&gt;127.0.0.1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A shared browser&lt;/strong&gt; lets the assistant fill forms in a real window you can watch and take over.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What it does, step by step
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. You write your facts once.&lt;/strong&gt;&lt;br&gt;
You enter your jobs, projects, education, skills and true statements about your work. Everything the assistant writes comes only from these.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. It finds jobs.&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;/discover&lt;/code&gt; 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, &lt;code&gt;/add &amp;lt;link&amp;gt;&lt;/code&gt; takes them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpw9jvwqhhdmrhrr871up.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpw9jvwqhhdmrhrr871up.png" alt="The pipeline, ranked" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. It tailors your CV and cover letter.&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;/tailor&lt;/code&gt; builds a CV PDF and &lt;code&gt;/cover&lt;/code&gt; 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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1r9swl0n77ngxr8jfhjr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1r9swl0n77ngxr8jfhjr.png" alt="A CV with its ATS-style score" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If a job asks for a skill you don't have, it shows up as a &lt;strong&gt;gap&lt;/strong&gt;. 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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flg4u6o2ioha43szm1da3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flg4u6o2ioha43szm1da3.png" alt="Gaps become cards" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. It applies, up to the last click.&lt;/strong&gt;&lt;br&gt;
For email, &lt;code&gt;/email&lt;/code&gt; finds a contact address that really appears on the company's page, checks the domain takes mail and drafts the message. For forms, &lt;code&gt;/apply&lt;/code&gt; fills the application in a real browser and leaves the tab open.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. You review and press the button.&lt;/strong&gt;&lt;br&gt;
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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F20g8eqc2yvatdjleoqt8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F20g8eqc2yvatdjleoqt8.png" alt="Everything waiting for you, in one place" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. It follows up.&lt;/strong&gt;&lt;br&gt;
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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjm20kkpwrp6yvlqfwwbt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjm20kkpwrp6yvlqfwwbt.png" alt="Replies, matched to your applications" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to skip the middle, &lt;code&gt;/go &amp;lt;id&amp;gt;&lt;/code&gt; takes one job as far as it can and then stops for you.&lt;/p&gt;
&lt;h2&gt;
  
  
  It gets better as you use it
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;
  
  
  It all stays on your machine
&lt;/h2&gt;

&lt;p&gt;One SQLite file, a dashboard on &lt;code&gt;127.0.0.1&lt;/code&gt; and an encrypted vault for your mail login. Nothing is sent to a Handoff server, because there isn't one.&lt;/p&gt;
&lt;h2&gt;
  
  
  Set it up
&lt;/h2&gt;

&lt;p&gt;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.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/DeazStar/handoff
&lt;span class="nb"&gt;cd &lt;/span&gt;handoff
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run build
&lt;span class="nb"&gt;cp&lt;/span&gt; .mcp.json.example .mcp.json         &lt;span class="c"&gt;# tells Claude Code where the tools are&lt;/span&gt;
npx playwright &lt;span class="nb"&gt;install &lt;/span&gt;chromium        &lt;span class="c"&gt;# once, for form filling&lt;/span&gt;
npm start &lt;span class="nt"&gt;-w&lt;/span&gt; @jobhunt/server           &lt;span class="c"&gt;# prints a dashboard link&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the dashboard link it prints. It contains a private token.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Settings&lt;/strong&gt;, fill in &lt;em&gt;About you&lt;/em&gt; and &lt;em&gt;What you are looking for&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;CV&lt;/strong&gt; and &lt;strong&gt;Facts&lt;/strong&gt;, enter your jobs, projects, education and skills, and the true statements about your work.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Vault&lt;/strong&gt;, create a passphrase. Save a Gmail app password if you want email.&lt;/li&gt;
&lt;li&gt;Open Claude Code in the Handoff folder and try:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/add https://example.com/jobs/123 go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then look at &lt;strong&gt;Needs you&lt;/strong&gt; in the dashboard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want to look around first?&lt;/strong&gt; There is a made-up demo job hunt that needs none of your own data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;JOBHUNT_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/tmp/handoff-demo npm run demo:data
&lt;span class="nv"&gt;JOBHUNT_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/tmp/handoff-demo &lt;span class="nv"&gt;JOBHUNT_NO_BROWSER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;JOBHUNT_NO_DRAFTER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 npm start &lt;span class="nt"&gt;-w&lt;/span&gt; @jobhunt/server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The demo refuses to run if the folder already has a profile, so it can never mix with real data.&lt;/p&gt;

&lt;h2&gt;
  
  
  The commands
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/discover&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Search for jobs that fit your settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/add &amp;lt;link&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Add job links you already have&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/tailor &amp;lt;id&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Build a tailored CV&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/cover &amp;lt;id&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Write a cover letter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/email &amp;lt;id&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Find a contact and draft the email&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/apply &amp;lt;id&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fill an application form (never submits)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/go &amp;lt;id&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Take one job as far as it can, then stop for your review&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Honest limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;It is a pre-release and tuned for developer jobs. The CV rules and writing examples are written for software roles.&lt;/li&gt;
&lt;li&gt;I built it on macOS. Linux should mostly work, and Windows is untested.&lt;/li&gt;
&lt;li&gt;Form filling depends on each site. Some pages still need a manual click.&lt;/li&gt;
&lt;li&gt;Matching replies to form applications is a suggestion for you to check, never automatic.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/DeazStar/handoff" rel="noopener noreferrer"&gt;github.com/DeazStar/handoff&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Guide:&lt;/strong&gt; &lt;a href="https://deazstar.github.io/handoff/apply-for-jobs-with-claude-code.html" rel="noopener noreferrer"&gt;How to apply for jobs with Claude Code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
