job-apply
Skill61 starsChanged 6 months agoMITView on GitHub
Apply to a job by URL — auto-routes to the right ATS filler (LinkedIn Easy Apply / Greenhouse / Lever / Jobvite / Ashby), dry-run by default, renders an emoji-tagged result table. Proactively invoke this skill (do NOT answer conversationally) when the user pastes a LinkedIn/Greenhouse/Lever/Jobvite/Ashby job URL (with or without the word "apply"), says "apply to this", "try this one", "fill the form", "run the filler", "can you apply for me", "submit this application", drops a job posting into chat, or invokes /job-apply.
We split this skill into the rules it gives an agent
4 rules. 0 are common, 2 are distinctive, and 2 are very specific to this project.
0
Common
Most of the 5 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 24
Check for package.json in the candidate path to confirm it's really the repo.
- Distinctive: line 42
If the URL doesn't match, print the table of supported hosts and stop.
- Very specific: line 49
If missing, tell the user to run bash wizard.sh (for LinkedIn) or point to their filled form config.
- Distinctive: line 69
All five fillers emit structured JSON on stdout.
“Common” is measured: kept by at least 6 in 10 of the 5 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Job Apply
Fills out a job application form on the 5 ATS platforms this repo supports. Default is dry-run — the form is filled but not submitted.
Repo location
Resolve the repo root in this order:
$AI_JOB_AGENT_ROOTenv var~/.claude/skills/ai-job-agent/(gstack-style install — recommended)~/.claude/skills/ai-job-agent/REPO_PATHfile (legacy, when repo is elsewhere)~/ai-job-agent/(legacy manual-clone fallback)
Check for package.json in the candidate path to confirm it's really the repo. Fail with a clear message if none exist.
Workflow
1. Parse $ARGUMENTS
Expect <URL> [--submit]. If no URL, ask the user for one.
2. Route by URL host
| Host pattern | Script |
linkedin.com/jobs/view/* | scripts/linkedin-easy-apply.js |
boards.greenhouse.io/* or job-boards.greenhouse.io/* | scripts/greenhouse-apply.js |
jobs.lever.co/* | scripts/lever-apply.js |
jobs.jobvite.com/* or *.jobs.jobvite.com/* | scripts/jobvite-apply.js |
jobs.ashbyhq.com/* or ashbyhq.com/* | scripts/ashby-apply.js |
If the URL doesn't match, print the table of supported hosts and stop.
3. Check config
For LinkedIn: config/linkedin-config.json must exist.
For the other four: the user provides a second argument pointing to their form config JSON (per-job, by convention).
If missing, tell the user to run bash wizard.sh (for LinkedIn) or point to their filled form config.
4. Run the filler
Dry-run by default:
cd "$AI_JOB_AGENT_ROOT"
node scripts/linkedin-easy-apply.js "$URL" config/linkedin-config.jsonWith --submit, set autoSubmit: true in the config temporarily (or instruct the user to — do not silently flip it without confirming). Prefer: ask the user to set it themselves if they haven't, to preserve the truthfulness guardrail baked into CLAUDE.md.
Environment variables to surface:
HEADLESS=0if the user wants to watch the browserKEEP_OPEN_ON_BLOCK=1if they want to inspect a stalled formCDP_URLif they want to connect to an already-open Chrome
5. Parse the script's JSON output
All five fillers emit structured JSON on stdout. Exit codes:
| Code | Meaning |
| 0 | Success (submitted, or ready in dry-run) |
| 1 | Crash / unexpected error |
| 2 | Blocked on unknown required field |
| 3 | CAPTCHA or submission timeout |
| 4 | Step limit exceeded (LinkedIn only) |
6. Render result table
Show the user a compact markdown table:
| Field | Value |
| Company | … |
| Role | … |
| Platform | LinkedIn / Greenhouse / Lever / Jobvite / Ashby |
| Result | ✅ submitted / ⏳ dry-run filled / 🚫 blocked / 🤖 captcha / 💥 crash |
| Exit code | 0 / 1 / 2 / 3 / 4 |
| URL | <url> |
Pick the single emoji that matches the exit code, don't list all four — one of ✅ ⏳ 🚫 🤖 💥 in the Result cell.
Then ask: "Log this to the tracker? (y/n)" — if yes, append a row to application-tracker.csv with the columns in templates/tracker.template.csv, then optionally kick off /job-track to sync.
Rules (from root CLAUDE.md)
- Truthfulness first — CAPTCHA stalls are logged as
blocked, neversubmitted. - Skip hard citizen/green-card gated roles unless the form provides a truthful path.
- Resume routing — software/AI roles use the software resume; EE/embedded roles use the EE resume. See
config/candidate-profile.mdfor the mapping.
Other versions7 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 7
- Hisn00w/ASu-skills★ 6.1ksame name
- neonwatty/job-apply-plugin★ 132same name
- rockbenben/ai-job-search-cn★ 41same name
- comedianhhh/job-agent-skills★ 2same name
- ajstars1/ai-job-apply★ 1same name
- suryakantk94/job-apply-skill★ 0same name
- uttej-reddy/claude-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository14 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- job-coachSkill
- job-cvSkill
- job-dashboardSkill
- job-evaluateSkill
- job-followupSkill
- job-interviewSkill
- job-outreachSkill
- job-patternsSkill
- job-recapSkill
- job-setupSkill
- job-statusSkill
- job-trackSkill
- job-triageSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

