<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>localgpt.rs - localgpt</title>
    <subtitle>A devlog of how LocalGPT and its apps, Gen, Verse, and MD, are built in Rust: what was tried, what broke, and the numbers. Every post lists its sources.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://localgpt.rs/projects/localgpt/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://localgpt.rs"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-03-09T00:00:00+00:00</updated>
    <id>https://localgpt.rs/projects/localgpt/atom.xml</id>
    <entry xml:lang="en">
        <title>Explorable World as Agent Skill</title>
        <published>2026-03-09T00:00:00+00:00</published>
        <updated>2026-03-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            Yi
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://localgpt.rs/world-as-skill/"/>
        <id>https://localgpt.rs/world-as-skill/</id>
        
        <content type="html" xml:base="https://localgpt.rs/world-as-skill/">&lt;p&gt;&lt;img src=&quot;&#x2F;img&#x2F;desert-pyramids-ufo-screenshot.png&quot; alt=&quot;desert-pyramids-ufo-screenshot.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;LocalGPT Gen&lt;&#x2F;strong&gt; v0.3.2 introduces a new concept: treating complete 3D worlds as reusable skills that agents can save, load, and share.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;localgpt-gen&lt;&#x2F;code&gt; now saves complete worlds as skill directories containing:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Scene geometry&lt;&#x2F;strong&gt; — All entities, meshes, and transforms&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Behaviors&lt;&#x2F;strong&gt; — Animations like orbit, spin, bob, path following&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Audio configuration&lt;&#x2F;strong&gt; — Ambient soundscapes and spatial emitters&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The skill folder structure:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;skills&#x2F;my-world&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;├── SKILL.md          # Description and usage&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;├── world.ron         # World manifest with entities preserves parametric shapes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;└── export&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    └── scene.glb     # glTF export (generated on demand)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This is inspired by &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ahujasid&#x2F;blender-mcp&quot;&gt;blender-mcp&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;natepiano&#x2F;bevy_brp&quot;&gt;bevy_brp&lt;&#x2F;a&gt;, and may shrink the software supply chain from intent to result a little bit more.&lt;&#x2F;p&gt;
&lt;p&gt;LocalGPT Gen is closer to the domain of tools for &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;localgpt.app&#x2F;docs&#x2F;worlds&quot;&gt;Explorable World&lt;&#x2F;a&gt; like Genie 3, SIMA 2, Marble, Intangible and Artcraft.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Showcases:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;localgpt-app&#x2F;localgpt-gen-workspace&quot;&gt;localgpt-gen-workspace&lt;&#x2F;a&gt; — “World as skill” examples: complete explorable worlds saved as reusable, shareable skills&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;proofof.video&#x2F;&quot;&gt;proofof.video&lt;&#x2F;a&gt; — Video gallery comparing world generations across different models using the same or similar prompts&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Many players are advancing the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;localgpt.app&#x2F;docs&#x2F;claw&quot;&gt;Claw Ecosystem&lt;&#x2F;a&gt; so the agent memory and orchestration will improve automatically.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Why I Built LocalGPT in 4 Nights</title>
        <published>2026-02-07T00:00:00+00:00</published>
        <updated>2026-02-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            Yi
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://localgpt.rs/why-i-built-localgpt-in-4-nights/"/>
        <id>https://localgpt.rs/why-i-built-localgpt-in-4-nights/</id>
        
        <content type="html" xml:base="https://localgpt.rs/why-i-built-localgpt-in-4-nights/">&lt;p&gt;I’m a data engineer by day. At night, I’ve been building side projects — apps, games, the usual fun stuff. I kept running into the same problem: context. Every time I started a new AI chat session, I had to re-explain my projects, my preferences, my decisions. The AI had amnesia.&lt;&#x2F;p&gt;
