@elitedcs/ghl-mcp 3.70.0 → 3.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +8 -5
  3. package/dist/capture-helper.js +10 -1
  4. package/dist/index.js +7479 -1552
  5. package/guide/guide.html +2 -1
  6. package/package.json +2 -2
  7. package/skills/blueprint/SKILL.md +2 -0
  8. package/skills/blueprint/examples/medspa-approval-view.md +58 -53
  9. package/skills/blueprint/examples/medspa-brief.json +70 -8
  10. package/skills/blueprint/examples/medspa-build-plan.json +1435 -123
  11. package/skills/blueprint/examples/medspa-dry-run-report.md +2 -0
  12. package/skills/blueprint/examples/sample-approval-view.md +20 -61
  13. package/skills/blueprint/examples/sample-brief.json +95 -7
  14. package/skills/blueprint/examples/sample-build-plan.json +1448 -119
  15. package/skills/blueprint/examples/validate-plan.cjs +195 -13
  16. package/skills/blueprint/presets/clinic-launch-a2p.preset.json +1 -0
  17. package/skills/blueprint/presets/clinic.md +60 -0
  18. package/skills/blueprint/presets/clinic.preset.json +1737 -0
  19. package/skills/blueprint/presets/coach.md +58 -0
  20. package/skills/blueprint/presets/coach.preset.json +1723 -0
  21. package/skills/blueprint/presets/ecommerce.md +54 -0
  22. package/skills/blueprint/presets/ecommerce.preset.json +1287 -0
  23. package/skills/blueprint/presets/generic-client.md +49 -27
  24. package/skills/blueprint/presets/generic-client.preset.json +1552 -122
  25. package/skills/blueprint/presets/local-service.md +58 -0
  26. package/skills/blueprint/presets/local-service.preset.json +1733 -0
  27. package/skills/blueprint/presets/med-spa.md +47 -48
  28. package/skills/blueprint/presets/med-spa.preset.json +1557 -111
  29. package/skills/blueprint/references/brief-schema.md +48 -1
  30. package/skills/blueprint/references/build-plan-schema.md +66 -5
  31. package/skills/blueprint/references/copy-guide.md +167 -0
  32. package/skills/blueprint/references/intake-question-set.md +64 -3
  33. package/skills/blueprint/references/preset-format.md +97 -51
  34. package/templates/action-schemas.json +12 -0
@@ -1,36 +1,58 @@
1
- # Preset: Generic Client (default)
1
+ # Preset: Generic Client
2
2
 
3
- **File:** `generic-client.preset.json` · **id:** `generic` · **version:** 1.0.0 · **default:** yes
4
- **Source:** ghl-command showcase-video Modules 0-7 + the proven Bliss Med Spa build.
3
+ **File:** `generic-client.preset.json` · **id:** `generic` · **version:** 2.0.0 · **default:** no
4
+ **Source:** ghl-command showcase-video Modules 0-7 + the proven Bliss Med Spa build; v2 depth per the owner review of 2026-08-26.
5
5
 
6
6
  ## When it is selected
