How alumnx-ai-labs/langgraph-job-agent works
This repository is a deterministic LangGraph job-description intake workflow, exposed through both a Flask chat UI and a CLI. Recruiters submit a JD; the graph extracts required fields, pauses for missing information, checks duplicates, scores and may rewrite the description, then publishes, rejects duplicates, or escalates when a retry limit is reached. Gemini provides extraction, scoring, and rewriting; MongoDB stores and checks postings, while SQLite checkpoints support pause/resume. The README documents these stages and branches; the shown excerpts confirm key calls, though graph construction and several node bodies are only partially shown.
Main entry points: jd_intake_pipeline.py Quality scoring · app.py Flask chat · jobs_db.py Database access · index.html Chat frontend
Components 17
Recruiter interfaces
- Flask chat
app.py - Chat frontend
templates/index.html - CLI runner
jd_intake_pipeline.py
Intake workflow
- Workflow graph
jd_intake_pipeline.py - Field extraction
jd_intake_pipeline.py - Missing info
jd_intake_pipeline.py - Duplicate check
jd_intake_pipeline.py - Quality scoring
jd_intake_pipeline.py - JD rewriting
jd_intake_pipeline.py - Publish step
jd_intake_pipeline.py - Duplicate rejection
jd_intake_pipeline.py - Human escalation
jd_intake_pipeline.py
Persistence
- MongoDB jobs
- Database access
jobs_db.py - SQLite checkpoints
app.py
Other components
- Recruiter
- Gemini API
Connections 25
- Recruiter → Chat frontend: submits JD
README.md - Chat frontend → Flask chat: sends chat
README.md - Flask chat → Workflow graph: invokes or resumes
app.py - Recruiter → CLI runner: submits JD
README.md - CLI runner → Workflow graph: invokes or resumes
jd_intake_pipeline.py - Workflow graph → Field extraction: dispatches
README.md - Field extraction → Gemini API: invokes
jd_intake_pipeline.py - Field extraction → Missing info: routes if incomplete
jd_intake_pipeline.py - Field extraction → Duplicate check: routes if complete
jd_intake_pipeline.py - Missing info → Missing info: asks next field
README.md - Missing info → Duplicate check: routes when complete
jd_intake_pipeline.py - Missing info → Human escalation: routes at limit
jd_intake_pipeline.py - Duplicate check → Database access: looks up posting
jd_intake_pipeline.py - Database access → MongoDB jobs: queries or inserts
jobs_db.py - Duplicate check → Duplicate rejection: routes if found
README.md - Duplicate check → Quality scoring: routes if unique
README.md - Quality scoring → Gemini API: invokes
jd_intake_pipeline.py - Quality scoring → Publish step: routes at threshold
README.md - Quality scoring → JD rewriting: routes below threshold
README.md - JD rewriting → Gemini API: invokes
jd_intake_pipeline.py - JD rewriting → Quality scoring: returns for rescoring
README.md - Quality scoring → Human escalation: routes at revision cap
README.md - Publish step → Database access: writes posting
README.md - Flask chat → SQLite checkpoints: persists thread state
app.py - CLI runner → SQLite checkpoints: resumes saved thread
README.md