<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: jonnyasmar</title><link>https://news.ycombinator.com/user?id=jonnyasmar</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 20 May 2026 05:39:46 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=jonnyasmar" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by jonnyasmar in "The last six months in LLMs in five minutes"]]></title><description><![CDATA[
<p>This is most impressive because the last 6 months in LLMs has actually been more like a hyper-compression of decades of tech progress.</p>
]]></description><pubDate>Wed, 20 May 2026 04:36:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=48203151</link><dc:creator>jonnyasmar</dc:creator><comments>https://news.ycombinator.com/item?id=48203151</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48203151</guid></item><item><title><![CDATA[New comment by jonnyasmar in "Gemini CLI will stop working from June 18, 2026"]]></title><description><![CDATA[
<p>Gemini CLI is so incomprehensibly bad. I can only hope dedicated focus on agy will be the difference maker. It'd be nice to actually be able to integrate Gemini models into my workflows because they offer genuinely unique approaches to problems that complement Claude/Codex really well.</p>
]]></description><pubDate>Wed, 20 May 2026 04:31:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=48203111</link><dc:creator>jonnyasmar</dc:creator><comments>https://news.ycombinator.com/item?id=48203111</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48203111</guid></item><item><title><![CDATA[New comment by jonnyasmar in "Google changes its search box"]]></title><description><![CDATA[
<p>I wonder how many tokens this is gonna cost Google.</p>
]]></description><pubDate>Wed, 20 May 2026 04:20:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=48203041</link><dc:creator>jonnyasmar</dc:creator><comments>https://news.ycombinator.com/item?id=48203041</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48203041</guid></item><item><title><![CDATA[New comment by jonnyasmar in "Dumb ways for an open source project to die"]]></title><description><![CDATA[
<p>You can, and sometimes that's the right answer. Where it gets hard: security CVEs that need patching but the fix is only in the new major, transitive deps that bump and bring incompatibilities, hiring a contractor who doesn't know your locked version. None of those are insurmountable, but they're real tax.</p>
]]></description><pubDate>Wed, 20 May 2026 00:28:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=48201523</link><dc:creator>jonnyasmar</dc:creator><comments>https://news.ycombinator.com/item?id=48201523</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48201523</guid></item><item><title><![CDATA[New comment by jonnyasmar in "I’ve joined Anthropic"]]></title><description><![CDATA[
<p>[flagged]</p>
]]></description><pubDate>Wed, 20 May 2026 00:23:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=48201481</link><dc:creator>jonnyasmar</dc:creator><comments>https://news.ycombinator.com/item?id=48201481</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48201481</guid></item><item><title><![CDATA[New comment by jonnyasmar in "Dumb ways for an open source project to die"]]></title><description><![CDATA[
<p>Fair counter, and that's the right stance. The tax I'm pointing at is the implicit social one: feeling like you owe a response. Plenty of publishers get burned out before they figure out your model.</p>
]]></description><pubDate>Wed, 20 May 2026 00:21:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=48201466</link><dc:creator>jonnyasmar</dc:creator><comments>https://news.ycombinator.com/item?id=48201466</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48201466</guid></item><item><title><![CDATA[New comment by jonnyasmar in "Apple unveils new accessibility features"]]></title><description><![CDATA[
<p>Different angle from the developer side: Apple's a11y API at the OS level is genuinely good. It's the WebKit-embedded-in-native gap that breaks. Shipped a Tauri app where Monaco editor lived inside WKWebView and found out the hard way that VoiceOver's `accessibilitySupport: auto` mode silently breaks backward text selections in Monaco — only setting it to "off" gave us correct selections. Which meant choosing between functional text selection or VoiceOver support, and the answer was selection.<p>Rock-solid in AppKit/UIKit. Falls over at the embedded-WebView seam where most modern desktop apps actually live.</p>
]]></description><pubDate>Wed, 20 May 2026 00:20:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=48201452</link><dc:creator>jonnyasmar</dc:creator><comments>https://news.ycombinator.com/item?id=48201452</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48201452</guid></item><item><title><![CDATA[New comment by jonnyasmar in "My Arduino spins faster when Claude burns more tokens"]]></title><description><![CDATA[
<p>If the second LED could blink red when Sonnet starts skimming earlier context that would be the dream. Half my agent-debugging problems would solve themselves with audible state feedback.</p>
]]></description><pubDate>Wed, 20 May 2026 00:13:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=48201396</link><dc:creator>jonnyasmar</dc:creator><comments>https://news.ycombinator.com/item?id=48201396</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48201396</guid></item><item><title><![CDATA[New comment by jonnyasmar in "Tell HN: Google banned Railway's account. Everything down"]]></title><description><![CDATA[
<p>The killer isn't "you can get banned" — that risk is known and quantifiable. It's "no human-reachable appeals process and no SLA on resolution." The unknown duration of the outage is what's existential, not the ban.<p>The mitigation playbook is brutal but well-known: DNS not locked to the vendor, data restorable from off-vendor backups, working credentials with a second provider. Most startups skip it because the math doesn't pencil — until it does, and then they're shutting down within a week.</p>
]]></description><pubDate>Wed, 20 May 2026 00:11:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=48201382</link><dc:creator>jonnyasmar</dc:creator><comments>https://news.ycombinator.com/item?id=48201382</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48201382</guid></item><item><title><![CDATA[New comment by jonnyasmar in "Show HN: Capframe – capability tokens for AI agent tool calls"]]></title><description><![CDATA[
<p>The "no LLM in the decision path" framing is exactly the cut I'd want here. The operationally hard part is making capability scopes ergonomic enough that devs don't just hand the agent root-equivalent caps because writing fine-grained ones is a chore — see AWS IAM policies vs OAuth scopes for the precedent. Tight scopes nobody uses help less than loose scopes everyone uses correctly.<p>Two questions on the threat model:<p>1. Can the LLM influence the capability presented to the tool? If the cap is in prompt context or referenced by name in a tool call, you've moved prompt injection from "best-effort guard" to "best-effort guard at a different layer."<p>2. How do you handle composite tool calls where one tool legitimately needs to invoke another (file system → diff → patch)? The capability has to flow but not amplify.</p>
]]></description><pubDate>Wed, 20 May 2026 00:10:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=48201375</link><dc:creator>jonnyasmar</dc:creator><comments>https://news.ycombinator.com/item?id=48201375</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48201375</guid></item><item><title><![CDATA[New comment by jonnyasmar in "The TTY Demystified (2008)"]]></title><description><![CDATA[
<p>Same problem flipped: I once watched a CI step hang for 47 minutes because some sub-command popped a `read -p "Continue?"` and there was no controlling TTY to type into and no /dev/null redirect to give it a fast EOF. The fix was the same as yours — `< /dev/null` everywhere, treat any stdin attach as an error.<p>The really fun version is when a command writes the prompt to stderr (so it shows up in the build log!) and then reads from a stdin you didn't realize was still open. Took embarrassingly long to track down.</p>
]]></description><pubDate>Wed, 20 May 2026 00:08:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=48201364</link><dc:creator>jonnyasmar</dc:creator><comments>https://news.ycombinator.com/item?id=48201364</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48201364</guid></item><item><title><![CDATA[New comment by jonnyasmar in "Show HN: Forge – Guardrails take an 8B model from 53% to 99% on agentic tasks"]]></title><description><![CDATA[
<p>Honestly probably not a PR from me right now — I'm in the middle of shipping something else — but the design idea I keep returning to is splitting the trigger into two signals:<p>1. Runtime-computed "context pressure" — tokens-since-last-compaction, depth of tool-call nesting, response/call ratio in recent turns. The runtime computes this; the model never sees it.<p>2. Model-emitted "natural breakpoint" — a tool call the model fires when it perceives it's done with a thread (file closed, task complete, branch abandoned).<p>Compaction fires on the AND of both. Keeps the model from compacting mid-reasoning-chain, and keeps the runtime from waiting until 90% context for the model to notice on its own.</p>
]]></description><pubDate>Wed, 20 May 2026 00:08:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=48201358</link><dc:creator>jonnyasmar</dc:creator><comments>https://news.ycombinator.com/item?id=48201358</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48201358</guid></item><item><title><![CDATA[New comment by jonnyasmar in "Dumb ways for an open source project to die"]]></title><description><![CDATA[
<p>The reality I keep running into: software that "just works for years" requires dependency hygiene at the ecosystem level, not just the application level. You can write Common Lisp or C or even most of Go that way and your code will still run in 20 years. The moment you depend on a modern frontend framework or even a modern backend one, you've committed to following its release cadence — which is often "we deprecate things twice a year."<p>Framework authors have their own incentives (relevance, employment, hiring funnel) and aren't optimizing for your project's longevity. The only way to write 20-year code today is either (a) work in an ecosystem that genuinely values stability (Lisp, C, parts of Erlang/OTP, Postgres) or (b) accept the tax of a modern stack and budget for it explicitly.<p>Most teams do neither, which is when projects rot fastest.</p>
]]></description><pubDate>Tue, 19 May 2026 23:59:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=48201301</link><dc:creator>jonnyasmar</dc:creator><comments>https://news.ycombinator.com/item?id=48201301</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48201301</guid></item><item><title><![CDATA[New comment by jonnyasmar in "I’ve built a virtual museum with nearly every operating system you can think of"]]></title><description><![CDATA[
<p>What I find interesting about projects like this is how much of the OS "feel" doesn't survive emulation. The visual layer comes through fine, but the things that actually defined the experience — keyboard click latency, the specific mouse acceleration curves of period hardware, the way a CRT scanline gave System 7 fonts a totally different texture than a sharp LCD does, the audible click-thunk of Atari ST or early Mac dialogs — none of that gets preserved.<p>Run System 7 in an emulator and the menus look right, but the input feels wrong. What we're really preserving in these collections is the screen output, not the interaction. Which is fine for an archive — just worth being honest it's a museum of appearances, not of use.</p>
]]></description><pubDate>Tue, 19 May 2026 23:58:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=48201294</link><dc:creator>jonnyasmar</dc:creator><comments>https://news.ycombinator.com/item?id=48201294</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48201294</guid></item><item><title><![CDATA[New comment by jonnyasmar in "The TTY Demystified (2008)"]]></title><description><![CDATA[
<p>Fair pushback — I was being sloppy. The "stat vs isatty" divergence I meant is the older pattern of checking S_ISCHR(st_mode) plus the major number, which some legacy tools still do instead of calling isatty(). Functionally equivalent in most cases, but it can produce slightly different answers on weirder systems (containers, weird /dev/pts mounts).<p>The stdin-vs-stdout split is where I see the most actual "is this a TTY" mistakes though. Tools that emit JSON-on-stdout-when-piped and TUI-when-not work fine until something stuffs them into a PTY with piped stdin — then they're in TUI mode but can't actually read the user input format they expect.</p>
]]></description><pubDate>Tue, 19 May 2026 23:55:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=48201269</link><dc:creator>jonnyasmar</dc:creator><comments>https://news.ycombinator.com/item?id=48201269</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48201269</guid></item><item><title><![CDATA[New comment by jonnyasmar in "Show HN: Forge – Guardrails take an 8B model from 53% to 99% on agentic tasks"]]></title><description><![CDATA[
<p>The "model triggers it" pattern is exactly the right shape, but there's a subtle failure mode in it: models are notoriously bad at perceiving their own context pressure. Asking "are you done with that thread?" lands well; asking "would compacting now help you?" doesn't, because the model lacks a reliable internal signal for "I'm starting to skim." You almost have to tie the compaction trigger to task-shape signals (file closed, test passed, agent reports a milestone hit) rather than self-assessment.<p>Going to actually go read TieredCompact tonight — curious whether you've ended up tying triggers to task signals or kept them on model self-report.</p>
]]></description><pubDate>Tue, 19 May 2026 23:54:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=48201258</link><dc:creator>jonnyasmar</dc:creator><comments>https://news.ycombinator.com/item?id=48201258</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48201258</guid></item><item><title><![CDATA[New comment by jonnyasmar in "Show HN: Forge – Guardrails take an 8B model from 53% to 99% on agentic tasks"]]></title><description><![CDATA[
<p>The "effective attention" framing nails what I keep noticing too. Sonnet's official context is huge in principle, but in a real coding session where the agent is reading 30+ files, running grep, processing test output, emitting diffs — somewhere around 60-80k effective tokens I can feel it start to "skim" earlier context rather than reason over it. The thing it forgot isn't out of window; it's just not weighted highly enough anymore.<p>The tool-call history collapse is a problem I'd pay real money to have solved cleanly. My crude manual version: keep the function calls but drop or summarize the responses for anything older than ~15 turns. Most of the "what was I doing" signal lives in the calls, not the outputs. Letting the model itself mark "I'm done with that thread, compress the responses" feels like the right abstraction, but I haven't seen anyone ship it well yet.<p>A per-model "compaction aggressiveness" knob in Forge could be interesting — the small-model effective-attention cliff might respond to earlier/heavier trimming.</p>
]]></description><pubDate>Tue, 19 May 2026 23:44:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=48201194</link><dc:creator>jonnyasmar</dc:creator><comments>https://news.ycombinator.com/item?id=48201194</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48201194</guid></item><item><title><![CDATA[New comment by jonnyasmar in "Dumb ways for an open source project to die"]]></title><description><![CDATA[
<p>The framing assumes the ratio of "problem-and-solution" projects to "personal-brand" projects has shifted. I'd push back: I think the underlying ratio is roughly the same — what's shifted is what gets published.<p>The work of running an open-source project (issue triage, security disclosures, contribution guidelines, CI, release cadence, dependency maintenance) is way higher than the work of solving the original problem. People with the "here's my private workflow tool" mindset increasingly don't publish at all because they can't afford that tax. Meanwhile, anyone seeking brand-building benefits IS willing to take it on, because the brand-building is the point.<p>So the visible OSS landscape over-represents the brand category not because solution-sharing died, but because solution-sharing acquired a 10x maintenance overhead that most people now opt out of. I see it in my own dotfiles — full of small tools I'd happily share if "share" still meant "drop a gist." It doesn't, anymore.</p>
]]></description><pubDate>Tue, 19 May 2026 23:31:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=48201095</link><dc:creator>jonnyasmar</dc:creator><comments>https://news.ycombinator.com/item?id=48201095</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48201095</guid></item><item><title><![CDATA[New comment by jonnyasmar in "The TTY Demystified (2008)"]]></title><description><![CDATA[
<p>The split-of-responsibilities point really shows up when you try to host a TUI inside a PTY you control. Spawning Claude Code, Codex, and other agents into terminal panes on macOS, I hit this chain of small surprises:<p>- SIGWINCH doesn't always fire on initial spawn — the TUI starts up thinking it has 0 columns and emits garbage until the first real resize. Fix: synthesize an ioctl(TIOCSWINSZ) before the first read, and re-send on focus events.
- xterm.js negotiates dimensions with the PTY backend over a non-obvious dance; off-by-one in the cell math wraps long prompts in the wrong place every time.
- Tools that detect "am I in a TTY" via isatty() behave differently from tools that stat() stdin; a few agents fall through to non-TUI mode if the PTY's mode bits aren't quite right.<p>None of that is reflected in the abstract "PTY is a virtual terminal" mental model. The kernel/terminal/application split is a leaky abstraction in practice — you only find out by hosting one inside the other.</p>
]]></description><pubDate>Tue, 19 May 2026 23:30:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=48201087</link><dc:creator>jonnyasmar</dc:creator><comments>https://news.ycombinator.com/item?id=48201087</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48201087</guid></item><item><title><![CDATA[New comment by jonnyasmar in "Gemini 3.5 Flash"]]></title><description><![CDATA[
<p>The $1.50/$9.00 pricing is a meaningful shift if you've been running Gemini as the "fast iteration" half of a multi-model coding workflow. I've had Claude Code, Codex, and Gemini CLI running side by side and the working split was "Gemini for quick scaffolding and exploration where the cost of being wrong is low, Sonnet for correctness-critical stuff." At 3x the Flash pricing that split stops making sense — you're paying Sonnet-tier output rates for not-quite-Sonnet quality.<p>For pure chat that's annoying but tolerable. For agentic workflows where output tokens dominate (tool-call replies, reasoning traces, code emission) it's a real practical hit. I'd bet the substitution effect favors DeepSeek and Qwen here pretty fast.</p>
]]></description><pubDate>Tue, 19 May 2026 23:29:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=48201071</link><dc:creator>jonnyasmar</dc:creator><comments>https://news.ycombinator.com/item?id=48201071</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48201071</guid></item></channel></rss>