The Hiring Agent is a Python-based system designed to automate resume evaluation and scoring through a structured pipeline that combines PDF parsing, language model processing, and GitHub profile enrichment. The repository is classified across multiple hiring and recruitment domains including candidate evaluation, recruitment automation, technical screening, resume parsing, and HR analytics, reflecting its broad application in talent assessment workflows.
The core functionality implements a five-stage processing pipeline. First, resumes in PDF format are converted to Markdown-like text using PyMuPDF, preserving document structure including headings, links, and tables. Second, the system uses Jinja templates to extract structured JSON data from specific resume sections such as basics, work experience, education, skills, projects, and awards, with each section processed independently through an LLM. Third, if a GitHub profile is identified in the resume, the system fetches the candidate's GitHub profile and repositories, classifies projects, and uses the LLM to select the seven most meaningful contributions based on author commit thresholds. Fourth, an evaluator module applies fairness-constrained scoring across categories including open source contributions, personal projects, production experience, and technical skills, along with bonus points and deductions. Finally, results are output as human-readable summaries and optionally exported to CSV with intermediate caching.
The system supports two LLM backends, providing flexibility in deployment. Users can run Ollama locally for complete offline operation or integrate Google Gemini via API key for cloud-based processing. The architecture abstracts provider differences through unified interfaces in the models and llm_utils modules, allowing the same prompts and logic to work across both backends. Configuration is managed through environment variables controlling the LLM provider, model selection, and optional GitHub token for improved API rate limits.
The codebase is structured around several key modules. The models.py file defines Pydantic schemas for data validation and LLM provider interfaces. The transform.py module normalizes loose LLM outputs into JSON Resume format. The prompts directory contains all Jinja templates used for extraction and scoring, keeping prompt logic separate from code. Development mode enables caching of intermediate results to the cache directory and CSV export to resume_evaluations.csv, supporting iterative refinement and analysis.
The repository shares contributors with feast-dev/feast, openclaw/openclaw, and google-gemini/gemini-cli, suggesting integration with broader machine learning and AI tooling ecosystems.
The project requires Python 3.11 or higher and is distributed under the MIT license. Contributing guidelines emphasize keeping prompts declarative and provider-agnostic while validating changes against real resumes across different LLM providers. The system is designed for both one-off resume evaluations via CLI and batch processing through development mode, making it suitable for individual recruiters, hiring teams, and automated recruitment pipelines.