{"slug": "show-hn-cmdfound-run-any-missing-linux-command", "title": "Show HN: Cmdfound – run any missing Linux command", "summary": "Developer Javier Lopez released cmdfound, a single 541 KB POSIX sh file that resolves missing Linux commands across 7 native channels (github, aqua, pkgx, nix, AppImages, Rust crates and conda-forge) and 11 distro catalogs run under 2 container runtimes, reaching roughly 133,000 distinct commands and about 93% of the commands tldr-pages documents for Linux. Built between September 14 and October 27, 2026 with Claude Code across 82 sessions and subagents, the tool ran 78 of 100 random tldr commands from an empty home directory, with most of the remainder being names that map to more than one program. Lopez said the code was written by agents but that \"every function went through a careful human review,\" and the project ships with 3,205 lines of tests over 44 fake channels and tools.", "body_md": "## cmdfound\n\n###### 27 Oct 2026\n\nThe fragmentation of Linux installers is one of its strengths and one of its weaknesses: a garden to try new ideas, and at the same time a lot of duplicated work. The reality is that there is probably a way to install the program you are looking for, but it is hidden behind one or several wrappers, containers, distros, etc. Before AI, and even now, it is hard to keep track of all those channels and to put them together.\n\n[cmdfound](https://github.com/javier-lopez/cmdfound) is an attempt at that,\npacked into one POSIX sh file. No daemon, no package manager of its own,\nnothing extra: just upstream, minus the friction.\n\nGet it, and hook it to your shell:\n\n``` bash\n$ wget -qO ~/.local/bin/cmdfound https://raw.githubusercontent.com/javier-lopez/cmdfound/master/cmdfound\n$ chmod +x ~/.local/bin/cmdfound\n$ echo 'eval \"$(cmdfound --hook bash)\"' >> ~/.bashrc\n```\n\nFrom then on a missing command goes through it.\n\ncmdfound tries to answer one question: what is the shortest path, in time and in network, to run that missing command, given all the software that already exists for Linux. And it tries to answer it with as little code as possible.\n\nAlthough the code was written by agents, every function went through a careful\nhuman review, and that is where [code-freeze](https://javier.io/blog/en/2026/10/27/code-freeze.html)\ncame from.\n\n### Every route, priced\n\nA name usually lives in more than one place. `nmap` is a native binary in pkgx\nand nix, and a package in every distro. `-n` shows them all without installing\nanything, cheapest first:\n\nNative beats a container, then fewer bytes, then less time.\n\n### Name the channel\n\nWhen you know where it lives, say it, eg: `github:owner/repo`:\n\n### Distros as catalogs\n\n`fdfind` is what Ubuntu calls `fd`. No native channel knows that name, so\ncmdfound reads Ubuntu’s own command index, installs the package in an `ubuntu`\nimage and runs it there:\n\nEleven catalogs are read this way: alpine, ubuntu, fedora, etc. The images run under docker when it is there, and under udocker, rootless, when it is not.\n\n### Leave no trace\n\n`-e` runs the program from a throwaway root that is gone when it exits. `-l`\nlists what is installed and what each channel keeps; `-p` removes the\nleftovers.\n\n### How far it reaches\n\nNot every distro made it in, and not every catalog either; most of them are redundant. With the current ones it reaches:\n\n- ~133,000 distinct commands.\n- ~93% of the commands [tldr-pages](https://tldr.sh) documents for linux.\n- 7 native channels (github, aqua, pkgx, nix, AppImages, Rust crates and conda-forge) and 11 distro catalogs, run under 2 container runtimes.\n- 78 of 100 random tldr commands, run from an empty home, just ran; most of the rest are names that mean more than one program, and it asks which.\n\n### Some more numbers\n\nBuilt between September 14 and October 27, 2026, pairing with\n[Claude Code](https://claude.com/claude-code):\n\n- 82 sessions and subagents, ~14,500 model responses.\n- 8.9 million output tokens; 96 million written to the prompt cache and 4.56 billion read back from it (the same context, reused turn after turn); 39,000 of fresh input. These count whole sessions that touched cmdfound, so they are an upper bound.\n- `cmdfound.in` : 5,298 lines, 201 functions. 27 channel, format and row files,\n6,409 lines. Built into one 541 KB file.\n- 3,205 lines of tests over 44 fake channels and tools; 33 sources ruled out, each with the measurement that ruled it out.\n\nThat’s it, happy hacking! 😊", "url": "https://wpnews.pro/news/show-hn-cmdfound-run-any-missing-linux-command", "canonical_source": "https://javier.io/blog/en/2026/10/27/cmdfound.html", "published_at": "2026-10-28 16:36:05+00:00", "updated_at": "2026-10-28 16:41:56.192934+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-tools"], "entities": ["cmdfound", "Javier Lopez", "Claude Code", "pkgx", "nix", "tldr-pages", "Ubuntu", "Docker"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-cmdfound-run-any-missing-linux-command", "markdown": "https://wpnews.pro/news/show-hn-cmdfound-run-any-missing-linux-command.md", "text": "https://wpnews.pro/news/show-hn-cmdfound-run-any-missing-linux-command.txt", "jsonld": "https://wpnews.pro/news/show-hn-cmdfound-run-any-missing-linux-command.jsonld"}}