<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Agent-Orchestration on ToolGenix — Open-Source AI &amp; Developer Tools: Honest Hands-On Reviews</title><link>https://toolgenix.nxtniche.com/tags/agent-orchestration/</link><description>Recent content in Agent-Orchestration on ToolGenix — Open-Source AI &amp; Developer Tools: Honest Hands-On Reviews</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 03 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://toolgenix.nxtniche.com/tags/agent-orchestration/index.xml" rel="self" type="application/rss+xml"/><item><title>Lemma: Open-Source Workspace Your AI Agent Actually Lives In</title><link>https://toolgenix.nxtniche.com/posts/lemma-open-source-workspace-review-2026/</link><pubDate>Fri, 03 Jul 2026 00:00:00 +0000</pubDate><guid>https://toolgenix.nxtniche.com/posts/lemma-open-source-workspace-review-2026/</guid><description>I tested Lemma — an open-source workspace where AI agents work alongside you with tables, permissions, and approval workflows. No more chat scrollback chaos.</description><content:encoded><![CDATA[<p>Ever had your Claude Code produce a killer analysis, scroll past it three messages later, and realize you can&rsquo;t find it again without dumping the whole terminal history? Yeah, me too. I&rsquo;ve been running coding agents for months now — OpenCode, Claude Code, Goose — and the single biggest pain point isn&rsquo;t the quality of their work. It&rsquo;s that their work lives in a chat scrollback that evaporates the second your session ends.</p>
<p>So when I found Lemma — an open-source workspace that treats AI agents as first-class team members alongside humans — I had to test it. 214 stars in 10 days, dual-licensed (AGPL core + Apache SDKs), and the tagline &ldquo;chat is not where work lives&rdquo; basically called me out personally.</p>
<p><strong>The short version:</strong> Lemma is a shared workspace (they call it a &ldquo;pod&rdquo;) with typed tables, agents that own tasks, workflows with human approval gates, and role-based permissions — all readable and writable by both humans and agents through the same API. And you can self-host it with Docker Compose or use their cloud. And it plugs into Claude Code, Codex, OpenCode, or Cursor without needing a separate API key.</p>
<h2 id="what-is-lemma-really">What Is Lemma, Really?</h2>
<p>Here&rsquo;s the philosophy: AI agents can write code, research topics, and call tools all day. But a chat thread isn&rsquo;t a place where work can live. Real work has owners, state that persists for days, steps that need human decisions, and actions an agent should never take alone.</p>
<p>So Lemma solves this with <strong>pods</strong> — portable directories of plain files that contain everything a team (human + agent) needs:</p>
<ul>
<li><strong>Tables</strong> — typed, queryable business data with row-level security. Leads, tickets, tasks, approvals. Agents read and write them natively.</li>
<li><strong>Files</strong> — markdown memory for everything structure can&rsquo;t capture. Preferences, playbooks, voice guides. Full-text searchable.</li>
<li><strong>Agents</strong> — LLM workers with a role, tool grants, and scoped access. Never vague access to everything.</li>
<li><strong>Workflows</strong> — graphs that mix agents, functions, decisions, loops, and human approval steps. Triggered by schedules, webhooks, or chat.</li>
<li><strong>Permissions</strong> — roles for people <em>and</em> agents. Pod-level roles, table grants, delegation tokens.</li>
<li><strong>Surfaces</strong> — Slack, Teams, WhatsApp, Telegram, Gmail. Same pod, different front doors.</li>
</ul>
<p>So that&rsquo;s a lot of primitives. But in practice, it clicked for me when I actually set one up.</p>
<h2 id="installation--my-first-pod">Installation &amp; My First Pod</h2>
<p>I installed this on a $6 DigitalOcean Droplet (2GB RAM, Docker pre-installed). The install command is dead simple:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -fsSL https://raw.githubusercontent.com/lemma-work/lemma-platform/main/install.sh | bash
</span></span></code></pre></div><p>So that gives you <code>lemma-stack</code> — a tool that manages the full backend + frontend stack. Took about 2 minutes on a fresh Droplet.</p>
<p>Then I set up an API key and started the stack:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>lemma-stack config set LEMMA_DEFAULT_MODEL_TYPE anthropic_compat
</span></span><span style="display:flex;"><span>lemma-stack config set LEMMA_ANTHROPIC_API_KEY sk-ant-...
</span></span><span style="display:flex;"><span>lemma-stack start
</span></span></code></pre></div><p>Now, this boots the app at <code>http://127-0-0-1.sslip.io:3711</code> and the API at <code>http://127-0-0-1.sslip.io:8711</code>. But one thing that tripped me up: you <em>must</em> use the <code>127-0-0-1.sslip.io</code> hostname, not <code>localhost</code> — sign-in is scoped to the sslip.io domain. Took me a solid 3 minutes to figure that out.</p>
<p>Once the stack was running, I installed the Lemma CLI and connected it:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>uv tool install lemma-terminal
</span></span><span style="display:flex;"><span>lemma servers <span style="color:#66d9ef">select</span> local
</span></span><span style="display:flex;"><span>lemma auth login
</span></span><span style="display:flex;"><span>lemma pod create my-team --with-starter
</span></span></code></pre></div><p>So the <code>--with-starter</code> flag scaffolds a working pod with one table and one agent. And I ran <code>lemma chat &quot;what can you do in this pod?&quot;</code> and the agent walked me through every table, workflow, and permission it had access to. Honestly? That moment — an agent describing its own workspace boundaries — was the first time I felt like I was working <em>with</em> an agent, not just querying one.</p>
<h2 id="what-running-a-pod-actually-looks-like">What Running a Pod Actually Looks Like</h2>
<p>So the best way to explain Lemma is by example. After I created my starter pod, I used the CLI to inspect it:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>lemma table list
</span></span><span style="display:flex;"><span>lemma record create leads --data <span style="color:#e6db74">&#39;{&#34;name&#34;: &#34;Acme Corp&#34;, &#34;status&#34;: &#34;new&#34;}&#39;</span>
</span></span></code></pre></div><p>So the agent can see that new record. So I asked it: &ldquo;qualify this lead.&rdquo; It ran a workflow — checked the company size, looked up industry, scored it — and wrote the result back as a row update. I reviewed it, hit approve, and the agent moved on to the next step.</p>
<p>But here&rsquo;s what I found interesting. I opened Claude Code in another terminal, had it install Lemma&rsquo;s skills (<code>lemma skills install</code>), and then Claude Code could operate the <em>same</em> pod. Two agents, same state, same permission model. That&rsquo;s something no chat-based workflow can do.</p>
<p>And if you want to run your agent <em>inside</em> Lemma full-time:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>lemma daemon start
</span></span></code></pre></div><p>So this makes your local agent (Claude Code / Codex / OpenCode) pick up tasks from the pod&rsquo;s shared queue, stream its work back through the pod, and respect the same approvals as everyone else. And I ran this with Claude Code and it worked — though it&rsquo;s early-stage software, so expect a bit of rough edges around error handling.</p>
<h2 id="how-lemma-compares-to-other-agent-tools">How Lemma Compares to Other Agent Tools</h2>
<p>So let&rsquo;s put it side by side with the tools I&rsquo;ve covered on ToolGenix:</p>
<table>
	<thead>
			<tr>
					<th style="text-align: left">Feature</th>
					<th style="text-align: center">Lemma</th>
					<th style="text-align: center">junction</th>
					<th style="text-align: center">umadev</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td style="text-align: left"><strong>Category</strong></td>
					<td style="text-align: center">Human-Agent workspace</td>
					<td style="text-align: center">VS Code agent UI</td>
					<td style="text-align: center">Agent orchestrator</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>Persistent state</strong></td>
					<td style="text-align: center">✅ Tables + files</td>
					<td style="text-align: center">❌ Chat scrollback</td>
					<td style="text-align: center">❌ Session-only</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>Permissions</strong></td>
					<td style="text-align: center">✅ Role-based (people &amp; agents)</td>
					<td style="text-align: center">❌ N/A</td>
					<td style="text-align: center">❌ N/A</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>Use your existing agent</strong></td>
					<td style="text-align: center">✅ Claude Code / Codex / OpenCode</td>
					<td style="text-align: center">✅ 7 backends</td>
					<td style="text-align: center">✅ 9-role team</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>Human approval</strong></td>
					<td style="text-align: center">✅ Built into workflows</td>
					<td style="text-align: center">❌ N/A</td>
					<td style="text-align: center">❌ N/A</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>Multi-surface</strong></td>
					<td style="text-align: center">✅ Slack, Teams, WhatsApp, Telegram, Gmail</td>
					<td style="text-align: center">❌ VS Code only</td>
					<td style="text-align: center">❌ CLI only</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>Self-host</strong></td>
					<td style="text-align: center">✅ Docker Compose</td>
					<td style="text-align: center">✅ VS Code ext</td>
					<td style="text-align: center">✅ Docker</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>GitHub stars</strong></td>
					<td style="text-align: center">214</td>
					<td style="text-align: center">645</td>
					<td style="text-align: center">837</td>
			</tr>
	</tbody>
