<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Parendum</title>
    <description>The latest articles on DEV Community by Parendum (@parendum).</description>
    <link>https://dev.to/parendum</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3994754%2F9e646970-cbeb-4dc7-848a-938b2c1a8c97.png</url>
      <title>DEV Community: Parendum</title>
      <link>https://dev.to/parendum</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/parendum"/>
    <language>en</language>
    <item>
      <title>I built a self-hosted, multi-agent AI platform you can point at your own infra</title>
      <dc:creator>Parendum</dc:creator>
      <pubDate>Tue, 23 Jun 2026 13:00:00 +0000</pubDate>
      <link>https://dev.to/parendum/i-built-a-self-hosted-multi-agent-ai-platform-you-can-point-at-your-own-infra-4aia</link>
      <guid>https://dev.to/parendum/i-built-a-self-hosted-multi-agent-ai-platform-you-can-point-at-your-own-infra-4aia</guid>
      <description>&lt;p&gt;Every "AI agent platform" I wanted to use was a hosted SaaS. That's a non-starter the moment your agents need to touch production infrastructure, internal data, or customer records — you can't hand that to someone else's cloud.&lt;/p&gt;

&lt;p&gt;So we built &lt;strong&gt;&lt;a href="https://github.com/ParendumOU/Nexora" rel="noopener noreferrer"&gt;Nexora&lt;/a&gt;&lt;/strong&gt;: a multi-agent orchestration platform that runs &lt;strong&gt;entirely on your own infrastructure&lt;/strong&gt;. The core is MIT-licensed and free to self-host. This post is the "what we built and why" — the architecture, the provider abstraction, and the honest current state.&lt;/p&gt;

&lt;h2&gt;
  
  
  The gap it fills
&lt;/h2&gt;

&lt;p&gt;There are roughly two kinds of "agent" tools out there:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A library&lt;/strong&gt; (LangChain-style) — you still have to build the product around it: auth, multi-tenancy, a UI, tool management, streaming, persistence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A hosted cloud&lt;/strong&gt; — a finished product, but you can't point it at your own infra or run it air-gapped.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nexora is the missing middle: &lt;strong&gt;a finished product you self-host.&lt;/strong&gt; Web UI, terminal client, mobile app, multi-tenant auth, a tool/skill system, and a marketplace — all running on your box.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-agent orchestration&lt;/strong&gt; — agents have personas, skills, and tools. They chat in real time, decompose work into tasks, spawn bounded sub-agents, and stream results over WebSocket (or SSE).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;~46 LLM providers&lt;/strong&gt; behind one interface — Claude, Gemini, OpenAI, Ollama, Bedrock, Azure, Vertex, Groq, Mistral, xAI, and more. Mix cloud and &lt;strong&gt;fully local&lt;/strong&gt; (Ollama/LMStudio) per agent, with no vendor lock-in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;~90 built-in tools / ~15 skills&lt;/strong&gt; — Slack, Jira, Linear, Notion, PagerDuty, Kubernetes, Google Drive, S3, Playwright, and a hardened HTTP tool with an SSRF allowlist.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge base / RAG&lt;/strong&gt; on pgvector + &lt;strong&gt;semantic memory&lt;/strong&gt; + &lt;strong&gt;multimodal image input&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Three clients, one instance&lt;/strong&gt; — a Next.js web UI, a Go + Bubble Tea &lt;strong&gt;terminal client&lt;/strong&gt;, and an Expo &lt;strong&gt;mobile app&lt;/strong&gt; that QR-pairs to your server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faxyfo01zy87if9dwtkcb.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faxyfo01zy87if9dwtkcb.gif" alt="Nexora demo" width="620" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture, briefly
&lt;/h2&gt;

