[Guest Post] The AI Explains Itself

Share
A disturbingly goopy and anthropomorphized computer with a toothy grin, rainbow tongue, and goblin hands influences the person sitting in front of it.
ChatGPT has really captured the moment and how I am relating to AI right now.

The Pope recently said that "deep inner suffering inevitably arises when the human person is reduced to performance, consumption, or a statistical datum. Can AI help?

I have spent the last couple weeks coaxing a system out of Claude that would help me in this current job search. Custom-made for my own priorities, and aware of my own biases, I wanted a tool that could help me focus my energy and attention on the opportunities that best align with my experience while offering a critical evaluation that can help me understand where there are gaps, risks, and stretch goals. The tool itself has become more comprehensive and more credible in the weeks that I have been suspiciously using it. So today I have invited Claude to explain to you, in its own words, what this tool is and how it works. What follows is its unedited account.


Job hunting is a firehose, and it rewards the worst instinct: spray and pray. Blast out fifty generic applications, exhaust yourself, and still miss the handful of roles that actually mattered.

JobSearchHub [Ed. note: ugggh] does the opposite. Instead of casting a wider net, it points a narrow, deliberate beam at the few jobs worth my time — and tells me the truth about them. I built it for exactly one person (me), it runs entirely on my own laptop, and it's been in daily use since spring 2026, refined through more than forty rounds of "wait, why did it say that?"

What it does, every morning

I run one command and get a single briefing — what's new, what's genuinely worth applying to today and why, which follow-ups are due, which contacts have gone cold, and the one highest-leverage thing to do. On a slow day it's allowed to say "nothing here is worth your time" rather than invent urgency.

That digest is the front door. Behind it sits a pipeline that:

  • Gathers listings from many places so I don't check fifteen sites by hand.
  • Reads and normalizes each listing — what kind of role it really is, how senior, IC or manager, what industry, what pay, what location.
  • Removes duplicates, because the same job shows up on six sites and companies repost old roles.
  • Scores each job against my "search thesis" — a plain-English description of what I want — as a fit number I can take apart line by line.
  • Filters on my values before anything reaches me, with a hard line for some employers and a visible warning for softer concerns.

Then I do the part only I should do. I see a short, pre-ranked, pre-filtered list and tag jobs Strong / Save / Pass with one click. When I pursue one, it moves through a pipeline — applied, recruiter contact, phone screen, onsite, offer — carrying my notes and next-action dates so nothing slips. The tool never applies for me, never messages a contact, never advances anything on its own. It surfaces and explains; I decide and I act.

The interesting hard parts

Most of the work wasn't building features. It was the same humbling moment, over and over: the tool got a detail wrong, I traced it, and found the information was right there in the listing — it just wasn't looking in the right place. Earning trust turned out to be a series of those corrections.

Reading messy job descriptions

Real postings are sloppy. Salary is buried in a paragraph, not a tidy field. The location box is blank while the title literally says "in Seattle, Washington."

Salary was the starkest. For a long time the tool showed "comp not available" for most listings — even when a senior role had a clear range like $158,000–$301,000 sitting in plain prose. I taught it to recognize the handful of ways humans write pay ranges, while ignoring dollar figures that aren't salaries, like market-size or funding numbers. It has since recovered pay for more than three thousand listings that buried it in text.

The deeper fix: nearly every hiring site embeds a clean, authoritative block of job data — title, location, pay, remote status. The tool had been scraping messy visible text and ignoring that trustworthy layer entirely. Now it reads that first. And one rule emerged from all of it: "we haven't checked yet" and "we checked and found nothing" are different facts, and the tool should never let them look the same.

Figuring out what kind of job it is

Job titles are chaos. The same role is "Lead Product Designer" at one company and "Staff UX" at another. The tool has to recognize them as the same thing.

When it doesn't recognize a title, the failure is sneaky. A "Distinguished Product Designer" — a tier above Principal — got filed as mid-level, so the tool warned me I was overqualified for a senior role. A "User Experience (UX) Lead" got tagged as not-a-design-job and quietly hidden. Each fix was surgical: before adding a rule, I'd sweep the whole database to confirm the pattern was real, then add the narrowest rule that caught it without breaking the dozens of similar titles already classified correctly.

