<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://nui.plmbr.dev/feed.xml" rel="self" type="application/atom+xml" /><link href="https://nui.plmbr.dev/" rel="alternate" type="text/html" /><updated>2026-08-12T04:18:33+00:00</updated><id>https://nui.plmbr.dev/feed.xml</id><title type="html">nui</title><subtitle>A self-hosted web UI for interactive AI agent sessions. Home launcher, Claude Code, pi, codex, opencode, and API agents — locally, in Docker, or remote — from one interface.</subtitle><author><name>Mehmet Bektaş</name></author><entry><title type="html">Introducing nui</title><link href="https://nui.plmbr.dev/blog/introducing-nui/" rel="alternate" type="text/html" title="Introducing nui" /><published>2026-08-10T00:00:00+00:00</published><updated>2026-08-10T00:00:00+00:00</updated><id>https://nui.plmbr.dev/blog/introducing-nui</id><content type="html" xml:base="https://nui.plmbr.dev/blog/introducing-nui/"><![CDATA[<p>Frontier coding agents are extraordinary. They are also expensive. Token bills climb, hosted UIs lock you into one vendor, and the moment you want to try an open-weight model for the same workflow, you are back in a different terminal with a different UX.</p>

<p><strong>nui</strong> is a self-hosted web UI for interactive AI agent sessions. Install a single binary, run <code class="language-plaintext highlighter-rouge">nui server</code>, and open the browser. Use Claude Code, pi, codex, or opencode when the task needs a premium CLI. Switch to OpenRouter or local Ollama models when it does not. Same sessions, same chat, same extensions — pick the model that fits the job, not the invoice.</p>

<p>nui is open source (MIT) and available today.</p>

<figure>
  <img src="/assets/images/hero/nui.png" alt="nui web UI showing a chat session with an AI agent." width="2227" height="1369" loading="eager" />
</figure>

<h2 id="why-now">Why now</h2>

<p>The industry is shifting. Teams are routing more work to open-weight models, local inference, and cheaper multi-provider APIs. Cost is a first-class constraint again — not just latency or quality.</p>

<p>Most agent tooling still assumes the opposite: one cloud, one model family, one bill. nui starts from the opposite bet:</p>

<ul>
  <li><strong>Self-hosted</strong> — your machine, your server, your data path.</li>
  <li><strong>Multi-agent</strong> — CLI harnesses and API providers in one UI.</li>
  <li><strong>Open-weight ready</strong> — Ollama is a peer, not a side quest. OpenRouter makes cheaper and open models one click away.</li>
  <li><strong>Composable</strong> — custom agents, extensions, and MCP so you can build the stack you actually want.</li>
</ul>

<p>Use frontier models when they earn their keep. Use open weights when they do not. Keep the interface.</p>

<h2 id="sessions-in-the-browser">Sessions in the browser</h2>

<p>Type a task on the home screen and the built-in <code class="language-plaintext highlighter-rouge">nui</code> master agent routes it to a specialist — or open a session with any built-in or installed agent. Chat, attach files, use <code class="language-plaintext highlighter-rouge">@</code> mentions for context, and switch between past sessions from the sidebar. Preferences persist across reloads.</p>

<p>No juggling terminals. No “which window was that agent in?” Same session model whether the backend is Claude Code or a local Ollama model.</p>

<h2 id="built-in-agents">Built-in agents</h2>

<p><strong>CLI agents</strong>:</p>

<ul>
  <li>Claude Code</li>
  <li>pi</li>
  <li>codex</li>
  <li>opencode</li>
</ul>

<p><strong>API agents</strong> (in-process; no separate CLI):</p>

<ul>
  <li>Anthropic, OpenAI, Gemini</li>
  <li><strong>OpenRouter</strong> — route across providers and price points from one agent</li>
  <li><strong>Ollama</strong> — local and self-hosted open-weight models</li>
</ul>

<p>That split is the cost story: keep premium CLIs for hard work, and keep OpenRouter / Ollama for everything else — drafts, triage, summarization, internal tools — without leaving nui.</p>

<h2 id="custom-agents-with-adl">Custom agents with ADL</h2>

<p>Define your own agents in YAML with the Agent Definition Language (ADL). Pick a harness, set a system prompt, add skills and MCP servers, and optionally run in a sandbox, Docker, a dev container, or on a remote host.</p>

