<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: badlogic</title><link>https://news.ycombinator.com/user?id=badlogic</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 28 Oct 2026 03:22:49 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=badlogic" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by badlogic in "Pi 1.0"]]></title><description><![CDATA[
<p>/settings > tui > regular<p>it's still there and won't get removed.</p>
]]></description><pubDate>Fri, 02 Oct 2026 10:36:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=49931976</link><dc:creator>badlogic</dc:creator><comments>https://news.ycombinator.com/item?id=49931976</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49931976</guid></item><item><title><![CDATA[New comment by badlogic in "Pi 1.0"]]></title><description><![CDATA[
<p>Multiple answers. Windows Terminal users constantly had problems because WT is ... not great. Fullscreen mode fixes that. This also applies to some other lesser used terminals.<p>I wanted the out of the box experience to be smoother for more people, so made it the default. Scrollback mode will stay though for users who prefer it.</p>
]]></description><pubDate>Fri, 02 Oct 2026 10:36:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=49931969</link><dc:creator>badlogic</dc:creator><comments>https://news.ycombinator.com/item?id=49931969</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49931969</guid></item><item><title><![CDATA[New comment by badlogic in "Pi 1.0"]]></title><description><![CDATA[
<p>scrolback buffer mode is definitely not going away.</p>
]]></description><pubDate>Fri, 02 Oct 2026 10:32:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=49931942</link><dc:creator>badlogic</dc:creator><comments>https://news.ycombinator.com/item?id=49931942</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49931942</guid></item><item><title><![CDATA[New comment by badlogic in "Pi Durable"]]></title><description><![CDATA[
<p>The requestId is an imdempotency key, which is exactly how you get exactly once semantics.</p>
]]></description><pubDate>Fri, 02 Oct 2026 10:10:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=49931801</link><dc:creator>badlogic</dc:creator><comments>https://news.ycombinator.com/item?id=49931801</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49931801</guid></item><item><title><![CDATA[New comment by badlogic in "Pi Durable"]]></title><description><![CDATA[
<p>I do not see any resemblence to Gastown at all? Pi Durable is a library for writing durable agents. You can plug in any sandbox solution you like (aka execution environment in Pi Durable speak).<p>Within a session, you can give each conversation its own sandbox, based on your application's needs and policies.</p>
]]></description><pubDate>Fri, 02 Oct 2026 10:08:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=49931784</link><dc:creator>badlogic</dc:creator><comments>https://news.ycombinator.com/item?id=49931784</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49931784</guid></item><item><title><![CDATA[New comment by badlogic in "Pi Durable"]]></title><description><![CDATA[
<p>Oh, the tree is still there. It's just flatter :)<p>In Pinthe coding agent, each transcript entry is parented to another entry. That was actually exceptionally dumb.<p>If you do /tree in pi, pi needs to flatten that tree into linear, nested conversations.<p>In Pi Durable, we corrected this mistake. A conversation is a chronological, immutable list of entries. A conversation can be parented to an entry in another conversation, and thus inherits that parent's older conversation entries starting from that entry.<p>So, exactly the same functionality, just less dumb.</p>
]]></description><pubDate>Fri, 02 Oct 2026 10:05:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=49931767</link><dc:creator>badlogic</dc:creator><comments>https://news.ycombinator.com/item?id=49931767</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49931767</guid></item><item><title><![CDATA[New comment by badlogic in "Pi Durable"]]></title><description><![CDATA[
<p>You can already (sort of, kind of) do that via a task (please excuse the agent slop, it's midnight and it's been a long day):<p>```
   const SyncToPostgres = defineTask<{ entryId: string }, { phase: "send" }, void>({
      kind: "app.sync-postgres",
      version: 1,
      initial: () => ({ phase: "send" }),
      phases: {
         send: async (task, runtime, context) => {
            const entry = await runtime.read(/* the entry */);
            await postgres.upsert("messages", { id: task.input.entryId, ...entry }); // idempotent by id
            await runtime.commit(() => ({ status: "terminal", outcome: { status: "completed" } }),
 context);
         },
      },
   });<p><pre><code>   await root.commit(async (tx) => {
      const id = await tx.entry(AssistantEntry, answer);
      await tx.createTask(SyncToPostgres, { entryId: id }, { ownership: { kind: "conversation" },
 background: true });
   }, context);</code></pre>
```<p>The commit on the root conversation picks out the last agent answer id from the transcript, and durably schedules a task that then syncs it to postgres. inside the task, you fetch the answer by id and send it over to postgres indempotently.<p>What's missing here is sugar, basically a hook that runs inside each commit so the outbox write is atomic with the state change, with ordered delivery, and possibly a durable change feed with cursors.<p>Thanks for the input!</p>
]]></description><pubDate>Thu, 01 Oct 2026 21:57:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=49927546</link><dc:creator>badlogic</dc:creator><comments>https://news.ycombinator.com/item?id=49927546</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49927546</guid></item><item><title><![CDATA[New comment by badlogic in "Pi Durable"]]></title><description><![CDATA[
<p>Things are still not settled, and while the API looks like store i/o it's actually more similar to Immer's drafts, just with a different encoding, as JSON patch can't deal with the kinds of data we encounter in our workloads, at least not in a way that keeps memory and perf within some bounds.<p>The good thing is that this more low level API can be easily papered over with a nice sugary thing.</p>
]]></description><pubDate>Thu, 01 Oct 2026 21:33:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=49927329</link><dc:creator>badlogic</dc:creator><comments>https://news.ycombinator.com/item?id=49927329</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49927329</guid></item><item><title><![CDATA[New comment by badlogic in "Pi 1.0"]]></title><description><![CDATA[
<p>Cheers, appreciate the answer!</p>
]]></description><pubDate>Thu, 01 Oct 2026 21:03:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=49927059</link><dc:creator>badlogic</dc:creator><comments>https://news.ycombinator.com/item?id=49927059</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49927059</guid></item><item><title><![CDATA[New comment by badlogic in "Pi 1.0"]]></title><description><![CDATA[
<p>I've read this a bunch of times around socials now these past days and I'd really like to understand what exactly indicates that the minimal agent TUI days are numbered for Pi?<p>I did not read this when I added support for AGENTS.md, skills, llama.cpp, extensions, alt TUI mode, mid-convo system messages and tool set changes to preserve KV cache, image model support, and everything else I added since November last year.<p>Codemode and MCP support are the latest additions. We follow what the models are trained on. E.g. the GPT family of models is actually trained on codemode for parallel tool calls now. The MCP spec has gotten a major update recently that makes it much less bad than it used to be in the past 24 months. Combined with codemode, it is now passable, so it got added to pi.<p>All of these features are still entirely optional and the only thing I could think of that could be considered "bloat" is the additional few megabytes for the QuickJS WASM blob.<p>So, I mean this in earenst and absolutely not combative: could you explain what exactly flips the switch between "pi is minimal" and "pi is not minimal"?</p>
]]></description><pubDate>Thu, 01 Oct 2026 20:41:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=49926840</link><dc:creator>badlogic</dc:creator><comments>https://news.ycombinator.com/item?id=49926840</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49926840</guid></item><item><title><![CDATA[New comment by badlogic in "How Compaction Works in Pi"]]></title><description><![CDATA[
<p>pi has /tree, which is basically the same, except in the same session.</p>
]]></description><pubDate>Fri, 14 Aug 2026 09:52:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=49296605</link><dc:creator>badlogic</dc:creator><comments>https://news.ycombinator.com/item?id=49296605</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49296605</guid></item><item><title><![CDATA[New comment by badlogic in "DeepSeek Harness developer preview"]]></title><description><![CDATA[
<p>ah. you can also ask pi to write a ui plugin for you. internals haven't migrated to plugin architecture yet tho.</p>
]]></description><pubDate>Thu, 13 Aug 2026 20:17:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=49291286</link><dc:creator>badlogic</dc:creator><comments>https://news.ycombinator.com/item?id=49291286</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49291286</guid></item><item><title><![CDATA[New comment by badlogic in "DeepSeek Harness developer preview"]]></title><description><![CDATA[
<p>pi also happily shows and stores deepseek CoT traces.</p>
]]></description><pubDate>Thu, 13 Aug 2026 20:16:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=49291284</link><dc:creator>badlogic</dc:creator><comments>https://news.ycombinator.com/item?id=49291284</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49291284</guid></item><item><title><![CDATA[New comment by badlogic in "DeepSeek Harness developer preview"]]></title><description><![CDATA[
<p>just read the paper, and there aee definitely some interesting ideas in it.<p>a plugin's registrations returning individual cleanup handlers is nice. in pi, you clean up all registrations in one go in the session-shutdown handler.<p>i also like the use of generator to  to clean up partial registrations nicely.<p>the cross-plugin dependency injection and resolution i'm not so sure about. it comes with a lot of footguns and limitations as pointed out in the paper.<p>works ok within a single compilation unit, i.e. a plugin with many modules. does not help with typing of cross-plugin dependencies.<p>most plugins do not have dependencies on each other, so this more complex system doesn't win you much, e.g. with load order and conflicting registrations (i.e. two plugins registering the same tool).<p>being able to reload a single plugin on change while letting the others not in its dependents list jug along is neat. but that also only works if plugins actually declare dependencies (see last paragraph), and also has a lot of limitations. and the simple case, a plugin with no dependencies or dependents, which i'd say is the 90% case, does 't need that complexity either.<p>definitely cool stuff tho! remains to be seen how well it works in a real plugin ecosystem.<p>> they push the boundaries further, to the UI components<p>can you elaborate on this? pi extensions support contributions to the UI. in pi v1, they are limited to in-process UI. v2 splits server and client, and with that UI.</p>
]]></description><pubDate>Thu, 13 Aug 2026 17:41:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=49289407</link><dc:creator>badlogic</dc:creator><comments>https://news.ycombinator.com/item?id=49289407</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49289407</guid></item><item><title><![CDATA[New comment by badlogic in "Pi's Minimalism Is Its Advantage"]]></title><description><![CDATA[
<p>i don't remember endorsing any rust rewrite of pi.</p>
]]></description><pubDate>Wed, 05 Aug 2026 12:21:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=49181824</link><dc:creator>badlogic</dc:creator><comments>https://news.ycombinator.com/item?id=49181824</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49181824</guid></item><item><title><![CDATA[New comment by badlogic in "Thoughts on slowing the fuck down"]]></title><description><![CDATA[
<p>i wrote the blog post and i also wrote pi.dev. i haven't written much code myself in the past 12 months. i'm not making coding agents out to be the problem. the entire last section keeps is basically "use a clanker for this and that".<p>i'm making specific usage pattersn out to be the problem, and explain why those patterns can't work due to the way agents work.</p>
]]></description><pubDate>Wed, 25 Mar 2026 23:42:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=47524841</link><dc:creator>badlogic</dc:creator><comments>https://news.ycombinator.com/item?id=47524841</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47524841</guid></item><item><title><![CDATA[New comment by badlogic in "Thoughts on slowing the fuck down"]]></title><description><![CDATA[
<p>you get me</p>
]]></description><pubDate>Wed, 25 Mar 2026 23:38:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=47524811</link><dc:creator>badlogic</dc:creator><comments>https://news.ycombinator.com/item?id=47524811</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47524811</guid></item><item><title><![CDATA[New comment by badlogic in "OpenCode – Open source AI coding agent"]]></title><description><![CDATA[
<p>you can use subscriptions with pi.</p>
]]></description><pubDate>Sat, 21 Mar 2026 15:06:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=47467700</link><dc:creator>badlogic</dc:creator><comments>https://news.ycombinator.com/item?id=47467700</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47467700</guid></item><item><title><![CDATA[New comment by badlogic in "Pi – A minimal terminal coding harness"]]></title><description><![CDATA[
<p>OpenAI officially supports using your subscription with pi. Same for OpenCode and other 3rd party harnesses.</p>
]]></description><pubDate>Wed, 25 Feb 2026 10:48:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=47149896</link><dc:creator>badlogic</dc:creator><comments>https://news.ycombinator.com/item?id=47149896</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47149896</guid></item><item><title><![CDATA[New comment by badlogic in "Pi – A minimal terminal coding harness"]]></title><description><![CDATA[
<p>if i ever want a claw, i'd obv. go with this :)</p>
]]></description><pubDate>Tue, 24 Feb 2026 23:11:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=47144784</link><dc:creator>badlogic</dc:creator><comments>https://news.ycombinator.com/item?id=47144784</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47144784</guid></item></channel></rss>