Skip to content

Commit cfb973b

Browse files
committed
fix(privacy): de-personalize installed skill payload + add PII gate
Every skill file here is written into a recipient's ~/.claude/skills/ by the installers, so maintainer-specific prose became instructions to somebody else's Claude — including a full client roster in concise-skill/references/copywriting.md that reached a client's own team. A downstream scrub landed 2026-06-23; upstream never followed, and the 2026-08-17 digest overwrote it. - Rewrite skill prose in the second person; drop the client/project roster, private vault paths, and operator-specific timezone/commit/name rules. - Replace the personal overrides block with an "Operator overrides (fill these in)" template so recipients configure their own. - Genericize example values in cheat sheets and the install-flow walkthrough. - Add scripts/check-pii.sh with two tiers: generic markers (real home paths, bare emails) live in the script; the private roster is supplied at runtime from .pii-patterns.local locally and the PII_EXTRA_PATTERNS secret in CI, so the list itself never ships in a public repo. - Wire it into .github/workflows/security.yml and the pre-commit hook so a reintroduction fails locally and again on push. Attribution in README/LICENSE/SECURITY/CHANGELOG is unchanged and allowlisted.
1 parent d31e025 commit cfb973b

23 files changed

Lines changed: 352 additions & 76 deletions

File tree

.github/workflows/security.yml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,32 @@ jobs:
4848
fi
4949
echo "No hardcoded secrets detected"
5050
51+
pii-guard:
52+
name: Personal-context guard
53+
runs-on: ubuntu-latest
54+
timeout-minutes: 10
55+
steps:
56+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
57+
- name: Block maintainer PII and client names in shippable files
58+
env:
59+
# Private marker list (client/project roster, vault name). Kept in a
60+
# secret so the roster never appears in this public repo — a hardcoded
61+
# list would publish the exact thing the guard protects. Generic checks
62+
# (real home paths, bare emails) run even when the secret is unset.
63+
PII_EXTRA_PATTERNS: ${{ secrets.PII_EXTRA_PATTERNS }}
64+
run: |
65+
# Every skill file here installs into somebody else's ~/.claude/skills/.
66+
# Personal names, client rosters, and private vault paths must not ship.
67+
# Regression on 2026-08-17: an update overwrote a downstream scrub and
68+
# redistributed the client roster to 5 external installers.
69+
if [ -z "${PII_EXTRA_PATTERNS:-}" ]; then
70+
echo "::warning::PII_EXTRA_PATTERNS secret is unset — only generic checks ran. Set it in repo settings for full roster coverage."
71+
fi
72+
if ! ./scripts/check-pii.sh; then
73+
echo "::error::Personal operating context detected in shippable files — see matches above"
74+
exit 1
75+
fi
76+
5177
download-url-check:
5278
name: Verify pinned download URLs are reachable
5379
runs-on: ubuntu-latest

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,6 @@ credentials.json
2727

2828
# Node (defensive — step scripts may install deps)
2929
node_modules/
30+
31+
# Private PII marker list for scripts/check-pii.sh — never commit.
32+
.pii-patterns.local

.pii-patterns.local.example

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# .pii-patterns.local.example
2+
#
3+
# Copy to `.pii-patterns.local` (gitignored) and fill in YOUR OWN private
4+
# markers. scripts/check-pii.sh reads that file and fails any commit or push
5+
# that would ship one of these strings in the pack.
6+
#
7+
# Why this file is separate: the pack is public. If the roster lived in
8+
# scripts/check-pii.sh, the guard would publish the exact thing it protects.
9+
# Keep the real list here (local) and in the PII_EXTRA_PATTERNS repo secret (CI).
10+
#
11+
# Format: one POSIX extended regex per line. Blank lines and # comments ignored.
12+
# They are joined with `|`, so keep each line a self-contained alternative.
13+
14+
# --- Your name, as it must never appear in shippable skill prose -------------
15+
# The skills install into other people's machines; a name here becomes an
16+
# instruction to address THEM by YOUR name.
17+
#YourFirstName
18+
#YourFullName
19+
#your-macos-username
20+
21+
# --- Your client and project codenames --------------------------------------
22+
# This is the important one. A client roster in a skill file can reach a
23+
# different client's team.
24+
#CLIENT-ONE
25+
#CLIENT-TWO
26+
#PROJECT-CODENAME
27+
28+
# --- Your private vault / working directory names ----------------------------
29+
#MYVAULT
30+
31+
# --- Anything else you would not want a stranger's Claude to read aloud ------
32+
#your-private-domain\.com

