The harness is closer to an agentic coding tool like Claude Code than a chatbot, and it sits on top of an agent architecture I rebuilt twice as the field moved.
- Migrated the agent fleet through three generations: hand-rolled orchestration → Pydantic AI (with MLflow) → Claude cloud-managed agents — exposing internal tools over MCP and supporting bring-your-own-key.
- Encoded business-specific workflows as modular skills (SKILL.md-style files) rather than baking them into the agent’s core prompt: only a lightweight skill index loads into the system prompt, with each skill’s full instructions loaded on demand — letting the harness scale to many workflows without bloating context.
- Built tool authorization and context-scoping as a shared backend core rather than a harness-specific feature: the chat-based harness and the voice layer’s profile-based behavior both run on the same tool catalog, entitlement checks, and progressive-disclosure logic instead of duplicating it per channel.
- Built the harness as a role-specific agent framework giving property staff tool-using AI workflows with human approval on risk-bearing actions.
- Designed tenant scoping throughout the harness so an agent’s context, memory and available tools never cross property/organization boundaries in a multi-tenant deployment.
- Evaluated LangSmith, LangGraph, Vellum and Galileo, and AWS Bedrock, on latency, traceability, cost and vendor lock-in before committing to an agent framework.
- Integrated the platform’s RAG/knowledge layer directly into the harness so agents ground responses in the same retrieval pipeline used elsewhere on the platform.