IntelligentOldMan: turning a live inbox into agent-ready knowledge
IntelligentOldMan is my experiment in answering a uncomfortable question: how much of your inbox judgment can you hand to an autonomous system without losing accountability? Not “summarize my mail” — classify intent, validate the result, store it for retrieval, and let agents reason over the whole mailbox later.
Architecture at a glance
The pipeline is event-driven. New mail arrives through Microsoft Graph webhooks. A Spring Boot service pulls the message, runs intent classification through a local LLM, validates the structured output against a schema, and persists embeddings alongside metadata in PostgreSQL with pgvector. Infrastructure is provisioned on Azure with Terraform — the boring parts matter when you're iterating on model behavior weekly.
- Ingest: Graph subscription → queue → idempotent processing.
- Classify: Prompt templates with JSON-schema enforcement (category, confidence, urgency).
- Store: Chunked content + vectors for downstream RAG agents.
- Observe: Traces on classification failures — where the model hedges is where you tune.
Why local LLM classification first
Email content is sensitive. Starting with a local model for intent extraction keeps the first pass inside a boundary I control before anything hits a cloud completion API. The tradeoff is operational — you own latency, versioning, and failure modes — but that's exactly what I wanted to learn.
What's still hard
Validation loops that know when to escalate to a human. Retrieval that returns the right thread context, not just semantically similar paragraphs. Agent tools that can act on classification without over-automating replies. The stack is familiar; the judgment boundaries are not.