Satori Canton

How the Job-Fit Agent Works

I build AI agents for a living — so the agent that evaluates my own fit is itself a case study. This page is the architecture, the honesty contract, and the engineering trade-offs, in the open.

The pipeline

  1. 1

    Ground truth

    Resume, case stories, and a supplemental context file compile into one verified background document

  2. 2

    Model pool

    A random primary is drawn from vetted free models; the rest queue as fallbacks

  3. 3

    Generation

    One attempt per model, hard timeout, live progress streamed to your screen

  4. 4

    Validation

    Shape-checked, score-clamped, grade re-derived, every field whitelisted and sanitized

  5. 5

    Result

    Cached 7 days with a shareable link — same JD, same answer, instantly

The honesty contract

The agent's system prompt forbids fabricating experience, companies, metrics, or outcomes. Everything it can claim comes from a compiled ground-truth document — the same resume, case stories, and skills you can read on this site. The grading scale is calibrated so that 70+ means genuinely strong fit, and the prompt explicitly instructs the model to score below 40 when a role is outside my wheelhouse. If you paste a Staff Java Engineer role, you will get a bad grade, on purpose.

Scores are clamped server-side and the letter grade is re-derived from the clamped score — so a confused model can't return “score: 95, grade: F.”

Direct vs. implied evidence

A resume can't list every skill thirty years of shipping software implies. Nobody writes “git” on a resume — but a job description might require it. The agent's ground truth includes a supplemental context section: implied competencies, each anchored to documented work, plus a list of honest boundaries — things I genuinely have not done, which the agent is forbidden to soften.

When the agent credits an implied skill, it must label it. In your results, those strengths carry an Implied badge — inferred from adjacent documented work, not stated on the resume, and a good thing to probe in the virtual interview. Implied is not fabricated, and you can always see the difference.

Reliability on free models

This site runs on OpenRouter's free tier — which means flaky models, surprise delistings, and account-level rate limits are the operating environment, not edge cases. The answer is a curated model pool: each analysis draws a random primary from vetted models and falls back through the rest, one attempt per model, with a dynamic router as the last resort.

You can watch this happen. While your analysis runs, the progress line is not decorative — it streams the actual pipeline events: which model is being asked, when one fails validation, when the pool falls back. If a model returns malformed JSON, invents fields, or mislabels evidence, layered validation catches it: shape checks on every item, field whitelisting, link sanitization, and normalization of anything ambiguous toward the more modest claim.

Model pool + fallback
NDJSON progress streaming
Schema validation
Output sanitization
Score clamping
Rate limiting

Caching & share links

Every analysis is cached for seven days, keyed by a hash of the job description, and gets a shareable URL — so you can send the scorecard to a colleague without them re-running it. Share links only appear when the cache write is confirmed; you will never copy a dead link.

Why show you this?

Because this is the work. System prompts with calibrated honesty, trust boundaries around model output, graceful degradation on unreliable infrastructure, and interaction design that turns a 90-second wait into something worth watching — the same disciplines I apply at HeartStamp and for consulting clients. The evaluator is the portfolio.

See it run

Paste a job description and watch the pipeline work in real time.

Evaluate Your Role