Skip to main content
T3 fan-out ยท HR / recruiting: CVs are PII, so the whole screen runs on a local model. One schema-enforced rubric for every candidate (enums kill ยซ kinda-strong ยป), evidence quotes required, and the ranking is jq: deterministic, not model mood.

The job

Forty CVs and a Friday deadline means the rubric drifts by CV #12. Here glob discovers the pool, every candidate gets the SAME typed rubric (fit enum, evidence quotes mandatory), two at a time so the GPU breathes, weak fits drop, and jq sorts strong-first then by relevant years. The shortlist brief quotes its evidence.

The shape

The file

resume-screener.nika.yaml

How it works

1

Sovereignty is the requirement, not a preference

model: ollama/llama3.2:3b at the envelope: candidate data never touches a cloud API. Same file shape as any other workflow.
2

One rubric, enforced by schema

fit: enum [strong, possible, weak] + required evidence arrays: candidate #1 and #40 are judged on the same axes, and a rating without a quote fails validation.
3

The ORDER is deterministic

sort_by(.fit != "strong", -(.years_relevant // 0)): strong fits first, then by years. Re-run it: same input, same shortlist.

Constructs you just used

Make it yours

  • Anonymize first: a pre-pass infer that strips names/photos before scoring. Bias mitigation in one task.
  • Wire the shortlist into Meeting actionsโ€™ pattern to draft interview invites.
  • The same shape screens vendor proposals, grant applications, conference talks: any ยซ N documents, one rubric ยป job.

Next ยท Release train

Time as a first-class citizen: parallel gates, a human GO, and an absolute-time hold until the window.