CHANGELOG.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
1616
- **`/landing-ab` skill** — self-driving landing pages per the 5-level PostHog ladder (static → watch → test → auto-iterate → personalize). Every new landing page ships with a `signup-cta`-tagged CTA, PostHog autocapture + heatmaps wired at build time, a `landing-ab` feature-flag stub, and a `docs/LP-OPS.md` carrying the L3–L5 playbook (95%+ / ≥50-exposure test calls, weekly PostHog-MCP optimizer loop, cohort personalization). Vendored at `landing-ab-skill/` (SKILL.md + companion UserPromptSubmit hook `landing-ab-intent.sh`). Listed in the `install.sh` skill summary; not yet wired into a step installer.
1717
- **`/agent-business` skill** — turn any app into an AI agent business via the 6-op playbook: pick market → reverse-engineer the data → stack (Claude + n8n + Postgres) → messaging hookup (LoopMessage / Twilio / Unipile) → inbound brain → proactive coach cron. Phone-number-keyed schema, log tools per signal, 2-texts-a-day cap. Vendored at `agent-business-skill/` (single SKILL.md). Listed in the `install.sh` skill summary; not yet wired into a step installer.
1818
- **`/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.
19-
- **`/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.
19+
- **`/recon` skill** (step 7) — pre-build prior-art reconnaissance. On build-intent ("build / make / start a new X", "does X exist?") it offers a one-line prompt first (never auto-runs — you sometimes clone a known paid tool on purpose), then sweeps GitHub via the `gh` CLI + the web for existing free and paid options, ranks the top ~10 in a comparison table, finds the edge (or honestly calls it a red ocean), and ends with a GREEN/YELLOW/RED verdict. Output is a discussion, not code. Vendored at `recon-skill/` (single SKILL.md). Installed by Step 7 alongside `/gitfix` (depends on the `gh` CLI Step 7 already installs); no PAT needed. Step 7 installer downloads from `fidgetcoding/cli-maxxing/main` via curl with a local fallback, the non-interactive path installs it too, and the self-test asserts SKILL.md landed. Listed across `README.md`, `CHEATSHEET.md`, `README-SECTIONS/cheat-sheet.md`, `install.sh` + `update.sh` summaries, `step-final` self-test, and the `uninstall.sh` Step 7 removal.
2020
- **`/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.
21-
- `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.
21+
- `pdf-skill` — markdown→PDF renderer enforcing a consistent house style (single H1 from frontmatter `title:`, strips body H1 / Purpose / Internal notes / Sources sections by default). Pandoc + WeasyPrint. Opt back in to dropped sections via `--keep-notes` / `--keep-sources`. Mirror of the global `~/.claude/skills/pdf/` skill.
2222
- README: social-links badge strip (X · LinkedIn · YouTube · Instagram, ruvnet-style for-the-badge) inserted into the centered header block beneath the banner.
2323
- **`cbrain` + `cbraintg` shell shortcuts** (step 10.9) — quick-launch aliases for the Brain² + Telegram-bridged sessions.
2424
- Step 5 — full upstream URL verification across all five external MCPs (morgen / motion / playwright / granola / n8n).

CHEATSHEET.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ These are available in your terminal after Step 4 installs the FidgetFlo CLI.
274274
| Swarm not responding | Run `npx fidgetflo@latest doctor --fix` to diagnose |
275275
| MCP tools not connecting | Exit Claude, run `claude mcp list` to check connections, then relaunch |
276276
| `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. |
277-
| 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. |
277+
| 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., `~/MyVault`). Avoid `~/Desktop/...` — macOS TCC protection breaks CLI access to the Desktop. |
278278
| Shift+Return acts like Enter | Try Option+Enter as an alternative for multi-line input |
279279

280280
---

README-SECTIONS/cheat-sheet.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ These are available in your terminal after Step 4 installs the FidgetFlo CLI.
204204
| Swarm not responding | Run `npx fidgetflo@latest doctor --fix` to diagnose |
205205
| MCP tools not connecting | Exit Claude, run `claude mcp list` to check connections, then relaunch |
206206
| `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. |
207-
| 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. |
207+
| 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., `~/MyVault`). Avoid `~/Desktop/...` — macOS TCC protection breaks CLI access to the Desktop. |
208208
| Shift+Return acts like Enter | Try Option+Enter as an alternative for multi-line input |
209209

210210
---

agent-business-skill/SKILL.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
---
22
name: agent-business
3-
description: Turn any app or human service into an AI agent business (Angus Sewell 6-op playbook, 2026-07-03). Use whenever Nate wants to build an AI agent that texts clients, a texting coach/tutor/advisor/consultant agent, an SMS/iMessage/WhatsApp agent, a service-as-an-agent business, or says "turn this app into an agent", "AI coach business", "agent that replaces a [coach/tutor/advisor]", or wants the app-to-agent playbook applied to a market. Also invocable directly as /agent-business.
3+
description: Turn any app or human service into an AI agent business (Angus Sewell 6-op playbook, 2026-07-03). Use whenever the user wants to build an AI agent that texts clients, a texting coach/tutor/advisor/consultant agent, an SMS/iMessage/WhatsApp agent, a service-as-an-agent business, or says "turn this app into an agent", "AI coach business", "agent that replaces a [coach/tutor/advisor]", or wants the app-to-agent playbook applied to a market. Also invocable directly as /agent-business.
44
---
55

66
# /agent-business — turn any app into an AI agent business
77

88
Every winning app is a cheap self-serve version of a service humans pay far more for. Rebuild that human service as an AI agent living between app and human: same outcome, fraction of the human's price. Worked example: texting AI fitness coach at $700/mo vs a $1,500+/mo human coach.
99

10-
**Source of truth:** `/Users/nathandavidovich/BRAIN2/02-Sources/SRC-2026-07-03-agent-business-build-guide.md` (archived PDF alongside).
10+
**Source:** Angus Sewell's app-to-agent build guide (2026-07-03).
1111

1212
Run the 6 ops in order. Each op below = objective + the moves. Verbatim prompts live in the source note — pull them when executing.
1313

bullets-skill/SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,4 @@ Each bullet ≤ ~12 words. If one runs long, it's two facts → split. A dense p
5353

5454
## Boundaries
5555

56-
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.
56+
This is chat/handoff formatting, not a copy deliverable — `/copywriting` does not apply. Your operator overrides still hold: name/spelling rules, absolute paths, your timezone convention.

0 commit comments

Comments
 (0)