Orchestrating AI Agents for Job Searching

I got tired of all the manual processes involved with job searching and wrote a Claude Cowork plugin to automate the boring parts.

My typical search process looks like this:

  1. Find jobs on LinkedIn that seem to be a good fit for me, typically using LinkedIn's "Top Applicant" feature.
  2. Review the job description and verify that it meets my criteria for background fit, salary, location, etc.
  3. Look for the hiring manager or recruiter for that position. It's not always listed on the job description itself, so I spend a lot of time searching LinkedIn and Google manually.
  4. Tailor my resume to the job description.
  5. Fill out the application. Sometimes, this means writing a cover letter.
  6. Record a Loom video of myself to introduce myself to the recruiter and/or hiring manager.
  7. Email my resume and Loom video to the decision makers 

Working with my career coach (the excellent Alex Gould) I've automated bits and pieces of this process, but most of it is ripe for automation with LLMs.

Claude Cowork ships with some out-of-the-box plugins, but I wanted to make my own specifically tailored to job searching.

How I made the plugin

I used Claude to write more Claude. Anthropic dogfoods Claude extensively, which is how they made skills that power Cowork in the first place. I recently read a Hacker News comment with an appealing workflow, and I wanted to emulate that setup. I'm using a Mac instead of Linux, so my setup is more like:

Writing (and using!) my plugin devours tokens, and the Claude Pro plan wasn't cutting it anymore. I almost exclusively use the new Opus 4.6, which consumes more usage. The previous models, even the formerly-impressive Sonnet 4.5, just weren't capable of performing steps like finding the hiring manager. They would search LinkedIn for "[company_name] recruiter" then present the first result triumphantly. Opus 4.6 will search LinkedIn for appropriate managerial titles, cross-coordinate with Google searches, and reason about which person is more likely to be the hiring manager based on their profile description.

Next, I spun up a GitHub repo and told Claude to use Anthropic's as a template to create a job-search-coworker plugin. Then, I used Claude Code to orchestrate four different agents to work on four independent commands:

  • find-leads This will open LinkedIn in my browser and go through my Top Applicant positions and pull them in to a spreadsheet. 
  • customize-resume Given a job description, or link to one, it will take my master resume and tailor it to the job description. 
  • find-decision-makers Given a job description, it will find the recruiter and hiring manager for that position.
  • generate-loom-script With all the information above, it will help me write a quick script that I can use to record a video of myself introducing myself to the decision makers. 

While each agent was working on each command, I was able to bounce between them and iterate as they completed at different times. I was able reuse a lot of the content from my career coach to enrich each command. That information isn't free, otherwise I'd show my work! 

All of these commands coordinate their operations via a centralized Google Sheet. When using this plugin, each row is associated with a position where I can track my application status and prevent duplicate entries each time I run find-leads.

Usage

Running this involves loading Claude Cowork and firing off the find-leads command, reviewing the spreadsheet and pruning rows/positions I don't like, then firing off find-decision-makers followed by customize-resume and generate-loom-script.

For future improvements I've considered having it write the cover letters, fill out the application fields, and sending the emails. However, I hesitate with each of these features. For cover letters, I'm happy to have the LLM write a first draft, but I like writing (see: this site) and I want to keep my human touch there. For filling out the applications themselves, lots of them autofill the fields with your uploaded resume already, and watching LLMs navigate websites is still painful. For sending the emails, I still struggle mightily with allowing LLMs access to my email, especially since prompt injection is a risk that still isn't solved.

To be clear, this is still an involved process. I don't believe in the "spray-and-pray" approach to job hunting. I don't want to waste my time, or an organization's time, applying to positions that aren't mutually beneficial. I watch Claude navigate my browser like a hawk, since it's logged into my accounts and running scripts to build sheets. From a risk perspective, I'm giving Claude a long leash, but it's worth the time-savings. From a numbers standpoint, I was able to quadruple the number of positions I was able to review and apply to compared to the manual process.

Now that I'm done productively procrastinating, it's time to buckle down and start applying. But let me publish this post first...