<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: rbalicki</title><link>https://news.ycombinator.com/user?id=rbalicki</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 11 Jun 2026 03:07:34 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=rbalicki" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by rbalicki in "Claude Desktop spins up a VM without no way of stopping it"]]></title><description><![CDATA[
<p>Folks that are interested in a way of doing work locally that doesn't suck, but which integrates LLMs, may be interested in [Barnum](<a href="https://barnum-circus.github.io/" rel="nofollow">https://barnum-circus.github.io/</a>). The TLDR is that it's a programming language whose frontend is a DSL in TypeScript that is well suited for managing async and parallel work, focused on control flow, from which it is easy to invoke LLMs, and which is easy for LLMs to write. I use it to autonomously ship a very large number of PRs.</p>
]]></description><pubDate>Wed, 10 Jun 2026 19:43:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=48481599</link><dc:creator>rbalicki</dc:creator><comments>https://news.ycombinator.com/item?id=48481599</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48481599</guid></item><item><title><![CDATA[New comment by rbalicki in "Zerostack – A Unix-inspired coding agent written in pure Rust"]]></title><description><![CDATA[
<p>That's exactly the tradeoff I made with Barnum (<a href="https://barnum-circus.github.io/" rel="nofollow">https://barnum-circus.github.io/</a>). It's just not important to optimize the performance of the rust side for the reason you stated. So instead, all focus goes into making it easy for an LLM to build a reliable pipeline (from which LLMs are invoked).</p>
]]></description><pubDate>Sun, 17 May 2026 16:51:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=48170617</link><dc:creator>rbalicki</dc:creator><comments>https://news.ycombinator.com/item?id=48170617</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48170617</guid></item><item><title><![CDATA[New comment by rbalicki in "Is GraphQL dead? (GraphQL Conf 2025 talk, YouTube) [video]"]]></title><description><![CDATA[
<p>Hey folks! This talk is about GraphQL in a world of fullstack, rich clients and about Isograph. The question it asks is: does GraphQL need to exist? Can we get its benefits without a GraphQL schema, without a GraphQL server, and without sending GraphQL over the wire?<p>It's my opinion that Isograph gives us the benefit of GraphQL, without many of its limitations. Which is to say, if you start from scratch, you can avoid mistakes.<p>This describes a future iteration of Isograph. Currently, much of what's described here is on the roadmap. But it's coming!</p>
]]></description><pubDate>Mon, 27 Apr 2026 14:02:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=47921739</link><dc:creator>rbalicki</dc:creator><comments>https://news.ycombinator.com/item?id=47921739</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47921739</guid></item><item><title><![CDATA[Is GraphQL dead? (GraphQL Conf 2025 talk, YouTube) [video]]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.youtube.com/watch?v=3GWZ9yiskFk">https://www.youtube.com/watch?v=3GWZ9yiskFk</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47921738">https://news.ycombinator.com/item?id=47921738</a></p>
<p>Points: 3</p>
<p># Comments: 1</p>
]]></description><pubDate>Mon, 27 Apr 2026 14:02:57 +0000</pubDate><link>https://www.youtube.com/watch?v=3GWZ9yiskFk</link><dc:creator>rbalicki</dc:creator><comments>https://news.ycombinator.com/item?id=47921738</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47921738</guid></item><item><title><![CDATA[New comment by rbalicki in "Claude Code Routines"]]></title><description><![CDATA[
<p>A simple task ("convert this file from JS to TS, here are the types of all imported things") is much more likely to continue to work with a nerfed model compared to a complicated task ("convert this repo to TS, make sure to run tsc afterward and fix all errors"). The former is a subtask of the latter!<p>Taking a moment to create a workflow where these steps are separated (or rather, having an LLM build this workflow) and the LLMs are asked to just do minor leaf tasks increases your resilience to nerfed models.</p>
]]></description><pubDate>Wed, 15 Apr 2026 16:59:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=47781895</link><dc:creator>rbalicki</dc:creator><comments>https://news.ycombinator.com/item?id=47781895</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47781895</guid></item><item><title><![CDATA[New comment by rbalicki in "Claude Code Routines"]]></title><description><![CDATA[
<p>Yes, exactly! Check out <a href="https://github.com/barnum-circus/barnum/blob/master/demos/babysit-prs/run.ts" rel="nofollow">https://github.com/barnum-circus/barnum/blob/master/demos/ba...</a></p>
]]></description><pubDate>Wed, 15 Apr 2026 14:13:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=47779260</link><dc:creator>rbalicki</dc:creator><comments>https://news.ycombinator.com/item?id=47779260</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47779260</guid></item><item><title><![CDATA[New comment by rbalicki in "Claude Code Routines"]]></title><description><![CDATA[
<p>You may want to check out Barnum, which is a programming language/agent orchestration tool that makes it easy to build things like /loop, or Claude  code routines. And you won't end up dependent on the specifics of how Claude code routines work!<p><a href="https://github.com/barnum-circus/barnum" rel="nofollow">https://github.com/barnum-circus/barnum</a></p>
]]></description><pubDate>Wed, 15 Apr 2026 10:58:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=47777357</link><dc:creator>rbalicki</dc:creator><comments>https://news.ycombinator.com/item?id=47777357</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47777357</guid></item><item><title><![CDATA[New comment by rbalicki in "Claude Code Routines"]]></title><description><![CDATA[
<p>If you want to feel like you're using a programming language when orchestrating agents, check out <a href="https://github.com/barnum-circus/barnum" rel="nofollow">https://github.com/barnum-circus/barnum</a></p>
]]></description><pubDate>Wed, 15 Apr 2026 08:44:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=47776339</link><dc:creator>rbalicki</dc:creator><comments>https://news.ycombinator.com/item?id=47776339</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47776339</guid></item><item><title><![CDATA[New comment by rbalicki in "Claude Code Routines"]]></title><description><![CDATA[
<p>You can lessen your dependence on the specific details of how /loop, code routines, etc. work by asking the LLM to do simpler tasks, and instead, having a proper workflow engine be in charge of the workflow aspects.<p>For example, this demo (<a href="https://github.com/barnum-circus/barnum/tree/master/demos/convert-folder-to-ts" rel="nofollow">https://github.com/barnum-circus/barnum/tree/master/demos/co...</a>) converts a folder of files from JS to TS. It's something an LLM could (probably) do a decent job of, but 1. not necessarily reliably, and 2. you can write a much more complicated workflow (e.g. retry logic, timeout logic, adding additional checks like "don't use as casts", etc), 3. you can be much more token efficient, and 4. you can be LLM agnostic.<p>So, IMO, in the presence of tools like that, you shouldn't bother using /loop, code routines, etc.</p>
]]></description><pubDate>Tue, 14 Apr 2026 21:21:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=47771699</link><dc:creator>rbalicki</dc:creator><comments>https://news.ycombinator.com/item?id=47771699</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47771699</guid></item><item><title><![CDATA[New comment by rbalicki in "Some uncomfortable truths about AI coding agents"]]></title><description><![CDATA[
<p>I'm as nerdy as they come (my current project is the fourth compiler I've worked on), and I absolutely love this new way of working. There's a lot more time spent in discussion with the agent (an extremely frustrating discussion, to be fair). All of a sudden, there's an extremely high payoff to investing in good fundamentals (namely, clarity of requirements, good tools, etc.), which are the things I want to invest in anyway! If you get these fundamentals right, you can let the agent rip and produce hundreds of PRs that are correct, or create workflows that are actually not slop or ship code that is, while not yet as high quality as if you wrote it manually, quite close, at easily five times the speed.<p>And throughout this, if I'm ever curious about how the ideas relate to some other topic, I can just ask the agent, "Are we designing XYZ right now? Categorically, is it this?" Lots of really cool discussions to be had.<p>I might be less enthusiastic if I was just shipping CSS changes and the like.</p>
]]></description><pubDate>Sat, 28 Mar 2026 00:04:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=47550024</link><dc:creator>rbalicki</dc:creator><comments>https://news.ycombinator.com/item?id=47550024</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47550024</guid></item><item><title><![CDATA[New comment by rbalicki in "Some uncomfortable truths about AI coding agents"]]></title><description><![CDATA[
<p>I agree. I think we simply don't have the tools yet to hold agents to that high architectural standard. It simply takes a lot of focused effort and berating and close comprehension of the code at the moment to ship anything good, but there are lots of people (myself included) working on that problem. I'm pretty sure in a matter of months it will be solved.<p>Months! That's not a long time.</p>
]]></description><pubDate>Fri, 27 Mar 2026 23:59:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=47549980</link><dc:creator>rbalicki</dc:creator><comments>https://news.ycombinator.com/item?id=47549980</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47549980</guid></item><item><title><![CDATA[New comment by rbalicki in "Some uncomfortable truths about AI coding agents"]]></title><description><![CDATA[
<p>I think what you're implying is that the agent ships unmaintainable slop. Certainly, if I don't pay attention and review the code line by line, it will ship slop. And even sometimes, when I'm certain that it is implemented one way, I'll come back to the code many days later and discover that it went a completely different route than I expected. Very frustrating.<p>But it doesn't have to be that way. You just have to put an effort into shipping fewer, better features as opposed to more features. The projects I'm working on (e.g. agent orchestration, because who isn't nowadays) have a small surface area and high payoff and thus are uniquely well positioned for this.<p>If I couldn't use an LLM, I would still work on this, and it would have roughly the same architecture. But because I'm able to go probably 100x as fast, I'm able to be much more ambitious. Or rather, I'm able to discover that my initial ideas were not on point and pivot, and not have any sense of sunk cost<p>Anyway, to each their own.</p>
]]></description><pubDate>Fri, 27 Mar 2026 23:57:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=47549967</link><dc:creator>rbalicki</dc:creator><comments>https://news.ycombinator.com/item?id=47549967</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47549967</guid></item><item><title><![CDATA[New comment by rbalicki in "Some uncomfortable truths about AI coding agents"]]></title><description><![CDATA[
<p>The skill atrophy point strikes me as tenuous at best. Obviously, the plural of anecdote is not data, but I find myself able to work on projects of greater complexity than I would have been able to otherwise. 90% of my time is spent going back and forth on Markdown files, discussing the architecture, trade-offs, etc. I don't think it's necessarily impossible to use all this newfound power to ship more sloppier code. It's clearly possible to use all this newfound power to ship better code too.</p>
]]></description><pubDate>Fri, 27 Mar 2026 20:47:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=47548055</link><dc:creator>rbalicki</dc:creator><comments>https://news.ycombinator.com/item?id=47548055</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47548055</guid></item><item><title><![CDATA[Ask HN: Feature request: include the second path segment for GitHub URLs]]></title><description><![CDATA[
<p>Some URLs, when displayed on the HN feed (in small text), include in the first path segment, such as GitHub. It would be an improvement to also see the second path segment, i.e. the repo name.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46804137">https://news.ycombinator.com/item?id=46804137</a></p>
<p>Points: 3</p>
<p># Comments: 1</p>
]]></description><pubDate>Thu, 29 Jan 2026 00:49:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=46804137</link><dc:creator>rbalicki</dc:creator><comments>https://news.ycombinator.com/item?id=46804137</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46804137</guid></item><item><title><![CDATA[New comment by rbalicki in "GraphQL: The enterprise honeymoon is over"]]></title><description><![CDATA[
<p>I may be wrong on the details, but with URQL:<p>- you don't have a normalized cache. You may not want one! But if you find yourself annoyed that modifying one entity in one location doesn't automatically cause another view into that same entity to update, it's due to a lack of a normalized cache. And this is a more frequent problem than folks admit. You might go from a detail view to an edit view, modify a few things, then press the back button. You can't reuse cached data without a normalized cache, or without custom logic to keep these items in sync. At scale, it doesn't work.<p>- Since you don't have a normalized cache, you presumably just refetch instead of updating items in the cache. So you will presumably re-render an entire page in response to changes. Relay will just re-render components whose data has actually changed. In <a href="https://quoraengineering.quora.com/Choosing-Quora-s-GraphQL-client" rel="nofollow">https://quoraengineering.quora.com/Choosing-Quora-s-GraphQL-...</a>, the engineer at Quora points out that as one paginates, one can get hundreds of components on the screen. And each pagination slows the performance of the page, if you're re-rendering the entire page from root.<p>- Fragments are great. You really want data masking, and not just at the type level. If you stop selecting some data in some component, it may affect the behavior of other components, if they do something like Object.stringify or JSON.keys. But admittedly, type-level data masking + colocation is substantially better than nothing.<p>- Relay will also generate queries for you. For example, pagination queries, or refetch queries (where you refetch part of a tree with different variables.)<p>There are lots of great reasons to adopt Relay!<p>And if you don't like the complexity of Relay, check out isograph (<a href="https://isograph.dev" rel="nofollow">https://isograph.dev</a>), which (hopefully) has better DevEx and a much lower barrier to entry.<p><a href="https://www.youtube.com/watch?v=lhVGdErZuN4" rel="nofollow">https://www.youtube.com/watch?v=lhVGdErZuN4</a> goes into more detail about the advantages of Relay</p>
]]></description><pubDate>Mon, 15 Dec 2025 05:08:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=46270693</link><dc:creator>rbalicki</dc:creator><comments>https://news.ycombinator.com/item?id=46270693</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46270693</guid></item><item><title><![CDATA[New comment by rbalicki in "GraphQL: The enterprise honeymoon is over"]]></title><description><![CDATA[
<p>You may be interested in checking out <a href="https://www.youtube.com/watch?v=lhVGdErZuN4" rel="nofollow">https://www.youtube.com/watch?v=lhVGdErZuN4</a>, where I talk about the benefits of Relay. This isn't (currently) possible without GraphQL, so it's a pretty compelling case for GraphQL.<p>But yeah, IMO, GraphQL doesn't justify itself unless you're using a client like Relay, with data masking and fragment colocation.</p>
]]></description><pubDate>Mon, 15 Dec 2025 05:00:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=46270653</link><dc:creator>rbalicki</dc:creator><comments>https://news.ycombinator.com/item?id=46270653</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46270653</guid></item><item><title><![CDATA[New comment by rbalicki in "GraphQL: The enterprise honeymoon is over"]]></title><description><![CDATA[
<p>Yeah, you can get a lot of features out of the same primitive. The primitive (called loadable fields, but you can think of it as a tool to specify a section of a query as loaded later) allows you to support:
- live queries (call the loadable field in a setInterval)
- pagination (pass different variables and concatenate the result)
- defer
- loading data in response to a click<p>And if you also combine this with the fact that JS and fragments are statically associated in Relay, you can get:
- entrypoints
- 3D (if you just defer components within a type refinement, e.g. here we load ad items only when we encounter an item with typename AdItem <a href="https://github.com/isographlabs/isograph/blob/627be45972fc47c731dab2c59c926d9502da8f14/demos/pet-demo/src/components/Newsfeed/NewsfeedRoute.tsx#L80" rel="nofollow">https://github.com/isographlabs/isograph/blob/627be45972fc47...</a>. asAdItem is a field that compiles to ... on AdItem in the actual query text)<p>And all of it is doable with the same set of primitives, and requiring no server support (other than a node field).<p>Do let me know if you check it out! Or if you get stuck, happy to unblock you/clarify things (it's hard for me to know what is confusing to folks new to the project.)</p>
]]></description><pubDate>Mon, 15 Dec 2025 04:58:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=46270639</link><dc:creator>rbalicki</dc:creator><comments>https://news.ycombinator.com/item?id=46270639</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46270639</guid></item><item><title><![CDATA[New comment by rbalicki in "GraphQL: The enterprise honeymoon is over"]]></title><description><![CDATA[
<p>I would encourage you to write an educated person's critique of GraphQL, because OP's article + <a href="https://bessey.dev/blog/2024/05/24/why-im-over-graphql/" rel="nofollow">https://bessey.dev/blog/2024/05/24/why-im-over-graphql/</a> etc. suck up all of the oxygen, and no one hears about the genuine issues like that.<p>(And don't forget lack of generics, no support for interfaces with no fields, lack of closed unions/interfaces, the absolutely silly distinction between unions and interfaces, the fact that the SDL and operation language are two completely different things...)</p>
]]></description><pubDate>Mon, 15 Dec 2025 04:31:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=46270516</link><dc:creator>rbalicki</dc:creator><comments>https://news.ycombinator.com/item?id=46270516</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46270516</guid></item><item><title><![CDATA[New comment by rbalicki in "GraphQL: The enterprise honeymoon is over"]]></title><description><![CDATA[
<p>This is a genuinely accurate critique of GraphQL. We're missing some extremely table-stakes things, like generics, discriminated unions in inputs (and in particular, discriminated unions you can discriminate and use later in the query as one of the variants), closed unions, etc.</p>
]]></description><pubDate>Mon, 15 Dec 2025 04:28:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=46270503</link><dc:creator>rbalicki</dc:creator><comments>https://news.ycombinator.com/item?id=46270503</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46270503</guid></item><item><title><![CDATA[New comment by rbalicki in "GraphQL: The enterprise honeymoon is over"]]></title><description><![CDATA[
<p>There's an informed critique of RSC, but no one is making it.</p>
]]></description><pubDate>Mon, 15 Dec 2025 04:21:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=46270464</link><dc:creator>rbalicki</dc:creator><comments>https://news.ycombinator.com/item?id=46270464</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46270464</guid></item></channel></rss>