ALL LOCAL β€’ ZERO CLOUD

The Workshop

299 tools. 8 specialist agents. 54 AI models.
A complete AI-powered infrastructure assistant built from scratch.
Every conversation, every tool call, every inference β€” stays on one machine.

299
MCP Tools
6
Tool Servers
47
AI Models
8
Agent Personas
9
Built-in Skills
~435 GB πŸ“Έ
Model Library
Chapter I

The Philosophy

Why build something that already exists in the cloud? Because the cloud isn't yours.

Every major AI assistant runs on someone else's infrastructure. Your prompts travel through their servers. Your code is tokenized by their models. Your infrastructure diagrams β€” the ones showing every password, every internal IP, every architectural weakness β€” are processed on machines you'll never audit.

This bothered me.

So I built my own. Not a toy. Not a weekend project that gathers dust. A production-grade AI assistant that runs 24/7 on a Dell Precision Tower 7910 with 88 threads, 503 GiB of RAM, and an RTX 4060 Ti. It manages my entire infrastructure β€” 154+ Kubernetes pods across 58 namespaces, a MikroTik router, Synology NAS, mail server, DNS, monitoring, security, and everything in between.

The assistant has three faces:

The CLI β€” lsn-agent or just la. A terminal REPL that feels like talking to a senior engineer who happens to have kubectl, ssh, and root access. Type a question, get an answer β€” with tool calls, model routing, and context awareness baked in.

The Web UI β€” The same brain, exposed through a FastAPI server and integrated into OpenWebUI. Chat with your infrastructure from any browser. Share conversations. Upload documents for analysis.

The Cron β€” Autonomous scheduled tasks. Morning reports, health checks, security audits, backup verification β€” all running unattended, all sending results to Telegram.

No API keys. No rate limits. No "we've updated our privacy policy." Just a machine in a room in IaΘ™i, Romania, thinking about your pods at 2 AM.

Chapter II

The MCP Ecosystem

299 tools across 6 specialized servers. The agent's hands.

MCP β€” Model Context Protocol β€” is how the AI models interact with the real world. Instead of generating text about what could be done, the model calls tools that do things. Read files. Execute commands. Query Kubernetes. Scan for vulnerabilities. Generate diagrams.

The tools are organized into 6 specialized servers, each running as a separate Kubernetes pod. This isn't a monolith β€” it's a microservice architecture for AI capabilities:

πŸ–₯️
Main Server
~80 tools
Files, shell, git, code execution, system monitoring, Ollama management, Docker, database queries
☸️
Kubernetes
~30 tools
Pod management, deployments, services, configmaps, secrets, Helm, Velero backups, resource quotas
πŸ“Š
Monitoring
~25 tools
Prometheus queries, Grafana dashboards, Loki log search, alert management, health checks
🌐
Network
~20 tools
DNS, port scanning, SSL/TLS analysis, MikroTik router management, Stalwart mail, web crawling
πŸ›‘οΈ
Security
~25 tools
CrowdSec management, Trivy vulnerability scanning, honeypot queries, certificate auditing, threat feeds
πŸ”§
Workstation
~12 tools
Diagram generation (Draw.io XML), document search (Elasticsearch), RAGFlow pipeline, OpenWebUI management

The key insight: not all tools are loaded at once. The Smart Tool Router analyzes each message, detects the intent (Kubernetes? Networking? Security?), and dynamically loads only the relevant tool categories. This keeps the token window clean β€” the model sees 15-20 tools, not 299.

⟨ TOOL ROUTING FLOW ⟩

πŸ’¬ User Message "check if traefik pods are healthy"
↓
🧠 Intent Classifier keyword + heuristic analysis
↓
🌐 Network not loaded
☸️ Kubernetes βœ“ loaded (30 tools)
πŸ“Š Monitoring βœ“ loaded (25 tools)
πŸ›‘οΈ Security not loaded
↓
πŸ€– Ollama + ~55 tools base + k8s + monitoring
↓
βœ… Response + Tool Calls kubectl get pods β†’ result β†’ answer
Chapter III

