{"slug": "ai-job-scout-and-rate-matcher", "title": "AI Job Scout and Rate Matcher", "summary": "Deviad's job-hunter repository provides a complete job-search pipeline for the Pi Agent, enabling search, scoring, salary enrichment, and assisted applications via Node.js scripts and Docker services. The tool requires Node.js ≥ 22, uv ≥ 0.4, and a Chromium CDP session, with optional SearXNG, LM Studio, and MCP servers, and it emphasizes local data privacy by keeping all job-search data and credentials on the user's machine.", "body_md": "Complete job-search pipeline for [Pi Agent](https://github.com/earendil-works/pi) — search, score, salary enrichment, and assisted applications.\n\n| Layer | Requirement | Stage |\n|---|---|---|\n| Runtime | Node.js ≥ 22, `uv` ≥ 0.4 |\nInstall |\n| Code | `npm ci` in repo root |\nInstall |\n| Workspace | `$JOBHUNTER_HOME` (default `~/.job-hunter` ) with `jobhunter.sqlite` , `CV.docx` , `personal-info-cache.json` |\nInit |\n| Browser | Chromium CDP on `127.0.0.1:9225` (Selenium container) |\nSearch, Apply |\n| Search | SearXNG on `127.0.0.1:8888` |\nDiscover |\n| Vision (optional) | LM Studio on `127.0.0.1:1234` with Qwen VLM |\nCAPTCHA, Debug |\n| MCP (optional) | Obscura, Apple Mail MCP servers | Browse, Outreach |\n\nHost tools (`docker`\n\n, `sqlite3`\n\n, `python3`\n\n) must be installed and on `PATH`\n\n— the doctor (`jh-doctor`\n\n) diagnoses which are missing but does not install them.\n\n```\ngit clone https://github.com/Deviad/job-hunter.git && cd job-hunter\nnpm ci\nnode scripts/install.mjs          # copies skills into ${PI_AGENT_HOME:-~/.pi/agent}/skills/\nnode scripts/install.mjs --dry-run  # preview without writing\n```\n\nRe-run is idempotent and never overwrites `CV.docx`\n\n, `personal-info-cache.json`\n\n, or `jobhunter.sqlite`\n\n.\n\n```\nnode ~/.pi/agent/skills/job-hunter/scripts/jh-init.mjs\n```\n\nBefore applying, populate `~/.job-hunter/CV.docx`\n\nand the `profile.firstName`\n\n, `profile.lastName`\n\n, `profile.email`\n\n, and `profile.phone`\n\nfields in `~/.job-hunter/personal-info-cache.json`\n\n. Application helpers fail closed when required identity fields are absent; the repository contains no maintainer identity defaults.\n\nRun the doctor before each search or application session. It distinguishes required failures from optional degraded capabilities.\n\n```\nnode ~/.pi/agent/skills/job-hunter/scripts/jh-doctor.mjs\n```\n\nStart Selenium and SearXNG:\n\n``` js\nexport SEARXNG_SECRET=\"$(node -e \"process.stdout.write(require('node:crypto').randomBytes(32).toString('hex'))\")\"\ndocker compose up -d\nbash scripts/rehearse-compose.sh    # isolated health-check rehearsal with teardown\n```\n\nSee `docs/prerequisites.md`\n\nfor full host-tool list and `docs/security-and-privacy.md`\n\nfor security boundaries.\n\n```\nnode ~/.pi/agent/skills/job-hunter/scripts/jh-search.mjs --source linkedin --country GB --role \"Software Engineer\"\nnode ~/.pi/agent/skills/job-hunter/scripts/jh-search.mjs --source indeed --country GB --query \"Software Engineer\"\nnode ~/.pi/agent/skills/job-hunter/scripts/jh-discover.mjs --locations \"United Kingdom\" --queries \"Software Engineer\"\n```\n\nAsk Pi to score the saved jobs. The `job-match-scorer`\n\nskill reads the user's CV and workspace profile rather than repository defaults.\n\n```\nnode ~/.pi/agent/skills/salary-calculator/scripts/enrich-job-salary.mjs --db ~/.job-hunter/jobhunter.sqlite --all-unsalaried\n```\n\nAsk Pi to apply to a scored job. The `auto-job-application`\n\nskill uses the user's local CV, cache, and authenticated Chromium session; there is no repository-level submit command.\n\n```\nnode ~/.pi/agent/skills/job-hunter/scripts/jh-status.mjs\nnode ~/.pi/agent/skills/job-hunter/scripts/jh-backup.mjs\ngit pull && npm ci && node scripts/install.mjs\nnode scripts/install.mjs --uninstall\n```\n\nRemoves only files recorded in the installation manifest. User data (`CV.docx`\n\n, DB, cache) is untouched.\n\n```\nnode ~/.pi/agent/skills/job-hunter/scripts/jh-doctor.mjs    # full diagnostic\n```\n\nCommon issues:\n\n**CDP not reachable**: ensure`docker compose up -d`\n\nran and`curl -s http://127.0.0.1:9225/json/version`\n\nreturns JSON.**SearXNG 502**: SearXNG needs a few seconds after container start; retry after 5s.** better-sqlite3 build failure**: ensure`python3`\n\nand a C compiler (Xcode CLT on macOS) are installed.**MCP \"Not connected\"**: run the repair skill or`bash scripts/rehearse-compose.sh`\n\nto verify transport.\n\n- All job-search data, credentials, and browser sessions stay on your machine.\n- The installer never reads or transmits personal files.\n- Authenticated browser sessions (LinkedIn, Indeed) belong to you — this project does not bypass MFA, or site access controls.\n- See\n`docs/security-and-privacy.md`\n\nfor the full policy.\n\nMIT — see `LICENSE`\n\n.", "url": "https://wpnews.pro/news/ai-job-scout-and-rate-matcher", "canonical_source": "https://github.com/Deviad/job-hunter", "published_at": "2026-08-31 22:02:47+00:00", "updated_at": "2026-08-31 22:22:10.933461+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools"], "entities": ["Deviad", "Pi Agent", "Node.js", "SearXNG", "LM Studio", "Chromium", "Selenium", "Apple Mail"], "alternates": {"html": "https://wpnews.pro/news/ai-job-scout-and-rate-matcher", "markdown": "https://wpnews.pro/news/ai-job-scout-and-rate-matcher.md", "text": "https://wpnews.pro/news/ai-job-scout-and-rate-matcher.txt", "jsonld": "https://wpnews.pro/news/ai-job-scout-and-rate-matcher.jsonld"}}