&lt;p&gt;Then I discovered OpenClaw.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-openclaw-pattern&quot;&gt;The OpenClaw Pattern &lt;a class=&quot;anchor&quot; href=&quot;#the-openclaw-pattern&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;OpenClaw pioneered something elegant: a set of markdown files that give an AI assistant persistent context.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SOUL&lt;&#x2F;strong&gt; — personality and behavioral guidance&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;MEMORY&lt;&#x2F;strong&gt; — long-term knowledge that persists across sessions&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;HEARTBEAT&lt;&#x2F;strong&gt; — a task queue the assistant checks autonomously&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;It’s brilliant in its simplicity. No databases to manage. No complex state machines. Just markdown files that both humans and AI can read and write.&lt;&#x2F;p&gt;
&lt;p&gt;But OpenClaw is a full platform — ~460k lines of TypeScript across ~2,500 files, with a gateway, mobile apps, multi-channel integrations, and Docker deployments. I wanted something smaller.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;4-nights-in-rust&quot;&gt;4 Nights in Rust &lt;a class=&quot;anchor&quot; href=&quot;#4-nights-in-rust&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;I wondered: what does this architecture look like as a single Rust binary? So I paired up with Claude and here’s what happened.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Night 1 (Feb 1, 2 commits)&lt;&#x2F;strong&gt;: The foundation. Core agent system with the full module architecture (agent, CLI, daemon, memory, server, heartbeat), streaming responses, and the initial project structure. By midnight: a working skeleton. ~3,000 lines.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Night 2 (Feb 2-3, 34 commits — the marathon)&lt;&#x2F;strong&gt;: This is where it came alive. Claude CLI as the primary LLM provider, OpenClaw-compatible file structure, SOUL persona support, system prompt with identity and safety, skills system, readline CLI with arrow keys and history, SQLite memory index with FTS5, embeddings and vector search, streaming tool execution, WebSocket API, session persistence, Anthropic streaming, model selection, and memory management — and by 2am, a working end-to-end system. The most productive night by far.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Night 3 (Feb 3, 27 commits)&lt;&#x2F;strong&gt;: Woke up and kept going. Local embeddings with fastembed for semantic search, multi-session HTTP API with 6+ endpoints, token tracking, file and image attachments, tool approval mode, an embedded web UI served from the binary, daemon mode running heartbeat and server concurrently, configurable memory indexing, session management, and config API endpoints.&lt;&#x2F;p&gt;
&lt;p&gt;By the afternoon of Feb 3, I couldn’t resist — I got this running on my work machine, tweaked the configuration, and started integrating it into my actual workflow. I set up heartbeat tasks to autonomously discover and summarize data pipeline improvements for my team. It went from side project to daily tool in two days.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Night 4 (Feb 4-5, 18 commits)&lt;&#x2F;strong&gt;: Polish and hardening. First-run experience improvements, configurable embedding providers with multilingual model support, heartbeat task tracking with git integration, a daemon logs panel and session viewer in the web UI, date-based rolling logs, prompt injection defenses (a full 381-line sanitization module), cached MemoryManager, GGUF embedding support via llama.cpp, and the egui-based desktop GUI app.&lt;&#x2F;p&gt;
&lt;p&gt;After that, a few days of bug fixes and documentation.&lt;&#x2F;p&gt;
&lt;p&gt;The result: ~15k lines of Rust (+ ~1,400 lines of HTML&#x2F;CSS&#x2F;JS for the web UI), a ~27MB binary, and &lt;code&gt;cargo install localgpt&lt;&#x2F;code&gt; just works. No Node.js. No Docker. No Python. (The embedding model cache may require a few hundred MB of disk space, depending on the model you choose.)&lt;&#x2F;p&gt;
&lt;p&gt;For perspective, when this post is written:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt; OpenClaw: ~460k lines of TypeScript across ~2,500 files&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; find&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; openclaw&#x2F;src&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;*.ts&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; wc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;l&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;    2598&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; find&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; openclaw&#x2F;src&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;*.ts&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; xargs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; wc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;l&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; tail&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;  463649&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; total&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt; LocalGPT: ~15k lines of Rust across 43 files&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; find&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; localgpt&#x2F;src&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;*.rs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; wc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;l&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;      43&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; find&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; localgpt&#x2F;src&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;*.rs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; xargs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; wc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;l&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; tail&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;   15031&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; total&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;To be fair, this isn’t an apples-to-apples comparison. OpenClaw is a full platform — it includes a gateway, mobile apps, multi-channel integrations, and much more that LocalGPT simply doesn’t have now. LocalGPT currently is a focused, single-user tool. The point isn’t that less code is better — it’s that you can get surprisingly far with a narrow scope and the right language.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;how-i-actually-use-it&quot;&gt;How I Actually Use It &lt;a class=&quot;anchor&quot; href=&quot;#how-i-actually-use-it&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;LocalGPT runs as a daemon on my machine — &lt;code&gt;localgpt daemon start&lt;&#x2F;code&gt;. Every heartbeat interval, it checks HEARTBEAT for tasks.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Knowledge accumulator&lt;&#x2F;strong&gt; — It remembers my project context across sessions. My TODO list, my decisions. I never re-explain.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Research assistant&lt;&#x2F;strong&gt; — “What embedding models support multilingual search?” It researches, summarizes, and saves the answer to my knowledge bank for next time.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Autonomous worker&lt;&#x2F;strong&gt; — I use &lt;code&gt;localgpt chat&lt;&#x2F;code&gt; and add tasks to HEARTBEAT and walk away. It organizes my knowledge files, researches topics, drafts content, and reminds me of approaching deadlines.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Memory that compounds&lt;&#x2F;strong&gt; — Every session makes the next one better. It builds a structured knowledge bank across domains — finance, legal, tech — all on my personal computer — that grows over time.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-technical-bits&quot;&gt;The Technical Bits &lt;a class=&quot;anchor&quot; href=&quot;#the-technical-bits&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;For those interested in the stack:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tokio&lt;&#x2F;strong&gt; async runtime for concurrent operations&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Axum&lt;&#x2F;strong&gt; for the HTTP API&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;SQLite&lt;&#x2F;strong&gt; with FTS5 for full-text search and sqlite-vec for semantic search&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;fastembed&lt;&#x2F;strong&gt; for local embeddings (no API key needed)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;eframe&lt;&#x2F;strong&gt; for the desktop GUI&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;rusqlite&lt;&#x2F;strong&gt; with bundled SQLite (zero system dependencies)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The architecture is intentionally simple. Markdown files are the source of truth. SQLite is the index. The binary is the runtime. That’s it.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;open-source&quot;&gt;Open Source &lt;a class=&quot;anchor&quot; href=&quot;#open-source&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;LocalGPT is open source under the Apache 2.0 license. Fork it, extend it, build something better — that’s the point.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;cargo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; install&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; localgpt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;localgpt&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; config&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; init&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;localgpt&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; chat&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you’re building with AI assistants — whether you’re in the OpenClaw community or rolling your own — I’d love to hear what patterns are working for you.&lt;&#x2F;p&gt;
&lt;p&gt;GitHub: https:&#x2F;&#x2F;github.com&#x2F;localgpt-app&#x2F;localgpt
Website: https:&#x2F;&#x2F;localgpt.app&lt;&#x2F;p&gt;
&lt;h3 id=&quot;one-more-thing&quot;&gt;One more thing… &lt;a class=&quot;anchor&quot; href=&quot;#one-more-thing&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;I don’t have access to Project Genie 3, so I made my own (extremely minified) version.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;LocalGPT Gen&lt;&#x2F;strong&gt; is a built-in 3D scene generation mode. You type natural language, and the AI composes 3D scenes from geometric primitives — spheres, cubes, cylinders, tori — with full material control, lighting, and camera positioning. All inside the same single Rust binary, powered by Bevy.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt; Enable the gen feature and try it&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;cargo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; install&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; localgpt&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;-features&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; gen&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;localgpt&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; gen&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;create a heart outline with spheres and cubes&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The agent gets 11 tools — &lt;code&gt;gen_spawn_primitive&lt;&#x2F;code&gt;, &lt;code&gt;gen_modify_entity&lt;&#x2F;code&gt;, &lt;code&gt;gen_set_camera&lt;&#x2F;code&gt;, &lt;code&gt;gen_set_light&lt;&#x2F;code&gt;, &lt;code&gt;gen_spawn_mesh&lt;&#x2F;code&gt;, and more — and iteratively builds scenes by spawning shapes, adjusting materials, and positioning the camera. It can see what it built via &lt;code&gt;gen_screenshot&lt;&#x2F;code&gt; and course-correct.&lt;&#x2F;p&gt;
&lt;p&gt;Here’s a quick demo — “create a heart outline with spheres and cubes” using LocalGPT Gen:&lt;&#x2F;p&gt;
&lt;iframe width=&quot;100%&quot; height=&quot;400&quot; src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;n18qnSDmBK0&quot; title=&quot;LocalGPT Gen — Heart Outline Demo&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;p&gt;&lt;strong&gt;Fair warning:&lt;&#x2F;strong&gt; this is early and I haven’t fully validated the results myself. Things work… probably. The architecture is solid — Bevy runs on the main thread, the agent loop runs on a background tokio runtime, and they talk through async mpsc channels — but the actual scene output quality depends heavily on the LLM’s spatial reasoning. Consider it a proof of concept and a fun experiment.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;appendix-complete-commit-log&quot;&gt;Appendix: Complete Commit Log &lt;a class=&quot;anchor&quot; href=&quot;#appendix-complete-commit-log&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;85 commits across 4 nights + follow-up. Every commit listed.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Night 1 — Feb 1 (2 commits)&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;#&lt;&#x2F;th&gt;&lt;th&gt;Hash&lt;&#x2F;th&gt;&lt;th&gt;Time&lt;&#x2F;th&gt;&lt;th&gt;Message&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;55599d3&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;12:33&lt;&#x2F;td&gt;&lt;td&gt;first commit&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;c7e92ed&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;22:55&lt;&#x2F;td&gt;&lt;td&gt;feat: implement LocalGPT core application&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;strong&gt;Night 2 — Feb 2 afternoon → Feb 3 ~2am (34 commits)&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;#&lt;&#x2F;th&gt;&lt;th&gt;Hash&lt;&#x2F;th&gt;&lt;th&gt;Time&lt;&#x2F;th&gt;&lt;th&gt;Message&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;cf9cb6a&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 2 16:27&lt;&#x2F;td&gt;&lt;td&gt;feat: add thread safety and SSE streaming support&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;e143f73&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 2 18:03&lt;&#x2F;td&gt;&lt;td&gt;feat: add Claude CLI as primary LLM provider&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;e549dd2&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 2 19:29&lt;&#x2F;td&gt;&lt;td&gt;feat: add OpenClaw-compatible file structure for session storage&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;6&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;a2b8bc8&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 2 19:31&lt;&#x2F;td&gt;&lt;td&gt;feat: add SOUL.md support for persona&#x2F;tone guidance&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;7&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;3734aea&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 2 19:37&lt;&#x2F;td&gt;&lt;td&gt;feat: add system prompt with identity, safety, and workspace info&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;8&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;9568159&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 2 19:51&lt;&#x2F;td&gt;&lt;td&gt;feat: add tool call style, time, skills system, and &#x2F;new command&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;9&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;9520850&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 2 19:53&lt;&#x2F;td&gt;&lt;td&gt;feat: add OpenClaw config migration support&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;10&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;74505a0&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 2 19:53&lt;&#x2F;td&gt;&lt;td&gt;feat: add memory recall guidance to system prompt&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;11&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;2aebfae&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 2 19:54&lt;&#x2F;td&gt;&lt;td&gt;docs: update CLAUDE.md with skills, CLI commands, and migration info&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;12&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;6cf4b39&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 2 20:04&lt;&#x2F;td&gt;&lt;td&gt;feat: add streaming output in CLI chat + clean up dead code&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;13&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;a22f96e&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 2 20:17&lt;&#x2F;td&gt;&lt;td&gt;feat: auto-create workspace templates and .gitignore on first run&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;14&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;5779539&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 2 20:21&lt;&#x2F;td&gt;&lt;td&gt;fix: move daemon.pid from workspace to state directory&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;15&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;e0fbc7f&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 2 20:24&lt;&#x2F;td&gt;&lt;td&gt;feat: add line editing with rustyline for arrow keys and history&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;16&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;dbe9670&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 2 23:23&lt;&#x2F;td&gt;&lt;td&gt;feat: move SQLite to OpenClaw-compatible location&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;17&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;e05d050&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 2 23:37&lt;&#x2F;td&gt;&lt;td&gt;feat: add embeddings and vector search support&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;18&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;637f611&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 2 23:39&lt;&#x2F;td&gt;&lt;td&gt;feat: add streaming with tool support&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;19&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;d18ebd8&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 2 23:41&lt;&#x2F;td&gt;&lt;td&gt;feat: add session persistence across restarts&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;20&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;39449af&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 2 23:42&lt;&#x2F;td&gt;&lt;td&gt;feat: add WebSocket API for real-time chat&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;21&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;38fdf39&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 2 23:49&lt;&#x2F;td&gt;&lt;td&gt;fix: reorder schema to create index after migration&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;22&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;3283d17&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 3 00:01&lt;&#x2F;td&gt;&lt;td&gt;feat(memory): align SQLite schema with OpenClaw&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;23&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;40de884&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 3 00:15&lt;&#x2F;td&gt;&lt;td&gt;feat: add OpenClaw workspace compatibility and multi-agent support&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;24&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;b82c188&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 3 00:37&lt;&#x2F;td&gt;&lt;td&gt;feat: add Anthropic streaming and fix provider selection&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;25&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;005d896&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 3 00:45&lt;&#x2F;td&gt;&lt;td&gt;feat: align model naming with OpenClaw format&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;26&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;5454349&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 3 00:51&lt;&#x2F;td&gt;&lt;td&gt;fix: correct Anthropic model ID to claude-sonnet-4-20250514&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;27&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;23dd9c9&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 3 00:53&lt;&#x2F;td&gt;&lt;td&gt;feat: use Claude Opus 4.5 as default model&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;28&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;702b7b5&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 3 00:54&lt;&#x2F;td&gt;&lt;td&gt;fix: use correct Anthropic model IDs from official docs&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;29&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;fa0354e&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 3 00:55&lt;&#x2F;td&gt;&lt;td&gt;refactor: only use Claude 4.5 models, remove legacy mappings&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;30&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;693fd5d&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 3 01:08&lt;&#x2F;td&gt;&lt;td&gt;fix: pass tools to streaming API to prevent XML tool output&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;31&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;919a006&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 3 01:13&lt;&#x2F;td&gt;&lt;td&gt;feat: implement streaming tool execution&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;32&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;8fd048e&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 3 01:19&lt;&#x2F;td&gt;&lt;td&gt;fix: memory_append now supports MEMORY.md for persistent facts&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;33&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;bd30e61&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 3 01:20&lt;&#x2F;td&gt;&lt;td&gt;chore: add user data files to gitignore&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;34&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;f469cce&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 3 01:27&lt;&#x2F;td&gt;&lt;td&gt;feat: OpenClaw-style memory management&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;35&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;66fd879&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 3 01:44&lt;&#x2F;td&gt;&lt;td&gt;feat: show file paths and details in tool execution display&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;36&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;6ff42ac&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 3 01:48&lt;&#x2F;td&gt;&lt;td&gt;feat: improve memory search UX&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;strong&gt;Night 3 — Feb 3 morning → midnight (27 commits)&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;#&lt;&#x2F;th&gt;&lt;th&gt;Hash&lt;&#x2F;th&gt;&lt;th&gt;Time&lt;&#x2F;th&gt;&lt;th&gt;Message&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;37&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;8706ca5&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;09:47&lt;&#x2F;td&gt;&lt;td&gt;feat: add local embeddings with fastembed for semantic search&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;38&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;bd302cf&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;14:02&lt;&#x2F;td&gt;&lt;td&gt;chore: change server port to 31327 and fix license to Apache-2.0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;39&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;db86b8a&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;14:05&lt;&#x2F;td&gt;&lt;td&gt;feat: default to claude-cli&#x2F;opus for zero-config startup&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;40&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;2143e43&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;15:35&lt;&#x2F;td&gt;&lt;td&gt;fix: use correct db_path in MemoryWatcher&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;41&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;dc11dc1&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;16:52&lt;&#x2F;td&gt;&lt;td&gt;feat: add configurable memory index paths with glob support&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;42&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;cb2d27e&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;17:09&lt;&#x2F;td&gt;&lt;td&gt;feat: add multi-session HTTP API, token tracking, and daemon improvements&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;43&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;c0d8134&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;17:16&lt;&#x2F;td&gt;&lt;td&gt;feat: add configurable tools and agent parameters&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;44&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;718d10b&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;17:19&lt;&#x2F;td&gt;&lt;td&gt;test: add tests for token tracking and LLM response handling&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;45&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;88b9783&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;17:21&lt;&#x2F;td&gt;&lt;td&gt;docs: update &#x2F;help to mention API token usage in &#x2F;status&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;46&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;b7948f1&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;17:41&lt;&#x2F;td&gt;&lt;td&gt;feat: use config chunk_size and chunk_overlap in memory index&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;47&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;2f1d6a6&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;17:52&lt;&#x2F;td&gt;&lt;td&gt;feat: add session management endpoints and &#x2F;model command&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;48&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;68545bf&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;18:08&lt;&#x2F;td&gt;&lt;td&gt;feat: enhance CLI status and add memory reindex API&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;49&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;45bdd23&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;18:09&lt;&#x2F;td&gt;&lt;td&gt;feat: add session management API endpoints&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;50&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;f190a62&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;18:10&lt;&#x2F;td&gt;&lt;td&gt;feat: add config and saved sessions API endpoints&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;51&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;b2c3b80&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;18:14&lt;&#x2F;td&gt;&lt;td&gt;chore: fix clippy warnings and formatting&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;52&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;327ea18&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;18:16&lt;&#x2F;td&gt;&lt;td&gt;feat: add context usage and session export commands&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;53&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;041d070&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;18:21&lt;&#x2F;td&gt;&lt;td&gt;feat: add session search across all saved sessions&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;54&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;03595d9&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;18:23&lt;&#x2F;td&gt;&lt;td&gt;feat: add file attachments to chat messages&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;55&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;75405cc&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;18:36&lt;&#x2F;td&gt;&lt;td&gt;feat: add tool approval mode for dangerous operations&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;56&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;0bf0f7a&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;18:41&lt;&#x2F;td&gt;&lt;td&gt;feat: add persistent HTTP sessions&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;57&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;f057232&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;18:50&lt;&#x2F;td&gt;&lt;td&gt;feat: add image attachment support for multimodal LLMs&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;58&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;294c9d7&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;20:23&lt;&#x2F;td&gt;&lt;td&gt;feat: add embedded Web UI for browser-based chat&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;59&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;4299ed9&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;20:35&lt;&#x2F;td&gt;&lt;td&gt;fix: daemonize before starting Tokio runtime on macOS&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;60&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;2d7771f&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;21:00&lt;&#x2F;td&gt;&lt;td&gt;fix: cleanup deleted files from memory index during reindex&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;61&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;d01e61c&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;22:08&lt;&#x2F;td&gt;&lt;td&gt;feat: run heartbeat and server concurrently in daemon&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;62&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;c8bf9c2&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;22:13&lt;&#x2F;td&gt;&lt;td&gt;chore: add commented active_hours example to config templates&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;63&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;9afdd22&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;23:53&lt;&#x2F;td&gt;&lt;td&gt;feat: add OpenClaw compatibility for sessions, skills, and workspace files&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;strong&gt;Night 4 — Feb 4 afternoon → Feb 5 ~1am (18 commits)&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;#&lt;&#x2F;th&gt;&lt;th&gt;Hash&lt;&#x2F;th&gt;&lt;th&gt;Time&lt;&#x2F;th&gt;&lt;th&gt;Message&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;64&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;530bc13&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 4 17:10&lt;&#x2F;td&gt;&lt;td&gt;feat: improve first-run experience and Claude CLI provider&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;65&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;fca8290&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 4 18:49&lt;&#x2F;td&gt;&lt;td&gt;feat: add configurable embedding provider for memory search&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;66&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;2525330&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 4 19:06&lt;&#x2F;td&gt;&lt;td&gt;feat(heartbeat): improve task tracking and git integration&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;67&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;e746275&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 4 19:07&lt;&#x2F;td&gt;&lt;td&gt;fix: correct indentation in MemoryManager constructor&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;68&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;0773d78&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 4 19:22&lt;&#x2F;td&gt;&lt;td&gt;fix: remove session memory truncation, add configurable limits&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;69&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;b4b0532&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 4 19:47&lt;&#x2F;td&gt;&lt;td&gt;feat(ui): add daemon logs panel and session viewer&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;70&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;beb82d2&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 4 21:23&lt;&#x2F;td&gt;&lt;td&gt;fix(ui): sessions panel reads from correct agent directory&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;71&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;4b23b3e&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 4 21:59&lt;&#x2F;td&gt;&lt;td&gt;feat(security): add prompt injection defenses&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;72&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;4f5718d&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 4 22:02&lt;&#x2F;td&gt;&lt;td&gt;fix(heartbeat): cache MemoryManager to avoid reinitializing embedding provider&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;73&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;fe36213&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 4 22:08&lt;&#x2F;td&gt;&lt;td&gt;fix(daemon): use date-based rolling logs with configurable retention&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;74&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;34ce89c&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 4 22:20&lt;&#x2F;td&gt;&lt;td&gt;fix(server): update logs endpoint to use date-based log path&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;75&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;7eb8156&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 4 22:27&lt;&#x2F;td&gt;&lt;td&gt;fix(server): share MemoryManager to avoid reinitializing embedding provider&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;76&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;a7fc787&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 4 22:28&lt;&#x2F;td&gt;&lt;td&gt;fix(daemon): disable ANSI color codes in log files&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;77&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;cbc2f67&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 4 23:01&lt;&#x2F;td&gt;&lt;td&gt;chore: suppress unused function warning for test helper&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;78&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;ff86421&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 4 23:16&lt;&#x2F;td&gt;&lt;td&gt;feat(memory): add multilingual embedding models&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;79&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;a3d440f&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 4 23:35&lt;&#x2F;td&gt;&lt;td&gt;feat(memory): add configurable embedding model cache directory&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;80&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;77486d3&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 5 00:22&lt;&#x2F;td&gt;&lt;td&gt;feat(memory): add GGUF embedding support via llama.cpp&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;81&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;c313178&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 5 00:40&lt;&#x2F;td&gt;&lt;td&gt;feat(desktop): add egui-based desktop GUI app&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;strong&gt;Follow-up — Feb 6-7 (4 commits)&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;#&lt;&#x2F;th&gt;&lt;th&gt;Hash&lt;&#x2F;th&gt;&lt;th&gt;Time&lt;&#x2F;th&gt;&lt;th&gt;Message&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;82&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;f573039&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 6 00:40&lt;&#x2F;td&gt;&lt;td&gt;feat: add concurrency protections for workspace files&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;83&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;6bd21a3&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 6 02:10&lt;&#x2F;td&gt;&lt;td&gt;feat: add streaming tool details and slash commands to egui&#x2F;web UIs&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;84&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;9c91931&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 7 15:36&lt;&#x2F;td&gt;&lt;td&gt;fix: resolve UTF-8 boundary panics in memory search snippets and simplify indexing&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;85&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;6f4ea95&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Feb 7 21:06&lt;&#x2F;td&gt;&lt;td&gt;docs: rewrite README and update crate metadata for v0.1.2&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
</content>
        
    </entry>
</feed>