The Brain β€” Auto-Model Selection

Not every question needs a 26-billion-parameter model. The agent knows the difference.

When you ask "what's my disk usage?", you don't need the same computational power as "redesign the authentication pipeline." The auto-model selector classifies every query into one of four tiers β€” before any LLM inference happens. Pure pattern matching. Zero latency.

Tier Model When Speed
⚑ FAST
gemma4:e2b Status checks, simple lookups, greetings, quick kubectl commands ~7s
πŸ”΅ MEDIUM
gemma4:e4b Configuration, troubleshooting, moderate reasoning, YAML generation ~13s
🟣 HEAVY
gemma4:26b Complex coding, architecture design, multi-step analysis, code review ~20s
πŸ”΄ BEAST
deepseek-coder-v2:236b Entire codebase analysis, large-scale migrations, production-grade architecture ~120s (CPU)

The classification uses weighted keyword matching across four pattern sets β€” fast, medium, heavy, and beast. Each pattern has boost words that increase confidence. If the message length exceeds 200 characters or contains multiple complexity markers, it automatically bumps up a tier.

The result: 85% of queries hit the fast tier and return in under 10 seconds. The 236-billion parameter beast only wakes up when you explicitly invoke it or when the classifier detects a genuinely massive task. No GPU needed for the beast β€” it runs on CPU across all 88 threads, using ~180 GB of RAM. Slow, but unstoppable.

auto-model in action
$ la "check disk space"
# β†’ auto-select: gemma4:e2b (FAST, confidence: 0.92)
Filesystem      Size  Used Avail Use%
/dev/nvme0n1p2  916G  687G  183G  79%  /
/dev/sda1       458G  301G  134G  70%  /mnt/ssd500gb
Total: 1.37TB used of 2.2TB

$ la "write a python script to migrate all configmaps from namespace A to B"
# β†’ auto-select: gemma4:26b (HEAVY, confidence: 0.87)
# β†’ tool routing: kubernetes + files loaded
#!/usr/bin/env python3
"""Migrate ConfigMaps between K3S namespaces."""
import subprocess, json, sys
...

$ la --fast "what pods are crashlooping?"
# β†’ forced: gemma4:e2b (--fast override)
Chapter IV

The Specialists β€” Agent Delegation

One agent, eight personas. Each with its own model, tools, and personality.

Complex problems aren't solved by a single generalist. They're solved by specialists collaborating. The agent chain system lets you delegate to specialist personas or run full multi-step chains where a scout plans the work and specialists execute in parallel.

⚑
Scout
gemma4:e2b
Quick recon, task planning. Surveys the landscape before the heavy hitters move in.
systemfiles
πŸ’»
Coder
devstral
Code writing, review, refactoring. The engineer who lives in your codebase.
filesgitcode_exec
πŸ”§
Ops
gemma4:e4b
Infrastructure operations. Kubernetes, Docker, systemd β€” the plumber.
k8sdockersystem
πŸ”
Researcher
gemma4:e4b
Web search, knowledge lookup. Finds the answer when the model can't.
webdocsearch
πŸ›‘οΈ
Security
gemma4:e4b
Security auditing, CVE analysis, hardening recommendations.
securitynetworkcrowdsec
πŸ–ΌοΈ
Vision
llava
Image analysis. Screenshots, diagrams, photos β€” the one who can see.
vision only
πŸ“Š
Analyst
gemma4:e4b
Data analysis, monitoring queries, Prometheus/Grafana investigation.
monitoringdatabase
πŸ¦–
Beast
deepseek-coder-v2:236b
236 billion parameters on CPU. Slow, terrifying, thorough. For when nothing else will do.
all tools
agent chains in action
# Delegate to a specific specialist
lsn-agent> /delegate security "audit all exposed services for CVEs"

# Full chain: scout plans β†’ specialists execute β†’ synthesize
lsn-agent> /chain "investigate why prometheus metrics are delayed"
 ⚑ Scout: Analyzing... 3 investigation paths identified
 πŸ“Š Analyst: Checking Prometheus targets and scrape intervals...
 πŸ”§ Ops: Examining pod resource limits and node pressure...
 βœ… Synthesis: Root cause β€” prometheus PV 94% full, compaction failing

