Inspiration
Hiring is one of the most time-intensive processes in any organization — and most of that time is spent on tasks that don't require human judgment. Writing job descriptions, parsing resumes, scheduling interviews, and sending rejection emails. I asked a simple question: what if none of that required a human?
HireOS was born from that question. I wanted to build a system where a recruiter could type a role name, walk away, and come back to a shortlisted candidate with a calendar invite already sent.
Target Users
Recruiters, HR teams, and fast-growing startups who need to scale hiring without scaling headcount.
Technologies Used
- Airia Cloud: Pipeline orchestration with AI nodes, conditional branching, HTTP requests, and Python code blocks
- Claude Haiku 4.5: Powers all AI operations: parsing, scoring, generating, formatting across both agents
- Confluence: Source of truth for role requirements, queried by Agent 1 at runtime
- PDFShift: Converts interview questions to a hosted PDF via AWS S3
- Google Calendar API: Auto-schedules Google Meet interviews for shortlisted candidates via OAuth 2.0
- Slack Webhooks: Real-time hiring decision notifications to the #hiring channel
- Flask: Proxy server handling CORS, OAuth token refresh, and frontend serving
- Railway: Production cloud deployment
- GitHub: Source control and resume PDF hosting
What it does
HireOS is a two-agent autonomous hiring pipeline built entirely on Airia Cloud.
Agent 1 — Job Setup Pipeline connects to Confluence to pull internal role requirements, generates a polished job post, and produces a PDF interview kit — all from a single role title as input.
Agent 2 — Candidate Evaluation Pipeline accepts any resume URL, parses the PDF, extracts skills, and scores the candidate against job requirements using the formula:
$$\text{match\%} = \frac{\text{matched skills}}{\text{total required skills}} \times 100$$
If the score meets the threshold (≥ 50%), the candidate is shortlisted, a Google Meet interview is scheduled via the Calendar API, and the hiring team is notified on Slack. If rejected, a personalized rejection email is drafted automatically.
How we built it
- Airia Cloud orchestrates both pipelines as multi-node workflows with conditional branching
- Claude Haiku 4.5 powers every AI node that includes nodes for resume parsing, skill scoring, Slack message generation, and JSON formatting
- Confluence serves as the source of truth for role requirements
- PDFShift converts interview questions into a hosted PDF
- Google Calendar API schedules Google Meet interviews with OAuth 2.0
- Slack Webhooks push real-time notifications to the hiring channel
- Flask acts as a proxy server handling CORS, Google Calendar OAuth token management, and response parsing
- Railway hosts the production deployment
Challenges we ran into
Google OAuth token management: OAuth 2.0 access tokens expire in 1 hour. I implemented automatic token refresh using the refresh token stored in the deployment environment, ensuring the Calendar integration works reliably in production without manual intervention.
Airia node variable injection: Variables injected via
<variable value="..." />tags only resolve correctly in user message segments, not in system prompts. This caused Resume_Scorer to receive an empty candidate profile when the variable was included in the system prompt, resulting in inconsistent scoring. Moving data flow to node connections fixed this.Conditional branching with no dead ends: Airia requires every node to have at least one connected output. Designing a flow with conditional reject/shortlist branches while ensuring JSON_Output_Formatter always received the correct data, regardless of the branch taken, required careful node ordering.
Accomplishments that we're proud of
Five live integrations in one pipeline:
- Confluence
- PDFShift
- Google Calendar
- Slack
- Airia Cloud
All working together autonomously in a single end-to-end flow. Every integration is real and production-grade, not mocked.
The entire journey from submitting a resume URL to receiving a Google Meet invite and a Slack notification takes under 10 seconds. No human touches anything between input and outcome.
What we learned
Building on Airia taught me how to think in pipelines rather than code. The challenge of making AI outputs deterministic by setting the temperature to 0, using strict JSON-only prompts, and explicitly defining formatting nodes was a significant learning experience.
I also learned that multi-system integrations require careful attention to token lifecycles, API rate limits, and failure modes at every integration point.
What's next for HireOS
- Support for multiple job roles simultaneously
- Candidate ranking across a pool of applicants
- ATS (Applicant Tracking System) integration
Live App Limitations
- Interview Scheduling invites are sent to a temporary mail account owned by me. Judges will not receive a personal invite but can verify the integration worked via the Slack notification which shows "Google Meet scheduled ✅"
- The Confluence integration pulls from a private workspace configured for the Data Scientist role. Testing with other role names may return generic results.
Built With
- airia
- claude
- confluence
- css
- flask
- github
- html
- javascript
- python
Log in or sign up for Devpost to join the conversation.