# Hiring Agent Resume Scoring Categories: The 4 Components Explained

> Understand the Hiring Agent's four resume scoring categories: Open Source, Self-Projects, Production Experience, and Technical Skills. Maximize your candidate evaluation.

- Repository: [HackerRank/hiring-agent](https://github.com/interviewstreet/hiring-agent)
- Tags: deep-dive
- Published: 2026-07-09

---

**The Hiring Agent evaluates résumés across four distinct categories—Open Source (35 points), Self-Projects (30 points), Production Experience (25 points), and Technical Skills (10 points)—with each category capped at specific maximums defined in the scoring logic.**

The interviewstreet/hiring-agent repository implements a structured evaluation system that breaks down candidate assessments into measurable components. Understanding these resume scoring categories is essential for developers integrating with the API or customizing the evaluation pipeline. Each category tracks specific evidence of technical capability, with weights designed to prioritize demonstrated code quality over self-reported skills.

## The Four Resume Scoring Categories

The scoring system divides evaluation into four weighted dimensions, each represented by a `CategoryScore` object. According to the source code in [`models.py`](https://github.com/interviewstreet/hiring-agent/blob/main/models.py) (lines 225-229), these categories are defined as attributes of the `Scores` model.

### Open Source (35 Points)

The highest-weighted category, **Open Source**, awards up to 35 points for contributions to public repositories and community projects. This category emphasizes verifiable code contributions and collaborative development experience.

### Self-Projects (30 Points)

The **Self-Projects** category caps at 30 points, recognizing independent development work and personal portfolio pieces. This captures initiative and practical application of technical skills outside professional contexts.

### Production Experience (25 Points)

**Production Experience** carries a 25-point maximum, evaluating professional work history and enterprise software development. This category assesses the scale and impact of code deployed in live environments.

### Technical Skills (10 Points)

The **Technical Skills** category provides up to 10 points for demonstrated proficiency in specific technologies and tools. While the lowest-weighted category, it ensures baseline competency alignment with role requirements.

## How Category Maximums Are Enforced

In [`score.py`](https://github.com/interviewstreet/hiring-agent/blob/main/score.py) (lines 81-85), the `category_maxes` dictionary hard-codes these limits to ensure consistent evaluation across candidates:

```python
category_maxes = {
    "open_source": 35,
    "self_projects": 30,
    "production": 25,
    "technical_skills": 10,
}

```

During evaluation, the agent calculates raw scores for each category, then applies `min(actual_score, category_maxes[category])` to ensure no category exceeds its defined ceiling. The following example demonstrates how the capping logic displays results:

```python

# Inside score.py → print_evaluation_results

os_score = evaluation.scores.open_source
capped_score = min(os_score.score, category_maxes["open_source"])
print(f"🌐 Open Source: {capped_score}/{os_score.max}")

```

## Accessing Category Scores Programmatically

The `EvaluationData` object exposes category scores through its `scores` attribute, which contains `CategoryScore` instances for each dimension.

### Retrieving Individual Category Scores

```python
from models import EvaluationData

def print_category_scores(eval_data: EvaluationData):
    scores = eval_data.scores
    print(f"Open Source:      {scores.open_source.score}/{scores.open_source.max}")
    print(f"Self Projects:    {scores.self_projects.score}/{scores.self_projects.max}")
    print(f"Production:       {scores.production.score}/{scores.production.max}")
    print(f"Technical Skills: {scores.technical_skills.score}/{scores.technical_skills.max}")

```

### Creating Evaluation Data with Category Scores

```python
from models import CategoryScore, Scores, BonusPoints, Deductions, EvaluationData

eval_data = EvaluationData(
    scores=Scores(
        open_source=CategoryScore(score=30, max=35, evidence="Contributed to 3 OSS projects"),
        self_projects=CategoryScore(score=25, max=30, evidence="Built a personal web app"),
        production=CategoryScore(score=20, max=25, evidence="2 years at Acme Corp"),
        technical_skills=CategoryScore(score=8, max=10, evidence="Proficient in Python, SQL"),
    ),
    bonus_points=BonusPoints(total=5, breakdown="Extra certifications"),
    deductions=Deductions(total=0, reasons=""),
    key_strengths=["Strong problem-solving", "Effective communication"],
    areas_for_improvement=["Increase cloud experience"]
)

print_category_scores(eval_data)

```

## Summary

- The Hiring Agent uses four resume scoring categories: **Open Source** (35 points), **Self-Projects** (30 points), **Production Experience** (25 points), and **Technical Skills** (10 points), totaling 100 possible points.
- Category maximums are defined in [`score.py`](https://github.com/interviewstreet/hiring-agent/blob/main/score.py) within the `category_maxes` dictionary at lines 81-85.
- Each category uses a `CategoryScore` object storing the achieved score, maximum limit, and supporting evidence.
- Scores are capped during evaluation to ensure fair comparison across candidates with different experience profiles.

## Frequently Asked Questions

### What is the highest weighted resume scoring category?

**Open Source** carries the maximum possible points at 35, making it the most heavily weighted category in the Hiring Agent evaluation system. This reflects the repository's emphasis on verifiable, collaborative code contributions.

### How does the Hiring Agent prevent categories from exceeding their maximum points?

The scoring logic in [`score.py`](https://github.com/interviewstreet/hiring-agent/blob/main/score.py) applies a hard cap using `min(actual_score, category_maxes[category])`, ensuring no category exceeds its defined limit regardless of candidate achievements. This normalization maintains consistent scoring across evaluations.

### Where are the resume scoring categories defined in the codebase?

The categories are defined as attributes of the `Scores` class in [`models.py`](https://github.com/interviewstreet/hiring-agent/blob/main/models.py) (lines 225-229), while their maximum values are stored in the `category_maxes` dictionary in [`score.py`](https://github.com/interviewstreet/hiring-agent/blob/main/score.py) (lines 81-85). Both files must be referenced to understand the complete scoring schema.

### Can I customize the point values for each scoring category?

Yes, by modifying the `category_maxes` dictionary in [`score.py`](https://github.com/interviewstreet/hiring-agent/blob/main/score.py) and updating the corresponding `max` values in the `CategoryScore` objects within [`models.py`](https://github.com/interviewstreet/hiring-agent/blob/main/models.py). However, this requires synchronizing both files to maintain consistency across the evaluation pipeline.