<?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>Agents on paradigmatic.systems</title>
    <link>https://paradigmatic.systems/tags/agents/</link>
    <description>Recent content in Agents on paradigmatic.systems</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 09 Aug 2026 14:30:00 +0000</lastBuildDate><atom:link href="https://paradigmatic.systems/tags/agents/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Groundhog: A Simple Autonomous Agent</title>
      <link>https://paradigmatic.systems/posts/groundhog/</link>
      <pubDate>Sun, 09 Aug 2026 14:30:00 +0000</pubDate>
      
      <guid>https://paradigmatic.systems/posts/groundhog/</guid>
      <description>Introducing Groundhog: a persistent, autonomous LLM assistant built as a thin ~200-line Nix systemd module that slots into a NixOS VPS.</description>
      <content:encoded><![CDATA[<p>Well, I&rsquo;ve finally done it. After <a href="/posts/superfluous-abstractions">commentating</a> on the <a href="/posts/control-plane-context">state</a> of <a href="/posts/agent-bootstrapping">agent</a> development for some time, I&rsquo;ve thrown my own project into the exponentially more illegible mix of vibe-coded slop.</p>
<p>At the same time I&rsquo;ve taken the leap into the undeniably funky realm of running an LLM as a persistent virtual assistant. This post introduces my new <a href="https://github.com/roriholm/groundhog">Groundhog</a> project. It&rsquo;s an extremely thin orchestration layer, defined at the <code>systemd</code> level in a 200-line Nix module.</p>
<h2 id="the-state-of-play">The State of Play</h2>
<p>I held out for a long time on adopting harness-powered workflows. I preferred high-granularity manual control offered by Zed. This gave me ways to control</p>
<ul>
<li>cost. My token spend was a few dollars per month, even with (to me) heavy usage.</li>
<li>outcome. <code>(model quality) x (harness quality)</code> was simply not at a threshold where I&rsquo;d have a successful outcome.</li>
</ul>
<p>However, the tooling evolved out from under me, and I&rsquo;ve had to thoroughly rebase my assumptions. The two forcing factors were:</p>
<ol>
<li>My preferred Zed workflows were deprecated. The Text Thread feature was removed in favor of agent-only structure.</li>
<li>the Claude Code harness evolved, eventually addressing all of my <a href="/posts/control-plane-context">gripes</a> and achieving high success rates with the same models.</li>
</ol>
<p>Additionaly, Claude Code authentiates with a Pro account and I&rsquo;ve <em>never</em> run up against limits. Thus I&rsquo;ve finally arrived at the common consensus that you simply can&rsquo;t beat Claude Code as a driver. I have ceased to struggle and joined the Borg, like in The Star War.</p>
<h2 id="autonomy">Autonomy</h2>
<p>I&rsquo;ve felt a twinge of FOMO at autonomous agent projects like OpenClaw. Of course I want a little digital assistant looking out for my interests, keeping tabs on things I care about and pinging me when I need to know something.</p>
<p>There&rsquo;s one big problem: None of these projects has ever come remotely close to my comfort zone to run or interact with.</p>
<p>There&rsquo;s a tendency to bloat, especially once you get these things working on themselves. You expect me to install this app that&rsquo;s 15,000 lines written in some wretched goblin language like Python or Javascript? You must be getting out of town.</p>
<h2 id="obsidian-workflows">Obsidian workflows</h2>
<p>I&rsquo;m a longtime pre-AI user of Obsidian. I self-host with <code>syncthing</code> to keep notes synced between my phone and computers. In my day-to-day work I naturally fell into a workflow that some have dubbed the &ldquo;Second Brain&rdquo; system. It&rsquo;s the logical conclusion of both</p>
<ol>
<li>Managing your own knowledge base and</li>
<li>Creating context for AI agents.</li>
</ol>
<p>It just involves an extra step for the agent. Here&rsquo;s a few simple examples of prompts for Claude Code, where I have an Obsidian vault sitting at <code>~/o</code></p>
<blockquote>
<p>Read the design document at ~/o/topic/design.md. Investigate the codebase and update the document with any potential blockers. Create a plan.md with a step-by-step breakdown.</p></blockquote>
<blockquote>
<p>Execute on step 1 of ~/o/topic/plan.md.</p></blockquote>
<p>Essentially you want to keep a durable view of reality that&rsquo;s shared by consensus across agent sessions. Nobody needs to juggle sessions and figure out which chat to resume.</p>
<h2 id="groundhog">Groundhog</h2>
<p>Anyways, all this is to say that these 3 facts came together:</p>
<ol>
<li>Claude Code is now good enough to do anything</li>
<li>I appreciate a graph-based (as opposed to linear) approach to managing durable knowledge</li>
<li>I&rsquo;d like to give my system a little more autonomy</li>
</ol>
<p>This is a problem that&rsquo;s solved at the <code>systemd</code> level with a few lines of Nix. The <a href="https://github.com/roriholm/groundhog">groundhog</a> module definition slots into my VPS config like this:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-nix" data-lang="nix"><span style="display:flex;"><span>inputs<span style="color:#f92672">.</span>groundhog <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>    url <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;github:roriholm/groundhog&#34;</span>;
</span></span><span style="display:flex;"><span>};
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>services<span style="color:#f92672">.</span>groundhog <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>  enable <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>;
</span></span><span style="display:flex;"><span>  tokenFile <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;/etc/groundhog/oauth-token&#34;</span>;
</span></span><span style="display:flex;"><span>};
</span></span></code></pre></div><p>An initial vault gets bootstrapped and registered with Syncthing. Then there&rsquo;s simple logic:</p>
<ol>
<li>A note syncing to the <code>/inbox</code> folder triggers a Claude Code instance.</li>
<li>The CC instance has access to the vault and is instructed to drain the inbox to end the wake cycle.</li>
<li>A configurable &ldquo;heartbeat&rdquo; wakeup triggers routine tasks.</li>
</ol>
<p>That&rsquo;s all that&rsquo;s happening at the system level. The behavior and vault structure emerge from usage. We don&rsquo;t need MCPs, complex integrations, and expansive harness logic. Claude already knows how to navigate through Markdown links, and knows what to do!</p>
<h2 id="extension">Extension</h2>
<p><strong>The control plane is shoved entirely into the context!</strong></p>
<p>Scheduled tasks are introduced by <em>conventions</em>. The heartbeat prompt routes to a <code>CLAUDE.md</code> which gives instructions. Those instructions route to a <code>scheduled_tasks.md</code>. Every line of that looks like:</p>
<p><code>do once a week, last done 8/9/2026, route/to/task.md</code></p>
<p>CC is smart enough to downselect and fan out subagents. Maybe <code>task.md</code> just says to check the price of Bitcoin and mention in my daily note if it&rsquo;s above $100k. (Just kidding don&rsquo;t care!). None of the scheduling logic ends up in my harness!</p>
<h2 id="security">Security</h2>
<p>Groundhog runs CC with <code>--dangerously-skip-permissions</code>. The agent is an unprivileged system user in a <code>systemd</code> jail. Everything is read-only except the vault and its own home. What the jail can&rsquo;t bound is the network, the inbox should be treated (guarded) like a shell.</p>
<h2 id="the-dream">The Dream</h2>
<p>AI is kind of a trap for a lot of computer-touching individuals. Lots of raw brainpower has been dumped into agent frameworks and harnesses. There&rsquo;s a dopamine hit of seeing an agent start to improve itself. My goal has been largely to remain aware while resisting the mind virus. Most of these projects are dead ends - <a href="https://vintagedata.org/blog/posts/model-is-the-product">Commentators</a> have noted the dynamics at play lead to vertical absorption of anything interesting. If your product is a thin wrapper around a Claude model, then there&rsquo;s not much barrier to them just implementing it.</p>
<p>Fear of being left behind drives a lot of AI-adjacent development. Instead I would like to engage with hope: that this technology should allow us to achieve more in less time, to make better decisions, and to be more aware of the world and the things that we care about.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Too Much Control Plane In Your Context</title>
      <link>https://paradigmatic.systems/posts/control-plane-context/</link>
      <pubDate>Sun, 22 Feb 2026 04:30:00 +0000</pubDate>
      
      <guid>https://paradigmatic.systems/posts/control-plane-context/</guid>
      <description>The agent harness—the control plane between your code and the model—is the next bottleneck. Why cramming it into your context is a costly mistake.</description>
      <content:encoded><![CDATA[<p><em>I&rsquo;ve consulted several groups helping to optimize their AI agent workflows. This is part of a series on basic agent architecture to help clarify core mental models and avoid costly design mistakes.</em></p>
<p>With model capabilities going <a href="https://ceselder.substack.com/p/when-must-i-start-kicking-and-screaming">parabolic</a>, attention is turning to the control plane (or &ldquo;harness&rdquo; - the orchestration layer between your code and your model) as the next bottleneck. It seems to be a source of <a href="https://blog.can.ac/2026/02/12/the-harness-problem/">low-hanging fruits</a> as well as contention from the model providers who have very good reasons to force you to use theirs.</p>
<p>Many AI users are happy to treat the harness as a solved problem within their IDE of choice, or as a compositional primitive in their orchestration system (&ldquo;Claude Code instances lashed together&rdquo;).</p>
<p>However, examining some of the most basic workflows implies a better way forward!</p>
<p>These are simplified illustrations. Production frameworks handle these specific cases, but the <em>pattern</em> applies everywhere. Most projects have similar inefficiencies waiting to be optimized.</p>
<h2 id="re-learning-the-whole-codebase-at-every-step">Re-Learning The Whole Codebase At Every Step</h2>
<p>You task an agent within a workspace. It knows how to orient itself:</p>
<ul>
<li>System prompt</li>
<li>Tasking prompt</li>
<li>Command-line tool calls: <code>pwd</code>, <code>cat AGENTS.md</code>, or whatnot.</li>
</ul>
<p>After ascertaining the structure and identifying the locations of interest, it proceeds. Now during the problem-solving phase, the orientation steps are just noise. Why do we need to infer these command line operations to begin with?</p>
<p>Instead of CLI tools, we could expose a prompt-rewriting wrapper called <code>orient</code> that brings in the directory tree and picks out the potential relevant files to feed forward into the actual task execution stage.</p>
<p>These precious early-stage token savings compound through the rest of the context. The orientation alone can consume 15-20% of your context tokens as it&rsquo;s dragged through every subsequent reasoning stup.</p>
<h2 id="paying-a-bot-to-read-terminal-output">Paying A Bot To Read Terminal Output</h2>
<p>At the end of a task, the agent knows to compile and test. It makes the appropriate CLI call and ingests the whole output.</p>
<p>First, note that this is all happening at the tail of all the task-related context: Unnecessary cost.</p>
<p>Next, note the extra overhead involved in generating the compile command and reading from the entire terminal: Unnecessary cost.</p>
<p>A <code>compile</code> tool should wrap the CLI call, parse and truncate any errors or warnings.</p>
<h2 id="terminal-management-anti-pattern">Terminal Management Anti-Pattern</h2>
<p>Have you ever seen an agent try to kill a process running in a different terminal, so it can run its own for testing purposes? This is an anti-pattern if I&rsquo;ve ever seen one.</p>
<p>How about for Nix users, where the agent needs to discover a <code>flake.nix</code> before it knows how to enter the development shell?</p>
<p>A <code>test</code> tool should be overridden to fit the workflow at hand. Maybe it does need to start its own instance. Maybe the reins go to the user who&rsquo;s active in a different window and gives a validation response.</p>
<h2 id="summary">Summary</h2>
<p>Harness development is the next critical step for lowering costs, improving outcomes, and improving security of AI-assisted workflows. You don&rsquo;t need to build everything yourself, but understanding the harness/model boundary helps you choose better tools and know when to customize.</p>
<hr>
<p><em>Building agent workflows? <a href="mailto:rorih@live.com">Email me</a> to discuss your use case for harness design and optimization.</em></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Checking In on AI Agent Architecture: Claude Code, Gas Town, and OpenClaw</title>
      <link>https://paradigmatic.systems/posts/agent-bootstrapping/</link>
      <pubDate>Sat, 31 Jan 2026 04:30:00 +0000</pubDate>
      
      <guid>https://paradigmatic.systems/posts/agent-bootstrapping/</guid>
      <description>Threads behind the most successful AI coding agents—Claude Code, Gas Town, OpenClaw—and a workable path forward for agent architecture.</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve been hesitant to chime in on AI agent architectures other than to say they&rsquo;re <a href="/posts/superfluous-abstractions">not there yet</a>.
The hard takeoff of <a href="https://github.com/openclaw/openclaw">OpenClaw</a> (an always-on AI assistant with countless integrations out of the box) and <a href="https://www.astralcodexten.com/p/best-of-moltbook">Moltbook</a> (a social network for people&rsquo;s AI assistants to chat) created a compelling public spectacle that clearly indicates growing momentum behind LLM-powered abstractions.</p>
<p>Always wary of getting caught up in hype, I&rsquo;d like to chime in again and try to tease out some common threads behind some of the most interesting and successful experiments. In doing so, I&rsquo;ll suggest a potential way forward that I&rsquo;d like to explore.</p>
<h1 id="coding-agents-claude-code">Coding Agents: Claude Code</h1>
<p>This is the daily driver of many a vibe-coder. I only mention it first because it&rsquo;s used as a building block in the next section. Most &ldquo;coding agents&rdquo; share the basic structural features:</p>
<ul>
<li><strong>System Prompt</strong>: The base &ldquo;personality&rdquo; of the LLM.</li>
<li><strong>Tools</strong>: Special types of messages that the LLM can send to invoke some out-of-context execution and retrieve results.</li>
<li><strong>Skills</strong>: Markdown files that can be brought into context, effectively extending the system prompt for some specific task. These are requested by the agent through tool invocation.</li>
<li><strong>Context</strong>: The sum total of all the above, plus conversation history and tool results.</li>
</ul>
<p>Tools give the ability to traverse, edit, and compile filesystem objects.
That&rsquo;s basically it - let it loose in your project folder, say a prayer, and you may get some useful work done.
Your context will probably grow very rapidly, leading to high costs. A wrong turn early in the context can lead to an expensive dead end that needs to be backed out and re-attempted.</p>
<p>My main issue with Claude Code is that the control plane is somewhat opaque:</p>
<ul>
<li>Can you reduce the system prompt?</li>
<li>Can you characterize tool invocations and modify their implementations to use context more frugally?</li>
<li>Can you understand and modify the permission scopes and easily sandbox the agent?</li>
<li>Can you decide when to prune or compact the context to reduce costs?</li>
</ul>
<p>The answer to all might be yes - especially if you adopt an <a href="https://github.com/anomalyco/opencode">open-source</a> alternative and really dig into the tool. My point isn&rsquo;t that these are limitations, but that coding agents simply haven&rsquo;t been appealing enough to dig into their peculiarities. Just YOLO with off-the-shelf settings and maybe you&rsquo;ll get your money&rsquo;s worth.</p>
<h1 id="orchestration-gas-town">Orchestration: Gas Town</h1>
<p>This highly deranged and entertaining article on the <a href="https://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04">Gas Town</a> project describes experiments with assigning roles and lashing together instances of Claude Code. The author admits that Gas Town is &ldquo;expensive as hell&rdquo;. The math is simple: if Claude Code munches a ton of tokens, then dozens of Claude Codes munch dozens of tons of tokens.</p>
<p>The results are undeniably interesting. I struggle to get my head around the numerous roles and abstractions invented by the author, who seems delightfully able to come up with ideas faster than anyone can keep up with. The issue here is that the orchestration plane is highly opinionated and, as above, difficult to reorganize without really digging into the tool.</p>
<p>Research from <a href="https://research.google/blog/towards-a-science-of-scaling-agent-systems-when-and-why-agent-systems-work/">Google</a> finds that multi-agent systems aren&rsquo;t always the best tool for the job - so orchestrated agents like Gas Town might never be the default.</p>
<h1 id="pi">Pi</h1>
<p>Pi is the <a href="https://lucumr.pocoo.org/2026/1/31/pi/">&ldquo;Minimal Agent&rdquo;</a> powering OpenClaw.
It is fundamentally similar to any other coding agent, but with a focus on starting with a slim set of core tools (Read, Write, Edit, Bash) and encouraging extension into modular components.</p>
<p>The core philosophy seems to be that a coding agent should know how to extend itself. This lead to a rapid bootstrapping of integrations, plus easy onboarding.</p>
<p>The tool has gone viral as an always-on AI assistant. While the idea is appealing, I can&rsquo;t personally recommend it as the security attack surface seems way too large.</p>
<h1 id="what-next">What Next?</h1>
<p>My recent work in data modeling has centered around one idea: By starting at the modeling level, you lock yourself into architecture and tooling. An alternative approach is to work from a metamodel foundation that has introspection - the ability to self-host. This gives you flexibility, provenance, and reproducibility.</p>
<p>My hypothesis at this point is that a true Minimal Agent shouldn&rsquo;t work with filesystem and command-line primitives. Instead, the minimal tools for bootstrapping any kind of agent architecture might be:</p>
<ul>
<li>defining tools</li>
<li>defining agent profiles</li>
<li>creating workspaces (sandboxed VMs!)</li>
<li>spawning agents into workspaces</li>
</ul>
<p>This meta-agent&rsquo;s prime concepts are security, scope, and orchestration. It has a self-definition. It could end up spawning new agents that look like Gas Town in one VM, or Pi in another.</p>
<p>I just need a catchy project name and I&rsquo;ll get a proof of concept online!</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
