How Career-Ops A-F Evaluation Scoring Works: The 1‑to‑5 Match Average Explained
Career-Ops derives its A-F evaluation score by computing the arithmetic mean of per-requirement match ratings on a 1-to-5 scale, then persisting that value in the generated report and tracker.
Career-Ops is an open-source job-offer evaluation tool in the santifer/career-ops repository. Its A-F evaluation scoring system analyzes a job description against your CV and produces a single match average that quantifies fit. Understanding how this number is calculated helps you interpret reports and decide which roles are worth pursuing.
Where the Career-Ops A-F Score Is Defined
The report template in modes/oferta.md mandates that every evaluation output contain the line **Score:** {X/5} and explicitly defines the score as the match average across all JD requirements. This instruction appears at line 165 of the template and is replicated in globalized variants such as modes/pt/oferta.md (line 117) and modes/de/angebot.md. The requirement is also echoed in batch/batch-prompt.md at line 228, which instructs the LLM to emit the same placeholder during batch report generation. A rendered example of this output is visible in examples/sample-report.md at line 5.
How Block B Computes Per-Requirement Match Ratings
Block B — Match with CV — is where the substantive scoring begins. The system parses your cv.md and builds a table that maps each JD requirement to the exact line or lines in the CV that satisfy it, as specified in modes/oferta.md between lines 23 and 27.
For every requirement, the matching engine assigns a rating on a 1-to-5 scale:
- 5 — Exact wording or experience is present and clearly demonstrable.
- 4 to 3 — Relevant experience exists but contains gaps or is supported only by indirect evidence.
- 2 to 1 — Little or no evidence; the requirement is either a hard blocker or a nice-to-have.
The weighting is not uniform. The engine respects the archetype detected in Step 0 — defined in modes/_shared.md — and biases the scoring toward that archetype’s priority proof points. For example, delivery speed is weighted heavily for an FDE archetype, while system design is emphasized for an SA archetype, as implemented in modes/oferta.md lines 27 to 34.
Converting Ratings to the Final Evaluation Score
After all JD requirements receive a match rating, Career-Ops calculates the arithmetic mean of those numbers. The result is rounded to one decimal place and rendered as X.X/5 in the final markdown report.
This computed score is then written to the tracker file data/applications.md as part of the TSV entry produced by the post-evaluation step. You can see the mapping between the report template and the tracker persistence logic in modes/oferta.md lines 165 to 169.
How to Interpret Your Career-Ops A-F Score
The score operates independently of the legitimacy tier reported in Block G. Use these ranges to guide your next steps:
- 4.5 – 5.0: Very strong fit. Most JD requirements are met. Proceed to apply; the system may even auto-draft application answers in Block H.
- 3.5 – 4.4: Good fit. A few gaps exist but they are manageable. Consider applying after addressing the gaps listed in Block B.
- 2.5 – 3.4: Moderate fit. Several gaps remain. Weigh the effort to close them against the role’s seniority and compensation; a recruiter conversation may be worthwhile.
- < 2.5: Weak fit. Many hard blockers are present. The system generally discourages applying unless you have a compelling story to bridge the gaps.
CLI: Generate and Inspect Evaluation Scores
Run a single evaluation by passing a URL or raw JD text to the CLI:
# Evaluate a job posting (URL or raw JD text)
career-ops evaluate "https://jobs.example.com/role/123"
# The system creates a report in reports/ that contains the line:
# **Score:** 4.2/5
# (this is the match average computed as described above)
# After evaluation the tracker entry is automatically added:
cat data/applications.md
To view the individual requirement ratings that produce your final number, inspect Block B directly in the generated report:
grep -A100 "## B) Match with CV" reports/001-exampleco-2026-06-09.md | head -n 40
Summary
- The A-F evaluation score is the arithmetic mean of individual requirement match ratings on a 1-to-5 scale, not a traditional letter grade.
- Block B in
modes/oferta.mddrives the scoring by mapping each JD requirement to evidence incv.mdand weighting by archetype priorities defined inmodes/_shared.md. - The final value is rounded to one decimal place, rendered in the report via the template in
modes/oferta.md, and stored indata/applications.md. - Block G legitimacy ratings are independent of the numeric A-F score, giving users two distinct lenses for decision-making.
Frequently Asked Questions
What is the scale of the Career-Ops A-F evaluation score?
The score is a numeric match average on a 1-to-5 scale, rounded to one decimal place. It is derived from per-requirement ratings generated during Block B, not a traditional letter grade.
How does the detected archetype affect the final score?
The archetype identified in Step 0 biases the weighting of proof points according to priorities listed in modes/_shared.md. For instance, an FDE archetype emphasizes delivery speed, while an SA archetype emphasizes system design, as implemented in modes/oferta.md lines 27 to 34.
Is the A-F score related to the legitimacy rating in Block G?
No. The score measures how well your CV satisfies the JD requirements in blocks A through F. Block G judges posting legitimacy independently, so a high match score can coexist with a cautionary legitimacy tier.
Where is the computed score stored after evaluation?
The score is written to data/applications.md as a field in the TSV tracker entry. It is also visible in the generated report file inside the reports/ directory, as specified in modes/oferta.md lines 165 to 169.
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 →