Recruitment Inbox Agent
An in-progress, privacy-first personal agent that turns campus-recruitment emails forwarded into a dedicated Outlook inbox into reviewable applications, calendar events and a daily brief, with the model limited to semantic extraction.
Role
- Independent engineer
- Product owner
Stack
- Python
- FastAPI
- LangGraph
- LangChain
- Azure OpenAI
- Microsoft Graph
- PostgreSQL
- Azure Functions
- Alembic
Problem
Campus recruitment mail arrives as unstructured forwards from 126 and other inboxes. Turning those messages into application state, interview calendar events and a daily brief is unsafe if a language model can write the database, calendar or outbound mail directly.
Constraints
- The model may perform semantic extraction only; database, calendar and mail mutations stay in a deterministic workflow.
- The mailbox integration does not request Mail.ReadWrite and does not alter original messages.
- Attachments are not downloaded, and raw bodies or plaintext secret URLs are not sent to the model.
- Timezones are never inferred silently from a company name, sender domain or location; ambiguous times enter human review.
- Gmail, IMAP and browser automation are out of scope unless implemented separately.
My contribution
- Designing and building the privacy-preserving mail preparation path, including HTML sanitisation, tracking-pixel removal and encryption of assessment or interview action links before the model boundary.
- Implementing deterministic company matching against a reviewed catalog, with unresolved or ambiguous identities sent to review rather than guessed.
- Building the LangGraph-orchestrated workflow that maintains application state, recruitment events and a review queue, then writes eligible interview or assessment-deadline events to Outlook Calendar and assembles a daily brief.
- Operating a personal console for reviews, mailbox connection and run switches while keeping PostgreSQL as the domain source of truth.
Architecture / methodology
- Sync Outlook mail through Microsoft Graph, recover nested 126 or other forwarded sender context, and run a deterministic recruitment prefilter.
- Replace discovered URLs with opaque action-link references, encrypt secret-bearing destinations, and give the model only sanitised text plus those references.
- Validate structured extraction, then either apply deterministic domain writes or pause for human confirmation of timezone, company, reschedule or calendar questions.
- Keep LangGraph as the orchestrator and PostgreSQL as the business source of truth, with idempotent ingestion so retries do not duplicate records.
Evaluation
- The repository test plan covers privacy sanitisation, 126 and nested-forward recovery, company resolution, extraction contracts, review resume, calendar planning, daily-brief rendering and authentication boundaries.
- Local quality commands documented in the README are ruff, mypy and pytest, with optional PostgreSQL integration tests.
- No public accuracy, latency or third-party usage metric is claimed from the available evidence.
Current status
- The documented Phase 0–9A scope is implemented in the private repository, including console, review and daily-brief surfaces.
- The project remains in progress as a personal campus-recruitment inbox agent; no multi-tenant product or third-party usage is claimed.
Evidence and links
The repository README describes a privacy-first personal recruitment inbox agent that forwards campus mail into Outlook and limits the model to semantic extraction.
Private repository READMEThe documented architecture separates sanitisation and deterministic validation from LangGraph orchestration, with PostgreSQL as the domain source of truth and human review for unsafe judgements.
Private repository README and design documents