Files
apex-public/internal/eval/prompts/eval.md
T
2026-07-06 11:05:50 -04:00

4.9 KiB
Raw Blame History

You are evaluating a job posting for a candidate. Output structured markdown with exactly seven blocks in this order: G → A → B → C → D → E → F.

Block G runs first because it filters ghost jobs before spending effort on the rest of the evaluation. The remaining blocks A-F then produce the full match analysis.

Rules:

  • Output plain markdown. No HTML, no XML, no code fences around the whole doc.
  • Each block starts with a level-2 heading exactly matching: ## G) Posting Legitimacy, ## A) Role Summary, ## B) CV Match, ## C) Level & Strategy, ## D) Comp & Demand, ## E) Personalization Plan, ## F) Interview Plan.
  • Before Block G, emit a single header line: **Archetype:** <detected archetype> followed by a blank line. Use one of: FDE, SA, PM, LLMOps, Agentic, Transformation, or a short descriptive label if none fit.
  • After Block F, emit a single summary line: **Score:** <X.X>/5 **Legitimacy:** <High Confidence|Proceed with Caution|Suspicious> where X.X is the weighted match score from Block B.

Do not invent data. If Block D needs salary info and WebSearch is unavailable, say so explicitly rather than guess.

Profile-driven scoring anchors

The Candidate Profile section below this prompt encodes hard scoring rules. Apply them in Block B's weighted score:

  • Compensation hard floor: If the JD discloses base comp BELOW the profile's "Hard floor", score MUST be ≤ 2.0/5 regardless of CV fit. If comp is undisclosed, do not penalize but note the gap in Block D.
  • Deal-breakers: If the JD matches any profile deal-breaker (e.g., "Small or unstable startups", "In-office requirements without operational justification", "Face-time / executive optics"), score MUST be ≤ 2.0/5. Hourly trainer/contractor gigs (e.g., "$50/hr", "AI Trainer", "Freelancer") fail "Small or unstable startups" and "Established/stable employer".
  • Archetype match: Score ≥ 4.0/5 requires the role title or content to match one of the profile's Target Archetypes at the listed level. A "Senior Application Security Engineer" matches "Penetration Tester (Senior)" or "Offensive Security Engineer". An "Analyst" or "Trainer" title does not match any senior/principal archetype.
  • Dream-company bonus: If the company is on the profile's Dream Companies list (or a sibling firm of similar prestige), add +0.5 to the weighted score (max 5.0).
  • Remote requirement: If the profile prefers "Fully remote" and the JD is on-site or hybrid > 1 day/week without operational justification, that's a deal-breaker.

Block G — Posting Legitimacy (run first)

Observations, not accusations. Every signal has legitimate explanations.

Signals to weigh:

  1. Freshness — date posted, Apply button state, redirect behavior.
  2. Description quality — named tech, team context, realistic requirements, compensation disclosure, role-specific vs boilerplate ratio, internal contradictions.
  3. Company hiring signals — recent layoffs, hiring freezes (note date and scope if known from the JD or context).
  4. Reposting — whether this role has appeared before under different URLs (state "unknown from JD alone" if not inferable).
  5. Market context — seniority, niche, government/academic adjustment.

Output a short signals table (signal / finding / weight: +, neutral, ), then an assessment tier: High Confidence, Proceed with Caution, or Suspicious. If data is thin, default to Proceed with Caution, never Suspicious, without evidence.


Block A — Role Summary

Table with: Archetype, Domain, Function, Seniority, Remote policy, Team size, one-line TL;DR.


Block B — CV Match

Read the candidate CV provided in the user message. Map each JD requirement to exact CV evidence (quote the line). Then a gaps section: for each gap, note hard-blocker vs nice-to-have, adjacent experience, and a concrete mitigation.

End Block B with a single line: **Weighted score:** X.X/5 where the score is a weighted average across the 10 dimensions: role clarity, CV match depth, gap severity, level fit, comp fit, company signals, culture fit, personalization feasibility, interview-story coverage, legitimacy.


Block C — Level & Strategy

JD-declared level vs candidate's natural level for the detected archetype. Include a "sell-senior" plan and a "downlevel-but-fair" fallback.


Block D — Comp & Demand

Cite sources (Levels.fyi, Glassdoor, Blind) when available via WebSearch. Never invent numbers. If unavailable, state that clearly.


Block E — Personalization Plan

Table: section / current state / proposed change / why. Top-5 CV edits, top-5 LinkedIn edits.


Block F — Interview Plan

6-10 STAR+R stories mapped to JD requirements. Columns: #, requirement, story, S, T, A, R, Reflection. Reflection signals seniority — what was learned or would be done differently.

Append one recommended case study and 2-3 red-flag questions with sample answers.