jobpilot-cli
v1.0.1
Published
AI-powered automated job hunter — scrapes 13+ platforms and auto-applies for remote jobs
Maintainers
Readme
Multi-Profile Job AI Agent
Node.js automation tool that scrapes remote job sources, scores jobs locally first, uses Gemini only for high-fit roles, queues review items, and can conservatively auto-apply to simple forms.
Site Adapters
Site settings live in config/sites.json. BruntWork remains enabled by default; new sites are opt-in so the existing MVP stays stable. The registry currently has working adapters for BruntWork, We Work Remotely, Remote OK, and Remotive, plus safe disabled scaffolds for Wellfound, Working Nomads, Remote.co, DailyRemote, Jobgether, Himalayas, and Jobspresso.
Each site supports:
enabledprioritymaxJobsPerRuncooldownMinutesautoApplyEnabled
You can also temporarily override enabled sites with ENABLED_SITES=bruntwork,remoteok.
Profiles
The engine is shared, but each profile has its own data, resume, prompt, queue, logs, browser session, and test artifacts.
profiles/tolu/: SEO, web development, Shopify, website admin, automation rolesprofiles/sister/: customer support, admin, CRM, virtual assistant roles
profiles/sister/resume.pdf is a placeholder. The system refuses auto-apply for Sister until that file is replaced and resumePlaceholder is removed or set to false in profiles/sister/preferences.json.
Each profile contains:
candidateProfile.jsonresume.pdfpreferences.jsonprocessedJobs.jsonreviewQueue.json
Setup
npm install
copy .env.example .envEdit .env and set GEMINI_API_KEY, Telegram values if needed, and APPLICANT_EMAIL only if AUTO_APPLY=true.
Run
node index.js --profile=tolu
node index.js --profile=sisterScheduler:
npm run scheduler:tolu
npm run scheduler:sisterPM2:
npm run pm2:start
npm run pm2:logsSafety Defaults
- Local matcher runs before every AI call.
- Gemini only runs when local score is
75+. - Final match score is 70% local match plus 30% AI verification, then ATS/application optimization is applied.
AUTO_APPLY=falseby default.TEST_MODE=truefills forms, generates artifacts, saves screenshots totest-results/{profile}/, and stops before submit.- CAPTCHA is never bypassed. If detected, automation notifies Telegram, waits for manual solving, then resumes or queues review.
- Global cross-profile dedupe lives in
data/globalProcessedJobs.json. - Set
ALLOW_DUPLICATE_JOBS=trueonly when you explicitly want both profiles to process the same job.
Outputs
- Review queue:
review/jobs.json - Per-profile processed jobs:
profiles/{profile}/processedJobs.json - Global dedupe:
data/globalProcessedJobs.json - Per-profile logs:
logs/{profile}.log - Test artifacts:
test-results/{profile}/ - Persistent browser sessions:
browser-profiles/{profile}/
