Problem
The install script (scripts/install.sh, served at rem.sidv.dev/install) defaults INSTALL_DIR to /usr/local/bin:
INSTALL_DIR="${INSTALL_DIR:-/usr/local/bin}"
On modern macOS this requires sudo for almost everyone because:
- On Apple Silicon, Homebrew owns
/opt/homebrew/bin, and /usr/local/bin is owned by root:wheel with no group write — so anyone without Intel-Homebrew doesn't have write access
- First-time installs prompt for a sudo password, which is a trust hit for a one-liner
curl | bash install. Users correctly hesitate when a pipe-to-bash demands sudo
- There's no good reason to need root for a single-user CLI tool
Proposed change
Switch the default install location to $HOME/.local/bin (or $HOME/.bin if preferred), following the XDG-ish convention that rustup, uv, mise, bun, deno, and most other modern single-binary installers now use.
INSTALL_DIR="${INSTALL_DIR:-$HOME/.local/bin}"
The install script should:
- Create
$HOME/.local/bin if it doesn't exist (mkdir -p)
- Check if it's on PATH and, if not, print a clear one-liner for the user's shell to add it (detect
$SHELL → append to .zshrc / .bashrc / .config/fish/config.fish)
- Still honor
INSTALL_DIR=... env var for users who want to override (existing behavior)
- Keep the
/usr/local/bin path working as a fallback if the user explicitly sets it — don't break existing installs
Why .local/bin over .bin
~/.local/bin is the XDG Base Directory convention and ships on PATH by default on most modern Linux distros (and Homebrew on macOS Sonoma+ adds it to PATH automatically if it exists)
~/.bin is older, non-standard, and more likely to collide with dotfile managers or be overwritten
rustup, uv, mise, bun, cargo-binstall all use .local/bin or .cargo/bin / .bun/bin-style tool-specific dirs
- Users installing multiple tools via
curl | bash scripts end up with everything in .local/bin anyway
Migration for existing users
- Existing installs in
/usr/local/bin/rem keep working as long as /usr/local/bin is on PATH (it is by default)
- When an existing user re-runs the install script, it will install into
.local/bin instead and then $PATH lookups will prefer whichever comes first
- Print a notice if
/usr/local/bin/rem exists and is different from the new install, suggesting sudo rm /usr/local/bin/rem to avoid confusion
Documentation updates needed
website/static/install (served script) — update the default and the path-check messaging
website/content/docs/getting-started.md — update any references to the install location
skills/rem-cli/SKILL.md — if it mentions the install location
README.md — if it mentions it
Risk
Low. The change is backwards compatible (env var override still works), and the worst case is a user has to export PATH="$HOME/.local/bin:$PATH" once. Better than the current default which needs sudo.
Opening this as a follow-up to the v0.10.0 release. Not urgent enough to block anything but worth doing before the install footprint grows further.
Problem
The install script (
scripts/install.sh, served atrem.sidv.dev/install) defaultsINSTALL_DIRto/usr/local/bin:INSTALL_DIR="${INSTALL_DIR:-/usr/local/bin}"On modern macOS this requires
sudofor almost everyone because:/opt/homebrew/bin, and/usr/local/binis owned byroot:wheelwith no group write — so anyone without Intel-Homebrew doesn't have write accesscurl | bashinstall. Users correctly hesitate when a pipe-to-bash demands sudoProposed change
Switch the default install location to
$HOME/.local/bin(or$HOME/.binif preferred), following the XDG-ish convention that rustup, uv, mise, bun, deno, and most other modern single-binary installers now use.INSTALL_DIR="${INSTALL_DIR:-$HOME/.local/bin}"The install script should:
$HOME/.local/binif it doesn't exist (mkdir -p)$SHELL→ append to.zshrc/.bashrc/.config/fish/config.fish)INSTALL_DIR=...env var for users who want to override (existing behavior)/usr/local/binpath working as a fallback if the user explicitly sets it — don't break existing installsWhy
.local/binover.bin~/.local/binis the XDG Base Directory convention and ships on PATH by default on most modern Linux distros (and Homebrew on macOS Sonoma+ adds it toPATHautomatically if it exists)~/.binis older, non-standard, and more likely to collide with dotfile managers or be overwrittenrustup,uv,mise,bun,cargo-binstallall use.local/binor.cargo/bin/.bun/bin-style tool-specific dirscurl | bashscripts end up with everything in.local/binanywayMigration for existing users
/usr/local/bin/remkeep working as long as/usr/local/binis on PATH (it is by default).local/bininstead and then$PATHlookups will prefer whichever comes first/usr/local/bin/remexists and is different from the new install, suggestingsudo rm /usr/local/bin/remto avoid confusionDocumentation updates needed
website/static/install(served script) — update the default and the path-check messagingwebsite/content/docs/getting-started.md— update any references to the install locationskills/rem-cli/SKILL.md— if it mentions the install locationREADME.md— if it mentions itRisk
Low. The change is backwards compatible (env var override still works), and the worst case is a user has to
export PATH="$HOME/.local/bin:$PATH"once. Better than the current default which needs sudo.Opening this as a follow-up to the v0.10.0 release. Not urgent enough to block anything but worth doing before the install footprint grows further.