7
- The fallback for every `business_type` without a dedicated preset (med spa, clinic, coach, ecom, local service, agency, other). In v1 it is the only general preset, so almost every build uses it. A brief that already declares `preset: "med_spa"` (or coach/ecom/etc.) resolves here via `selectors.aliases` until a dedicated preset claims that alias.
8
-
9
- ## What it builds (skeleton)
10
- - **1 pipeline** — default 7 stages (New Lead Contacted Qualified Appointment Booked* Won Repeat Lost). Overridden by `goal.salesStages` when the brief supplies them. (*Appointment stage drops if `bookingNeeded` is false.)
11
- - **6 custom fields** — Lead Source, Service/Product Interest, Appointment Date*, Deposit Paid*, Deal Sold, Estimated Lifetime Value (`MONETORY`). (*drop without booking.)
12
- - **14 tags** — 6 lead-source + 8 lifecycle. The skill also derives `interest-<x>` tags from the offer and adds them.
13
- - **1 custom value** — Booking Link (filled by the calendar-OAuth handoff).*
14
- - **1 calendar** — round-robin Consultation, Mon-Fri 9-5 default, requires staff.*
15
- - **1 intake form** — first/last/email/phone + Service Interest (mapped to the custom field).
16
- - **1 funnel** — Landing (opt-in form) + Thank You (booking CTA).
17
- - **7 emails + 4 SMS** — welcome, 3-step nurture, no-show*, onboarding*, win-back. SMS only when `sms_desired`.
18
- - **6 workflows** Speed-to-Lead, Lead Nurture, No-Show*, Onboarding*, Win-back, Replied→Stop&Route. All nurtures `stopOnResponse`.
19
- - **Handoffs (conditional)** — add-staff*, calendar-OAuth, A2P, Stripe, email-domain — included only when the brief flags call for them.
7
+ The fallback for every `business_type` without a dedicated preset: agencies, "other", and anything unmatched. Med spa, clinic, coach, ecommerce and local service each route to their own preset now; this one carries the same workflow depth with neutral copy.
8
+
9
+ ## What it builds (skeleton, v2 depth)
10
+ - **Users** — one per `brief.team.staff[]` entry. Every alert, task and assignment step points at a `userRef`; in the skeleton that is the role placeholder `user.owner`, resolved at fill time from `team.notifyName` (alerts) and `team.callsName` (tasks, assignment). No staff yet the steps stay, pointed at `user.__pending__`, and the build reports them as waiting.
11
+ - **1 pipeline** — "Sales Pipeline": New Lead Contacted Qualified → Appointment Booked* Proposal / Quote Sent Won → Repeat / Retention → Lost. Overridden by `goal.salesStages` when the brief supplies them.
12
+ - **6 custom fields** — Lead Source, What They Need, Top Concern, Appointment Date*, Deal Sold, Estimated Lifetime Value.
13
+ - **20 tags** — source, lifecycle, the hand-off trigger tags (`nurture-start`, `winback-start`, `missed-call`, `no-show`).
14
+ - **4 custom values** — business_name, business_phone, owner_first_name, booking_link. Every message reads business name / phone / signature / links from these, so the copy stays right when details change.
15
+ - **1 calendar** — Consultation (round_robin, Mon-Fri 9-17 default, 30-minute slots, `teamMemberRefs` → the plan users).*
16
+ - **1 intake form + 1 funnel** — "New Inquiry" (first/last/email/phone + what they need) and a Landing page (offer promise, three outcome-led points, one CTA to the form, A2P consent block) plus a Thank You page with the booking widget.
17
+ - **15 email + 17 SMS templates** — complete, send-ready copy written to `references/copy-guide.md`. The build stage rewrites every one from the real brief (offer, pain points, objections, prices, lead magnet) and keeps the cadence, the single CTA and the merge fields.
18
+ - **8 workflows, 32 customer touches** see the table.
20
19
 
21
20
  \* conditional on `goal.bookingNeeded == true`.
22
21
 
