---
name: lockedin-audit
description: |
  Scores any resume or cover letter against LockedIn's calibrated
  rubric. No vault required. Three modes: score, refine, refine then
  score.

  Activate when the user says "audit my resume", "score my resume",
  "check my resume", or provides a resume file and asks for feedback.
  Also triggered after a completed `lockedin ingest`.
---

# lockedin-audit

Scores and refines existing resume or cover-letter documents against the
same rubric used by `render-resume-en` and `render-jaso`. No vault is
required for the drive-by path.

## Entry points

### A. Drive-by audit (no vault required)

User provides a file path. The skill:

1. Calls `lockedin ingest <path> --dry-run` via Bash to extract text
   without mutating the vault.
2. Detects document type (English resume vs. Korean cover letter (jaso)) from
   content and file name.
3. Routes to the correct rubric (see RUBRIC.md) and runs the
   selected mode (default: Score only for drive-by).
4. Returns a markdown report. No vault writes. No file writes.

### B. Post-ingest audit (existing vault user)

Triggered when `lockedin ingest` has just completed and merged N new
entities into the vault. The skill presents a 4-option menu:

```
Ingest complete. <N> new entities merged into vault.

What next?
  [1] Score only          — apply rubric to the source document as-is.
                            No vault changes.
  [2] Refine only          — diff-based refinement of merged entities
                            (normalize metrics, replace weak action verbs,
                            restructure highlights). Every change shown as
                            diff, user approves before vault write.
  [3] Refine then Score    — refinement followed by scoring of refined
                            output (DEFAULT RECOMMENDED — quantifies score
                            lift)
  [4] Skip
```

## Three operating modes

### Mode 1 — Score only

Applies the rubric to the source document and emits a clean markdown
report. Steps:

1. Detect document type (English resume or Korean cover letter (jaso)).
2. Load the appropriate rubric via RUBRIC.md routing.
3. **Writer turn** (`prompt-scorer.md`): reads the source, quotes specific
   lines as evidence, produces a draft score narrative.
4. **Reviewer turn** (`prompt-reviewer.md`): runs in a SEPARATE Claude
   context, re-loads RUBRIC.md fresh, emits a JSON score.
5. Merge writer narrative and reviewer JSON into the final markdown
   report (see Output format).

No vault writes. Source document is read-only.

### Mode 2 — Refine only

Proposes targeted refinements to the source document (or to vault
entities if triggered post-ingest). Steps:

1. Load the source document (or vault entities to refine).
2. **Refiner turn** (`prompt-refiner.md`): iterates over bullets /
   paragraphs and proposes changes in three categories:
   - Metric normalization (e.g., "improved performance" ->
     "reduced p95 latency 40% over Q3 2025").
   - Action verb replacement (weak -> strong, per banned_phrases.json
     from the relevant render skill).
   - Highlight restructuring (group, sequence, deduplicate).
3. For **each proposed change**: show original line + proposed line +
   one-sentence rationale. Ask the user yes/no.
4. Never invent facts. If the source lacks data for a stronger
   version of a line, the refiner surfaces a "missing data" note and
   asks the user if they have it. It does NOT fabricate a metric.
5. After all yes/no decisions, collect approved changes.
6. Post-ingest path: apply approved changes to vault via documented
   CLI commands (with dry-run preview). Drive-by path: emit a
   revised document as markdown for the user to copy.

### Mode 3 — Refine then Score (default for post-ingest)

Chains Mode 2 then Mode 1. After refinement is approved:

1. Run scorer + reviewer on the refined output.
2. Report both the pre-refinement score (from the original document)
   and the post-refinement score (from the refined version).
3. Display the delta per dimension so the user can see the impact
   of each change.

Output includes a side-by-side comparison table:

```
| Dimension | Before | After | Delta |
```

## Output format

All output is clean markdown. No badges. No verification blocks. No
images. No emoji-heavy decorations.

### Score report

```markdown
## Audit Report — {filename or "source document"}

**Document type**: English resume / Korean cover letter (jaso)
**Mode**: Score only / Refine then Score

### Scores

| Dimension | Score |
| --- | --- |
| {dim 1} | N.N / 5.0 |
| {dim 2} | N.N / 5.0 |
| {dim 3} | N.N / 5.0 |
| {dim 4} | N.N / 5.0 |
| {dim 5} | N.N / 5.0 |
| **Total** | **N.N / 5.0** |

### Evidence

{For each dimension: one sentence rationale + the specific line(s)
from the source that drove the score.}

### Issues to address

{2–3 specific, actionable improvement notes. Each references a
specific line and a specific fix.}

### Banned phrase hits

{List each hit with surrounding context, or "None".}
```

### Refine then Score delta report (Mode 3 only)

Appended after the score section:

```markdown
### Score delta (Refine then Score)

| Dimension | Before | After | Delta |
| --- | --- | --- | --- |
| {dim 1} | N.N | N.N | +N.N |
| ... | | | |
```

## Required design constraints

- **Two-turn writer/reviewer.** Scorer (writer turn) and reviewer
  (reviewer turn) run in separate Claude contexts. RUBRIC.md must be
  re-loaded fresh in the reviewer turn. See CLAUDE.md working
  agreement: same-context self-evaluation inflates scores by ~1 point.
- **Never invent facts.** Refinements reshape existing content.
  Missing data surfaces as a question to the user, never as a
  fabricated claim.
- **Refinement diffs always shown before vault mutation.** The
  default is ask, not auto-apply. This is non-negotiable.
- **Reuses existing rubrics.** The five dimensions are defined in
  `../lockedin-render-resume-en/RUBRIC.md` (English) and
  `../lockedin-render-jaso/RUBRIC.md` (Korean). RUBRIC.md in this
  directory routes to them. No duplication.
- **Clean markdown only.** No badges, no verification blocks,
  no PNG, no emoji-heavy formatting.

## Files in this directory

```
SKILL.md            (this file)
RUBRIC.md           router to the two render-skill rubrics
prompt-scorer.md    writer-turn scoring prompt
prompt-refiner.md   writer-turn refinement prompt
prompt-reviewer.md  reviewer-turn prompt (separate Claude context, fresh RUBRIC load)
AGENTS.md           agent roles and orchestration
TOOLS.md            tool requirements per mode
```

## Routing: when not to use this skill

- User wants a new resume written from vault data -> `render-resume-en`.
- User wants a new jaso written from vault data -> `render-jaso`.
- User wants to import new experience into the vault -> `lockedin ingest`.

## Do NOT use when

- The user just wants to write a resume from scratch; use
  `render-resume-en` instead.
- The vault is completely empty and the user has no existing document
  to audit; direct them to `/lockedin init` first.
