The best Hacker News stories from Show from the past day
Latest posts:
Show HN: We built a multi-agent research hub. The waitlist is a reverse-CAPTCHA
Hey HN,<p>Automated research is the next big step in AI, with companies like OpenAI aiming to debut a fully automated researcher by 2028 (<a href="https://www.technologyreview.com/2026/03/20/1134438/openai-is-throwing-everything-into-building-a-fully-automated-researcher/" rel="nofollow">https://www.technologyreview.com/2026/03/20/1134438/openai-i...</a>). However, there is a very real possibility that much of this corporate research will remain closed to the general public.<p>To counter this, we spent the last month building Enlidea---a machine-to-machine ecosystem for open research.<p>It's a decentralized research hub where autonomous agents propose hypotheses, stake bounties, execute code, and perform automated peer reviews on each other's work to build consensus.<p>The MVP is almost done, but before launching, we wanted to filter the waitlist for developers who actually know how to orchestrate agents.<p>Because of this, there is no real UI on the landing page. It's an API handshake. Point your LLM agent at the site and see if it can figure out the payload to whitelist your email.
Show HN: Foundry: a Markdown-first CMS written in Go
Hi HN! I've been building a CMS called Foundry, brought together from multiple smaller private projects as well as greenfield code.<p>The short version is: it's a CMS written in Go with a focus on markdown content, a simple hook-based plugin model, themes, archetypes, preview flows, and a clean authoring/developer experience.<p>I started working on it because I wanted something that was more powerful than Hugo for a few of my websites, without having to resort to dangling onto a database.<p>What seems different about it, at least to me, is that I'm trying to keep the system small in concept: local content, explicit behavior, compile-time plugin registration, and an admin/editor layer that is meant to stay close to how the content actually lives on disk. The goal is not to make "yet another website builder", but to make a CMS that is easy to use and quick to onramp onto, but has powerful advanced features and extensibility.<p>Still early, but usable enough that I wanted to put it in front of people here and get feedback. Please don't castigate me on the UI look - I'm not a designer, and the themes are basically clones of each other.<p>Happy to answer technical questions, architecture questions, or hear where this seems useful versus where it does not.
Show HN: Sup AI, a confidence-weighted ensemble (52.15% on Humanity's Last Exam)
Hi HN. I'm Ken, a 20-year-old Stanford CS student. I built Sup AI.<p>I started working on this because no single AI model is right all the time, but their errors don’t strongly correlate. In other words, models often make unique mistakes relative to other models. So I run multiple models in parallel and synthesize the outputs by weighting segments based on confidence. Low entropy in the output token probability distributions correlates with accuracy. High entropy is often where hallucinations begin.<p>My dad Scott (AI Research Scientist at TRI) is my research partner on this. He sends me papers at all hours, we argue about whether they actually apply and what modifications make sense, and then I build and test things. The entropy-weighting approach came out of one of those conversations.<p>In our eval on Humanity's Last Exam, Sup scored 52.15%. The best individual model in the same evaluation run got 44.74%. The relative gap is statistically significant (p < 0.001).<p>Methodology, eval code, data, and raw results:<p>- <a href="https://sup.ai/research/hle-white-paper-jan-9-2026" rel="nofollow">https://sup.ai/research/hle-white-paper-jan-9-2026</a><p>- <a href="https://github.com/supaihq/hle" rel="nofollow">https://github.com/supaihq/hle</a><p>Limitations:<p>- We evaluated 1,369 of the 2,500 HLE questions (details in the above links)<p>- Not all APIs expose token logprobs; we use several methods to estimate confidence when they don't<p>We tried offering free access and it got abused so badly it nearly killed us. Right now the sustainable option is a $5 starter credit with card verification (no auto-charge). If you don't want to sign up, drop a prompt in the comments and I'll run it myself and post the result.<p>Try it at <a href="https://sup.ai" rel="nofollow">https://sup.ai</a>. My dad Scott (@scottmu) is in the thread too. Would love blunt feedback, especially where this really works for you and where it falls short.<p>Here's a short demo video: <a href="https://www.youtube.com/watch?v=DRcns0rRhsg" rel="nofollow">https://www.youtube.com/watch?v=DRcns0rRhsg</a>
Show HN: Free, in-browser PDF editor
Edit, sign, merge, compress, redact, OCR, fill forms, extract tables, and 30+ more tools — all in the browser, no sign-up. Files never leave your computer. Now with a desktop app (macOS/Windows/Linux) and a CLI/SDK for developers.<p>Last time this was posted it was in it's infancy, and how I've added a bunch more to it
Show HN: Minimalist library to generate SVG views of scientific data
Just wanted to share with HN a simple/minimal open source Python library that generates SVG files visualizing two dimensional data and distributions, in case others find it useful or interesting.<p>I wrote it as a fun project, mostly because I found that the standard libraries in Python generated unnecessarily large SVG files. One nice property is that I can configure the visuals through CSS, which allows me to support dark/light mode browser settings. The graphs are specified as JSON files (the repository includes a few examples).<p>It supports scatterplots, line plots, histograms, and box plots, and I collected examples here: <a href="https://github.com/alefore/mini_svg/blob/main/examples/README.md" rel="nofollow">https://github.com/alefore/mini_svg/blob/main/examples/READM...</a><p>I did this mostly for the graphs in an article in my blog (<a href="https://alejo.ch/3jj" rel="nofollow">https://alejo.ch/3jj</a>).<p>Would love to hear opinions. :-)
Show HN: Twitch Roulette – Find live streamers who need views the most
Hey HN, I re-launched an old site I remembered back in the day that someone made called twitchroulette.net with a lot of new features and stats and I would love for people to check it out. The idea is you can easily browse the less browsed parts of twitch and find cool and new streamers to say hi to, and maybe make some new friends.<p>I also added some real time stats and breakdowns per channel and I think some of the things they show are pretty interesting. Check it out!
Show HN: Twitch Roulette – Find live streamers who need views the most
Hey HN, I re-launched an old site I remembered back in the day that someone made called twitchroulette.net with a lot of new features and stats and I would love for people to check it out. The idea is you can easily browse the less browsed parts of twitch and find cool and new streamers to say hi to, and maybe make some new friends.<p>I also added some real time stats and breakdowns per channel and I think some of the things they show are pretty interesting. Check it out!
Show HN: Open-Source Animal Crossing–Style UI for Claude Code Agents
We posted here on Monday and got some great feedback. We’ve implemented a few of the most requested updates:<p>- iMessage channel support (agents can text people and you can text agents) Other channels are simple to extend.
- A built-in browser (agents can navigate and interact with websites)
- Scheduling (run tasks on a timer / cron/ in the future)
- Built in tunneling so that the agents can share local stuff with you over the internet
- More robust MCP and Skills support so anyone can extend it
- Auto approval for agent requests<p>If you didn’t see the original:<p>Outworked is a desktop app where Claude Code agents work as a small “team.” You give it a goal, and an orchestrator breaks it into tasks and assigns them across agents.<p>Agents can run in parallel, talk to each other, write code, and now also browse the web and send messages.<p>It runs locally and plugs into your existing Claude Code setup.<p>Would love to hear what we should build next. Thanks again!
Show HN: Open-Source Animal Crossing–Style UI for Claude Code Agents
We posted here on Monday and got some great feedback. We’ve implemented a few of the most requested updates:<p>- iMessage channel support (agents can text people and you can text agents) Other channels are simple to extend.
- A built-in browser (agents can navigate and interact with websites)
- Scheduling (run tasks on a timer / cron/ in the future)
- Built in tunneling so that the agents can share local stuff with you over the internet
- More robust MCP and Skills support so anyone can extend it
- Auto approval for agent requests<p>If you didn’t see the original:<p>Outworked is a desktop app where Claude Code agents work as a small “team.” You give it a goal, and an orchestrator breaks it into tasks and assigns them across agents.<p>Agents can run in parallel, talk to each other, write code, and now also browse the web and send messages.<p>It runs locally and plugs into your existing Claude Code setup.<p>Would love to hear what we should build next. Thanks again!
Show HN: Fio: 3D World editor/game engine – inspired by Radiant and Hammer
A liminal brush-based CSG editor and game engine with unified (forward) renderer
inspired by Radiant and Worldcraft/Hammer<p>Compact and lightweight (target: Snapdragon 8CX, OpenGL 3.3)<p>Real-time lighting with stencil shadows without the need for pre-baked compilation
Show HN: Fio: 3D World editor/game engine – inspired by Radiant and Hammer
A liminal brush-based CSG editor and game engine with unified (forward) renderer
inspired by Radiant and Worldcraft/Hammer<p>Compact and lightweight (target: Snapdragon 8CX, OpenGL 3.3)<p>Real-time lighting with stencil shadows without the need for pre-baked compilation
Show HN: Veil – Dark mode PDFs without destroying images, runs in the browser
Hi HN!
here's a tool I just deployed that renders PDFs in dark mode without destroying the images. Internal and external links stay intact, and I decided to implement export since I'm not a fan of platform lock-in: you can view your dark PDF in your preferred reader, on any device.
It's a side project born from a personal need first and foremost.
When I was reading in the factory the books that eventually helped me get out of it, I had the problem that many study materials and books contained images and charts that forced me, with the dark readers available at the time, to always keep the original file in multitasking since the images became, to put it mildly, strange.
I hope it can help some of you who have this same need. I think it could be very useful for researchers, but only future adoption will tell.<p>With that premise, I'd like to share the choices that made all of this possible. To do so, I'll walk through the three layers that veil creates from the original PDF:<p>- Layer 1: CSS filter. I use invert(0.86) hue rotate(180deg) on the main canvas. I use 0.86 instead of 1.0 because I found that full inversion produces a pure black and pure white that are too aggressive for prolonged reading. 0.86 yields a soft dark grey (around #242424, though it depends on the document's white) and a muted white (around #DBDBDB) for the text, which I found to be the most comfortable value for hours of reading.<p>- Layer 2: image protection. A second canvas is positioned on top of the first, this time with no filters.
Through PDF.js's public API getOperatorList(), I walk the PDF's operator list and reconstruct the CTM stack, that is the save, restore and transform operations the PDF uses to position every object on the page. When I encounter a paintImageXObject (opcode 85 in PDF.js v5), the current transformation matrix gives me the exact bounds of the image. At that point I copy those pixels from a clean render onto the overlay. I didn't fork PDF.js because It would have become a maintenance nightmare given the length of the codebase and the frequent updates. Images also receive OCR treatment: text contained in charts and images becomes selectable, just like any other text on the page. At this point we have the text inverted and the images intact. But what if the page is already dark? Maybe the chapter title pages are black with white text? The next layer takes care of that.<p>- Layer 3: already-dark page detection. After rendering, the background brightness is measured by sampling the edges and corners of the page (where you're most likely to find pure background, without text or images in the way). The BT.601 formula is used to calculate perceived brightness by weighting the three color channels as the human eye sees them: green at 58.7%, red at 29.9%, blue at 11.4%. These weights reflect biology: the eye evolved in natural environments where distinguishing shades of green (vegetation, predators in the grass) was a matter of survival, while blue (sky, water) was less critical. If the average luminance falls below 40%, the page is flagged as already dark and the inversion is skipped, returning the original page. Presentation slides with dark backgrounds stay exactly as they are, instead of being inverted into something blinding.<p>Scanned documents are detected automatically and receive OCR via Tesseract.js, making text selectable and copyable even on PDFs that are essentially images.
Everything runs locally, no framework was used, just vanilla JS, which is why it's an installable PWA that works offline too.<p>Here's the link to the app along with the repository: <a href="https://veil.simoneamico.com" rel="nofollow">https://veil.simoneamico.com</a>
| <a href="https://github.com/simoneamico-ux-dev/veil" rel="nofollow">https://github.com/simoneamico-ux-dev/veil</a><p>I hope veil can make your reading more pleasant. I'm open to any feedback. Thanks everyone
Show HN: Yoink – Spotify to lossless with full metadata, self-hostable, ad-free
Show HN: I put an AI agent on a $7/month VPS with IRC as its transport layer
The stack: two agents on separate boxes. The public one (nullclaw) is a 678 KB Zig binary using ~1 MB RAM, connected to an Ergo IRC server. Visitors talk to it via a gamja web client embedded in my site. The private one (ironclaw) handles email and scheduling, reachable only over Tailscale via Google's A2A protocol.<p>Tiered inference: Haiku 4.5 for conversation (sub-second, cheap), Sonnet 4.6 for tool use (only when needed). Hard cap at $2/day.<p>A2A passthrough: the private-side agent borrows the gateway's own inference pipeline, so there's one API key and one billing relationship regardless of who initiated the request.<p>You can talk to nully at <a href="https://georgelarson.me/chat/" rel="nofollow">https://georgelarson.me/chat/</a> or connect with any IRC client to irc.georgelarson.me:6697 (TLS), channel #lobby.
Show HN: I put an AI agent on a $7/month VPS with IRC as its transport layer
The stack: two agents on separate boxes. The public one (nullclaw) is a 678 KB Zig binary using ~1 MB RAM, connected to an Ergo IRC server. Visitors talk to it via a gamja web client embedded in my site. The private one (ironclaw) handles email and scheduling, reachable only over Tailscale via Google's A2A protocol.<p>Tiered inference: Haiku 4.5 for conversation (sub-second, cheap), Sonnet 4.6 for tool use (only when needed). Hard cap at $2/day.<p>A2A passthrough: the private-side agent borrows the gateway's own inference pipeline, so there's one API key and one billing relationship regardless of who initiated the request.<p>You can talk to nully at <a href="https://georgelarson.me/chat/" rel="nofollow">https://georgelarson.me/chat/</a> or connect with any IRC client to irc.georgelarson.me:6697 (TLS), channel #lobby.
Show HN: I put an AI agent on a $7/month VPS with IRC as its transport layer
The stack: two agents on separate boxes. The public one (nullclaw) is a 678 KB Zig binary using ~1 MB RAM, connected to an Ergo IRC server. Visitors talk to it via a gamja web client embedded in my site. The private one (ironclaw) handles email and scheduling, reachable only over Tailscale via Google's A2A protocol.<p>Tiered inference: Haiku 4.5 for conversation (sub-second, cheap), Sonnet 4.6 for tool use (only when needed). Hard cap at $2/day.<p>A2A passthrough: the private-side agent borrows the gateway's own inference pipeline, so there's one API key and one billing relationship regardless of who initiated the request.<p>You can talk to nully at <a href="https://georgelarson.me/chat/" rel="nofollow">https://georgelarson.me/chat/</a> or connect with any IRC client to irc.georgelarson.me:6697 (TLS), channel #lobby.
Show HN: DuckDB community extension for prefiltered HNSW using ACORN-1
Hey folks! As someone doing hybrid search daily and wishing I could have a pgvector-like experience but with actual prefiltered approximate nearest neighbours, I decided to just take a punt on implementing ACORN on a fork of the DuckDB VSS extension. I had to make some changes to (vendored) usearch that I'm thinking of submitting upstream. But this does the business. Approximate nearest neighbours with WHERE prefiltering.<p>Edit: Just to clarify, this has been accepted into the community extensions repo. So you can use it like:<p>```<p>INSTALL hnsw_acorn FROM community;<p>LOAD hnsw_acorn;<p>```
Show HN: Robust LLM extractor for websites in TypeScript
We've been building data pipelines that scrape websites and extract structured data for a while now. If you've done this, you know the drill: you write CSS selectors, the site changes its layout, everything breaks at 2am, and you spend your morning rewriting parsers.<p>LLMs seemed like the obvious fix — just throw the HTML at GPT and ask for JSON. Except in practice, it's more painful than that:<p>- Raw HTML is full of nav bars, footers, and tracking junk that eats your token budget. A typical product page is 80% noise.
- LLMs return malformed JSON more often than you'd expect, especially with nested arrays and complex schemas. One bad bracket and your pipeline crashes.
- Relative URLs, markdown-escaped links, tracking parameters — the "small" URL issues compound fast when you're processing thousands of pages.
- You end up writing the same boilerplate: HTML cleanup → markdown conversion → LLM call → JSON parsing → error recovery → schema validation. Over and over.<p>We got tired of rebuilding this stack for every project, so we extracted it into a library.<p>Lightfeed Extractor is a TypeScript library that handles the full pipeline from raw HTML to validated, structured data:<p>- Converts HTML to LLM-ready markdown with main content extraction (strips nav, headers, footers), optional image inclusion, and URL cleaning
- Works with any LangChain-compatible LLM (OpenAI, Gemini, Claude, Ollama, etc.)
- Uses Zod schemas for type-safe extraction with real validation
- Recovers partial data from malformed LLM output instead of failing entirely — if 19 out of 20 products parsed correctly, you get those 19
- Built-in browser automation via Playwright (local, serverless, or remote) with anti-bot patches
- Pairs with our browser agent (@lightfeed/browser-agent) for AI-driven page navigation before extraction<p>We use this ourselves in production at Lightfeed, and it's been solid enough that we decided to open-source it.<p>GitHub: <a href="https://github.com/lightfeed/extractor" rel="nofollow">https://github.com/lightfeed/extractor</a> npm: npm install @lightfeed/extractor Apache 2.0 licensed.<p>Happy to answer questions or hear feedback.
Show HN: Robust LLM extractor for websites in TypeScript
We've been building data pipelines that scrape websites and extract structured data for a while now. If you've done this, you know the drill: you write CSS selectors, the site changes its layout, everything breaks at 2am, and you spend your morning rewriting parsers.<p>LLMs seemed like the obvious fix — just throw the HTML at GPT and ask for JSON. Except in practice, it's more painful than that:<p>- Raw HTML is full of nav bars, footers, and tracking junk that eats your token budget. A typical product page is 80% noise.
- LLMs return malformed JSON more often than you'd expect, especially with nested arrays and complex schemas. One bad bracket and your pipeline crashes.
- Relative URLs, markdown-escaped links, tracking parameters — the "small" URL issues compound fast when you're processing thousands of pages.
- You end up writing the same boilerplate: HTML cleanup → markdown conversion → LLM call → JSON parsing → error recovery → schema validation. Over and over.<p>We got tired of rebuilding this stack for every project, so we extracted it into a library.<p>Lightfeed Extractor is a TypeScript library that handles the full pipeline from raw HTML to validated, structured data:<p>- Converts HTML to LLM-ready markdown with main content extraction (strips nav, headers, footers), optional image inclusion, and URL cleaning
- Works with any LangChain-compatible LLM (OpenAI, Gemini, Claude, Ollama, etc.)
- Uses Zod schemas for type-safe extraction with real validation
- Recovers partial data from malformed LLM output instead of failing entirely — if 19 out of 20 products parsed correctly, you get those 19
- Built-in browser automation via Playwright (local, serverless, or remote) with anti-bot patches
- Pairs with our browser agent (@lightfeed/browser-agent) for AI-driven page navigation before extraction<p>We use this ourselves in production at Lightfeed, and it's been solid enough that we decided to open-source it.<p>GitHub: <a href="https://github.com/lightfeed/extractor" rel="nofollow">https://github.com/lightfeed/extractor</a> npm: npm install @lightfeed/extractor Apache 2.0 licensed.<p>Happy to answer questions or hear feedback.
Show HN: Optio – Orchestrate AI coding agents in K8s to go from ticket to PR
I think like many of you, I've been jumping between many claude code/codex sessions at a time, managing multiple lines of work and worktrees in multiple repos. I wanted a way to easily manage multiple lines of work and reduce the amount of input I need to give, allowing the agents to remove me as a bottleneck from as much of the process as I can. So I built an orchestration tool for AI coding agents:<p>Optio is an open-source orchestration system that turns tickets into merged pull requests using AI coding agents. You point it at your repos, and it handles the full lifecycle:<p>- Intake — pull tasks from GitHub Issues, Linear, or create them manually<p>- Execution — spin up isolated K8s pods per repo, run Claude Code or Codex in git worktrees<p>- PR monitoring — watch CI checks, review status, and merge readiness every 30s<p>- Self-healing — auto-resume the agent on CI failures, merge conflicts, or reviewer change requests<p>- Completion — squash-merge the PR and close the linked issue<p>The key idea is the feedback loop. Optio doesn't just run an agent and walk away — when CI breaks, it feeds the failure back to the agent. When a reviewer requests changes, the comments become the agent's next prompt. It keeps going until the PR merges or you tell it to stop.<p>Built with Fastify, Next.js, BullMQ, and Drizzle on Postgres. Ships with a Helm chart for production deployment.