How to Configure the Hiring-Agent for a New Project
To configure the hiring-agent for a new project, copy .env.example to .env, select your LLM provider (Ollama or Gemini) and model, adjust provider settings in models.py, and optionally customize Jinja templates in prompts/templates/ for project-specific evaluation criteria.
The InterviewStreet hiring-agent is a modular pipeline that extracts résumé data, enriches it with GitHub signals, and evaluates candidates using an LLM backend. Whether you are screening engineers for a backend-heavy role or assessing frontend specialists, you must configure the hiring-agent to match your specific requirements. This guide walks through the exact steps and source files needed to adapt the system for any new project.
Environment Setup and Credentials
Start by copying the example environment file and defining your runtime parameters.
Run the following command in your project root:
cp .env.example .env
Edit .env to set the LLM provider, model name, and optional API keys:
LLM_PROVIDER=ollama # or "gemini"
DEFAULT_MODEL=gemma3:4b # model name for Ollama
GEMINI_API_KEY=your_key_here # required if using Gemini
GITHUB_TOKEN=your_github_token # optional, improves API rate limits
These environment variables are read by config.py (which toggles DEVELOPMENT_MODE) and by models.py when constructing the appropriate provider wrapper.
Select and Configure the LLM Provider
The hiring-agent supports multiple backends through a unified interface defined in models.py. Choose one of the following providers based on your infrastructure.
Ollama Configuration
To run locally using Ollama:
- Set
LLM_PROVIDER=ollamain.env. - Set
DEFAULT_MODELto the name of a model you have pulled (e.g.,gemma3:4b). - Ensure the model is available locally:
ollama pull gemma3:4b
The OllamaProvider class in models.py wraps the ollama.chat method to stream responses into the pipeline. According to the InterviewStreet source code, this provider calls ollama.chat under the hood to handle text generation.
Gemini Configuration
To use Google’s Gemini API:
- Set
LLM_PROVIDER=geminiin.env. - Provide your
GEMINI_API_KEY. - The
GeminiProviderclass inmodels.pyadapts Google Gemini API responses to the unified interface used byprompt.pyandevaluator.py.
Helper functions in llm_utils.py initialize these providers and clean raw LLM responses before they reach the scoring logic.
Customize Prompts and Scoring Criteria
Each pipeline stage—PDF extraction, GitHub enrichment, and final evaluation—uses Jinja templates stored in prompts/templates/. To capture project-specific terminology or adjust scoring weights, modify these templates.
To add a new evaluation criterion (for example, "Leadership"):
- Edit
prompts/templates/resume_evaluation_criteria.jinjaor create a new file in the same directory. - Register the template in
prompts/template_manager.pyso thatprompt.pycan load it by name. - Update the JSON structure to include your new category:
{# prompts/templates/resume_evaluation_criteria.jinja #}
{% raw %}
{
"categories": [
{"name": "open_source", "weight": 0.25},
{"name": "self_projects", "weight": 0.25},
{"name": "production", "weight": 0.25},
{"name": "technical_skills","weight": 0.20},
{"name": "leadership", "weight": 0.05}
]
}
{% endraw %}
The prompt.py dispatcher selects the appropriate template for each step, allowing you to tailor the evaluation to specific competencies without altering core pipeline logic in evaluator.py.
Development Mode and Pipeline Execution
Before running candidates through the system, decide whether to enable debugging features.
In config.py, the DEVELOPMENT_MODE flag controls whether the pipeline caches intermediate JSON results and exports CSV files for inspection. Set this to True during setup and False for production runs to avoid writing temporary files.
Execute the full workflow with:
python score.py /path/to/resume.pdf
With your configuration in place, the pipeline will:
- Convert the PDF to Markdown via
pdf.py(usingpymupdf_rag.py). - Parse résumé sections using the LLM prompts defined in your templates.
- Enrich the profile with GitHub data via
github.py. - Evaluate the candidate via
evaluator.pyusing your custom scoring rules. - Output a human-readable summary and (if
DEVELOPMENT_MODE=True) a CSV row viascore.py.
Summary
- Copy
.env.exampleto.envand setLLM_PROVIDER,DEFAULT_MODEL, and optional API keys to initialize the backend. - Configure providers in
models.pyby selectingOllamaProviderfor local models orGeminiProviderfor cloud APIs. - Customize evaluation logic by editing Jinja templates in
prompts/templates/and registering them intemplate_manager.py. - Toggle
DEVELOPMENT_MODEinconfig.pyto enable debugging caches during setup. - Run the pipeline with
python score.py <resume.pdf>to process candidates end-to-end.
Frequently Asked Questions
Do I need a GitHub token to configure the hiring-agent?
No, a GitHub token is optional. However, providing GITHUB_TOKEN in your .env file significantly improves API rate limits when github.py fetches repository and profile data for candidate enrichment. Without it, you may encounter throttling during bulk processing.
Can I use a custom local LLM endpoint other than Ollama?
The current architecture in models.py defines specific wrappers for OllamaProvider and GeminiProvider. To use a different local endpoint, you would need to create a new provider class in models.py that implements the same interface and update llm_utils.py to initialize it based on a new LLM_PROVIDER value.
Where do I modify the scoring weights for candidate evaluation?
Scoring weights are defined in the Jinja templates under prompts/templates/ (specifically resume_evaluation_criteria.jinja). After editing the weights or adding new categories, ensure the template is registered in template_manager.py so that evaluator.py can load the updated criteria during the assessment phase.
How do I switch between development and production mode?
Set the DEVELOPMENT_MODE variable in config.py to True for development (enables caching and CSV exports) or False for production. In production mode, score.py suppresses temporary file writes and runs the pipeline without intermediate debugging artifacts.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →