Friday, February 27, 2026

Show HN: BananaOS, vibecoded operating system that boots on a 486 with ~11MB RAM https://ift.tt/2cqWP1j

Show HN: BananaOS, vibecoded operating system that boots on a 486 with ~11MB RAM My 10-year-old son has been deep in low-level rabbit holes lately and ended up vibe-coding his own operating system. Since he’s still a kid and not on HN himself, I’m posting this on his behalf with his permission. This started as curiosity about how computers actually boot, and somehow escalated into writing a kernel, building a GUI, and setting up CI that produces a bootable OS image on every commit. BananaOS is a small experimental operating system built mainly for learning and exploration of low-level systems programming. It currently targets i386 BIOS systems and is designed to run on extremely constrained hardware. Fun fact: Wallpaper logic, one of the most important OS functionalities, is directly implemented in the kernel. That cracked my son up! Some highlights: Multiboot-compliant kernel loaded via GRUB VESA framebuffer graphics with double buffering Custom window manager with movable and resizable windows Dock-style application launcher PS/2 keyboard and mouse input handling PCI enumeration and AHCI SATA support Basic applications (terminal, notepad, calculator, file explorer, settings) Memory detection and allocation based on available RAM Boots in QEMU with about 11.2 MB RAM Includes an ISR workaround to emulate CMOV so it can boot on Intel 486 CPUs One thing I found particularly fun: he also added GitHub Actions workflows that automatically build the OS image for every commit, so the repo continuously produces fresh bootable artifacts. The project is very much experimental and should only be run inside an Virtual Machine. Repo (with build instructions and screenshots): https://ift.tt/0EloQPU Quick start (only on Linux, check dependencies, and see README): git clone https://ift.tt/0EloQPU cd BananaOS make qemu-system-i386 -cdrom bananaos.img -m 128M Retro mode: qemu-system-i386 -cpu 486 -cdrom bananaos.img -m 11.2M He’s mainly building this to understand kernels, memory management, drivers, and how operating systems actually work below user space. Feedback from people who have built hobby operating systems or worked close to hardware would be especially appreciated. February 27, 2026 at 11:13PM

Show HN: Unfudged – version every change between commits - local-first https://ift.tt/5OUtLRn

Show HN: Unfudged – version every change between commits - local-first I built unf after I pasted a prompt into the wrong agent terminal and it overwrote hours of hand-edits across a handful of files. Git couldn't help because I hadn't finished/committed my in progress work. I wanted something that recorded every save automatically so I could rewind to any point in time. I wanted to make it difficult for an agent to permanently screw anything up, even with an errant rm -rf unf is a background daemon that watches directories you choose (via CLI) and snapshots every text file on save. It stores file contents in an object store, tracks metadata in SQLite, and gives you a CLI to query and restore any version. The install includes a UI, as well to explore the history through time. The tool skips binaries and respects `.gitignore` if one exists. The interface borrows from git so it should feel familiar: unf log , unf diff , unf restore . I say "UN-EF" vs U.N.F, but that's for y'all to decide: I started by calling the project Unfucked and got unfucked.ai, which if you know me and the messes I get myself into, is a fitting purchase. The CLI command is `unf` and the Tauri desktop app is called "Unfudged". How it works: https://ift.tt/LhfyqO2 (summary below) The daemon uses FSEvents on macOS and inotify on Linux. When a file changes, `unf` hashes the content with BLAKE3 and checks whether that hash already exists in the object store — if it does, it just records a new metadata entry pointing to the existing blob. If not, it writes the blob and records the entry. Each snapshot is a row in SQLite. Restores read the blob back from the object store and overwrite the file, after taking a safety snapshot of the current state first (so restoring is itself reversible). There are two processes. The core daemon does the real work of managing FSEvents/inotify subscriptions across multiple watched directories and writing snapshots. A sentinel watchdog supervises it, kept alive and aligned by launchd on macOS and systemd on Linux. If the daemon crashes, the sentinel respawns it and reconciles any drift between what you asked to watch and what's actually being watched. It was hard to build the second daemon because it felt like conceding that the core wasn't solid enough, but I didn't want to ship a tool that demanded perfection to deliver on the product promise, so the sentinel is the safety net. Fingers crossed, I haven’t seen it crash in over a week of personal usage on my Mac. But, I don't want to trigger "works for me" trauma. The part I like most: On the UI, I enjoy viewing files through time. You can select a time section and filter your projects on a histogram of activity. That has been invaluable in seeing what the agent was doing. On the CLI, the commands are composable. Everything outputs to stdout so you can pipe it into whatever you want. I use these regularly and AI agents are better with the tool than I am: # What did my config look like before we broke it? unf cat nginx.conf --at 1h | nginx -t -c /dev/stdin # Grep through a deleted file unf cat old-routes.rs --at 2d | grep "pub fn" # Count how many lines changed in the last 10 minutes unf diff --at 10m | grep '^[+-]' | wc -l # Feed the last hour of changes to an AI for review unf diff --at 1h | pbcopy # Compare two points in time with your own diff tool diff <(unf cat app.tsx --at 1h) <(unf cat app.tsx --at 5m) # Restore just the .rs files that changed in the last 5 minutes unf diff --at 5m --json | jq -r '.changes[].file' | grep '\.rs$' | xargs -I{} unf restore {} --at 5m # Watch for changes in real time watch -n5 'unf diff --at 30s' What was new for me: I came to Rust in Nov. 2025 honestly because of HN enthusiasm and some FOMO. No regrets. I enjoy the language enough that I'm now working on custom clippy lints to enforce functional programming practices. This project was also my first Apple-notarized DMG, my first Homebrew tap, and my second Tauri app (first one I've shared). Install & Usage: > brew install cyrusradfar/unf/unfudged Then unf watch in a directory. unf help covers the details (or ask your agent to coach). https://ift.tt/YfP4yV5 February 27, 2026 at 03:00AM

