Skip to content

kaletvintsev/hr-breaker

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HR-Breaker

Resume optimization tool that transforms any resume into a job-specific, ATS-friendly PDF.

Python 3.10+

Features

  • Any format in - LaTeX, plain text, markdown, HTML, PDF
  • Optimized PDF out - Single-page, professionally formatted
  • LLM-powered optimization - Tailors content to job requirements
  • Minimal changes - Preserves your content, only restructures for fit
  • No fabrication - Hallucination detection prevents made-up claims
  • Opinionated formatting - Follows proven resume guidelines (one page, no fluff, etc.)
  • Multi-filter validation - ATS simulation, keyword matching, structure checks
  • Web UI + CLI - Streamlit dashboard or command-line
  • Debug mode - Inspect optimization iterations

How It Works

  1. Upload resume in any text format (content source only)
  2. Provide job posting URL or text description
  3. LLM extracts content and generates optimized HTML resume
  4. System runs internal filters (ATS simulation, keyword matching, hallucination detection)
  5. If filters reject, regenerates using feedback
  6. When all checks pass, renders HTML→PDF via WeasyPrint

Quick Start

# Install
uv sync

# Configure
cp .env.example .env
# Edit .env and add your GOOGLE_API_KEY

# Run web UI
uv run streamlit run src/hr_breaker/main.py

Usage

Web UI

Launch with uv run streamlit run src/hr_breaker/main.py

  1. Paste or upload resume
  2. Enter job URL or description
  3. Click optimize
  4. Download PDF

CLI

# From URL
uv run hr-breaker optimize resume.txt https://example.com/job

# From job description file
uv run hr-breaker optimize resume.txt job.txt

# Debug mode (saves iterations)
uv run hr-breaker optimize resume.txt job.txt -d

# List generated PDFs
uv run hr-breaker list

Output

  • Final PDFs: output/<name>_<company>_<role>.pdf
  • Debug iterations: output/debug_<company>_<role>/
  • Records: output/index.json

Configuration

Copy .env.example to .env and set your API key. All other settings have sensible defaults.

Variable Required Description
GOOGLE_API_KEY Yes Google Gemini API key
GEMINI_PRO_MODEL No Model for complex tasks (default: gemini-3-pro-preview)
GEMINI_FLASH_MODEL No Model for simple tasks (default: gemini-3-flash-preview)
GEMINI_THINKING_BUDGET No Thinking tokens budget (default: 8192)
MAX_ITERATIONS No Optimization loop limit (default: 5)

See .env.example for all available options (filter thresholds, scraper settings, etc.)


Architecture

src/hr_breaker/
├── agents/          # Pydantic-AI agents (optimizer, reviewer, etc.)
├── filters/         # Validation plugins (ATS, keywords, hallucination)
├── services/        # Rendering, scraping, caching
│   └── scrapers/    # Job scraper implementations
├── models/          # Pydantic data models
├── orchestration.py # Core optimization loop
├── main.py          # Streamlit UI
└── cli.py           # Click CLI

Agents: job_parser, optimizer, combined_reviewer, name_extractor, hallucination_detector, ai_generated_detector

Filters (run by priority): 0. ContentLengthChecker - Pre-render size check

  1. DataValidator - HTML structure validation
  2. HallucinationChecker - Detect fabrications
  3. KeywordMatcher - TF-IDF matching
  4. LLMChecker - ATS simulation
  5. VectorSimilarityMatcher - Semantic similarity
  6. AIGeneratedChecker - Detect AI-sounding text

Development

# Run tests
uv run pytest tests/

# Install dev dependencies
uv sync --group dev

About

Optimize resume for jobs, now with AI

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 92.6%
  • HTML 7.4%