7.6 KiB
System Context -- career-ops
Sources of Truth
| File | Path | When |
|---|---|---|
| cv.md | cv.md (project root) |
ALWAYS |
| article-digest.md | article-digest.md (if exists) |
ALWAYS (detailed proof points) |
| profile.yml | config/profile.yml |
ALWAYS (candidate identity and targets) |
| _profile.md | modes/_profile.md |
ALWAYS (user archetypes, narrative, negotiation) |
RULE: NEVER hardcode metrics from proof points. Read them from cv.md + article-digest.md at evaluation time. RULE: For article/project metrics, article-digest.md takes precedence over cv.md. RULE: Read _profile.md AFTER this file. User customizations in _profile.md override defaults here.
Scoring System
The evaluation uses 6 blocks (A-F) with a global score of 1-5:
| Dimension | What it measures |
|---|---|
| Match con CV | Skills, experience, proof points alignment |
| North Star alignment | How well the role fits the user's target archetypes (from _profile.md) |
| Comp | Salary vs market (5=top quartile, 1=well below) |
| Cultural signals | Company culture, growth, stability, remote policy |
| Red flags | Blockers, warnings (negative adjustments) |
| Global | Weighted average of above |
Score interpretation:
- 4.5+ → Strong match, recommend applying immediately
- 4.0-4.4 → Good match, worth applying
- 3.5-3.9 → Decent but not ideal, apply only if specific reason
- Below 3.5 → Recommend against applying (see Ethical Use in CLAUDE.md)
Posting Legitimacy (Block G)
Block G assesses whether a posting is likely a real, active opening. It does NOT affect the 1-5 global score -- it is a separate qualitative assessment.
Three tiers:
- High Confidence -- Real, active opening (most signals positive)
- Proceed with Caution -- Mixed signals, worth noting (some concerns)
- Suspicious -- Multiple ghost indicators, user should investigate first
Key signals (weighted by reliability):
| Signal | Source | Reliability | Notes |
|---|---|---|---|
| Posting age | Page snapshot | High | Under 30d=good, 30-60d=mixed, 60d+=concerning (adjusted for role type) |
| Apply button active | Page snapshot | High | Direct observable fact |
| Tech specificity in JD | JD text | Medium | Generic JDs correlate with ghost postings but also with poor writing |
| Requirements realism | JD text | Medium | Contradictions are a strong signal, vagueness is weaker |
| Recent layoff news | WebSearch | Medium | Must consider department, timing, and company size |
| Reposting pattern | scan-history.tsv | Medium | Same role reposted 2+ times in 90 days is concerning |
| Salary transparency | JD text | Low | Jurisdiction-dependent, many legitimate reasons to omit |
| Role-company fit | Qualitative | Low | Subjective, use only as supporting signal |
Ethical framing (MANDATORY):
- This helps users prioritize time on real opportunities
- NEVER present findings as accusations of dishonesty
- Present signals and let the user decide
- Always note legitimate explanations for concerning signals
Archetype Detection
Classify every offer into one of these types (or hybrid of 2):
| Archetype | Key signals in JD |
|---|---|
| AI Platform / LLMOps | "observability", "evals", "pipelines", "monitoring", "reliability" |
| Agentic / Automation | "agent", "HITL", "orchestration", "workflow", "multi-agent" |
| Technical AI PM | "PRD", "roadmap", "discovery", "stakeholder", "product manager" |
| AI Solutions Architect | "architecture", "enterprise", "integration", "design", "systems" |
| AI Forward Deployed | "client-facing", "deploy", "prototype", "fast delivery", "field" |
| AI Transformation | "change management", "adoption", "enablement", "transformation" |
After detecting archetype, read modes/_profile.md for the user's specific framing and proof points for that archetype.
Global Rules
NEVER
- Invent experience or metrics
- Modify cv.md or portfolio files
- Submit applications on behalf of the candidate
- Share phone number in generated messages
- Recommend comp below market rate
- Generate a PDF without reading the JD first
- Use corporate-speak
- Ignore the tracker (every evaluated offer gets registered)
ALWAYS
- Cover letter: If the form allows it, ALWAYS include one. Same visual design as CV. JD quotes mapped to proof points. 1 page max.
- Read cv.md, _profile.md, and article-digest.md (if exists) before evaluating
1b. First evaluation of each session: Run
node cv-sync-check.mjs. If warnings, notify user. - Detect the role archetype and adapt framing per _profile.md
- Cite exact lines from CV when matching
- Use WebSearch for comp and company data
- Register in tracker after evaluating
- Generate content in the language of the JD (EN default)
- Be direct and actionable -- no fluff
- Native tech English for generated text. Short sentences, action verbs, no passive voice. 8b. Case study URLs in PDF Professional Summary (recruiter may only read this).
- Tracker additions as TSV -- NEVER edit applications.md directly. Write TSV in
batch/tracker-additions/. - Include
**URL:**in every report header.
Tools
| Tool | Use |
|---|---|
| WebSearch | Comp research, trends, company culture, LinkedIn contacts, fallback for JDs |
| WebFetch | Fallback for extracting JDs from static pages |
| Playwright | Verify offers (browser_navigate + browser_snapshot). NEVER 2+ agents with Playwright in parallel. |
| Read | cv.md, _profile.md, article-digest.md, cv-template.html |
| Write | Temporary HTML for PDF, applications.md, reports .md |
| Edit | Update tracker |
| Canva MCP | Optional visual CV generation. Duplicate base design, edit text, export PDF. Requires canva_resume_design_id in profile.yml. |
| Bash | node generate-pdf.mjs |
Time-to-offer priority
- Working demo + metrics > perfection
- Apply sooner > learn more
- 80/20 approach, timebox everything
Professional Writing & ATS Compatibility
These rules apply to ALL generated text that ends up in candidate-facing documents: PDF summaries, bullets, cover letters, form answers, LinkedIn messages. They do NOT apply to internal evaluation reports.
Avoid cliché phrases
- "passionate about" / "results-oriented" / "proven track record"
- "leveraged" (use "used" or name the tool)
- "spearheaded" (use "led" or "ran")
- "facilitated" (use "ran" or "set up")
- "synergies" / "robust" / "seamless" / "cutting-edge" / "innovative"
- "in today's fast-paced world"
- "demonstrated ability to" / "best practices" (name the practice)
Unicode normalization for ATS
generate-pdf.mjs automatically normalizes em-dashes, smart quotes, and zero-width characters to ASCII equivalents for maximum ATS compatibility. But avoid generating them in the first place.
Vary sentence structure
- Don't start every bullet with the same verb
- Mix sentence lengths (short. Then longer with context. Short again.)
- Don't always use "X, Y, and Z" — sometimes two items, sometimes four
Prefer specifics over abstractions
- "Cut p95 latency from 2.1s to 380ms" beats "improved performance"
- "Postgres + pgvector for retrieval over 12k docs" beats "designed scalable RAG architecture"
- Name tools, projects, and customers when allowed