All notable changes to cli-maxxing are documented here.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
hyperresearch(step 3) — deep-research pipeline for Claude Code (jordan-gibbs/hyperresearch, MIT, PyPIhyperresearch). Decomposes a question into atomic items, sweeps for sources, builds an explicit contradiction graph so depth investigation targets where evidence actually forks, then runs four adversarial critics over the draft before it ships. Installed via pipx;pipxitself is installed first if missing. Step 3's banner goes 10 tools → 11.- The Python pin is the entire reason this is a function and not a one-liner. hyperresearch declares
requires-python >=3.11,<3.14, but a plainpipx installuses pipx's default interpreter — 3.14 on current Homebrew — and pipx installs it anyway with only a warning. Nothing fails at install time. It fails later at fetch time, wherecrawl4aiis broken on 3.14, and the symptom reads as a broken tool rather than a bad install. The installer now resolvespython3.13→python3.12→python3.11and pins to the first hit. With none available it refuses to install a broken copy and points atbrew install python@3.13. Documented in a README<details>block so the trap is written down, not just handled.
- The Python pin is the entire reason this is a function and not a one-liner. hyperresearch declares
/verify-before-claimskill (step 7) — look-don't-guess gate for the three question classes where an assistant is most confidently wrong: which MCP servers are actually installed, what a subscription actually costs, and whether a model name is real. Reads real local config (~/.claude.json, project.mcp.json) and live billing state instead of answering from memory; distinguishes removable localstdioMCP entries from session-injected cloud connectors; refuses to silently autocorrect a near-miss model ID to a real one, because a near-miss name is a different model and swapping it hides the error. Saysunverified:plainly when nothing is checkable. Vendored atverify-before-claim-skill/(SKILL.md +references/test-claims.md). This is the first Step 7 skill with areferences/directory, so its installer fetches the tree rather than a single file, with a local-directory fallback. Self-test and summary both assert it landed.- Ships a 5-claim adversarial test suite where a correct verdict without a cited source is scored as a FAIL — the failure mode being guarded against isn't being wrong, it's being right by accident with no way to tell the difference next time.
/landing-abskill — self-driving landing pages per the 5-level PostHog ladder (static → watch → test → auto-iterate → personalize). Every new landing page ships with asignup-cta-tagged CTA, PostHog autocapture + heatmaps wired at build time, alanding-abfeature-flag stub, and adocs/LP-OPS.mdcarrying the L3–L5 playbook (95%+ / ≥50-exposure test calls, weekly PostHog-MCP optimizer loop, cohort personalization). Vendored atlanding-ab-skill/(SKILL.md + companion UserPromptSubmit hooklanding-ab-intent.sh). Listed in theinstall.shskill summary; not yet wired into a step installer./agent-businessskill — turn any app into an AI agent business via the 6-op playbook: pick market → reverse-engineer the data → stack (Claude + n8n + Postgres) → messaging hookup (LoopMessage / Twilio / Unipile) → inbound brain → proactive coach cron. Phone-number-keyed schema, log tools per signal, 2-texts-a-day cap. Vendored atagent-business-skill/(single SKILL.md). Listed in theinstall.shskill summary; not yet wired into a step installer./bulletsskill (step 4) — crushes a paragraph or prose blob into the shortest scannable bullets: one fact per bullet, ≤~12 words, zero fluff, every signal preserved (names, numbers, dates, paths, decisions). Always outputs bullets — built because/concisedecides shape per reply and sometimes leaves prose, which is wrong for document handoffs where nobody should have to read a blob. Triggers on/bulletsand in plain English ("bullet this", "bulletize", "turn this into bullets"). Vendored atbullets-skill/(single SKILL.md). Installed by Step 4 as an inline heredoc alongside/w4wand/concise(no network dependency); self-test asserts SKILL.md landed. Listed acrossREADME.md,CHEATSHEET.md,README-SECTIONS/cheat-sheet.md,install.sh+update.shsummaries, the Step 4 self-test + summary, and theuninstall.shStep 4 removal loop./reconskill (step 7) — pre-build prior-art reconnaissance. On build-intent ("build / make / start a new X", "does X exist?") it offers a one-line prompt first (never auto-runs — you sometimes clone a known paid tool on purpose), then sweeps GitHub via theghCLI + the web for existing free and paid options, ranks the top ~10 in a comparison table, finds the edge (or honestly calls it a red ocean), and ends with a GREEN/YELLOW/RED verdict. Output is a discussion, not code. Vendored atrecon-skill/(single SKILL.md). Installed by Step 7 alongside/gitfix(depends on theghCLI Step 7 already installs); no PAT needed. Step 7 installer downloads fromfidgetcoding/cli-maxxing/mainvia curl with a local fallback, the non-interactive path installs it too, and the self-test asserts SKILL.md landed. Listed acrossREADME.md,CHEATSHEET.md,README-SECTIONS/cheat-sheet.md,install.sh+update.shsummaries,step-finalself-test, and theuninstall.shStep 7 removal./conciseskill (step 4) — default chat-shape filter. No fluff, no scaffolding, no headers on simple questions, no sycophancy. Auto-suspends for copywriting deliverables (tweets, scripts, decks, client docs) so it doesn't sand down voice on output going to a human audience. Vendored atconcise-skill/(SKILL.md + 3 references —copywriting.md,inputs.md,code-and-commits.md). Step 4 installer downloads fromlorecraft-io/cli-maxxing/mainvia curl with a local fallback for offline / pre-publish runs. Self-test asserts SKILL.md + copywriting.md reference landed. Listed acrossREADME.md,CHEATSHEET.md,install.shsummary,update.shsummary, anduninstall.shskill removal loop.pdf-skill— markdown→PDF renderer enforcing a consistent house style (single H1 from frontmattertitle:, strips body H1 / Purpose / Internal notes / Sources sections by default). Pandoc + WeasyPrint. Opt back in to dropped sections via--keep-notes/--keep-sources. Mirror of the global~/.claude/skills/pdf/skill.- README: social-links badge strip (X · LinkedIn · YouTube · Instagram, ruvnet-style for-the-badge) inserted into the centered header block beneath the banner.
cbrain+cbraintgshell shortcuts (step 10.9) — quick-launch aliases for the Brain² + Telegram-bridged sessions.- Step 5 — full upstream URL verification across all five external MCPs (morgen / motion / playwright / granola / n8n).
- Step 7 — GitHub MCP migrated to the hosted endpoint at
github/github-mcp-server(the deprecated@modelcontextprotocol/server-githubis removed). - Step 5 — Notion MCP migrated to the hosted OAuth endpoint at
https://mcp.notion.com/mcp. No integration token, no per-page sharing — Notion handles auth on first use via browser OAuth. - Step 5 — Google Calendar MCP swapped to
@cocal/google-calendar-mcp(actively maintained); the baregoogle-calendar-mcppackage was a year-stale fork.
/conciseskill — new Tool & mid-task rule adapted from Karpathy's guidelines (multica-ai/andrej-karpathy-skills, principle 4 "Goal-Driven Execution"): before starting any multi-step task, state pass/fail criteria in one line (command, test, or observable output); "done" = criteria verified, not vibes. Closes the gap where verification only ran after changes with no up-front definition of success.- Git history rewrite:
git filter-repocollapsed all author/committer identities (dependabot[bot], lorecraft-io, nate variants) into a singleNate Davidovich <nate@lorecraft.io>identity acrossmainand both release tags (v1.9.1, v2.0.0). AllCo-authored-by:trailers stripped (162 of them — mostlyclaude-flow <ruv@ruv.net>carryover from pre-rebrand). Tag commit hashes changed; this repo has no published npm artifact, so no downstream impact. - Step 6 ordering —
ghCLI moved from Step 3 to Step 7 so the full GitHub stack (CLI + MCP + workflows) ships together. - Step 5 — design-stack MCPs (Figma / Excalidraw / Gamma / Magic / YouTube / IG) removed from cli-maxxing cheatsheets — these now live exclusively in the
creativity-maxxinginstall. cli-maxxing remains the lean core terminal install. - Step 5 —
2ndbrain-maxxingreferences flipped to2ndBrain-moggingacrossREADME-SECTIONS/andtests/.
- 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
chshoptional 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_profilebridge. The Step 1 after-script tip no longer suggestssource ~/.zshrcas a fix (it only patches the current window). CHEATSHEET's Reset PATH block no longer overwrites~/.zshrcwithcat >— it appends (cat >>) under a marker comment, and its bash variant now includes the.bash_profile → .bashrcbridge line. - Step 1 —
claude: command not foundin 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 ranchshthat'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 → .bashrcbridge. (2) When claude is npm-installed under nvm, its bin dir is~/.nvm/versions/node/vX/binand 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_homebrewonly persistedbrew shellenvinto 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 becausesource_runtime_pathbootstraps brew+nvm into the script's own PATH, socommand -v claudepassed while the user's shell stayed broken — the self-test now also resolves claude from a freshenv -iinteractive login shell of the user's actual$SHELL, which is what a new terminal window really does. - Steps 4/7/8 —
${BASH_SOURCE[0]}guarded as${BASH_SOURCE[0]:-$0}in the local-fallback paths. Undercurl | bash(howinstall.shpipes every step)BASH_SOURCEis unset and these scripts runset -u, so Step 4's unconditional use printedbash: line 929: BASH_SOURCE[0]: unbound variableon every stock install and silently broke the offline local-copy fallback for /concise, /gitfix, /recon, /osmani-build, and /safetycheck. - Steps 4 + 5 — MCP registrations are now version-pinned at install time (rug-pull defense, /safetycheck Checks 22/24). A new
pin_npmhelper resolves the currently published version vianpm viewand registerspkg@x.y.zinstead 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 fivenpx -yregistrations (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@latestonly when npm/network is unavailable at install time, preserving offline installer behavior. uninstall.sh—strip_line/strip_blocknow escape/before interpolating patterns into the sed address. Path-bearing patterns (the brewshellenvevals, the$HOME/.local/binPATH export) broke the address, failed silently under|| true, and left the lines behind while the uninstaller reported success — after a Homebrew uninstall that meant every new shell ran a danglingeval "$(/opt/homebrew/bin/brew shellenv)". Verified against an rc-file fixture: all suite-written lines removed, user lines untouched.- Status line (
templates/statusline.sh+ the step-final embedded copy, kept byte-identical) — added acommand -v jqguard (minimal fallback line instead of error spray when jq is absent) and hardened the stdin parse: malformed/empty JSON now degrades toClaude • ⏱ 0s • 0% ctxwith zero stderr instead of an arithmetic syntax error on emptytotal_duration_ms.rate_limits.*.used_percentagemissing-field handling verified under stock macOS bash 3.2. - Step 4 — the fidgetflo verify chain no longer prints a false
success "fidgetflo CLI installed"when neither the global binary nornpxcan run it (now a warn with a check hint); the direct-config fallback uses a structuraljq -e '.mcpServers.fidgetflo'check instead of a substring grep that could false-skip registration. - Step final — settings.json statusLine merge and project-override
del(.statusLine)now check jq's exit status: on invalid JSON the temp file is cleaned up and a manual-add warning is printed instead of a false success. - Step 2 (
step-2/ghostty-install.sh) — JetBrains Mono download pinned to thev2.304release tag; the oldreleases/latest/download/JetBrainsMono-2.304.zipURL 404s the moment JetBrains ships a newer release. - Step 6 — Telegram bot token file is written inside a
umask 077subshell so it is born0600(no permissive-umask window before the chmod). - Step 7 — corrected the comment that claimed the GitHub PAT is "never in
psoutput" (it is briefly visible in the local process list whileclaude mcp addruns; behavior unchanged, comment now truthful). - README — uninstall "what gets removed" list no longer claims ffmpeg (creativity-maxxing installs and removes it; ten lines up the same section already said so).
- Step 2 (
step-2/ghostty-install.sh): post-install summary now includes a yellow "ONE MORE STEP — GRANT FULL DISK ACCESS" section with click-by-click instructions (System Settings → Privacy & Security → Full Disk Access → toggle Ghostty ON, with the+→/Applicationsfallback if Ghostty isn't listed). New--open-fdaflag jumps directly to the right pane via the canonicalx-apple.systempreferences:...?Privacy_AllFilesURL. Closes item 1 of the Apr-22 install-call bug catalog — every tester hit silent FDA-permission errors on first launch. - Step 1-5 — anchored MCP grep patterns at
^<name>:so substring matches don't trigger false-positive "already installed" detection. - Step 5 — BSD grep compat fix in Motion detection (macOS
grepdoesn't support-Plike GNU does; pattern simplified accordingly). - Step 6 —
SAVED_TOKENenv var unset after self-test validation so a stale value doesn't leak into the next step. - Step 7 / Step 8 / step-final — atomic MCP match patterns tightened to prevent partial overlaps.
uninstall.sh+INSTALL.md—cbraintgownership note + stale references cleaned up.- Sub-modules:
gitfix-skillandrmini-skillpicked up the residual stash improvements from the step-forward rebase.
This is the first version after the post-mogging split. The original "AI Super Setup" stack was carved into three focused repos:
- cli-maxxing (this repo) — core terminal install: shell, package managers, Claude Code, MCPs (calendar/task/automation), GitHub stack, safetycheck.
- creativity-maxxing — design / video / audio / transcription tooling.
- 2ndBrain-mogging — Obsidian + Claude Code second brain + skills + scheduled agents.
- 8 numbered steps + 1 final step, with one command per step. See
README-SECTIONS/step-ordering.md. gitfix-skillandrmini-skillas in-tree submodules.terminal-academysubmodule — gamified terminal trainer.templates/— reusable install-step scaffolds.
Last release under the "AI Super Setup" branding. Preserved as a tag for lineage.