Skip to content

Commit 2d20daa

Browse files
committed
docs: correct bash-default shell troubleshooting in README + cheat sheet
The old README entry claimed Terminal.app overrides the passwd shell with zsh — false, and exactly the misdiagnosis that stalled a real install today. Now: the 'default interactive shell is now zsh' banner is documented as the bash tell, with chsh -s /bin/zsh + full quit and reopen (chsh only affects new windows). Step 1 tip drops the 'source ~/.zshrc' suggestion (patches one window only). Reset PATH block appends instead of overwriting ~/.zshrc, and its bash variant gains the .bash_profile -> .bashrc bridge line.
1 parent d4c5345 commit 2d20daa

3 files changed

Lines changed: 28 additions & 9 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
2828
- Step 5 — `2ndbrain-maxxing` references flipped to `2ndBrain-mogging` across `README-SECTIONS/` and `tests/`.
2929

3030
### Fixed
31+
- **Docs — bash-default troubleshooting corrected to match reality.** README's shell-prompt entry claimed "Terminal.app overrides passwd with its default login shell preference" — false (Terminal/Ghostty launch the passwd shell), and it called `chsh` optional with no mention that the banner *"The default interactive shell is now zsh"* means the account is on bash. Rewritten: banner = bash tell, `chsh -s /bin/zsh` + full quit/reopen (chsh only affects new windows), bash-stay path documented via the new `.bash_profile` bridge. The Step 1 after-script tip no longer suggests `source ~/.zshrc` as a fix (it only patches the current window). CHEATSHEET's Reset PATH block no longer **overwrites** `~/.zshrc` with `cat >` — it appends (`cat >>`) under a marker comment, and its bash variant now includes the `.bash_profile → .bashrc` bridge line.
3132
- **Step 1 — `claude: command not found` in new terminal windows for bash-default macOS users.** Root cause was three stacked gaps. (1) macOS Terminal/Ghostty launches the *passwd* shell as a *login* shell — for accounts that never ran `chsh` that's bash, and login bash reads `~/.bash_profile`, never `~/.bashrc`, so every alias/PATH line Step 1 wrote to RC files was invisible in each new window (the old comment claimed Terminal "launches zsh even when the passwd shell is bash" — false). Step 1 now writes an idempotent `.bash_profile → .bashrc` bridge. (2) When claude is npm-installed under nvm, its bin dir is `~/.nvm/versions/node/vX/bin` and nvm's installer only writes init lines to ONE profile file — Step 1 now resolves the directory claude *actually* lives in and persists it (nvm init mirrored into every RC, or a direct PATH export for non-standard dirs). (3) `install_homebrew` only persisted `brew shellenv` into profile files on a *fresh* install — the already-installed path skipped it; persistence now runs on both paths. Detection was blind to all of this because `source_runtime_path` bootstraps brew+nvm into the script's own PATH, so `command -v claude` passed while the user's shell stayed broken — the self-test now also resolves claude from a fresh `env -i` interactive login shell of the user's actual `$SHELL`, which is what a new terminal window really does.
3233
- Steps 4/7/8 — `${BASH_SOURCE[0]}` guarded as `${BASH_SOURCE[0]:-$0}` in the local-fallback paths. Under `curl | bash` (how `install.sh` pipes every step) `BASH_SOURCE` is unset and these scripts run `set -u`, so Step 4's unconditional use printed `bash: line 929: BASH_SOURCE[0]: unbound variable` on every stock install and silently broke the offline local-copy fallback for /concise, /gitfix, /recon, /osmani-build, and /safetycheck.
3334
- Steps 4 + 5 — MCP registrations are now version-pinned at install time (rug-pull defense, /safetycheck Checks 22/24). A new `pin_npm` helper resolves the currently published version via `npm view` and registers `pkg@x.y.z` instead of a floating ref, so the command written into Claude's config stops re-resolving to whatever is newest on npm at every session start. Covers all five `npx -y` registrations (fidgetflo incl. its direct-config fallback, @cocal/google-calendar-mcp, fidgetcoding-morgen-mcp, fidgetcoding-motion-mcp, @playwright/mcp — the last previously `@latest`). Falls back to `@latest` only when npm/network is unavailable at install time, preserving offline installer behavior.

CHEATSHEET.md

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -279,10 +279,12 @@ These are available in your terminal after Step 4 installs the FidgetFlo CLI.
279279

280280
## Reset PATH (stuck install)
281281

