Skip to Content
GuidesQualification

Qualification

The billed tier, and the one that reads your resume. It runs over what the pre-filter let through — a couple of dozen postings out of a couple of thousand.

karani qualify --limit 20 karani qualify --agent --limit 5 # tool-using; 5-10x the cost per row

What comes back

qualified91/100Staff Backend Engineer, Platform at Northwind Roboticskarani qualify

Strengths

Has owned an event platform at this scale before
Owned the event platform at a 40-engineer company: Kafka to ClickHouse, 11 downstream teams, 2.4bn events a day, p99 ingest lag under 90 seconds.
The posting's deadline-scheduling problem is one she has shipped a solver for
Rebuilt the dispatch planner for a Nairobi logistics operator: replaced a nightly batch with an incremental solver, cutting median delivery time from 2h10m to 45m across 1,400 daily drops.

Gaps

lowKubernetes operator experience
She has run workloads on Kubernetes but has not written an operator. Name the control-loop work in the dispatch planner, which is the same shape.

Recommended positioning

Lead with the dispatch planner, not the event platform. The posting is about reconciling state across regions on a deadline, and that is the harder of her two stories.

Hires globally at one band, states it in the posting, and the fleet-scheduling work is a direct match for the dispatch rebuild. Apply today: posted two days ago.

qwen3:4bqual-v7

A score, a three-way verdict, strengths with evidence, gaps with severities and mitigations, red flags, and a recommended angle. All of it validated against a pydantic model before it reaches the database, so a malformed response is caught rather than stored.

The recommended positioning is the part that earns its keep. It is not a summary of the posting, it is an argument about which of your stories to lead with — and it is what the drafting step is handed.

Every claim carries a quote

A strength is a claim plus the line of your own resume behind it. That is a contract, not a style:

A claim whose citation karani cannot verify is dropped, not repaired.

The verification is mechanical. A quote that is not a verbatim span of your records is discarded. A rewrite that loses a figure the source had falls back to the original. A record left with no provenance is thrown away rather than patched up (CLAUDE.md 4.13 ).

This is not caution for its own sake. A fabricated accomplishment survives a resume screen and then gets probed for ten minutes by someone who interviews for a living, and you are the one in the room.

The three verdicts

A maybe is not a hedge, it is a specific thing: the model found real overlap and a real problem, and the decision is yours.

maybe64/100Machine Learning Engineer, Ranking at Meridian Labskarani qualify

Strengths

Has built the measurement layer a ranking team needs, if not the ranker
Built the uplift-measurement library the growth team now ships every experiment through: doubly-robust estimation with sensitivity bounds, so a result that depends on an untestable assumption says so.

Gaps

highProduction ranking or recommender systems
Reframe as measurement: the posting's second paragraph is about trusting offline evaluation, which is the uplift library's whole subject.
mediumPyTorch at training scale
None worth writing. Say so rather than stretching.

Red flags

  • Comp is undisclosed and the company has no published band, so the SF-band test cannot be applied from the posting.

Recommended positioning

Apply as the person who will tell them whether their ranker actually improved, not as a second ranking engineer.

A real stretch on the modelling, a real match on the measurement. Worth one application if the week is light, not worth the strongest cover letter she has.

qwen3:4bqual-v7

And a skip says what failed rather than just scoring low:

skip21/100Senior Software Engineer (Hybrid, Boston) at Calderwood Healthkarani qualify

Strengths

The on-call and reliability expectations are ones she has met
Ran the on-call rotation for three years and wrote the incident review process; mean time to acknowledge fell from 22 to 4 minutes after the paging rewrite.

Gaps

highThree days a week in the Boston office
highUS work authorization, no sponsorship offered

Red flags

  • Hybrid with a named office and no relocation support.
  • Posting states sponsorship is not available.

Hybrid in Boston with no sponsorship fails both qualifying shapes: it is not global-remote, and it does not sponsor relocation. The skill match is irrelevant to that.

qwen3:4bqual-v7

Notice that the skip still lists a strength. The shape failed, not the candidate, and saying so is what makes the verdict arguable — if the posting had offered relocation, this is a different answer.

What goes into the prompt

Four things, in two parts.

The stable part — the instructions, your resume, and your taste calibration from past verdicts. Identical for every posting in a pass.

The volatile part — the posting.

That split exists for prompt caching, and it is load-bearing: putting per-posting content above the breakpoint silently kills the cache and multiplies the bill. There is a test asserting the stable prefix is byte-identical across postings.

Memory is injected too, scoped to the company: distilled facts from past verdicts and outcomes, rendered as a block with an explicit instruction that they are context and never override a dealbreaker in the posting itself. Memory is how they get there.

The feedback loop

karani verdict 1482 apply karani verdict 1544 skip

Each verdict becomes a few-shot [posting → reaction] pair in the next qualify prompt, and a distilled fact in the memory ledger. The pipeline’s taste converges on yours with no retraining and no eval harness — the verdicts are the eval.

Disagreements teach the most. A skip on something scored 82 is worth ten agreements.

Agent mode

karani qualify --agent --limit 5

The qualifier gets tools — web search, page fetch, GitHub org, Wikipedia — and gathers evidence about a company before ruling. It can find out whether a company that says nothing about pay bands has published one elsewhere, which is exactly the gap the pre-filter cannot close.

It costs five to ten times as much per row, so it is for top candidates and never the daily batch (ADR 0007). The loop is bounded on iterations and tool calls, and nudged toward a final answer when the budget runs down.

Agent mode records what it looked at, so a verdict that leaned on a web result says so.

Idempotence

A posting is re-qualified when, and only when, its content hash or your resume hash has changed. So:

  • Running qualify twice costs nothing the second time.
  • Editing your resume re-judges the whole shortlist, because what it was judged against changed.
  • Overlapping runs are safe.
karani qualify --resume path/to/other-resume.md # judge against a variant

A fit score is not portable

This is the one thing on this page that will cost you money if you ignore it.

A fit score is only comparable within the model and prompt version that produced it. Measured over 598 rows: one model’s mean score was 38, with 2 rows above 80. Another’s mean was 47, with 31 above 80. A third sat at 51.

The autopilot’s draft floor had been tuned against the third and matched almost nothing under the first (ADR 0022). So:

  • karani funnel pools fit bands only when one scorer produced every score, and otherwise reports per-scale with a warning.
  • Every qualification row stores its model and prompt version — that is what the foot of the plates above says.
  • Change the qualify model and re-check [autopilot] min_fit.

Failure is a verdict, not an exception

A malformed response downgrades the row to maybe with an explanation, and the batch continues. A missing API key or a spent budget swaps in the local model and says so once. Nothing about qualification is allowed to kill a pass — a bad model day should cost you one unreviewed posting, not the hour.

Prompts are versioned

PROMPT_VERSION and AGENT_PROMPT_VERSION are bumped on any material change, and every stored row carries the version it was judged under. That is the only thing that makes “old data” and “new data” distinguishable after the fact, which is what A/B and rollback need.

Next

Last updated on