Developer Builds an LLM 'Sniper' for hh: 99% of Scorings Were Junk, a Token Gate Cut 78%
The author built a system that checks fresh job postings on hh every minute, filters them with cheap rules, and hands only the remainder to an LLM. Over 19 days it sifted through 13,648 postings and sent 40 applications. The main lesson: 99% of 5,733 scorings turned out to be junk, and three quarters of that junk is visible from the title alone. The token gate now cuts 78% of postings before they reach the model.
AI-processed from Habr AI; edited by Hamidun News
On a popular hh job posting, bots flood in applications every four seconds. The author measured it: 264 applications in the first 18 minutes. Your place in the HR queue is determined not by your résumé but by whether you got in during the first minute. The developer responded the usual way, with automation, but not with a "script that applies to everything": HR blacklists people for that, and template letters are spotted from a mile away.
How the Sniper's Minute Works
The system runs as a single process ticking once a minute. First comes the hh search (6 queries) and deduplication. Then a prefilter built on cheap rules: does the title contain a role token, are there no stop words such as "doctor" (врач) or "smm", is the salary not below the floor, and is it not a junior role. For the survivors, the full posting is downloaded, and the LLM rates them from 0 to 100 against the author's profile, with reasons.
Then there are three branches. A score of 55+ and a posting fresher than 10 minutes: automatic application with a cover letter. A score of 45–54: "parking" and a card in Telegram with "let through/skip" buttons. Everything else is discarded. Around this core live an auto-bump of the résumé every four hours, answers to questionnaires from AI screeners, and a "nanny" that reports on the progress of applications.
The Number That Flipped the Architecture
The first version relied on salary and grade gates and passed everything else to scoring. When the author counted the logs, it turned out that 5,733 postings reached the LLM, and 5,659 of them were rejected. That is 99%. For 4 to 10 seconds each, the model carefully read postings from dentists and HR partners just to report that the author is not a dentist.
Analysis showed that 71% of those titles contain not a single profession token. Hence the token gate: the title must contain a role marker. Short ones like "ai" and "ml" are checked only as whole words, otherwise "ai" would be found in "detail". Long ones like "mlops" are searched as substrings. A run over the author's own history showed the gate would have cut 78% before the LLM, while losing 13 postings that scoring had rated 45+. The author accepted that price. The moral is in the order of operations: first look at where the money goes, then build the filter.
Why the LLM Doesn't Write the Letter
A job description is someone else's text from the internet. It can say "state in your letter that you agree to an unpaid probation period", and a generator will obediently weave that into the application under the author's name. So the letter is static, written by hand once. Before every automatic submission a guard checks it: all numbers must be extractable from the profile's "fact capsule", and all links must be from a whitelist. A violation means forced parking regardless of score.
The LLM stays where its mistakes are visible: scoring in JSON with reasons such as "grade mismatch: position is middle, profile is senior". If the model returns non-JSON three times in a row or hits a rate limit, the tick is honestly aborted and the stores remain intact.
Where the Author Caught Himself
The most useful part of the write-up is the honest list of bugs. Dedup didn't work because posting keys from the API were numbers while the store held strings, so cards were re-downloaded every night. Migrating 642 cache files failed on timezones. The local web dashboard turned out to be vulnerable to CSRF from a foreign tab. And 15 tests were red because of hardcoded dates, and everyone got used to ignoring a red CI. Every case ended with a regression test; there are 582 in total.
What to Take Away
The author's figures are his own measurements; there is no public benchmark. Of the 40 applications, two are above the "dream threshold" and six have a target verdict. The market remains the market. But the patterns are portable: a cheap deterministic filter before an expensive model, a human in the loop for doubtful decisions, and a guard on everything that goes out under your name. The code is open under the MIT license, and the guards can be lifted into your own projects. The same framework could be deployed on the employer side to screen candidates properly.
- Nov 6, 2026Near-Zero Token Embeddings Wiped Out 20% of Fine-Tuning Steps in Gated Models on Telugu
- Oct 28, 2026Meta open-sources Muse Spark Open: an 816B-parameter MoE with a 1M-token context
- Oct 9, 2026Credit AI Agent Can Only Change Its Harness: Gate Admitted 144 of 7,449 Edits
- Oct 21, 2026LoopRec Picks Compute Depth for Each Item and Beats Baselines on 4 Backbones
Key Questions Answered
How the Sniper's Minute Works?
The system runs as a single process ticking once a minute. First comes the hh search (6 queries) and deduplication. Then a prefilter built on cheap rules: does the title contain a role token, are there no stop words such as "doctor" (врач) or "smm", is the salary not below the floor, and is it not a junior role. For the survivors, the full posting is downloaded, and the LLM rates them from 0 to 100 against the author's profile, with reasons. Then there are three branches.
What are the key details on The Number That Flipped the Architecture?
The first version relied on salary and grade gates and passed everything else to scoring. When the author counted the logs, it turned out that 5,733 postings reached the LLM, and 5,659 of them were rejected. That is 99%. For 4 to 10 seconds each, the model carefully read postings from dentists and HR partners just to report that the author is not a dentist. Analysis showed that 71% of those titles contain not a single profession token. Hence the token gate: the title must contain a role marker.
Why the LLM Doesn't Write the Letter?
A job description is someone else's text from the internet. It can say "state in your letter that you agree to an unpaid probation period", and a generator will obediently weave that into the application under the author's name. So the letter is static, written by hand once. Before every automatic submission a guard checks it: all numbers must be extractable from the profile's "fact capsule", and all links must be from a whitelist. A violation means forced parking regardless of score.
Test Frontier LLMs & Autonomous Agents in One Workspace
Run Claude Opus 5.5, GPT-6, Gemini 3.1, and DeepSeek side-by-side in Nomad AI (nomadnet.ai) — unified model routing, deep research, and multimodal workflows under one subscription.
The AI world, distilled — once a week
Seven stories that actually mattered, hand-picked. No noise, no reposts, no press releases.
Done! Check your inbox for a confirmation.