Bernstein's install instructions were "Python 3.12+, pipx, then pipx install bernstein" for the first three months. Which sounds fine. Which is not fine for the 60% of readers who have neither.
the gap
You launch a Python CLI, the README says pipx install <x>, you feel productive. Then a real person turns up. They have Python 3.10 from Homebrew, or 3.12 from the macOS installer with no pipx, or Microsoft Store Python on a busted PATH. They paste pipx install bernstein. The terminal answers zsh: command not found: pipx.
That's where the tab closes.
I knew. I even filed an issue — "one-line install script (curl | sh) with OS detection" — back in April. It sat in the backlog because it wasn't technically hard, which is the precise category of work that never gets done in a solo project. Too mundane for the founder, too peripheral to be sprint-worthy.
the one-liner
curl -fsSL https://bernstein.run/install.sh | shWindows:
irm https://bernstein.run/install.ps1 | iexEach script:
- Checks Python 3.12+ with a real interpreter call (not
python --versionparsing). - Runs
ensurepipif pip is missing. - Installs pipx if it isn't on PATH.
- Fixes PATH for the current shell so the binary is visible now, not after a restart.
- Installs or upgrades Bernstein.
Edge cases that turned out to matter: brew Python on Apple Silicon, the Windows py -3 launcher fallback, pip install --user dropping binaries into a directory that isn't on PATH yet. All handled. The shell script is 67 lines.
not me
I didn't write any of it. @vedangit asked to pick up the issue, spent a couple of evenings on it, and worked through every edge case with a calm back-and-forth — including the brew environments and the Windows paths. Other people showed up to review the PR, gave it a thumbs-up, asked good questions. From issue to merge it was the healthiest open-source loop I've seen on the project: maintainer writes the requirements clearly, contributor owns the implementation, neither side micromanages the other.
Thanks, Vedangi. The tab-close rate just dropped.
also in 1.8.14
Same release brings the adapter list to 31 (every mainstream CLI agent on the market) and four operator commands: bernstein pr, from-ticket, remote, hooks. Long write-up in the operator-pack post.
curl -fsSL https://bernstein.run/install.sh | sh
bernstein -g "your first goal"Next: first multi-agent run, five minutes. Or, if you're past that, we orchestrate the orchestrators now on the leaf-node delegation pattern.