An intelligent multi-agent system that automates job application tailoring by analyzing job descriptions, rewriting resumes to match requirements, compiling LaTeX documents with quality verification, and generating personalized cover letters.
Build a super tool that reliably produces job interviews. This means:
- Truthful, grounded output (zero hallucination) with explicit provenance.
- Speed (minutes, not hours) with strong ATS alignment.
- High signal outreach that gets decision-makers to respond.
- Continuous learning from outcomes to improve the next attempt.
JOBA uses LangGraph to orchestrate a workflow of specialized agents that:
- Extract & Analyze job descriptions from URLs or manual input
- Tailor Resumes by selecting relevant content and rewriting for ATS optimization
- Compile LaTeX to PDF with automated quality verification loops
- Generate Cover Letters with modern professional tone
- Track Applications via CSV logging for outcome analysis
JOBA evolves from a resume generator into a full-stack job interview engine:
- Personal Knowledge Graph: Every claim is a structured, verified fact with evidence.
- No-hallucination Resume Compiler: Every bullet maps to evidence; if missing, it blocks.
- Recruiter + Hiring Manager Sourcing: Build a decision-maker map using public signals.
- Multi-channel Outreach: Personalized sequences (email, LinkedIn, referrals) with timing.
- Opportunity Scoring: Predict which roles are realistic for interviews based on fit.
- Portfolio Builder: Auto-generate tailored project pages and one-page case studies.
- Interview Readiness: Role-specific briefing packs, mock interviews, and Q/A drills.
- Offer Strategy: Negotiation briefs and market benchmarking.
- Truthfulness: Never claim skills or experience without evidence.
- Compliance: Avoid scraping or automation that violates terms of service.
- Quality over spam: Fewer, higher-quality outreach paths, not mass blasting.
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ JD Extractor │ → │ Resume Tailor │ → │ LaTeX Compiler │ → │ Cover Letter │
│ Agent │ │ Agent │ │ Agent │ │ Agent │
└─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │ │
▼ ▼ ▼ ▼
Structured JD Tailored Resume PDF + LaTeX Cover Letter (PDF/TXT)
(JSON) (JSON + TEX) (Verified)
| Component | Choice |
|---|---|
| Agent Framework | LangGraph (LangChain) |
| JD Scraping | BeautifulSoup (simple) + Chrome DevTools MCP (JS-heavy) |
| LaTeX Engine | XeLaTeX (Docker: texlive/texlive:latest-full) |
| Templates | Jinja2 |
| Backend | FastAPI (planned) |
| Frontend | Streamlit (planned) |
joba/
├── README.md # This file
├── workspace/ # Working docs, templates, reference materials
│ └── CLAUDE.md # Project goals and context for AI
├── research/ # Research findings (2,512 lines across 4 files)
│ ├── resume-best-practices.md
│ ├── jd-extraction-methods.md
│ ├── latex-compilation-strategy.md
│ └── agent-framework-comparison.md
├── agents/ # Agent implementations
│ ├── jd_extractor.py
│ ├── resume_tailor.py
│ ├── latex_compiler.py
│ └── cover_letter.py
├── config/ # Configuration files
│ ├── user_profile.yaml
│ └── workflow_config.yaml
├── content/ # User content (resume, projects, portfolio)
│ └── resume/
├── data/ # Application tracking and logs
│ └── applications.csv
├── logs/ # Execution logs
├── output/ # Generated resumes and cover letters
├── src/ # Shared utilities and workflow
│ └── workflow.py
└── tests/ # Unit and integration tests
- ✅ Research phase complete
- ⏳ Prototype CLI exists but lacks verification and performance constraints
- ⏳ Agent development pending
Phase 1: Verified content core
- Build a structured resume knowledge base with evidence links
- Enforce provenance for every output bullet
- Add a verifier model to block hallucinations
Phase 2: Resume reliability + speed
- Replace regex edits with structured rendering
- Add caching and parallelization
- Enforce page length and ATS constraints
Phase 3: Outreach and outcomes
- Recruiter/hiring manager graph
- Multi-channel outreach sequencing
- Outcome tracking and continuous optimization
- Python 3.11+
- Docker (for LaTeX compilation)
- Anthropic API key (or OpenAI/Gemini)
# Clone repository
git clone <repo-url>
cd joba
# Create virtual environment
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install dependencies
pip install -e .- Copy
config/user_profile.yaml.exampletoconfig/user_profile.yaml - Fill in your personal information, career narrative, and content sources
- Set
ANTHROPIC_API_KEYenvironment variable
# Submit job URL for processing
python -m joba submit --url "https://company.com/job-posting"
# Check application status
python -m joba status --id <application-id>
# Download generated materials
python -m joba download --id <application-id>- Format: Single-column chronological for ATS compatibility
- Structure: Action Verb + Scale + Measurable Result
- Keywords: Prioritize hard skills (76.4% filter rate), job titles, certifications
- Simple Sites: BeautifulSoup for static HTML parsing
- JS-Heavy Sites: Chrome DevTools Protocol via MCP (testing/uc)
- Fallback: Manual input + LLM structured extraction
- Limitation: LinkedIn/Indeed blocked by Cloudflare (manual input required)
- Engine: XeLaTeX for Unicode and modern font support
- Templates: Jinja2 with custom
latex_escape()filter - Runtime: Docker
texlive/texlive:latest-fullfor consistency
MIT
This is a personal automation tool. Contributions welcome via pull requests.
Note: This system is designed for personal job application automation. Use responsibly and in accordance with job board terms of service.