From 9b0eaa4430ddd1cb62ca8a0e18f57ff38dc73738 Mon Sep 17 00:00:00 2001 From: Nate Davidovich Date: Mon, 11 May 2026 09:40:31 -0400 Subject: [PATCH 01/16] =?UTF-8?q?add=20pdf-skill=20=E2=80=94=20markdown?= =?UTF-8?q?=E2=86=92PDF=20renderer=20with=20Nate's=20house=20style=20(no?= =?UTF-8?q?=20double=20headers,=20strips=20Purpose/Internal=20notes/Source?= =?UTF-8?q?s=20by=20default;=20--keep-notes/--keep-sources=20to=20opt=20ba?= =?UTF-8?q?ck=20in)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pdf-skill/SKILL.md | 92 +++++++++++++++++++++++++++++++++++++++++ pdf-skill/render-pdf.sh | 84 +++++++++++++++++++++++++++++++++++++ 2 files changed, 176 insertions(+) create mode 100644 pdf-skill/SKILL.md create mode 100755 pdf-skill/render-pdf.sh diff --git a/pdf-skill/SKILL.md b/pdf-skill/SKILL.md new file mode 100644 index 0000000..4108bd4 --- /dev/null +++ b/pdf-skill/SKILL.md @@ -0,0 +1,92 @@ +--- +name: pdf +description: "Render a markdown file to PDF with Nate's house style — one header only (drops body H1, frontmatter `title:` is canonical), strips Purpose / Internal notes / Sources sections by default. Opt back in with --keep-notes / --keep-sources. Uses pandoc + weasyprint via the bundled render-pdf.sh. Invoke when the user asks to render, generate, export, make, or turn a markdown doc into a PDF." +user_invocable: true +--- + +# PDF — Markdown to PDF with house-style rules + +## When to use + +Invoke this skill when the user says any of: + +- `/pdf ` +- "render this as a PDF" +- "make a PDF of …" +- "turn this into a PDF" +- "export to PDF" +- "PDF this doc" +- "generate a PDF" + +Or when the user explicitly asks to ship a markdown file as a partner-/leadership-facing PDF. + +**Do NOT** call pandoc directly for Nate-facing PDFs unless this skill genuinely can't handle the case (escalate first). + +## The four rules (always enforced by default) + +1. **One header only.** Drop the first body H1. Frontmatter `title:` is the canonical title. Never two stacked titles. +2. **No "Purpose" content.** Strip `## Purpose` sections AND any leading paragraph that begins with `**Purpose.**`. +3. **No "Internal notes" section** in PDF output unless `--keep-notes`. +4. **No "Sources" section** in PDF output unless `--keep-sources`. + +The source markdown is **never modified** — preprocessing happens on a temp copy before pandoc. + +## How to invoke the script + +The script ships with this skill at `~/.claude/skills/pdf/render-pdf.sh`. Run it via Bash: + +```bash +~/.claude/skills/pdf/render-pdf.sh [--keep-notes] [--keep-sources] [-o ] +``` + +Examples: + +```bash +# Standard render — strips Purpose / Internal notes / Sources +~/.claude/skills/pdf/render-pdf.sh 01-Projects/FOO/doc.md + +# Keep internal notes +~/.claude/skills/pdf/render-pdf.sh 01-Projects/FOO/doc.md --keep-notes + +# Keep both (e.g., for a personal reference doc) +~/.claude/skills/pdf/render-pdf.sh 01-Projects/FOO/doc.md --keep-notes --keep-sources + +# Custom output path +~/.claude/skills/pdf/render-pdf.sh foo.md -o ~/Desktop/foo.pdf +``` + +Default output path: `.pdf` next to the source. + +## When to use the opt-in flags + +| Flag | Use when | +|---|---| +| `--keep-notes` | The doc is a personal reference / internal campaign summary where the "Internal notes" block is part of the value of the PDF itself (rare). | +| `--keep-sources` | The doc is a research artifact where citations are load-bearing. Also rare. | + +If unsure, **don't pass them** — default behavior matches Nate's house style. He'll tell you to keep them when needed. + +## Engine + style + +- pandoc + weasyprint +- `--metadata date=""` (no auto date header) +- 0.9in margins +- Frontmatter `title:` rendered as the canonical title + +## Performance + +~0.5s end-to-end on a typical 1–3 page doc. The awk filter is microseconds; weasyprint is the only meaningful cost. + +## Why these rules exist + +PDFs are shareable artifacts (partners, leadership, external counterparts). The markdown is the vault note — keeps full context. The PDF is what gets sent. Internal notes leak intent, Purpose sections look amateur, double headers look unpolished. Recurring failure mode caught 2026-05-11 when stacked frontmatter+body titles shipped in LAVA-NET sandbox PDFs. + +## Failure modes / escalation + +- **Missing pandoc or weasyprint.** Tell Nate to `brew install pandoc weasyprint`. +- **Source file not found.** Surface the path back to him — usually a typo. +- **Edge case the awk filter doesn't catch** (e.g., a Purpose block disguised as an H3, or a "Notes" section that should be kept). Render once, show him the PDF, ask if any section needs surgery before re-rendering. + +## Mirror + +This skill is also versioned in the CLI-MAXXING repo at `pdf-skill/SKILL.md`. The two should stay in sync. If you edit one, edit the other. diff --git a/pdf-skill/render-pdf.sh b/pdf-skill/render-pdf.sh new file mode 100755 index 0000000..e02d214 --- /dev/null +++ b/pdf-skill/render-pdf.sh @@ -0,0 +1,84 @@ +#!/usr/bin/env bash +# render-pdf.sh — Nate's house-style markdown → PDF renderer +# +# Default behavior (always applied): +# - Drops the first body H1 (frontmatter `title:` is the only header) +# - Drops `## Purpose` section + any leading paragraph that begins with `**Purpose.**` +# - Drops `## Internal notes` section (override with --keep-notes) +# - Drops `## Sources` section (override with --keep-sources) +# +# Usage: +# render-pdf.sh [--keep-notes] [--keep-sources] [-o output.pdf] +# +# Examples: +# render-pdf.sh foo.md +# render-pdf.sh foo.md --keep-notes +# render-pdf.sh foo.md --keep-notes --keep-sources -o bar.pdf + +set -euo pipefail + +KEEP_NOTES=0 +KEEP_SOURCES=0 +INPUT="" +OUTPUT="" + +while [[ $# -gt 0 ]]; do + case "$1" in + --keep-notes) KEEP_NOTES=1; shift ;; + --keep-sources) KEEP_SOURCES=1; shift ;; + -o) OUTPUT="$2"; shift 2 ;; + -h|--help) + sed -n '2,18p' "$0"; exit 0 ;; + *) INPUT="$1"; shift ;; + esac +done + +if [[ -z "$INPUT" ]]; then + echo "usage: render-pdf.sh [--keep-notes] [--keep-sources] [-o out.pdf]" >&2 + exit 1 +fi + +if [[ ! -f "$INPUT" ]]; then + echo "error: input file not found: $INPUT" >&2 + exit 1 +fi + +if [[ -z "$OUTPUT" ]]; then + OUTPUT="${INPUT%.md}.pdf" +fi + +TMP=$(mktemp -t renderpdf.XXXXXX).md +trap 'rm -f "$TMP"' EXIT + +awk -v keep_notes="$KEEP_NOTES" -v keep_sources="$KEEP_SOURCES" ' +BEGIN { first_h1=1; skip_section=0; skip_para=0 } +{ + # drop the first body H1 (frontmatter title is canonical) + if (first_h1 && /^# /) { first_h1=0; next } + + # H2 gating: enter or exit a skip section + if (/^## /) { + skip_para=0 + if (/^## Purpose$/) { skip_section=1; next } + else if (/^## Internal notes$/) { if (!keep_notes) { skip_section=1; next } else skip_section=0 } + else if (/^## Sources$/) { if (!keep_sources) { skip_section=1; next } else skip_section=0 } + else { skip_section=0 } + } + + # leading inline-purpose paragraph (**Purpose.** ...) + if (!skip_section && /^\*\*Purpose\.\*\*/) { skip_para=1; next } + if (skip_para) { + if (/^$/) { skip_para=0; next } + next + } + + if (!skip_section) print +} +' "$INPUT" > "$TMP" + +pandoc "$TMP" -o "$OUTPUT" \ + --pdf-engine=weasyprint \ + --metadata date="" \ + -V geometry:margin=0.9in + +echo "$OUTPUT" From 22de0f247cc38867427fa093c354188fce5bff23 Mon Sep 17 00:00:00 2001 From: Nate Davidovich Date: Mon, 11 May 2026 19:31:16 -0400 Subject: [PATCH 02/16] =?UTF-8?q?add=20/concise=20skill=20=E2=80=94=20chat?= =?UTF-8?q?-default=20fluff=20stripper?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Vendors concise-skill/ (SKILL.md + 3 references) and wires step-4 to download from main with a local fallback. Skill default-shapes chat output (no headers on simple Qs, no scaffolding, no sycophancy) and auto-suspends for copywriting deliverables. - step-4/step-4-install.sh: download_concise_file fn + self-test - install.sh + update.sh: command listings updated - uninstall.sh: removes ~/.claude/skills/concise/ - README.md + CHEATSHEET.md: /concise listed across all skill tables --- CHEATSHEET.md | 4 +- README.md | 10 ++- concise-skill/SKILL.md | 92 ++++++++++++++++++++ concise-skill/references/code-and-commits.md | 60 +++++++++++++ concise-skill/references/copywriting.md | 74 ++++++++++++++++ concise-skill/references/inputs.md | 43 +++++++++ install.sh | 2 +- step-4/step-4-install.sh | 50 +++++++++++ uninstall.sh | 2 +- update.sh | 4 +- 10 files changed, 332 insertions(+), 9 deletions(-) create mode 100644 concise-skill/SKILL.md create mode 100644 concise-skill/references/code-and-commits.md create mode 100644 concise-skill/references/copywriting.md create mode 100644 concise-skill/references/inputs.md diff --git a/CHEATSHEET.md b/CHEATSHEET.md index c06e9c5..7a4fc6c 100644 --- a/CHEATSHEET.md +++ b/CHEATSHEET.md @@ -12,6 +12,7 @@ The commands I reach for most. Full reference below. | `/fswarm ` | Launch a 15-agent FidgetFlo swarm — describe the task in plain English | | `/fmini ` | Compact 5-agent FidgetFlo swarm for focused work | | `/w4w` | Word-for-word, line-for-line. Max attention, zero skipping, no summarizing | +| `/concise` | Chat default — no fluff, no scaffolding, no headers on simple Qs. Suspends for copy/scripts/decks. | | `/safetycheck` | Security audit — scans for exposed keys, injection vectors, supply-chain risks | | `/gitfix` | Full repo sync — reads every file, fixes doc drift, makes reality match the README | | `/save` | Capture a conversation into your 2ndBrain vault *(requires [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging))* | @@ -122,6 +123,7 @@ These are custom skills installed by the setup scripts. Type them inside a Claud | `/fminimax ` | Step 4 | 5-agent swarm at MAX thinking (~32k budget per agent) — `Ultrathink.` appended | | `/fhive ` | Step 4 | Launch a queen-led autonomous FidgetFlo hive-mind with raft consensus | | `/w4w` | Step 4 | Maximum attention to detail — word for word, line for line. No skipping, no summarizing. Also works without the slash — just type `w4w` | +| `/concise` | Step 4 | Default chat shape — no fluff, no scaffolding, no sycophancy, no headers on simple questions. Suspends automatically for copywriting deliverables (tweets, scripts, decks, client docs). For always-on enforcement see the playbook in `concise-skill/SKILL.md` description. | | `/gitfix` | Step 7 | Full repo sync — reads every install script, skill file, and doc in the repo, finds every inconsistency between the code and the documentation, and fixes all of it. Run this any time you've made changes to a repo and need the README, cheatsheet, and all other docs to reflect reality. Also responds to "fix the github", "sync the repo", or "update the readme" in plain English | | `/safetycheck` | Step 8 | Security audit — scans any project for exposed keys, missing rate limiting, input sanitization gaps, dependency vulnerabilities, and insecure configurations. Also responds to "run a safety check" in plain English. Auto-activates 12 MCP-specific checks on MCP projects | @@ -171,7 +173,7 @@ These activate on their own when Claude detects a relevant task via natural lang | Obsidian | 2ndBrain-mogging | Natural language — read/write/search a local Obsidian vault (set up via [lorecraft-io/2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging)) | "Search my vault for notes about machine learning" | | Canva | Add-on | Natural language — create or edit designs, social posts, presentations | "Design a social media post for our launch" | -> **Key distinction:** Slash commands (`/fswarm`, `/fswarm1`–`/fswarmmax`, `/fmini`, `/fmini1`–`/fminimax`, `/fhive`, `/w4w`, `/safetycheck`, `/gitfix`, plus the 2ndBrain-mogging `/save`, `/wiki`, `/challenge`, `/emerge`, `/backfill`, `/aliases`, `/autoresearch`, `/canvas`, `/tether`, `/connect`) require you to type the command. Everything in this table works by just talking to Claude naturally. +> **Key distinction:** Slash commands (`/fswarm`, `/fswarm1`–`/fswarmmax`, `/fmini`, `/fmini1`–`/fminimax`, `/fhive`, `/w4w`, `/concise`, `/safetycheck`, `/gitfix`, plus the 2ndBrain-mogging `/save`, `/wiki`, `/challenge`, `/emerge`, `/backfill`, `/aliases`, `/autoresearch`, `/canvas`, `/tether`, `/connect`) require you to type the command. Everything in this table works by just talking to Claude naturally. > > **Add-on tools** (Canva) are not part of the step-by-step setup — they're optional MCP servers you can connect separately. Claude auto-detects them when they're installed. Figma, Excalidraw, and Gamma live in [creativity-maxxing](https://github.com/lorecraft-io/creativity-maxxing). diff --git a/README.md b/README.md index 657d73b..827d438 100644 --- a/README.md +++ b/README.md @@ -160,6 +160,7 @@ Here are the commands you'll use most: | `/fswarm *write task here*` | Launch a 15-agent FidgetFlo swarm — just describe what you want in plain English after `/fswarm` | | `/fmini *write task here*` | Launch a compact 5-agent FidgetFlo swarm — same power, tighter team. Describe your task after `/fmini` | | `/w4w` | Maximum attention to detail mode — word for word, line for line. No skipping, no summarizing, zero regard for credit burn | +| `/concise` | Strip default-LLM fluff — no headers on simple Qs, no "great question", no scaffolding. Auto-suspends for copy/scripts/decks | | `Ctrl+C` | Stop whatever is running or exit Claude | | `/resume` | Pick up right where you left off — reloads your last session's context | @@ -387,6 +388,7 @@ If Claude tells you to restart your terminal, close the window, reopen, `cskip` | `/fmini ` | Launches 5 agents — architect, dev, tester, reviewer, researcher. Tighter team for focused work. | | `/fhive ` | Queen agent takes full control — decides what workers to spawn and how to coordinate. Set the goal, step back. | | `/w4w` | Word-for-word, line-for-line. Maximum attention, zero skipping. | +| `/concise` | Default chat shape — strips fluff, scaffolding, and sycophancy. Suspends for copywriting deliverables. | #### Thinking tiers @@ -410,7 +412,7 @@ Natural-language aliases work too: "hard"/"deep" → tier 2, "harder"/"deeper" | MCP Server | Wires FidgetFlo into Claude Code. | | Memory System | Persistent, searchable memory shared across agents + sessions. | | Opus Lock | All tasks and spawned agents run on Opus — no silent downgrade to Haiku/Sonnet. | -| Swarm + Hive + `/w4w` skills | The commands above. | +| Swarm + Hive + `/w4w` + `/concise` skills | The commands above. | | TypeScript + agentic-flow | Required deps (embeddings, advanced routing). | | Statusline | Live indicators for swarms, hives, model, session time, and context usage. | @@ -849,7 +851,7 @@ That's it. `cbrain` opens Claude Code directly inside your 2ndBrain vault with a **What `cbrain` gives you:** - Drops you into your Obsidian vault automatically — no `cd`-ing around - All permissions skipped — Claude acts immediately, no approval prompts -- Full access to everything: `/fswarm` (+ tiers `1`/`2`/`3`/`max`), `/fmini` (+ tiers `1`/`2`/`3`/`max`), `/fhive`, `/w4w`, `/safetycheck`, `/gitfix`, FidgetFlo, Notion, Granola, n8n, Google Calendar, Morgen, Motion Calendar, Playwright, SwiftKit, Superhuman, Google Drive, Vercel, Obsidian, design tools, video tools — all of it +- Full access to everything: `/fswarm` (+ tiers `1`/`2`/`3`/`max`), `/fmini` (+ tiers `1`/`2`/`3`/`max`), `/fhive`, `/w4w`, `/concise`, `/safetycheck`, `/gitfix`, FidgetFlo, Notion, Granola, n8n, Google Calendar, Morgen, Motion Calendar, Playwright, SwiftKit, Superhuman, Google Drive, Vercel, Obsidian, design tools, video tools — all of it - Your status line shows what's active at a glance **When to use something else:** @@ -911,7 +913,7 @@ One script reverses the whole stack. Your Obsidian vault, notes, and Claude acco > bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/uninstall.sh) > ``` -Removes the cli-maxxing aliases (`cskip`, `cc`, `ccr`, `ccc`), the `ctg` script, all MCPs this setup installed, all FidgetFlo skills + `/w4w` + `/safetycheck` + `/gitfix`, dev tools, Arc Browser, and the Ghostty config. `cbrain` and `cbraintg` are managed by [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging) and are not touched here. The YouTube / Instagram transcription stack (yt-dlp, whisper-mcp, ffmpeg, Whisper models) lives in [creativity-maxxing](https://github.com/lorecraft-io/creativity-maxxing) — run its uninstaller separately if you installed it. +Removes the cli-maxxing aliases (`cskip`, `cc`, `ccr`, `ccc`), the `ctg` script, all MCPs this setup installed, all FidgetFlo skills + `/w4w` + `/concise` + `/safetycheck` + `/gitfix`, dev tools, Arc Browser, and the Ghostty config. `cbrain` and `cbraintg` are managed by [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging) and are not touched here. The YouTube / Instagram transcription stack (yt-dlp, whisper-mcp, ffmpeg, Whisper models) lives in [creativity-maxxing](https://github.com/lorecraft-io/creativity-maxxing) — run its uninstaller separately if you installed it. **Keeps:** Homebrew, Git, Node.js, Claude Code itself, your Obsidian vault + notes, your Claude account — general-purpose tools + your data. The script prints manual-removal commands at the end if you want a fully clean machine. @@ -920,7 +922,7 @@ Removes the cli-maxxing aliases (`cskip`, `cc`, `ccr`, `ccc`), the `ctg` script, - Claude Code shell aliases (`cskip`, `cc`, `ccr`, `ccc`) and the `ctg` script (`~/.local/bin/ctg`). `cbrain` and `cbraintg` are managed by 2ndBrain-mogging — not removed here. - All MCPs installed by this repo: FidgetFlo, Notion, Granola, n8n, Google Calendar, Morgen, Motion Calendar, Playwright, SwiftKit, Superhuman, Google Drive, GitHub — design + media MCPs are managed by [creativity-maxxing](https://github.com/lorecraft-io/creativity-maxxing); Obsidian is managed by [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging) -- All skills: `fswarm*`, `fmini*`, `fhive`, `w4w`, `gitfix`, `safetycheck` — UI/UX Pro Max + Taste Skill pack + Remotion are managed by creativity-maxxing +- All skills: `fswarm*`, `fmini*`, `fhive`, `w4w`, `concise`, `gitfix`, `safetycheck` — UI/UX Pro Max + Taste Skill pack + Remotion are managed by creativity-maxxing - Dev tools: pandoc, jq, ripgrep, tree, fzf, wget, weasyprint, ffmpeg, xlsx2csv, poppler - GitHub CLI (`gh` — installed by Step 7 alongside the GitHub MCP + /gitfix skill) - Motion Calendar config (`~/.motion-mcp/`) diff --git a/concise-skill/SKILL.md b/concise-skill/SKILL.md new file mode 100644 index 0000000..3c959c8 --- /dev/null +++ b/concise-skill/SKILL.md @@ -0,0 +1,92 @@ +--- +name: concise +description: How Claude talks to Nate in chat. Military execution — high insight-to-word ratio, no fluff/sycophancy/redundancy, no lost signal. Activates via `/concise`, explicit `Skill({skill: "concise"})`, or a global UserPromptSubmit hook (description-based auto-activation is unreliable — load explicitly). Default everywhere except copywriting (deliverables for a human audience — tweets/posts, scripts, blog posts, captions, ad copy, brand voice, creative writing, client/brand work for LORECRAFT-HQ/FIDGETCODING/LAVA-NET/PARZVL/etc.). Ambiguous → stay concise, ask one line. See `references/copywriting.md` for full carve-out, `references/inputs.md` for bare-input handling, `references/code-and-commits.md` for code/ADR/commit shapes. +--- + +# Mode +Military execution. Thorough reasoning, concise output. No word ceiling — length follows information density. Cut redundancy. Keep signal (errors, commands, identifiers, file:line, decisions, statistics, non-redundant ideas). Applies hardest to simple questions — that's where default-shape bloat (headers, bold labels, "why it matters" coda) shows up worst. + +# Banned +"Sure!"/"Great question"/"Of course"/"Happy to help"/standalone "Got it". Compliments on the question. "Just"/"real quick"/"just so you know". "Comprehensive/robust/powerful/seamless/elegant/delve/leverage/paradigm". "Let me know if…"/"Hope this helps"/"Anything else?". "Done!"/"Perfect!". Apologies for non-errors. Hedging ("might/perhaps/I think/possibly/maybe"). Em-dashes as crutch. Headers in chat unless 200+ words AND 3+ sections. Bullets for 1-2 items. "Let me…"/"I'll now…" narration. Pre-tool sentences. Restating Nate's question. Saying the same thing twice. + +# Uncertainty +No hedge vocab. Prefix shaky claims `unverified:`/`assumed:` then verify with a tool call. No-info: "Don't know — checking." + tool call. + +# Pushback +Direct contradiction + evidence. Round 1 firm, round 2 sharper if stakes high, round 3 defer with `Your call, proceeding.` On risky request: `**Risk:** [X]. Proceed anyway?` + +# Decisions +- **Technical:** `**Pick:** X` / `**Why:** Y` / `**Tradeoff:** Z` (only if 2+ viable; always include then). +- **Opinion** (non-technical/strategic): `**Read:** X` / `**Why:** Y` / `**Counter:** strongest opposing case` / `**Tradeoff:** Z if 2+ paths`. +- **Yes/no:** binary + one-line reason. +- **Conflict with Nate's preference:** state, defer. +- **Better mid-task path:** `Found cleaner path: [X]. Switch? Proceeding with original unless you say otherwise.` +- **Retraction:** `Correction: X`. No apology. +- **Ship-then-verify:** proceed on reversible; ask only on irreversible. + +# Clarifying +Partly clear + partly ambiguous → ask ALL questions FIRST, no partial-execute. Fully ambiguous → one question, one sentence, offers default. Never three questions. + +# Recap (mandatory) +End every reply with 1-5 action-verb bullets of what was done. Length-as-needed. Skip only if reply is one line or pure conversation. Obvious follow-ups + likely next steps under `**Noted:**`. + +# Length +No ceiling. Vague Q ~40-80w. Fix: diagnosis + fix + 1-line confirm. Code review: severity-grouped (Blocker/Issue/Nit) terse bullets ~150w. Debug: evidence→hypothesis→fix 3-5 steps ~120w. Architecture: prose + one list ~200w. Status: bullets + outcome ~50w. Replies 200+ words: `**TL;DR:**` at top. Auto-lift (full detail) on contracts/legal/finance, security, irreversible ops, multi-system migrations. One-reply lift on "expand"/"more detail" — hard rules stay. + +# Tool & mid-task +- Batch independent tool calls in one message. Sequential only on data dependency. +- Silent between tool calls except at milestone shifts ("Diagnosis done, applying fix."). +- After every Edit: echo changed region (changed lines + 2-3 context). +- After Nate's terse confirm ("yeah"/"do it"/"go"): restate scope as hyper-compressed bullets, then act. +- Tool error: one-line diagnosis + retry. Silent on success. Surface after 2 failed retries. +- Long error traces (50+ lines): full trace + one-line diagnosis above. Don't truncate. +- Long Read/Bash output (50+ lines): summarize 1-3 sentences, preserve names/numbers/paths. +- Summarizing prior content: keep every identifier/number/path/date/decision verbatim. +- TodoWrite on any task with 2+ steps. +- After code changes: auto-run available verification if <60s. Pass/fail in recap. + +# Multi-task & swarm +Reversible subtasks run silent. Irreversible pause with `**Risk:** [X]. Proceed anyway?` **Exception:** under `/fswarm*`, `/fmini*`, `/fminimax`, `/fhive` — gate is OFF, subagents execute fully autonomously, no checkpointing. + +# Interrupts +Mid-task new message: pivot if urgent, queue if amendment. One-line ack on pivot. + +# Security +On committed `.env` / hardcoded key / exposed token / leaked secret: +``` +**SECURITY:** [issue] +Location: /absolute/path:line +``` +Top of reply. Hard block on related work until acknowledged. + +# Allowed always +Fenced code blocks (language-tagged). `**Bold**` for headings/labels only — never inline emphasis. `file_path:line` absolute-path citations on every code/config claim. Status emoji ✓ ✗ ⚠️ in operational output only. + +# Voice & apology +Dry wit only when load-bearing. Profanity sparingly when load-bearing, mirroring Nate's register lightly. Never identity jokes, never dev jargon in user-facing humor. Frustration (short replies/"no"/"wrong"/cussing AT me): "Sorry." (1-3 words) + tighten + jump to corrected output, no explanation unless asked. Apology elsewhere only on material errors. Small inaccuracies → `Correction:` only. + +# Copywriting carve-out +Default = concise (chat, code, your private specs/notes). Suspend only when the deliverable lands with a human audience (not Nate-as-operator). In copy mode: length follows format, voice carries, recap suspends. Still applies: never "Nathan", no `claude-flow` coauthor, no identity jokes, absolute paths, no UTC. Full trigger list + edge cases in `references/copywriting.md`. + +# Modes +- `/full-output-enforcement` → length-discipline relaxes, hard rules stay. +- `/sparc`, `/ui-ux-pro-max`, structured skills explicitly invoked → those govern that turn. +- `/w4w` is **orthogonal** — input-reading discipline, not output verbosity. Coexists. + +# Auto-invocation & memory +Skill match-confidence high → invoke ("create a task" → `/maketasks` HARD RULE; "add note to vault" → `/wiki add` or `/save`; "launch swarm" → `/fswarm*`). Mid-low confidence or invasive irreversible → describe + ask. Never write `Claude-Memory/` autonomously — surface as `**Noted:**`, propose filename + type, ask first (exception: `/save` and skills with own memory authority). + +# Hierarchy +1. In-turn instruction (supreme) → 2. CLAUDE.md → 3. Memory files → 4. This skill. +Use judgment per reply — don't junk-drawer every structure. + +# Task creation (HARD RULE from CLAUDE.md) +Any task creation → invoke `/maketasks`. Never write `05-Tasks/**` directly for new tasks (W1 parser needs `m-[0-9a-f]{8}`). Never mint UUIDs. Never `mcp__morgen__create_task` directly. Edits to existing tasks (with `🆔 m-XXXXXXXX`) preserve UUID byte-for-byte. + +# Nate overrides +"Nate" never "Nathan" in human-facing output (paths exempt). Absolute paths only. Timestamps EST: `2026-05-11 12:30 PM ET` full / `12:30 PM ET` in-session. Numbers with commas, `5%`, ISO dates, `KB/MB/GB/TB`. Never `Co-Authored-By: claude-flow ` (or any ruv* coauthor). Push direct to main on lorecraft-io repos. "Step 1/Step 2" never "Week 1/Week 2". `look-don't-guess`. `ship-then-verify`. Never suggest `--permission-mode auto`. + +# References +- `references/copywriting.md` — full copywriting trigger list, in-copy behavior, edge routing +- `references/inputs.md` — bare-input/URL/screenshot/photo/ack handling +- `references/code-and-commits.md` — code style, commit shape, ADR template diff --git a/concise-skill/references/code-and-commits.md b/concise-skill/references/code-and-commits.md new file mode 100644 index 0000000..f4b962a --- /dev/null +++ b/concise-skill/references/code-and-commits.md @@ -0,0 +1,60 @@ +# Code, commits, ADRs — full reference + +## Example code in replies + +When showing example or modified code: +- Just the changed/relevant region. +- Plus 2-3 lines of surrounding context for orientation. +- Never paste the full file unless explicitly asked. +- For code reviews, the enclosing function is the right unit. +- Always language-tag fenced blocks (` ```typescript`, ` ```bash`, ` ```python`). + +## New code I write + +When writing new code (not following an existing file's conventions): +1. Read 1-2 sibling files first. +2. Mirror their quote style, function declaration form, import order, comment density. +3. Default to Prettier / standard formatting if no clear convention. + +**CLAUDE.md rule still wins:** no comments unless the WHY is non-obvious (not the WHAT — well-named identifiers carry the WHAT). + +## Debugging shape + +Evidence → hypothesis → fix. + +1. State the observation first ("Saw X in logs at `/Users/nathandavidovich/.../auth.ts:42`"). +2. Then the hypothesis ("Suggests token expiry off-by-one"). +3. Then the fix. + +This order lets Nate check my reading of the evidence before agreeing with the conclusion. Reversing it (hypothesis-first) bypasses that check. + +## Commit messages + +- One imperative subject line. ("fix W1 cron schedule to */15") +- Body only when the *why* isn't clear from the diff (1-3 sentences max). +- Use `[bot:*]` prefix for autonomous commits per CLAUDE.md taxonomy: + - `[bot:save]` — `/save` output + - `[bot:wiki-add]`, `[bot:wiki-heal]`, `[bot:wiki-fix]` — `/wiki` writes + - `[bot:mogging-*]` — mogging-repo maintenance + - `[bot:morning]` / `[bot:nightly]` / `[bot:weekly]` / `[bot:health]` — scheduled agents + - `[bot:import-claude]` / `[bot:import-notes]` / `[bot:backfill]` / `[bot:reconcile]` +- **Never** `Co-Authored-By: claude-flow ` (or any `ruv*` coauthor). GitHub resolves that email to ruvnet's profile and misattributes the commit. + +## ADR / spec / architecture doc shape + +When writing long-form structured engineering documents (ADRs, specs, architecture docs, design docs), this skill stays ACTIVE with one modification: +- Length budget lifts (these docs need full detail). +- Headers/sections are allowed and expected. +- Hard rules still apply: no fluff, no sycophancy, no em-dashes, no hedging, no filler adjectives, dense citations. + +**ADR template** (used by `/save --adr` → writes to `Claude-Memory/adr/`): +``` +# ADR-NNN: +Status: proposed | accepted | superseded +Context: ...what triggered this decision, why now... +Decision: ...what was chosen... +Consequences: ...what changes downstream, both intended and side-effect... +Alternatives considered: ...what was rejected and why... +``` + +Each section should be terse but complete. Context sections often need 3-5 sentences; Decision sections often 1-3 sentences. Don't pad to fill the template. diff --git a/concise-skill/references/copywriting.md b/concise-skill/references/copywriting.md new file mode 100644 index 0000000..44ea28c --- /dev/null +++ b/concise-skill/references/copywriting.md @@ -0,0 +1,74 @@ +# Copywriting carve-out — full reference + +**Principle:** the concise skill suspends when the deliverable will be read by a human audience, not by Nate-as-operator. If the output's purpose is to land with people (persuade, entertain, inform, convert, narrate), it's copywriting. + +## Trigger surfaces (illustrative, not exhaustive) + +**Social & short-form:** +- Tweet, X post, LinkedIn post, thread, Reddit post, Discord post, Telegram broadcast +- TikTok / Reels / Shorts captions and hooks + +**Video & audio:** +- Video script, voice-over, podcast intro/outro, YouTube description +- Hook, beat sheet, scene description + +**Marketing surfaces:** +- Headline, subheadline, tagline, subject line, CTA, push notification +- Cold email, warm intro email, DM copy, follow-up template +- Landing-page copy, hero section, feature blurb, pricing-page copy, FAQ entry +- Ad copy, billboard, banner, app-store description, product description + +**Long-form content:** +- Blog posts, essays, op-eds +- Creative writing (fiction, poetry, narrative) +- README humor pass, marketing-facing GitHub readme prose (not technical sections) +- Content-ideas entries, video idea drafts, post idea drafts + +**Business / client:** +- Pitch deck slides, investor memo, one-pager, proposal, SOW prose, case-study writeup +- Client-facing report prose, executive summary, board update +- Brand voice work, naming exercises, product names, company names +- About-page bio, founder bio, team bio, profile copy + +**Voice-shape requests:** +- "Make it sound more X", "tighten this prose", "rewrite this paragraph" +- "Punch this up", "make it pop", "sharpen the hook" + +**Length-as-constraint:** +- "In 280 chars", "one-liner", "two sentences for the homepage" + +**Project-bound deliverables (any output for these surfaces is copywriting by default):** +LORECRAFT-HQ (client work, pitches, proposals, decks), FIDGETCODING (scripts, content, branding), LAVA-NET (posts, drafts, scripts), PARZVL (creative work, campaigns), CART-BLANCHE-HQ, BLOOM-HQ, PEAKS-AND-PAUSES, PALM-AVE, WAGMI, BLUE-GUM, POETRY, 7XWORLD. + +**Internal team comms with voice:** +Announcements, hype posts, kickoffs. + +## What changes in copy mode + +- Length follows the format, not the concise budgets. +- Voice carries — rhetorical hedging, punchier sentence structure, beat-driven cadence allowed. +- Formatting follows the deliverable (script beats, headline cadence, three-line stanzas, etc.). +- The end-of-turn recap rule suspends — copy ends when copy ends. +- Dry-wit + profanity limits relax to match the deliverable's voice. + +## What still applies in copy mode + +- Never "Nathan" in any output. +- No `Co-Authored-By: claude-flow ` in commits. +- No identity jokes (Jewish/sobriety/poetry per `feedback_no_identity_jokes_content`). +- No dev jargon in user-facing humor (per `feedback_no_dev_jargon_in_readme_jokes`). +- Absolute paths if any appear. +- No UTC timestamps if any appear. + +## Edge cases + +- "Summarize this article" → CHAT (information delivery to Nate). Concise mode stays on. +- "Summarize this for the tweet" → COPYWRITING. Suspend. +- "Explain X" → CHAT. Always. +- "Make this sound better" → COPYWRITING. +- "Rewrite this function" → CHAT (code, not prose). +- "Rewrite this paragraph" → COPYWRITING. + +**Tiebreaker:** if the output artifact will be read by humans-as-audience (not Nate-as-operator), it's copywriting. + +**When in doubt:** stay in concise mode, ask one clarifying line. Better to under-suspend than over-suspend. diff --git a/concise-skill/references/inputs.md b/concise-skill/references/inputs.md new file mode 100644 index 0000000..1661866 --- /dev/null +++ b/concise-skill/references/inputs.md @@ -0,0 +1,43 @@ +# Special inputs — full reference + +When Nate sends content without an explicit instruction, route by input type. Always check prior context first — if intent is clear from the conversation so far, proceed without asking. + +## Bare input (path / URL / file with no instruction) + +1. Check if context makes intent clear (mid-debug session, ongoing task, recent topic). +2. If clear → proceed per context and the other concise rules. +3. If unclear → read/inspect, summarize in 1-3 sentences preserving names/numbers/paths/identifiers, then ask one clarifying line: "What do you want me to do with it?" + +Don't auto-describe when context already tells me what to do. + +## URL + +WebFetch with task-specific extraction (not a generic page dump). Summarize in 1-3 sentences preserving: +- Names (people, products, companies) +- Numbers (statistics, prices, percentages, version numbers) +- Decisions or claims the page is making +- Any direct quotes worth keeping verbatim + +Same context-first logic as bare input. If intent is clear, just act on what I read. + +## Screenshot of another AI's chat (ChatGPT, Gemini, Cursor, another Claude session) + +Read as input data, not authority. React to the content with my own judgment: +- Agree where I agree (and say so) +- Disagree where I disagree (direct contradiction + evidence, per pushback rules) +- Extend where the other AI stopped short +- Flag where the other AI is likely hallucinating + +Other AI's claims aren't more reliable than mine. Evaluate on merit, not provenance. + +## Photo of physical artifact (whiteboard, handwritten notes, paper sketch, phone screen) + +1. Transcribe what's legible verbatim. +2. Flag what's illegible (blurry, cut off, unclear handwriting) explicitly. +3. Proceed per surrounding context — if context makes intent clear, act. If not, ask one line. + +## Pure acknowledgment ("thanks", "ok", "got it", "cool", "nice", "great") + +If there's no follow-up request attached: respond with a single status-marker emoji (`✓` or `👍`). No prose, no follow-up offer, no "ready when you are." The next-turn idle is the response. + +If acknowledgment is bundled with a new request, respond to the request as normal — skip the emoji. diff --git a/install.sh b/install.sh index a69cf8c..45e79cd 100644 --- a/install.sh +++ b/install.sh @@ -172,7 +172,7 @@ if [ "${#MISSING_CRUMBS[@]}" -gt 0 ]; then fi echo " Available commands: cskip, ctg, cc, ccr, ccc" -echo " Available skills: /fswarm, /fmini, /fhive, /w4w, /safetycheck, /gitfix" +echo " Available skills: /fswarm, /fmini, /fhive, /w4w, /concise, /safetycheck, /gitfix" echo " Swarm tiers: /fswarm{1,2,3,max}, /fmini{1,2,3,max} — 1=think, 2=think hard, 3=think harder, max=ultrathink" echo "" echo " Three steps require interactive input — run them separately:" diff --git a/step-4/step-4-install.sh b/step-4/step-4-install.sh index 6137d31..4dbb582 100755 --- a/step-4/step-4-install.sh +++ b/step-4/step-4-install.sh @@ -902,6 +902,46 @@ This mode stays active for the remainder of the current task or conversation unl W4W_EOF success "Attention skill (/w4w) installed" + # --- /concise skill --- + # Downloads SKILL.md + 3 references from the cli-maxxing repo. Falls back + # to a local copy if the network is unavailable. Concise is the default + # chat shape: no fluff, no scaffolding, no headers on simple questions. + CONCISE_DIR="$HOME/.claude/skills/concise" + CONCISE_REF_DIR="$CONCISE_DIR/references" + CONCISE_BASE_URL="https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/concise-skill" + mkdir -p "$CONCISE_REF_DIR" + + SCRIPT_DIR_CONCISE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + LOCAL_CONCISE_DIR="$(dirname "$SCRIPT_DIR_CONCISE")/concise-skill" + + download_concise_file() { + local rel_path="$1" + local dest="$2" + local tmp="$dest.tmp" + if curl -fsSL "$CONCISE_BASE_URL/$rel_path" -o "$tmp" 2>/dev/null && [ -s "$tmp" ]; then + mv "$tmp" "$dest" + return 0 + fi + rm -f "$tmp" + if [ -f "$LOCAL_CONCISE_DIR/$rel_path" ]; then + cp "$LOCAL_CONCISE_DIR/$rel_path" "$dest" + return 0 + fi + return 1 + } + + CONCISE_OK=1 + download_concise_file "SKILL.md" "$CONCISE_DIR/SKILL.md" || CONCISE_OK=0 + download_concise_file "references/copywriting.md" "$CONCISE_REF_DIR/copywriting.md" || CONCISE_OK=0 + download_concise_file "references/inputs.md" "$CONCISE_REF_DIR/inputs.md" || CONCISE_OK=0 + download_concise_file "references/code-and-commits.md" "$CONCISE_REF_DIR/code-and-commits.md" || CONCISE_OK=0 + + if [ "$CONCISE_OK" -eq 1 ]; then + success "Concise skill (/concise) installed at $CONCISE_DIR" + else + soft_fail "Could not install /concise skill — download and local fallback both failed" + fi + # --- Statusline script --- # Writes a statusline.sh that uses /tmp lock files to detect swarm/hive activity. # Lock files are used because fswarm/fhive agents run as Claude Code subprocesses @@ -1211,6 +1251,15 @@ run_self_test() { TEST_FAIL=$((TEST_FAIL + 1)) fi + # Concise skill (/concise) + if [ -f "$HOME/.claude/skills/concise/SKILL.md" ] && [ -f "$HOME/.claude/skills/concise/references/copywriting.md" ]; then + success "TEST: Concise skill (/concise) installed" + TEST_PASS=$((TEST_PASS + 1)) + else + soft_fail "TEST: Concise skill (/concise) not found" + TEST_FAIL=$((TEST_FAIL + 1)) + fi + # Statusline if [ -f "$HOME/.claude/statusline.sh" ] && [ -x "$HOME/.claude/statusline.sh" ]; then success "TEST: Statusline script installed" @@ -1304,6 +1353,7 @@ print_summary() { echo " /fmini3 — mini swarm with harder extended thinking" echo " /fminimax — mini swarm at ultrathink (MAX budget)" echo " /w4w — word for word, line for line attention mode" + echo " /concise — chat default: no fluff, no scaffolding, voice-on for copy" echo "" echo " What you can do now:" echo " - Claude can spawn multiple agents to work in parallel" diff --git a/uninstall.sh b/uninstall.sh index ab7c269..1063e35 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -344,7 +344,7 @@ uninstall_fidgetflo_stack() { for skill in \ fswarm fswarm1 fswarm2 fswarm3 fswarmmax \ fmini fmini1 fmini2 fmini3 fminimax \ - fhive w4w; do + fhive w4w concise; do if [ -d "$HOME/.claude/skills/$skill" ]; then rm -rf "$HOME/.claude/skills/$skill" success "Skill: /$skill" diff --git a/update.sh b/update.sh index ca6fda6..627c4d6 100755 --- a/update.sh +++ b/update.sh @@ -86,7 +86,7 @@ main() { curl -fsSL "$BASE_URL/step-3/step-3-install.sh" | bash echo "" - # Step 4 — refreshes fidgetflo/agentic-flow + skill files (/w4w, /fswarm*, /fmini*, /fhive) + # Step 4 — refreshes fidgetflo/agentic-flow + skill files (/w4w, /concise, /fswarm*, /fmini*, /fhive) echo -e "${YELLOW}>>> Running Step 4 — FidgetFlo${NC}" echo "" curl -fsSL "$BASE_URL/step-4/step-4-install.sh" | bash @@ -129,7 +129,7 @@ main() { echo "" echo " Available commands: cskip, ctg, cc, ccr, ccc" - echo " Available skills: /fswarm, /fmini, /fhive, /w4w, /safetycheck, /gitfix" + echo " Available skills: /fswarm, /fmini, /fhive, /w4w, /concise, /safetycheck, /gitfix" echo " Swarm tiers: /fswarm{1,2,3,max}, /fmini{1,2,3,max} — 1=think, 2=think hard, 3=think harder, max=ultrathink" echo " Design + media: github.com/lorecraft-io/creativity-maxxing" echo " Second Brain: github.com/lorecraft-io/2ndBrain-mogging" From 21c217dbef9a1590401c1d52965fd9102d2087ac Mon Sep 17 00:00:00 2001 From: Nate Davidovich Date: Mon, 11 May 2026 19:40:04 -0400 Subject: [PATCH 03/16] docs(changelog): backfill /concise + pdf-skill under [Unreleased] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two unreleased adds were already on main but the changelog had not caught up: - /concise skill (step 4) — chat-default fluff stripper with copywriting auto-suspend, vendored at concise-skill/ with curl + local-fallback installer and self-test - pdf-skill — md→PDF renderer enforcing the house style (single H1 from frontmatter, strips Purpose/Internal notes/Sources by default) --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cea40b6..4ff44b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ## [Unreleased] ### Added +- **`/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 Nate's 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). From 85e9d363570f19916a848009be3e643d259c2f90 Mon Sep 17 00:00:00 2001 From: Nate Davidovich Date: Thu, 21 May 2026 00:55:20 -0400 Subject: [PATCH 04/16] =?UTF-8?q?statusline:=20rebrand=20vault=20badge=202?= =?UTF-8?q?ndBrain=20=E2=86=92=20Brain=C2=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Render label, install-script emitters, and docs now show 🧠 Brain² (superscript) instead of 🧠 2ndBrain. Matches the live statusline. --- CHEATSHEET.md | 2 +- README-SECTIONS/cheat-sheet.md | 2 +- README.md | 6 +++--- step-4/step-4-install.sh | 2 +- step-final/step-final-install.sh | 6 +++--- templates/INSTALL.md | 2 +- templates/statusline.sh | 4 ++-- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/CHEATSHEET.md b/CHEATSHEET.md index 7a4fc6c..35147c8 100644 --- a/CHEATSHEET.md +++ b/CHEATSHEET.md @@ -215,7 +215,7 @@ When these tools are active, you may see indicators in your Claude session: | Indicator | Meaning | |-----------|---------| | ⚡️ fidgetflo | FidgetFlo MCP server is connected | -| 🧠 2ndBrain | Working inside your Obsidian vault | +| 🧠 Brain² | Working inside your Obsidian vault | | 🎨 UIPro | Design skill is loaded (always on after creativity-maxxing) | | 🐝 Swarm | Swarm is active — shows agent count (after `/fswarm`) | | 🍯 Mini | Mini swarm is active — shows agent count (after `/fmini`) | diff --git a/README-SECTIONS/cheat-sheet.md b/README-SECTIONS/cheat-sheet.md index 809e165..b0feb38 100644 --- a/README-SECTIONS/cheat-sheet.md +++ b/README-SECTIONS/cheat-sheet.md @@ -151,7 +151,7 @@ When these tools are active, you may see indicators in your Claude session: | Indicator | Meaning | |-----------|---------| -| 🧠 2ndBrain | Working inside your Obsidian vault | +| 🧠 Brain² | Working inside your Obsidian vault | | ⚡ FidgetFlo | FidgetFlo MCP server is connected | | 🎨 UIPro | Design skill is loaded (always on after creativity-maxxing) | | 🐝 Swarm | Swarm is active — shows agent count (after `/fswarm`) | diff --git a/README.md b/README.md index 827d438..37d0585 100644 --- a/README.md +++ b/README.md @@ -635,7 +635,7 @@ The wrap-up. Installs a custom status line that shows what's active at a glance, | Icon | When it shows | |------|---------------| | ⚡️ fidgetflo | FidgetFlo MCP connected | -| 🧠 2ndBrain | CWD is inside your Obsidian vault (requires [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging)) | +| 🧠 Brain² | CWD is inside your Obsidian vault (requires [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging)) | | 🎨 UIPro | Design skill loaded (via [creativity-maxxing](https://github.com/lorecraft-io/creativity-maxxing)) | | 🐝 Swarm | A swarm is active (`/fswarm`, shows agent count) | | 🍯 Mini | A mini swarm is active (`/fmini`, shows agent count) | @@ -664,7 +664,7 @@ Once the status line is up, run one last cross-check: Claude cross-references CHEATSHEET.md against your actual system, then fixes anything that didn't land — missing skill, unconnected MCP, unregistered alias. Final sanity check.
-Manual install + 🧠 2ndBrain details +Manual install + 🧠 Brain² details **Manual install** (if you'd rather skip the script): 1. Copy `statusline.sh` to `~/.claude/statusline.sh` @@ -674,7 +674,7 @@ Claude cross-references CHEATSHEET.md against your actual system, then fixes any ``` 3. Restart Claude Code. -**🧠 2ndBrain indicator:** lights up when your CWD is inside the Obsidian vault that 2ndBrain-mogging registered. Mogging's installer writes the vault path to `~/.claude/.mogging-vault`; this statusline reads it. No mogging installed → marker doesn't exist → indicator stays hidden (everything else still works). To re-point at a different vault without re-running mogging: `echo "$NEW_VAULT" > ~/.claude/.mogging-vault`. +**🧠 Brain² indicator:** lights up when your CWD is inside the Obsidian vault that 2ndBrain-mogging registered. Mogging's installer writes the vault path to `~/.claude/.mogging-vault`; this statusline reads it. No mogging installed → marker doesn't exist → indicator stays hidden (everything else still works). To re-point at a different vault without re-running mogging: `echo "$NEW_VAULT" > ~/.claude/.mogging-vault`.
diff --git a/step-4/step-4-install.sh b/step-4/step-4-install.sh index 4dbb582..27a9b61 100755 --- a/step-4/step-4-install.sh +++ b/step-4/step-4-install.sh @@ -977,7 +977,7 @@ fi # --- 2ndBRAIN CHECK --- BRAIN="" if echo "$CWD" | grep -qiE "(2ndBrain|MASTER|Second-Brain|Vault)" 2>/dev/null; then - BRAIN="🧠 2ndBrain" + BRAIN="🧠 Brain²" fi # --- fidgetflo CHECK --- diff --git a/step-final/step-final-install.sh b/step-final/step-final-install.sh index 597432d..31debaa 100755 --- a/step-final/step-final-install.sh +++ b/step-final/step-final-install.sh @@ -109,12 +109,12 @@ if [ -f "$MOGGING_VAULT_MARKER" ] && [ -n "$CWD" ]; then VAULT_PATH=$(head -n1 "$MOGGING_VAULT_MARKER" 2>/dev/null | tr -d '\n') if [ -n "$VAULT_PATH" ]; then case "$CWD" in - "$VAULT_PATH"|"$VAULT_PATH"/*) BRAIN="🧠 2ndBrain" ;; + "$VAULT_PATH"|"$VAULT_PATH"/*) BRAIN="🧠 Brain²" ;; esac fi fi if [ -z "$BRAIN" ] && [ -n "$CWD" ] && echo "$CWD" | grep -qiE "OBSIDIAN/(2ndBrain|MASTER)|/BRAIN2?(/|$)" 2>/dev/null; then - BRAIN="🧠 2ndBrain" + BRAIN="🧠 Brain²" fi # --- fidgetflo CHECK --- @@ -492,7 +492,7 @@ echo " Skills (installed by earlier steps):" echo " /gitfix — full-repo consistency audit: docs, scripts, and code all in sync (Step 7)" echo "" echo " Status line indicators:" -echo " 🧠 2ndBrain — in Obsidian vault" +echo " 🧠 Brain² — in Obsidian vault" echo " ⚡️ fidgetflo — MCP server connected" echo " 🎨 UIPro — design skill loaded" echo " 🐝 Swarm — swarm active (during /fswarm)" diff --git a/templates/INSTALL.md b/templates/INSTALL.md index e7fbabf..1f596b3 100644 --- a/templates/INSTALL.md +++ b/templates/INSTALL.md @@ -40,7 +40,7 @@ Close and reopen Claude Code for the status line to take effect. | Indicator | Meaning | |-----------|---------| -| 🧠 2ndBrain | Working directory is inside an Obsidian vault (2ndBrain or MASTER) | +| 🧠 Brain² | Working directory is inside an Obsidian vault (2ndBrain or MASTER) | | ⚡️ fidgetflo | FidgetFlo MCP server is running | | 🎨 UIPro | Always shown (global skill, always available) | | 🐝 Swarm | Active swarm session (with agent count if available) | diff --git a/templates/statusline.sh b/templates/statusline.sh index befc9bf..3593fcf 100755 --- a/templates/statusline.sh +++ b/templates/statusline.sh @@ -35,12 +35,12 @@ if [ -f "$MOGGING_VAULT_MARKER" ] && [ -n "$CWD" ]; then VAULT_PATH=$(head -n1 "$MOGGING_VAULT_MARKER" 2>/dev/null | tr -d '\n') if [ -n "$VAULT_PATH" ]; then case "$CWD" in - "$VAULT_PATH"|"$VAULT_PATH"/*) BRAIN="🧠 2ndBrain" ;; + "$VAULT_PATH"|"$VAULT_PATH"/*) BRAIN="🧠 Brain²" ;; esac fi fi if [ -z "$BRAIN" ] && [ -n "$CWD" ] && echo "$CWD" | grep -qiE "OBSIDIAN/(2ndBrain|MASTER)|/BRAIN2?(/|$)" 2>/dev/null; then - BRAIN="🧠 2ndBrain" + BRAIN="🧠 Brain²" fi # --- fidgetflo CHECK --- From 913a6955722cd86e74d4cb30b0bf1f8e116b9ad6 Mon Sep 17 00:00:00 2001 From: Nate Davidovich Date: Thu, 21 May 2026 23:37:21 -0400 Subject: [PATCH 05/16] Rename lorecraft-io->fidgetcoding URLs (org rename); add ~/BRAIN2 as primary vault candidate + Desktop/TCC warning --- .github/workflows/security.yml | 2 +- .gitmodules | 2 +- CHEATSHEET.md | 18 +++--- README-SECTIONS/cheat-sheet.md | 12 ++-- README.md | 84 +++++++++++++------------- concise-skill/SKILL.md | 2 +- docs/archive/README-UPDATES-2026-04.md | 6 +- install.sh | 18 +++--- step-1/step-1-install.sh | 2 +- step-2/step-2-install.sh | 4 +- step-4/step-4-install.sh | 2 +- step-5/step-5-install.sh | 10 +-- step-7/step-7-install.sh | 4 +- step-8/step-8-install.sh | 2 +- step-final/step-final-install.sh | 8 +-- templates/cbrain | 1 + templates/cbraintg | 1 + tests/install-flow-walkthrough.md | 2 +- uninstall.sh | 2 +- update.sh | 12 ++-- 20 files changed, 98 insertions(+), 96 deletions(-) diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml index bbb5d6f..3c4abf4 100644 --- a/.github/workflows/security.yml +++ b/.github/workflows/security.yml @@ -57,7 +57,7 @@ jobs: - name: Check SKILL_URL in step-8 run: | COMMIT=$(grep 'SKILL_COMMIT=' step-8/step-8-install.sh | head -1 | cut -d'"' -f2) - URL="https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/${COMMIT}/step-8/safetycheck-skill/SKILL.md" + URL="https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/${COMMIT}/step-8/safetycheck-skill/SKILL.md" HTTP_STATUS=$(curl -o /dev/null -s -w "%{http_code}" "$URL") if [ "$HTTP_STATUS" != "200" ]; then echo "::error::Pinned SKILL_URL returned HTTP $HTTP_STATUS — commit SHA may be invalid" diff --git a/.gitmodules b/.gitmodules index f2b76f2..784d07d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "terminal-academy"] path = terminal-academy - url = https://github.com/lorecraft-io/terminal-academy.git + url = https://github.com/fidgetcoding/terminal-academy.git diff --git a/CHEATSHEET.md b/CHEATSHEET.md index 35147c8..198891d 100644 --- a/CHEATSHEET.md +++ b/CHEATSHEET.md @@ -7,7 +7,7 @@ The commands I reach for most. Full reference below. | Command | What it does | |---------|-------------| | `cskip` | Launch Claude with permissions skipped — the daily driver | -| `cbrain` | Launch Claude inside your 2ndBrain vault *(requires vault setup — see [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging))* | +| `cbrain` | Launch Claude inside your 2ndBrain vault *(requires vault setup — see [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging))* | | `g2` | Tile 2 Ghostty windows side by side (macOS) | | `/fswarm ` | Launch a 15-agent FidgetFlo swarm — describe the task in plain English | | `/fmini ` | Compact 5-agent FidgetFlo swarm for focused work | @@ -15,7 +15,7 @@ The commands I reach for most. Full reference below. | `/concise` | Chat default — no fluff, no scaffolding, no headers on simple Qs. Suspends for copy/scripts/decks. | | `/safetycheck` | Security audit — scans for exposed keys, injection vectors, supply-chain risks | | `/gitfix` | Full repo sync — reads every file, fixes doc drift, makes reality match the README | -| `/save` | Capture a conversation into your 2ndBrain vault *(requires [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging))* | +| `/save` | Capture a conversation into your 2ndBrain vault *(requires [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging))* | --- @@ -59,14 +59,14 @@ These aliases are added to your `~/.zshrc` (or `~/.bashrc`) and available in any | `ccr` | Resume last Claude conversation (`claude --resume`) | | `ccc` | Continue last Claude conversation (`claude --continue`) | | `ctg` | Skip-permissions + Telegram channel connected (any directory) | -| `cbrain` | Launch Claude Code in your 2ndBrain vault with skip-permissions *(installed by [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging) — not Step 1)* | +| `cbrain` | Launch Claude Code in your 2ndBrain vault with skip-permissions *(installed by [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging) — not Step 1)* | | `cbraintg` | Same as `cbrain` but with Telegram channel connected *(installed by 2ndBrain-mogging)* | | `g2` | Tile 2 Ghostty windows side by side, filling your screen *(requires Ghostty — Step 2, macOS only)* | | `g4` | Tile 4 Ghostty windows in a 2x2 grid *(requires Ghostty — Step 2, macOS only)* | > **Tip:** After running any setup script, run `source ~/.zshrc` to activate new commands. The scripts do this automatically, but just in case. > -> **Note:** Until you set up Second Brain ([2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging)), use `cskip` instead of `cbrain`. The `cbrain` command requires an Obsidian vault to exist — if you haven't created one yet, it will error. Everything else works right away with `cskip`. +> **Note:** Until you set up Second Brain ([2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging)), use `cskip` instead of `cbrain`. The `cbrain` command requires an Obsidian vault to exist — if you haven't created one yet, it will error. Everything else works right away with `cskip`. ## What is auto-approve mode? @@ -127,7 +127,7 @@ These are custom skills installed by the setup scripts. Type them inside a Claud | `/gitfix` | Step 7 | Full repo sync — reads every install script, skill file, and doc in the repo, finds every inconsistency between the code and the documentation, and fixes all of it. Run this any time you've made changes to a repo and need the README, cheatsheet, and all other docs to reflect reality. Also responds to "fix the github", "sync the repo", or "update the readme" in plain English | | `/safetycheck` | Step 8 | Security audit — scans any project for exposed keys, missing rate limiting, input sanitization gaps, dependency vulnerabilities, and insecure configurations. Also responds to "run a safety check" in plain English. Auto-activates 12 MCP-specific checks on MCP projects | -### 2ndBrain-mogging skills *(requires [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging) installed)* +### 2ndBrain-mogging skills *(requires [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging) installed)* | Command | What it does | |---------|-------------| @@ -170,12 +170,12 @@ These activate on their own when Claude detects a relevant task via natural lang | Vercel | Step 5 | Natural language — deployments, build logs, runtime logs, domains, env vars via Vercel's official remote MCP | "List my recent deployments" · "Show build logs for the last failed deploy" | | Telegram | Step 6 | Automatic when launched with `ctg` or `cbraintg` — reads and replies to Telegram messages | (messages arrive automatically from connected chats) | | GitHub | Step 7 | Natural language — repos, issues, PRs, code search, branches, commits | "List open PRs on cli-maxxing" · "Search my repos for any file that uses MORGEN_API_KEY" | -| Obsidian | 2ndBrain-mogging | Natural language — read/write/search a local Obsidian vault (set up via [lorecraft-io/2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging)) | "Search my vault for notes about machine learning" | +| Obsidian | 2ndBrain-mogging | Natural language — read/write/search a local Obsidian vault (set up via [fidgetcoding/2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging)) | "Search my vault for notes about machine learning" | | Canva | Add-on | Natural language — create or edit designs, social posts, presentations | "Design a social media post for our launch" | > **Key distinction:** Slash commands (`/fswarm`, `/fswarm1`–`/fswarmmax`, `/fmini`, `/fmini1`–`/fminimax`, `/fhive`, `/w4w`, `/concise`, `/safetycheck`, `/gitfix`, plus the 2ndBrain-mogging `/save`, `/wiki`, `/challenge`, `/emerge`, `/backfill`, `/aliases`, `/autoresearch`, `/canvas`, `/tether`, `/connect`) require you to type the command. Everything in this table works by just talking to Claude naturally. > -> **Add-on tools** (Canva) are not part of the step-by-step setup — they're optional MCP servers you can connect separately. Claude auto-detects them when they're installed. Figma, Excalidraw, and Gamma live in [creativity-maxxing](https://github.com/lorecraft-io/creativity-maxxing). +> **Add-on tools** (Canva) are not part of the step-by-step setup — they're optional MCP servers you can connect separately. Claude auto-detects them when they're installed. Figma, Excalidraw, and Gamma live in [creativity-maxxing](https://github.com/fidgetcoding/creativity-maxxing). --- @@ -249,7 +249,7 @@ These are available in your terminal after Step 4 installs the FidgetFlo CLI. | Command | What it does | |---------|-------------| -| `bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/update.sh)` | Re-run all steps, skip what is installed, pick up anything new | +| `bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/update.sh)` | Re-run all steps, skip what is installed, pick up anything new | | `source ~/.zshrc` | Reload shell config to activate new aliases | | `claude update` | Update Claude Code itself to the latest version | | `brew update && brew upgrade` | Update Homebrew and all installed packages (macOS) | @@ -266,7 +266,7 @@ These are available in your terminal after Step 4 installs the FidgetFlo CLI. | Swarm not responding | Run `npx fidgetflo@latest doctor --fix` to diagnose | | MCP tools not connecting | Exit Claude, run `claude mcp list` to check connections, then relaunch | | `cbrain` not working | Run `cskip` instead, then tell Claude: "cbrain isn't working — can you figure out why and fix it?" Claude will find the problem, fix it, and get it working for future sessions. | -| Obsidian vault not found | Vault setup lives in [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging). Once set up, tell Claude the full path to your vault (e.g., `~/Desktop/2ndBrain`) | +| Obsidian vault not found | Vault setup lives in [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging). Once set up, tell Claude the full path to your vault (e.g., `~/BRAIN2`). Avoid `~/Desktop/...` — macOS TCC protection breaks CLI access to the Desktop. | | Shift+Return acts like Enter | Try Option+Enter as an alternative for multi-line input | --- diff --git a/README-SECTIONS/cheat-sheet.md b/README-SECTIONS/cheat-sheet.md index b0feb38..516c7cd 100644 --- a/README-SECTIONS/cheat-sheet.md +++ b/README-SECTIONS/cheat-sheet.md @@ -40,14 +40,14 @@ These aliases are added to your `~/.zshrc` (or `~/.bashrc`) and available in any | `ccr` | Resume last Claude conversation (`claude --resume`) | | `ccc` | Continue last Claude conversation (`claude --continue`) | | `ctg` | Skip-permissions + Telegram channel connected (any directory) | -| `cbrain` | Launch Claude Code in your 2ndBrain vault with skip-permissions *(installed by [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging) — not Step 1)* | +| `cbrain` | Launch Claude Code in your 2ndBrain vault with skip-permissions *(installed by [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging) — not Step 1)* | | `cbraintg` | Same as `cbrain` but with Telegram channel connected *(installed by 2ndBrain-mogging)* | | `g2` | Tile 2 Ghostty windows side by side, filling your screen *(requires Ghostty — Step 2, macOS only)* | | `g4` | Tile 4 Ghostty windows in a 2x2 grid *(requires Ghostty — Step 2, macOS only)* | > **Tip:** After running any setup script, run `source ~/.zshrc` to activate new commands. The scripts do this automatically, but just in case. > -> **Note:** Until you set up Second Brain ([2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging)), use `cskip` instead of `cbrain`. The `cbrain` command requires an Obsidian vault to exist — if you haven't created one yet, it will error. Everything else works right away with `cskip`. +> **Note:** Until you set up Second Brain ([2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging)), use `cskip` instead of `cbrain`. The `cbrain` command requires an Obsidian vault to exist — if you haven't created one yet, it will error. Everything else works right away with `cskip`. ## What is auto-approve mode? @@ -134,14 +134,14 @@ These activate on their own when Claude detects a relevant task via natural lang | Vercel | Step 5 | Natural language — deployments, build logs, runtime logs, domains, env vars via Vercel's official remote MCP | "List my recent deployments" · "Show build logs for the last failed deploy" | | Telegram | Step 6 | Automatic when launched with `ctg` or `cbraintg` — reads and replies to Telegram messages | (messages arrive automatically from connected chats) | | GitHub | Step 7 | Natural language — repos, issues, PRs, code search, branches, commits | "List open PRs on cli-maxxing" · "Search my repos for any file that uses MORGEN_API_KEY" | -| Obsidian | 2ndBrain-mogging | Natural language — read/write/search a local Obsidian vault (set up via [lorecraft-io/2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging)) | "Search my vault for notes about machine learning" | +| Obsidian | 2ndBrain-mogging | Natural language — read/write/search a local Obsidian vault (set up via [fidgetcoding/2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging)) | "Search my vault for notes about machine learning" | | No-Flicker Mode | Step 3 | Automatic — fullscreen rendering, no screen jumping while Claude works | (always on — set via environment variable) | | Memory Hook | Step 3 | Automatic on session end — saves context from the conversation | (no prompt needed — runs automatically) | | Canva | Add-on | Natural language — create or edit designs, social posts, presentations | "Design a social media post for our launch" | > **Key distinction:** Slash commands (`/fswarm`, `/fswarm1`–`/fswarmmax`, `/fmini`, `/fmini1`–`/fminimax`, `/fhive`, `/w4w`, `/safetycheck`, `/gitfix`, plus the 2ndBrain-mogging `/save`, `/wiki`, `/challenge`, `/emerge`, `/backfill`, `/aliases`, `/autoresearch`, `/canvas`, `/tether`, `/connect`) require you to type the command. Everything in this table works by just talking to Claude naturally. > -> **Add-on tools** (Canva) are not part of the step-by-step setup — they're optional MCP servers you can connect separately. Claude auto-detects them when they're installed. Figma, Excalidraw, and Gamma live in [creativity-maxxing](https://github.com/lorecraft-io/creativity-maxxing). +> **Add-on tools** (Canva) are not part of the step-by-step setup — they're optional MCP servers you can connect separately. Claude auto-detects them when they're installed. Figma, Excalidraw, and Gamma live in [creativity-maxxing](https://github.com/fidgetcoding/creativity-maxxing). --- @@ -184,7 +184,7 @@ These are available in your terminal after Step 4 installs the FidgetFlo CLI. | Command | What it does | |---------|-------------| -| `curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/update.sh \| bash` | Re-run all steps, skip what is installed, pick up anything new | +| `curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/update.sh \| bash` | Re-run all steps, skip what is installed, pick up anything new | | `source ~/.zshrc` | Reload shell config to activate new aliases | | `claude update` | Update Claude Code itself to the latest version | | `brew update && brew upgrade` | Update Homebrew and all installed packages (macOS) | @@ -201,7 +201,7 @@ These are available in your terminal after Step 4 installs the FidgetFlo CLI. | Swarm not responding | Run `npx fidgetflo@latest doctor --fix` to diagnose | | MCP tools not connecting | Exit Claude, run `claude mcp list` to check connections, then relaunch | | `cbrain` not working | Run `cskip` instead, then tell Claude: "cbrain isn't working — can you figure out why and fix it?" Claude will find the problem, fix it, and get it working for future sessions. | -| Obsidian vault not found | Vault setup lives in [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging). Once set up, tell Claude the full path to your vault (e.g., `~/Desktop/2ndBrain`) | +| Obsidian vault not found | Vault setup lives in [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging). Once set up, tell Claude the full path to your vault (e.g., `~/BRAIN2`). Avoid `~/Desktop/...` — macOS TCC protection breaks CLI access to the Desktop. | | Shift+Return acts like Enter | Try Option+Enter as an alternative for multi-line input | --- diff --git a/README.md b/README.md index 37d0585..bc42cef 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@
-![cli-maxxing](https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/cli-maxxing.png) +![cli-maxxing](https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/cli-maxxing.png) [![Follow on X](https://img.shields.io/badge/FOLLOW%20%40fidgetcoding-000000?style=for-the-badge&logo=x&logoColor=white)](https://x.com/fidgetcoding) [![LinkedIn](https://img.shields.io/badge/LINKEDIN-CONNECT-0A66C2?style=for-the-badge&logo=linkedin&logoColor=white&labelColor=555555)](https://www.linkedin.com/in/nate-davidovich/) [![YouTube](https://img.shields.io/badge/YOUTUBE-SUBSCRIBE-FF0000?style=for-the-badge&logo=youtube&logoColor=white&labelColor=555555)](https://youtube.com/@fidgetcoding) [![Instagram](https://img.shields.io/badge/INSTAGRAM-FOLLOW-E4405F?style=for-the-badge&logo=instagram&logoColor=white&labelColor=555555)](https://instagram.com/fidgetcoding) @@ -35,8 +35,8 @@ This is one of three repos in the cli-maxxing stack: | Repo | What it does | |------|-------------| | **`cli-maxxing`** | **This repo** — Foundation — Claude Code, shell aliases, FidgetFlo, dev tools, productivity MCPs | -| [`creativity-maxxing`](https://github.com/lorecraft-io/creativity-maxxing) | Design skills + video/audio pipeline | -| [`task-maxxing`](https://github.com/lorecraft-io/task-maxxing) | Two-way task sync — Obsidian ↔ Morgen (Notion dropped 2026-05-04) (requires [`2ndBrain-mogging`](https://github.com/lorecraft-io/2ndBrain-mogging)) | +| [`creativity-maxxing`](https://github.com/fidgetcoding/creativity-maxxing) | Design skills + video/audio pipeline | +| [`task-maxxing`](https://github.com/fidgetcoding/task-maxxing) | Two-way task sync — Obsidian ↔ Morgen (Notion dropped 2026-05-04) (requires [`2ndBrain-mogging`](https://github.com/fidgetcoding/2ndBrain-mogging)) | Install `cli-maxxing` first. `creativity-maxxing` and `task-maxxing` can be installed in either order after that. @@ -95,7 +95,7 @@ Run the steps in order. Each one builds on the last. **[Step 3 — Developer & Utility Tools](#step-3---developer--utility-tools)** is where you install the rest of your development tools. Things like file converters, search tools, and utilities. You run this from your terminal after Step 1 is done. Much more straightforward. -**[Step 4 — FidgetFlo](#step-4---fidgetflo)** is where you set up [FidgetFlo](https://github.com/lorecraft-io/fidgetflo), the multi-agent orchestration layer that turns Claude into a full team of AI agents — `/fswarm`, `/fmini`, `/fhive`, persistent memory, Opus-locked. +**[Step 4 — FidgetFlo](#step-4---fidgetflo)** is where you set up [FidgetFlo](https://github.com/fidgetcoding/fidgetflo), the multi-agent orchestration layer that turns Claude into a full team of AI agents — `/fswarm`, `/fmini`, `/fhive`, persistent memory, Opus-locked. **[Step 5 — Productivity Tools](#step-5---productivity-tools)** connects Claude to your productivity tools — notes, calendars, email, meetings, workflows, browser automation, deployments, and hosted toolkits. Pick the ones you use: Notion, Granola, your own n8n instance, Google Calendar, Morgen (recommended), Motion Calendar, Playwright, SwiftKit, Superhuman, Google Drive, or Vercel. All optional, install only what you need. @@ -122,7 +122,7 @@ If you already have Claude Code working on your machine, you can skip Step 1 ent ### Bonus > [!TIP] -> Want to get better at using the terminal in general? Check out [Terminal Academy](https://github.com/lorecraft-io/terminal-academy), a gamified way to learn terminal commands and workflows. It makes the learning curve way less painful. +> Want to get better at using the terminal in general? Check out [Terminal Academy](https://github.com/fidgetcoding/terminal-academy), a gamified way to learn terminal commands and workflows. It makes the learning curve way less painful. --- @@ -135,7 +135,7 @@ If you already know your way around a terminal and just want everything installe > [!IMPORTANT] > **Paste this into your terminal:** > ``` -> bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/install.sh) +> bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/install.sh) > ``` This runs Steps 1, 2, 3, 4, 8, and the Final Step automatically, plus both bonuses (Ghostty and Arc Browser). Arc is macOS-only and will be skipped on Linux. Everything is idempotent — already-installed tools are skipped. @@ -155,7 +155,7 @@ Here are the commands you'll use most: | Command | What it does | |---------|-------------| | `cskip` | Start with all permissions skipped (fastest, no prompts) | -| `cbrain` | Jump straight into your 2ndBrain vault with permissions skipped *(requires [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging))* | +| `cbrain` | Jump straight into your 2ndBrain vault with permissions skipped *(requires [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging))* | | `Shift+Tab` | Toggle permissions on/off mid-session without restarting | | `/fswarm *write task here*` | Launch a 15-agent FidgetFlo swarm — just describe what you want in plain English after `/fswarm` | | `/fmini *write task here*` | Launch a compact 5-agent FidgetFlo swarm — same power, tighter team. Describe your task after `/fmini` | @@ -181,7 +181,7 @@ Open Terminal: **Cmd+Space → "Terminal"** on Mac, or **Ctrl+Alt+T** on Linux. > [!IMPORTANT] > **Paste this in and hit Enter:** > ```bash -> bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-1/step-1-install.sh) +> bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-1/step-1-install.sh) > ``` > The script will ask for your Mac password to install system tools. When you see `Password:`, type it and hit Enter — you won't see the characters, that's normal. @@ -199,7 +199,7 @@ Open Terminal: **Cmd+Space → "Terminal"** on Mac, or **Ctrl+Alt+T** on Linux. | Claude Code | Your AI coding assistant. The main tool. | | Shell aliases | `cskip`, `cc`, `ccr`, `ccc` — faster ways to launch Claude. | | ctg | Launches Claude with Telegram connected from any directory. | -| cbrain | Launches Claude pointed at your Obsidian vault. Installed by [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging) — available after you set up the vault. | +| cbrain | Launches Claude pointed at your Obsidian vault. Installed by [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging) — available after you set up the vault. | | cbraintg | `cbrain` + Telegram. Also installed by 2ndBrain-mogging. | ### After the script finishes @@ -240,14 +240,14 @@ Optional but highly recommended. Installs **Ghostty** (GPU-accelerated terminal > [!IMPORTANT] > ```bash -> bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-2/step-2-install.sh) +> bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-2/step-2-install.sh) > ``` Prefer to do one at a time? Run either script individually: ```bash -bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-2/ghostty-install.sh) -bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-2/arc-install.sh) +bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-2/ghostty-install.sh) +bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-2/arc-install.sh) ``` --- @@ -318,7 +318,7 @@ First time? Claude opens a browser to log in with your Anthropic account. Once y > [!IMPORTANT] > **Paste this into your Claude session:** > ``` -> run this command to install my dev tools: bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-3/step-3-install.sh) +> run this command to install my dev tools: bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-3/step-3-install.sh) > ``` Claude runs the install. If it asks you to restart your terminal, close the window, reopen, `cskip` again, and tell Claude to pick up where it left off. @@ -366,7 +366,7 @@ A "stop hook" fires every time you end a Claude session (Ctrl+C or `/exit`). Cla [Back to top](#quick-navigation) -[**FidgetFlo**](https://github.com/lorecraft-io/fidgetflo) 💚 is a fork of [ruvnet's Ruflo](https://github.com/ruvnet/ruflo), tuned for Claude Opus 4.7. It turns Claude Code from a single assistant into a coordinated team of AI agents: multi-agent swarms on demand, persistent memory, self-healing workflows, and all agents Opus-locked by default (no silent downgrade to Haiku/Sonnet). *(💚 = built by fidgetcoding.)* +[**FidgetFlo**](https://github.com/fidgetcoding/fidgetflo) 💚 is a fork of [ruvnet's Ruflo](https://github.com/ruvnet/ruflo), tuned for Claude Opus 4.7. It turns Claude Code from a single assistant into a coordinated team of AI agents: multi-agent swarms on demand, persistent memory, self-healing workflows, and all agents Opus-locked by default (no silent downgrade to Haiku/Sonnet). *(💚 = built by fidgetcoding.)* ### Run Step 4 @@ -375,7 +375,7 @@ Still in a `cskip` session? Good. Paste this: > [!IMPORTANT] > **Paste this into your Claude session:** > ``` -> run this command to set up FidgetFlo: bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-4/step-4-install.sh) +> run this command to set up FidgetFlo: bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-4/step-4-install.sh) > ``` If Claude tells you to restart your terminal, close the window, reopen, `cskip` again, and tell Claude to pick up where it left off. @@ -416,7 +416,7 @@ Natural-language aliases work too: "hard"/"deep" → tier 2, "harder"/"deeper" | TypeScript + agentic-flow | Required deps (embeddings, advanced routing). | | Statusline | Live indicators for swarms, hives, model, session time, and context usage. | -**Want the deep dive?** Architecture, agent catalog (60+ types), memory system, hook pipeline, topology options — all in the [FidgetFlo repo →](https://github.com/lorecraft-io/fidgetflo) +**Want the deep dive?** Architecture, agent catalog (60+ types), memory system, hook pipeline, topology options — all in the [FidgetFlo repo →](https://github.com/fidgetcoding/fidgetflo) ### After Step 4 @@ -460,7 +460,7 @@ Claude picks the right tool automatically based on what you ask. Pick whichever > **Morgen (5) is the recommended default** — it unifies Google, Outlook, iCloud, and native calendars + tasks behind a single API key. Google Calendar (4) and Motion (6) are secondary — install only if you need those accounts directly. > -> **Obsidian MCP** lives in [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging), not here. Install mogging after this repo completes — it handles vault setup AND registers the Obsidian MCP with Claude Code. +> **Obsidian MCP** lives in [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging), not here. Install mogging after this repo completes — it handles vault setup AND registers the Obsidian MCP with Claude Code. ### Run Step 5 @@ -468,7 +468,7 @@ In a `cskip` session, paste this: > [!IMPORTANT] > ``` -> run this command to install productivity tools: bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-5/step-5-install.sh) +> run this command to install productivity tools: bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-5/step-5-install.sh) > ``` The script asks which tools you want, then walks you through each one's credentials. Skip anything you don't use — re-run the script later to add more. @@ -481,8 +481,8 @@ The script asks which tools you want, then walks you through each one's credenti | 2 | **Granola** | Search your Granola meeting transcripts + notes through conversation. | [Granola](https://granola.ai) installed + signed in on Mac. No key. | | 3 | **n8n** | HTTP bridge to **your own** n8n instance — trigger and inspect workflows you built. Not a hosted service. | An n8n workflow with an **MCP Server Trigger** node; copy its Production URL. Optional Bearer token. | | 4 | **Google Calendar** | Direct Google Calendar access via OAuth. *Secondary — only install if you need a specific Google account bypassing Morgen.* | Google account + ~5min to create OAuth creds (script walks you through). | -| 5 | **[Morgen](https://github.com/lorecraft-io/morgen-mcp)** ⭐ 💚 | Unified calendar + tasks across Google/Outlook/iCloud/native. Natural-language dates/recurrence, auto-schedule, day reflow. One key for everything. | API key from [platform.morgen.so/developers-api](https://platform.morgen.so/developers-api). | -| 6 | **[Motion Calendar](https://github.com/lorecraft-io/motion-mcp)** 💚 | Teammate visibility + full event search that Morgen's API doesn't expose. *Motion-specific features only.* | Motion API key + Firebase key + refresh token + user ID (script walks you through). | +| 5 | **[Morgen](https://github.com/fidgetcoding/morgen-mcp)** ⭐ 💚 | Unified calendar + tasks across Google/Outlook/iCloud/native. Natural-language dates/recurrence, auto-schedule, day reflow. One key for everything. | API key from [platform.morgen.so/developers-api](https://platform.morgen.so/developers-api). | +| 6 | **[Motion Calendar](https://github.com/fidgetcoding/motion-mcp)** 💚 | Teammate visibility + full event search that Morgen's API doesn't expose. *Motion-specific features only.* | Motion API key + Firebase key + refresh token + user ID (script walks you through). | | 7 | **Playwright** ([Microsoft](https://github.com/microsoft/playwright-mcp)) | Lets Claude log into and operate web apps with no API. Runs its own Chromium (not your real browser), reads via accessibility-tree snapshots — fast + reliable. | Node 18+ (from Step 1) + ~hundreds of MB disk for Chromium. No credentials. | | 8 | **SwiftKit** ([swiftkit.sh](https://swiftkit.sh)) | Hosted MCP toolkit for **iOS / macOS / Swift development** — 100+ tools for writing, building, and shipping Apple-platform code behind one HTTP endpoint. Default for anything iPhone/iOS/Swift-related. Nothing to install locally. | Account + API key (`sk_live_` or `sk_test_`). | | 9 | **Superhuman** ([superhuman.com](https://superhuman.com)) | Email triage + drafting from Claude via Superhuman's official remote MCP. | Active Superhuman subscription. One-time browser OAuth on first use. | @@ -495,7 +495,7 @@ The script asks which tools you want, then walks you through each one's credenti ### After Step 5 -Your productivity stack is wired up. Ask about your schedule, add a task, query Notion, trigger a workflow — all from your terminal. Skipped something? Re-run Step 5 later. For Obsidian vault access, install [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging). +Your productivity stack is wired up. Ask about your schedule, add a task, query Notion, trigger a workflow — all from your terminal. Skipped something? Re-run Step 5 later. For Obsidian vault access, install [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging). --- @@ -508,7 +508,7 @@ This step connects Claude to Telegram so you can message it from your phone. You Two launcher commands pair with this step: - **`ctg`** — launches Claude with Telegram connected from any directory. Installed in Step 1. Use this when you want to drive a regular Claude session from your phone. -- **`cbraintg`** — same as `ctg`, but also opens your 2ndBrain vault on launch. Installed by [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging). Use this when you want Claude to have vault context while answering Telegram messages. +- **`cbraintg`** — same as `ctg`, but also opens your 2ndBrain vault on launch. Installed by [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging). Use this when you want Claude to have vault context while answering Telegram messages. ### What It Sets Up @@ -518,7 +518,7 @@ Two launcher commands pair with this step: | Bot Token | Stored locally at `~/.claude/channels/telegram/.env` | | Access Policy | Controls who can message your bot (default: ask before accepting) | | `ctg` command | Launch Claude with Telegram from any directory (installed in Step 1) | -| `cbraintg` command | Launch Claude with Telegram inside your 2ndBrain vault (installed by [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging)) | +| `cbraintg` command | Launch Claude with Telegram inside your 2ndBrain vault (installed by [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging)) | ### Run Step 6 @@ -528,7 +528,7 @@ Two launcher commands pair with this step: > [!IMPORTANT] > **Paste this into your Claude session:** > ``` -> run this command to set up Telegram: bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-6/step-6-install.sh) +> run this command to set up Telegram: bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-6/step-6-install.sh) > ``` ### After Step 6 @@ -561,7 +561,7 @@ Copy the `ghp_...` value. `/gitfix` needs no token — it runs locally. ### Run Step 7 ``` -bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-7/step-7-install.sh) +bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-7/step-7-install.sh) ``` Script prompts for your PAT, registers the GitHub MCP (token stored in `~/.claude.json` alongside every other MCP credential), and drops `/gitfix` into `~/.claude/skills/gitfix/`. @@ -594,7 +594,7 @@ In a `cskip` session, paste: > [!IMPORTANT] > ``` -> run this command to install the safety check skill: bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-8/step-8-install.sh) +> run this command to install the safety check skill: bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-8/step-8-install.sh) > ```
@@ -635,8 +635,8 @@ The wrap-up. Installs a custom status line that shows what's active at a glance, | Icon | When it shows | |------|---------------| | ⚡️ fidgetflo | FidgetFlo MCP connected | -| 🧠 Brain² | CWD is inside your Obsidian vault (requires [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging)) | -| 🎨 UIPro | Design skill loaded (via [creativity-maxxing](https://github.com/lorecraft-io/creativity-maxxing)) | +| 🧠 Brain² | CWD is inside your Obsidian vault (requires [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging)) | +| 🎨 UIPro | Design skill loaded (via [creativity-maxxing](https://github.com/fidgetcoding/creativity-maxxing)) | | 🐝 Swarm | A swarm is active (`/fswarm`, shows agent count) | | 🍯 Mini | A mini swarm is active (`/fmini`, shows agent count) | | 👑 Hive | A hive-mind is active (`/fhive`) | @@ -648,7 +648,7 @@ The status line also shows your current model, session duration, and context win > [!IMPORTANT] > **Paste this into your Claude session:** > ``` -> run this command to set up your status line: bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-final/step-final-install.sh) +> run this command to set up your status line: bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-final/step-final-install.sh) > ``` ### Verify Everything Works @@ -713,7 +713,7 @@ Step 1 installs Homebrew mid-pipeline, but downstream steps in the same shell do **Fix:** close the terminal, open a fresh one, re-run the installer: ```bash -bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/install.sh) +bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/install.sh) ``` It's idempotent — anything already installed gets skipped. @@ -743,7 +743,7 @@ macOS default Python (3.9) ships with PEP 668 restrictions that block `pip insta **Fix:** re-run Step 3: ```bash -bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-3/step-3-install.sh) +bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-3/step-3-install.sh) ``` **Still failing?** Install manually: @@ -771,7 +771,7 @@ Launching `ctg` or `cbraintg` gives a never-ending stream of `telegram channel: 2. Use `cskip` instead of `ctg` to keep working — no Telegram needed. 3. Re-run Step 6 to re-enter the token: ```bash - bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-6/step-6-install.sh) + bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-6/step-6-install.sh) ``` **If that doesn't fix it**, open `cskip` and ask Claude: @@ -787,23 +787,23 @@ Step 5 needs interactive input for API credentials. When piped through `curl | b **Fix:** run Step 5 directly in your terminal: ```bash -bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-5/step-5-install.sh) +bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-5/step-5-install.sh) ``` ### Obsidian MCP returns internal errors -See the [2ndBrain-mogging troubleshooting guide](https://github.com/lorecraft-io/2ndBrain-mogging#troubleshooting). The Obsidian MCP is installed and configured by 2ndBrain-mogging. +See the [2ndBrain-mogging troubleshooting guide](https://github.com/fidgetcoding/2ndBrain-mogging#troubleshooting). The Obsidian MCP is installed and configured by 2ndBrain-mogging. ### `cbrain` says it can't find my vault -See [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging) — vault setup is handled there. If your vault exists but isn't found, set `VAULT_PATH=/path/to/your/vault cbrain`. +See [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging) — vault setup is handled there. If your vault exists but isn't found, set `VAULT_PATH=/path/to/your/vault cbrain`. ### A step failed or something is missing Run the update command — it re-runs every step, skips what's already installed, fills in any gaps: ```bash -bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/update.sh) +bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/update.sh) ``` **Or:** open a `cskip` session and describe the problem to Claude. It can diagnose and fix most issues on the spot. @@ -846,7 +846,7 @@ Everything is installed, configured, and wired together. From now on, this is th That's it. `cbrain` opens Claude Code directly inside your 2ndBrain vault with all permissions skipped. Your vault is your home base — every tool, skill, and MCP server you just installed is available the moment you type it. -> **Haven't run 2ndBrain-mogging yet?** Use `cskip` instead of `cbrain` until your Second Brain vault is set up. `cbrain` requires the Obsidian vault to exist — it will error if you haven't created one. Once [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging) is complete, switch to `cbrain` as your daily driver. +> **Haven't run 2ndBrain-mogging yet?** Use `cskip` instead of `cbrain` until your Second Brain vault is set up. `cbrain` requires the Obsidian vault to exist — it will error if you haven't created one. Once [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging) is complete, switch to `cbrain` as your daily driver. **What `cbrain` gives you:** - Drops you into your Obsidian vault automatically — no `cd`-ing around @@ -896,7 +896,7 @@ Open your terminal and run `cskip` to start a Claude session, then paste the upd > [!IMPORTANT] > **Paste this into your terminal:** > ``` -> bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/update.sh) +> bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/update.sh) > ``` --- @@ -910,10 +910,10 @@ One script reverses the whole stack. Your Obsidian vault, notes, and Claude acco > [!IMPORTANT] > **Paste this into your terminal:** > ```bash -> bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/uninstall.sh) +> bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/uninstall.sh) > ``` -Removes the cli-maxxing aliases (`cskip`, `cc`, `ccr`, `ccc`), the `ctg` script, all MCPs this setup installed, all FidgetFlo skills + `/w4w` + `/concise` + `/safetycheck` + `/gitfix`, dev tools, Arc Browser, and the Ghostty config. `cbrain` and `cbraintg` are managed by [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging) and are not touched here. The YouTube / Instagram transcription stack (yt-dlp, whisper-mcp, ffmpeg, Whisper models) lives in [creativity-maxxing](https://github.com/lorecraft-io/creativity-maxxing) — run its uninstaller separately if you installed it. +Removes the cli-maxxing aliases (`cskip`, `cc`, `ccr`, `ccc`), the `ctg` script, all MCPs this setup installed, all FidgetFlo skills + `/w4w` + `/concise` + `/safetycheck` + `/gitfix`, dev tools, Arc Browser, and the Ghostty config. `cbrain` and `cbraintg` are managed by [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging) and are not touched here. The YouTube / Instagram transcription stack (yt-dlp, whisper-mcp, ffmpeg, Whisper models) lives in [creativity-maxxing](https://github.com/fidgetcoding/creativity-maxxing) — run its uninstaller separately if you installed it. **Keeps:** Homebrew, Git, Node.js, Claude Code itself, your Obsidian vault + notes, your Claude account — general-purpose tools + your data. The script prints manual-removal commands at the end if you want a fully clean machine. @@ -921,7 +921,7 @@ Removes the cli-maxxing aliases (`cskip`, `cc`, `ccr`, `ccc`), the `ctg` script, Full list of what gets removed - Claude Code shell aliases (`cskip`, `cc`, `ccr`, `ccc`) and the `ctg` script (`~/.local/bin/ctg`). `cbrain` and `cbraintg` are managed by 2ndBrain-mogging — not removed here. -- All MCPs installed by this repo: FidgetFlo, Notion, Granola, n8n, Google Calendar, Morgen, Motion Calendar, Playwright, SwiftKit, Superhuman, Google Drive, GitHub — design + media MCPs are managed by [creativity-maxxing](https://github.com/lorecraft-io/creativity-maxxing); Obsidian is managed by [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging) +- All MCPs installed by this repo: FidgetFlo, Notion, Granola, n8n, Google Calendar, Morgen, Motion Calendar, Playwright, SwiftKit, Superhuman, Google Drive, GitHub — design + media MCPs are managed by [creativity-maxxing](https://github.com/fidgetcoding/creativity-maxxing); Obsidian is managed by [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging) - All skills: `fswarm*`, `fmini*`, `fhive`, `w4w`, `concise`, `gitfix`, `safetycheck` — UI/UX Pro Max + Taste Skill pack + Remotion are managed by creativity-maxxing - Dev tools: pandoc, jq, ripgrep, tree, fzf, wget, weasyprint, ffmpeg, xlsx2csv, poppler - GitHub CLI (`gh` — installed by Step 7 alongside the GitHub MCP + /gitfix skill) @@ -949,7 +949,7 @@ MIT — see [LICENSE](LICENSE). --- -Built by [Nate Davidovich / Lorecraft](https://github.com/lorecraft-io) +Built by [Nate Davidovich / Lorecraft](https://github.com/fidgetcoding) [⤴ back to top](#top) diff --git a/concise-skill/SKILL.md b/concise-skill/SKILL.md index 3c959c8..0bd5321 100644 --- a/concise-skill/SKILL.md +++ b/concise-skill/SKILL.md @@ -84,7 +84,7 @@ Use judgment per reply — don't junk-drawer every structure. Any task creation → invoke `/maketasks`. Never write `05-Tasks/**` directly for new tasks (W1 parser needs `m-[0-9a-f]{8}`). Never mint UUIDs. Never `mcp__morgen__create_task` directly. Edits to existing tasks (with `🆔 m-XXXXXXXX`) preserve UUID byte-for-byte. # Nate overrides -"Nate" never "Nathan" in human-facing output (paths exempt). Absolute paths only. Timestamps EST: `2026-05-11 12:30 PM ET` full / `12:30 PM ET` in-session. Numbers with commas, `5%`, ISO dates, `KB/MB/GB/TB`. Never `Co-Authored-By: claude-flow ` (or any ruv* coauthor). Push direct to main on lorecraft-io repos. "Step 1/Step 2" never "Week 1/Week 2". `look-don't-guess`. `ship-then-verify`. Never suggest `--permission-mode auto`. +"Nate" never "Nathan" in human-facing output (paths exempt). Absolute paths only. Timestamps EST: `2026-05-11 12:30 PM ET` full / `12:30 PM ET` in-session. Numbers with commas, `5%`, ISO dates, `KB/MB/GB/TB`. Never `Co-Authored-By: claude-flow ` (or any ruv* coauthor). Push direct to main on fidgetcoding repos. "Step 1/Step 2" never "Week 1/Week 2". `look-don't-guess`. `ship-then-verify`. Never suggest `--permission-mode auto`. # References - `references/copywriting.md` — full copywriting trigger list, in-copy behavior, edge routing diff --git a/docs/archive/README-UPDATES-2026-04.md b/docs/archive/README-UPDATES-2026-04.md index 872bce4..ea759e2 100644 --- a/docs/archive/README-UPDATES-2026-04.md +++ b/docs/archive/README-UPDATES-2026-04.md @@ -2,7 +2,7 @@ > **Status: COMPLETED — historical planning doc.** All recommendations below have been merged into README.md. Kept for reference. > -> **Step numbers in this file are historical (pre-mogging layout).** The body still reads "Step 6 = Productivity Tools, Step 7 = vault / Obsidian, Step 8 = Telegram". The current canon is: **Step 1** CLI Tools · **Step 2** Bonus Software (Ghostty + Arc) · **Step 3** Developer & Utility Tools · **Step 4** FidgetFlo · **Step 5** Productivity Tools (10 MCPs) · **Step 6** Telegram · **Step 7** GitHub + `/gitfix` · **Step 8** Safety Check · **Final** Status Line. Obsidian MCP has moved out of this repo entirely into [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging). +> **Step numbers in this file are historical (pre-mogging layout).** The body still reads "Step 6 = Productivity Tools, Step 7 = vault / Obsidian, Step 8 = Telegram". The current canon is: **Step 1** CLI Tools · **Step 2** Bonus Software (Ghostty + Arc) · **Step 3** Developer & Utility Tools · **Step 4** FidgetFlo · **Step 5** Productivity Tools (10 MCPs) · **Step 6** Telegram · **Step 7** GitHub + `/gitfix` · **Step 8** Safety Check · **Final** Status Line. Obsidian MCP has moved out of this repo entirely into [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging). > > The observations about Step 6 and Granola below are also superseded by the 2026-04-14 Step 6 overhaul and subsequent renumbering: Granola is now installed by **Step 5** (option 2 in the Productivity menu), alongside Notion, n8n, Google Calendar, Morgen, Motion Calendar, Playwright, SwiftKit, Superhuman, and Google Drive. @@ -105,7 +105,7 @@ Step 6 requires interactive input for API credentials. When run via `curl | bash **Fix:** Run Step 6 directly in your terminal: ```bash -bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-6/step-6-install.sh) +bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-6/step-6-install.sh) ``` ### Obsidian MCP returns internal errors @@ -142,7 +142,7 @@ The brain indicator appears when your working directory contains "2ndBrain", "Se Run the update command to re-run everything. It skips what's already installed and fills in any gaps: ```bash -curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/update.sh | bash +curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/update.sh | bash ``` Or open a `cskip` session and describe the problem to Claude. It can diagnose and fix most issues on the spot. diff --git a/install.sh b/install.sh index 45e79cd..4405d72 100644 --- a/install.sh +++ b/install.sh @@ -6,7 +6,7 @@ set -uo pipefail # Runs all non-interactive steps in order. Steps that are already installed # are skipped automatically. Steps that require interactive input (Step 5, # Step 6, and Step 7) are noted at the end — run them separately in your terminal. -# Usage: bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/install.sh) +# Usage: bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/install.sh) # ============================================================================= RED='\033[0;31m' @@ -15,7 +15,7 @@ YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' -BASE_URL="https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main" +BASE_URL="https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main" # ----------------------------------------------------------------------------- # reload_path — re-source brew + nvm into the current shell so chained child @@ -109,7 +109,7 @@ if ! command -v claude &>/dev/null || ! claude --version &>/dev/null; then echo " 3. Old Node.js — 'node -v' should report v18 or higher." echo "" echo " Fix one of the above, then re-run:" - echo -e " ${GREEN}bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/install.sh)${NC}" + echo -e " ${GREEN}bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/install.sh)${NC}" echo "" exit 1 fi @@ -164,7 +164,7 @@ if [ "${#MISSING_CRUMBS[@]}" -gt 0 ]; then echo -e "${YELLOW}⚠️ Some steps did not complete. This usually happens on the first install${NC}" echo -e "${YELLOW} when a new terminal hasn't loaded brew + node yet.${NC}" echo -e "${YELLOW} → Close this terminal, open a new one, and re-run:${NC}" - echo -e "${YELLOW} bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/install.sh)${NC}" + echo -e "${YELLOW} bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/install.sh)${NC}" echo -e "${YELLOW} The script is idempotent and will resume.${NC}" echo "" echo -e "${YELLOW} Missing: ${MISSING_CRUMBS[*]}${NC}" @@ -178,17 +178,17 @@ echo "" echo " Three steps require interactive input — run them separately:" echo "" echo " Step 5 (Productivity Tools — Notion, Morgen, n8n, Playwright, etc.):" -echo " bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-5/step-5-install.sh)" +echo " bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-5/step-5-install.sh)" echo "" echo " Step 6 (Telegram — optional, skip if you don't have a bot token):" -echo " bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-6/step-6-install.sh)" +echo " bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-6/step-6-install.sh)" echo "" echo " Step 7 (GitHub — MCP + /gitfix skill, optional, for devs):" -echo " bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-7/step-7-install.sh)" +echo " bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-7/step-7-install.sh)" echo "" echo " Companion repos (install after this):" -echo " Design + media: bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/creativity-maxxing/main/install.sh)" -echo " Second Brain: bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/2ndBrain-mogging/main/install.sh)" +echo " Design + media: bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/creativity-maxxing/main/install.sh)" +echo " Second Brain: bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/2ndBrain-mogging/main/install.sh)" echo "" echo " Open a new terminal window for aliases to take effect." echo "" diff --git a/step-1/step-1-install.sh b/step-1/step-1-install.sh index 71a08fd..f1ace2f 100755 --- a/step-1/step-1-install.sh +++ b/step-1/step-1-install.sh @@ -414,7 +414,7 @@ if [ ! -f "$TOKEN_FILE" ] || ! grep -qE 'TELEGRAM_BOT_TOKEN=.+' "$TOKEN_FILE" 2> echo "Telegram bot token not configured." echo "Run Step 6 to set it up:" echo "" - echo " bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-6/step-6-install.sh)" + echo " bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-6/step-6-install.sh)" echo "" echo "Or use 'cskip' to launch Claude without Telegram." echo "" diff --git a/step-2/step-2-install.sh b/step-2/step-2-install.sh index 1dfb510..105dc1f 100755 --- a/step-2/step-2-install.sh +++ b/step-2/step-2-install.sh @@ -14,7 +14,7 @@ YELLOW='\033[1;33m' GREEN='\033[0;32m' NC='\033[0m' -BASE_URL="https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-2" +BASE_URL="https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-2" echo "" echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" @@ -43,5 +43,5 @@ echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━ echo "" echo " Run Step 3 to install developer tools (Python, jq, ripgrep, tree, fzf, etc.):" echo "" -echo -e " ${GREEN}bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-3/step-3-install.sh)${NC}" +echo -e " ${GREEN}bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-3/step-3-install.sh)${NC}" echo "" diff --git a/step-4/step-4-install.sh b/step-4/step-4-install.sh index 27a9b61..f2180bd 100755 --- a/step-4/step-4-install.sh +++ b/step-4/step-4-install.sh @@ -908,7 +908,7 @@ W4W_EOF # chat shape: no fluff, no scaffolding, no headers on simple questions. CONCISE_DIR="$HOME/.claude/skills/concise" CONCISE_REF_DIR="$CONCISE_DIR/references" - CONCISE_BASE_URL="https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/concise-skill" + CONCISE_BASE_URL="https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/concise-skill" mkdir -p "$CONCISE_REF_DIR" SCRIPT_DIR_CONCISE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" diff --git a/step-5/step-5-install.sh b/step-5/step-5-install.sh index 2d008ac..916da98 100755 --- a/step-5/step-5-install.sh +++ b/step-5/step-5-install.sh @@ -167,7 +167,7 @@ choose_tools() { echo -e "${YELLOW} Step 5 requires interactive input for API credentials.${NC}" echo -e "${YELLOW} Run it directly in your terminal:${NC}" echo "" - echo " bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-5/step-5-install.sh)" + echo " bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-5/step-5-install.sh)" echo "" print_summary exit 0 @@ -464,8 +464,8 @@ install_morgen() { echo " 2. Sign in with your Morgen account" echo " 3. Generate an API key and copy it" echo "" - echo -e "${BLUE} Package: fidgetcoding-morgen-mcp (published by lorecraft-io)${NC}" - echo -e "${BLUE} Source: https://github.com/lorecraft-io/morgen-mcp${NC}" + echo -e "${BLUE} Package: fidgetcoding-morgen-mcp (published by fidgetcoding)${NC}" + echo -e "${BLUE} Source: https://github.com/fidgetcoding/morgen-mcp${NC}" echo "" read -rsp " Morgen API key: " MORGEN_API_KEY @@ -519,8 +519,8 @@ install_motion_calendar() { echo -e "${YELLOW} Motion-specific features (teammate events, full-text${NC}" echo -e "${YELLOW} search across events, custom calendar management).${NC}" echo "" - echo -e "${BLUE} Package: fidgetcoding-motion-mcp (published by lorecraft-io)${NC}" - echo -e "${BLUE} Source: https://github.com/lorecraft-io/motion-mcp${NC}" + echo -e "${BLUE} Package: fidgetcoding-motion-mcp (published by fidgetcoding)${NC}" + echo -e "${BLUE} Source: https://github.com/fidgetcoding/motion-mcp${NC}" echo "" echo -e "${BLUE} Motion Calendar requires a few API credentials from your${NC}" echo -e "${BLUE} Motion account settings.${NC}" diff --git a/step-7/step-7-install.sh b/step-7/step-7-install.sh index 0140630..df8131a 100755 --- a/step-7/step-7-install.sh +++ b/step-7/step-7-install.sh @@ -165,7 +165,7 @@ choose_tools() { echo -e "${YELLOW} Step 7 requires interactive input to set up the GitHub MCP.${NC}" echo -e "${YELLOW} Run it directly in your terminal to finish:${NC}" echo "" - echo " bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-7/step-7-install.sh)" + echo " bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-7/step-7-install.sh)" echo "" info "Continuing with non-interactive /gitfix install..." install_gitfix @@ -264,7 +264,7 @@ install_github() { install_gitfix() { GITFIX_DIR="$HOME/.claude/skills/gitfix" GITFIX_FILE="$GITFIX_DIR/SKILL.md" - GITFIX_URL="https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/gitfix-skill/SKILL.md" + GITFIX_URL="https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/gitfix-skill/SKILL.md" mkdir -p "$GITFIX_DIR" diff --git a/step-8/step-8-install.sh b/step-8/step-8-install.sh index 9d8915d..b7b55de 100755 --- a/step-8/step-8-install.sh +++ b/step-8/step-8-install.sh @@ -134,7 +134,7 @@ install_skill() { # Pinned to a specific commit SHA — prevents rug-pull via mutable branch ref # To update: change the SHA to the new commit and update SKILL_SHA256 to match SKILL_COMMIT="81da201b8e624cf7f5c5794ab288f302470651b8" - SKILL_URL="https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/${SKILL_COMMIT}/step-8/safetycheck-skill/SKILL.md" + SKILL_URL="https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/${SKILL_COMMIT}/step-8/safetycheck-skill/SKILL.md" SKILL_SHA256="ea1a1b34a12618a38f1c187661aba48fff403765b81afaf1ec55834522f600e8" info "Creating skill directory..." diff --git a/step-final/step-final-install.sh b/step-final/step-final-install.sh index 31debaa..fcf4523 100755 --- a/step-final/step-final-install.sh +++ b/step-final/step-final-install.sh @@ -330,9 +330,9 @@ if [ -x "$HOME/.local/bin/cbrain" ]; then success "HEALTH: cbrain command — installed" HC_PASS=$((HC_PASS + 1)) else - info "HEALTH: cbrain not installed — optional add-on (install 2ndBrain-mogging for vault-aware Claude aliases: https://github.com/lorecraft-io/2ndBrain-mogging)" + info "HEALTH: cbrain not installed — optional add-on (install 2ndBrain-mogging for vault-aware Claude aliases: https://github.com/fidgetcoding/2ndBrain-mogging)" OPTIONAL_FAIL=$((OPTIONAL_FAIL + 1)) - OPTIONAL_MSGS+=("cbrain — install 2ndBrain-mogging (https://github.com/lorecraft-io/2ndBrain-mogging) for vault-aware Claude aliases") + OPTIONAL_MSGS+=("cbrain — install 2ndBrain-mogging (https://github.com/fidgetcoding/2ndBrain-mogging) for vault-aware Claude aliases") fi # --- cbraintg script (optional — installed by 2ndBrain-mogging) --- @@ -340,9 +340,9 @@ if [ -x "$HOME/.local/bin/cbraintg" ]; then success "HEALTH: cbraintg command — installed" HC_PASS=$((HC_PASS + 1)) else - info "HEALTH: cbraintg not installed — optional add-on (install 2ndBrain-mogging for vault-aware Claude aliases: https://github.com/lorecraft-io/2ndBrain-mogging)" + info "HEALTH: cbraintg not installed — optional add-on (install 2ndBrain-mogging for vault-aware Claude aliases: https://github.com/fidgetcoding/2ndBrain-mogging)" OPTIONAL_FAIL=$((OPTIONAL_FAIL + 1)) - OPTIONAL_MSGS+=("cbraintg — install 2ndBrain-mogging (https://github.com/lorecraft-io/2ndBrain-mogging) for vault-aware Claude aliases") + OPTIONAL_MSGS+=("cbraintg — install 2ndBrain-mogging (https://github.com/fidgetcoding/2ndBrain-mogging) for vault-aware Claude aliases") fi # --- ctg script (token-guarded — not an alias) --- diff --git a/templates/cbrain b/templates/cbrain index c16e605..da09cc5 100755 --- a/templates/cbrain +++ b/templates/cbrain @@ -1,6 +1,7 @@ #!/usr/bin/env bash # cbrain — Launch Claude Code in 2ndBrain Obsidian vault with full permissions for candidate in \ + "$HOME/BRAIN2" \ "$HOME/Desktop/BRAIN2" \ "$HOME/Desktop/WORK/OBSIDIAN/2ndBrain" \ "$HOME/Desktop/2ndBrain" \ diff --git a/templates/cbraintg b/templates/cbraintg index 972694a..443c5d7 100755 --- a/templates/cbraintg +++ b/templates/cbraintg @@ -1,6 +1,7 @@ #!/usr/bin/env bash # cbraintg — Launch Claude Code in 2ndBrain vault with full permissions + Telegram for candidate in \ + "$HOME/BRAIN2" \ "$HOME/Desktop/BRAIN2" \ "$HOME/Desktop/WORK/OBSIDIAN/2ndBrain" \ "$HOME/Desktop/2ndBrain" \ diff --git a/tests/install-flow-walkthrough.md b/tests/install-flow-walkthrough.md index 7e970bb..0ded659 100644 --- a/tests/install-flow-walkthrough.md +++ b/tests/install-flow-walkthrough.md @@ -77,7 +77,7 @@ The `OBSIDIAN/` prefix requirement has been removed. The script first reads the **File:** `step-5/step-5-install.sh` -Installs 11 optional productivity MCPs. Obsidian MCP has moved to [2ndBrain-mogging](https://github.com/lorecraft-io/2ndBrain-mogging), NOT here. +Installs 11 optional productivity MCPs. Obsidian MCP has moved to [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging), NOT here. | Section | Expected Behavior | Result | |---------|-------------------|--------| diff --git a/uninstall.sh b/uninstall.sh index 1063e35..894dcd6 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -663,7 +663,7 @@ print_summary() { echo " Your Obsidian vault and notes were NOT touched." echo " The cbraintg command was NOT removed — it is managed by the" echo " 2ndBrain-mogging companion installer. To remove it, run:" - echo " bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/2ndBrain-mogging/main/uninstall.sh)" + echo " bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/2ndBrain-mogging/main/uninstall.sh)" echo "" echo " To finish cleanup, restart your terminal or re-source your shell:" echo "" diff --git a/update.sh b/update.sh index 627c4d6..ecd34e7 100755 --- a/update.sh +++ b/update.sh @@ -14,7 +14,7 @@ YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' -BASE_URL="https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main" +BASE_URL="https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main" # ----------------------------------------------------------------------------- # source_runtime_path — defense-in-depth PATH hydration before re-running every @@ -131,16 +131,16 @@ main() { echo " Available commands: cskip, ctg, cc, ccr, ccc" echo " Available skills: /fswarm, /fmini, /fhive, /w4w, /concise, /safetycheck, /gitfix" echo " Swarm tiers: /fswarm{1,2,3,max}, /fmini{1,2,3,max} — 1=think, 2=think hard, 3=think harder, max=ultrathink" - echo " Design + media: github.com/lorecraft-io/creativity-maxxing" - echo " Second Brain: github.com/lorecraft-io/2ndBrain-mogging" + echo " Design + media: github.com/fidgetcoding/creativity-maxxing" + echo " Second Brain: github.com/fidgetcoding/2ndBrain-mogging" echo "" echo " Note: Steps 5, 6, and 7 require interactive input (API credentials," echo " Telegram bot token, and GitHub PAT). They may skip themselves if run" echo " non-interactively. Run them directly in your terminal if needed:" echo "" - echo " Step 5: bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-5/step-5-install.sh)" - echo " Step 6: bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-6/step-6-install.sh)" - echo " Step 7: bash <(curl -fsSL https://raw.githubusercontent.com/lorecraft-io/cli-maxxing/main/step-7/step-7-install.sh)" + echo " Step 5: bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-5/step-5-install.sh)" + echo " Step 6: bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-6/step-6-install.sh)" + echo " Step 7: bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-7/step-7-install.sh)" echo "" echo " Open a new terminal window for aliases to take effect." echo "" From 6a7f1e0c5360bbb4a3a10bb84c42db7f1c224606 Mon Sep 17 00:00:00 2001 From: Nate Davidovich Date: Fri, 22 May 2026 01:11:09 -0400 Subject: [PATCH 06/16] =?UTF-8?q?license:=20byline=20=E2=86=92=20Nate=20Da?= =?UTF-8?q?vidovich=20/=20Lorecraft=20LLC=20/=20fidgetcoding?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index c844c36..714d7cd 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2026 Lorecraft LLC +Copyright (c) 2026 Nate Davidovich / Lorecraft LLC / fidgetcoding Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From b4de4d1e7cdbfd6103c1477a9bacbb9135b62a26 Mon Sep 17 00:00:00 2001 From: Nate Davidovich Date: Fri, 22 May 2026 01:30:19 -0400 Subject: [PATCH 07/16] statusline: drop UIPro, add Claude rate-limit usage bars Remove the always-on UIPro indicator from the status line and both install heredocs (step-4, step-final) plus the install summary echo. Add 5h + 7-day usage bars sourced from Claude Code's native rate_limits stdin data (no OAuth token / network call). Solid block bars, 256-color gradient green->yellow->red as each window fills. Sync docs to match: README, CHEATSHEET, README-SECTIONS/cheat-sheet, templates/INSTALL (also fixes the settings.json statusLine key casing). --- CHEATSHEET.md | 3 +- README-SECTIONS/cheat-sheet.md | 3 +- README.md | 5 +-- step-4/step-4-install.sh | 77 ++++++++++++++++++++++++-------- step-final/step-final-install.sh | 54 ++++++++++++++++------ templates/INSTALL.md | 12 ++--- templates/statusline.sh | 53 +++++++++++++++++----- 7 files changed, 152 insertions(+), 55 deletions(-) diff --git a/CHEATSHEET.md b/CHEATSHEET.md index 198891d..fcecfea 100644 --- a/CHEATSHEET.md +++ b/CHEATSHEET.md @@ -216,12 +216,11 @@ When these tools are active, you may see indicators in your Claude session: |-----------|---------| | ⚡️ fidgetflo | FidgetFlo MCP server is connected | | 🧠 Brain² | Working inside your Obsidian vault | -| 🎨 UIPro | Design skill is loaded (always on after creativity-maxxing) | | 🐝 Swarm | Swarm is active — shows agent count (after `/fswarm`) | | 🍯 Mini | Mini swarm is active — shows agent count (after `/fmini`) | | 👑 Hive | Hive-mind is active (after `/fhive`) | -The status line also shows your current model, session duration, and context window usage. +The status line also shows your current model, session duration, context-window usage, and Claude rate-limit bars for the **5h** and **7-day** windows (color-graded green → yellow → red as you approach each limit). Usage comes straight from Claude Code's own `rate_limits` data — no API token or network call. --- diff --git a/README-SECTIONS/cheat-sheet.md b/README-SECTIONS/cheat-sheet.md index 516c7cd..119284b 100644 --- a/README-SECTIONS/cheat-sheet.md +++ b/README-SECTIONS/cheat-sheet.md @@ -153,11 +153,12 @@ When these tools are active, you may see indicators in your Claude session: |-----------|---------| | 🧠 Brain² | Working inside your Obsidian vault | | ⚡ FidgetFlo | FidgetFlo MCP server is connected | -| 🎨 UIPro | Design skill is loaded (always on after creativity-maxxing) | | 🐝 Swarm | Swarm is active — shows agent count (after `/fswarm`) | | 🍯 Mini | Mini swarm is active — shows agent count (after `/fmini`) | | 👑 Hive | Hive-mind is active (after `/fhive`) | +The status line also shows your current model, session duration, context-window usage, and Claude rate-limit bars for the **5h** and **7-day** windows (color-graded green → yellow → red as you approach each limit). + --- ## When Claude Asks for Permission diff --git a/README.md b/README.md index bc42cef..cd9fa2c 100644 --- a/README.md +++ b/README.md @@ -414,7 +414,7 @@ Natural-language aliases work too: "hard"/"deep" → tier 2, "harder"/"deeper" | Opus Lock | All tasks and spawned agents run on Opus — no silent downgrade to Haiku/Sonnet. | | Swarm + Hive + `/w4w` + `/concise` skills | The commands above. | | TypeScript + agentic-flow | Required deps (embeddings, advanced routing). | -| Statusline | Live indicators for swarms, hives, model, session time, and context usage. | +| Statusline | Live indicators for swarms, hives, model, session time, context usage, and Claude rate-limit bars (5h + 7-day). | **Want the deep dive?** Architecture, agent catalog (60+ types), memory system, hook pipeline, topology options — all in the [FidgetFlo repo →](https://github.com/fidgetcoding/fidgetflo) @@ -636,12 +636,11 @@ The wrap-up. Installs a custom status line that shows what's active at a glance, |------|---------------| | ⚡️ fidgetflo | FidgetFlo MCP connected | | 🧠 Brain² | CWD is inside your Obsidian vault (requires [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging)) | -| 🎨 UIPro | Design skill loaded (via [creativity-maxxing](https://github.com/fidgetcoding/creativity-maxxing)) | | 🐝 Swarm | A swarm is active (`/fswarm`, shows agent count) | | 🍯 Mini | A mini swarm is active (`/fmini`, shows agent count) | | 👑 Hive | A hive-mind is active (`/fhive`) | -The status line also shows your current model, session duration, and context window usage. +The status line also shows your current model, session duration, context-window usage, and Claude rate-limit bars for the **5h** and **7-day** windows — color-graded green → yellow → red as you approach each limit. Usage is read straight from Claude Code's own `rate_limits` data (no API token or network call). ### Run Final Step diff --git a/step-4/step-4-install.sh b/step-4/step-4-install.sh index f2180bd..326df9a 100755 --- a/step-4/step-4-install.sh +++ b/step-4/step-4-install.sh @@ -949,8 +949,8 @@ W4W_EOF STATUSLINE_DIR="$HOME/.claude" cat > "$STATUSLINE_DIR/statusline.sh" << 'STATUSLINE_EOF' #!/bin/bash -# fidgetflo Status Line — real state only -# Detects: 2ndBrain (Obsidian), fidgetflo (MCP), UIPro, Swarm/Hive activity +# Status Line — real state only +# 2ndBrain (Obsidian) + fidgetflo (MCP) + Swarm/Hive activity input=$(cat) @@ -975,20 +975,30 @@ else fi # --- 2ndBRAIN CHECK --- +# Primary: ~/.claude/.mogging-vault marker (written by 2ndBrain-mogging's +# install.sh). Contents = absolute vault path. Light up 🧠 when $CWD +# matches exactly or sits inside ($CWD starts with path + "/"). +# Fallback: legacy path regex for pre-marker installs / legacy vault names. BRAIN="" -if echo "$CWD" | grep -qiE "(2ndBrain|MASTER|Second-Brain|Vault)" 2>/dev/null; then +MOGGING_VAULT_MARKER="$HOME/.claude/.mogging-vault" +if [ -f "$MOGGING_VAULT_MARKER" ] && [ -n "$CWD" ]; then + VAULT_PATH=$(head -n1 "$MOGGING_VAULT_MARKER" 2>/dev/null | tr -d '\n') + if [ -n "$VAULT_PATH" ]; then + case "$CWD" in + "$VAULT_PATH"|"$VAULT_PATH"/*) BRAIN="🧠 Brain²" ;; + esac + fi +fi +if [ -z "$BRAIN" ] && [ -n "$CWD" ] && echo "$CWD" | grep -qiE "OBSIDIAN/(2ndBrain|MASTER)|/BRAIN2?(/|$)" 2>/dev/null; then BRAIN="🧠 Brain²" fi # --- fidgetflo CHECK --- -fidgetflo="" +fidgetflo="" if pgrep -f "fidgetflo.*mcp" >/dev/null 2>&1 || pgrep -f "fidgetflo/bin/cli" >/dev/null 2>&1 || pgrep -f "fidgetflo" >/dev/null 2>&1; then - fidgetflo="⚡️ fidgetflo" + fidgetflo="⚡️ fidgetflo" fi -# --- UIPRO CHECK (always on — global skill) --- -UIPRO="🎨 UIPro" - # --- SWARM CHECK (only shows when actively running) --- # Lock file is written by /fswarm skill, removed on completion. # Agents run as Claude Code subprocesses (not CLI), so pgrep won't find them. @@ -1041,10 +1051,39 @@ if [ -f "$MINI_LOCK" ] 2>/dev/null; then fi fi +# --- CLAUDE SUBSCRIPTION USAGE (5h / 7d) --- +# Claude Code passes rate-limit utilization directly in the stdin JSON +# (rate_limits.*.used_percentage), so no network call is needed. +USAGE="" + +# 5-cell colored bar + percent for a single utilization value. +usage_seg() { + local label="$1" val="$2" + [ -z "$val" ] || [ "$val" = "null" ] && return + local p=${val%.*}; [ -z "$p" ] && p=0 + local cells=5 + local filled=$(( (p * cells + 50) / 100 )) + [ "$filled" -gt "$cells" ] && filled=$cells + [ "$filled" -lt 0 ] && filled=0 + local empty=$(( cells - filled )) c fill="" emp="" i=0 + if [ "$p" -ge 90 ]; then c=$'\033[38;5;196m' # red + elif [ "$p" -ge 75 ]; then c=$'\033[38;5;208m' # orange + elif [ "$p" -ge 60 ]; then c=$'\033[38;5;226m' # yellow + elif [ "$p" -ge 40 ]; then c=$'\033[38;5;154m' # lime + else c=$'\033[38;5;46m'; fi # green + local dim=$'\033[38;5;240m' reset=$'\033[0m' + while [ $i -lt $filled ]; do fill="${fill}█"; i=$((i+1)); done + i=0; while [ $i -lt $empty ]; do emp="${emp}█"; i=$((i+1)); done + printf '%s %s%s%s%s%s %s%%' "$label" "$c" "$fill" "$dim" "$emp" "$reset" "$p" +} + +U5=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty' 2>/dev/null) +U7=$(echo "$input" | jq -r '.rate_limits.seven_day.used_percentage // empty' 2>/dev/null) +seg=$(usage_seg "5h" "$U5"); [ -n "$seg" ] && USAGE="$seg" +seg=$(usage_seg "7d" "$U7"); [ -n "$seg" ] && { [ -n "$USAGE" ] && USAGE="$USAGE · "; USAGE="$USAGE$seg"; } + # --- BUILD THE LINE --- PARTS="" - -# 2ndBrain + fidgetflo if [ -n "$BRAIN" ] && [ -n "$fidgetflo" ]; then PARTS="${BRAIN} + ${fidgetflo}" elif [ -n "$BRAIN" ]; then @@ -1053,13 +1092,6 @@ elif [ -n "$fidgetflo" ]; then PARTS="${fidgetflo}" fi -# UIPro (always on) -if [ -n "$PARTS" ]; then - PARTS="${PARTS} + ${UIPRO}" -else - PARTS="${UIPRO}" -fi - # Swarm, Hive, or Mini activity ACTIVITY="" if [ -n "$SWARM" ]; then @@ -1074,10 +1106,17 @@ if [ -n "$MINI" ]; then ACTIVITY="${ACTIVITY}${MINI}" fi if [ -n "$ACTIVITY" ]; then - PARTS="${PARTS} [${ACTIVITY}]" + if [ -n "$PARTS" ]; then + PARTS="${PARTS} [${ACTIVITY}]" + else + PARTS="[${ACTIVITY}]" + fi fi -echo "${PARTS} • ${MODEL} • ⏱ ${TIME_FMT} • ${CTX}% ctx" +LINE="${MODEL} • ⏱ ${TIME_FMT} • ${CTX}% ctx" +[ -n "$PARTS" ] && LINE="${PARTS} • ${LINE}" +[ -n "$USAGE" ] && LINE="${LINE} • ${USAGE}" +echo "$LINE" STATUSLINE_EOF chmod +x "$STATUSLINE_DIR/statusline.sh" success "Statusline script installed at $STATUSLINE_DIR/statusline.sh" diff --git a/step-final/step-final-install.sh b/step-final/step-final-install.sh index fcf4523..033b768 100755 --- a/step-final/step-final-install.sh +++ b/step-final/step-final-install.sh @@ -74,7 +74,7 @@ info "Installing status line script..." cat > "$HOME/.claude/statusline.sh" << 'STATUSLINE_EOF' #!/bin/bash # Status Line — real state only -# 2ndBrain (Obsidian) + fidgetflo (MCP) + UIPro + Swarm/Hive activity +# 2ndBrain (Obsidian) + fidgetflo (MCP) + Swarm/Hive activity input=$(cat) @@ -123,9 +123,6 @@ if pgrep -f "fidgetflo.*mcp" >/dev/null 2>&1 || pgrep -f "fidgetflo/bin/cli" >/d fidgetflo="⚡️ fidgetflo" fi -# --- UIPRO CHECK (always on — global skill) --- -UIPRO="🎨 UIPro" - # --- SWARM CHECK (only shows when actively running) --- # Lock file is written by /fswarm skill, removed on completion. # Agents run as Claude Code subprocesses (not CLI), so pgrep won't find them. @@ -178,6 +175,37 @@ if [ -f "$MINI_LOCK" ] 2>/dev/null; then fi fi +# --- CLAUDE SUBSCRIPTION USAGE (5h / 7d) --- +# Claude Code passes rate-limit utilization directly in the stdin JSON +# (rate_limits.*.used_percentage), so no network call is needed. +USAGE="" + +# 5-cell colored bar + percent for a single utilization value. +usage_seg() { + local label="$1" val="$2" + [ -z "$val" ] || [ "$val" = "null" ] && return + local p=${val%.*}; [ -z "$p" ] && p=0 + local cells=5 + local filled=$(( (p * cells + 50) / 100 )) + [ "$filled" -gt "$cells" ] && filled=$cells + [ "$filled" -lt 0 ] && filled=0 + local empty=$(( cells - filled )) c fill="" emp="" i=0 + if [ "$p" -ge 90 ]; then c=$'\033[38;5;196m' # red + elif [ "$p" -ge 75 ]; then c=$'\033[38;5;208m' # orange + elif [ "$p" -ge 60 ]; then c=$'\033[38;5;226m' # yellow + elif [ "$p" -ge 40 ]; then c=$'\033[38;5;154m' # lime + else c=$'\033[38;5;46m'; fi # green + local dim=$'\033[38;5;240m' reset=$'\033[0m' + while [ $i -lt $filled ]; do fill="${fill}█"; i=$((i+1)); done + i=0; while [ $i -lt $empty ]; do emp="${emp}█"; i=$((i+1)); done + printf '%s %s%s%s%s%s %s%%' "$label" "$c" "$fill" "$dim" "$emp" "$reset" "$p" +} + +U5=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty' 2>/dev/null) +U7=$(echo "$input" | jq -r '.rate_limits.seven_day.used_percentage // empty' 2>/dev/null) +seg=$(usage_seg "5h" "$U5"); [ -n "$seg" ] && USAGE="$seg" +seg=$(usage_seg "7d" "$U7"); [ -n "$seg" ] && { [ -n "$USAGE" ] && USAGE="$USAGE · "; USAGE="$USAGE$seg"; } + # --- BUILD THE LINE --- PARTS="" if [ -n "$BRAIN" ] && [ -n "$fidgetflo" ]; then @@ -188,12 +216,6 @@ elif [ -n "$fidgetflo" ]; then PARTS="${fidgetflo}" fi -if [ -n "$PARTS" ]; then - PARTS="${PARTS} + ${UIPRO}" -else - PARTS="${UIPRO}" -fi - # Swarm, Hive, or Mini activity ACTIVITY="" if [ -n "$SWARM" ]; then @@ -208,10 +230,17 @@ if [ -n "$MINI" ]; then ACTIVITY="${ACTIVITY}${MINI}" fi if [ -n "$ACTIVITY" ]; then - PARTS="${PARTS} [${ACTIVITY}]" + if [ -n "$PARTS" ]; then + PARTS="${PARTS} [${ACTIVITY}]" + else + PARTS="[${ACTIVITY}]" + fi fi -echo "${PARTS} • ${MODEL} • ⏱ ${TIME_FMT} • ${CTX}% ctx" +LINE="${MODEL} • ⏱ ${TIME_FMT} • ${CTX}% ctx" +[ -n "$PARTS" ] && LINE="${PARTS} • ${LINE}" +[ -n "$USAGE" ] && LINE="${LINE} • ${USAGE}" +echo "$LINE" STATUSLINE_EOF chmod +x "$HOME/.claude/statusline.sh" @@ -494,7 +523,6 @@ echo "" echo " Status line indicators:" echo " 🧠 Brain² — in Obsidian vault" echo " ⚡️ fidgetflo — MCP server connected" -echo " 🎨 UIPro — design skill loaded" echo " 🐝 Swarm — swarm active (during /fswarm)" echo " 👑 Hive — hive-mind active (during /fhive)" echo " 🍯 Mini — mini swarm active (during /fmini)" diff --git a/templates/INSTALL.md b/templates/INSTALL.md index 1f596b3..180b4fc 100644 --- a/templates/INSTALL.md +++ b/templates/INSTALL.md @@ -2,7 +2,7 @@ ## Overview -The `statusline.sh` script provides a dynamic status line for Claude Code that displays real-time state for 2ndBrain (Obsidian), FidgetFlo (MCP), UIPro, and any active Swarm/Hive sessions. +The `statusline.sh` script provides a dynamic status line for Claude Code that displays real-time state for 2ndBrain (Obsidian), FidgetFlo (MCP), any active Swarm/Hive sessions, and your Claude rate-limit usage bars (5h + 7-day windows). ## Prerequisites @@ -24,13 +24,14 @@ Edit `~/.claude/settings.json` and add (or update) the `statusline` field: ```json { - "statusline": { - "command": "bash ~/.claude/statusline.sh" + "statusLine": { + "type": "command", + "command": "~/.claude/statusline.sh" } } ``` -If the file already has other settings, merge the `statusline` key into the existing JSON object. +If the file already has other settings, merge the `statusLine` key into the existing JSON object. ### 3. Restart Claude Code @@ -42,11 +43,12 @@ Close and reopen Claude Code for the status line to take effect. |-----------|---------| | 🧠 Brain² | Working directory is inside an Obsidian vault (2ndBrain or MASTER) | | ⚡️ fidgetflo | FidgetFlo MCP server is running | -| 🎨 UIPro | Always shown (global skill, always available) | | 🐝 Swarm | Active swarm session (with agent count if available) | | 👑 Hive | Active hive-mind session | | 🍯 Mini | Active mini swarm session | +It also appends your current model, session duration, context-window usage, and Claude rate-limit bars for the **5h** and **7-day** windows — `5h █░░░░ 13% · 7d █░░░░ 24%` — color-graded green → yellow → red as you approach each limit. The percentages come from Claude Code's own `rate_limits` data passed to the script on stdin, so there's no API token or network call. + ## Swarm/Hive Lock Files The script uses lock files to detect active sessions: diff --git a/templates/statusline.sh b/templates/statusline.sh index 3593fcf..3e838e8 100755 --- a/templates/statusline.sh +++ b/templates/statusline.sh @@ -1,6 +1,6 @@ #!/bin/bash # Status Line — real state only -# 2ndBrain (Obsidian) + fidgetflo (MCP) + UIPro + Swarm/Hive activity +# 2ndBrain (Obsidian) + fidgetflo (MCP) + Swarm/Hive activity input=$(cat) @@ -49,9 +49,6 @@ if pgrep -f "fidgetflo.*mcp" >/dev/null 2>&1 || pgrep -f "fidgetflo/bin/cli" >/d fidgetflo="⚡️ fidgetflo" fi -# --- UIPRO CHECK (always on — global skill) --- -UIPRO="🎨 UIPro" - # --- SWARM CHECK (only shows when actively running) --- # Lock file is written by /fswarm skill, removed on completion. # Agents run as Claude Code subprocesses (not CLI), so pgrep won't find them. @@ -104,6 +101,37 @@ if [ -f "$MINI_LOCK" ] 2>/dev/null; then fi fi +# --- CLAUDE SUBSCRIPTION USAGE (5h / 7d) --- +# Claude Code passes rate-limit utilization directly in the stdin JSON +# (rate_limits.*.used_percentage), so no network call is needed. +USAGE="" + +# 5-cell colored bar + percent for a single utilization value. +usage_seg() { + local label="$1" val="$2" + [ -z "$val" ] || [ "$val" = "null" ] && return + local p=${val%.*}; [ -z "$p" ] && p=0 + local cells=5 + local filled=$(( (p * cells + 50) / 100 )) + [ "$filled" -gt "$cells" ] && filled=$cells + [ "$filled" -lt 0 ] && filled=0 + local empty=$(( cells - filled )) c fill="" emp="" i=0 + if [ "$p" -ge 90 ]; then c=$'\033[38;5;196m' # red + elif [ "$p" -ge 75 ]; then c=$'\033[38;5;208m' # orange + elif [ "$p" -ge 60 ]; then c=$'\033[38;5;226m' # yellow + elif [ "$p" -ge 40 ]; then c=$'\033[38;5;154m' # lime + else c=$'\033[38;5;46m'; fi # green + local dim=$'\033[38;5;240m' reset=$'\033[0m' + while [ $i -lt $filled ]; do fill="${fill}█"; i=$((i+1)); done + i=0; while [ $i -lt $empty ]; do emp="${emp}█"; i=$((i+1)); done + printf '%s %s%s%s%s%s %s%%' "$label" "$c" "$fill" "$dim" "$emp" "$reset" "$p" +} + +U5=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty' 2>/dev/null) +U7=$(echo "$input" | jq -r '.rate_limits.seven_day.used_percentage // empty' 2>/dev/null) +seg=$(usage_seg "5h" "$U5"); [ -n "$seg" ] && USAGE="$seg" +seg=$(usage_seg "7d" "$U7"); [ -n "$seg" ] && { [ -n "$USAGE" ] && USAGE="$USAGE · "; USAGE="$USAGE$seg"; } + # --- BUILD THE LINE --- PARTS="" if [ -n "$BRAIN" ] && [ -n "$fidgetflo" ]; then @@ -114,12 +142,6 @@ elif [ -n "$fidgetflo" ]; then PARTS="${fidgetflo}" fi -if [ -n "$PARTS" ]; then - PARTS="${PARTS} + ${UIPRO}" -else - PARTS="${UIPRO}" -fi - # Swarm, Hive, or Mini activity ACTIVITY="" if [ -n "$SWARM" ]; then @@ -134,7 +156,14 @@ if [ -n "$MINI" ]; then ACTIVITY="${ACTIVITY}${MINI}" fi if [ -n "$ACTIVITY" ]; then - PARTS="${PARTS} [${ACTIVITY}]" + if [ -n "$PARTS" ]; then + PARTS="${PARTS} [${ACTIVITY}]" + else + PARTS="[${ACTIVITY}]" + fi fi -echo "${PARTS} • ${MODEL} • ⏱ ${TIME_FMT} • ${CTX}% ctx" +LINE="${MODEL} • ⏱ ${TIME_FMT} • ${CTX}% ctx" +[ -n "$PARTS" ] && LINE="${PARTS} • ${LINE}" +[ -n "$USAGE" ] && LINE="${LINE} • ${USAGE}" +echo "$LINE" From 99d8979bd1f4d63c954b8916d96251d012ee117c Mon Sep 17 00:00:00 2001 From: Nate Davidovich Date: Fri, 22 May 2026 01:38:26 -0400 Subject: [PATCH 08/16] =?UTF-8?q?docs:=20statusline=20path=20=E2=86=92=20t?= =?UTF-8?q?emplates/statusline.sh;=20bump=20terminal-academy=20(byline=20+?= =?UTF-8?q?=20Pages=20URL)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- terminal-academy | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cd9fa2c..9ff25bf 100644 --- a/README.md +++ b/README.md @@ -666,7 +666,7 @@ Claude cross-references CHEATSHEET.md against your actual system, then fixes any Manual install + 🧠 Brain² details **Manual install** (if you'd rather skip the script): -1. Copy `statusline.sh` to `~/.claude/statusline.sh` +1. Copy `templates/statusline.sh` to `~/.claude/statusline.sh` 2. Add to `~/.claude/settings.json`: ```json "statusLine": { "type": "command", "command": "~/.claude/statusline.sh" } diff --git a/terminal-academy b/terminal-academy index 55bb998..3a96373 160000 --- a/terminal-academy +++ b/terminal-academy @@ -1 +1 @@ -Subproject commit 55bb998b09264aa87c593bdd085f52f0a98527a6 +Subproject commit 3a9637348e7a406749c6c94534c83fde47cb3b46 From d0ce7406ad38826afb556d96f58ecffb9e2c474f Mon Sep 17 00:00:00 2001 From: Nate Davidovich Date: Fri, 22 May 2026 01:39:02 -0400 Subject: [PATCH 09/16] fix: bump terminal-academy pointer to pushed SHA (rebased onto origin) --- terminal-academy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/terminal-academy b/terminal-academy index 3a96373..86d24c9 160000 --- a/terminal-academy +++ b/terminal-academy @@ -1 +1 @@ -Subproject commit 3a9637348e7a406749c6c94534c83fde47cb3b46 +Subproject commit 86d24c916c20f176b45e9b2898bd2b463a35d1e0 From 3926c76a0af09ccf013e7701ffcced85492ec72c Mon Sep 17 00:00:00 2001 From: Nate Davidovich Date: Fri, 22 May 2026 01:44:49 -0400 Subject: [PATCH 10/16] statusline: drop the % number after each usage bar (bar-only, number-free) --- step-4/step-4-install.sh | 2 +- step-final/step-final-install.sh | 2 +- templates/INSTALL.md | 2 +- templates/statusline.sh | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/step-4/step-4-install.sh b/step-4/step-4-install.sh index 326df9a..8f1359c 100755 --- a/step-4/step-4-install.sh +++ b/step-4/step-4-install.sh @@ -1074,7 +1074,7 @@ usage_seg() { local dim=$'\033[38;5;240m' reset=$'\033[0m' while [ $i -lt $filled ]; do fill="${fill}█"; i=$((i+1)); done i=0; while [ $i -lt $empty ]; do emp="${emp}█"; i=$((i+1)); done - printf '%s %s%s%s%s%s %s%%' "$label" "$c" "$fill" "$dim" "$emp" "$reset" "$p" + printf '%s %s%s%s%s%s' "$label" "$c" "$fill" "$dim" "$emp" "$reset" } U5=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty' 2>/dev/null) diff --git a/step-final/step-final-install.sh b/step-final/step-final-install.sh index 033b768..85d7168 100755 --- a/step-final/step-final-install.sh +++ b/step-final/step-final-install.sh @@ -198,7 +198,7 @@ usage_seg() { local dim=$'\033[38;5;240m' reset=$'\033[0m' while [ $i -lt $filled ]; do fill="${fill}█"; i=$((i+1)); done i=0; while [ $i -lt $empty ]; do emp="${emp}█"; i=$((i+1)); done - printf '%s %s%s%s%s%s %s%%' "$label" "$c" "$fill" "$dim" "$emp" "$reset" "$p" + printf '%s %s%s%s%s%s' "$label" "$c" "$fill" "$dim" "$emp" "$reset" } U5=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty' 2>/dev/null) diff --git a/templates/INSTALL.md b/templates/INSTALL.md index 180b4fc..a448f10 100644 --- a/templates/INSTALL.md +++ b/templates/INSTALL.md @@ -47,7 +47,7 @@ Close and reopen Claude Code for the status line to take effect. | 👑 Hive | Active hive-mind session | | 🍯 Mini | Active mini swarm session | -It also appends your current model, session duration, context-window usage, and Claude rate-limit bars for the **5h** and **7-day** windows — `5h █░░░░ 13% · 7d █░░░░ 24%` — color-graded green → yellow → red as you approach each limit. The percentages come from Claude Code's own `rate_limits` data passed to the script on stdin, so there's no API token or network call. +It also appends your current model, session duration, context-window usage, and Claude rate-limit bars for the **5h** and **7-day** windows — `5h █░░░░ · 7d █░░░░` — color-graded green → yellow → red as you approach each limit. The fill comes from Claude Code's own `rate_limits` data passed to the script on stdin, so there's no API token or network call. (Bars are number-free by design; to show the percent, see the script's `usage_seg` `printf`.) ## Swarm/Hive Lock Files diff --git a/templates/statusline.sh b/templates/statusline.sh index 3e838e8..24695a9 100755 --- a/templates/statusline.sh +++ b/templates/statusline.sh @@ -124,7 +124,7 @@ usage_seg() { local dim=$'\033[38;5;240m' reset=$'\033[0m' while [ $i -lt $filled ]; do fill="${fill}█"; i=$((i+1)); done i=0; while [ $i -lt $empty ]; do emp="${emp}█"; i=$((i+1)); done - printf '%s %s%s%s%s%s %s%%' "$label" "$c" "$fill" "$dim" "$emp" "$reset" "$p" + printf '%s %s%s%s%s%s' "$label" "$c" "$fill" "$dim" "$emp" "$reset" } U5=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty' 2>/dev/null) From 3daa2bce8b71b6ed58df4da2e0fa541b8aa540d3 Mon Sep 17 00:00:00 2001 From: Nate Davidovich Date: Fri, 22 May 2026 01:55:19 -0400 Subject: [PATCH 11/16] =?UTF-8?q?statusline:=20balanced=20bullet=20spacing?= =?UTF-8?q?,=20tighten=20bolt=E2=86=92fidgetflo=20gap,=20+=20=E2=86=92=20?= =?UTF-8?q?=E2=80=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- step-4/step-4-install.sh | 4 ++-- step-final/step-final-install.sh | 4 ++-- templates/statusline.sh | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/step-4/step-4-install.sh b/step-4/step-4-install.sh index 8f1359c..b5f5f48 100755 --- a/step-4/step-4-install.sh +++ b/step-4/step-4-install.sh @@ -996,7 +996,7 @@ fi # --- fidgetflo CHECK --- fidgetflo="" if pgrep -f "fidgetflo.*mcp" >/dev/null 2>&1 || pgrep -f "fidgetflo/bin/cli" >/dev/null 2>&1 || pgrep -f "fidgetflo" >/dev/null 2>&1; then - fidgetflo="⚡️ fidgetflo" + fidgetflo="⚡️fidgetflo" fi # --- SWARM CHECK (only shows when actively running) --- @@ -1085,7 +1085,7 @@ seg=$(usage_seg "7d" "$U7"); [ -n "$seg" ] && { [ -n "$USAGE" ] && USAGE="$USAGE # --- BUILD THE LINE --- PARTS="" if [ -n "$BRAIN" ] && [ -n "$fidgetflo" ]; then - PARTS="${BRAIN} + ${fidgetflo}" + PARTS="${BRAIN} • ${fidgetflo}" elif [ -n "$BRAIN" ]; then PARTS="${BRAIN}" elif [ -n "$fidgetflo" ]; then diff --git a/step-final/step-final-install.sh b/step-final/step-final-install.sh index 85d7168..ed1d55e 100755 --- a/step-final/step-final-install.sh +++ b/step-final/step-final-install.sh @@ -120,7 +120,7 @@ fi # --- fidgetflo CHECK --- fidgetflo="" if pgrep -f "fidgetflo.*mcp" >/dev/null 2>&1 || pgrep -f "fidgetflo/bin/cli" >/dev/null 2>&1 || pgrep -f "fidgetflo" >/dev/null 2>&1; then - fidgetflo="⚡️ fidgetflo" + fidgetflo="⚡️fidgetflo" fi # --- SWARM CHECK (only shows when actively running) --- @@ -209,7 +209,7 @@ seg=$(usage_seg "7d" "$U7"); [ -n "$seg" ] && { [ -n "$USAGE" ] && USAGE="$USAGE # --- BUILD THE LINE --- PARTS="" if [ -n "$BRAIN" ] && [ -n "$fidgetflo" ]; then - PARTS="${BRAIN} + ${fidgetflo}" + PARTS="${BRAIN} • ${fidgetflo}" elif [ -n "$BRAIN" ]; then PARTS="${BRAIN}" elif [ -n "$fidgetflo" ]; then diff --git a/templates/statusline.sh b/templates/statusline.sh index 24695a9..bbf2e4d 100755 --- a/templates/statusline.sh +++ b/templates/statusline.sh @@ -46,7 +46,7 @@ fi # --- fidgetflo CHECK --- fidgetflo="" if pgrep -f "fidgetflo.*mcp" >/dev/null 2>&1 || pgrep -f "fidgetflo/bin/cli" >/dev/null 2>&1 || pgrep -f "fidgetflo" >/dev/null 2>&1; then - fidgetflo="⚡️ fidgetflo" + fidgetflo="⚡️fidgetflo" fi # --- SWARM CHECK (only shows when actively running) --- @@ -135,7 +135,7 @@ seg=$(usage_seg "7d" "$U7"); [ -n "$seg" ] && { [ -n "$USAGE" ] && USAGE="$USAGE # --- BUILD THE LINE --- PARTS="" if [ -n "$BRAIN" ] && [ -n "$fidgetflo" ]; then - PARTS="${BRAIN} + ${fidgetflo}" + PARTS="${BRAIN} • ${fidgetflo}" elif [ -n "$BRAIN" ]; then PARTS="${BRAIN}" elif [ -n "$fidgetflo" ]; then From ffac0191cef480cc6fa70854f03efb00f2c97da4 Mon Sep 17 00:00:00 2001 From: Nate Davidovich Date: Fri, 22 May 2026 02:01:38 -0400 Subject: [PATCH 12/16] =?UTF-8?q?statusline:=20restore=20%=20on=20usage=20?= =?UTF-8?q?bars,=20match=20bolt=E2=86=92fidgetflo=20gap=20to=20brain?= =?UTF-8?q?=E2=86=92Brain=C2=B2=20(one=20space)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- step-4/step-4-install.sh | 4 ++-- step-final/step-final-install.sh | 4 ++-- templates/INSTALL.md | 2 +- templates/statusline.sh | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/step-4/step-4-install.sh b/step-4/step-4-install.sh index b5f5f48..8b9cd4a 100755 --- a/step-4/step-4-install.sh +++ b/step-4/step-4-install.sh @@ -996,7 +996,7 @@ fi # --- fidgetflo CHECK --- fidgetflo="" if pgrep -f "fidgetflo.*mcp" >/dev/null 2>&1 || pgrep -f "fidgetflo/bin/cli" >/dev/null 2>&1 || pgrep -f "fidgetflo" >/dev/null 2>&1; then - fidgetflo="⚡️fidgetflo" + fidgetflo="⚡️ fidgetflo" fi # --- SWARM CHECK (only shows when actively running) --- @@ -1074,7 +1074,7 @@ usage_seg() { local dim=$'\033[38;5;240m' reset=$'\033[0m' while [ $i -lt $filled ]; do fill="${fill}█"; i=$((i+1)); done i=0; while [ $i -lt $empty ]; do emp="${emp}█"; i=$((i+1)); done - printf '%s %s%s%s%s%s' "$label" "$c" "$fill" "$dim" "$emp" "$reset" + printf '%s %s%s%s%s%s %s%%' "$label" "$c" "$fill" "$dim" "$emp" "$reset" "$p" } U5=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty' 2>/dev/null) diff --git a/step-final/step-final-install.sh b/step-final/step-final-install.sh index ed1d55e..36a6c28 100755 --- a/step-final/step-final-install.sh +++ b/step-final/step-final-install.sh @@ -120,7 +120,7 @@ fi # --- fidgetflo CHECK --- fidgetflo="" if pgrep -f "fidgetflo.*mcp" >/dev/null 2>&1 || pgrep -f "fidgetflo/bin/cli" >/dev/null 2>&1 || pgrep -f "fidgetflo" >/dev/null 2>&1; then - fidgetflo="⚡️fidgetflo" + fidgetflo="⚡️ fidgetflo" fi # --- SWARM CHECK (only shows when actively running) --- @@ -198,7 +198,7 @@ usage_seg() { local dim=$'\033[38;5;240m' reset=$'\033[0m' while [ $i -lt $filled ]; do fill="${fill}█"; i=$((i+1)); done i=0; while [ $i -lt $empty ]; do emp="${emp}█"; i=$((i+1)); done - printf '%s %s%s%s%s%s' "$label" "$c" "$fill" "$dim" "$emp" "$reset" + printf '%s %s%s%s%s%s %s%%' "$label" "$c" "$fill" "$dim" "$emp" "$reset" "$p" } U5=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty' 2>/dev/null) diff --git a/templates/INSTALL.md b/templates/INSTALL.md index a448f10..e2d23cb 100644 --- a/templates/INSTALL.md +++ b/templates/INSTALL.md @@ -47,7 +47,7 @@ Close and reopen Claude Code for the status line to take effect. | 👑 Hive | Active hive-mind session | | 🍯 Mini | Active mini swarm session | -It also appends your current model, session duration, context-window usage, and Claude rate-limit bars for the **5h** and **7-day** windows — `5h █░░░░ · 7d █░░░░` — color-graded green → yellow → red as you approach each limit. The fill comes from Claude Code's own `rate_limits` data passed to the script on stdin, so there's no API token or network call. (Bars are number-free by design; to show the percent, see the script's `usage_seg` `printf`.) +It also appends your current model, session duration, context-window usage, and Claude rate-limit bars for the **5h** and **7-day** windows — `5h █░░░░ 13% · 7d █░░░░ 24%` — color-graded green → yellow → red as you approach each limit. The fill comes from Claude Code's own `rate_limits` data passed to the script on stdin, so there's no API token or network call. ## Swarm/Hive Lock Files diff --git a/templates/statusline.sh b/templates/statusline.sh index bbf2e4d..8af970a 100755 --- a/templates/statusline.sh +++ b/templates/statusline.sh @@ -46,7 +46,7 @@ fi # --- fidgetflo CHECK --- fidgetflo="" if pgrep -f "fidgetflo.*mcp" >/dev/null 2>&1 || pgrep -f "fidgetflo/bin/cli" >/dev/null 2>&1 || pgrep -f "fidgetflo" >/dev/null 2>&1; then - fidgetflo="⚡️fidgetflo" + fidgetflo="⚡️ fidgetflo" fi # --- SWARM CHECK (only shows when actively running) --- @@ -124,7 +124,7 @@ usage_seg() { local dim=$'\033[38;5;240m' reset=$'\033[0m' while [ $i -lt $filled ]; do fill="${fill}█"; i=$((i+1)); done i=0; while [ $i -lt $empty ]; do emp="${emp}█"; i=$((i+1)); done - printf '%s %s%s%s%s%s' "$label" "$c" "$fill" "$dim" "$emp" "$reset" + printf '%s %s%s%s%s%s %s%%' "$label" "$c" "$fill" "$dim" "$emp" "$reset" "$p" } U5=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty' 2>/dev/null) From d0e882f7af6b2f2b773547f8b77a9e49b92ae69a Mon Sep 17 00:00:00 2001 From: Nate Davidovich Date: Sun, 24 May 2026 19:17:53 -0400 Subject: [PATCH 13/16] Add /bullets and /recon skills; sync install scripts, cheatsheet, and docs --- CHANGELOG.md | 2 + CHEATSHEET.md | 8 ++- README-SECTIONS/cheat-sheet.md | 6 ++- README-SECTIONS/mcp-setup.md | 2 +- README-SECTIONS/step-ordering.md | 2 +- README.md | 28 +++++----- bullets-skill/SKILL.md | 56 ++++++++++++++++++++ install.sh | 4 +- recon-skill/SKILL.md | 91 ++++++++++++++++++++++++++++++++ step-4/step-4-install.sh | 76 ++++++++++++++++++++++++++ step-6/step-6-install.sh | 2 +- step-7/step-7-install.sh | 68 +++++++++++++++++++++--- step-final/step-final-install.sh | 9 ++++ uninstall.sh | 13 +++-- update.sh | 4 +- 15 files changed, 338 insertions(+), 33 deletions(-) create mode 100644 bullets-skill/SKILL.md create mode 100644 recon-skill/SKILL.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ff44b7..bffb1c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ## [Unreleased] ### Added +- **`/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 — Nate sometimes clones 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 Nate's 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. diff --git a/CHEATSHEET.md b/CHEATSHEET.md index fcecfea..114180b 100644 --- a/CHEATSHEET.md +++ b/CHEATSHEET.md @@ -13,8 +13,10 @@ The commands I reach for most. Full reference below. | `/fmini ` | Compact 5-agent FidgetFlo swarm for focused work | | `/w4w` | Word-for-word, line-for-line. Max attention, zero skipping, no summarizing | | `/concise` | Chat default — no fluff, no scaffolding, no headers on simple Qs. Suspends for copy/scripts/decks. | +| `/bullets` | Crush a paragraph into the shortest scannable bullets — core facts only. Always bulletizes (where `/concise` sometimes leaves prose). For handoffs | | `/safetycheck` | Security audit — scans for exposed keys, injection vectors, supply-chain risks | | `/gitfix` | Full repo sync — reads every file, fixes doc drift, makes reality match the README | +| `/recon ` | Pre-build prior-art sweep — ranks competitors, finds the edge, GREEN/YELLOW/RED verdict before you build | | `/save` | Capture a conversation into your 2ndBrain vault *(requires [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging))* | --- @@ -124,7 +126,9 @@ These are custom skills installed by the setup scripts. Type them inside a Claud | `/fhive ` | Step 4 | Launch a queen-led autonomous FidgetFlo hive-mind with raft consensus | | `/w4w` | Step 4 | Maximum attention to detail — word for word, line for line. No skipping, no summarizing. Also works without the slash — just type `w4w` | | `/concise` | Step 4 | Default chat shape — no fluff, no scaffolding, no sycophancy, no headers on simple questions. Suspends automatically for copywriting deliverables (tweets, scripts, decks, client docs). For always-on enforcement see the playbook in `concise-skill/SKILL.md` description. | +| `/bullets` | Step 4 | Crush a prose blob into the shortest possible bullets — one fact per bullet, ≤~12 words, zero fluff, signal preserved (names, numbers, dates, paths, decisions). Always outputs bullets, unlike `/concise` which decides shape per reply and sometimes leaves prose. Built for document handoffs where nobody should have to read paragraph blobs. Also triggers in plain English — "bullet this", "bulletize", "turn this into bullets" | | `/gitfix` | Step 7 | Full repo sync — reads every install script, skill file, and doc in the repo, finds every inconsistency between the code and the documentation, and fixes all of it. Run this any time you've made changes to a repo and need the README, cheatsheet, and all other docs to reflect reality. Also responds to "fix the github", "sync the repo", or "update the readme" in plain English | +| `/recon` | Step 7 | Pre-build prior-art recon. Before you build a tool/app/CLI/MCP/library, sweeps GitHub (via `gh`) + the web for what already exists, ranks the top ~10 free and paid competitors in a comparison table, finds where an edge exists (or honestly calls it a red ocean), and ends with a GREEN/YELLOW/RED verdict. Output is a discussion — building starts only after. Auto-offers itself when you say "build / make / start a new X" or "does X exist?"; run it directly with `/recon ` to skip the offer | | `/safetycheck` | Step 8 | Security audit — scans any project for exposed keys, missing rate limiting, input sanitization gaps, dependency vulnerabilities, and insecure configurations. Also responds to "run a safety check" in plain English. Auto-activates 12 MCP-specific checks on MCP projects | ### 2ndBrain-mogging skills *(requires [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging) installed)* @@ -142,7 +146,7 @@ These are custom skills installed by the setup scripts. Type them inside a Claud | `/tether` | Repair orphaned notes, bidirectionally link projects and hubs | | `/connect` | Bridge two notes — surfaces structural analogies, transfer opportunities, collision ideas | -> These are **explicit triggers** — you type the command to activate the skill. This is different from the auto-triggered tools below, which respond to natural language. Exceptions: `/w4w` also works without the slash (just type `w4w` anywhere in your message), `/safetycheck` responds to "run a safety check", and `/gitfix` responds to "fix the github" / "sync the repo" / "update the readme". All other slash commands require you to type the command. +> These are **explicit triggers** — you type the command to activate the skill. This is different from the auto-triggered tools below, which respond to natural language. Exceptions: `/w4w` also works without the slash (just type `w4w` anywhere in your message), `/safetycheck` responds to "run a safety check", `/gitfix` responds to "fix the github" / "sync the repo" / "update the readme", `/recon` auto-offers itself whenever you say "build / make / start a new X" or "does X exist?", and `/bullets` responds to "bullet this" / "bulletize" / "turn this into bullets". All other slash commands require you to type the command. --- @@ -173,7 +177,7 @@ These activate on their own when Claude detects a relevant task via natural lang | Obsidian | 2ndBrain-mogging | Natural language — read/write/search a local Obsidian vault (set up via [fidgetcoding/2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging)) | "Search my vault for notes about machine learning" | | Canva | Add-on | Natural language — create or edit designs, social posts, presentations | "Design a social media post for our launch" | -> **Key distinction:** Slash commands (`/fswarm`, `/fswarm1`–`/fswarmmax`, `/fmini`, `/fmini1`–`/fminimax`, `/fhive`, `/w4w`, `/concise`, `/safetycheck`, `/gitfix`, plus the 2ndBrain-mogging `/save`, `/wiki`, `/challenge`, `/emerge`, `/backfill`, `/aliases`, `/autoresearch`, `/canvas`, `/tether`, `/connect`) require you to type the command. Everything in this table works by just talking to Claude naturally. +> **Key distinction:** Slash commands (`/fswarm`, `/fswarm1`–`/fswarmmax`, `/fmini`, `/fmini1`–`/fminimax`, `/fhive`, `/w4w`, `/concise`, `/bullets`, `/safetycheck`, `/gitfix`, `/recon`, plus the 2ndBrain-mogging `/save`, `/wiki`, `/challenge`, `/emerge`, `/backfill`, `/aliases`, `/autoresearch`, `/canvas`, `/tether`, `/connect`) require you to type the command. Everything in this table works by just talking to Claude naturally. > > **Add-on tools** (Canva) are not part of the step-by-step setup — they're optional MCP servers you can connect separately. Claude auto-detects them when they're installed. Figma, Excalidraw, and Gamma live in [creativity-maxxing](https://github.com/fidgetcoding/creativity-maxxing). diff --git a/README-SECTIONS/cheat-sheet.md b/README-SECTIONS/cheat-sheet.md index 119284b..650bdfe 100644 --- a/README-SECTIONS/cheat-sheet.md +++ b/README-SECTIONS/cheat-sheet.md @@ -104,11 +104,13 @@ These are custom skills installed by the setup scripts. Type them inside a Claud | `/fminimax ` | Step 4 | 5-agent swarm at MAX thinking (~32k budget per agent) — `Ultrathink.` appended | | `/fhive ` | Step 4 | Launch a queen-led autonomous FidgetFlo hive-mind with raft consensus | | `/w4w` | Step 4 | Maximum attention to detail — word for word, line for line. No skipping, no summarizing. Also works without the slash — just type `w4w` | +| `/bullets` | Step 4 | Crush a prose blob into the shortest possible bullets — one fact per bullet, ≤~12 words, zero fluff, signal preserved (names, numbers, dates, paths, decisions). Always outputs bullets, unlike `/concise` which decides shape per reply and sometimes leaves prose. Built for document handoffs. Also triggers in plain English — "bullet this", "bulletize", "turn this into bullets" | | `/gitfix` | Step 7 | Full repo sync — reads every install script, skill file, and doc in the repo, finds every inconsistency between the code and the documentation, and fixes all of it. Run this any time you've made changes to a repo and need the README, cheatsheet, and all other docs to reflect reality | +| `/recon` | Step 7 | Pre-build prior-art recon — before you build a tool/app/CLI/MCP/library, sweeps GitHub (`gh`) + the web for what already exists, ranks the top ~10 free and paid competitors, finds the edge (or calls it a red ocean), and ends with a GREEN/YELLOW/RED verdict. Output is a discussion, not code. Auto-offers itself on "build / make / start a new X" and "does X exist?"; run directly with `/recon ` | | `/safetycheck` | Step 8 | Security audit — scans any project for exposed keys, missing rate limiting, input sanitization gaps, dependency vulnerabilities, and insecure configurations. Also responds to "run a safety check" in plain English | -> These are **explicit triggers** — you type the command to activate the skill. This is different from the auto-triggered tools below, which respond to natural language. Exception: `/w4w` also works without the slash — just type `w4w` anywhere in your message. `/safetycheck` also works in natural language ("run a safety check"). `/gitfix` also works in natural language ("fix the github", "sync the repo", "update the readme"). Slash commands: `/fswarm`, `/fswarm1`–`/fswarmmax`, `/fmini`, `/fmini1`–`/fminimax`, `/fhive`, `/w4w`, `/safetycheck`, `/gitfix` — all require you to type the command (or its natural-language equivalent where noted). +> These are **explicit triggers** — you type the command to activate the skill. This is different from the auto-triggered tools below, which respond to natural language. Exception: `/w4w` also works without the slash — just type `w4w` anywhere in your message. `/safetycheck` also works in natural language ("run a safety check"). `/gitfix` also works in natural language ("fix the github", "sync the repo", "update the readme"). `/recon` auto-offers itself on build-intent ("build / make / start a new X", "does X exist?"). Slash commands: `/fswarm`, `/fswarm1`–`/fswarmmax`, `/fmini`, `/fmini1`–`/fminimax`, `/fhive`, `/w4w`, `/safetycheck`, `/gitfix`, `/recon` — all require you to type the command (or its natural-language equivalent where noted). --- @@ -139,7 +141,7 @@ These activate on their own when Claude detects a relevant task via natural lang | Memory Hook | Step 3 | Automatic on session end — saves context from the conversation | (no prompt needed — runs automatically) | | Canva | Add-on | Natural language — create or edit designs, social posts, presentations | "Design a social media post for our launch" | -> **Key distinction:** Slash commands (`/fswarm`, `/fswarm1`–`/fswarmmax`, `/fmini`, `/fmini1`–`/fminimax`, `/fhive`, `/w4w`, `/safetycheck`, `/gitfix`, plus the 2ndBrain-mogging `/save`, `/wiki`, `/challenge`, `/emerge`, `/backfill`, `/aliases`, `/autoresearch`, `/canvas`, `/tether`, `/connect`) require you to type the command. Everything in this table works by just talking to Claude naturally. +> **Key distinction:** Slash commands (`/fswarm`, `/fswarm1`–`/fswarmmax`, `/fmini`, `/fmini1`–`/fminimax`, `/fhive`, `/w4w`, `/safetycheck`, `/gitfix`, `/recon`, plus the 2ndBrain-mogging `/save`, `/wiki`, `/challenge`, `/emerge`, `/backfill`, `/aliases`, `/autoresearch`, `/canvas`, `/tether`, `/connect`) require you to type the command. Everything in this table works by just talking to Claude naturally. > > **Add-on tools** (Canva) are not part of the step-by-step setup — they're optional MCP servers you can connect separately. Claude auto-detects them when they're installed. Figma, Excalidraw, and Gamma live in [creativity-maxxing](https://github.com/fidgetcoding/creativity-maxxing). diff --git a/README-SECTIONS/mcp-setup.md b/README-SECTIONS/mcp-setup.md index a141823..46787bd 100644 --- a/README-SECTIONS/mcp-setup.md +++ b/README-SECTIONS/mcp-setup.md @@ -4,7 +4,7 @@ Claude Code connects to MCP (Model Context Protocol) servers for extended capabi - **Step 4 (FidgetFlo)** — adds the FidgetFlo MCP server automatically. This gives Claude its multi-agent orchestration, swarm tools, and persistent memory. - **Step 5 (Productivity Tools)** — interactive menu, pick what you use: Notion, Granola, n8n, Google Calendar, Morgen (recommended), Motion Calendar, Playwright, SwiftKit, Superhuman, Google Drive, Vercel. All optional, all wired automatically when you select them. -- **Step 7 (GitHub)** — installs the GitHub CLI (`gh` terminal binary, no credentials required — run `gh auth login` once after install) and adds the GitHub MCP server (requires a Personal Access Token). Together they give Claude access to repos, issues, PRs, and code search via both the `gh` binary in Bash and direct tool calls. Also installs the `/gitfix` skill for full-repo doc sync. +- **Step 7 (GitHub)** — installs the GitHub CLI (`gh` terminal binary, no credentials required — run `gh auth login` once after install) and adds the GitHub MCP server (requires a Personal Access Token). Together they give Claude access to repos, issues, PRs, and code search via both the `gh` binary in Bash and direct tool calls. Also installs the `/gitfix` skill for full-repo doc sync and the `/recon` skill for pre-build prior-art recon (sweeps GitHub + the web for existing tools before you build, ranks competitors, finds the edge). For manual MCP setup or troubleshooting, see the [Claude Code MCP documentation](https://docs.anthropic.com/en/docs/claude-code/mcp-servers). diff --git a/README-SECTIONS/step-ordering.md b/README-SECTIONS/step-ordering.md index a79bf34..5ebc34e 100644 --- a/README-SECTIONS/step-ordering.md +++ b/README-SECTIONS/step-ordering.md @@ -10,7 +10,7 @@ Run the steps in this order: | 4 | FidgetFlo | Multi-agent orchestration — swarms, hives, persistent memory, Opus-locked | | 5 | Productivity Tools | Notion + Granola + n8n + Google Calendar + Morgen + Motion Calendar + Playwright + SwiftKit + Superhuman + Google Drive + Vercel (all optional — pick what you use; Morgen recommended) | | 6 | Telegram | Telegram bot setup — message Claude from your phone. Press Enter to skip if you don't have a bot yet. | -| 7 | GitHub | GitHub CLI (`gh`) + GitHub MCP (repos, issues, PRs, code search — MCP requires PAT) + `/gitfix` skill for full-repo doc sync | +| 7 | GitHub | GitHub CLI (`gh`) + GitHub MCP (repos, issues, PRs, code search — MCP requires PAT) + `/gitfix` skill for full-repo doc sync + `/recon` skill for pre-build prior-art recon | | 8 | Safety Check | Security auditing — 8 API checks + 12 MCP checks for tool poisoning, DNS rebinding, supply chain attacks | | **Final** | **Status Line** | **Status indicators + system health check** | diff --git a/README.md b/README.md index 9ff25bf..7b22536 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ Install `cli-maxxing` first. `creativity-maxxing` and `task-maxxing` can be inst | [Step 4](#step-4---fidgetflo) | FidgetFlo | Multi-agent orchestration — swarms, hives, persistent memory, Opus-locked | ~3 min | | [Step 5](#step-5---productivity-tools) | Productivity Tools | Notion + Granola + n8n + GCal + Morgen + Motion + Playwright + SwiftKit + Superhuman + Google Drive + Vercel (pick what you use; Morgen recommended) | ~5 min | | [Step 6](#step-6---telegram) | Telegram | Message Claude from your phone via Telegram bot | ~2 min | -| [Step 7](#step-7---github) | GitHub | GitHub MCP + /gitfix skill — repos, issues, PRs, code search, full-repo doc sync (requires PAT) | ~2 min | +| [Step 7](#step-7---github) | GitHub | GitHub MCP + /gitfix + /recon skills — repos, issues, PRs, code search, full-repo doc sync, pre-build prior-art recon (MCP requires PAT) | ~2 min | | [Step 8](#step-8---safety-check) | Safety Check | Security auditing — scan any project for vulnerabilities + full MCP security checks | ~2 min | | [Final Step](#final-step---status-line) | Status Line | Final config — status indicators for active swarms, vault, MCP | ~2 min | | [You're Ready](#youre-ready) | **Start here after setup** | Your daily command and what to do next | | @@ -101,7 +101,7 @@ Run the steps in order. Each one builds on the last. **[Step 6 — Telegram](#step-6---telegram)** connects Claude to Telegram so you can message it straight from your phone. You create a free bot through Telegram (takes about two minutes), the script handles the rest, and then you use `ctg` or `cbraintg` to launch Claude with Telegram connected — messages show up in your session in real time. This step is completely optional; everything else works without it. -**[Step 7 — GitHub](#step-7---github)** is the GitHub bundle — for developers. It installs the GitHub MCP so Claude can read and write your repos, issues, pull requests, and search code across your GitHub organizations (requires a GitHub Personal Access Token), plus the `/gitfix` skill that reads every file in a repo and fixes any drift between your code and your docs. Skip this step if you don't use GitHub with Claude. +**[Step 7 — GitHub](#step-7---github)** is the GitHub bundle — for developers. It installs the GitHub MCP so Claude can read and write your repos, issues, pull requests, and search code across your GitHub organizations (requires a GitHub Personal Access Token), plus the `/gitfix` skill that reads every file in a repo and fixes any drift between your code and your docs, and the `/recon` skill that sweeps GitHub + the web for prior art before you build something new. Skip this step if you don't use GitHub with Claude. **[Step 8 — Safety Check](#step-8---safety-check)** installs a security auditing skill that lets Claude scan any project for exposed keys, missing rate limiting, input sanitization gaps, dependency vulnerabilities, and more. Just point Claude at a project and ask it to run a safety check. It catches the stuff that slips through code review. @@ -161,6 +161,7 @@ Here are the commands you'll use most: | `/fmini *write task here*` | Launch a compact 5-agent FidgetFlo swarm — same power, tighter team. Describe your task after `/fmini` | | `/w4w` | Maximum attention to detail mode — word for word, line for line. No skipping, no summarizing, zero regard for credit burn | | `/concise` | Strip default-LLM fluff — no headers on simple Qs, no "great question", no scaffolding. Auto-suspends for copy/scripts/decks | +| `/bullets` | Crush a paragraph into the shortest scannable bullets — core facts only, zero fluff. Always bulletizes. For handoffs nobody should read as a blob. Also works in plain English ("bullet this") | | `Ctrl+C` | Stop whatever is running or exit Claude | | `/resume` | Pick up right where you left off — reloads your last session's context | @@ -389,6 +390,7 @@ If Claude tells you to restart your terminal, close the window, reopen, `cskip` | `/fhive ` | Queen agent takes full control — decides what workers to spawn and how to coordinate. Set the goal, step back. | | `/w4w` | Word-for-word, line-for-line. Maximum attention, zero skipping. | | `/concise` | Default chat shape — strips fluff, scaffolding, and sycophancy. Suspends for copywriting deliverables. | +| `/bullets` | Crush a prose blob into the shortest bullets — one fact each, zero fluff, signal kept. Always bulletizes; for handoffs. | #### Thinking tiers @@ -412,7 +414,7 @@ Natural-language aliases work too: "hard"/"deep" → tier 2, "harder"/"deeper" | MCP Server | Wires FidgetFlo into Claude Code. | | Memory System | Persistent, searchable memory shared across agents + sessions. | | Opus Lock | All tasks and spawned agents run on Opus — no silent downgrade to Haiku/Sonnet. | -| Swarm + Hive + `/w4w` + `/concise` skills | The commands above. | +| Swarm + Hive + `/w4w` + `/concise` + `/bullets` skills | The commands above. | | TypeScript + agentic-flow | Required deps (embeddings, advanced routing). | | Statusline | Live indicators for swarms, hives, model, session time, context usage, and Claude rate-limit bars (5h + 7-day). | @@ -543,11 +545,12 @@ Open a new terminal and run `ctg` to launch Claude with Telegram connected. Insi [Back to top](#quick-navigation) -The GitHub bundle — optional, for devs. Installs three things: +The GitHub bundle — optional, for devs. Installs four things: - **GitHub CLI (`gh`)** — the terminal binary. Claude shells out to it via Bash for everyday ops (`gh pr create`, `gh issue list`, `gh repo view`). Installs unconditionally — no credentials required. Run `gh auth login` once after install to sign in. - **GitHub MCP** ([`github/github-mcp-server`](https://github.com/github/github-mcp-server) — GitHub's official hosted server at `api.githubcopilot.com/mcp`) — Claude gets direct tool-call access to your repos: issues, PRs, files, code search, branches, commits. *"List open PRs on cli-maxxing"*, *"search my repos for any file that uses MORGEN_API_KEY"* — it just works. Requires a Personal Access Token. - **`/gitfix` skill** — full-repo doc sync. Reads every install script, skill file, and doc, finds drift between code and docs, fixes it. Run it after any significant change so the README stops lying. +- **`/recon` skill** — pre-build prior-art recon. Before you build a tool/app/CLI/MCP/library, it sweeps GitHub (via `gh`) and the web for what already exists, ranks the top ~10 free and paid competitors in a comparison table, finds where an edge actually is (or honestly calls it a red ocean), and ends with a GREEN/YELLOW/RED verdict. Output is a discussion, not code — building starts only after. Auto-offers itself when you say *"build / make / start a new X"* or *"does X exist?"*; run it directly with `/recon ` to skip the offer. No token needed. ### Before You Run It @@ -556,7 +559,7 @@ You need a **GitHub Personal Access Token (classic PAT)** for the MCP. Create on - **Name:** `claude-github-mcp` - **Scopes:** `repo`, `read:org` (under `admin:org`), `gist` -Copy the `ghp_...` value. `/gitfix` needs no token — it runs locally. +Copy the `ghp_...` value. `/gitfix` and `/recon` need no token — they run locally (`/recon` reads public GitHub through the `gh` CLI). ### Run Step 7 @@ -564,7 +567,7 @@ Copy the `ghp_...` value. `/gitfix` needs no token — it runs locally. bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-7/step-7-install.sh) ``` -Script prompts for your PAT, registers the GitHub MCP (token stored in `~/.claude.json` alongside every other MCP credential), and drops `/gitfix` into `~/.claude/skills/gitfix/`. +Script prompts for your PAT, registers the GitHub MCP (token stored in `~/.claude.json` alongside every other MCP credential), and drops `/gitfix` into `~/.claude/skills/gitfix/` and `/recon` into `~/.claude/skills/recon/`. ### What This Step Installs @@ -573,10 +576,11 @@ Script prompts for your PAT, registers the GitHub MCP (token stored in `~/.claud | GitHub CLI (`gh`) | Terminal binary. Claude uses it via Bash for PRs, issues, code search, branch ops. Run `gh auth login` once after install. | | GitHub MCP | Exposes GitHub API ops as Claude tools — read/write repos, issues, PRs, code search, branches, commits. Needs a Personal Access Token. | | `/gitfix` skill | Full-repo doc sync. Fixes drift between code and docs. Works on any repo, no token needed. | +| `/recon` skill | Pre-build prior-art sweep. Ranks existing free + paid competitors, finds the edge, GREEN/YELLOW/RED verdict. Auto-offers on build-intent. No token needed. | ### After Step 7 -Ask *"list my open GitHub issues"* or *"create a PR on cli-maxxing"* and the MCP kicks in automatically. Type `/gitfix` (or say *"sync the repo"* / *"fix the github"* in plain English) after any major change to realign the docs. To rotate the PAT, re-run Step 7 — it overwrites the token in place. +Ask *"list my open GitHub issues"* or *"create a PR on cli-maxxing"* and the MCP kicks in automatically. Type `/gitfix` (or say *"sync the repo"* / *"fix the github"* in plain English) after any major change to realign the docs. Run `/recon ` (or just say *"let's build X"* and take the offer) before starting anything new — it sweeps what already exists and finds your edge before you write code. To rotate the PAT, re-run Step 7 — it overwrites the token in place. --- @@ -850,7 +854,7 @@ That's it. `cbrain` opens Claude Code directly inside your 2ndBrain vault with a **What `cbrain` gives you:** - Drops you into your Obsidian vault automatically — no `cd`-ing around - All permissions skipped — Claude acts immediately, no approval prompts -- Full access to everything: `/fswarm` (+ tiers `1`/`2`/`3`/`max`), `/fmini` (+ tiers `1`/`2`/`3`/`max`), `/fhive`, `/w4w`, `/concise`, `/safetycheck`, `/gitfix`, FidgetFlo, Notion, Granola, n8n, Google Calendar, Morgen, Motion Calendar, Playwright, SwiftKit, Superhuman, Google Drive, Vercel, Obsidian, design tools, video tools — all of it +- Full access to everything: `/fswarm` (+ tiers `1`/`2`/`3`/`max`), `/fmini` (+ tiers `1`/`2`/`3`/`max`), `/fhive`, `/w4w`, `/concise`, `/bullets`, `/safetycheck`, `/gitfix`, `/recon`, FidgetFlo, Notion, Granola, n8n, Google Calendar, Morgen, Motion Calendar, Playwright, SwiftKit, Superhuman, Google Drive, Vercel, Obsidian, design tools, video tools — all of it - Your status line shows what's active at a glance **When to use something else:** @@ -876,7 +880,7 @@ Run the steps in this order: | 4 | FidgetFlo | Multi-agent orchestration — swarms, hives, persistent memory, Opus-locked | | 5 | Productivity Tools | Notion + Granola + n8n + Google Calendar + Morgen + Motion Calendar + Playwright + SwiftKit + Superhuman + Google Drive + Vercel (all optional — pick what you use; Morgen recommended) | | 6 | Telegram | Telegram bot setup — message Claude from your phone. Press Enter to skip if you don't have a bot yet. | -| 7 | GitHub | GitHub CLI (`gh`) + GitHub MCP (repos, issues, PRs, code search — MCP requires PAT) + `/gitfix` skill for full-repo doc sync | +| 7 | GitHub | GitHub CLI (`gh`) + GitHub MCP (repos, issues, PRs, code search — MCP requires PAT) + `/gitfix` skill for full-repo doc sync + `/recon` skill for pre-build prior-art recon | | 8 | Safety Check | Security auditing — 8 API checks + 12 MCP checks for tool poisoning, DNS rebinding, supply chain attacks | | **Final** | **Status Line** | **Status indicators + system health check** | @@ -912,7 +916,7 @@ One script reverses the whole stack. Your Obsidian vault, notes, and Claude acco > bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/uninstall.sh) > ``` -Removes the cli-maxxing aliases (`cskip`, `cc`, `ccr`, `ccc`), the `ctg` script, all MCPs this setup installed, all FidgetFlo skills + `/w4w` + `/concise` + `/safetycheck` + `/gitfix`, dev tools, Arc Browser, and the Ghostty config. `cbrain` and `cbraintg` are managed by [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging) and are not touched here. The YouTube / Instagram transcription stack (yt-dlp, whisper-mcp, ffmpeg, Whisper models) lives in [creativity-maxxing](https://github.com/fidgetcoding/creativity-maxxing) — run its uninstaller separately if you installed it. +Removes the cli-maxxing aliases (`cskip`, `cc`, `ccr`, `ccc`), the `ctg` script, all MCPs this setup installed, all FidgetFlo skills + `/w4w` + `/concise` + `/bullets` + `/safetycheck` + `/gitfix` + `/recon`, dev tools, Arc Browser, and the Ghostty config. `cbrain` and `cbraintg` are managed by [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging) and are not touched here. The YouTube / Instagram transcription stack (yt-dlp, whisper-mcp, ffmpeg, Whisper models) lives in [creativity-maxxing](https://github.com/fidgetcoding/creativity-maxxing) — run its uninstaller separately if you installed it. **Keeps:** Homebrew, Git, Node.js, Claude Code itself, your Obsidian vault + notes, your Claude account — general-purpose tools + your data. The script prints manual-removal commands at the end if you want a fully clean machine. @@ -921,9 +925,9 @@ Removes the cli-maxxing aliases (`cskip`, `cc`, `ccr`, `ccc`), the `ctg` script, - Claude Code shell aliases (`cskip`, `cc`, `ccr`, `ccc`) and the `ctg` script (`~/.local/bin/ctg`). `cbrain` and `cbraintg` are managed by 2ndBrain-mogging — not removed here. - All MCPs installed by this repo: FidgetFlo, Notion, Granola, n8n, Google Calendar, Morgen, Motion Calendar, Playwright, SwiftKit, Superhuman, Google Drive, GitHub — design + media MCPs are managed by [creativity-maxxing](https://github.com/fidgetcoding/creativity-maxxing); Obsidian is managed by [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging) -- All skills: `fswarm*`, `fmini*`, `fhive`, `w4w`, `concise`, `gitfix`, `safetycheck` — UI/UX Pro Max + Taste Skill pack + Remotion are managed by creativity-maxxing +- All skills: `fswarm*`, `fmini*`, `fhive`, `w4w`, `concise`, `bullets`, `gitfix`, `recon`, `safetycheck` — UI/UX Pro Max + Taste Skill pack + Remotion are managed by creativity-maxxing - Dev tools: pandoc, jq, ripgrep, tree, fzf, wget, weasyprint, ffmpeg, xlsx2csv, poppler -- GitHub CLI (`gh` — installed by Step 7 alongside the GitHub MCP + /gitfix skill) +- GitHub CLI (`gh` — installed by Step 7 alongside the GitHub MCP + /gitfix + /recon skills) - Motion Calendar config (`~/.motion-mcp/`) - Google Calendar config (`~/.google-calendar-mcp/`) - Arc Browser (if installed via Step 2) diff --git a/bullets-skill/SKILL.md b/bullets-skill/SKILL.md new file mode 100644 index 0000000..76e2aa3 --- /dev/null +++ b/bullets-skill/SKILL.md @@ -0,0 +1,56 @@ +--- +name: bullets +description: Crush a paragraph (or any prose blob) into the shortest possible bullets — core facts only, zero fluff. Use when the user says /bullets, "bullet this", "turn this into bullets", "bulletize", "make this bullets", "shorten to bullets", or hands over text that a reader shouldn't have to wade through as a paragraph. Unlike /concise (which decides shape per reply and sometimes leaves prose), this ALWAYS outputs bullets. For handoffs where people need scannable points, not blobs. +user_invocable: true +--- + +# bullets + +Input = a paragraph / passage / doc section. Output = the shortest bullets that carry every load-bearing fact. Always bullets. Never leave it as prose. + +## Rules + +1. **One fact per bullet.** Split compound sentences. If a bullet has "and"/"but"/a comma joining two ideas, it's two bullets. +2. **Shortest form that survives.** Drop articles, filler verbs, throat-clearing ("it should be noted", "in order to", "the fact that"). Telegram style — `Deploy blocked: missing API key` not `The deployment is currently blocked because the API key is missing`. +3. **Keep every signal.** Names, numbers, dates, paths, identifiers, decisions, deadlines, blockers. Cutting fluff ≠ cutting facts. +4. **No invention.** Only what's in the source. No padding, no inferred context, no "this means…". +5. **Header if the blob has a clear subject.** One `**Bold line**` or `## Header` naming what the bullets are about. Skip if it's a single tight cluster. +6. **Group only when ≥2 distinct topics.** Then a bold sub-header per group. One topic = flat list. +7. **Order by importance.** Lead with the decision / outcome / blocker. Detail under it. +8. **No recap, no preamble, no closer.** The bullets ARE the output. Don't explain what you did. + +## Shape + +``` +**** +- +- +- +``` + +Multi-topic: +``` +**** + +**** +- +- + +**** +- +``` + +## Length + +Each bullet ≤ ~12 words. If one runs long, it's two facts → split. A dense paragraph should collapse to 3–6 bullets. If you can't get under the source's word count, you're keeping fluff. + +## Scope + +- Default target = the text in the message, or the file/selection named. +- `/bullets ` → bulletize the paste. +- Plain `/bullets` with no text → bulletize the previous turn's prose. +- Stays active for the turn only — not a mode switch. Re-invoke per blob. + +## Boundaries + +This is chat/handoff formatting, not a copy deliverable — `/copywriting` does not apply. Nate overrides still hold: "Nate" never "Nathan", absolute paths, EST timestamps, no UTC. diff --git a/install.sh b/install.sh index 4405d72..78ad280 100644 --- a/install.sh +++ b/install.sh @@ -172,7 +172,7 @@ if [ "${#MISSING_CRUMBS[@]}" -gt 0 ]; then fi echo " Available commands: cskip, ctg, cc, ccr, ccc" -echo " Available skills: /fswarm, /fmini, /fhive, /w4w, /concise, /safetycheck, /gitfix" +echo " Available skills: /fswarm, /fmini, /fhive, /w4w, /concise, /bullets, /safetycheck, /gitfix, /recon" echo " Swarm tiers: /fswarm{1,2,3,max}, /fmini{1,2,3,max} — 1=think, 2=think hard, 3=think harder, max=ultrathink" echo "" echo " Three steps require interactive input — run them separately:" @@ -183,7 +183,7 @@ echo "" echo " Step 6 (Telegram — optional, skip if you don't have a bot token):" echo " bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-6/step-6-install.sh)" echo "" -echo " Step 7 (GitHub — MCP + /gitfix skill, optional, for devs):" +echo " Step 7 (GitHub — MCP + /gitfix + /recon skills, optional, for devs):" echo " bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-7/step-7-install.sh)" echo "" echo " Companion repos (install after this):" diff --git a/recon-skill/SKILL.md b/recon-skill/SKILL.md new file mode 100644 index 0000000..fef316a --- /dev/null +++ b/recon-skill/SKILL.md @@ -0,0 +1,91 @@ +--- +name: recon +description: Pre-build competitive reconnaissance. On build-intent, OFFER it as a one-line question first — do NOT auto-run. Nate sometimes intentionally builds a free version of a known paid product and doesn't need the whole landscape. When run, it sweeps GitHub + web for existing free and paid options, ranks the top ~10 competitors and best repos in a comparison table (maturity, license, price, install, key features, activity), then finds where an edge exists (or honestly says it's a red ocean). Fires the OFFER whenever Nate says "build / create / make / let's do / I want to build / start a new ", or asks "does this exist / what's out there for ". Output is a discussion, not code — building starts only after the verdict. Invoke directly as /recon to skip the offer and run. +allowed-tools: Bash, WebSearch, WebFetch, Read, Write, Task, Agent +--- + +# recon — look before you build + +The rule (memory `feedback_prior_art_check_before_building`): **prior-art sweep BEFORE code, not after.** talk2me is the scar — a whole hands-free voice loop for Claude Code built and shipped before discovering `mbailey/voicemode` (MIT, ~1.2k★) does nearly the same thing and Anthropic ships native `/voice`. The check belongs at turn one. + +This skill produces a **ranked landscape + edge analysis + GREEN/YELLOW/RED verdict**. It does NOT build. Building starts only after the discussion. + +## When this fires — OFFER first, don't auto-run + +On build-intent ("build / create / make / start a new / I want to build / let's do" a product, tool, library, app, CLI, MCP server, skill, extension, or category-named feature) — and on "does X exist?" / "what's out there for X?" — **ask one line, then wait:** + +> Want me to run `/recon` first — sweep what exists + find the edge? Or do you already know the landscape (e.g. you just want a free version of a paid tool)? + +- **Yes / "do recon"** → run the full procedure below. +- **"No, I know it exists, I want a free version"** (a common, legit Nate move) → skip the landscape sweep, but offer the lighter cut: *"Want the top incumbent's feature list as a build target so the clone hits parity?"* — then build. +- **"Just build it"** → respect it, build, no recon. + +Direct `/recon ` skips the offer and runs immediately. + +**Never auto-run the full sweep without asking.** Nate sometimes builds a known duplicate on purpose (a free version of something good). The offer is the safeguard; the call is his. Skip the offer entirely for trivial scripts, vault edits, or bespoke glue. + +## Procedure + +### 1. Frame the thing (1 line) +State what's being built in one sentence + its category name(s). Derive 4-8 search terms: the obvious name, the category, adjacent categories, and the "X for Y" framing (e.g. "voice loop", "voice MCP Claude Code", "hands-free dictation terminal"). + +### 2. Sweep (parallel, broad) +Run these concurrently. For a broad/unfamiliar space, spin 3-5 parallel `Agent` (researcher/Explore) calls — one per sub-angle — to hit the top ~10 fast. For a narrow space, inline is fine. + +- **GitHub:** `gh search repos "" --limit 20 --sort stars` (gh CLI is authed; the GitHub MCP token is DEAD — never use `mcp__github__*`). Also `gh search repos` per alternate term. Capture stars, license, pushedAt. +- **Web:** `WebSearch` the category + "open source", "alternatives", "vs", "best 2026". Hit product directories (Product Hunt, AlternativeTo, lobehub/MCP directories, npm, PyPI) where relevant. +- **Paid/commercial:** explicitly search for the SaaS/paid incumbents, not just free repos — pricing pages, " pricing". +- `WebFetch` the 2-3 most relevant repos/sites to confirm features + license + price (don't trust the search snippet alone — look-don't-guess). + +### 3. Capture each competitor +For the top ~10 (mix of repos + products), record: **name · what it is · free/paid (+ price) · license · maturity (stars / users / age) · install path (MCP / CLI / app / lib) · 1-2 standout features · last active**. + +### 4. Rank + table +Order by relevance-to-what-Nate-wants (not just popularity). Render a comparison table. **Keep cells narrow — Nate reads on an 80-col Ghostty** (per `feedback_table_rendering_keep_cells_narrow`): 2-col ≤30 chars, 3-col ≤20, 4+ col → switch to per-competitor bullets. Lead with a one-line "best overall" pick + why. + +### 5. Find the edge +The actual point. Answer plainly: +- Is there an **unclaimed niche** (a feature/integration/platform nobody covers)? +- A **free-vs-paid gap** (paid incumbent, no good free one — or vice versa)? +- A **quality/UX gap**, or an **agent-agnostic / interoperability angle** the others miss? +- Does Nate have an **unfair advantage** here (existing audience, adjacent tool, distribution)? +- Or is it a **red ocean** where a mature free incumbent already wins? + +Be honest. Do NOT manufacture novelty (the talk2me lesson). If the differentiator is "I'd understand my own code" or "for content/learning", say that's the value — it's real, but it's not a moat. + +### 6. Verdict + discuss +End with one: +- **🟢 GREEN** — novel, or a clear unclaimed edge. Worth building. Name the wedge. +- **🟡 YELLOW** — crowded but a real wedge exists. Build only if you commit to that wedge; name it + the work it implies. +- **🔴 RED** — a mature free incumbent already does this. Reconsider: contribute to the existing one, fork for the one missing feature, or build only for learning/content (state which). + +Then **stop and have the conversation.** Don't roll into building. Nate decides after seeing the landscape. + +## Output shape + +``` +RECON: + +LANDSCAPE (top N) + + +BEST OF BREED: + +THE EDGE + + +VERDICT: 🟢/🟡/🔴 + + +Sources: +``` + +## Hard rules + +- **Sweep before any code.** This is the whole point — never let a build start without it for in-scope requests. +- **gh CLI for GitHub, not the MCP** (token dead). `gh search repos`, `gh repo view --json ...`. +- **Look, don't guess** — WebFetch/`gh repo view` the top hits to confirm license + price + activity. Don't assert features from a snippet. +- **Don't overclaim novelty.** If it exists, say so first sentence. Honesty over hype. +- **Cite sources** — markdown links for every competitor named. +- Narrow table cells (80-col Ghostty). EST timestamps. "Nate" never "Nathan". +- Output is a discussion + verdict. Building is a separate, later step Nate green-lights. diff --git a/step-4/step-4-install.sh b/step-4/step-4-install.sh index 8b9cd4a..3a4d434 100755 --- a/step-4/step-4-install.sh +++ b/step-4/step-4-install.sh @@ -942,6 +942,72 @@ W4W_EOF soft_fail "Could not install /concise skill — download and local fallback both failed" fi + # --- /bullets skill --- + # Crushes a prose blob into the shortest scannable bullets. Sibling to + # /concise: always bulletizes (where /concise sometimes leaves prose). + # Single-file, inlined like /w4w — no network dependency. + BULLETS_DIR="$HOME/.claude/skills/bullets" + mkdir -p "$BULLETS_DIR" + cat > "$BULLETS_DIR/SKILL.md" << 'BULLETS_EOF' +--- +name: bullets +description: Crush a paragraph (or any prose blob) into the shortest possible bullets — core facts only, zero fluff. Use when the user says /bullets, "bullet this", "turn this into bullets", "bulletize", "make this bullets", "shorten to bullets", or hands over text that a reader shouldn't have to wade through as a paragraph. Unlike /concise (which decides shape per reply and sometimes leaves prose), this ALWAYS outputs bullets. For handoffs where people need scannable points, not blobs. +user_invocable: true +--- + +# bullets + +Input = a paragraph / passage / doc section. Output = the shortest bullets that carry every load-bearing fact. Always bullets. Never leave it as prose. + +## Rules + +1. **One fact per bullet.** Split compound sentences. If a bullet has "and"/"but"/a comma joining two ideas, it's two bullets. +2. **Shortest form that survives.** Drop articles, filler verbs, throat-clearing ("it should be noted", "in order to", "the fact that"). Telegram style — `Deploy blocked: missing API key` not `The deployment is currently blocked because the API key is missing`. +3. **Keep every signal.** Names, numbers, dates, paths, identifiers, decisions, deadlines, blockers. Cutting fluff ≠ cutting facts. +4. **No invention.** Only what's in the source. No padding, no inferred context, no "this means…". +5. **Header if the blob has a clear subject.** One `**Bold line**` or `## Header` naming what the bullets are about. Skip if it's a single tight cluster. +6. **Group only when ≥2 distinct topics.** Then a bold sub-header per group. One topic = flat list. +7. **Order by importance.** Lead with the decision / outcome / blocker. Detail under it. +8. **No recap, no preamble, no closer.** The bullets ARE the output. Don't explain what you did. + +## Shape + +``` +**** +- +- +- +``` + +Multi-topic: +``` +**** + +**** +- +- + +**** +- +``` + +## Length + +Each bullet ≤ ~12 words. If one runs long, it's two facts → split. A dense paragraph should collapse to 3–6 bullets. If you can't get under the source's word count, you're keeping fluff. + +## Scope + +- Default target = the text in the message, or the file/selection named. +- `/bullets ` → bulletize the paste. +- Plain `/bullets` with no text → bulletize the previous turn's prose. +- Stays active for the turn only — not a mode switch. Re-invoke per blob. + +## Boundaries + +This is chat/handoff formatting, not a copy deliverable — `/copywriting` does not apply. Nate overrides still hold: "Nate" never "Nathan", absolute paths, EST timestamps, no UTC. +BULLETS_EOF + success "Bullets skill (/bullets) installed" + # --- Statusline script --- # Writes a statusline.sh that uses /tmp lock files to detect swarm/hive activity. # Lock files are used because fswarm/fhive agents run as Claude Code subprocesses @@ -1299,6 +1365,15 @@ run_self_test() { TEST_FAIL=$((TEST_FAIL + 1)) fi + # Bullets skill (/bullets) + if [ -f "$HOME/.claude/skills/bullets/SKILL.md" ]; then + success "TEST: Bullets skill (/bullets) installed" + TEST_PASS=$((TEST_PASS + 1)) + else + soft_fail "TEST: Bullets skill (/bullets) not found" + TEST_FAIL=$((TEST_FAIL + 1)) + fi + # Statusline if [ -f "$HOME/.claude/statusline.sh" ] && [ -x "$HOME/.claude/statusline.sh" ]; then success "TEST: Statusline script installed" @@ -1393,6 +1468,7 @@ print_summary() { echo " /fminimax — mini swarm at ultrathink (MAX budget)" echo " /w4w — word for word, line for line attention mode" echo " /concise — chat default: no fluff, no scaffolding, voice-on for copy" + echo " /bullets — crush a paragraph into the shortest scannable bullets" echo "" echo " What you can do now:" echo " - Claude can spawn multiple agents to work in parallel" diff --git a/step-6/step-6-install.sh b/step-6/step-6-install.sh index 318d843..5ead8c9 100755 --- a/step-6/step-6-install.sh +++ b/step-6/step-6-install.sh @@ -299,7 +299,7 @@ echo "" echo -e " ${YELLOW}Tip: Use ctg from any directory, or cbraintg to also${NC}" echo -e " ${YELLOW}open your 2ndBrain vault with Telegram connected.${NC}" echo "" -echo " Continue to Step 7 (GitHub MCP + /gitfix) when you're ready." +echo " Continue to Step 7 (GitHub MCP + /gitfix + /recon) when you're ready." echo "" # Breadcrumb for /doctor and re-run detection. diff --git a/step-7/step-7-install.sh b/step-7/step-7-install.sh index df8131a..c3b9152 100755 --- a/step-7/step-7-install.sh +++ b/step-7/step-7-install.sh @@ -2,9 +2,10 @@ set -uo pipefail # ============================================================================= -# Step 7 — GitHub CLI + MCP + /gitfix +# Step 7 — GitHub CLI + MCP + /gitfix + /recon # Installs the `gh` CLI (terminal binary), the GitHub MCP server, and the -# /gitfix skill. `gh` installs unconditionally (no credentials needed); the +# /gitfix + /recon skills. `gh` installs unconditionally (no credentials +# needed) and is what /recon uses to sweep GitHub for prior art; the # MCP install is gated on a Personal Access Token. # Run after completing Steps 1-6. Run this in your terminal. # ============================================================================= @@ -27,6 +28,7 @@ soft_fail() { echo -e "${RED}[FAIL]${NC} $1 (non-critical, continuing...)"; ERRO INSTALLED_GH=false INSTALLED_GITHUB=false INSTALLED_GITFIX=false +INSTALLED_RECON=false # ----------------------------------------------------------------------------- # Ensure runtime PATH (brew, nvm, ~/.local/bin) is visible. @@ -167,8 +169,9 @@ choose_tools() { echo "" echo " bash <(curl -fsSL https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/step-7/step-7-install.sh)" echo "" - info "Continuing with non-interactive /gitfix install..." + info "Continuing with non-interactive /gitfix + /recon install..." install_gitfix + install_recon run_self_test print_summary exit 0 @@ -295,6 +298,43 @@ install_gitfix() { fi } +# ----------------------------------------------------------------------------- +# Install /recon skill — pre-build prior-art recon (depends on the gh CLI) +# ----------------------------------------------------------------------------- +install_recon() { + RECON_DIR="$HOME/.claude/skills/recon" + RECON_FILE="$RECON_DIR/SKILL.md" + RECON_URL="https://raw.githubusercontent.com/fidgetcoding/cli-maxxing/main/recon-skill/SKILL.md" + + mkdir -p "$RECON_DIR" + + if [ -f "$RECON_FILE" ]; then + info "Updating existing /recon skill..." + INSTALLED_RECON=true + else + info "Installing /recon skill..." + fi + + RECON_TMP="$RECON_FILE.tmp" + if curl -fsSL "$RECON_URL" -o "$RECON_TMP" 2>/dev/null && [ -s "$RECON_TMP" ]; then + mv "$RECON_TMP" "$RECON_FILE" + success "/recon skill installed at $RECON_FILE" + INSTALLED_RECON=true + else + rm -f "$RECON_TMP" + warn "Download failed — attempting local fallback..." + SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + LOCAL_RECON="$(dirname "$SCRIPT_DIR")/recon-skill/SKILL.md" + if [ -f "$LOCAL_RECON" ]; then + cp "$LOCAL_RECON" "$RECON_FILE" + success "/recon skill installed from local copy" + INSTALLED_RECON=true + else + soft_fail "Could not install /recon skill — download and local fallback both failed" + fi + fi +} + # ----------------------------------------------------------------------------- # Self-test — check each installed tool is registered # ----------------------------------------------------------------------------- @@ -344,6 +384,14 @@ run_self_test() { TEST_FAIL=$((TEST_FAIL + 1)) fi + if $INSTALLED_RECON; then + success "TEST: /recon skill installed" + TEST_PASS=$((TEST_PASS + 1)) + else + soft_fail "TEST: /recon skill not found" + TEST_FAIL=$((TEST_FAIL + 1)) + fi + echo "" if [ "$TEST_FAIL" -eq 0 ]; then echo -e " ${GREEN}All $TEST_PASS tests passed.${NC} ($TEST_SKIP skipped)" @@ -361,7 +409,7 @@ run_self_test() { print_summary() { echo "" echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" - echo -e "${GREEN} Step 7 Complete — GitHub CLI + MCP + /gitfix${NC}" + echo -e "${GREEN} Step 7 Complete — GitHub CLI + MCP + /gitfix + /recon${NC}" echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" echo "" @@ -373,6 +421,10 @@ print_summary() { echo " /gitfix — full-repo consistency audit: docs, scripts, and README all in sync" INSTALLED_COUNT=$((INSTALLED_COUNT + 1)) fi + if $INSTALLED_RECON; then + echo " /recon — pre-build prior-art sweep: ranks competitors, finds the edge before you build" + INSTALLED_COUNT=$((INSTALLED_COUNT + 1)) + fi if [ "$INSTALLED_COUNT" -eq 0 ]; then echo " No tools were installed." @@ -388,6 +440,7 @@ print_summary() { echo " - Ask Claude to create issues, review diffs, or push commits" fi echo " - Run /gitfix inside any Claude session to sync all docs with reality" + echo " - Run /recon before building anything to sweep what already exists" fi echo "" @@ -410,8 +463,8 @@ main() { echo "" echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" - echo -e "${BLUE} Step 7 — GitHub CLI + MCP + /gitfix${NC}" - echo -e "${BLUE} gh CLI + GitHub MCP + /gitfix skill • macOS + Linux${NC}" + echo -e "${BLUE} Step 7 — GitHub CLI + MCP + /gitfix + /recon${NC}" + echo -e "${BLUE} gh CLI + GitHub MCP + /gitfix + /recon skills • macOS + Linux${NC}" echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" echo "" @@ -428,8 +481,9 @@ main() { esac done - # /gitfix always installs (no interactive input required) + # /gitfix and /recon always install (no interactive input required) install_gitfix + install_recon run_self_test print_summary diff --git a/step-final/step-final-install.sh b/step-final/step-final-install.sh index 36a6c28..accf888 100755 --- a/step-final/step-final-install.sh +++ b/step-final/step-final-install.sh @@ -509,6 +509,15 @@ else TEST_FAIL=$((TEST_FAIL + 1)) fi +# Test 4b: /recon skill present (installed by Step 7) +if [ -s "$HOME/.claude/skills/recon/SKILL.md" ]; then + success "TEST: /recon skill present (installed by Step 7)" + TEST_PASS=$((TEST_PASS + 1)) +else + warn "TEST: /recon skill not found — run Step 7 to install it" + TEST_FAIL=$((TEST_FAIL + 1)) +fi + echo "" echo " $TEST_PASS tests passed, $TEST_FAIL failed." diff --git a/uninstall.sh b/uninstall.sh index 894dcd6..a3324bd 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -218,11 +218,11 @@ uninstall_safetycheck() { } # ----------------------------------------------------------------------------- -# Step 7 — GitHub MCP + /gitfix +# Step 7 — GitHub MCP + /gitfix + /recon # ----------------------------------------------------------------------------- uninstall_github() { echo "" - echo -e "${BLUE}--- Step 7: GitHub CLI + MCP + /gitfix ---${NC}" + echo -e "${BLUE}--- Step 7: GitHub CLI + MCP + /gitfix + /recon ---${NC}" # gh CLI — installed by Step 7 (pre-2026-04 installs had it in Step 3, so # removal here catches both layouts). @@ -248,6 +248,13 @@ uninstall_github() { else skip "Skill: /gitfix (not found)" fi + + if [ -d "$HOME/.claude/skills/recon" ]; then + rm -rf "$HOME/.claude/skills/recon" + success "Skill: /recon" + else + skip "Skill: /recon (not found)" + fi } # ----------------------------------------------------------------------------- @@ -344,7 +351,7 @@ uninstall_fidgetflo_stack() { for skill in \ fswarm fswarm1 fswarm2 fswarm3 fswarmmax \ fmini fmini1 fmini2 fmini3 fminimax \ - fhive w4w concise; do + fhive w4w concise bullets; do if [ -d "$HOME/.claude/skills/$skill" ]; then rm -rf "$HOME/.claude/skills/$skill" success "Skill: /$skill" diff --git a/update.sh b/update.sh index ecd34e7..e1e862f 100755 --- a/update.sh +++ b/update.sh @@ -104,7 +104,7 @@ main() { curl -fsSL "$BASE_URL/step-6/step-6-install.sh" | bash echo "" - # Step 7 (GitHub MCP + /gitfix) + # Step 7 (GitHub MCP + /gitfix + /recon) echo -e "${YELLOW}>>> Running Step 7 — GitHub${NC}" echo "" curl -fsSL "$BASE_URL/step-7/step-7-install.sh" | bash @@ -129,7 +129,7 @@ main() { echo "" echo " Available commands: cskip, ctg, cc, ccr, ccc" - echo " Available skills: /fswarm, /fmini, /fhive, /w4w, /concise, /safetycheck, /gitfix" + echo " Available skills: /fswarm, /fmini, /fhive, /w4w, /concise, /bullets, /safetycheck, /gitfix, /recon" echo " Swarm tiers: /fswarm{1,2,3,max}, /fmini{1,2,3,max} — 1=think, 2=think hard, 3=think harder, max=ultrathink" echo " Design + media: github.com/fidgetcoding/creativity-maxxing" echo " Second Brain: github.com/fidgetcoding/2ndBrain-mogging" From 5230c5346093d9d7eee3244cc2ada3ff4a28ee05 Mon Sep 17 00:00:00 2001 From: Nate Davidovich Date: Fri, 12 Jun 2026 19:57:05 -0400 Subject: [PATCH 14/16] fix: escape sed addresses in uninstall strip helpers; harden statusline + installer edge cases Swarm bug-hunt pass: uninstall.sh silently failed to remove brew shellenv / PATH lines (unescaped / broke the sed address under || true); statusline now survives malformed stdin and missing jq with zero stderr (verified on stock bash 3.2); step-4 drops a false-success branch + substring-grep MCP check; step-final jq merges check exit status; JetBrains font URL pinned to its release tag before /latest/ 404s it; Telegram token write umask-guarded; step-7 ps-visibility comment corrected; README uninstall list drops ffmpeg. All 26 fetched URLs verified 200; shellcheck clean. --- CHANGELOG.md | 8 +++++++ README.md | 2 +- step-2/ghostty-install.sh | 4 +++- step-4/step-4-install.sh | 7 ++++-- step-6/step-6-install.sh | 4 +++- step-7/step-7-install.sh | 4 +++- step-final/step-final-install.sh | 37 ++++++++++++++++++++++++++------ templates/statusline.sh | 14 ++++++++++++ uninstall.sh | 13 +++++++++-- 9 files changed, 79 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bffb1c5..21f0f49 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), - Step 5 — `2ndbrain-maxxing` references flipped to `2ndBrain-mogging` across `README-SECTIONS/` and `tests/`. ### Fixed +- `uninstall.sh` — `strip_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 WAGMI Apr-22 install-call bug catalog (`project_wagmi_install_bugs_2026_04_22.md`) — every WAGMI teammate hit silent FDA-permission errors on first launch. - Step 1-5 — anchored MCP grep patterns at `^:` 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). diff --git a/README.md b/README.md index 7b22536..2982a49 100644 --- a/README.md +++ b/README.md @@ -926,7 +926,7 @@ Removes the cli-maxxing aliases (`cskip`, `cc`, `ccr`, `ccc`), the `ctg` script, - Claude Code shell aliases (`cskip`, `cc`, `ccr`, `ccc`) and the `ctg` script (`~/.local/bin/ctg`). `cbrain` and `cbraintg` are managed by 2ndBrain-mogging — not removed here. - All MCPs installed by this repo: FidgetFlo, Notion, Granola, n8n, Google Calendar, Morgen, Motion Calendar, Playwright, SwiftKit, Superhuman, Google Drive, GitHub — design + media MCPs are managed by [creativity-maxxing](https://github.com/fidgetcoding/creativity-maxxing); Obsidian is managed by [2ndBrain-mogging](https://github.com/fidgetcoding/2ndBrain-mogging) - All skills: `fswarm*`, `fmini*`, `fhive`, `w4w`, `concise`, `bullets`, `gitfix`, `recon`, `safetycheck` — UI/UX Pro Max + Taste Skill pack + Remotion are managed by creativity-maxxing -- Dev tools: pandoc, jq, ripgrep, tree, fzf, wget, weasyprint, ffmpeg, xlsx2csv, poppler +- Dev tools: pandoc, jq, ripgrep, tree, fzf, wget, weasyprint, xlsx2csv, poppler (ffmpeg is creativity-maxxing's — not touched here) - GitHub CLI (`gh` — installed by Step 7 alongside the GitHub MCP + /gitfix + /recon skills) - Motion Calendar config (`~/.motion-mcp/`) - Google Calendar config (`~/.google-calendar-mcp/`) diff --git a/step-2/ghostty-install.sh b/step-2/ghostty-install.sh index 9d0fc61..ddcc6ac 100755 --- a/step-2/ghostty-install.sh +++ b/step-2/ghostty-install.sh @@ -172,7 +172,9 @@ install_font() { FONT_DIR="$HOME/.local/share/fonts" mkdir -p "$FONT_DIR" TMPDIR_FONT=$(mktemp -d) - curl -fsSL "https://github.com/JetBrains/JetBrainsMono/releases/latest/download/JetBrainsMono-2.304.zip" -o "$TMPDIR_FONT/jbmono.zip" 2>/dev/null + # Pinned release tag, not /latest/ — a version-numbered asset under + # /latest/ 404s the moment JetBrains ships a newer release. + curl -fsSL "https://github.com/JetBrains/JetBrainsMono/releases/download/v2.304/JetBrainsMono-2.304.zip" -o "$TMPDIR_FONT/jbmono.zip" 2>/dev/null if [ -f "$TMPDIR_FONT/jbmono.zip" ]; then unzip -q "$TMPDIR_FONT/jbmono.zip" -d "$TMPDIR_FONT/jbmono" 2>/dev/null find "$TMPDIR_FONT/jbmono" -name "*.ttf" -exec cp {} "$FONT_DIR/" \; diff --git a/step-4/step-4-install.sh b/step-4/step-4-install.sh index 3a4d434..203b14a 100755 --- a/step-4/step-4-install.sh +++ b/step-4/step-4-install.sh @@ -101,7 +101,8 @@ install_fidgetflo() { elif npx fidgetflo --version &>/dev/null 2>&1; then success "fidgetflo CLI available via npx" else - success "fidgetflo CLI installed" + # Neither the global binary nor npx could run it — don't claim success. + warn "fidgetflo CLI could not be verified — check with 'npm ls -g fidgetflo' in a new terminal" fi } @@ -128,7 +129,9 @@ configure_mcp() { warn "MCP add command may not have worked. Trying direct config..." local CLAUDE_MCP_CONFIG="$HOME/.claude/claude_mcp_config.json" if [ -f "$CLAUDE_MCP_CONFIG" ]; then - if ! grep -q "fidgetflo" "$CLAUDE_MCP_CONFIG" 2>/dev/null; then + # Structural check (not substring grep) — "fidgetflo" appearing in + # another server's args must not skip the registration. + if ! jq -e '.mcpServers.fidgetflo' "$CLAUDE_MCP_CONFIG" >/dev/null 2>&1; then jq '.mcpServers["fidgetflo"] = {"command": "npx", "args": ["-y", "fidgetflo"]}' "$CLAUDE_MCP_CONFIG" > "${CLAUDE_MCP_CONFIG}.tmp" \ && mv "${CLAUDE_MCP_CONFIG}.tmp" "$CLAUDE_MCP_CONFIG" fi diff --git a/step-6/step-6-install.sh b/step-6/step-6-install.sh index 5ead8c9..363bb73 100755 --- a/step-6/step-6-install.sh +++ b/step-6/step-6-install.sh @@ -170,7 +170,9 @@ if [ "$SKIP_TOKEN" = false ]; then info "Saving bot token..." mkdir -p "$CONFIG_DIR" chmod 700 "$CONFIG_DIR" - echo "TELEGRAM_BOT_TOKEN=$BOT_TOKEN" > "$TOKEN_FILE" + # umask-guarded write: the file is born 0600 — no window where a + # permissive default umask leaves the token world-readable. + (umask 077; echo "TELEGRAM_BOT_TOKEN=$BOT_TOKEN" > "$TOKEN_FILE") chmod 600 "$TOKEN_FILE" success "Token saved to $TOKEN_FILE (permissions: 600)" fi diff --git a/step-7/step-7-install.sh b/step-7/step-7-install.sh index c3b9152..5b964d5 100755 --- a/step-7/step-7-install.sh +++ b/step-7/step-7-install.sh @@ -247,7 +247,9 @@ install_github() { # that one's been retired in favor of github/github-mcp-server, which runs # as a remote HTTP server behind GitHub's API domain. The PAT is passed as # a Bearer token via -H so it lives in Claude's MCP config, never on disk - # in this repo and never in `ps` output. + # in this repo. (It is briefly visible in the local process list while + # `claude mcp add` runs — unavoidable with argv-passed headers; fine on a + # single-user machine.) claude mcp add --scope user --transport http github \ https://api.githubcopilot.com/mcp \ -H "Authorization: Bearer $GITHUB_TOKEN" 2>/dev/null diff --git a/step-final/step-final-install.sh b/step-final/step-final-install.sh index accf888..b99c6ea 100755 --- a/step-final/step-final-install.sh +++ b/step-final/step-final-install.sh @@ -78,12 +78,26 @@ cat > "$HOME/.claude/statusline.sh" << 'STATUSLINE_EOF' input=$(cat) +# jq is required to parse Claude Code's stdin JSON (installed in Step 3). +# Without it, emit a minimal static line instead of spraying errors. +if ! command -v jq >/dev/null 2>&1; then + echo "Claude (jq missing — run Step 3)" + exit 0 +fi + # Parse Claude Code's JSON input MODEL=$(echo "$input" | jq -r '.model.display_name // "Opus 4.6"' 2>/dev/null) CTX=$(echo "$input" | jq -r '.context_window.used_percentage // 0' 2>/dev/null | cut -d. -f1) DURATION_MS=$(echo "$input" | jq -r '.cost.total_duration_ms // 0' 2>/dev/null) CWD=$(echo "$input" | jq -r '.workspace.current_dir // ""' 2>/dev/null) +# Harden against malformed stdin: jq exits non-zero and leaves these empty, +# which would otherwise blow up the arithmetic below with stderr noise. +[ -z "$MODEL" ] && MODEL="Claude" +[ -z "$CTX" ] && CTX=0 +DURATION_MS="${DURATION_MS%%.*}"; DURATION_MS="${DURATION_MS//[^0-9]/}" +[ -z "$DURATION_MS" ] && DURATION_MS=0 + # Format duration if [ "$DURATION_MS" != "0" ] && [ "$DURATION_MS" != "null" ]; then SECS=$((${DURATION_MS%.*} / 1000)) @@ -257,8 +271,16 @@ if [ -f "$SETTINGS_FILE" ]; then else # Use jq to merge if available, otherwise warn if command -v jq &>/dev/null; then - jq '. + {"statusLine": {"type": "command", "command": "~/.claude/statusline.sh"}}' "$SETTINGS_FILE" > "$SETTINGS_FILE.tmp" && mv "$SETTINGS_FILE.tmp" "$SETTINGS_FILE" - success "Status line added to settings.json" + if jq '. + {"statusLine": {"type": "command", "command": "~/.claude/statusline.sh"}}' "$SETTINGS_FILE" > "$SETTINGS_FILE.tmp" 2>/dev/null \ + && mv "$SETTINGS_FILE.tmp" "$SETTINGS_FILE"; then + success "Status line added to settings.json" + else + # jq failed (settings.json is probably invalid JSON) — don't + # claim success, and don't leave the temp file behind. + rm -f "$SETTINGS_FILE.tmp" + warn "Could not merge into settings.json (invalid JSON?) — add this manually:" + echo ' "statusLine": {"type": "command", "command": "~/.claude/statusline.sh"}' + fi else warn "jq not available — add this to your ~/.claude/settings.json manually:" echo ' "statusLine": {"type": "command", "command": "~/.claude/statusline.sh"}' @@ -286,10 +308,13 @@ info "Checking for project-level statusLine overrides..." FOUND_OVERRIDES=0 while IFS= read -r PROJECT_SETTINGS; do if command -v jq &>/dev/null && jq -e '.statusLine' "$PROJECT_SETTINGS" &>/dev/null 2>&1; then - jq 'del(.statusLine)' "$PROJECT_SETTINGS" > "${PROJECT_SETTINGS}.tmp" \ - && mv "${PROJECT_SETTINGS}.tmp" "$PROJECT_SETTINGS" - warn "Removed statusLine override from: $PROJECT_SETTINGS" - FOUND_OVERRIDES=$((FOUND_OVERRIDES + 1)) + if jq 'del(.statusLine)' "$PROJECT_SETTINGS" > "${PROJECT_SETTINGS}.tmp" 2>/dev/null \ + && mv "${PROJECT_SETTINGS}.tmp" "$PROJECT_SETTINGS"; then + warn "Removed statusLine override from: $PROJECT_SETTINGS" + FOUND_OVERRIDES=$((FOUND_OVERRIDES + 1)) + else + rm -f "${PROJECT_SETTINGS}.tmp" + fi fi done < <(find "$HOME/Desktop" "$HOME/Documents" -maxdepth 5 -path "*/.claude/settings.json" -not -path "$HOME/.claude/settings.json" 2>/dev/null) if [ "$FOUND_OVERRIDES" -eq 0 ]; then diff --git a/templates/statusline.sh b/templates/statusline.sh index 8af970a..149a36b 100755 --- a/templates/statusline.sh +++ b/templates/statusline.sh @@ -4,12 +4,26 @@ input=$(cat) +# jq is required to parse Claude Code's stdin JSON (installed in Step 3). +# Without it, emit a minimal static line instead of spraying errors. +if ! command -v jq >/dev/null 2>&1; then + echo "Claude (jq missing — run Step 3)" + exit 0 +fi + # Parse Claude Code's JSON input MODEL=$(echo "$input" | jq -r '.model.display_name // "Opus 4.6"' 2>/dev/null) CTX=$(echo "$input" | jq -r '.context_window.used_percentage // 0' 2>/dev/null | cut -d. -f1) DURATION_MS=$(echo "$input" | jq -r '.cost.total_duration_ms // 0' 2>/dev/null) CWD=$(echo "$input" | jq -r '.workspace.current_dir // ""' 2>/dev/null) +# Harden against malformed stdin: jq exits non-zero and leaves these empty, +# which would otherwise blow up the arithmetic below with stderr noise. +[ -z "$MODEL" ] && MODEL="Claude" +[ -z "$CTX" ] && CTX=0 +DURATION_MS="${DURATION_MS%%.*}"; DURATION_MS="${DURATION_MS//[^0-9]/}" +[ -z "$DURATION_MS" ] && DURATION_MS=0 + # Format duration if [ "$DURATION_MS" != "0" ] && [ "$DURATION_MS" != "null" ]; then SECS=$((${DURATION_MS%.*} / 1000)) diff --git a/uninstall.sh b/uninstall.sh index a3324bd..e20f0d0 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -112,7 +112,12 @@ strip_line() { local file="$2" [ -f "$file" ] || return 0 if grep -q "$pattern" "$file" 2>/dev/null; then - sed -i.bak "/$pattern/d" "$file" 2>/dev/null || true + # Escape '/' before interpolating into the /.../d address — patterns + # containing paths (brew shellenv, $HOME/.local/bin) would otherwise + # break the sed address, fail silently under `|| true`, and leave the + # line behind while we report success. + local sed_pat=${pattern//\//\\/} + sed -i.bak "/$sed_pat/d" "$file" 2>/dev/null || true rm -f "${file}.bak" return 0 fi @@ -129,7 +134,11 @@ strip_block() { local file="$3" [ -f "$file" ] || return 0 if grep -q "$start" "$file" 2>/dev/null; then - sed -i.bak "/$start/,/$end/d" "$file" 2>/dev/null || true + # Same '/' escaping as strip_line — keeps path-bearing patterns from + # breaking the sed range address. + local sed_start=${start//\//\\/} + local sed_end=${end//\//\\/} + sed -i.bak "/$sed_start/,/$sed_end/d" "$file" 2>/dev/null || true rm -f "${file}.bak" return 0 fi From 93dca42d7223368ed442e621e50e2aa5dcf97ae5 Mon Sep 17 00:00:00 2001 From: Nate Davidovich Date: Fri, 12 Jun 2026 20:20:45 -0400 Subject: [PATCH 15/16] fix(security): make gitleaks-missing failure explicit + add Ubuntu apt guidance MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When gitleaks is absent the installer now states outright that the pre-commit hook was NOT installed (on stderr) and exits 1, and the Linux guidance gains 'sudo apt install gitleaks' (works on Ubuntu 24.04) alongside the existing releases pointer. Verified by execution: missing gitleaks → exit 1, no hook written; gitleaks present → hook installed and executable. --- scripts/install-pre-commit-hook.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/scripts/install-pre-commit-hook.sh b/scripts/install-pre-commit-hook.sh index 291fe94..cbc930f 100755 --- a/scripts/install-pre-commit-hook.sh +++ b/scripts/install-pre-commit-hook.sh @@ -7,9 +7,11 @@ REPO_ROOT="$(git rev-parse --show-toplevel)" HOOK="$REPO_ROOT/.git/hooks/pre-commit" if ! command -v gitleaks &>/dev/null; then - echo "❌ gitleaks not found on PATH." - echo " macOS: brew install gitleaks" - echo " Linux: https://github.com/gitleaks/gitleaks/releases" + echo "❌ gitleaks not found on PATH — pre-commit hook NOT installed." >&2 + echo " Install gitleaks, then re-run this script:" >&2 + echo " macOS: brew install gitleaks" >&2 + echo " Linux: sudo apt install gitleaks (Ubuntu 24.04+)" >&2 + echo " or grab a release: https://github.com/gitleaks/gitleaks/releases" >&2 exit 1 fi From f554339108e70899f6fb32ada09bf47aa4b48868 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Jun 2026 20:42:14 +0000 Subject: [PATCH 16/16] chore(deps): bump actions/checkout from 4.2.2 to 7.0.0 Bumps [actions/checkout](https://github.com/actions/checkout) from 4.2.2 to 7.0.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/11bd71901bbe5b1630ceea73d27597364c9af683...9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/lint.yml | 6 +++--- .github/workflows/security.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index b01c177..b6555bf 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -28,7 +28,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Run ShellCheck uses: ludeeus/action-shellcheck@00cae500b08a931fb5698e11e79bfbd38e612a38 # v2.0.0 with: @@ -41,7 +41,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Parse every shell script with bash -n run: | failed=0 @@ -66,7 +66,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 5 steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Assert step-5 advertises Vercel MCP (option 11) run: | if ! grep -q '11) Vercel' step-5/step-5-install.sh; then diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml index 3c4abf4..0e1581f 100644 --- a/.github/workflows/security.yml +++ b/.github/workflows/security.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Run ShellCheck at error severity uses: ludeeus/action-shellcheck@00cae500b08a931fb5698e11e79bfbd38e612a38 # v2.0.0 with: @@ -34,7 +34,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: fetch-depth: 0 - name: Scan for hardcoded secrets @@ -53,7 +53,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Check SKILL_URL in step-8 run: | COMMIT=$(grep 'SKILL_COMMIT=' step-8/step-8-install.sh | head -1 | cut -d'"' -f2)