&lt;p&gt;The stack is deliberately boring and self-hostable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FastAPI (async) + SQLAlchemy 2   →  orchestration, providers, tools, RAG, auth
PostgreSQL 16 + pgvector         →  data + embeddings (RAG + semantic memory)
Redis 7                          →  pub/sub fan-out for real-time streaming
Next.js 15 + TypeScript          →  web UI (React Flow agent graph)
nginx + Docker Compose           →  one-command deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The piece I'm happiest with is the &lt;strong&gt;provider abstraction&lt;/strong&gt;. Every provider — cloud API, local server, or CLI-based (Claude Code / Gemini / Codex running as a subprocess) — implements the same streaming contract. A provider &lt;em&gt;chain&lt;/em&gt; falls back provider-to-provider on failure, so you can put a cheap local model first and a frontier model as backup, per agent.&lt;/p&gt;

&lt;p&gt;Spinning it up is a Compose stack:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/ParendumOU/Nexora.git
&lt;span class="nb"&gt;cd &lt;/span&gt;Nexora
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env          &lt;span class="c"&gt;# set SECRET_KEY + ENCRYPTION_KEY&lt;/span&gt;
make dev                       &lt;span class="c"&gt;# backend, frontend, nginx&lt;/span&gt;
docker compose &lt;span class="nb"&gt;exec &lt;/span&gt;backend alembic upgrade &lt;span class="nb"&gt;head&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;First visit with no users drops you at &lt;code&gt;/setup&lt;/code&gt; to create the admin.&lt;/p&gt;

&lt;h2&gt;
  
  
  The wedge: your data never leaves
&lt;/h2&gt;

&lt;p&gt;This is the whole point. With Nexora:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your &lt;strong&gt;model-provider keys&lt;/strong&gt; live in your DB (Fernet-encrypted), not a third party's.&lt;/li&gt;
&lt;li&gt;Your agents can run &lt;strong&gt;fully local&lt;/strong&gt; models, so prompts never leave the box.&lt;/li&gt;
&lt;li&gt;Your agents' &lt;strong&gt;prod access&lt;/strong&gt; (Kubernetes, S3, internal APIs) stays inside your network.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's what makes agents usable for the work that actually matters — on-call/SRE, back-office ops, internal automation — instead of just demos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest current state
&lt;/h2&gt;

&lt;p&gt;I'd rather you trust the project than oversell it. It's young and moving fast. The most important thing to know before you run it: the backend &lt;strong&gt;can run tools and optionally spawn containers&lt;/strong&gt;, so host and Docker isolation are yours to own — treat it like any service with shell access. The docs cover hardening, and there's a known list of items we're working through in the open.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open-core
&lt;/h2&gt;

&lt;p&gt;The core is &lt;strong&gt;MIT&lt;/strong&gt; — use it, fork it, ship it. A paid Cloud edition adds the enterprise wall (SSO/SAML, SCIM, RBAC, IP allowlist, audit retention, white-label, backup/restore) for teams that need it. The agent product itself is always self-hosted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it / tell me where it breaks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/ParendumOU/Nexora" rel="noopener noreferrer"&gt;https://github.com/ParendumOU/Nexora&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://docs.nexora.parendum.com" rel="noopener noreferrer"&gt;https://docs.nexora.parendum.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI / mobile:&lt;/strong&gt; &lt;a href="https://github.com/ParendumOU/Nexora-CLI" rel="noopener noreferrer"&gt;https://github.com/ParendumOU/Nexora-CLI&lt;/a&gt; · &lt;a href="https://github.com/ParendumOU/Nexora-Mobile" rel="noopener noreferrer"&gt;https://github.com/ParendumOU/Nexora-Mobile&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd especially love feedback on the &lt;strong&gt;self-hosting&lt;/strong&gt; experience and the &lt;strong&gt;security model&lt;/strong&gt;. If you run it behind a homelab VPN or point it at a local model, tell me what setup you used and where the provider abstraction falls short. A ⭐ on the repo helps if you want to follow along — it genuinely shapes what we build next.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
