← statichum.studio

The April 22 Bitwarden CLI compromise (1,478 upvotes on r/selfhosted, 293 on r/programming) hit during a 93-minute window when a malicious npm package was the latest version. Earlier in the same period, an Axios CLI compromise sprayed credential-stealing postinstall scripts at anyone who ran npm install. r/programming has a separate thread (71 upvotes) about using CEL to enforce 'reject any dependency published in the last N hours' — the cooldown defense — but every existing implementation (Socket, Phylum, vet/safedep, Snyk) targets enterprise CI builds, not the homelab hobbyist running `npm i -g @bitwarden/cli` on their laptop or the founder doing `pip install something-cool` on a fresh AWS instance. The unmet wedge is a personal install firewall that runs on the dev's workstation, intercepts npm/pip/brew/cargo/go installs, and refuses brand-new-version installs of high-value packages until they've baked in the wild for N hours.

builder note

The MVP fits in a weekend: a Bash/Zsh function that intercepts `npm install`, queries the registry's publish date, and prompts to confirm if the version is younger than N hours. Ship for npm first, then pip, then brew. The product question that actually matters is curation — having a sensible default allowlist (lockfile-pinned reproducible builds skip the check, popular long-lived package versions skip the check) so the tool doesn't get torn out the first time it slows down a CI rerun. Distribution: Show HN, post to r/selfhosted next time a CLI compromise happens (which, sadly, will be soon).

landscape (5 existing solutions)

Enterprise tooling for supply-chain security is mature and well-funded. Personal tooling for the actual people who got popped by the Bitwarden CLI compromise — homelabbers, indie devs, founders, sysadmins doing one-off installs — is a wasteland. The wedge is a transparent shim that wraps npm/pip/brew/cargo/go install, asks the registry for the package's publish date, and refuses any version published in the last 24 (configurable) hours unless explicitly overridden. It needs to be a single binary, work without a subscription, and ship a reasonable allowlist of historically-safe packages so it doesn't false-positive the user into rage-uninstalling it on day three.

Socket B2B-priced supply chain scanner. Aimed at engineering orgs and CI pipelines. No personal/individual install workflow.
vet (safedep) Has the cooldown primitive via CEL policies. Built for CI gating; running it on a personal workstation as an npm wrapper is undocumented and unergonomic.
Phylum Acquired by Veracode in 2024. Now firmly enterprise-priced. Personal/freelancer use case is not served.
npm --ignore-scripts / pip --no-deps The Axios attack thread explicitly notes --ignore-scripts breaks sqlite3 and bcrypt. Not a real defense for users who need a working install.
Open-source attempts (Ward, Trustlock, npm install sandbox CLIs from r/node) Several hobby projects in r/node show people are trying to fill this. None has UX or distribution sufficient to win the category — they're CLI prefixes the user has to remember to use.
sources (4)
reddit https://old.reddit.com/r/selfhosted/comments/1stjtay/bitward... "Disliked that it required npm in the first place, so I tried the Linux download. Yeah, same thing. Do you consider providing a CLI alternative that doesn't use any third-party eco system? I mean..." 2026-04-23
reddit https://old.reddit.com/r/programming/comments/1stoumz/bitwar... "Bitwarden CLI Compromised in Ongoing Checkmarx Supply Chain" 2026-04-23
reddit https://old.reddit.com/r/programming/comments/1sbb7jv/using_... "Supply chain attacks often rely on speed... One defense is a cooldown period: refuse any dependency published within the last N hours." 2026-03-31
reddit https://old.reddit.com/r/node/comments/1sepcyi/the_axios_pos... "The axios postinstall RAT stole env vars and ~/.aws credentials. --ignore-scripts breaks sqlite3 and bcrypt." 2026-03-19
securitysupply-chainnpmpypiclihomelabdefense

A direct, willing-to-pay Ask HN comment captured a developer pain that nearly every team running GitHub Actions or GitLab CI knows by heart: you can't iterate on a workflow without committing-pushing-watching, and a single misplaced quote in a YAML file means another commit and another six-minute round trip. The commenter explicitly says 'Solve this and I would pay for it.' nektos/act exists for GitHub Actions but is incomplete (matrix builds, services, secrets, custom runners, OIDC, reusable workflows all break in subtle ways), and there's nothing equivalent for GitLab or BuildKite. The wedge is a polished local runner that exposes the full CI environment as an interactive shell with a debugger-style step controller and rollback, not a one-shot 'run the YAML and pray' replay.

builder note

act is a forkable foundation. The product gap is the developer experience layer on top — a textual debugger ('break before step deploy', 'set env FOO=bar and continue', 'rerun the failed step'), full marketplace-action compatibility via image pulling, and an interactive shell into the runner container at any breakpoint. Charge per seat to teams that already run GitHub Actions Enterprise. The single biggest mistake competitors make is treating this as a 'CI replacement' — it isn't, it's a debugging adapter for the CI you already have.

landscape (5 existing solutions)

Local CI runners exist but cover only the simple 80%. The hard 20% (matrix, OIDC, marketplace actions, reusable workflows, services) is exactly where the bugs are, and that's exactly where the YAML-commit-pray loop is most painful. The wedge is fidelity — a local runner that loads the same Docker images, mounts the same env, supports interactive 'step into', and lets you rewrite a step in place and retry without committing. Nobody has shipped that for GitHub Actions, and the willingness to pay among CI sufferers is real.

nektos/act Local GitHub Actions runner. Works for simple workflows. Breaks on matrix builds, reusable workflows, OIDC tokens, and the 50+ marketplace actions that depend on env vars only set in the real runner. Not interactive — runs the whole workflow start-to-finish.
gitlab-runner exec Officially deprecated by GitLab. Latest GitLab versions are removing it. No replacement.
Dagger CI as code in a real programming language. Solves a different problem (portable pipelines) and forces a rewrite of every existing workflow. Useful, but not what someone with 200 .yaml files wants on a Tuesday.
Earthly Same shape as Dagger — replaces YAML with Earthfile DSL. Excellent for new projects, doesn't help debug an existing GitHub Actions workflow.
BuildKite Agent / Docker compose-based CI BuildKite has the cleanest local-vs-CI parity story on the market, but only because their workers are general-purpose. Doesn't help GitHub Actions or GitLab users.
sources (2)
hackernews https://news.ycombinator.com/item?id=46400062 "I could use a sane CI system. I hate DevOps. I have to do multiple commits to implement something. I would love to be able to have access to the same env as the CI so that I could prototype the script/job on my own machine before committing to git. Most things are using Docker anyway, so it should be possible. I hate that I need to write commands in Yaml files, commit (or use the browser) and then look at the result. Solve this and I would pay for it." 2025-12-27
hackernews https://news.ycombinator.com/item?id=46402159 "Perhaps the ability to stop at a specific point in the script and being able to modify any commands and execute the step and then continue the script until it fails again. You know... debugging interface would be a killer feature that would save so much time developing scripts." 2025-12-27
devopscigithub-actionsdeveloper-experiencedebuggeryaml