Skip to content

About

Claude Code plugin: end-to-end job application agent. Scrape JDs, tailor resume, apply (Playwright ATS + LinkedIn Easy Apply), CSV report

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

ai_agent_apply

A Claude Code plugin that applies to jobs for you.

Give it job URLs. It scrapes each posting, drops the ones you can't honestly apply to, tailors your LaTeX resume per job, has a recruiter subagent review it, compiles the PDF, fills the form, submits, and hands you a CSV of what happened.

It will not solve CAPTCHAs, create accounts, enter passwords, or lie on your behalf. Those jobs come back to you with the tab open.

Install

/plugin marketplace add ashimsharma10/ai_agent_apply
/plugin install ai_agent_apply@ai-agent-apply

Needs Python 3.10+, pip install -r requirements.txt, playwright install chromium, pdflatex, and Node (npx). Playwright MCP starts automatically as part of the plugin.

First run

Just ask. The skill creates user_profile/, copies templates in, and stops so you can fill them:

/ai_agent_apply set me up

Then fill user_profile/profile.json (contact info, work authorization, EEO answers), edit user_profile/tailor_prompt.txt (your resume rules), and drop your base resume in as a .tex.

Several resumes for different role types? Put them in subfolders and the skill picks per job:

user_profile/resume/data_scientist/base.tex
user_profile/resume/ai_engineer/base.tex

Everything in user_profile/, JD/, and output/ is gitignored. Your data never leaves your machine.

Ask your agent

Copy any of these.

Apply to a list of jobs, end to end:

/ai_agent_apply apply to these jobs:
https://job-boards.greenhouse.io/acme/jobs/123456
https://jobs.lever.co/acme/abcd-efgh
https://jobs.ashbyhq.com/acme/uuid-here

Apply from a CSV (columns index,url — the index becomes the output folder number):

/ai_agent_apply fill everything in jobs.csv

Fill everything but stop before submitting, so you can check each one:

/ai_agent_apply apply to the jobs in jobs.csv, but review only — don't submit

Just make tailored resumes, don't touch any forms:

/ai_agent_tailor_resume tailor my resume for the jobs in jobs.csv

Redo one job's resume:

/ai_agent_tailor_resume redo job 14, use Palo Alto CA as my address, and rewrite the summary

What you get back

output/2026-07-22/
  5_acme_machine_learning_engineer/
    jane_doe_resume.pdf        ← uploaded to this job
    jane_doe_resume.tex        ← source, so you can edit and recompile
  8_globex_data_analyst/
  application_log.md           ← per-job narrative, survives interruption
  apply_report_2026-07-22.csv

Folder numbers come from your input CSV, gaps and all — skip job 23 as a duplicate and the next folder is still 24_.

The CSV:

Date Position Company Resume Tailored? Status Reviewed?
2026-07-22 Machine Learning Engineer Acme yes SUBMITTED yes
2026-07-22 Data Analyst Globex yes MANUAL yes

Statuses: SUBMITTED (confirmation verified) · READY-FOR-REVIEW (filled, waiting for you) · MANUAL (CAPTCHA, account wall, or a question only you can answer — tab left open) · DISCARDED (with the quoted knockout sentence) · FAILED-SCRAPE / FAILED-COMPILE.

Reviewed? is yes only when the recruiter subagent actually ran and its edits were applied. It defaults to no — a review that didn't happen never reports as if it did.

Application tracker

Every run records what you applied to in data/applications.jsonl (gitignored), and the pipeline warns you before tailoring if you're about to re-apply to the same posting, role, or company. Seed it once from past runs with python -m scripts.backfill_tracker. Inspect anytime:

python scripts/tracker.py stats
python scripts/tracker.py list --status applied
python scripts/tracker.py check --url "<job-url>" --company "Acme" --role "Data Scientist"

Config

user_profile/config.json:

  • auto_submit — false by default: fills everything, stops before submit. End-to-end runs submit anyway unless you say "review only".
  • knockout.hard_knockout_phrases — postings requiring citizenship or clearance you don't have. Discarded, never applied to.
  • knockout.sponsorship_policy — how the visa question gets answered. Postings that state outright they won't sponsor are always skipped before tailoring, regardless of this setting.
  • save_user_overrides_to_profile — banks reusable screening answers ("notice period?") so they stay consistent. Never banks cover letters, EEO, or work-authorization attestations.

user_profile/tailor_prompt.txt holds your resume rules — years of experience to claim, how to frame past titles, which address to use for which state, skills to always keep.

Responsible use

This automates your applications with your data, and you're responsible for what goes out in your name. Read the tailored resumes — they're all saved with sources. Keep auto_submit off until you trust it. The knockout filter and recruiter-reviewer subagent exist so you send fewer, better applications.

License

MIT

About

Claude Code plugin: end-to-end job application agent. Scrape JDs, tailor resume, apply (Playwright ATS + LinkedIn Easy Apply), CSV report

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages