Installation¶
What you need¶
| Component | Needed for | Notes |
|---|---|---|
Python 3.11+ and pip |
everything | 3.11 and 3.13 are tested in CI on Linux and Windows |
| Claude Code + a Claude subscription | fit scoring, resume tailoring, the profile learner | used headlessly (claude -p); no API key |
| Node.js 18+ | resume tailoring | builds the DOCX via the docx library |
| Google Chrome + the Claude in Chrome extension | the application filler | runs in your Chrome, with your sessions |
| An Adzuna key (free) | optional aggregator coverage | paste on the Settings page |
Finding and scoring by keyword works with Python alone.
Install¶
git clone https://github.com/vikaspalakurthi/jobscout.git
cd jobscout
pip install -r requirements.txt
python server.py
Open http://localhost:8765. The server listens on 127.0.0.1 and ::1 - on Windows,
localhost resolves to IPv6 first and a server bound to IPv4 only costs two seconds per
click (see Troubleshooting).
Windows
JobScout is developed on Windows 11 and tested on Windows in CI. PowerShell, Git Bash and the desktop Claude Code app all work; file paths in config are relative to the repo root.
Optional components¶
cd .claude/skills/tailor-resume
npm install
templates/resume/ into resume/ (see
Make it yours) and press Test under Resume tailoring on the
Settings page: it runs claude --version and a one-line claude -p round trip.
Needs the same claude binary and resume/skills-inventory.md. It is on by default and
scores gated new jobs after every refresh; switch it off on the Settings page if you do not
have a subscription yet.
Install the Claude in Chrome extension, open a Claude Code session with it connected, and
type /apply-queue. Nothing to configure in JobScout beyond resume/profile.yaml.
Running it as a service¶
JobScout is a single process (python server.py). The refresh schedule and fit scoring run
inside it, so keep it running (a terminal tab, a tmux window, a Windows scheduled task at
logon). There is no daemon mode and no OS-level scheduler; if the server is down at 06:00,
that run is skipped, not run late.