# Beast mode β€” full power, no shortcuts
lsn-agent> /deep "review the entire lsn-agent codebase for security issues"
 πŸ¦– Loading deepseek-coder-v2:236b (180GB)... this will take a while
 πŸ¦– All 299 tools available. Full codebase in context. Analyzing...
Chapter V

The Knowledge Pipeline

From raw documents to intelligent answers. Crawl, parse, chunk, vectorize, retrieve.

The agent doesn't just run commands. It knows things. Behind the scenes, a full RAG (Retrieval-Augmented Generation) pipeline crawls, parses, and vectorizes documents from dozens of sources β€” turning raw data into searchable knowledge.

πŸ•·οΈ
Crawl
Playwright
Headless browser renders JavaScript-heavy sites. Bypasses SPAs that static crawlers can't parse.
πŸ“„
Parse
Tika + Docling
Apache Tika for 1000+ file formats. Docling (GPU) for PDFs with tables, images, layouts.
βœ‚οΈ
Chunk
Elasticsearch
Hybrid chunking β€” semantic paragraph splitting with overlap. 131,390+ indexed documents.
🧬
Vectorize
Qdrant
Dense vector embeddings for semantic search. Cosine similarity across the entire knowledge base.
🎯
Retrieve
Hybrid Search
BM25 keyword + vector semantic. Re-ranked by relevance. Fed to the model as context.
πŸ’‘
Answer
Ollama
Model synthesizes retrieved chunks into a coherent answer, citing sources.

The pipeline feeds into both the CLI agent and OpenWebUI. Ask a question about Kubernetes networking β€” the agent doesn't just search its training data. It queries your documents: the 28,279 ebooks, the 131,390 indexed files, the ZIM archives, the internal wikis. Then it generates an answer grounded in your knowledge base.

"Nice! What does it come out to (TB)? Do you have indexing or searching on top?"
β€” Bogdan Filip, Cybersecurity Leader

Yes, Bogdan. This is what's on top.

Chapter VI

The Diagram Engine

Ask for a diagram. Get a Draw.io XML file. Open it anywhere.

One of the more unexpected capabilities: the agent can generate architecture diagrams. Not ASCII art. Not Mermaid syntax you have to render yourself. Actual Draw.io XML files with proper nodes, edges, styling, and layout.

Say "create a diagram showing the traffic flow from internet through Traefik to backend pods" and the agent:

1. Detects the intent β†’ loads the diagrams tool category
2. Routes to the diagram_custom MCP tool
3. Generates structured JSON (nodes + edges + styles)
4. The MCP server converts it to Draw.io XML
5. Saves the .drawio file locally

Open it in diagrams.net, VS Code, or the Draw.io desktop app. Edit, export, embed. The diagram is yours.

πŸ”§ lsn-agent β€” interactive session
πŸ‘€
you
create a diagram showing how a request flows from the internet through my infrastructure to a backend pod
πŸ€–
lsn-agent
I'll generate that architecture diagram for you.
βš™οΈ tool call β†’ diagram_custom
title: "Request Flow β€” Internet to Pod"
nodes: [Internet, CloudFlare DNS, MikroTik Router, Traefik Ingress, K8S Service, Backend Pod]
edges: [Internet→DNS→Router→Traefik→Service→Pod]
style: dark theme, left-to-right flow
βœ… Diagram saved to ~/diagrams/request-flow.drawio
6 nodes, 5 edges. Opens in Draw.io or VS Code with the Draw.io extension.

It works for anything β€” network topologies, Kubernetes architectures, CI/CD pipelines, database schemas, even non-technical flowcharts. The model reasons about the structure, and the MCP tool handles the XML mechanics.

The same capability powers the OpenWebUI integration. Chat with the web UI, ask for a diagram, and it generates the Draw.io file in your conversation β€” downloadable, editable, shareable.

Chapter VII

The Autonomous Loop

Scheduled tasks that run without you. Morning reports. Security scans. Backup verification.

