metadata
title: Job Application Writer
emoji: π
colorFrom: blue
colorTo: purple
sdk: docker
app_port: 7860
pinned: false
python_version: 3.12.8
Job Application Writer Agent
An AI-powered agent workflow that generates tailored job application materials β cover letters, bullet-point summaries, and LinkedIn connection notes β using LangGraph, LangChain, and DSPy. The system performs automated company research, drafts content with self-consistency voting, applies AI critique, and supports human-in-the-loop feedback before finalizing output.
Live Demo: EasyApply | Hugging Face Space
Features
- Multi-format input β Accepts resumes in PDF, TXT, MD, and JSON; job descriptions via URL or Google Docs link
- Automated company research β Uses Tavily search with LLM-based relevance filtering to gather context about the target company
- Multiple output types β Cover letters, bullet-point highlights, and LinkedIn connection messages
- Quality control pipeline β Generates multiple draft variations, selects the best via self-consistency voting, and applies AI critique
- Human-in-the-loop β LangGraph interrupt-based approval step so you can provide feedback before finalization
- Multi-provider LLM support β Factory pattern supporting OpenRouter, Cerebras, and Ollama (both LangChain and DSPy)
- Observability β Full LangSmith tracing with metadata and tags
- Parallel processing β Resume and job description parsing run concurrently
Architecture
The workflow is a LangGraph state machine composed of subgraphs:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Main Workflow Graph β
β β
β ββββββββββββ βββββββββββ βββββββββββββββ βββββββββββββ β
β β LOAD βββββΆβRESEARCH βββββΆβ CREATE_DRAFTβββββΆβ CRITIQUE β β
β β(subgraph)β β(subgraphβ β β β β β
β ββββββββββββ βββββββββββ βββββββββββββββ βββββββ¬ββββββ β
β β² β β
β βββ retry on βββββββββββΌβββββββ β
β validation βHUMAN_APPROVAL β β
β failure β (interrupt) β β
β βββββββββββ¬βββββββ β
β β β
β βββββββββββΌβββββββ β
β β FINALIZE β β
β ββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Getting Started
Prerequisites
- Python 3.11+
- uv (recommended) or pip
- API keys for your chosen LLM provider (OpenRouter, Cerebras, or Ollama) and Tavily
Installation
# Clone the repository
git clone https://github.com/rishabh1024/job_writer.git
cd job_writer
# Install with uv (recommended)
uv pip install -e .
# Or with pip
pip install -e .
Usage
CLI
# With uv
uv run -m job_writing_agent.workflow \
--resume path/to/resume.pdf \
--job https://example.com/job-posting \
--type cover_letter
# With python directly
python -m job_writing_agent.workflow \
--resume path/to/resume.pdf \
--job https://example.com/job-posting \
--type cover_letter
Content types: cover_letter, bullet_points, linkedin_note
LangGraph API
When deployed, the workflow is exposed as a LangGraph API with three graphs:
| Graph | Endpoint | Description |
|---|---|---|
job_app_graph |
Full pipeline | End-to-end: load β research β draft β critique β approve β finalize |
research_workflow |
Research only | Company research with Tavily search and relevance filtering |
data_loading_workflow |
Data loading only | Resume and job description parsing |
Tech Stack
| Category | Tools |
|---|---|
| Orchestration | LangGraph |
| LLM Framework | LangChain, DSPy |
| Search | Tavily |
| Evaluation | OpenEvals (LLM-as-judge) |
| Observability | LangSmith |
| Web Scraping | Playwright |
| Deployment | Docker, Hugging Face Spaces |
| Package Management | uv |
License
This project is provided as-is for educational and personal use.