Thursday, February 26, 2026

Show HN: Beehive – Multi-Workspace Agent Orchestrator https://ift.tt/XfHELto

Show HN: Beehive – Multi-Workspace Agent Orchestrator hey hn, i built beehive for myself mostly. it has gotten to the point where my work consists in supervising oc or cc labor at tasks for multiple issues in parallel. my set up used to be zellij with a couple tabs, each tab working in a separate dir and it was a pain to manage all that. i know i could use git worktrees but they're kind of complicated, if you don't know how to use them it is easy to mess up, and i just prefer letting agents run in separate dirs with their own .git and not risk it. while i like zellij and use it inside beehive, i dont like the tabs and i forget where i am half the time. beehive is a way for me to abstract that away. the heuristic is simple - hives are repos, so you basically have a bunch of hives which correspond to repos you work out of. each hive can have many combs. a comb is a dir with the copy of the repo you're working on. fully isolated, standalone, no shared .git. so for work or for personal stuff, i usually set up the hive, and then have a bunch of combs that i jump between supervising the agents do their thing. if you have a big repo it takes a minute to clone, and you also need gh and git because i like the niceties of like checking if the repo is there at all and stuff like that. the app is open source, mit license. i went with tauri because i hate electron. also i have friends and coworkers who updated to macos 26 and i dont know if the whole mem leak thing for electron apps has been fixed. the app is like 9 megs which is nice too. most of it is written with cc, but i guided the aesthetics and the approach. works on mac and there is a dmg signed and notarized (i reactivated my apple dev credentials). sharing this to get a vibe check on the idea, also maybe this is useful for you. there are many arguments, reasonable ones, you can make for worktrees vs dirs. i just know that trees are too big brain for me, and i like simple things. if you like it, pls lmk and also if you want to help (like add linux support, or like add themes, other cool things) please make a pr / open an issue. https://storozhenko98.github.io/beehive/ February 24, 2026 at 04:11PM

Wednesday, February 25, 2026

Show HN: DRYwall – Claude Code plugin to to deduplicate code with jscpd https://ift.tt/jumFhZs

Show HN: DRYwall – Claude Code plugin to to deduplicate code with jscpd Motivated by the observation that coding agents such as Claude Code have a bias towards producing new code over reusing existing code or extracting common code. The resulting creeping code duplication weighs down AI-native codebases. The plugin makes ongoing deduplication quick and easy from within Claude Code. Because DRYwall detects code duplication using a deterministic toolchain (the awesome jscpd), it's significantly more effective and cheaper in tokens than just telling an agent to find and refactor duplication. https://ift.tt/ac9t1LB February 25, 2026 at 11:13PM

Tuesday, February 24, 2026

Show HN: Chaos Monkey but for Audio Video Testing (WebRTC and UDP) https://ift.tt/XQs5e6u

Show HN: Chaos Monkey but for Audio Video Testing (WebRTC and UDP) It takes an input video and converts it into H.264/Opus RTP streams that you can blast at your video call systems (WebRTC, SFUs, etc.). It also injects network chaos like packet loss, jitter, and bitrate throttling to see how things break It scales from 1 to n participants, depending on the compute and memory of the host system Best part? It’s packaged with Nix, so it builds the same everywhere (Linux, macOS, ARM, x86). No dependency hell It supports both UDP (with a relay chain for Kubernetes) and WebRTC (with containerized TURN servers). Chaos spikes can be distributed evenly, randomly, or front/back-loaded for different test scenarios. To change this, just edit the values in a single config file https://ift.tt/z8Wy9GL February 23, 2026 at 02:23PM

Show HN: MasqueradeORM – Memory Efficient Node ORM: Just Write Classes https://ift.tt/XJHNoAR

Show HN: MasqueradeORM – Memory Efficient Node ORM: Just Write Classes https://ift.tt/tv9edlZ February 24, 2026 at 11:11PM

Monday, February 23, 2026

Show HN: Unlock the best engineering knowledge in papers for your coding agent https://ift.tt/7Lap5hD

Show HN: Unlock the best engineering knowledge in papers for your coding agent https://ift.tt/tFH29RZ February 23, 2026 at 11:03PM

Show HN: BananaOS, vibecoded operating system that boots on a 486 with ~11MB RAM https://ift.tt/2cqWP1j

Show HN: BananaOS, vibecoded operating system that boots on a 486 with ~11MB RAM My 10-year-old son has been deep in low-level rabbit holes ...