Local-first · Fair · Explainable

Hiring Agent

An AI-powered resume-to-score pipeline that runs on your own hardware — enriches candidates with real code-host evidence, and flags projects that were vibe-coded by an AI rather than engineered by a human.

🔒 PII never leaves the machine ⚖️ GDPR-aware 🤖 Vibe-coding detector
Why now

Screening is broken — twice over

Volume

Hundreds of resumes per role. Manual review is slow, inconsistent, and biased.

🔐

Privacy

Resumes are dense PII. SaaS screeners ship that data to third-party clouds.

🤖

The new problem

Anyone can prompt an agent to ship a polished "full-stack platform" — with zero real coding skill.

We solve all three — locally, fairly, and with a signal nobody else has.

The concept

Resume in → explainable score out

1

Extract

PDF → structured JSON (basics, work, projects, skills) via a local LLM.

2

Enrich

Pull public signals from GitHub & Codeberg — repos, commits, contributions.

3

Score

Rubric-based evaluation with per-category evidence + an authorship flag.

Every score carries its reasoning — a recommendation for a human, never an automatic verdict.

The rubric

Four categories, capped at 120

🌐 Open Source 35

🚀 Self Projects 30

🏢 Production 25

💻 Technical Skills 10

Fairness is built in

Scoring is forbidden from using:

  • Name, gender, demographics
  • University or institution
  • GPA / academic grades
  • City or location

+20 bonus (GSoC, blogs, portfolio) · deductions for tutorial-only / link-less projects.

Architecture

Layered & local-first

╭──────────────────────────────────────────────────────────╮
│ Presentation     Web demo / sealed desktop GUI            │
├──────────────────────────────────────────────────────────┤
│ Governance       consent · retention · erasure · audit ·  │
│                  human-in-the-loop gate (GDPR Art. 22)     │
├──────────────────────────────────────────────────────────┤
│ Orchestration    pipeline service                         │
├──────────────────────────────────────────────────────────┤
│ Providers   resume-parser │ code-hosts      │ LLMs         │
│             PDF/PyMuPDF   │ GitHub·Codeberg │ LM Studio    │
├──────────────────────────────────────────────────────────┤
│ Storage          encrypted local vault (PII) +            │
│                  pseudonymous evaluations + cache          │
╰──────────────────────────────────────────────────────────╯
The privacy insight

Only a public username ever leaves

╭───────────── Recruiter's machine (trust boundary) ─────────────╮
│  resume.pdf ─▶ parse ─▶ PII vault (encrypted, local)           │
│                  │                                             │
│                  ▼                                             │
│            LOCAL LLM ──── extraction + scoring                 │
│                  │        (PII never leaves)                   │
│                  ▼                                             │
│      extract public handle only ──┐                           │
╰───────────────────────────────────┼───────────────────────────╯
                                     │  ONLY "github.com/jdoe"
                                     ▼  (no resume data)
                          ╭───────────────────────╮
                          │ GitHub / Codeberg API │  public data
                          ╰───────────────────────╯

Resume PII and code-host queries are two separate flows. The cloud LLM option is the only thing that breaks this — so it is off by default, warned, and audited.

Evidence sources

Beyond GitHub

🐙

GitHub supported

Rich REST API: repos, contributors, commits. The primary source.

🦊

Codeberg added

Forgejo/Gitea API. Classification adapted (no /contributors); co-author trailers still parsed.

🗄️

SourceForge dropped

No reliable per-user / per-author commit API — would produce misleading scores.

Same project shape from every provider, so selection & scoring stay platform-agnostic.

The differentiator

Did a human build it — or an agent?

✓ AI-assisted (fine)

Many independent human commits, real iteration & debugging, AI co-authors some work. Normal in 2026.

⚠ Vibe-coded (flag)

AI authored ~everything, one-day dump, no iteration, the candidate has almost no independent commits anywhere.

We don't claim "AI wrote this." We surface a low-real-coding-confidence review flag — and recommend a live interview.

How the detector works

Weighted authorship-risk (0–100)

AI co-author ratio Tier 1

up to +40 — bot logins & Co-Authored-By: Claude

Low human commits

up to +20

Temporal compression

up to +15 — built in one window

History poverty

up to +10 — single "Initial commit" dump

No issues / forks / scaffolding

up to +5

Generic messages · AI-marker files

up to +5 each (tie-breakers)

<30 ok 30–60 review >60 flag

Maintenance bots (dependabot, renovate, CI) are explicitly excluded — they never trigger the flag.

The demo · what HR sees

Three candidates, one revealing moment

CandidatePlatformScoreAuthorship
A — real engineer
upstream OSS, multi-year history
GitHub88/120✓ ok · 9 human commits
B — vibe-coder
"AI startup platform", one-day build
GitHub71/120⚠ flag · 95/100 risk
C — contributor
genuine Codeberg work
Codeberg79/120✓ ok

Candidate B looks impressive on the surface — every commit is Co-Authored-By: Claude. That's the "wow, it caught that" moment.

Deployment

One model. Identical scores. No HR GPUs.

  HR PC (8GB, no GPU)  ╮
  HR PC (16GB)         ├──LAN──▶ ╭──────────────────────────╮
  HR PC (64GB)         ╯         │ Inference server (on-prem)│
                                 │ Qwen2.5-32B · pinned ver. │
                                 ╰──────────────────────────╯

⚖️ Consistent

Every candidate judged by the same pinned model — fair & auditable.

💻 No GPUs

HR PCs are thin clients; only one machine needs the GPU.

🏠 On-prem

Traffic stays on the company LAN — never the internet.

The selling point

The laptop demo is the product

  DEMO (your laptop)                  PRODUCTION (HR dept)
  ╭─────────────────────╮            ╭─────────────────────╮
  │ App ──▶ LM Studio   │            │ HR PCs ──LAN──▶ GPU │
  │     localhost:1234  │  one env   │       inference srv  │
  ╰─────────────────────╯  var ───▶  ╰─────────────────────╯
       same code path · identical behavior

Ship to a real HR department by changing one variable: INFERENCE_BASE_URL.

Compliance

Every concern maps to a feature

GDPR concernHow we handle it
Data residencyLocal LLM by default — PII never leaves the device
Automated decisions (Art. 22)Recommendation + evidence; human-in-the-loop required
Right to erasure / accessDelete & export a candidate by pseudonymous ID
Data minimizationPII vault separate from evaluations
Security (Art. 32)Encryption at rest; no plaintext resume cache
AccountabilityAppend-only audit log (model, mode, time)

Engineering guidance, not legal advice — a formal DPIA + counsel sign-off is required before production use.

Where we are

Built today → production path

✅ Done

  • Vibe-coding analyzer (tested)
  • LM Studio / OpenAI-compatible provider
  • FastAPI web demonstrator (offline-safe)
  • Architecture + GDPR checklist docs

🛣️ Next

  • Live Codeberg + GitHub providers
  • Encrypted storage & governance layer
  • Central on-prem inference deployment
  • Sealed desktop build

Local-first. Fair. Explainable. And it catches what every other screener misses. Let's deploy it.

1 / 14
← Swipe to navigate →