Skip to content

Latest commit

 

History

History
75 lines (61 loc) · 16.5 KB

File metadata and controls

75 lines (61 loc) · 16.5 KB

Changelog

All notable changes to cli-maxxing are documented here.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

Added

  • hyperresearch (step 3) — deep-research pipeline for Claude Code (jordan-gibbs/hyperresearch, MIT, PyPI hyperresearch). 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; pipx itself 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 plain pipx install uses 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, where crawl4ai is broken on 3.14, and the symptom reads as a broken tool rather than a bad install. The installer now resolves python3.13python3.12python3.11 and pins to the first hit. With none available it refuses to install a broken copy and points at brew install python@3.13. Documented in a README <details> block so the trap is written down, not just handled.
  • /verify-before-claim skill (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 local stdio MCP 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. Says unverified: plainly when nothing is checkable. Vendored at verify-before-claim-skill/ (SKILL.md + references/test-claims.md). This is the first Step 7 skill with a references/ 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.

Added

  • /landing-ab skill — self-driving landing pages per the 5-level PostHog ladder (static → watch → test → auto-iterate → personalize). Every new landing page ships with a signup-cta-tagged CTA, PostHog autocapture + heatmaps wired at build time, a landing-ab feature-flag stub, and a docs/LP-OPS.md carrying the L3–L5 playbook (95%+ / ≥50-exposure test calls, weekly PostHog-MCP optimizer loop, cohort personalization). Vendored at landing-ab-skill/ (SKILL.md + companion UserPromptSubmit hook landing-ab-intent.sh). Listed in the install.sh skill summary; not yet wired into a step installer.
  • /agent-business skill — 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 at agent-business-skill/ (single SKILL.md). Listed in the install.sh skill summary; not yet wired into a step installer.
  • /bullets skill (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 /concise decides shape per reply and sometimes leaves prose, which is wrong for document handoffs where nobody should have to read a blob. Triggers on /bullets and in plain English ("bullet this", "bulletize", "turn this into bullets"). Vendored at bullets-skill/ (single SKILL.md). Installed by Step 4 as an inline heredoc alongside /w4w and /concise (no network dependency); self-test asserts SKILL.md landed. Listed across README.md, CHEATSHEET.md, README-SECTIONS/cheat-sheet.md, install.sh + update.sh summaries, the Step 4 self-test + summary, and the uninstall.sh Step 4 removal loop.
  • /recon skill (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 the gh CLI + 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 at recon-skill/ (single SKILL.md). Installed by Step 7 alongside /gitfix (depends on the gh CLI Step 7 already installs); no PAT needed. Step 7 installer downloads from fidgetcoding/cli-maxxing/main via curl with a local fallback, the non-interactive path installs it too, and the self-test asserts SKILL.md landed. Listed across README.md, CHEATSHEET.md, README-SECTIONS/cheat-sheet.md, install.sh + update.sh summaries, step-final self-test, and the uninstall.sh Step 7 removal.
  • /concise skill (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 at concise-skill/ (SKILL.md + 3 references — copywriting.md, inputs.md, code-and-commits.md). Step 4 installer downloads from lorecraft-io/cli-maxxing/main via curl with a local fallback for offline / pre-publish runs. Self-test asserts SKILL.md + copywriting.md reference landed. Listed across README.md, CHEATSHEET.md, install.sh summary, update.sh summary, and uninstall.sh skill removal loop.
  • pdf-skill — markdown→PDF renderer enforcing a consistent house style (single H1 from frontmatter title:, 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 + cbraintg shell 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-github is 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 bare google-calendar-mcp package was a year-stale fork.

Changed

  • /concise skill — 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-repo collapsed all author/committer identities (dependabot[bot], lorecraft-io, nate variants) into a single Nate Davidovich <nate@lorecraft.io> identity across main and both release tags (v1.9.1, v2.0.0). All Co-authored-by: trailers stripped (162 of them — mostly claude-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 — gh CLI 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-maxxing install. cli-maxxing remains the lean core terminal install.
  • Step 5 — 2ndbrain-maxxing references flipped to 2ndBrain-mogging across README-SECTIONS/ and tests/.

Fixed

  • 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.
  • 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.
  • 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.
  • 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.
  • uninstall.shstrip_line / strip_block now escape / before interpolating patterns into the sed address. Path-bearing patterns (the brew shellenv evals, the $HOME/.local/bin PATH 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 dangling eval "$(/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 a command -v jq guard (minimal fallback line instead of error spray when jq is absent) and hardened the stdin parse: malformed/empty JSON now degrades to Claude • ⏱ 0s • 0% ctx with zero stderr instead of an arithmetic syntax error on empty total_duration_ms. rate_limits.*.used_percentage missing-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 nor npx can run it (now a warn with a check hint); the direct-config fallback uses a structural jq -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 the v2.304 release tag; the old releases/latest/download/JetBrainsMono-2.304.zip URL 404s the moment JetBrains ships a newer release.
  • Step 6 — Telegram bot token file is written inside a umask 077 subshell so it is born 0600 (no permissive-umask window before the chmod).
  • Step 7 — corrected the comment that claimed the GitHub PAT is "never in ps output" (it is briefly visible in the local process list while claude mcp add runs; 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 +/Applications fallback if Ghostty isn't listed). New --open-fda flag jumps directly to the right pane via the canonical x-apple.systempreferences:...?Privacy_AllFiles URL. 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 grep doesn't support -P like GNU does; pattern simplified accordingly).
  • Step 6 — SAVED_TOKEN env 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.mdcbraintg ownership note + stale references cleaned up.
  • Sub-modules: gitfix-skill and rmini-skill picked up the residual stash improvements from the step-forward rebase.

[2.0.0] - 2026-04-15

Changed — Major split + rebrand

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.

Added — Step structure

  • 8 numbered steps + 1 final step, with one command per step. See README-SECTIONS/step-ordering.md.
  • gitfix-skill and rmini-skill as in-tree submodules.
  • terminal-academy submodule — gamified terminal trainer.
  • templates/ — reusable install-step scaffolds.

[1.9.1] - pre-rebrand

Last release under the "AI Super Setup" branding. Preserved as a tag for lineage.