Show HN: LIA – a self-hosted multi-agent AI assistant (FastAPI and LangGraph) LIA, a self-hosted multi-agent AI assistant built with FastAPI and LangGraph, has been released as version 1.25.5. The assistant features LangGraph orchestration, human-in-the-loop controls, enterprise observability, and full i18n support across six languages, addressing issues like unpredictable costs and hallucinations. Intelligent multi-agent conversational assistant with LangGraph orchestration, Human-in-the-Loop, enterprise-grade observability, and full i18n support 6 languages If you find my project and work valuable, I would be grateful for a star on GitHub. Thank you Features features • Admin & Monitoring administration--monitoring • Quick Start quick-start • Architecture architecture • Documentation documentation • Contributing contributing Version 1.25.5 — The phone assistant becomes trustworthy — and the planner learns to converge. A full day of live-call debugging turns agentic telephony from a promising prototype into a disciplined agent. On the call: an instant localized greeting at pickup an empty first message caused a multi-second silent standoff , a current datetime anchor so "tomorrow" resolves to the right weekday out loud, a pinned multilingual voice over telephony-native ulaw 8000 audio, a pinned thinking-free LLM the platform default was caught reciting its English reasoning aloud mid-call , and a real hang-up via the end call system tool. Above all, a mandate boundary : the assistant never accepts an unrequested expense or commitment — even a 3€ topping — it captures the offer and its price, defers to the user, and the post-call summary must state every cost and flag every open point for a call-back. Around the call: the vendor agent re-syncs lazily on config drift no more deactivate/reactivate , a stuck "call already active" row self-heals by probing the vendor including the deleted-agent 404 case, grace-window protected , and vendor errors are diagnosable in one log line. In the pipeline: the post-call follow-up "crée le rdv" kept producing a next-hour default slot instead of the agreed Saturday 9:30 — resolved facts now ride in the planner's human message where models actually read them; the semantic validator finally validates single-step mutations skipped as "trivial" before — the whole class was unguarded , survives a structured-output prompt conflict with an A/B-proven fix 0/3 → 6/6 tool calls plus a one-shot retry, rejects fabricated placeholder emails deterministically RFC 2606 , and on replan the planner is finally shown its own previous plan with a fix-don't-rebuild directive it used to oscillate — fixing the date on one pass, losing it on the next . Final net: an invalid mutation plan that exhausts its replans is never silently executed — LIA asks the user instead. Verified: 10,344 fast unit tests green, mypy strict clean on 900 files, every fix reproduced then re-proven against live prod logs and real calls. — 17 July 2026. Why LIA? why-lia Try LIA Online try-lia-online Built by an AI, Directed by a Human built-by-an-ai-directed-by-a-human Screenshots screenshots Features features Administration & Monitoring administration--monitoring Quick Start quick-start Architecture architecture Technologies technologies Documentation documentation Tests tests CI/CD cicd Performance performance Security security Contributing contributing Support support License license Acknowledgments acknowledgments LIA solves the fundamental problems of today's AI assistants: | Problem | LIA Solution | |---|---| Unpredictable LLM costs | Real-time token tracking, budget alerts, 93% optimization | Uncontrolled hallucinations | Human-in-the-Loop HITL with 6 approval levels | Fragmented integrations | Unified multi-domain orchestration 19+ agents + MCP + sub-agents | Limited observability | 419 Prometheus metrics, 25 Grafana dashboards, email alerting with runbooks, GeoIP analytics | Inconsistent performance | Gemini embedding-001 with asymmetric task types, semantic routing with hybrid scoring | 📅 "Find my meetings for tomorrow and send a reminder to all participants" 📧 "Summarize my unread emails from this week that have attachments" 👥 "Update the companies of my contacts who work at startups" 🔔 "Remind me tomorrow at 9am to call Marie for her birthday" LIA is available as a hosted service at https://lia.jeyswork.com/ — no installation required. Closed beta: Access is currently limited to a restricted number of users, at the administrator's discretion. To request an invitation, contact. liamyassistant@gmail.com "Speed comes from the AI. Quality comes from the framework." Nearly 100% of this codebase was written by an AI , under human direction: a written engineering rulebook, blocking automated checks, systematic review, adversarial audits. The result is measured, not proclaimed: 32 functional domains | 420,000 lines of code excl. tests | 11,900+ automated tests | 120+ ADRs | 153 versions shipped | 6 languages, parity enforced in CI | 419 Prometheus metrics | 8.3/10 technical audit, 24 normalized areas | The full story — method, trade-offs, results and what remains to be done, weaknesses included: lia.jeyswork.com/story https://lia.jeyswork.com/story The audit itself — 24 normalized areas mapped to ISO/IEC 25010:2023, every score backed by executed evidence, 7 open worksites included, with the protocol and the full standalone report: docs/audit/ /jgouviergmail/LIA-Assistant/blob/main/docs/audit/README.md /jgouviergmail/LIA-Assistant/blob/main/docs/assets/screenshot-homepage.png Dashboard — Homepage with quick access, usage statistics, and personalized greeting /jgouviergmail/LIA-Assistant/blob/main/docs/assets/screenshot-chat.png Chat — Multi-agent conversation with real-time debug panel right sidebar More screenshots /jgouviergmail/LIA-Assistant/blob/main/docs/assets/screenshot-chat-debug-panel.png Chat — Debug panel: per-message routing, tool calls, token cost and reasoning timeline /jgouviergmail/LIA-Assistant/blob/main/docs/assets/screenshot-chat-interactive-skills.png Chat — Interactive skill widgets: maps, dashboards, calendars and mini-apps rendered inline /jgouviergmail/LIA-Assistant/blob/main/docs/assets/screenshot-settings-preferences.png Settings — Preferences: connectors, MCP servers, language, timezone, and themes /jgouviergmail/LIA-Assistant/blob/main/docs/assets/screenshot-settings-features.png Settings — Features: LIA Style, long-term memory, interests, proactive notifications, scheduled actions, sub-agents, channels /jgouviergmail/LIA-Assistant/blob/main/docs/assets/screenshot-settings-features-memory.png Settings — Long-term memory: pinned facts, automatic extraction, edit / delete / pin per memory /jgouviergmail/LIA-Assistant/blob/main/docs/assets/screenshot-settings-features-psyche.png Settings — Psyche Engine: Big Five personality traits modulating the assistant's emotional responsiveness /jgouviergmail/LIA-Assistant/blob/main/docs/assets/screenshot-settings-administration.png Settings — Administration: LLM config, RAG Spaces, users, connectors, pricing, skills, voice, broadcast, debug /jgouviergmail/LIA-Assistant/blob/main/docs/assets/screenshot-settings-administration-oneclick.png Administration — One-click simplicity: every admin action is accessible in a single click, no technical skills required /jgouviergmail/LIA-Assistant/blob/main/docs/assets/screenshot-settings-administration-llm.png Administration — LLM Configuration: 7 providers OpenAI, Anthropic, Google Gemini, DeepSeek, Qwen, Perplexity, Ollama , per-node model selection 19+ Specialized Agents : Contacts, Emails, Calendar, Drive, Tasks, Reminders, Places, Routes, Weather, Wikipedia, Perplexity, Brave, Web Search, Web Fetch, Browser Control with progressive screenshot streaming , Smart Home Philips Hue , Context, Query + dynamic MCP agents ReAct Execution Mode ADR-070 /jgouviergmail/LIA-Assistant/blob/main/docs/architecture/ADR-070-ReAct-Execution-Mode.md : Alternative to the pipeline — the LLM iteratively reasons about tool outputs and decides next steps autonomously. User-toggleable preference, 4-node LangGraph architecture with native HITL support, timeout enforcement, cross-domain initiative via prompt engineering. Supports all tools including MCP and Skills MCP Model Context Protocol : Per-user external tool servers with OAuth 2.1, SSRF protection, structured items parsing, MCP Apps interactive iframe widgets , Iterative Mode ReAct for complex servers — a dedicated agent reads docs then calls tools correctly Agent Initiative Phase : Post-execution cross-domain enrichment — the assistant proactively verifies related information e.g., weather shows rain → checks calendar for outdoor events . Prompt-driven, read-only, fully configurable Skills agentskills.io with Rich Outputs : Open standard for expert instructions SKILL.md , model-driven activation, progressive disclosure L1/L2/L3 , sandboxed scripts, marketplace import, auto-translated multi-language descriptions, ZIP download, admin management. Rich Skill Outputs v1.16.8 : skills can return interactive HTML frames iframe srcDoc or external URL and/or images in addition to text, via a simple JSON contract SkillScriptOutput . Automatic theme & locale sync theme switch propagates live to frames via postMessage , iframe auto-resize, CSP-sandboxed client-side interactivity addEventListener , crypto.getRandomValues , bundled segno for QR codes. Seven built-in rich skills: interactive-map , weather-dashboard , calendar-month , qr-code , pomodoro-timer , unit-converter , dice-roller . Planner skill guard : multi-domain deterministic skills are protected from false-positive early clarification requests via domain overlap detection has potential skill match . Built-in Skill Generator : create custom skills in natural language — the assistant guides you through need analysis and archetype selection the dialogue keeps its context across turns , then validates and installs the finished skill directly into My Skills , announced by name and immediately usable. Every import path chat-generated or manual upload goes through one hardened pipeline: strict name validation, zip-expansion caps, name-conflict rejection, atomic install with automatic rollback Agentic Telephony ADR-127 /jgouviergmail/LIA-Assistant/blob/main/docs/architecture/ADR-127-Agentic-Telephony.md : LIA places real outbound phone calls on your behalf via your own per-user ElevenLabs + Twilio connector BYO — zero cost on LIA's side . Every call is HITL-confirmed before dialing; the goal-driven voice agent greets the instant the line opens, resolves relative dates against a live temporal anchor, and hangs up when done. Privacy by capability: the call agent can only read free/busy availability — never event titles or contents; no recording, no stored transcript. A strict mandate boundary forbids any expense or commitment beyond the objective offers are captured with their price and deferred to you , and the asynchronous post-call summary must state every cost and flag every open point. Config self-heals: fingerprint-based lazy re-sync of the vendor agent, self-healing one-active-call guard vendor status probe, deleted-conversation 404 handling , pinned thinking-free agent LLM, telephony-native ulaw 8000 audio AI Image Generation & Editing : Generate images from text prompts gpt-image-1 , edit existing images with natural language instructions. Multi-provider factory architecture, per-user quality/size preferences, cost tracking with DB-cached pricing, attachment-based storage with cascade cleanup File Attachments Images, PDF : Upload with client-side compression, configurable LLM vision analysis, PDF text extraction, strict per-user isolation Semantic Routing : Binary classification with confidence scoring high 0.85, medium 0.65 Multi-Step Planning : ExecutionPlan DSL with dependencies and conditions Parallel Execution : asyncio.gather for independent domains Intelligent Context Compaction : LLM-based conversation history summarization when token count exceeds dynamic threshold ratio of response model context window . Preserves identifiers UUIDs, URLs, emails . /resume command for manual trigger. 4 HITL safety conditions prevent compaction during active approval flows Scroll-up History Pagination : GET /conversations/me/messages exposes a keyset cursor ?before=