The agent doesn't need a human at the keyboard. Through lsn-agent-cron, scheduled tasks run autonomously β€” using the same skills, tools, and model routing as the interactive session. Results land in Telegram.

β˜€οΈ
Morning Report
Full infrastructure overview: pods, resources, storage, network, security alerts
πŸ’š
Health Check
Alert-only mode: only notifies when something is wrong
��️
Security Audit
CrowdSec decisions, failed auth, exposed services, CVE scan
πŸ’Ύ
Backup Verify
Velero backup status, age check, restore readiness
πŸš€
Deploy Ops
Rolling updates, canary checks, rollback verification
🎬
Plex Media
Library stats, recently added, transcoding status
πŸ§…
Tor Privacy
Relay status, bandwidth, circuit info, network health
πŸ”
Web Search
SearXNG-powered search via local metasearch engine
πŸ—οΈ
Service Overview
Complete infrastructure map β€” every namespace, every pod, every resource
cron schedule β€” /etc/cron.d/lsn-agent
# Every morning at 7:30 β€” full infrastructure report
30 7 * * *  lsn  lsn-agent-cron morning

# Every 4 hours β€” health check (alerts only)
0 */4 * * *  lsn  lsn-agent-cron health

# Daily at midnight β€” security audit
0 0 * * *  lsn  lsn-agent-cron security

# Daily at 6 AM β€” backup verification
0 6 * * *  lsn  lsn-agent-cron backup

The morning report alone summarizes: pod health across all 58 namespaces, CPU/memory/GPU utilization, disk space on all drives, recent CrowdSec bans, Velero backup age, certificate expiration dates, and any anomalies detected in the last 24 hours. All in one Telegram message. Every morning. Before coffee.

Chapter VIII

The Integration Layer

Three interfaces. One brain. Consistent tool access everywhere.

⟨ SYSTEM ARCHITECTURE ⟩

⌨️ CLI Agent lsn-agent / la / laf
🌐 Web Agent FastAPI + OpenWebUI
⏰ Cron Agent Scheduled tasks
↓
🧠 Agent Core auto-model + tool routing + agent chains
↓
πŸ€– Ollama 54 models / ~435 GB
πŸ”§ MCP Servers 6 servers / 299 tools πŸ“Έ
πŸ“š RAG Pipeline Qdrant + ES + Tika
↓
☸️ K3S Cluster 154 pods / 58 namespaces
🌐 MikroTik Router + Firewall
πŸ“Ί Services Plex, NAS, Mail, DNS

The CLI talks directly to Ollama and MCP. The web agent wraps the same logic in a FastAPI server deployed on Kubernetes, exposing it as a Pipe Function in OpenWebUI β€” which means anyone on the local network can chat with the infrastructure. The cron agent uses Skills β€” pre-built prompt templates that produce consistent, structured output.

The OpenWebUI integration deserves its own mention. It's not just a chat wrapper. It has:

β€’ Voice input/output via Speaches (Whisper STT + Piper TTS, both GPU-accelerated)
β€’ Document upload for PDFs, code, configs β€” parsed by Tika/Docling, vectorized by Qdrant
β€’ Web search via SearXNG when the model needs external knowledge
β€’ Browser rendering via Playwright for JavaScript-heavy pages
β€’ Git-aware context β€” automatically detects the repo you're working in and includes branch, status, recent commits

This is what a one-person infrastructure team looks like in 2026.

No vendor lock-in. No subscription fees. No data leaving the building. Just a machine, some open-source models, and the stubbornness to build something that works exactly the way you need it to.

The Workshop is not a product. It's not open source (yet). It's not looking for investors. It's a craftsman's toolbench β€” built over months of midnight sessions, debugged through real incidents, refined by daily use.

Every tool exists because a problem existed first.

Built with πŸ”§ by LiΘ™neanu Dumitru-Cristian in IaΘ™i, Romania.
Running 24/7 on a Dell Precision Tower 7910.
The Human Document  Β·  The Knowledge Vault  Β·  The Defense Report  Β·  The Intelligence Platform