Files
JobSourceAgent/README.md
2026-06-18 00:32:26 -04:00

2.0 KiB

AI Job Source Agent

For recently posted LinkedIn jobs, produces records of the form:

company_name, career_page_url, open_position_url

Runs in configurable batches, on a schedule, and is incremental — re-runs process only new jobs.

Setup

python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
playwright install chromium        # for the browser-agent tier
cp .env.example .env               # fill keys as available

Run

# one batch (no server required)
python -m jobsource.main --batch-size 20 --search "software engineer" --location "United States"

--search is repeatable. Run python -m jobsource.main --help for all options.

Scheduled run (Prefect)

# Boots a local Prefect server automatically, then serves the flow on an
# interval schedule (default: daily, set SCHEDULE_INTERVAL_SECONDS to change).
python -m jobsource.flow

If you already have a Prefect server running elsewhere, point the flow at it:

export PREFECT_API_URL=http://127.0.0.1:4200/api
python -m jobsource.flow

To trigger a run manually while the flow is being served:

prefect deployment run 'job-source-batch/job-source-batch'

Note — Prefect 3.7.4 + FastAPI ≥ 0.137 compatibility: Prefect's built-in ephemeral server is incompatible with FastAPI 0.137+ (route lists are cleared after inclusion but re-read lazily during routing). python -m jobsource.flow works around this by starting a persistent prefect server start process instead of the ephemeral server.

No-daemon cron fallback

If you prefer a plain cron job with no running process, add this line to your crontab (crontab -e), adjusting the path to your repo:

# daily at 06:00 — no Prefect daemon required
0 6 * * * cd /path/to/repo && ./.venv/bin/python -m jobsource.main --batch-size 50

Tests

pytest -q

Output

output/results.csv — three columns: company_name, career_page_url, open_position_url. Complete rows (status position_found) are sorted first.