<?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>Seekdb on Mini Fish</title>
    <link>https://blog.minifish.org/tags/seekdb/</link>
    <description>Recent content in Seekdb on Mini Fish</description>
    <image>
      <title>Mini Fish</title>
      <url>https://blog.minifish.org/android-chrome-512x512.png</url>
      <link>https://blog.minifish.org/android-chrome-512x512.png</link>
    </image>
    <generator>Hugo -- 0.161.1</generator>
    <language>en-US</language>
    <copyright>Mini Fish 2014-present. Licensed under CC-BY-NC</copyright>
    <lastBuildDate>Tue, 26 May 2026 09:00:00 +0800</lastBuildDate>
    <atom:link href="https://blog.minifish.org/tags/seekdb/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>agentd: A Transport-Neutral Runtime for Personal Agents</title>
      <link>https://blog.minifish.org/posts/agentd-wasm-agent-runtime/</link>
      <pubDate>Tue, 26 May 2026 09:00:00 +0800</pubDate>
      <guid>https://blog.minifish.org/posts/agentd-wasm-agent-runtime/</guid>
      <description>A project note on agentd, a single-host agent runtime with a transport-neutral turn API, a built-in generic agent, SeekDB-backed state, and explicit host tools.</description>
      <content:encoded><![CDATA[<p><code>agentd</code> is a single-host agent runtime and control plane. Its current shape is transport-neutral: external systems drive agents through <code>POST /v1/turns</code>, then read results back through the run output API. The runtime owns state, tools, scheduling, memory, artifacts, and the generic agent loop.</p>
<p>That is a different direction from the first version of this note, which described <code>agentd</code> mainly as a Wasm-native harness. The pushed version is now more concrete: an <code>Agent</code> is a manifest with a system prompt, visible tool catalog, resource limits, and a model choice. The actual handler is the built-in generic agent.</p>
<h2 id="turn-api">Turn API</h2>
<p>A caller submits:</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-text" data-lang="text"><span style="display:flex;"><span>POST /v1/turns
</span></span></code></pre></div><p>with a tenant, <code>agent_ref</code>, scope, and payload. The runtime creates an <code>AgentRun</code>, resolves a lane, assembles the visible tools, invokes the generic agent, and records a structured <code>final_decision</code>.</p>
<p>There is no push side. A Telegram bot, a browser game, or another transport bridge should call the API and render the result itself. That keeps <code>agentd</code> from becoming coupled to a specific messaging system.</p>
<h2 id="capability-surface">Capability surface</h2>
<p>The current public tool surface includes:</p>
<ul>
<li><code>plan.*</code></li>
<li><code>run.*</code></li>
<li><code>schedule.*</code></li>
<li><code>artifact.*</code></li>
<li><code>memory.*</code></li>
<li><code>context.*</code></li>
<li><code>web.*</code></li>
<li><code>clock.*</code></li>
<li><code>llm.*</code></li>
<li><code>output.*</code></li>
</ul>
<p>The important pattern is that tools carry reliability metadata: maturity, idempotency, side-effect scope, failure classes, replay expectations, and delivery semantics. That metadata is part of making agent behavior inspectable instead of magical.</p>
<h2 id="storage-model">Storage model</h2>
<p>Durable state now lives in SeekDB, a MySQL-compatible OceanBase-derived database. Control-plane state, context, artifacts, and memory all use that one database boundary. Memory is per tenant and uses native vector plus full-text retrieval.</p>
<p>This is a pragmatic simplification. There is no MinIO, S3, Litestream, or separate object store in the core path.</p>
<h2 id="what-i-learned">What I learned</h2>
<p>Agents need less magic and more runtime discipline. Even a personal agent runtime has to answer boring operational questions:</p>
<ul>
<li>context scopes matter</li>
<li>retries can duplicate work</li>
<li>memory needs indexing and pruning</li>
<li>tools need permission boundaries</li>
<li>failures need artifacts and logs</li>
<li>callers need a stable way to wait for output</li>
</ul>
<p>The useful boundary is no longer just Wasm. It is the turn contract plus explicit host capabilities.</p>
<h2 id="current-status">Current status</h2>
<p><code>agentd</code> is experimental and private. It is useful as a lab for runtime shape, but I do not consider it a public platform yet. The public lesson is the architecture: keep transports outside the core runtime, keep tool capabilities explicit, and make every run produce inspectable output.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
