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

123 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.