How MadsLorentzen's ai-job-search Evaluates Candidate Fit with Job Postings: A Technical Breakdown

MadsLorentzen's ai-job-search evaluates candidate fit using a deterministic, six-dimensional scoring rubric that generates weighted numeric scores and actionable verdicts to determine whether a job posting matches your profile.

The ai-job-search repository implements a structured, reproducible framework for assessing how well a candidate aligns with specific job opportunities. Rather than relying on subjective gut feelings, the system uses a predefined scoring matrix located in .claude/skills/job-application-assistant/04-job-evaluation.md to compare candidate attributes against posting requirements consistently.

The Six-Dimensional Scoring Framework

The evaluation rubric defines six distinct dimensions that cover both technical qualifications and cultural alignment. Each dimension carries a specific weight that contributes to the final weighted average:

  • Technical Skills (30% weight): Compares required and preferred skills against the candidate’s primary, secondary, and missing skill lists
  • Experience (25% weight): Evaluates direct, adjacent, or entry-level experience domains
  • Career Alignment (30% weight): Verifies that role tasks align with stated career goals and energizing-task preferences
  • Behavioral/Culture (15% weight): Matches cultural-fit descriptors against the candidate’s behavioral profile while flagging red flags like department disorganization
  • Location (pass/fail): Binary assessment based on commute range, relocation willingness, or travel requirements
  • Salary Benchmark (optional): External compensation verification via salary_lookup.py

Each dimension scores from 0-100 according to standardized tables in the rubric. For example, 80-100 indicates a core match, while 0-39 signals a fundamental mismatch.

How the Fit Evaluation Process Works

When you trigger a fit evaluation, the system executes a deterministic pipeline that transforms raw job posting text into a structured decision matrix.

Step 1: Load Candidate Profile Data

The system first retrieves your personalized data from .claude/skills/job-application-assistant/01-candidate-profile.md. This file contains your skills inventory, experience history, behavioral traits, career goals, deal-breakers, and location constraints established during the /setup step.

Step 2: Extract and Score Dimensions

For each job posting, the framework analyzes the text against your profile across all six dimensions. The Technical Skills Match identifies overlaps between required competencies and your capabilities, while the Experience Match categorizes your background as direct, adjacent, or entry-level relative to the role.

The Behavioral/Culture Fit dimension scans for cultural descriptors that align with your work style preferences, automatically flagging potential red flags. Meanwhile, Career Alignment ensures the role’s day-to-day tasks match your long-term professional objectives.

Step 3: Calculate Weighted Verdict

The system computes a weighted overall score using the dimension percentages (excluding location, which remains binary). This score determines your verdict band:

  • Strong Fit: ≥ 75
  • Good Fit: 60-74
  • Moderate Fit: 45-59
  • Weak Fit: 30-44
  • Poor Fit: < 30

Step 4: Generate Structured Output

The evaluation renders as a markdown table containing dimension scores with explanatory notes, the overall weighted score, a final verdict, highlighted strengths, identified gaps, and a specific recommendation (apply, skip, or apply with caveats).

Running Full Fit Evaluations with /apply

The /apply command orchestrates the complete evaluation workflow, including company research and document generation.


# Execute after completing /setup to populate your profile

/apply https://example.com/job-posting

This command internally:

  1. Fetches the posting content via WebFetch
  2. Loads the scoring rubric from 04-job-evaluation.md
  3. Scores all six dimensions against your profile
  4. Produces a detailed markdown evaluation

Sample Evaluation Output


## Job Fit Evaluation: Data Engineer at Acme Corp

| Dimension | Score | Notes |
|-----------|-------|-------|
| Technical Skills | 85/100 | Core Python, SQL, and streaming skills match |
| Experience Match | 70/100 | Adjacent experience in ETL pipelines |
| Behavioral Fit | 60/100 | Culture values autonomy – candidate thrives |
| Location | PASS | Remote-friendly |
| Career Alignment | 78/100 | Role aligns with cloud-data-platform goals |

**Overall Score: 78/100** (weighted average)

### Verdict: Strong Fit

### Key Strengths for This Role

- Proven end-to-end data pipeline builds
- Strong cloud-native tooling experience
- High autonomy preference matches company culture

### Gaps to Address

- Limited exposure to real-time streaming platforms
- No formal certification in the new technology stack

### Recommendation

Apply – tailor the cover letter to acknowledge the streaming gap and highlight rapid learning ability.

Batch Triage with /rank

For high-volume job searching, the /rank command provides rapid triage using the same rubric but omitting deep company research.

/rank --top 5

This batch operation scores every new scraped posting and returns a prioritized shortlist:


## Job Ranking - 2026-07-12

Ranked 5 new postings (3 shortlisted, 2 below threshold, 0 excluded).

### Shortlist

| # | Score | Verdict | Title | Company | Location | Deadline |

|---|-------|---------|-------|---------|----------|----------|
| 1 | 82 | Strong Fit | Senior Data Engineer | Acme Corp | Remote | 2026-07-20 🔥 |
| 2 | 76 | Strong Fit | Data Platform Lead | Beta Ltd | Copenhagen | 2026-07-18 |
| 3 | 68 | Good Fit | Analyst Engineer | Gamma AB | Remote | 2026-07-22 |

You can then feed these shortlisted postings into /apply for comprehensive evaluation and application preparation.

Key Architectural Files

The fit evaluation system relies on these specific source files:

Summary

  • ai-job-search evaluates candidate fit using a deterministic rubric with six weighted dimensions: Technical Skills (30%), Experience (25%), Career Alignment (30%), Behavioral/Culture (15%), Location (pass/fail), and optional Salary Benchmark.
  • The /apply command executes full evaluations including company research, while /rank provides rapid batch triage for high-volume job searching.
  • Scoring outputs use standardized 0-100 scales per dimension, generating verdict bands from Strong Fit (≥75) to Poor Fit (<30) with specific recommendations.
  • Candidate profiles live in 01-candidate-profile.md and the scoring framework resides in 04-job-evaluation.md, ensuring consistent, reproducible evaluations across all job postings.

Frequently Asked Questions

How does ai-job-search calculate the overall fit score?

The system calculates a weighted average of dimension scores using the predefined percentages: Technical Skills contributes 30%, Experience 25%, Career Alignment 30%, and Behavioral/Culture 15%. Location operates as a binary pass/fail filter rather than a weighted score. The resulting numeric value maps to verdict bands that determine whether you should apply, skip, or proceed with caveats.

What is the difference between /apply and /rank commands?

The /apply command performs a comprehensive fit evaluation including company research, salary benchmarking via salary_lookup.py, and document generation for individual postings. The /rank command uses the identical scoring rubric but operates in batch mode for rapid triage, scoring multiple postings simultaneously without deep company research or documentation steps.

Where does the scoring rubric store candidate preferences?

Candidate data resides in .claude/skills/job-application-assistant/01-candidate-profile.md, which the system populates during the initial /setup workflow. This file contains your skills inventory, experience domains, behavioral traits, career goals, location constraints, and deal-breakers that the evaluation framework references when scoring job postings.

Can I customize the weights or dimensions in the scoring framework?

The rubric weights and dimensions are defined in .claude/skills/job-application-assistant/04-job-evaluation.md. While the current implementation uses fixed weights (30/25/30/15), the markdown-based rubric structure allows for manual modification of the scoring tables, thresholds, and dimension definitions to match your specific evaluation criteria.

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 →