How mani568347/morning-job-agent works
Morning Job Agent automates a daily job-search workflow: load saved searches and resume data, enforce the request budget, fetch listings, remove duplicates and stale postings, score and rank matches, draft letters for the best matches, and write a dated report. Its main internal layers are pipeline orchestration, Gemini-backed matching, and file-based configuration and state. The README documents scheduled GitHub Actions runs and commits; the sampled source does not include the workflow file, so those links reflect documented behavior rather than inspected workflow code.
Main entry points: pipeline.py Search pipeline · config.py Config and stores · scoring.py Scoring and letters · daily.yml Actions workflow
Components 18
Run orchestration
- Actions workflow
.github/workflows/daily.yml - Module entry point
src/morning_job_agent/__main__.py - Search pipeline
src/morning_job_agent/pipeline.py
Job matching
- Domain models
src/morning_job_agent/models.py - Resume parser
src/morning_job_agent/parse_resume.py - JSearch client
src/morning_job_agent/jsearch.py - Deduplication
src/morning_job_agent/dedupe.py - Scoring and letters
src/morning_job_agent/scoring.py - Report renderer
src/morning_job_agent/report.py
Files and reports
- Config and stores
src/morning_job_agent/config.py - Saved queries
config/queries.yaml - Resume profile
data/resume.json - Seen-job state
data/seen.json - Request counter
data/usage.json - Daily reports
reports
External services
- JSearch API
- Gemini models
Other components
- Daily scheduler
Connections 30
- Daily scheduler → Actions workflow: triggers
- Actions workflow → Module entry point: runs
- Module entry point → Search pipeline: calls
- Search pipeline → Config and stores: loads settings
- Config and stores → Saved queries: reads
- Config and stores → Resume profile: reads
- Config and stores → Seen-job state: reads
- Config and stores → Request counter: reads
- Search pipeline → JSearch client: fetches listings
- JSearch client → JSearch API: requests jobs
- JSearch API → JSearch client: returns listings
- Search pipeline → Deduplication: filters jobs
- Search pipeline → Scoring and letters: scores fresh jobs
- Resume profile → Scoring and letters: provides profile
- Scoring and letters → Gemini models: sends prompts
- Gemini models → Scoring and letters: returns results
- Scoring and letters → Search pipeline: returns shortlist
- Scoring and letters → Domain models: validates outputs
- JSearch client → Domain models: builds jobs
- Search pipeline → Report renderer: renders results
- Report renderer → Daily reports: writes report
- Search pipeline → Config and stores: records usage
- Config and stores → Request counter: writes counter
- Search pipeline → Config and stores: saves dedupe state
- Config and stores → Seen-job state: writes state
- Resume parser → Gemini models: extracts profile
- Resume parser → Resume profile: writes profile
- Actions workflow → Daily reports: commits reports
- Actions workflow → Seen-job state: commits state
- Actions workflow → Request counter: commits counter