Stop bad hires before they cost you $50,000. oHR is build for recruiters, HR teams, and hiring managers!
Inspiration
This started as a "loop engineering" hackathon exploration — could a multi-agent system that genuinely iterates (not just one-shot prompting) do something a single AI call can't? We first explored it as a multi-persona decision-debate engine, but realized resume screening was the sharper fit: it's fact-reconciliation, not opinion-debate, and the stakes are real. Data backs the problem up — surveys put resume dishonesty anywhere from 21% to 70% depending on methodology, with title inflation, embellished responsibilities, and inflated team sizes as the most common lies. Recruiters are also drowning in a new wave of AI-generated, AI-polished resumes that are harder to eyeball-screen than ever. We wanted to build something that gives a resume the scrutiny a thorough human reviewer would, transparently, rather than a black-box AI verdict.
What it does
Candidate uploads a resume + target job title. Three specialist agents (Title, Content, Credentials) review it independently and in parallel. A reconciliation loop then cross-examines every flag against every other flag, round after round — the loop's exit condition is computed by code diffing the flag set before/after each round, not by an LLM self-reporting "I'm done." Every candidate then completes a mandatory "Interview with oHR": three concrete, resume-specific questions (a skills-depth probe, a project-vs-technology question pulled from an actual bullet on their resume, and a flag-clarification question), answered live by voice and transcribed locally. The recruiter view shows the entire pipeline — reconciliation rounds, verified/positive findings, flagged phrases highlighted directly on the real uploaded PDF, and every interview answer paired with its evaluation. The candidate only ever sees a simple decision: approved, or under review.
How we built it
FastAPI + vanilla JS/HTML (no framework, kept deliberately lean), Claude (Anthropic API) powering every agent, faster-whisper for local speech-to-text, and PDF.js for real in-document highlighting (rendering pages to canvas with a positioned text layer we color by flag severity). json_repair handles the inevitable malformed JSON from verbatim-quote-constrained model output, with a retry-with-correction fallback behind it. The pipeline is split into separate /reconcile → /score → /answer API stages specifically so the UI gets real checkpoints instead of one long opaque wait, with full request/round-level timing logged to a local file for debugging. Local JSON files for session storage — no DB needed for a prototype like this.
Challenges we ran into
Accomplishments that we're proud of
What we learned
What's next for oHR
Real external verification — company-existence checks and resume-listed link fetching, both buildable without new ToS risk. LinkedIn integration done properly, via candidate-consented OAuth self-disclosure rather than any form of scraping. Licensed verification provider integration (National Student Clearinghouse, Truework-style APIs) for actual degree/employment verification, gated behind FCRA-compliant consent flows. Faster reconciliation through smarter parallelization. And a real multi-candidate recruiter dashboard beyond today's single-session local storage.
Built With
- claude
- langfuse
- python
- whisper
Log in or sign up for Devpost to join the conversation.