22
+ ## Workflows
23
+
24
+ | Workflow | Trigger | Actions | Touches | Span of waits | Stops on reply |
25
+ |---|---|---|---|---|---|
26
+ | Speed to Lead | form_submission | 15 | 5 | 1.1 days | yes |
27
+ | Missed Call Text-Back | call_status (missed: no-answer/busy/voicemail) | 7 | 2 | 1 h | yes |
28
+ | Lead Nurture (30 days) | contact_tag (tag.nurture_start) | 28 | 11 | 31 days | yes |
29
+ | Replied - Stop & Route | customer_reply | 9 | 0 | instant | no |
30
+ | Win-back (30 days) | contact_tag (tag.winback_start) | 13 | 5 | 31 days | yes |
31
+ | Appointment Booked - Confirm & Move | appointment (confirmed) | 8 | 2 | instant | no |
32
+ | Appointment Reminders | appointment (confirmed) | 5 | 3 | instant | no |
33
+ | No-Show Rescue | appointment (noshow) | 14 | 4 | 7 days | yes |
34
+
35
+ - **Speed to Lead** (15 actions): instant text + email, opportunity card, the contact assigned to whoever takes calls, alert to a real person, a call task due today, a 2nd touch at 20 minutes, a 3rd at 3 hours, a 4th and 5th by the next day, then the hand-off tag `nurture-start` as the last action.
36
+ - **Lead Nurture** (28 actions, 11 touches, 31 days of waits): give, give, ask. Ends with `lifecycle-lapsed` + the `winback-start` hand-off.
37
+ - **Win-back** (13 actions, 5 touches, 31 days of waits): one reason to come back per message, then `lifecycle-lost`.
38
+ - **Replied - Stop & Route**: the exit workflow. Pulls the contact out of every sequence, notes it, marks contacted, alerts a person and creates a 15-minute reply task.
39
+ - **Missed Call Text-Back**: `call_status` trigger scoped to no-answer / busy / voicemail, inbound. Text within seconds, tag, alert, call-back task, one more text an hour later.
40
+ - **Consultation → Confirm & Move, Reminders, No-Show Rescue**: booking stops every sequence and moves (or creates) the opportunity; reminders at 24 h and 2 h; a no-show gets a same-day call task, text and email, two more touches, then hands off to Win-back and moves the card back to Contacted.
41
+
42
+ ### Why sequences hand off with a tag, not add_to_workflow
43
+ Every hand-off is `add_contact_tag` + a `contact_tag` trigger. Both halves are live-proven shapes captured from working GHL workflows (`templates/action-schemas.json`). `add_to_workflow` has no captured native shape there and has not been proven at runtime, so a preset may not use it. Each sequence removes its own trigger tag as its first action so a later hand-off can start it again.
44
+
23
45
  ## How the brief shapes it
24
46
  | Brief signal | Effect |
25
47
  |---|---|
26
- | `goal.salesStages` present | replaces the default pipeline stages |
27
- | `goal.bookingNeeded == false` | drops the calendar, appointment field/tag/stage, no-show + onboarding workflows, and the add-staff/OAuth handoffs |
28
- | `channels.sms == true` | keeps SMS assets + the send_sms actions; otherwise they drop |
29
- | `flags: needs_a2p` | adds the A2P handoff (and SMS sends are gated behind it) |
30
- | `flags: stripe_not_connected` | adds the Stripe handoff |
31
- | `flags: calendar_oauth_needed` | adds the calendar-OAuth handoff |
32
- | `flags: email_domain_needed` | adds the email-domain handoff |
33
- | `business.name`, `offer.*`, `audience.*` | fill object names + ground all copy outlines |
34
-
35
- ## Maps to the showcase
36
- This preset *is* the Module 0-7 build, generalized: Module 1 pipeline + fields + tags; Module 2 calendar + OAuth handoff; Module 3 the 5 workflows + A2P handoff; Module 5 form + funnel + Stripe handoff. A med-spa brief through this preset reproduces the on-camera Bliss build. That is the thesis: one generic skeleton + a specific brief = a specific, complete account.
48
+ | `goal.salesStages` present | replaces the default pipeline stages (workflow stage refs are mapped to the nearest equivalent) |
49
+ | `goal.bookingNeeded == false` | drops the calendar, booking stage/tag/fields, the three appointment workflows and the calendar handoffs |
50
+ | `channels.sms == true` | keeps SMS templates, the send_sms actions, Missed Call Text-Back and the A2P gating; otherwise they drop (the email-only nurture still spans 31 days) |
51
+ | staff answers present | fills `users`; every `userRef` resolves to a real person |
52
+ | staff empty | every `userRef` → `user.__pending__`; the steps stay; `handoff.add_staff` holds those workflows DRAFT |
53
+ | `flags` | `needs_a2p` / `stripe_not_connected` / `calendar_oauth_needed` / `email_domain_needed` add the matching handoff |
54
+ | `business.name`, `offer.*`, `audience.*`, `extended.*` | fill object names, custom values and ground every template rewrite |
55
+
56
+
57
+ ## Copy notes
58
+ Neutral by design, personal by voice. Every message is signed by a named person, asks one question, and gives before it asks (a tip on day 8, the "three questions to ask anyone you hire" on day 5, the decision sheet on day 27). Tokens pull the offer, the top pain point and the top objection from the brief; the build stage replaces the neutral phrasing with the client's actual language.