<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: miguelspizza</title><link>https://news.ycombinator.com/user?id=miguelspizza</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 06 Apr 2026 09:16:05 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=miguelspizza" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[Show HN: Forcing Claude Code to Write Maintainable TypeScript]]></title><description><![CDATA[
<p>A lot of people are acting like code quality doesn’t matter anymore. Coding is solved, agents will write everything, and nobody will need to read code line by line etc etc. I've not really been able to get CC to write good code by default but I chalked it up to a skill issue. So when CC leaked it was pretty shocking from a code maintainability standpoint and it was very clear to me that the issue is structural.<p>Reading the leaked prompts made the failure mode pretty obvious: the agent is optimized to get its feature working inside local context, not to improve the codebase as a whole. So it makes defensive patch fixes, leaves old paths around, avoids holistic cleanup, and slowly fills the repo with debt. My take is that it's intentionally designed to one shot new projects/features but you have a aggressively prompt it to write maintainable code.<p>I've been writing typescript for a number of years now (and startups and large companies) and have pretty strong opinions how to do it sustainably. The fact that we code with agents hasn't changed the fundamentals as much as vibe coders will have you believe. Hopefully others find this skill helpful.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47619825">https://news.ycombinator.com/item?id=47619825</a></p>
<p>Points: 4</p>
<p># Comments: 2</p>
]]></description><pubDate>Thu, 02 Apr 2026 20:35:37 +0000</pubDate><link>https://github.com/MiguelsPizza/skills/tree/main/skills/maintainable-typescript</link><dc:creator>miguelspizza</dc:creator><comments>https://news.ycombinator.com/item?id=47619825</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47619825</guid></item><item><title><![CDATA[New comment by miguelspizza in "What Is OAuth?"]]></title><description><![CDATA[
<p>I’ve spent the past few months working with and implementing OAuth.<p>This might the best collection of resources:<p><a href="https://github.com/ryanspletzer/oidc-oauth-spec-graph" rel="nofollow">https://github.com/ryanspletzer/oidc-oauth-spec-graph</a></p>
]]></description><pubDate>Sun, 22 Feb 2026 18:19:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=47113312</link><dc:creator>miguelspizza</dc:creator><comments>https://news.ycombinator.com/item?id=47113312</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47113312</guid></item><item><title><![CDATA[Token Issuer Metadata: A Proposal for Config-as-Code SSO]]></title><description><![CDATA[
<p>Article URL: <a href="https://docs.meetchar.ai/explanation/token-issuer-metadata">https://docs.meetchar.ai/explanation/token-issuer-metadata</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46701675">https://news.ycombinator.com/item?id=46701675</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 21 Jan 2026 05:58:43 +0000</pubDate><link>https://docs.meetchar.ai/explanation/token-issuer-metadata</link><dc:creator>miguelspizza</dc:creator><comments>https://news.ycombinator.com/item?id=46701675</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46701675</guid></item><item><title><![CDATA[New comment by miguelspizza in "8M users' AI conversations sold for profit by "privacy" extensions"]]></title><description><![CDATA[
<p>We actually have this with the permissions API. The issue is everyone just opts for longer approval times and less intrusive UX with manifest level permissions.<p>I agree though, runtime permissions should be the default</p>
]]></description><pubDate>Wed, 17 Dec 2025 06:24:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=46298847</link><dc:creator>miguelspizza</dc:creator><comments>https://news.ycombinator.com/item?id=46298847</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46298847</guid></item><item><title><![CDATA[Show HN: Using WebMCP to make the CDP MCP server 90% more token efficient]]></title><description><![CDATA[
<p>Playwright and Chrome DevTools MCP servers are the standard for agent-driven web app testing, but their token efficiency is terrible: the screenshot-action-screenshot loop quickly explodes context windows.<p>I've been using browser automation instead of TDD (agents over-mock tests), but needed to solve the token bloat. So I forked the Chrome DevTools MCP server to execute WebMCP tools from client-side JavaScript.<p>It's a drop-in replacement for the Chrome DevTools MCP server but with two added tools (`call_website_tool` & `list_website_tools`). Initial benchmarks show a roughly ~90% decrease in token usage, but other benefits which are harder to measure are speed and determinism (both of which are significantly improved).<p>Benefits:<p>- Free WebMCP support for your website, tools work for in-page or browser agents (in addition to agents using CDP)
- Semantic tool definitions improve accessibility  
- Built on a web standard, no lock-in to my libraries
- You can use this as part of your hard-coded E2E tests and make them significantly less flaky and faster<p>All the benchmarks and technical details are in the linked repo or in links at the bottom of the linked repo.<p>On a side note:<p>Much has changed since I wrote the [MCP-B](<a href="https://news.ycombinator.com/item?id=44515403">https://news.ycombinator.com/item?id=44515403</a>) proof of concept a while back. WebMCP is very much on track to be standardized and I've joined the community working group to help form it. My implementation was used to introduce WebMCP at TPAC, I left my job at Amazon to work on it full time, and I found a co-founder to work on it with. I've built a bunch of stuff around WebMCP (much of which I think people can get real utility out of), but have not done a great job of sharing it, so expect to see more WebMCP-related content over the coming days. You can try out WebMCP from meetchar.ai (still very early) but we are looking for alpha testers for an inpage agent.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46223714">https://news.ycombinator.com/item?id=46223714</a></p>
<p>Points: 4</p>
<p># Comments: 2</p>
]]></description><pubDate>Wed, 10 Dec 2025 20:56:19 +0000</pubDate><link>https://github.com/WebMCP-org/chrome-devtools-quickstart</link><dc:creator>miguelspizza</dc:creator><comments>https://news.ycombinator.com/item?id=46223714</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46223714</guid></item><item><title><![CDATA[New comment by miguelspizza in "Anthropic acquires Bun"]]></title><description><![CDATA[
<p>Hate to say it but this sounds like a skill issue. The reason Typescript monorepos are gaining popularity for building with AI is because of how powerful TS's inference system is. If you are writing lots of types you are doing it wrong.<p>You declare your schema with a good TS ORM then use something like TRPC to get type inference from your schemas in your route handlers and your front end.<p>You get an enforced single source of truth that keeps the AI on track with a very small amount of code compared to something like Java.<p>This really only applies to full stack SAAS apps though.</p>
]]></description><pubDate>Thu, 04 Dec 2025 03:47:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=46143597</link><dc:creator>miguelspizza</dc:creator><comments>https://news.ycombinator.com/item?id=46143597</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46143597</guid></item><item><title><![CDATA[New comment by miguelspizza in "Anthropic acquires Bun"]]></title><description><![CDATA[
<p>Clojure is such an underrated language for vibe coding for this very reason.<p>Makes me wonder what a theoretical “best possible language for vibe coding” would look like</p>
]]></description><pubDate>Wed, 03 Dec 2025 03:56:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=46130139</link><dc:creator>miguelspizza</dc:creator><comments>https://news.ycombinator.com/item?id=46130139</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46130139</guid></item><item><title><![CDATA[New comment by miguelspizza in "Anthropic acquires Bun"]]></title><description><![CDATA[
<p>Not sure where you heard this but general sentiment is the opposite.<p>There was recently a conference which was themed around the idea that typescript monorepos are the best way to build with AI</p>
]]></description><pubDate>Wed, 03 Dec 2025 03:51:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=46130116</link><dc:creator>miguelspizza</dc:creator><comments>https://news.ycombinator.com/item?id=46130116</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46130116</guid></item><item><title><![CDATA[New comment by miguelspizza in "ChatGPT Atlas"]]></title><description><![CDATA[
<p>The agent mode is really disappointing. I thought OpenAI would try to be more innovative with how the agent interacts with webpages, but it looks like it's the same DOM parsing and screenshot workflow the rest of the AI browser agents use. Giving the agent full access to the page is a recipe for disaster.<p>We have better tools for this now. This is a draft video I put together for the W3C demoing WebMCP. It blows their agent mode out of the water, and you can even use in-browser models for inference (see the end of the video)<p><a href="https://screen.studio/share/hbGudbFm" rel="nofollow">https://screen.studio/share/hbGudbFm</a><p>I've been working on this full-time after putting out the MCP-B/WebMCP Hacker News post.<p><a href="https://news.ycombinator.com/item?id=44515403">https://news.ycombinator.com/item?id=44515403</a></p>
]]></description><pubDate>Tue, 21 Oct 2025 18:11:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=45659400</link><dc:creator>miguelspizza</dc:creator><comments>https://news.ycombinator.com/item?id=45659400</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45659400</guid></item><item><title><![CDATA[New comment by miguelspizza in "WebMCP"]]></title><description><![CDATA[
<p>WebMCP essentially turns your website into an MCP server. Which means it is kind of like building a UI for the LLM that lives alongside the human UI.<p>It's also a contract for how LLM's interact with a website, they can do no more than the tools allow them to do. When you are running javascript on the page, the entire website is an attack surface.<p>Let's take gmail, for example. There is no way to protect your webpage from an agent running a script that sends an email by triggering the send email button. But with WebMCP, you can explicitly disable the "send_email" tool when the agent interacts with gmail.</p>
]]></description><pubDate>Sat, 18 Oct 2025 03:22:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=45624642</link><dc:creator>miguelspizza</dc:creator><comments>https://news.ycombinator.com/item?id=45624642</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45624642</guid></item><item><title><![CDATA[New comment by miguelspizza in "WebMCP"]]></title><description><![CDATA[
<p>It's more providing permission granularity on the action level rather than the sandbox level. Your script might not be able to make external api calls, but there is no way to gate the ability to take destructive action within the webpage.<p>With something like WebMCP you get elicitation and the ability to disable tools from the client.</p>
]]></description><pubDate>Sat, 18 Oct 2025 02:14:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=45624331</link><dc:creator>miguelspizza</dc:creator><comments>https://news.ycombinator.com/item?id=45624331</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45624331</guid></item><item><title><![CDATA[New comment by miguelspizza in "WebMCP"]]></title><description><![CDATA[
<p>Hey glad to see Jason getting the credit he deserves! He was grokking WebMCP long before anyone else.<p>If anyone wants to test out WebMCP, you can go to: <a href="https://webmcp.sh/" rel="nofollow">https://webmcp.sh/</a> (this is a WebMCP server)<p>With the MCP-B chrome extension (this is a WebMCP client): 
<a href="https://chromewebstore.google.com/detail/mcp-b-extension/daohopfhkdelnpemnhlekblhnikhdhfa" rel="nofollow">https://chromewebstore.google.com/detail/mcp-b-extension/dao...</a><p>and use it to call WebMCP tools</p>
]]></description><pubDate>Sat, 18 Oct 2025 01:57:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=45624227</link><dc:creator>miguelspizza</dc:creator><comments>https://news.ycombinator.com/item?id=45624227</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45624227</guid></item><item><title><![CDATA[New comment by miguelspizza in "A stateful browser agent using self-healing DOM maps"]]></title><description><![CDATA[
<p>> The other part is the cohesive interface for the agent itself to use these selectors<p>We are incubating this over at the WebMCP web standard proposal. You can see the current draft of explainer for the declarative API. 
<a href="https://github.com/webmachinelearning/webmcp/pull/26" rel="nofollow">https://github.com/webmachinelearning/webmcp/pull/26</a><p>Also, great work on the browser agent, this is the best of the DOM parsing/screenshot agents I've used. I was really impressed with the wordle example</p>
]]></description><pubDate>Thu, 16 Oct 2025 18:00:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=45608630</link><dc:creator>miguelspizza</dc:creator><comments>https://news.ycombinator.com/item?id=45608630</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45608630</guid></item><item><title><![CDATA[New comment by miguelspizza in "AI tools I wish existed"]]></title><description><![CDATA[
<p>I wrote #2 as a result of a web automation tool I a working on. It's easier to show than tell.<p>This is a video of me "vibe-coding" a userscript that adds a darkmode toggle to hacker news:  <a href="https://screen.studio/share/r0wb8jnQ" rel="nofollow">https://screen.studio/share/r0wb8jnQ</a><p>The actual purpose of the vibe-coding userscripts feature is to vibe code WebMCP servers that the extension can then use for browser automation tasks.<p>Everything is still very WIP, but I can give you beta access if you want to play around with it</p>
]]></description><pubDate>Tue, 30 Sep 2025 06:31:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=45422556</link><dc:creator>miguelspizza</dc:creator><comments>https://news.ycombinator.com/item?id=45422556</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45422556</guid></item><item><title><![CDATA[New comment by miguelspizza in "Ask HN: What are you working on? (September 2025)"]]></title><description><![CDATA[
<p>I left my job to work on my side project (MCP-B: <a href="https://news.ycombinator.com/item?id=44515403">https://news.ycombinator.com/item?id=44515403</a>) full time. I set out with the goal of making the ability to vibecode a webMCP server for your website and inject it via userscript.<p>While building that, I basically wrote a modern version of Tampermonkey with its own marketplace built in. So you can vibe code any userscript and publish it to the marketplace all within the extension.<p>The automation stuff is still the core value-prop, but this is a fun bonus feature while I work on solidifying the automation features.<p>I'm writing a HN post for it. Excited to show everyone in a couple weeks here.</p>
]]></description><pubDate>Mon, 29 Sep 2025 22:46:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=45419793</link><dc:creator>miguelspizza</dc:creator><comments>https://news.ycombinator.com/item?id=45419793</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45419793</guid></item><item><title><![CDATA[New comment by miguelspizza in "Ask HN: Any local agents to help repetitive browser tasks?"]]></title><description><![CDATA[
<p>Hey I wrote MCP-B and am about to do another launch here in a week or so. The product is a browser agent which does browser automation sudo-deterministically over WebMCP.<p><a href="https://news.ycombinator.com/item?id=44515403">https://news.ycombinator.com/item?id=44515403</a><p>I’d love to give your beta access and get your thoughts if you are up to give it a run on the task you want automated.<p>Shoot me an email if you are interested<p>alex(at)mcp-b.ai</p>
]]></description><pubDate>Mon, 29 Sep 2025 19:54:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=45418011</link><dc:creator>miguelspizza</dc:creator><comments>https://news.ycombinator.com/item?id=45418011</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45418011</guid></item><item><title><![CDATA[New comment by miguelspizza in "Show HN: Tsink – Embedded time-series database for Rust"]]></title><description><![CDATA[
<p>Can we run it in the browser via WASM?</p>
]]></description><pubDate>Sat, 13 Sep 2025 01:09:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=45228442</link><dc:creator>miguelspizza</dc:creator><comments>https://news.ycombinator.com/item?id=45228442</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45228442</guid></item><item><title><![CDATA[New comment by miguelspizza in "Claude for Chrome"]]></title><description><![CDATA[
<p>The Primary client for WebMCP enabled websites is a chrome extension like Claude Chrome. So the human is still there in the loop looking at the screen. MCP also supports things like elicitation so the website could stop the model and request human input/attention</p>
]]></description><pubDate>Tue, 26 Aug 2025 23:19:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=45033539</link><dc:creator>miguelspizza</dc:creator><comments>https://news.ycombinator.com/item?id=45033539</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45033539</guid></item><item><title><![CDATA[New comment by miguelspizza in "Claude for Chrome"]]></title><description><![CDATA[
<p>The side-panel browser agent is a good middle ground to this issue. The user is still there looking at the website via their own browser session, the AI just has access to the specific functionality which the website wants to expose to it. The human can take over or stop the AI if things are going south.</p>
]]></description><pubDate>Tue, 26 Aug 2025 23:15:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=45033512</link><dc:creator>miguelspizza</dc:creator><comments>https://news.ycombinator.com/item?id=45033512</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45033512</guid></item><item><title><![CDATA[New comment by miguelspizza in "Claude for Chrome"]]></title><description><![CDATA[
<p>> It's clear to me that the tech just isn't there yet.<p>Totally agree. This was the thesis behind MCP-B (now WebMCP <a href="https://github.com/MiguelsPizza/WebMCP" rel="nofollow">https://github.com/MiguelsPizza/WebMCP</a>)<p>HN Post: <a href="https://news.ycombinator.com/item?id=44515403">https://news.ycombinator.com/item?id=44515403</a><p>DOM and visual parsing are dead ends for browser automation. Not saying models are bad; they are great. The web is just not designed for them at all. It's designed for humans, and humans, dare I say, are pretty impressive creatures.<p>Providing an API contract between extensions and websites via MCP allows an AI to interact with a website as a first-class citizen. It just requires buy-in from website owners.<p>It's being proposed as a web standard:
> <a href="https://github.com/webmachinelearning/webmcp" rel="nofollow">https://github.com/webmachinelearning/webmcp</a></p>
]]></description><pubDate>Tue, 26 Aug 2025 22:10:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=45032983</link><dc:creator>miguelspizza</dc:creator><comments>https://news.ycombinator.com/item?id=45032983</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45032983</guid></item></channel></rss>