## Update: Daily Briefing, GitLab MCP goes live, and a 3-minute demo
A lot has shipped since the first commit. Here's how Enterprise AI Without Leaks or Overspending (LLMai) has evolved this week:
### Demo video is up
Watch the full 3-minute walkthrough: youtu.be/V3Rda1kLSos — local agent loop, permission gates, GitLab MCP triage, and the new Briefing tab, all running on a laptop.
### GitLab integration is now real MCP (partner track )
LLMai no longer just talks about MCP — it launches GitLab's MCP server as a local stdio subprocess, discovers its tools at startup, and registers them as
mcp__gitlab__* behind the same allow/ask/deny permission system as every built-in tool. We verified the full loop live: read an issue → inspect the failing
pipeline → patch local code → open a fix MR.
### New: Daily Briefing — your local model earns its keep every morning
The local server now doubles as a morning dashboard at /briefing, embedded directly in the hosted site's Briefing tab:
- DS interview practice — one question + model answer, generated by your local Ollama model; topic rotates daily across 8 areas
- Korea morning news + US market headlines (Yahoo Finance RSS, with a MarketWatch fallback after Yahoo started 429-ing default user agents)
- CEPR's AI Bubble Monitor charts — because an app about not overspending on AI should keep an eye on the AI bubble
It regenerates itself in the background whenever the server boots on a new day:
@app.on_event("startup")
async def _refresh_stale_briefing() -> None:
"""Regenerate the briefing in the background if it's missing or not today's."""
if BRIEFING_PATH.exists():
mtime = datetime.fromtimestamp(BRIEFING_PATH.stat().st_mtime)
if mtime.date() == datetime.now().date():
return
asyncio.create_task(_generate_briefing())
Security stayed the point
The hosted site embeds the briefing from localhost — so we scoped CORS to exactly two path groups (/healthz, /briefing*) for exactly one origin. The WebSocket-token
endpoint and everything else stay same-origin. Leak-free means the boring parts too.
Polish round
- Chat replies now render real Markdown (sanitized with DOMPurify) with syntax-highlighted code blocks
- Stop button mid-generation, with partial responses preserved
- Client-side history trimming so long conversations never hit the cloud proxy's limits
- Promo page pause/replay fixed, branding unified to LLMai
Try it: https://ll-mai.vercel.app · Code: https://github.com/sechan9999/LLMai
Log in or sign up for Devpost to join the conversation.