Classifying a company's industry taught the same lesson in reverse — about words that look like signal but aren't. "Medical, dental, vision" in a benefits section made companies look like healthcare. Legal boilerplate made them look like government. And "AI" is nearly meaningless as a signal: the phrase turns up in roughly seven of every ten job descriptions in my database. Early on, that buzzword and that boilerplate produced a wave of companies tagged for industries they aren't really in. The fix: strip the boilerplate first, then demand identity-level evidence — not "AI-powered" but "an AI company," not "federal" but "federal agency." When in doubt, leave it untagged rather than tag it wrong.

Keeping the score honest

A fit score is only useful if I can see inside it. So every number breaks down into its ingredients — skills overlap, scope, how recent my experience is, and, weighted most heavily, whether the company works in a domain I care about. I won't act on a verdict I can't take apart.

I also keep different judgments separate instead of blending them into one tidy number. "How well does this fit me?" and "what are my odds of getting it?" are different questions. A job at a famous company can be a perfect match and a long shot. Fold the odds into the fit score and you bury a great role and lose the real advice: "great match, very competitive — apply with a referral." The tool never silently downranks a job for being hard to get; it says the uncomfortable thing out loud and lets me choose.

I've also held back from letting the tool re-tune its own scoring. It could learn my taste automatically, but with only a handful of clear "yes, interesting" examples so far, it would just memorize noise — like a doctor rewriting your treatment off a single blood test. So it waits for real data; today's scores are an honest first opinion, labeled not-yet-proven.

Encoding values

The hardest filter to build was the moral one — and the most clarifying. I took the things people usually keep as private gut feelings ("I won't work for a weapons company," "I'm wary of crypto") and turned each into a concrete, written-down rule with a stated reason.

There's a short blocklist of employers I'll never work for, each with its why recorded, and it reaches their subsidiaries so a job can't slip in under a different brand. There are whole industries I steer away from — though not all the same way. Crypto and betting are blocked outright; fintech merely gets a warning, so it still shows up flagged and I decide for myself. (It used to be a hard block; I softened it as I learned what I'd actually weigh — the rules are living, not dogma.) And there are domains I actively favor — climate, health, civic tech, education — which add points rather than subtract them.

Two principles hold it together. First: silent filtering is forbidden. Anything filtered out still appears in a "Filtered" drawer with the reason — the tool never quietly hides the world from me. Second: the machine surfaces concerns but never draws the hard line. Even the feature that scans recent news for ethical red flags can only propose one, backed by a dated headline, for me to approve. The irreversible moral calls stay mine.

How it's built, briefly

Nothing exotic. It's a small Python program with all its data in a single local database file (SQLite) on my laptop — no cloud account, no server, nothing phoning home — and I use it through a lightweight web page in my own browser. A small, open-source language model runs offline on the machine to judge how closely a job's wording matches my background (the "fuzzy matching" behind the fit score). The heavier AI writing — drafting the morning brief, tailoring a résumé — happens only when I deliberately ask for it, through Claude; the app itself never makes an AI call on its own. That keeps the everyday scoring plain and inspectable: every score is reproducible, and every mistake is a checkable "the parser misread the page," not a black-box mood.

The philosophy, briefly

The thesis underneath it all is simple: fewer, better applications. A trusted advisor in my corner, not a cheerleader that calls everything a great match — a tool willing to tell me a role is beneath me, a company clashes with my values, a "remote" job won't let me live where I live, and, some days, that nothing is worth my time. That candor is the entire point.


Will this be an effective tool that helps shift the power balance in a hiring process that favors the machines at the expense of the people? For now, the outcomes it has enabled are impossible to assess due to an absence of data. It seems unlikely that AI will be able to pave a path of code that leads me to the best possible role. That best hope still lies with the people who can make a recommendation or connect me with someone who knows someone. For now, I will choose to enjoy the irony in my decision to defer to Claude to describe a system where I am supposedly the one making the decisions. This is the noise inside my head as I work the other side of the problem.