</table>
<p>So where does Lemma fit? If you&rsquo;re using <strong><a href="/posts/junction-vscode-panel-7-local-ai-agents-2026/">junction</a></strong> to control 7 agent backends from one VS Code sidebar, Lemma is the next logical step — it gives those agents a workspace with state, permissions, and human oversight. And if you&rsquo;ve deployed agents on a VPS using a <strong><a href="/posts/hermes-vps-deployment-guide/">setup guide like the Hermes one</a></strong>, Lemma is the layer that turns your agent from a CLI command into a teammate with a job description.</p>
<h2 id="self-host-or-use-the-cloud">Self-Host or Use the Cloud?</h2>
<p>Now, Lemma gives you both options, and the choice is straightforward:</p>
<ul>
<li><strong>Self-host (Docker Compose):</strong> Full stack runs on any machine with Docker. I used a $6 DigitalOcean Droplet and it handled the whole platform — backend (FastAPI), frontend (Next.js), and agent runtime. You&rsquo;ll want 2GB+ RAM minimum.</li>
<li><strong>lemma.work cloud:</strong> Same open-source stack, hosted by the team. No infrastructure to manage. Uses your existing Claude or ChatGPT subscription — no separate per-token billing.</li>
</ul>
<p>And the local-first design means you can start on your laptop, export the pod as files, and import it on a VPS or the cloud. Pods are just directories — <code>lemma pod export ./my-team</code> gives you the entire workspace as plain files.</p>
<h2 id="who-should-use-lemma">Who Should Use Lemma?</h2>
<p><strong>Best for:</strong> Teams already running Claude Code, Codex, or OpenCode who want structured agent output — tables instead of scrollback, approvals instead of trust-based execution, permissions instead of &ldquo;the agent can see everything.&rdquo;</p>
<p><strong>Skip if:</strong> You work solo and your agent workflow is &ldquo;ask a question, get an answer, close the terminal.&rdquo; Lemma&rsquo;s value is in shared state and team coordination, and solo use doesn&rsquo;t need most of it.</p>
<p>So here&rsquo;s the honest caveat: 214 stars, 10 days old. The docs are evolving — the installation page covers the basics well, but workflow configuration and the approval gate pattern could use more examples. I hit the <code>127-0-0-1.sslip.io</code> gotcha, and the daemon mode threw a couple of unhelpful error messages. This is early-stage software with a clear vision but room to grow on polish.</p>
<h2 id="the-bottom-line">The Bottom Line</h2>
<p>Still, Lemma fills a gap I didn&rsquo;t realize existed until I tried it. Because we&rsquo;ve been putting AI agents in chat interfaces and pretending the scrollback is &ldquo;state.&rdquo; But it&rsquo;s not. Lemma gives agents a real workspace — tables, permissions, approvals, and surfaces that humans actually use. For anyone building serious agent workflows, it&rsquo;s the most interesting open-source project I&rsquo;ve found in this space this month.</p>
<p>And I&rsquo;ll be running it alongside my normal agent setup and watching how the project matures. Still, the vision is solid, and the execution is already usable for teams that want structured human-agent collaboration today.</p>
]]></content:encoded></item></channel></rss>