The job-search agent started as a very practical annoyance: I did not want to keep checking the same company career pages by hand. The important part was not scraping the whole internet. It was finding official postings, scoring them consistently, and leaving a record I could trust later.
The system is built around a few boring artifacts: configured company sites, direct ATS pulls, a canonical tracker, run logs, and a daily pipeline. Workday, Greenhouse, Lever, Avature, iCIMS/Jibe, Oracle Cloud Candidate Experience, and JSearch can all feed the scan, but the point is still simple: get roles into one pipeline and decide what deserves attention.
The constraint is that job data is messy. Company pages move. ATS links change. Search results find duplicates. A role can look interesting until the actual posting says something different. I do not want an agent auto-applying to anything, so the system is intentionally built around review, PASS/BORDERLINE/FAIL filtering, and official links only for actionable roles.
The useful shape is: pull the configured companies, filter and score the roles, write new PASS or BORDERLINE items into a tracker, optionally cap FAIL roles as Review, post a digest to Discord, and keep a JSON runlog. That means I can audit what happened instead of trusting whatever the agent said in a chat window.
The thing I like about this project is that it treats the agent like an operator with a runbook. There is a preflight, deterministic company pulls, dry-run mode, side-effect flags, unit tests, and a cron-safe wrapper. The agent can help, but the pipeline still needs rails.
Notes for next time: the hard part is not writing another scraper. It is keeping the inputs official, the state durable, and the side effects boring. No auto-apply. No mystery state. If it finds something useful, it should leave enough evidence that I can decide what to do next.