282-
If you ran the installer, opened a fresh terminal, and `claude --version` still says "command not found" — your `~/.zshrc` is probably missing the lines that wire Homebrew, nvm, `~/.local/bin`, and the cli-maxxing aliases together. Paste the block below verbatim into your terminal — it creates `~/.zshrc` if it doesn't exist, appends the four things that need to be on PATH, then sources it and verifies `claude` works.
282+
If you ran the installer, opened a fresh terminal, and `claude --version` still says "command not found" — your `~/.zshrc` is probably missing the lines that wire Homebrew, nvm, `~/.local/bin`, and the cli-maxxing aliases together. Paste the block below verbatim into your terminal — it appends the four things that need to be on PATH (creating `~/.zshrc` if it doesn't exist), then sources it and verifies `claude` works. Your existing `~/.zshrc` content is untouched.
283283

284284
```bash
285-
cat > ~/.zshrc <<'EOF'
285+
cat >> ~/.zshrc <<'EOF'
286+
287+
# --- cli-maxxing reset-path block ---
286288
# Homebrew (Apple Silicon default; also works on Intel via brew --prefix)
287289
if [ -x /opt/homebrew/bin/brew ]; then
288290
eval "$(/opt/homebrew/bin/brew shellenv)"
@@ -311,7 +313,13 @@ claude --version
311313

312314
**What to expect:** `claude --version` should print something like `2.1.112 (Claude Code)`. If it does, you're unstuck — close this terminal, open a fresh one, and continue from where you left off. If it still errors, the issue is upstream of PATH (Claude Code itself didn't install, or Node is broken) — paste the error into a `cskip` session and Claude can diagnose.
313315

314-
> **Using bash instead of zsh?** Swap `~/.zshrc` for `~/.bashrc` in the block above. Everything else is identical.
316+
> **Using bash instead of zsh?** (Your terminal saying *"The default interactive shell is now zsh"* means yes.) Swap `~/.zshrc` for `~/.bashrc` in the block above, then run this once — macOS opens bash as a login shell, which skips `~/.bashrc` unless `~/.bash_profile` loads it:
317+
>
318+
> ```bash
319+
> printf '\n[ -f "$HOME/.bashrc" ] && . "$HOME/.bashrc"\n' >> ~/.bash_profile
320+
> ```
321+
>
322+
> Or skip all of that and switch your account to zsh: `chsh -s /bin/zsh`, then fully quit and reopen the terminal.
315323
316324
---
317325

README.md

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ Open Terminal: **Cmd+Space → "Terminal"** on Mac, or **Ctrl+Alt+T** on Linux.
206206
### After the script finishes
207207
208208
1. **Close this terminal and open a new one.** Homebrew, nvm, and the new aliases only load in a fresh shell. `claude` won't be on your PATH until you restart.
209-
2. **Run `claude --version`** — you should see something like `2.1.112 (Claude Code)`. If you get "command not found," try `source ~/.zshrc` (or `~/.bashrc`). Still stuck? See [Troubleshooting](#troubleshooting).
209+
2. **Run `claude --version`** — you should see something like `2.1.112 (Claude Code)`. If you get "command not found," see [Troubleshooting](#troubleshooting). One clue worth checking first: if the top of your terminal says *"The default interactive shell is now zsh,"* your account is still on bash — run `chsh -s /bin/zsh`, fully quit the terminal (Cmd+Q), and reopen. (`source ~/.zshrc` only patches the window you run it in. New windows won't inherit it.)
210210
3. **Press Ctrl+C to exit Claude, then run `cskip`** — this starts Claude in auto-approve mode (no permission prompts), the recommended way to run the rest of the setup.
211211
212212
> **Shift+Tab** toggles between permission-asking mode and auto-approve mode inside any running Claude session — no need to restart.
@@ -711,6 +711,14 @@ The installer adds Homebrew, nvm, and the shell aliases to your config — but t
711711
```
712712
You should see something like `2.1.112 (Claude Code)`.
713713

714+
**Does the top of your terminal say "The default interactive shell is now zsh"?** That banner is the tell: your Mac account still runs **bash**, which reads different config files than zsh. Fix it once:
715+
716+
```bash
717+
chsh -s /bin/zsh
718+
```
719+
720+
Enter your password, then fully quit the terminal (Cmd+Q) and reopen. `chsh` only affects new windows — the window you ran it in stays bash and will keep saying "command not found." Then re-run the installer; it's idempotent and repairs PATH for whichever shell you're on. (Installs from before 2026-07-24 wrote config only where zsh could see it, so bash accounts hit "command not found" in every new window no matter how many times they reinstalled. Fixed — but you need one re-run to pick it up.)
721+
714722
**Still missing?** Paste the **Reset PATH (stuck install)** block from [CHEATSHEET.md](CHEATSHEET.md#reset-path-stuck-install) — it rewires `~/.zshrc` with Homebrew, nvm, `~/.local/bin`, and the four aliases in one shot.
715723

716724
### Some steps say "Homebrew not found" during install
@@ -725,23 +733,25 @@ bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/mai
725733

726734
It's idempotent — anything already installed gets skipped.
727735

728-
### I see the zsh/bash shell prompt change after install
736+
### My terminal says "The default interactive shell is now zsh"
729737

730-
Modern macOS defaults to zsh even if `/etc/passwd` still says bash (Terminal.app overrides passwd with its "default login shell" preference). You may notice your prompt looks different after a fresh terminal.
738+
That banner means your Mac account still uses **bash** as its login shell. Terminal and Ghostty launch whatever shell your account is set to (they don't override it), so every new window is bash — and login bash reads `~/.bash_profile`, not `~/.bashrc` or `~/.zshrc`.
731739

732-
**Check which shell you're actually in:**
740+
**Check which shell you're in:**
733741

734742
```bash
735743
echo $SHELL
736744
```
737745

738-
**Want your passwd entry to match Terminal.app?** (Optional — everything works either way.)
746+
**Recommended: switch to zsh** (the macOS default since 2019):
739747

740748
```bash
741749
chsh -s /bin/zsh
742750
```
743751

744-
The installer writes to both `~/.zshrc` and `~/.bashrc` so the aliases work in either shell.
752+
Enter your password, then **fully quit the terminal (Cmd+Q) and reopen**. `chsh` only affects new windows — the one you ran it in stays bash.
753+
754+
Staying on bash also works: the installer writes to `~/.zshrc` and `~/.bashrc`, and bridges `~/.bash_profile` to `~/.bashrc` so login shells load everything. If your install predates 2026-07-24, re-run the installer once to pick up that bridge.
745755

746756
### xlsx2csv failed to install
747757

0 commit comments

Comments
 (0)