<p>Multi-step workflows, per-step harness overrides, and eval test cases are part of the schema. Install with <code class="language-plaintext highlighter-rouge">nui agent add</code>, or build them in the UI. Portable agents can target different CLI harnesses so the same definition can ride a frontier CLI today and a cheaper path tomorrow.</p>

<h2 id="extensions">Extensions</h2>

<p>Extensions add harnesses, MCP servers, skills, and agents. Install from a local directory, zip file, or git URL:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nui extension add ./my-extension
nui extension add https://github.com/example/my-extension.git
</code></pre></div></div>

<p>Manage them from <strong>Settings → Extensions</strong>, or disable individually without uninstalling. This is how teams plug in internal tools without forking nui.</p>

<h2 id="mcp-in-both-directions">MCP in both directions</h2>

<p>nui exposes itself as an MCP server — wire it into Cursor, Claude Desktop, or any MCP host and drive sessions programmatically (<code class="language-plaintext highlighter-rouge">list_agents</code>, <code class="language-plaintext highlighter-rouge">create_session</code>, <code class="language-plaintext highlighter-rouge">run_agent</code>, and more).</p>

<p>It also injects built-in MCP servers into harness subprocesses:</p>

<ul>
  <li><strong>Human-in-the-loop</strong> — approvals and <code class="language-plaintext highlighter-rouge">ask_user</code> prompts</li>
  <li><strong>Visualization</strong> — inline charts in chat</li>
  <li><strong>Agent memory</strong> — persistent memory updates</li>
  <li><strong>Orchestrator</strong> — home-launcher routing for the <code class="language-plaintext highlighter-rouge">nui</code> master agent</li>
</ul>

<p>Remote HTTP MCP servers can authenticate with OAuth from Settings.</p>

<h2 id="sandboxing-and-isolation">Sandboxing and isolation</h2>

<p>Run agents unsandboxed on the host, or isolate them with bubblewrap (Linux), Docker, or dev containers. Pair isolation with cheaper or open-weight agents when you want more automation without expanding blast radius.</p>

<h2 id="headless-schedules-and-evals">Headless, schedules, and evals</h2>

<p>Not everything needs a browser.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Headless run (server must be running)</span>
nui run <span class="nt">-a</span> claude-code <span class="nt">-m</span> <span class="s2">"Review README"</span> <span class="nt">-w</span> <span class="nb">.</span> <span class="nt">--wait</span>

<span class="c"># Auto-start server if needed</span>
nui run <span class="nt">-m</span> <span class="s2">"Summarize changes"</span> <span class="nt">-w</span> <span class="nb">.</span> <span class="nt">--spawn</span> <span class="nt">--wait</span>
</code></pre></div></div>

<p>Use <a href="/cli/#schedules"><code class="language-plaintext highlighter-rouge">nui schedule</code></a> for recurring jobs and <a href="/cli/#agent-evaluation"><code class="language-plaintext highlighter-rouge">nui agent eval</code></a> to validate ADL agents against test cases in CI. Script the expensive path when you must; automate the cheap path when you can.</p>

<h2 id="install">Install</h2>

<p><strong>Linux and macOS:</strong></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl <span class="nt">-fsSL</span> https://nui.plmbr.dev/install.sh | sh
nui server <span class="nt">--open</span>
</code></pre></div></div>

<p><strong>Windows:</strong></p>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">irm</span><span class="w"> </span><span class="nx">https://nui.plmbr.dev/install.ps1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">iex</span><span class="w">
</span></code></pre></div></div>

<p>Or download a release binary from <a href="https://github.com/plmbr/nui/releases">GitHub Releases</a>. Full platform notes and agent prerequisites are in the <a href="/install/">install guide</a>.</p>

<h2 id="whats-next">What’s next</h2>

<p>nui is intentionally a thin, self-hosted surface over the agents you already use — and the open-weight ones you are about to use more. Star or watch <a href="https://github.com/plmbr/nui">github.com/plmbr/nui</a>, file issues, and tell us what cost-sensitive or open-weight workflows you want first-class support for.</p>]]></content><author><name>Mehmet Bektaş</name></author><summary type="html"><![CDATA[nui is now available. One self-hosted interface for coding agents and API models, with first-class support for OpenRouter, Ollama, and custom open-weight workflows.]]></summary></entry></feed>