job-apply-kit
v0.1.2
Published
Claude Code workspace that searches for jobs, fills applications in a real browser, and submits only after you approve from Discord or WhatsApp.
Maintainers
Readme
job-apply-kit
A Claude Code workspace that finds jobs, fills applications
in a real browser you're signed into, and submits only after you approve - from your phone
over Discord, Telegram or WhatsApp, or by typing SUBMIT <CODE> in the terminal.
npx github:grapedjuice/job-apply-kit setupOr install it once and run job-apply-kit from anywhere:
npm install -g github:grapedjuice/job-apply-kit
job-apply-kit setupBuilt on ai-job-search (MIT) - its profile interview, fit evaluation, CV/cover-letter tailoring, and job-portal CLIs are all included.
What you get
| | |
|---|---|
| Search | /scrape runs job-portal CLIs (LinkedIn, Simplify internships/new-grad, and more); /browse searches Handshake, LinkedIn, Indeed, Simplify and company career sites in your signed-in browser. Results are deduplicated and ranked against your profile. |
| Tailor | Fit evaluation first, then a targeted résumé (LaTeX) and optional cover letter, verified against your real profile - nothing invented. |
| Apply | /submit <url> fills the form in a dedicated Chrome profile: uploads, dropdowns, Workday/iCIMS/Oracle/Greenhouse/Ashby quirks, account creation (passwords are sent to you). |
| Approve | Every application becomes a review sheet with a one-time code. Nothing is sent until you approve that exact sheet. The gate re-checks the live page against what you approved before clicking. |
| Phone | Discord or Telegram bot (Submit / Change / Skip buttons, résumé picture), or WhatsApp in your own "Message yourself" chat (reply SUBMIT <CODE>). All free. Send queue any time for a status overview. |
Requirements
- Node.js 18+, Python 3.10+, Google Chrome
- Claude Code (
npm install -g @anthropic-ai/claude-code) - Optional: bun for the portal CLIs, a LaTeX distribution (MiKTeX / MacTeX / TeX Live) for résumés
Setup
job-apply-kit setup walks you through:
- Prerequisite checks
- Creating your workspace folder (a private git repo - it will hold your profile)
- Installing the Python packages and the browser driver
- Choosing an approval channel (Discord, Telegram, WhatsApp, or terminal only)
- Signing in to job sites in the dedicated browser
Then:
cd job-search
claude # always start Claude Code inside the workspace - safety hooks load from here
/setup # guided interview that builds your profile from your résumé / LinkedIn
/scrape # or /browse - find jobs
/submit <url> # fill an application and send it to you for approvalKeep the approval bot running in a second terminal: job-apply-kit bot.
Discord
Create an application at https://discord.com/developers/applications, add a bot, enable
Message Content Intent, turn off Public Bot, and install it to your account
(User Install). Setup stores the token in .env and pairs the bot to you with /pair -
only your account can approve anything.
Telegram
Message @BotFather, send /newbot, and paste the token into setup.
Setup shows a one-time link; open it and tap Start to pair - only your account can approve.
Free, official, unlimited; no server needed.
WhatsApp (linked device)
Setup links job-apply-kit to your WhatsApp like WhatsApp Web (scan a QR code). Reviews arrive in
your own Message yourself chat, marked 🤖, with the résumé picture. Free and unlimited, no
second number or server. It is unofficial (WhatsApp Web protocol via Baileys): it only ever
messages you, but WhatsApp may restrict accounts that automate messaging - use Discord or
Telegram if that worries you. The session lives in .job-apply-kit/wa-auth (gitignored, and
the agent is blocked from touching it).
Replies (any channel)
| Reply | Effect |
|---|---|
| SUBMIT ABC123 (or the Submit button) | approve and send that application |
| CHANGE ABC123 use my school email | nothing is sent; Claude fixes it and posts a new code |
| SKIP ABC123 | drop it |
| queue | pipeline status |
| anything else (text, photos, files) | passed to Claude |
Safety model
- The agent drives the browser only through
tools/jobs_browser.py, which refuses submit-like clicks, Enter on filled forms, raw input events and scripted submits. - Sends happen only through
tools/submit_gate.py, which needs an approval for the exact manifest hash (fields + attachments), re-reads the live page, and records the result. - Claude Code hooks block the agent from creating approvals itself, scripting around the tools, editing the gate / bots / hooks, or touching channel credentials and the WhatsApp session.
- The agent never solves captchas, never invents answers (it asks you), and never fills the same application twice.
- Your profile, answers, accounts, browser profile and
.envstay in your workspace and are gitignored. Keep the workspace repo private.
Commands
job-apply-kit setup [dir] create + configure a workspace
job-apply-kit bot run the approval bot
job-apply-kit browser [url] open the signed-in job browser
job-apply-kit channel switch Discord / Telegram / WhatsApp / terminal
job-apply-kit doctor check everythingResponsible use
Applying is still you applying: review every sheet, follow each site's terms of use, and keep search volume at a human pace. You are responsible for what you submit.
License
MIT - see LICENSE.
