You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -28,6 +28,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
28
28
- Step 5 — `2ndbrain-maxxing` references flipped to `2ndBrain-mogging` across `README-SECTIONS/` and `tests/`.
29
29
30
30
### 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.
31
32
- **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.
32
33
- 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.
33
34
- 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.
Copy file name to clipboardExpand all lines: CHEATSHEET.md
+11-3Lines changed: 11 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -279,10 +279,12 @@ These are available in your terminal after Step 4 installs the FidgetFlo CLI.
279
279
280
280
## Reset PATH (stuck install)
281
281
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.
283
283
284
284
```bash
285
-
cat >~/.zshrc <<'EOF'
285
+
cat >>~/.zshrc <<'EOF'
286
+
287
+
# --- cli-maxxing reset-path block ---
286
288
# Homebrew (Apple Silicon default; also works on Intel via brew --prefix)
287
289
if [ -x /opt/homebrew/bin/brew ]; then
288
290
eval "$(/opt/homebrew/bin/brew shellenv)"
@@ -311,7 +313,13 @@ claude --version
311
313
312
314
**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.
313
315
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:
Copy file name to clipboardExpand all lines: README.md
+16-6Lines changed: 16 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -206,7 +206,7 @@ Open Terminal: **Cmd+Space → "Terminal"** on Mac, or **Ctrl+Alt+T** on Linux.
206
206
### After the script finishes
207
207
208
208
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.)
210
210
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.
211
211
212
212
> **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
711
711
```
712
712
You should see something like `2.1.112 (Claude Code)`.
713
713
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
+
714
722
**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.
715
723
716
724
### Some steps say "Homebrew not found" during install
### I see the zsh/bash shell prompt change after install
736
+
### My terminal says "The default interactive shell is now zsh"
729
737
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`.
731
739
732
-
**Check which shell you're actually in:**
740
+
**Check which shell you're in:**
733
741
734
742
```bash
735
743
echo$SHELL
736
744
```
737
745
738
-
**Want your passwd entry to match Terminal.app?** (Optional — everything works either way.)
746
+
**Recommended: switch to zsh** (the macOS default since 2019):
739
747
740
748
```bash
741
749
chsh -s /bin/zsh
742
750
```
743
751
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.
0 commit comments