AutoJob-Agent is a modular, config-driven job-search automation pipeline:
- V1 Producer: fetches job postings from multiple ATS sources and maintains a single source of truth.
- V2 Feeder/Scoring: applies hard gates + semantic matching to triage jobs and outputs Apply/Maybe/Skip lists.
- V3 Local Agent (Ollama): generates human-readable Markdown job cards locally (not run in GitHub Actions).
This repo is designed so that V1 + V2 can run reliably in GitHub Actions, while V3 is intentionally local-only.
scripts/ # V1 Producer scripts (fetch + status updates)
config/targets.json # V1 targets and filters
data/ # V1 outputs: jobs.json, state.json, today/backlog, archive/
v2/ # V2 scoring + triage
config/ # scoring.yaml, profile.md (input for V3 too)
scripts/ # score_jobs_v2.py, triage_v2.py
data/ # scored_jobs.json, emb_cache.json (optional)
output/ # candidates.json, apply.md, maybe.md, skip.md
v3/ # V3 local-only job cards (Ollama)
agent/ # run_ollama_agent.py + prompt/template
cards-samples/ # curated sample cards committed for demo
cards/ # generated cards (typically local output; often gitignored)
config/targets.json(companies + ATS settings + filters)
data/jobs.jsondata/state.json- additional reports:
data/jobs.mddata/jobs_today.json / .mddata/jobs_backlog.json / .mddata/archive/
python scripts/fetch_jobs.pydata/state.json stores job_uid -> status.
Jobs with status in applied / ignored / closed are hidden globally at the V1 output layer, so they will not reappear in V2 and won’t be repeatedly pushed.
data/jobs.json
v2/data/scored_jobs.jsonv2/output/candidates.json(Top-N candidates for downstream use)v2/output/apply.mdv2/output/maybe.mdv2/output/skip.md(skip must include reasons)
python v2/scripts/score_jobs_v2.py --config v2/config/scoring.yaml
python v2/scripts/triage_v2.py --config v2/config/scoring.yaml- Hard gate rules (must-pass constraints)
- Semantic match using sentence-transformers
all-MiniLM-L6-v2cosine similarity - Optional embedding cache for repeat runs
V3 requires local Ollama installed.
V3 runs locally only; not in GitHub Actions.
V3 reads the top candidates and generates a Markdown “Job Card” for each candidate, including match points, risks, skill gaps, resume-tailoring suggestions, and interview prep notes. The output is constrained to evidence from:
v2/output/candidates.jsonv2/config/profile.md
Install Ollama on your machine, then pull a small model that fits your available RAM. Example:
ollama pull qwen2.5:3bpython v3/agent/run_ollama_agent.py --model qwen2.5:3bLimit generation (recommended for speed):
python v3/agent/run_ollama_agent.py --model qwen2.5:3b --limit 20v2/output/candidates.jsonv2/config/profile.md
v3/cards/<job_uid>.md(generated cards)v3/cards-samples/contains a few curated sample cards committed for demonstration.
GitHub Actions is configured to run V1 + V2 on the default branch and push updated outputs back to the repo.
V3 is excluded by design because it depends on local Ollama and is intended for local use only.
Recommended:
- Python 3.11 + virtual environment (
.venv)
Typical workflow:
- Run V1 fetch (or let Actions run it)
- Run V2 scoring + triage
- Optionally run V3 locally to generate cards for top candidates
v3/agent/.cache/stores local incremental indexes/logs and should not be committed.v3/cards/is usually treated as local output (can be committed once for demo, but not recommended for frequent updates).v3/cards-samples/is intended for curated examples.