<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>pi-go</title><link>http://pi-go.sh/feed.xml</link><description>Recent content on pi-go</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 29 Aug 2026 00:00:00 +0200</lastBuildDate><atom:link href="http://pi-go.sh/feed.xml" rel="self" type="application/rss+xml"/><item><title>Five coding agents, one protocol</title><link>http://pi-go.sh/blog/antigravity-acp/</link><pubDate>Sat, 29 Aug 2026 00:00:00 +0200</pubDate><guid>http://pi-go.sh/blog/antigravity-acp/</guid><description>&lt;p&gt;pi-go runs other coding agents as subagents. It already spoke to Claude, Gemini,&#10;Cursor, and Copilot over the Agent Client Protocol (ACP) — a stdio protocol that&#10;lets one agent drive another. Adding a fifth, Google Antigravity, sounded like a&#10;one-afternoon job. It wasn&amp;rsquo;t, and the reason is a good lesson about what &amp;ldquo;supports&#10;ACP&amp;rdquo; actually means.&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="http://pi-go.sh/blog/media/antigravity-subagent.gif" alt="The bundled agy subagent definition"&gt;&lt;/p&gt;&#10;&lt;h2 id="the-twist-the-vendor-cli-is-not-the-acp-endpoint"&gt;The twist: the vendor CLI is not the ACP endpoint&lt;/h2&gt;&#10;&lt;p&gt;For Claude, Gemini, Cursor, and Copilot, the ACP adapter wraps the vendor&amp;rsquo;s own&#10;interactive CLI. You launch &lt;code&gt;claude&lt;/code&gt;, &lt;code&gt;gemini&lt;/code&gt;, or &lt;code&gt;cursor&lt;/code&gt; and it speaks ACP over&#10;stdio.&lt;/p&gt;</description></item><item><title>Memory Palace: four layers of context</title><link>http://pi-go.sh/blog/memory-palace/</link><pubDate>Sat, 29 Aug 2026 00:00:00 +0200</pubDate><guid>http://pi-go.sh/blog/memory-palace/</guid><description>&lt;p&gt;The Memory Palace is pi-go&amp;rsquo;s persistent contextual memory — SQLite facts, semantic embeddings, a temporal knowledge graph, and background project miners that turn your codebase into structured recall the agent can query on demand.&lt;/p&gt;&#10;&lt;h2 id="what-the-memory-palace-is"&gt;What the Memory Palace is&lt;/h2&gt;&#10;&lt;p&gt;Most coding agents start every session with the same blank slate: whatever fits in the system prompt plus whatever they re-read from disk. pi-go keeps a second brain on disk. Every tool call the agent makes is captured, compressed, and stored; every file in your project can be mined into searchable embeddings; relationships between entities are tracked as temporal triples that can be invalidated when the world changes. The result is the &lt;em&gt;Memory Palace&lt;/em&gt; — a four-layer contextual memory that lives under &lt;code&gt;internal/palace/&lt;/code&gt; and &lt;code&gt;internal/memory/&lt;/code&gt; and is queried through native ADK tools and the &lt;code&gt;pi memory&lt;/code&gt; command.&lt;/p&gt;</description></item><item><title>Running Mistral in a multi-provider CLI</title><link>http://pi-go.sh/blog/mistral-provider-pitfalls/</link><pubDate>Sat, 29 Aug 2026 00:00:00 +0200</pubDate><guid>http://pi-go.sh/blog/mistral-provider-pitfalls/</guid><description>&lt;p&gt;Adding a new LLM provider to a tool that already speaks to Claude, OpenAI, Gemini,&#10;and Grok sounds mechanical: implement the request, map the response, ship it. The&#10;Mistral integration in pi-go turned out to be a series of small, sharp lessons —&#10;each one a bug that only shows up against the &lt;em&gt;live&lt;/em&gt; API, never in a unit test.&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="http://pi-go.sh/blog/media/mistral-thinking.gif" alt="The Mistral provider test suite passing"&gt;&lt;/p&gt;&#10;&lt;h2 id="lesson-1-prompt_mode-is-not-reasoning_effort"&gt;Lesson 1: &lt;code&gt;prompt_mode&lt;/code&gt; is not &lt;code&gt;reasoning_effort&lt;/code&gt;&lt;/h2&gt;&#10;&lt;p&gt;pi-go&amp;rsquo;s default thinking level is &amp;ldquo;high&amp;rdquo;. When the Mistral provider was first&#10;written, it translated that into &lt;code&gt;prompt_mode: &amp;quot;reasoning&amp;quot;&lt;/code&gt; on the wire for the&#10;&lt;code&gt;magistral&lt;/code&gt; family — because the reference implementation the plan was drawn from&#10;uses Mistral&amp;rsquo;s &lt;em&gt;conversations&lt;/em&gt; API, which takes &lt;code&gt;prompt_mode&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Subagents: fanning out work without losing the thread</title><link>http://pi-go.sh/blog/subagent-system/</link><pubDate>Sat, 29 Aug 2026 00:00:00 +0200</pubDate><guid>http://pi-go.sh/blog/subagent-system/</guid><description>&lt;p&gt;When a task is too big for one loop, pi-go spawns typed child agents — some in isolated git worktrees, some over the Agent Client Protocol — and orchestrates them with a bounded pool, retries, and clean cancellation so you never lose track of what&amp;rsquo;s running.&lt;/p&gt;&#10;&lt;h2 id="what-a-subagent-actually-is"&gt;What a subagent actually is&lt;/h2&gt;&#10;&lt;p&gt;A subagent is a separate process pi-go launches to do a focused job and report back. The main agent&amp;rsquo;s tool loop can call a &lt;code&gt;subagent&lt;/code&gt; tool with one of three modes — &lt;strong&gt;single&lt;/strong&gt;, &lt;strong&gt;parallel&lt;/strong&gt;, or &lt;strong&gt;chain&lt;/strong&gt; — and the orchestrator handles the rest: it resolves the agent&amp;rsquo;s role and model, acquires a pool slot, optionally creates a worktree, launches the process, and streams events back as JSONL.&lt;/p&gt;</description></item><item><title>The DeepSeek and GLM-5.3 effect</title><link>http://pi-go.sh/blog/deepseek-glm53-growth/</link><pubDate>Sat, 29 Aug 2026 00:00:00 +0200</pubDate><guid>http://pi-go.sh/blog/deepseek-glm53-growth/</guid><description>&lt;p&gt;&lt;em&gt;August 2026 — a data-driven look at my pi-go agent session history&lt;/em&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="tldr"&gt;TL;DR&lt;/h2&gt;&#10;&lt;p&gt;Switching my coding agent&amp;rsquo;s default model to &lt;strong&gt;DeepSeek&lt;/strong&gt; (via local Ollama) and adding &lt;strong&gt;GLM-5.3&lt;/strong&gt; to the rotation produced the single biggest jump in usage I&amp;rsquo;ve ever recorded. Monthly session volume went from a mid-year slump of &lt;strong&gt;326&lt;/strong&gt; to an all-time high of &lt;strong&gt;1,868&lt;/strong&gt; — a &lt;strong&gt;5.7× increase&lt;/strong&gt; — and the new model stack now accounts for &lt;strong&gt;~54% of all sessions&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Your coding agent should draw diagrams</title><link>http://pi-go.sh/blog/mermaid-in-the-terminal/</link><pubDate>Sat, 29 Aug 2026 00:00:00 +0200</pubDate><guid>http://pi-go.sh/blog/mermaid-in-the-terminal/</guid><description>&lt;p&gt;Coding agents talk in text. That&amp;rsquo;s fine for a diff, but it&amp;rsquo;s a terrible medium for&#10;architecture. When I ask an agent &amp;ldquo;how does auth flow through this service?&amp;rdquo;, the&#10;honest answer is a diagram — boxes, arrows, a fork where a request can go two ways.&#10;A wall of prose is the wrong shape for that.&lt;/p&gt;&#10;&lt;p&gt;So I taught pi-go to draw Mermaid diagrams &lt;em&gt;in the terminal&lt;/em&gt;, and the interesting&#10;part turned out to be everything that isn&amp;rsquo;t the diagram.&lt;/p&gt;</description></item><item><title>OpenRouter arrives in Pi-Go</title><link>http://pi-go.sh/blog/openrouter-provider/</link><pubDate>Mon, 24 Aug 2026 00:00:00 +0200</pubDate><guid>http://pi-go.sh/blog/openrouter-provider/</guid><description>&lt;h2 id="one-provider-many-model-families"&gt;One provider, many model families&lt;/h2&gt;&#10;&lt;p&gt;OpenRouter exposes models from multiple labs behind one OpenAI-compatible API. In Pi-Go, select one by adding the &lt;code&gt;openrouter/&lt;/code&gt; provider prefix to its OpenRouter model ID. The prefix is detected automatically, so no separate provider flag is needed.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;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;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Configure your OpenRouter key&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ export OPENROUTER_API_KEY&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;sk-or-v1-...&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Use a specific model&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ pi --model openrouter/google/gemini-3.7-flash&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Or let OpenRouter choose&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ pi --model openrouter/auto&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pi-Go uses OpenRouter&amp;rsquo;s standard endpoint by default. Self-hosted gateways and compatible proxies can override it with &lt;code&gt;OPENROUTER_BASE_URL&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Introducing Pi-Go</title><link>http://pi-go.sh/blog/introducing-pi-go/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0200</pubDate><guid>http://pi-go.sh/blog/introducing-pi-go/</guid><description>&lt;h2 id="why-another-coding-agent"&gt;Why another coding agent?&lt;/h2&gt;&#10;&lt;p&gt;The browser-tab and IDE-plugin coding agents are powerful, but they pull you out of the terminal — where real work happens. pi-go is opinionated about staying there. It’s a TUI that speaks JSON-RPC to language servers, talks to whatever LLM you prefer, and executes tools inside a strict sandbox so you don’t have to trust it beyond what it needs to see.&lt;/p&gt;&#10;&lt;h2 id="whats-in-the-box"&gt;What’s in the box&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Multi-provider LLMs.&lt;/strong&gt; Anthropic, OpenAI, Gemini, and local Ollama models. Switch providers mid-conversation with a slash command.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Sandboxed tools.&lt;/strong&gt; File read/write/edit, shell execution, grep, find, tree, and git — all confined to the project directory via &lt;code&gt;os.Root&lt;/code&gt;. No accidental &lt;code&gt;rm -rf ~&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Memory Palace.&lt;/strong&gt; A four-layer contextual memory combining SQLite, semantic embeddings, a temporal knowledge graph, and background project miners that learn your codebase while you work.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;LSP integration.&lt;/strong&gt; A JSON-RPC client for Go, TypeScript, Python, and Rust with auto-format and diagnostics hooks wired into the agent loop.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Subagent system.&lt;/strong&gt; Process-based orchestration with typed roles — explore, plan, designer, reviewer, task runner — so big tasks fan out cleanly.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Session branching.&lt;/strong&gt; JSONL append-only event logs with branching, compaction, and resume. Fork a conversation, try a different approach, merge back.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="get-started-in-one-command"&gt;Get started in one command&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;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;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Linux and macOS&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ curl -fsSL https://raw.githubusercontent.com/dimetron/pi-go/main/scripts/install.sh | bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Windows PowerShell&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;PS&amp;gt; powershell -NoProfile -Command &lt;span style="color:#e6db74"&gt;&amp;#34;iwr https://raw.githubusercontent.com/dimetron/pi-go/main/scripts/install.ps1 -UseBasicParsing | iex&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Or with go install&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ go install github.com/dimetron/pi-go/cmd/pi@latest&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Run it&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ pi&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="whats-next"&gt;What’s next&lt;/h2&gt;&#10;&lt;p&gt;This is the first post and the project is very much in motion. Upcoming: deeper dives on the Memory Palace, the sandbox threat model, and how the subagent system dispatches work. Subscribe to the &lt;a href="http://pi-go.sh/feed.xml"&gt;RSS feed&lt;/a&gt; or watch the repo on GitHub to follow along.&lt;/p&gt;</description></item></channel></rss>