Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
523 commits
Select commit Hold shift + click to select a range
ea116b2
cma-generator: real-MLS-chart rule, em-dash ban, relist-tone rule, in…
Graehamwatts May 27, 2026
fde88b1
cma-generator: add past-client-mode reference (home value update layer)
Graehamwatts May 27, 2026
d5ffa5f
Add farming-postcard skill: 6x4 print-ready postcard generator with l…
Graehamwatts May 27, 2026
4bbd2ea
PCFS: autobuild SKILL drafts→sends; daily Sharon/CMA; new watchdog
Graehamwatts May 27, 2026
f62a183
farming-postcard: add Step 7 auto-publish to online-content archive +…
Graehamwatts May 27, 2026
812c89d
farming-postcard: log test fire run + cache 4 options for June 15 (pe…
Graehamwatts May 27, 2026
e45cbb6
farming-postcard: on-brand email template + SMTP send script + Peter …
Graehamwatts May 27, 2026
fe40f00
farming-postcard: log real SMTP send 2026-05-27 — pipeline confirmed …
Graehamwatts May 28, 2026
f2f8d88
farming-postcard: full pipeline test 2026-05-27 — fresh remixed headl…
Graehamwatts May 28, 2026
2de251c
cma-generator: 5 new rules (pricing ranges, heat map, price-reduction…
Graehamwatts May 28, 2026
045ae06
cma-generator: lock canonical dashboard template (based on Bradley CM…
Graehamwatts May 28, 2026
0296eff
cma-generator: lock canonical section order + Pre-List Prep optional …
Graehamwatts May 28, 2026
0de93e2
cma-generator: refresh canonical template (second-person voice, Pre-L…
Graehamwatts May 28, 2026
ed56bdd
cma-generator: add second-person voice rule (writes directly to seller)
Graehamwatts May 28, 2026
1a44d28
cma-generator: refresh template to v7 (Path A no net math, Path B pre…
Graehamwatts May 28, 2026
1a6a4f2
Add Switchy clicks dashboard
Graehamwatts May 28, 2026
f357140
Add Switchy baseline snapshot
Graehamwatts May 28, 2026
027a9c3
Add Switchy Monday email template
Graehamwatts May 28, 2026
72328e8
Add switchy-engine skill
Graehamwatts May 28, 2026
6e5e3fe
Add switchy-engine skill
Graehamwatts May 28, 2026
1c47945
Add switchy-engine skill
Graehamwatts May 28, 2026
f95fe07
Add switchy-engine skill
Graehamwatts May 28, 2026
763e5b6
Add switchy-engine skill
Graehamwatts May 28, 2026
fec4a95
Add switchy-engine skill
Graehamwatts May 28, 2026
1e66ab4
Add switchy-engine skill
Graehamwatts May 28, 2026
541faa0
Add switchy-engine skill
Graehamwatts May 28, 2026
4851901
Add switchy-engine skill
Graehamwatts May 28, 2026
4da5200
Add switchy-engine skill
Graehamwatts May 28, 2026
a5d5eca
Add switchy shared constants
Graehamwatts May 28, 2026
27bf076
Wire farming-postcard QR router to Switchy
Graehamwatts May 28, 2026
889a139
Add QR generation workflow to switchy-engine
Graehamwatts May 29, 2026
faae46b
CMA past-client mode: add MANDATORY CHECKLIST; enforce all 5 charts +…
Graehamwatts May 29, 2026
0fe8378
Add switchy package: EMAIL-to-Peter-generate-QR.html
Graehamwatts May 29, 2026
f45d534
Add switchy package: Farming_Postcard_EPA_06_01_26_IMPROVED.html
Graehamwatts May 29, 2026
6595d1a
Add switchy package: SWITCHY-INTEGRATION-BRIEF.md
Graehamwatts May 29, 2026
b425c79
Add switchy package: switchy-engine.skill
Graehamwatts May 29, 2026
d682114
Add switchy package: switchy_LIVE_report.md
Graehamwatts May 29, 2026
207736d
Peter email: add Jason alias
Graehamwatts May 29, 2026
c4dc9db
Weekly Switchy dashboard refresh (test run)
Graehamwatts May 29, 2026
5101619
Snapshot (test run)
Graehamwatts May 29, 2026
8c534b1
Add real SMTP sender for weekly report
Graehamwatts May 29, 2026
d220a06
Add switchy-qr (Peter QR-only skill)
Graehamwatts May 29, 2026
81f87c2
Add switchy-qr link creator
Graehamwatts May 29, 2026
23cd3a2
Add installable switchy-qr.skill for Peter
Graehamwatts May 29, 2026
2fb6acb
Peter email: point at switchy-qr
Graehamwatts May 29, 2026
2f8c5b6
Peter email: download link instead of attachment
Graehamwatts May 29, 2026
b7c7c97
Fix sender: drop empty mixed wrapper (was dropping no-attachment mail)
Graehamwatts May 29, 2026
3d88be3
cma-generator: lock canonical Buyer Mode template (based on 1430 Chil…
Graehamwatts May 30, 2026
bf96db1
chore(switchy): weekly Monday refresh index.html (2026-06-01)
Graehamwatts Jun 1, 2026
5fbb0a2
chore(switchy): weekly Monday refresh switchy-snapshot-2026-06-01.jso…
Graehamwatts Jun 1, 2026
4acb19d
Add listing-call-sheet skill (Hybrid Production call-sheet builder: c…
Graehamwatts Jun 1, 2026
a4cf720
listing-call-sheet: visual HTML dashboard output + Gmail-draft distri…
Graehamwatts Jun 1, 2026
ac783de
listing-call-sheet: save crew recipients (Wesley + editor inboxes); d…
Graehamwatts Jun 1, 2026
37c79e8
Production-reliability fixes: dynamic b-roll coverage, generation QC …
Graehamwatts Jun 2, 2026
0119280
Production-reliability fixes: dynamic b-roll coverage, generation QC …
Graehamwatts Jun 2, 2026
794e811
wmg: title-card carve-out + Downloads-as-default rule
Graehamwatts Jun 2, 2026
b8efff8
Geo-broadening: add Tier 4 broader-market sources + IG/FB geo-targeti…
Graehamwatts Jun 2, 2026
d2ebac5
Add Static/News-Headline Card format + image design rules (dynamic-is…
Graehamwatts Jun 2, 2026
cfe6e61
engine: fix em-dash/uptalk in ElevenLabs guide; add TTS normalization…
Graehamwatts Jun 2, 2026
3807b26
engine: fix em-dash/uptalk in ElevenLabs guide; TTS normalization + a…
Graehamwatts Jun 3, 2026
aca768b
engine: align b-roll to agreed production standards (floors 8-14/40+,…
Graehamwatts Jun 3, 2026
caab3f6
engine: video-workflow refinements (em-dash/uptalk fix, TTS normaliza…
Graehamwatts Jun 3, 2026
6e05615
content-creation-engine: video-workflow fixes (em-dash/uptalk, TTS no…
Graehamwatts Jun 3, 2026
c86055c
property-underwriter skill: add skills/property-underwriter/SKILL.md
Graehamwatts Jun 3, 2026
51d69f8
property-underwriter skill: add skills/property-underwriter/reference…
Graehamwatts Jun 3, 2026
d1f315b
cinematic-trailer-pipeline: new skill encoding the Last 47 Days produ…
Graehamwatts Jun 3, 2026
f324b5f
cinematic-trailer-pipeline: lock title/hero card typography & spacing…
Graehamwatts Jun 4, 2026
f19e180
meta-ads: new skill (official Meta Ads MCP, mcp.facebook.com/ads) + e…
Graehamwatts Jun 8, 2026
48842d7
PCFS: add Zero-Guard (trust-no-zero) rule + schedule fork warning (20…
Graehamwatts Jun 8, 2026
3274491
integrations.md: Windsor gohighlevel license EXPIRED (2026-06-07) + s…
Graehamwatts Jun 8, 2026
64cb74b
PCFS: schedule fork RESOLVED - unified 2026+2027 rebuild executed, ba…
Graehamwatts Jun 8, 2026
6dc313d
cma-generator: mandatory full format incl. actives/pendings, new-list…
Graehamwatts Jun 8, 2026
6a103d2
cma-generator: price-below-AVM rule when active tier is cutting (Glor…
Graehamwatts Jun 8, 2026
4b5e69f
Switchy dashboard refresh — week of 2026-06-08 (16,033 clicks)
Graehamwatts Jun 8, 2026
d8b4844
Switchy snapshot 2026-06-08
Graehamwatts Jun 8, 2026
56d1f7f
cma-generator: ban data-source/MLS caveats in client output; add mont…
Graehamwatts Jun 8, 2026
cc1891b
past_client_mode: ban data-source caveats, require referral CTA + mon…
Graehamwatts Jun 8, 2026
82c7920
PCFS: home-value-update output must follow cma-generator banned-langu…
Graehamwatts Jun 8, 2026
79f4c3c
cma-generator past-client mode: warm CMA opener + required referral C…
Graehamwatts Jun 8, 2026
c06ec4c
PCFS: CMA/home-value output rule (no source caveats, referral CTA close)
Graehamwatts Jun 8, 2026
7d931c7
cma-generator: net sheet BANNED by default (never voluntary); Recomme…
Graehamwatts Jun 8, 2026
3cc1a18
Add .gitignore to keep credential/token files out of the repo
Graehamwatts Jun 9, 2026
0d52d1d
Restore original .gitignore + add credential-file rules (fix accident…
Graehamwatts Jun 9, 2026
0692bb7
cma-generator: ban defensive openers (no "I want to be straight with …
Graehamwatts Jun 9, 2026
bb24581
Local session work: 11 new skills (farming-postcard, finance-watch, l…
Graehamwatts Jun 9, 2026
ec02180
Merge remote-tracking branch 'origin/main'
Graehamwatts Jun 9, 2026
29fdf20
Restore full pcfs-cma-autobuild-weekly SKILL.md (remote copy was trun…
Graehamwatts Jun 9, 2026
d3066be
Session net: gitignore hardening (online_content_files, credentials),…
Graehamwatts Jun 10, 2026
b097625
finance-watch: record 2026-06-09 consolidation — master is 'Finances …
Graehamwatts Jun 10, 2026
e7a1bf1
Auto-sync: session-end commit 2026-06-09 18:10
Graehamwatts Jun 10, 2026
2a3bae7
finance-watch: Balances sync (12 accts, daily 6:15am) + Missing Recei…
Graehamwatts Jun 10, 2026
efcefe5
finance-watch: live dashboard web app (n8n GET webhook, key-gated, re…
Graehamwatts Jun 10, 2026
cb8ca7f
Auto-sync: session-end commit 2026-06-09 22:15
Graehamwatts Jun 10, 2026
7ef5f67
Auto-sync: session-end commit 2026-06-09 22:28
Graehamwatts Jun 10, 2026
50822f4
Auto-sync: session-end commit 2026-06-09 22:36
Graehamwatts Jun 10, 2026
37f58f8
Skills overhaul: split 7 oversized SKILL.mds into core+references (co…
Graehamwatts Jun 10, 2026
099bd45
offer-analyzer: rewrite publishing section to direct git (Composio re…
Graehamwatts Jun 10, 2026
ce03d87
Auto-sync: session-end commit 2026-06-09 22:44
Graehamwatts Jun 10, 2026
9dd511f
Retire last inline Composio publishing blocks (cma-generator, disclos…
Graehamwatts Jun 10, 2026
2b9f814
newsletter-generator: replace Composio Gmail send with Gmail MCP / SM…
Graehamwatts Jun 10, 2026
2b67876
Auto-sync: session-end commit 2026-06-09 22:52
Graehamwatts Jun 10, 2026
7031b9d
offer-analyzer: default to information-only mode - nets, rankings, co…
Graehamwatts Jun 11, 2026
e9f61cc
offer-analyzer: default comparison orders strongest-first, but no ver…
Graehamwatts Jun 11, 2026
7f3a1bb
pcfs: persist Claude Code operations handoff into skill references
Graehamwatts Jun 11, 2026
78d9438
Add marketing-psychology reference skill from Pantana AiM (adapted); …
Graehamwatts Jun 11, 2026
04d2cef
content-creation-engine: load marketing-psychology for persuasive out…
Graehamwatts Jun 11, 2026
962d166
farming-postcard: repetition audit — add 4-axis differentiation rules…
Graehamwatts Jun 11, 2026
a386e4a
cma-generator past-client: ban all 'no agenda'/'no-pressure' phrasing…
Graehamwatts Jun 11, 2026
d56bcab
skill-creator: placement+sync rule for new skills (single Documents f…
Graehamwatts Jun 11, 2026
ff3de3c
Add chatgpt-ads skill: merge of AiM Bulk-Build ChatGPT Ads agent + 25…
Graehamwatts Jun 11, 2026
24051da
Auto-sync: session-end commit 2026-06-11 14:54
Graehamwatts Jun 11, 2026
630e490
Auto-sync: session-end commit 2026-06-11 20:10
Graehamwatts Jun 12, 2026
484898d
Past-seller rule hardened per Graeham 2026-06-11: CMA only on current…
Graehamwatts Jun 12, 2026
b950df2
Auto-sync: session-end commit 2026-06-13 11:33
Graehamwatts Jun 13, 2026
66f6fdb
Past-client three-address model + out-of-state policy (Graeham 2026-0…
Graehamwatts Jun 13, 2026
b0764d6
Auto-sync: session-end commit 2026-06-15 18:01
Graehamwatts Jun 16, 2026
294cf49
Auto-sync: session-end commit 2026-06-15 18:28
Graehamwatts Jun 16, 2026
716136d
Auto-sync: session-end commit 2026-06-17 12:25
Graehamwatts Jun 17, 2026
f31387c
Auto-sync: session-end commit 2026-06-22 13:29
Graehamwatts Jun 22, 2026
ff7b3a9
weekly-listing-update: week-over-week trajectory, prominent offer ban…
Graehamwatts Jun 22, 2026
21aa198
Auto-sync: session-end commit 2026-06-22 14:38
Graehamwatts Jun 22, 2026
d0dd206
weekly-listing-update: remove temp preview/build artifacts
Graehamwatts Jun 22, 2026
374a2d5
weekly-listing-update: differentiate offer states (received / accepte…
Graehamwatts Jun 22, 2026
1f8664e
Auto-sync: session-end commit 2026-06-22 17:41
Graehamwatts Jun 23, 2026
7d6b10c
weekly-listing-update: script-generated line chart + launch-week anch…
Graehamwatts Jun 23, 2026
c374d04
fix(content-calendar): restore truncated __main__ guard in weekly-cal…
Graehamwatts Jun 23, 2026
c5e2692
Auto-sync: session-end commit 2026-06-22 20:25
Graehamwatts Jun 23, 2026
750f8e7
harden(skills): add Python integrity gate + remove dead truncated bui…
Graehamwatts Jun 23, 2026
d4aabc0
content-calendar: encode email recipients + daily cadence (LOCKED)
Graehamwatts Jun 23, 2026
bf068b3
Auto-sync: session-end commit 2026-06-22 21:30
Graehamwatts Jun 23, 2026
d86c3c3
Auto-sync: session-end commit 2026-06-22 21:32
Graehamwatts Jun 23, 2026
6a545ba
Auto-sync: session-end commit 2026-06-22 21:33
Graehamwatts Jun 23, 2026
dcb9bd9
Auto-sync: session-end commit 2026-06-22 21:36
Graehamwatts Jun 23, 2026
f6d7a3e
Auto-sync: session-end commit 2026-06-22 22:06
Graehamwatts Jun 23, 2026
c1a16c6
Auto-sync: session-end commit 2026-06-22 22:23
Graehamwatts Jun 23, 2026
8c9147c
Auto-sync: session-end commit 2026-06-22 23:23
Graehamwatts Jun 23, 2026
aa91346
Auto-sync: session-end commit 2026-06-22 23:27
Graehamwatts Jun 23, 2026
aeda44a
Auto-sync: session-end commit 2026-06-23 00:11
Graehamwatts Jun 23, 2026
558d3e0
Auto-sync: session-end commit 2026-06-23 00:12
Graehamwatts Jun 23, 2026
48cfd95
Auto-sync: session-end commit 2026-06-23 00:13
Graehamwatts Jun 23, 2026
4321fea
Auto-sync: session-end commit 2026-06-23 00:14
Graehamwatts Jun 23, 2026
c38c541
Auto-sync: session-end commit 2026-06-23 00:16
Graehamwatts Jun 23, 2026
f69cbe4
Auto-sync: session-end commit 2026-06-23 14:21
Graehamwatts Jun 23, 2026
5e6a30a
Auto-sync: session-end commit 2026-06-23 17:12
Graehamwatts Jun 24, 2026
969507a
cma-generator: add Market Pricing Behavior & DOM Correlation analysis…
Graehamwatts Jun 24, 2026
347b8bd
cma-generator: require readable 'Reading the numbers' summary + why +…
Graehamwatts Jun 24, 2026
6f45c3c
Auto-sync: session-end commit 2026-06-23 21:27
Graehamwatts Jun 24, 2026
57fcd96
Auto-sync: session-end commit 2026-06-23 22:20
Graehamwatts Jun 24, 2026
1b52d4f
Auto-sync: session-end commit 2026-06-23 22:41
Graehamwatts Jun 24, 2026
f1398d4
Auto-sync: session-end commit 2026-06-26 10:34
Graehamwatts Jun 26, 2026
4ab553f
Auto-sync: session-end commit 2026-06-26 10:39
Graehamwatts Jun 26, 2026
5915b25
cma-generator: pricing-behavior labeling + honesty rules (r label, ad…
Graehamwatts Jun 27, 2026
bef53c0
Auto-sync: session-end commit 2026-06-26 18:31
Graehamwatts Jun 27, 2026
b1fc03c
listing-launch-engine + content-creation-engine: Listing Content Engi…
Graehamwatts Jun 27, 2026
c2d20c0
Auto-sync: session-end commit 2026-06-26 21:11
Graehamwatts Jun 27, 2026
19f6d4e
Auto-sync: session-end commit 2026-06-27 00:40
Graehamwatts Jun 27, 2026
4493737
Auto-sync: session-end commit 2026-06-27 01:06
Graehamwatts Jun 27, 2026
4678367
Auto-sync: session-end commit 2026-06-27 01:09
Graehamwatts Jun 27, 2026
e864fc4
Auto-sync: session-end commit 2026-06-27 01:13
Graehamwatts Jun 27, 2026
8c95a32
Auto-sync: session-end commit 2026-06-27 01:16
Graehamwatts Jun 27, 2026
5003f38
Auto-sync: session-end commit 2026-06-27 01:18
Graehamwatts Jun 27, 2026
195b186
Auto-sync: session-end commit 2026-06-27 01:20
Graehamwatts Jun 27, 2026
4a2b1ea
Auto-sync: session-end commit 2026-06-27 01:34
Graehamwatts Jun 27, 2026
f825d98
Auto-sync: session-end commit 2026-06-27 11:14
Graehamwatts Jun 27, 2026
654dd35
Auto-sync: session-end commit 2026-06-27 11:48
Graehamwatts Jun 27, 2026
5b24e77
Auto-sync: session-end commit 2026-06-27 15:26
Graehamwatts Jun 27, 2026
3e9030d
Auto-sync: session-end commit 2026-06-27 15:32
Graehamwatts Jun 27, 2026
469980d
Auto-sync: session-end commit 2026-06-27 15:46
Graehamwatts Jun 27, 2026
3dfdc2c
Auto-sync: session-end commit 2026-06-27 15:53
Graehamwatts Jun 27, 2026
d82b624
Auto-sync: session-end commit 2026-06-27 15:55
Graehamwatts Jun 27, 2026
923a529
Auto-sync: session-end commit 2026-06-27 16:08
Graehamwatts Jun 27, 2026
1c74436
Auto-sync: session-end commit 2026-06-27 16:11
Graehamwatts Jun 27, 2026
190e503
Add comedy-craft + concept-forge creative-video system; wire into LLE…
Graehamwatts Jun 27, 2026
be7d5b9
Auto-sync: session-end commit 2026-06-27 16:34
Graehamwatts Jun 27, 2026
dc83108
Auto-sync: session-end commit 2026-06-27 16:36
Graehamwatts Jun 27, 2026
5a80fc7
Auto-sync: session-end commit 2026-06-27 16:44
Graehamwatts Jun 27, 2026
b4d3198
Auto-sync: session-end commit 2026-06-27 16:48
Graehamwatts Jun 27, 2026
ebad493
Auto-sync: session-end commit 2026-06-27 16:49
Graehamwatts Jun 27, 2026
189b238
content-multiplier: intent-only boundaries — gauntlet-survivor input,…
Graehamwatts Jun 28, 2026
bc717b8
Auto-sync: session-end commit 2026-06-29 10:22
Graehamwatts Jun 29, 2026
8d8e535
farming-postcard: July 1 manual recovery (Prop 19) after 06/24 schedu…
Graehamwatts Jun 30, 2026
955c056
farming-postcard: July 1 rush-to-print — swap Prop 19 CTA to call/tex…
Graehamwatts Jun 30, 2026
31ab9af
farming-postcard: line up July 15 (Buyer-tagged) + Aug 1 (Equity); no…
Graehamwatts Jun 30, 2026
ad9d61b
Auto-sync: session-end commit 2026-06-29 18:15
Graehamwatts Jun 30, 2026
f7da97f
farming-postcard: harden send script (remove stale session-pinned cre…
Graehamwatts Jun 30, 2026
4f29c4b
Auto-sync: session-end commit 2026-07-01 15:35
Graehamwatts Jul 1, 2026
6fbffab
trackabi-va-payroll: add email cleanup after receipt conversion + BPI…
Graehamwatts Jul 1, 2026
05ea076
Auto-sync: session-end commit 2026-07-01 16:51
Graehamwatts Jul 1, 2026
438a5ca
Auto-sync: session-end commit 2026-07-01 21:51
Graehamwatts Jul 2, 2026
af334d1
Auto-sync: session-end commit 2026-07-01 23:54
Graehamwatts Jul 2, 2026
12a160f
Auto-sync: session-end commit 2026-07-01 23:58
Graehamwatts Jul 2, 2026
2370071
Auto-sync: session-end commit 2026-07-02 17:33
Graehamwatts Jul 3, 2026
6a36a4b
Auto-sync: session-end commit 2026-07-02 18:05
Graehamwatts Jul 3, 2026
da2350c
Auto-sync: session-end commit 2026-07-02 18:20
Graehamwatts Jul 3, 2026
1a827e4
Auto-sync: session-end commit 2026-07-02 21:33
Graehamwatts Jul 3, 2026
a6b4f2f
Auto-sync: session-end commit 2026-07-02 21:34
Graehamwatts Jul 3, 2026
433e9f1
Auto-sync: session-end commit 2026-07-02 21:35
Graehamwatts Jul 3, 2026
e10e9eb
Auto-sync: session-end commit 2026-07-02 22:22
Graehamwatts Jul 3, 2026
5c7959f
Auto-sync: session-end commit 2026-07-02 22:30
Graehamwatts Jul 3, 2026
e3bbb3f
Auto-sync: session-end commit 2026-07-02 22:32
Graehamwatts Jul 3, 2026
24fbc08
Auto-sync: session-end commit 2026-07-02 22:34
Graehamwatts Jul 3, 2026
58b5d16
Auto-sync: session-end commit 2026-07-02 22:35
Graehamwatts Jul 3, 2026
88723d7
Auto-sync: session-end commit 2026-07-02 22:38
Graehamwatts Jul 3, 2026
a0ad41c
Auto-sync: session-end commit 2026-07-02 23:00
Graehamwatts Jul 3, 2026
ccfb3d9
Auto-sync: session-end commit 2026-07-02 23:00
Graehamwatts Jul 3, 2026
68c2b07
Auto-sync: session-end commit 2026-07-02 23:01
Graehamwatts Jul 3, 2026
6d95eb2
Exempt dre-leak-incident-log.md from brand tripwire; log 2026-07-02 c…
Graehamwatts Jul 3, 2026
7e3d53f
Auto-sync: session-end commit 2026-07-02 23:49
Graehamwatts Jul 3, 2026
37fc47c
Auto-sync: session-end commit 2026-07-03 12:00
Graehamwatts Jul 3, 2026
811295b
Auto-sync: session-end commit 2026-07-03 12:15
Graehamwatts Jul 3, 2026
dac3ead
newsletter-generator: CTA target is graehamwatts.com/evaluation
Graehamwatts Jul 4, 2026
ec28e1f
Auto-sync: session-end commit 2026-07-03 21:20
Graehamwatts Jul 4, 2026
2e2923e
Fix stale live-Composio instructions in 4 skills (retired 2026-06-09)
Graehamwatts Jul 4, 2026
28a6d54
newsletter-generator: story-page depth layer (details + embedded vide…
Graehamwatts Jul 4, 2026
10ba3c0
identity.json: add socials (IG business handle graeham.watts, YouTube)
Graehamwatts Jul 6, 2026
55d0a92
newsletter-generator: social links from identity.json (business IG gr…
Graehamwatts Jul 6, 2026
719a78d
Auto-sync: session-end commit 2026-07-10 00:01
Graehamwatts Jul 10, 2026
44d6a8c
Auto-sync: session-end commit 2026-07-11 01:19
Graehamwatts Jul 11, 2026
a6c1222
Auto-sync: session-end commit 2026-07-12 00:49
Graehamwatts Jul 12, 2026
8aebfc2
Auto-sync: session-end commit 2026-07-12 00:54
Graehamwatts Jul 12, 2026
f427cfe
Auto-sync: session-end commit 2026-07-13 12:36
Graehamwatts Jul 13, 2026
a190a19
Auto-sync: session-end commit 2026-07-13 13:02
Graehamwatts Jul 13, 2026
f9de160
farming-postcard: mark July 1 + July 15 shipped; Aug 1 is next
Graehamwatts Jul 14, 2026
cf7be8a
Auto-sync: session-end commit 2026-07-14 14:43
Graehamwatts Jul 14, 2026
18b30c8
Auto-sync: session-end commit 2026-07-14 14:50
Graehamwatts Jul 14, 2026
1be590c
Auto-sync: session-end commit 2026-07-17 16:00
Graehamwatts Jul 17, 2026
fcae6ad
Auto-sync: session-end commit 2026-07-17 16:00
Graehamwatts Jul 17, 2026
b2c6e2e
Auto-sync: session-end commit 2026-07-17 16:10
Graehamwatts Jul 17, 2026
2fa40f0
Auto-sync: session-end commit 2026-07-17 22:21
Graehamwatts Jul 18, 2026
72c99f2
Add website-crawler skill (scaffolded, not yet installed)
Graehamwatts Jul 18, 2026
c69c8c8
Add AI Library content (HTML/PDF + sources) so it lives on GitHub, no…
Graehamwatts Jul 22, 2026
42e27e1
Auto-sync: session-end commit 2026-07-23 00:22
Graehamwatts Jul 23, 2026
ae17a04
Auto-sync: session-end commit 2026-07-23 00:46
Graehamwatts Jul 23, 2026
247eda3
Auto-sync: session-end commit 2026-07-23 10:11
Graehamwatts Jul 23, 2026
0372be6
Auto-sync: session-end commit 2026-07-23 12:17
Graehamwatts Jul 23, 2026
22c0146
Auto-sync: session-end commit 2026-07-23 13:30
Graehamwatts Jul 23, 2026
4dabd4b
Remove unused content-multiplier skill, trim listing-launch-engine de…
Graehamwatts Jul 28, 2026
46e4698
Consolidate remotion-video: strip generic API reference, point to rem…
Graehamwatts Jul 28, 2026
233541c
Fix stale video-script-creation-engine refs, fix video-creator broker…
Graehamwatts Jul 28, 2026
f251d28
Save native-knowledge audit doc for future reference
Graehamwatts Jul 28, 2026
18107dd
Trim Tier A generic/native-knowledge content across 20 skills
Graehamwatts Jul 28, 2026
80d5758
Trim resident descriptions on 11 actively-used skills; fix null-byte …
Graehamwatts Jul 28, 2026
e9109da
Fix 6 mechanical bugs from the native-knowledge audit's Part 1 list
Graehamwatts Jul 28, 2026
0685905
Retire heygen-elevenlabs-renderer — auto-render moving to PropertyIQ
Graehamwatts Jul 28, 2026
0c3a858
Auto-sync: session-end commit 2026-07-28 12:13
Graehamwatts Jul 28, 2026
93f0855
Tier A trim: cut generic/textbook content from 14 more skills
Graehamwatts Jul 28, 2026
6bc0d44
Auto-sync: session-end commit 2026-07-28 16:02
Graehamwatts Jul 28, 2026
19409d6
cinematic-trailer-pipeline: migrate Phase 3 off retired PAI 2.0/UTOPAI
Graehamwatts Jul 28, 2026
c9cef8c
Auto-sync: session-end commit 2026-07-28 16:20
Graehamwatts Jul 28, 2026
b9f2aab
past-client-follow-up-system: fix stale N8N workflow ID + real Buying…
Graehamwatts Jul 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"name": "graehamwatts-skills",
"version": "1.0.0",
"description": "Graeham Watts personal skills vault: content creation engine, CMA generator, disclosure analyzer, offer analyzer, GHL CRM audit, content calendar, listing tools, and the Watts content+video pipeline. Publishing handled via the Composio workflow (see shared-references/publishing-via-composio.md)."
}
3 changes: 3 additions & 0 deletions .claude/CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# graphify
- **graphify** (`.claude/skills/graphify/SKILL.md`) - any input to knowledge graph. Trigger: `/graphify`
When the user types `/graphify`, use the installed graphify skill or instructions before doing anything else.
3 changes: 3 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"hooks": {}
}
1 change: 1 addition & 0 deletions .claude/skills/graphify/.graphify_version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0.9.5
712 changes: 712 additions & 0 deletions .claude/skills/graphify/SKILL.md

Large diffs are not rendered by default.

56 changes: 56 additions & 0 deletions .claude/skills/graphify/references/add-watch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# graphify reference: add a URL and watch a folder

Load this when the user ran `/graphify add <url>` or passed `--watch`. Neither is part of the default build.

## For /graphify add

Fetch a URL and add it to the corpus, then update the graph.

```bash
$(cat graphify-out/.graphify_python) -c "
import sys
from graphify.ingest import ingest
from pathlib import Path

try:
out = ingest('URL', Path('./raw'), author='AUTHOR', contributor='CONTRIBUTOR')
print(f'Saved to {out}')
except ValueError as e:
print(f'error: {e}', file=sys.stderr)
sys.exit(1)
except RuntimeError as e:
print(f'error: {e}', file=sys.stderr)
sys.exit(1)
"
```

Replace `URL` with the actual URL, `AUTHOR` with the user's name if provided, `CONTRIBUTOR` likewise. If the command exits with an error, tell the user what went wrong - do not silently continue. After a successful save, automatically run the `--update` pipeline on `./raw` to merge the new file into the existing graph.

Supported URL types (auto-detected):
- YouTube / any video URL → audio downloaded via yt-dlp, transcribed to `.txt` on next run (requires `pip install 'graphifyy[video]'`)
- Twitter/X → fetched via oEmbed, saved as `.md` with tweet text and author
- arXiv → abstract + metadata saved as `.md`
- PDF → downloaded as `.pdf`
- Images (.png/.jpg/.webp) → downloaded, Claude vision extracts on next run
- Any webpage → converted to markdown via html2text

---

## For --watch

Start a background watcher that monitors a folder and auto-updates the graph when files change.

```bash
$(cat graphify-out/.graphify_python) -m graphify.watch INPUT_PATH --debounce 3
```

Replace INPUT_PATH with the folder to watch. Behavior depends on what changed:

- **Code files only (.py, .ts, .go, etc.):** re-runs AST extraction + rebuild + cluster immediately, no LLM needed. `graph.json` and `GRAPH_REPORT.md` are updated automatically.
- **Docs, papers, or images:** writes a `graphify-out/needs_update` flag and prints a notification to run `/graphify --update` (LLM semantic re-extraction required).

Debounce (default 3s): waits until file activity stops before triggering, so a wave of parallel agent writes doesn't trigger a rebuild per file.

Press Ctrl+C to stop.

For agentic workflows: run `--watch` in a background terminal. Code changes from agent waves are picked up automatically between waves. If agents are also writing docs or notes, you'll need a manual `/graphify --update` after those waves.
87 changes: 87 additions & 0 deletions .claude/skills/graphify/references/exports.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# graphify reference: extra exports and benchmark

Load this when the user passed one of the export flags (`--wiki`, `--neo4j`, `--neo4j-push`, `--falkordb`, `--falkordb-push`, `--svg`, `--graphml`, `--mcp`), or when the corpus is large enough for the token-reduction benchmark. Each step runs only for its own flag.

### Step 6b - Wiki (only if --wiki flag)

**Only run this step if `--wiki` was explicitly given in the original command.**

Run this before Step 9 (cleanup) so `.graphify_labels.json` is still available.

```bash
graphify export wiki
```

### Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag)

**If `--neo4j`** - generate a Cypher file for manual import:

```bash
graphify export neo4j
```

**If `--neo4j-push <uri>`** - push directly to a running Neo4j instance. Ask the user for credentials if not provided:

```bash
graphify export neo4j --push bolt://localhost:7687 --user neo4j --password PASSWORD
```

Default URI is `bolt://localhost:7687`, default user is `neo4j`. Uses MERGE - safe to re-run without creating duplicates.

### Step 7a - FalkorDB export (only if --falkordb or --falkordb-push flag)

**If `--falkordb`** - generate a Cypher file. The statements are OpenCypher, but FalkorDB's `GRAPH.QUERY` runs one statement at a time (no bulk script import like Neo4j's `cypher-shell`), so prefer `--falkordb-push` to load a graph. Use this only when you want the portable `cypher.txt` artifact:

```bash
graphify export falkordb
```

**If `--falkordb-push <uri>`** - push directly to a running FalkorDB instance. Credentials are optional; ask the user only if the instance requires auth:

```bash
graphify export falkordb --push falkordb://localhost:6379
```

Default URI is `falkordb://localhost:6379` (the scheme is informational - `redis://` or a bare `host:port` work too), auth is optional, and the target graph defaults to `graphify`. Uses MERGE - safe to re-run without creating duplicates.

### Step 7b - SVG export (only if --svg flag)

```bash
graphify export svg
```

### Step 7c - GraphML export (only if --graphml flag)

```bash
graphify export graphml
```

### Step 7d - MCP server (only if --mcp flag)

```bash
$(cat graphify-out/.graphify_python) -m graphify.serve graphify-out/graph.json
```

This starts a stdio MCP server that exposes tools: `query_graph`, `get_node`, `get_neighbors`, `get_community`, `god_nodes`, `graph_stats`, `shortest_path`. Add to Claude Desktop or any MCP-compatible agent orchestrator so other agents can query the graph live.

To configure in Claude Desktop, add to `claude_desktop_config.json`. Claude Desktop can't run `$(...)`, and under `uv tool install` the system `python3` can't import graphify — so set `command` to the **absolute interpreter path** printed by `cat graphify-out/.graphify_python`:
```json
{
"mcpServers": {
"graphify": {
"command": "<absolute path from: cat graphify-out/.graphify_python>",
"args": ["-m", "graphify.serve", "/absolute/path/to/graphify-out/graph.json"]
}
}
}
```

### Step 8 - Token reduction benchmark (only if total_words > 5000)

If `total_words` from `graphify-out/.graphify_detect.json` is greater than 5,000, run:

```bash
graphify benchmark
```

Print the output directly in chat. If `total_words <= 5000`, skip silently - the graph value is structural clarity, not token compression, for small corpora.
70 changes: 70 additions & 0 deletions .claude/skills/graphify/references/extraction-spec.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# graphify reference: extraction subagent prompt

Load this in Step 3 Part B when the corpus has at least one doc, paper, or image chunk. A pure-code corpus skips Part B and never reads this file. Each semantic subagent receives the prompt below verbatim (substitute FILE_LIST, CHUNK_NUM, TOTAL_CHUNKS, DEEP_MODE, and CHUNK_PATH).

```
You are a graphify extraction subagent. Read the files listed and extract a knowledge graph fragment.
Output ONLY valid JSON matching the schema below - no explanation, no markdown fences, no preamble.

Files (chunk CHUNK_NUM of TOTAL_CHUNKS):
FILE_LIST

Rules:
- EXTRACTED: relationship explicit in source (import, call, citation, "see §3.2")
- INFERRED: reasonable inference (shared data structure, implied dependency)
- AMBIGUOUS: uncertain - flag for review, do not omit

Code files: focus on semantic edges AST cannot find (call relationships, shared data, arch patterns).
Do not re-extract imports - AST already has those.
Doc/paper files: extract named concepts, entities, citations. For rationale (WHY decisions were made, trade-offs, design intent): store as a `rationale` attribute on the relevant concept node — do NOT create a separate rationale node or fragment node. Only create a node for something that is itself a named entity or concept. Use `file_type:"rationale"` for concept-like nodes (ideas, principles, mechanisms, design patterns). `file_type` MUST be one of exactly these six values: `code`, `document`, `paper`, `image`, `rationale`, `concept`. Any other value is invalid and will be rejected.
Code files: when adding `calls` edges, source MUST be the caller (the function/class doing the calling), target MUST be the callee. Never reverse this direction. `calls` edges MUST stay within one language: a Python function cannot `calls` a JS/TS/Go/Rust/Java symbol and vice versa — cross-language call edges are phantom artifacts, never emit them.
Image files: use vision to understand what the image IS - do not just OCR.
UI screenshot: layout patterns, design decisions, key elements, purpose.
Chart: metric, trend/insight, data source.
Tweet/post: claim as node, author, concepts mentioned.
Diagram: components and connections.
Research figure: what it demonstrates, method, result.
Handwritten/whiteboard: ideas and arrows, mark uncertain readings AMBIGUOUS.

DEEP_MODE (if --mode deep was given): be aggressive with INFERRED edges - indirect deps,
shared assumptions, latent couplings. Mark uncertain ones AMBIGUOUS instead of omitting.

Semantic similarity: if two concepts in this chunk solve the same problem or represent the same idea without any structural link (no import, no call, no citation), add a `semantically_similar_to` edge marked INFERRED with a confidence_score reflecting how similar they are (0.6-0.95). Examples:
- Two functions that both validate user input but never call each other
- A class in code and a concept in a paper that describe the same algorithm
- Two error types that handle the same failure mode differently
Only add these when the similarity is genuinely non-obvious and cross-cutting. Do not add them for trivially similar things.

Hyperedges: if 3 or more nodes clearly participate together in a shared concept, flow, or pattern that is not captured by pairwise edges alone, add a hyperedge to a top-level `hyperedges` array. Examples:
- All classes that implement a common protocol or interface
- All functions in an authentication flow (even if they don't all call each other)
- All concepts from a paper section that form one coherent idea
Use sparingly — only when the group relationship adds information beyond the pairwise edges. Maximum 3 hyperedges per chunk.

If a file has YAML frontmatter (--- ... ---), copy source_url, captured_at, author,
contributor onto every node from that file.

confidence_score is REQUIRED on every edge - never omit it, never use 0.5 as a default:
- EXTRACTED edges: confidence_score = 1.0 always
- INFERRED edges: pick exactly ONE value from this set — never 0.5:
0.95 direct structural evidence (shared data structure, named cross-file reference).
0.85 strong inference (clear functional alignment, no direct symbol link).
0.75 reasonable inference (shared problem domain + similar shape, requires interpretation).
0.65 weak inference (thematically related, no shape evidence).
0.55 speculative but plausible (surface-level co-occurrence only).
Models follow discrete rubrics better than continuous ranges; the bimodal
distribution observed in production (>50% at 0.5, >40% at 0.85+) shows the
range guidance is being collapsed to a binary. If no value above fits, mark
the edge AMBIGUOUS rather than picking 0.4 or below.
- AMBIGUOUS edges: 0.1-0.3

Node ID format: lowercase, only `[a-z0-9_]`, no dots or slashes. Format: `{stem}_{entity}` where stem is the **full repo-relative path with the extension dropped**, every path segment kept and joined with `_` (each segment lowercased with non-alphanumeric chars replaced by `_`), and entity is the symbol name similarly normalized. Use every directory level, not just the immediate parent — this keeps same-named files in different directories distinct. Examples: `src/auth/session.py` + `ValidateToken` → `src_auth_session_validatetoken`; `lib/utils/helpers.py` + `parse_url` → `lib_utils_helpers_parse_url`; `tests/test_foo.py` + `_helper` → `tests_test_foo_helper`; `docs/v1/api/README.md` + `getUser` → `docs_v1_api_readme_getuser`. Top-level files (no parent dir, e.g. `setup.py`) use just the filename stem: `setup_my_func`. This must match the ID the AST extractor generates — using just the filename (e.g., `session_validatetoken`) or only the immediate parent (e.g., `auth_session_validatetoken`) will create orphan ghost-duplicate nodes. If you are re-extracting a project built under the old immediate-parent format, the user should run `graphify extract --force` to rebuild cleanly. CRITICAL: never append chunk numbers, sequence numbers, or any suffix to an ID (no `_c1`, `_c2`, `_chunk2`, etc.). IDs must be deterministic from the label alone — the same entity must always produce the same ID regardless of which chunk processes it.

Generate the extraction JSON matching this schema exactly:
{"nodes":[{"id":"auth_session_validatetoken","label":"Human Readable Name","file_type":"code|document|paper|image|rationale|concept","source_file":"<FILE_LIST path verbatim>","source_location":null,"source_url":null,"captured_at":null,"author":null,"contributor":null}],"edges":[{"source":"node_id","target":"node_id","relation":"calls|implements|references|cites|conceptually_related_to|shares_data_with|semantically_similar_to|rationale_for","confidence":"EXTRACTED|INFERRED|AMBIGUOUS","confidence_score":1.0,"source_file":"<FILE_LIST path verbatim>","source_location":null,"weight":1.0}],"hyperedges":[{"id":"snake_case_id","label":"Human Readable Label","nodes":["node_id1","node_id2","node_id3"],"relation":"participate_in|implement|form","confidence":"EXTRACTED|INFERRED","confidence_score":0.75,"source_file":"<FILE_LIST path verbatim>"}],"input_tokens":0,"output_tokens":0}

source_file RULE (every node, edge, and hyperedge): set source_file to the path of the originating file EXACTLY as it appears in FILE_LIST — verbatim and absolute. Do NOT shorten to a basename, do NOT re-relativize, do NOT strip any directory prefix, and do NOT change separators (the engine canonicalizes separators and relativizes against the build root downstream). Copy the FILE_LIST entry character-for-character. This keeps the full build and incremental --update on the same base, so build_merge's replace-on-re-extract matches the existing node instead of accumulating a duplicate.

Then write the JSON to disk using the Write tool at this exact absolute path (no relative paths — Write resolves relative paths against an undefined cwd and the file will be silently lost):
CHUNK_PATH
```
46 changes: 46 additions & 0 deletions .claude/skills/graphify/references/github-and-merge.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# graphify reference: GitHub clone and cross-repo merge

Load this when the user passed one or more `https://github.com/...` URLs, or named several local subfolders to merge into one graph.

### Step 0 - Clone GitHub repo(s) (only if a GitHub URL was given)

**Single repo:**
```bash
LOCAL_PATH=$(graphify clone <github-url> [--branch <branch>])
# Use LOCAL_PATH as the target for all subsequent steps
```

**Multiple repos (cross-repo graph):**
```bash
# Clone each repo, run the full pipeline on each, then merge
graphify clone <url1> # → ~/.graphify/repos/<owner1>/<repo1>
graphify clone <url2> # → ~/.graphify/repos/<owner2>/<repo2>
# Run /graphify on each local path to produce their graph.json files
# Then merge:
graphify merge-graphs \
~/.graphify/repos/<owner1>/<repo1>/graphify-out/graph.json \
~/.graphify/repos/<owner2>/<repo2>/graphify-out/graph.json \
--out graphify-out/cross-repo-graph.json
```

Graphify clones into `~/.graphify/repos/<owner>/<repo>` and reuses existing clones on repeat runs. Each node in the merged graph carries a `repo` attribute so you can filter by origin.

**Multiple local subfolders (monorepo or multi-service layout):**

The skill pipeline writes all intermediate and final outputs to `graphify-out/` in the current working directory. Running the skill on each subfolder separately will clobber the same output dir. Instead, use the CLI directly for each subfolder — it places `graphify-out/` *inside* the scanned path:

```bash
graphify extract ./core/ # → ./core/graphify-out/graph.json
graphify extract ./service/ # → ./service/graphify-out/graph.json
graphify extract ./platform/ # → ./platform/graphify-out/graph.json
# Add --backend gemini|kimi|openai|deepseek|claude-cli depending on which API key you have set

# Then merge at the project root:
graphify merge-graphs \
./core/graphify-out/graph.json \
./service/graphify-out/graph.json \
./platform/graphify-out/graph.json \
--out graphify-out/graph.json
```

Once `graphify-out/graph.json` exists, the fast path above takes over: any codebase question runs `graphify query` directly on the merged graph — no re-extraction, no size gate.
33 changes: 33 additions & 0 deletions .claude/skills/graphify/references/hooks.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# graphify reference: commit hook and native CLAUDE.md integration

Load this when the user asked to install the post-commit hook or wire graphify into a project's CLAUDE.md.

## For git commit hook

Install a post-commit hook that auto-rebuilds the graph after every commit. No background process needed - triggers once per commit, works with any editor.

```bash
graphify hook install # install
graphify hook uninstall # remove
graphify hook status # check
```

After every `git commit`, the hook detects which code files changed (via `git diff HEAD~1`), re-runs AST extraction on those files, and rebuilds `graph.json` and `GRAPH_REPORT.md`. Doc/image changes are ignored by the hook - run `/graphify --update` manually for those.

If a post-commit hook already exists, graphify appends to it rather than replacing it.

---

## For native CLAUDE.md integration

Run once per project to make graphify always-on in Claude Code sessions:

```bash
graphify claude install
```

This writes a `## graphify` section to the local `CLAUDE.md` that instructs Claude to check the graph before answering codebase questions and rebuild it after code changes. No manual `/graphify` needed in future sessions.

```bash
graphify claude uninstall # remove the section
```
Loading