How the Five Dimensions of Job Fit Are Scored: A Complete Technical Guide

The AI job search assistant scores job postings across five dimensions—Technical Skills, Experience, Behavioral Fit, Career Alignment, and Location & Logistics—to generate a weighted overall score from 0-100 that maps to fit bands like "Strong Fit" or "Good Fit."

The job-fit evaluation system resides in the MadsLorentzen/ai-job-search repository, specifically defined in .claude/skills/job-application-assistant/04-job-evaluation.md. After a posting passes the initial Eligibility and Language gates, the scoring agent applies a structured rubric to assess compatibility across five distinct dimensions, translating qualitative job requirements into quantitative metrics that drive the /rank and /apply command recommendations.

The Five Dimensions Defined in 04-job-evaluation.md

The scoring rubric defines five evaluation dimensions. Four return numeric scores (0-100) while one acts as a binary gate.

Technical Skills Match (30% Weight)

This dimension assesses alignment between required technical competencies and the candidate's capabilities. The scoring bands are:

  • 80-100: Core requirements are primary skills
  • 60-79: Most requirements match, with 1-2 learnable gaps
  • 40-59: Partial match, significant up-skilling needed
  • 0-39: Fundamental mismatch

Experience Match (25% Weight)

Rather than comparing exact job titles, this evaluates work history depth, scope, and functional relevance:

  • 80-100: Direct experience in the same domain and role type
  • 60-79: Related experience with clear transferable skills
  • 40-59: Adjacent experience requiring case-making
  • 0-39: Unrelated experience

Behavioral and Culture Fit (15% Weight)

This measures alignment between the candidate's behavioral profile and company culture:

  • 80-100: Culture strongly matches behavioral preferences
  • 60-79: Mixed signals but mostly compatible
  • 40-59: Some friction areas exist
  • 0-39: Significant culture mismatch

Career Alignment & Motivation (30% Weight)

This evaluates whether the role advances long-term career goals:

  • 80-100: Strongly aligned with career direction, clear growth path
  • 60-79: Good role but only partially aligned
  • 40-59: Decent job but doesn't build toward goals
  • 0-39: Dead-end or backwards step

Location & Logistics: The Binary Gate

Unlike other dimensions, Location & Logistics operates as a Pass/Fail check that is not weighted in the final average. It can, however, veto a job posting entirely:

  • PASS: Within commute range, remote-friendly, or sponsor-available
  • FAIL: Requires relocation (deal-breaker)
  • FLAG: Frequent travel requiring discussion

Calculating the Weighted Overall Score

The final score is a weighted average of the four numeric dimensions. According to the source code in 04-job-evaluation.md, the formula is:

overall = round(0.30 * technical + 0.25 * experience + 0.15 * behavior + 0.30 * career)

The Location gate is excluded from this calculation. If Location returns FAIL, the job is disqualified regardless of other scores.

Mapping Scores to Fit Bands

The overall score determines the recommendation band used by the /rank and /apply commands:

  • Strong Fit: ≥ 75 (Recommended for immediate application)
  • Good Fit: 60-74 (Apply with minor caveats)
  • Moderate Fit: 45-59 (Consider with significant reservations)
  • Weak Fit: 30-44 (Generally skip unless strategic)
  • Poor Fit: < 30 (Avoid)

These thresholds guide the assistant's recommendation to apply, apply with caveats, or skip the posting.

Implementing the Scoring Logic

The repository includes Python-style logic that mirrors the agent's evaluation process. Here is the implementation referencing the scoring weights defined in the markdown rubric:

def weighted_score(scores):
    """Calculate the weighted overall fit score."""
    tech = scores["technical"]
    exp = scores["experience"]
    beh = scores["behavior"]
    career = scores["career"]
    
    return round(0.30 * tech + 0.25 * exp + 0.15 * beh + 0.30 * career)

def classify_fit(overall):
    """Map overall score to a fit band."""
    if overall >= 75:
        return "Strong Fit"
    if overall >= 60:
        return "Good Fit"
    if overall >= 45:
        return "Moderate Fit"
    if overall >= 30:
        return "Weak Fit"
    return "Poor Fit"

# Example evaluation

posting = {
    "technical": 78,   # falls in 60-79 band

    "experience": 85,  # falls in 80-100 band

    "behavior": 62,    # falls in 60-79 band

    "career": 55,      # falls in 40-59 band

    "location": "PASS"
}

overall = weighted_score(posting)
fit_band = classify_fit(overall)
print(f"Overall: {overall}/100 → {fit_band}")

# Output: Overall: 71/100 → Good Fit

Key Files in the Repository

Several files orchestrate this scoring system:

Summary

  • The five dimensions of job fit are Technical Skills (30%), Experience (25%), Behavioral Fit (15%), Career Alignment (30%), and Location/Logistics (binary gate).
  • Each numeric dimension scores 0-100 against specific rubric bands defined in 04-job-evaluation.md.
  • The Location & Logistics dimension acts as a veto gate; a FAIL result disqualifies the job regardless of other scores.
  • The weighted overall score rounds to the nearest integer and maps to fit bands: Strong (≥75), Good (60-74), Moderate (45-59), Weak (30-44), and Poor (<30).
  • The /rank and /apply commands consume these scores to generate actionable job search recommendations.

Frequently Asked Questions

What are the five dimensions of job fit scored by the AI job search assistant?

The five dimensions are Technical Skills Match, Experience Match, Behavioral/Culture Fit, Career Alignment & Motivation, and Location & Logistics. The first four return numeric scores from 0-100, while Location operates as a Pass/Fail gate that can block applications requiring relocation.

How is the final job fit score calculated from the five dimensions?

The final score is a weighted average of four numeric dimensions: 30% Technical Skills, 25% Experience, 15% Behavioral Fit, and 30% Career Alignment. The Location dimension is excluded from the mathematical average but can veto the entire evaluation if marked FAIL. The result is rounded to the nearest integer and classified into bands like "Strong Fit" (≥75) or "Good Fit" (60-74).

Can the scoring weights be customized in the ai-job-search repository?

Yes. While the default weights are defined in .claude/skills/job-application-assistant/04-job-evaluation.md, the .claude/commands/setup.md file guides users through personalizing the rubric. You can adjust dimension definitions, score bands, and primary skill mappings to match your specific career profile and preferences.

Why is Location & Logistics treated differently from other job fit dimensions?

Location & Logistics serves as a binary eligibility gate rather than a weighted score because geographic constraints are typically deal-breakers rather than gradable preferences. A FAIL result (requiring unwanted relocation) immediately disqualifies the posting, while a PASS allows the other four dimensions to determine the final fit score. This prevents high-scoring technical matches from overriding fundamental logistical constraints.

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:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →