@growthub/cli 0.7.5 → 0.7.7

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 (42) hide show
  1. package/assets/worker-kits/creative-strategist-v1/skills.md +13 -11
  2. package/assets/worker-kits/creative-strategist-v1/templates/brief-template.js +1 -1
  3. package/assets/worker-kits/creative-strategist-v1/workers/creative-strategist/CLAUDE.md +22 -21
  4. package/assets/worker-kits/growthub-ai-website-cloner-v1/.env.example +4 -2
  5. package/assets/worker-kits/growthub-ai-website-cloner-v1/QUICKSTART.md +4 -4
  6. package/assets/worker-kits/growthub-ai-website-cloner-v1/runtime-assumptions.md +1 -1
  7. package/assets/worker-kits/growthub-ai-website-cloner-v1/setup/clone-fork.sh +1 -1
  8. package/assets/worker-kits/growthub-ai-website-cloner-v1/setup/verify-env.mjs +1 -1
  9. package/assets/worker-kits/growthub-ai-website-cloner-v1/validation-checklist.md +1 -1
  10. package/assets/worker-kits/growthub-ai-website-cloner-v1/workers/ai-website-cloner-operator/CLAUDE.md +1 -1
  11. package/assets/worker-kits/growthub-geo-seo-v1/.env.example +5 -3
  12. package/assets/worker-kits/growthub-geo-seo-v1/setup/check-deps.sh +2 -2
  13. package/assets/worker-kits/growthub-geo-seo-v1/setup/clone-fork.sh +1 -1
  14. package/assets/worker-kits/growthub-geo-seo-v1/setup/verify-env.mjs +1 -1
  15. package/assets/worker-kits/growthub-geo-seo-v1/validation-checklist.md +1 -1
  16. package/assets/worker-kits/growthub-geo-seo-v1/workers/geo-seo-operator/CLAUDE.md +1 -1
  17. package/assets/worker-kits/growthub-hyperframes-studio-v1/.env.example +4 -2
  18. package/assets/worker-kits/growthub-hyperframes-studio-v1/docs/hyperframes-discovery-path.md +2 -2
  19. package/assets/worker-kits/growthub-hyperframes-studio-v1/setup/clone-fork.sh +2 -1
  20. package/assets/worker-kits/growthub-hyperframes-studio-v1/setup/verify-env.mjs +3 -2
  21. package/assets/worker-kits/growthub-open-higgsfield-studio-v1/.env.example +5 -0
  22. package/assets/worker-kits/growthub-open-higgsfield-studio-v1/QUICKSTART.md +1 -1
  23. package/assets/worker-kits/growthub-open-higgsfield-studio-v1/runtime-assumptions.md +1 -1
  24. package/assets/worker-kits/growthub-open-montage-studio-v1/.env.example +4 -2
  25. package/assets/worker-kits/growthub-open-montage-studio-v1/QUICKSTART.md +1 -1
  26. package/assets/worker-kits/growthub-open-montage-studio-v1/runtime-assumptions.md +1 -1
  27. package/assets/worker-kits/growthub-open-montage-studio-v1/setup/clone-fork.sh +2 -1
  28. package/assets/worker-kits/growthub-open-montage-studio-v1/setup/verify-env.mjs +5 -2
  29. package/assets/worker-kits/growthub-open-montage-studio-v1/validation-checklist.md +3 -3
  30. package/assets/worker-kits/growthub-open-montage-studio-v1/workers/open-montage-studio-operator/CLAUDE.md +2 -2
  31. package/assets/worker-kits/growthub-postiz-social-v1/.env.example +4 -2
  32. package/assets/worker-kits/growthub-postiz-social-v1/QUICKSTART.md +2 -2
  33. package/assets/worker-kits/growthub-postiz-social-v1/setup/clone-fork.sh +1 -1
  34. package/assets/worker-kits/growthub-postiz-social-v1/setup/verify-env.mjs +2 -1
  35. package/assets/worker-kits/growthub-postiz-social-v1/validation-checklist.md +1 -1
  36. package/assets/worker-kits/growthub-postiz-social-v1/workers/postiz-social-operator/CLAUDE.md +1 -1
  37. package/assets/worker-kits/growthub-twenty-crm-v1/.env.example +4 -2
  38. package/assets/worker-kits/growthub-twenty-crm-v1/QUICKSTART.md +1 -1
  39. package/assets/worker-kits/growthub-twenty-crm-v1/setup/clone-fork.sh +1 -1
  40. package/assets/worker-kits/growthub-twenty-crm-v1/workers/twenty-crm-operator/CLAUDE.md +1 -1
  41. package/dist/index.js +1177 -326
  42. package/package.json +2 -1
@@ -1,8 +1,10 @@
1
- # Claude Workers — Creative Strategist Skill
1
+ # Creative Strategist Worker Skill
2
2
  ## Video Creative Brief Production | Multi-Brand System
3
3
 
4
- > **Who this is for:** Any Claude agent in `/Users/antonio/claude-workers/` producing a Video Creative Brief.
4
+ > **Who this is for:** Any agent (Claude is first-party; Cursor / Codex / Gemini / custom harnesses are equally supported) operating inside `${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/` and producing a Video Creative Brief.
5
5
  > Read this file fully before starting. Every section is a required step.
6
+ >
7
+ > **Workspace path:** all commands below reference the kit workspace via the `CREATIVE_STRATEGIST_HOME` env var. Default: `$HOME/creative-strategist`. Override it to any directory (e.g. `export CREATIVE_STRATEGIST_HOME=$HOME/claude-workers`) to mount your own brand/template tree without forking this kit.
6
8
 
7
9
  ---
8
10
 
@@ -53,7 +55,7 @@ Required fields: `client_name`, `slug`, `primary_service`, `landing_page`, `targ
53
55
  ## STEP 1b — READ THE BRAND KIT
54
56
 
55
57
  ```bash
56
- cat /Users/antonio/claude-workers/brands/<client-slug>/brand-kit.md
58
+ cat ${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/brands/<client-slug>/brand-kit.md
57
59
  ```
58
60
 
59
61
  Load every field. The brief JS must pull colors, tone, and guardrails from this file — not memory.
@@ -88,7 +90,7 @@ Phone + Website: [from brand kit]
88
90
  > **Do this first — every time.** A frozen format skips frame extraction entirely.
89
91
 
90
92
  ```
91
- Read /Users/antonio/claude-workers/templates/ad-formats/INDEX.md
93
+ Read ${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/templates/ad-formats/INDEX.md
92
94
  ```
93
95
 
94
96
  **Match found?**
@@ -99,7 +101,7 @@ Read /Users/antonio/claude-workers/templates/ad-formats/INDEX.md
99
101
 
100
102
  **Then load scene modules:**
101
103
  ```
102
- Read /Users/antonio/claude-workers/templates/scene-modules/INDEX.md
104
+ Read ${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/templates/scene-modules/INDEX.md
103
105
  ```
104
106
  Pull each module listed under "Scene Modules Used" in the format file.
105
107
 
@@ -123,7 +125,7 @@ Add rows to templates/scene-modules/INDEX.md
123
125
  **3-pass grep method (fast):**
124
126
 
125
127
  ```bash
126
- CSV=/Users/antonio/claude-workers/templates/hooks-library/500-winning-hooks.csv
128
+ CSV=${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/templates/hooks-library/500-winning-hooks.csv
127
129
 
128
130
  # Pass 1 — client niche / pain-point keywords
129
131
  grep -i "KEYWORD1\|KEYWORD2" "$CSV" | head -10
@@ -218,13 +220,13 @@ APPENDIX — AI video generation prompts (Veo 3 / Runway) — labele
218
220
 
219
221
  ```bash
220
222
  # Copy and fill the template
221
- cp /Users/antonio/claude-workers/templates/brief-template.js /tmp/docx_work/<slug>_brief_v1.js
223
+ cp ${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/templates/brief-template.js /tmp/docx_work/<slug>_brief_v1.js
222
224
  # Edit: fill CONFIG (colors from brand kit) + BRIEF (all content)
223
225
 
224
226
  # Run
225
227
  cd /tmp/docx_work && npm install docx # once per session
226
228
  node <slug>_brief_v1.js
227
- # Output: /Users/antonio/Downloads/<slug>_VideoBrief_<concept>_v1_<YYYYMMDD>.docx
229
+ # Output: $HOME/Downloads/<slug>_VideoBrief_<concept>_v1_<YYYYMMDD>.docx
228
230
  ```
229
231
 
230
232
  **JS non-negotiables:**
@@ -242,7 +244,7 @@ node <slug>_brief_v1.js
242
244
  ## STEP 5 — OPEN IN GOOGLE DOCS
243
245
 
244
246
  ```bash
245
- open -R "/Users/antonio/Downloads/<filename>.docx"
247
+ open -R "$HOME/Downloads/<filename>.docx"
246
248
  osascript -e 'tell application "Google Chrome" to open location "https://drive.google.com/drive/my-drive"'
247
249
  ```
248
250
 
@@ -254,7 +256,7 @@ Tell the user: "File revealed in Finder. Drag into the Google Drive browser wind
254
256
 
255
257
  ```bash
256
258
  echo "- $(date +%Y-%m-%d) | Video Creative Brief v1 | ~/Downloads/<filename>.docx" \
257
- >> /Users/antonio/claude-workers/brands/<client-slug>/brand-kit.md
259
+ >> ${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/brands/<client-slug>/brand-kit.md
258
260
  ```
259
261
 
260
262
  ---
@@ -313,7 +315,7 @@ Change only the 6 color constants at the top of the JS file — pull from `brand
313
315
  ## FOLDER STRUCTURE
314
316
 
315
317
  ```
316
- /Users/antonio/claude-workers/
318
+ ${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/
317
319
  ├── skills.md ← this file — read first, every session
318
320
  ├── README.md ← kit overview + template library summary
319
321
  ├── templates/
@@ -25,7 +25,7 @@ const CONFIG = {
25
25
  doctor_name: "[DR. NAME, CREDENTIALS]", // e.g. "Dr. Anthony Carabasi, DO"
26
26
  campaign_name: "[CAMPAIGN NAME]", // e.g. "Regenerative Medicine — Spring 2026"
27
27
  date: "[MONTH YEAR]", // e.g. "April 2026"
28
- output_path: "/Users/antonio/Downloads/[ClientSlug]_Video_Creative_Brief_v1_[DATE].docx",
28
+ output_path: `${process.env.HOME}/Downloads/[ClientSlug]_Video_Creative_Brief_v1_[DATE].docx`,
29
29
 
30
30
  // Brief metadata
31
31
  video_length: "[XX seconds]",
@@ -1,7 +1,9 @@
1
1
  # Creative Strategist Worker — Operating Instructions
2
- > You are a creative strategist agent operating inside `/Users/antonio/claude-workers/`.
2
+ > You are a creative strategist agent operating inside `${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/`.
3
3
  > Read this file completely before taking any action. Every section is enforced.
4
4
  >
5
+ > **Agent compatibility:** Claude is first-party (this file is what Claude Code loads), but the kit is agent-agnostic — Cursor, Codex, Gemini, or any harness reading this file can run the same workflow. All workspace paths resolve through the `CREATIVE_STRATEGIST_HOME` env var (default `$HOME/creative-strategist`); override it to mount an existing tree (e.g. `export CREATIVE_STRATEGIST_HOME=$HOME/claude-workers`).
6
+ >
5
7
  > Last updated: 2026-04-08
6
8
 
7
9
  ---
@@ -24,7 +26,7 @@ You do NOT produce:
24
26
  Everything about format, docx rules, design system, and frame analysis lives here:
25
27
 
26
28
  ```
27
- /Users/antonio/claude-workers/skills.md
29
+ ${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/skills.md
28
30
  ```
29
31
 
30
32
  **Read it first. Every session. No exceptions.**
@@ -39,13 +41,13 @@ When they conflict, skills.md wins on technical rules; this file wins on workflo
39
41
 
40
42
  ```bash
41
43
  # Read the master skill doc
42
- cat /Users/antonio/claude-workers/skills.md
44
+ cat ${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/skills.md
43
45
 
44
46
  # Check for existing briefs for this client (if returning client)
45
- ls /Users/antonio/claude-workers/brands/<slug>/
47
+ ls ${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/brands/<slug>/
46
48
 
47
49
  # Check the deliverables log for any prior brief output
48
- grep "docx" /Users/antonio/claude-workers/brands/<slug>/brand-kit.md
50
+ grep "docx" ${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/brands/<slug>/brand-kit.md
49
51
  ```
50
52
 
51
53
  **Also check for working JS examples in `/tmp/docx_work/` — use the most recent one for this
@@ -64,7 +66,7 @@ Existing brief JS files to reference (in priority order):
64
66
  ### STEP 2 — Load the Brand Kit
65
67
 
66
68
  ```bash
67
- cat /Users/antonio/claude-workers/brands/<slug>/brand-kit.md
69
+ cat ${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/brands/<slug>/brand-kit.md
68
70
  ```
69
71
 
70
72
  Load every field into context:
@@ -76,9 +78,9 @@ Load every field into context:
76
78
 
77
79
  If the brand kit does not exist → copy the template and fill from context:
78
80
  ```bash
79
- cp /Users/antonio/claude-workers/brands/_template/brand-kit.md \
80
- /Users/antonio/claude-workers/brands/<new-slug>/brand-kit.md
81
- mkdir -p /Users/antonio/claude-workers/brands/<new-slug>/assets
81
+ cp ${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/brands/_template/brand-kit.md \
82
+ ${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/brands/<new-slug>/brand-kit.md
83
+ mkdir -p ${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/brands/<new-slug>/assets
82
84
  ```
83
85
 
84
86
  ---
@@ -158,7 +160,7 @@ If a muse/reference video exists — **do not skip this step. It is not optional
158
160
 
159
161
  Follow the complete frame analysis workflow documented in:
160
162
  ```
161
- /Users/antonio/claude-workers/skills.md → SKILL MODULE: FRAME-BY-FRAME VIDEO ANALYSIS
163
+ ${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/skills.md → SKILL MODULE: FRAME-BY-FRAME VIDEO ANALYSIS
162
164
  ```
163
165
 
164
166
  Quick reference:
@@ -211,10 +213,9 @@ Save to: `/tmp/docx_work/<slug>_brief_v<N>.js`
211
213
  ### STEP 6 — RUN THE SCRIPT
212
214
 
213
215
  ```bash
214
- mkdir -p /tmp/docx_work/node_modules
215
- ln -sf /Users/antonio/.nvm/versions/node/v18.20.5/lib/node_modules/docx \
216
- /tmp/docx_work/node_modules/docx
217
- cd /tmp/docx_work && node <slug>_brief_v<N>.js
216
+ mkdir -p /tmp/docx_work
217
+ cd /tmp/docx_work && npm install docx # once per session
218
+ node <slug>_brief_v<N>.js
218
219
  ```
219
220
 
220
221
  If it errors: read the exact error line, fix in place, re-run. Do NOT start over from scratch.
@@ -225,7 +226,7 @@ If it errors: read the exact error line, fix in place, re-run. Do NOT start over
225
226
 
226
227
  ```bash
227
228
  # Reveal file in Finder
228
- open -R "/Users/antonio/Downloads/<filename>.docx"
229
+ open -R "$HOME/Downloads/<filename>.docx"
229
230
 
230
231
  # Open Google Drive in Chrome
231
232
  osascript -e 'tell application "Google Chrome" to open location "https://drive.google.com/drive/my-drive"'
@@ -246,7 +247,7 @@ osascript -e 'tell application "Google Chrome" to open location "<URL>"'
246
247
 
247
248
  ```bash
248
249
  echo "- $(date +%Y-%m-%d) | Video Creative Brief v<N> — <Campaign Name> | ~/Downloads/<filename>.docx" \
249
- >> /Users/antonio/claude-workers/brands/<slug>/brand-kit.md
250
+ >> ${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/brands/<slug>/brand-kit.md
250
251
  ```
251
252
 
252
253
  ---
@@ -357,9 +358,9 @@ Use Chrome for the following tasks:
357
358
 
358
359
  ```bash
359
360
  # 1. Create brand folder
360
- cp /Users/antonio/claude-workers/brands/_template/brand-kit.md \
361
- /Users/antonio/claude-workers/brands/<new-slug>/brand-kit.md
362
- mkdir -p /Users/antonio/claude-workers/brands/<new-slug>/assets
361
+ cp ${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/brands/_template/brand-kit.md \
362
+ ${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/brands/<new-slug>/brand-kit.md
363
+ mkdir -p ${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/brands/<new-slug>/assets
363
364
 
364
365
  # 2. Fill all YAML fields from conversation
365
366
  # 3. Mark unknown fields: "TBD — confirm with client"
@@ -374,8 +375,8 @@ mkdir -p /Users/antonio/claude-workers/brands/<new-slug>/assets
374
375
  |-----------|-----------|
375
376
  | Brief JS | `/tmp/docx_work/<slug>_brief_v<N>.js` |
376
377
  | Output docx | `~/Downloads/<ClientName>_VideoBrief_<CampaignSlug>_v<N>_<YYYYMMDD>.docx` |
377
- | Brand kit | `/Users/antonio/claude-workers/brands/<slug>/brand-kit.md` |
378
- | Assets | `/Users/antonio/claude-workers/brands/<slug>/assets/<filename>` |
378
+ | Brand kit | `${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/brands/<slug>/brand-kit.md` |
379
+ | Assets | `${CREATIVE_STRATEGIST_HOME:-$HOME/creative-strategist}/brands/<slug>/assets/<filename>` |
379
380
  | Muse frames | `/tmp/muse_frames/frame_Xs.jpg` |
380
381
 
381
382
  ---
@@ -3,5 +3,7 @@
3
3
  # No API key is required for this kit.
4
4
 
5
5
  # Optional: override local fork path.
6
- # Default: ~/ai-website-cloner-template
7
- AI_CLONER_FORK_PATH=~/ai-website-cloner-template
6
+ # Canonical env var: AI_WEBSITE_CLONER_HOME (uniform pattern across all worker kits)
7
+ # Legacy alias: AI_CLONER_FORK_PATH (still accepted by the CLI)
8
+ # Default when unset: $HOME/ai-website-cloner-template
9
+ AI_WEBSITE_CLONER_HOME=$HOME/ai-website-cloner-template
@@ -19,7 +19,7 @@
19
19
  bash setup/clone-fork.sh
20
20
  ```
21
21
 
22
- This clones the `ai-website-cloner-template` fork to `~/ai-website-cloner-template` and runs `npm install`.
22
+ This clones the `ai-website-cloner-template` fork to `$HOME/ai-website-cloner-template` and runs `npm install`.
23
23
 
24
24
  ---
25
25
 
@@ -85,12 +85,12 @@ The agent will:
85
85
 
86
86
  All artifacts land in:
87
87
  ```
88
- ~/ai-website-cloner-template/output/<client-slug>/<project-slug>/
88
+ $HOME/ai-website-cloner-template/output/<client-slug>/<project-slug>/
89
89
  ```
90
90
 
91
91
  The cloned Next.js components live in:
92
92
  ```
93
- ~/ai-website-cloner-template/src/components/
93
+ $HOME/ai-website-cloner-template/src/components/
94
94
  ```
95
95
 
96
96
  ---
@@ -98,7 +98,7 @@ The cloned Next.js components live in:
98
98
  ## Running the cloned site
99
99
 
100
100
  ```bash
101
- cd ~/ai-website-cloner-template
101
+ cd $HOME/ai-website-cloner-template
102
102
  npm run dev
103
103
  ```
104
104
 
@@ -10,7 +10,7 @@ This kit assumes the `ai-website-cloner-template` fork is checked out and instal
10
10
 
11
11
  | Assumption | Default | Override |
12
12
  |---|---|---|
13
- | Fork directory | `~/ai-website-cloner-template` | `AI_CLONER_FORK_PATH` env var |
13
+ | Fork directory | `$HOME/ai-website-cloner-template` | `AI_WEBSITE_CLONER_HOME` (legacy: `AI_CLONER_FORK_PATH`) env var |
14
14
  | Fork repo URL | `https://github.com/JCodesMore/ai-website-cloner-template` | n/a |
15
15
  | Node.js version | 24+ (strict) | n/a — minimum requirement |
16
16
  | Package manager | npm | n/a |
@@ -3,7 +3,7 @@
3
3
  # Run from any location. Installs to ~/ai-website-cloner-template (or AI_CLONER_FORK_PATH).
4
4
  set -e
5
5
 
6
- FORK_DIR="${AI_CLONER_FORK_PATH:-$HOME/ai-website-cloner-template}"
6
+ FORK_DIR="${AI_WEBSITE_CLONER_HOME:-${AI_CLONER_FORK_PATH:-$HOME/ai-website-cloner-template}}"
7
7
  REPO_URL="https://github.com/JCodesMore/ai-website-cloner-template.git"
8
8
 
9
9
  echo "=== Growthub AI Website Cloner — Fork Setup ==="
@@ -5,7 +5,7 @@ import { execSync } from "node:child_process";
5
5
  import { resolve } from "node:path";
6
6
  import { homedir } from "node:os";
7
7
 
8
- const FORK_PATH = process.env.AI_CLONER_FORK_PATH || resolve(homedir(), "ai-website-cloner-template");
8
+ const FORK_PATH = process.env.AI_WEBSITE_CLONER_HOME || process.env.AI_CLONER_FORK_PATH || resolve(homedir(), "ai-website-cloner-template");
9
9
 
10
10
  let passed = 0;
11
11
  let failed = 0;
@@ -8,7 +8,7 @@ Run through this checklist before producing the platform handoff.
8
8
 
9
9
  ## Environment validation
10
10
 
11
- - [ ] Fork exists at `~/ai-website-cloner-template` (or `AI_CLONER_FORK_PATH`)
11
+ - [ ] Fork exists at `$HOME/ai-website-cloner-template` (or `AI_WEBSITE_CLONER_HOME` (legacy: `AI_CLONER_FORK_PATH`))
12
12
  - [ ] Node.js 24+ confirmed (`node --version`)
13
13
  - [ ] `node_modules/` installed in fork root
14
14
  - [ ] AI agent is active and running in the fork directory
@@ -55,7 +55,7 @@ Before loading any methodology, verify the environment is ready.
55
55
 
56
56
  **Check 1 — Fork directory exists:**
57
57
 
58
- Confirm the fork is checked out at `~/ai-website-cloner-template` (or `AI_CLONER_FORK_PATH` if set).
58
+ Confirm the fork is checked out at `$HOME/ai-website-cloner-template` (or `AI_WEBSITE_CLONER_HOME` (legacy: `AI_CLONER_FORK_PATH`) if set).
59
59
 
60
60
  If missing, tell the user:
61
61
 
@@ -2,9 +2,11 @@
2
2
  # Copy this file to .env and fill in your values.
3
3
  # Never commit .env to version control.
4
4
 
5
- # Path to your local clone of the geo-seo-claude fork
6
- # Default is ~/geo-seo-claude only set this if your fork is elsewhere
7
- # GEO_SEO_FORK_PATH=/path/to/your/geo-seo-claude
5
+ # Path to your local clone of the geo-seo-claude fork.
6
+ # Canonical env var: GEO_SEO_HOME (uniform pattern across all worker kits)
7
+ # Legacy alias: GEO_SEO_FORK_PATH (still accepted by the CLI)
8
+ # Default when unset: $HOME/geo-seo-claude
9
+ # GEO_SEO_HOME=/path/to/your/geo-seo-claude
8
10
 
9
11
  # Anthropic API key — required for agent-enhanced analysis (Steps 5-9)
10
12
  # Core Python audit commands work without this key
@@ -54,14 +54,14 @@ if command -v playwright >/dev/null 2>&1; then
54
54
  fi
55
55
 
56
56
  # Check for the fork directory
57
- FORK_DIR="${GEO_SEO_FORK_PATH:-$HOME/geo-seo-claude}"
57
+ FORK_DIR="${GEO_SEO_HOME:-${GEO_SEO_FORK_PATH:-$HOME/geo-seo-claude}}"
58
58
  if [ -d "$FORK_DIR" ]; then
59
59
  echo "OK geo-seo-claude fork at $FORK_DIR"
60
60
  PASS=$((PASS+1))
61
61
  else
62
62
  echo "MISS geo-seo-claude fork not found at $FORK_DIR"
63
63
  echo " Run: bash setup/clone-fork.sh"
64
- echo " Or set GEO_SEO_FORK_PATH to your fork path in .env"
64
+ echo " Or set GEO_SEO_HOME (legacy alias: GEO_SEO_FORK_PATH) to your fork path in .env"
65
65
  FAIL=$((FAIL+1))
66
66
  fi
67
67
 
@@ -3,7 +3,7 @@
3
3
  # Usage: bash setup/clone-fork.sh
4
4
  set -e
5
5
 
6
- FORK_DIR="${GEO_SEO_FORK_PATH:-$HOME/geo-seo-claude}"
6
+ FORK_DIR="${GEO_SEO_HOME:-${GEO_SEO_FORK_PATH:-$HOME/geo-seo-claude}}"
7
7
  REPO_URL="https://github.com/zubair-trabzada/geo-seo-claude"
8
8
 
9
9
  echo "=== Growthub GEO SEO Studio — Fork Setup ==="
@@ -68,7 +68,7 @@ console.log("--- Fork Path Check ---");
68
68
 
69
69
  // ─── Fork Path ─────────────────────────────────────────────────────────────
70
70
 
71
- const forkPathRaw = config["GEO_SEO_FORK_PATH"] || join(homedir(), "geo-seo-claude");
71
+ const forkPathRaw = config["GEO_SEO_HOME"] || config["GEO_SEO_FORK_PATH"] || join(homedir(), "geo-seo-claude");
72
72
  const forkPath = resolve(forkPathRaw);
73
73
 
74
74
  if (existsSync(forkPath)) {
@@ -7,7 +7,7 @@ Use this checklist before starting a session, when validating a kit installation
7
7
  ## PRE-SESSION CHECKLIST
8
8
 
9
9
  ### Environment
10
- - [ ] geo-seo-claude fork is present at `GEO_SEO_FORK_PATH` (or `~/geo-seo-claude`) — OR agent-only mode is confirmed
10
+ - [ ] geo-seo-claude fork is present at `GEO_SEO_HOME` / `GEO_SEO_FORK_PATH` (default `$HOME/geo-seo-claude`) — OR agent-only mode is confirmed
11
11
  - [ ] Python 3.8+ is installed (`python3 --version`)
12
12
  - [ ] Playwright is installed (`playwright --version`)
13
13
  - [ ] Playwright chromium browser is installed (`playwright install chromium` — or already done)
@@ -68,7 +68,7 @@ If `python3` is not found, stop and tell the user:
68
68
 
69
69
  **Check 2 — Fork exists (local-fork mode only):**
70
70
 
71
- Check whether geo-seo-claude is cloned at `GEO_SEO_FORK_PATH` (default `~/geo-seo-claude`).
71
+ Check whether geo-seo-claude is cloned at `GEO_SEO_HOME` (legacy alias: `GEO_SEO_FORK_PATH`; default `$HOME/geo-seo-claude`).
72
72
 
73
73
  If the clone is missing and the user wants local-fork mode, stop and tell the user:
74
74
 
@@ -3,5 +3,7 @@
3
3
  # Never commit .env to version control.
4
4
 
5
5
  # Absolute path to your local Hyperframes clone.
6
- # Example: /Users/<you>/dev/hyperframes
7
- HYPERFRAMES_LOCAL_PATH=
6
+ # Canonical env var: HYPERFRAMES_HOME (uniform pattern across all worker kits)
7
+ # Legacy alias: HYPERFRAMES_LOCAL_PATH (still accepted by the CLI)
8
+ # Default when unset: $HOME/hyperframes
9
+ HYPERFRAMES_HOME=$HOME/hyperframes
@@ -8,5 +8,5 @@ Discovery path:
8
8
 
9
9
  Feature branch demo checks:
10
10
 
11
- - `zsh /Users/antonio/growthub-local/scripts/demo-cli.sh cli kit list --family studio`
12
- - `zsh /Users/antonio/growthub-local/scripts/demo-cli.sh cli kit inspect hyperframes`
11
+ - `bash scripts/demo-cli.sh cli kit list --family studio`
12
+ - `bash scripts/demo-cli.sh cli kit inspect hyperframes`
@@ -2,7 +2,8 @@
2
2
  set -euo pipefail
3
3
 
4
4
  REPO_URL="${HYPERFRAMES_REPO_URL:-https://github.com/heygen-com/hyperframes}"
5
- LOCAL_PATH="${HYPERFRAMES_LOCAL_PATH:-./.hyperframes}"
5
+ # Canonical: HYPERFRAMES_HOME. Legacy alias: HYPERFRAMES_LOCAL_PATH.
6
+ LOCAL_PATH="${HYPERFRAMES_HOME:-${HYPERFRAMES_LOCAL_PATH:-./.hyperframes}}"
6
7
 
7
8
  if [ -d "${LOCAL_PATH}/.git" ]; then
8
9
  git -C "${LOCAL_PATH}" fetch origin
@@ -8,8 +8,9 @@ if (!fs.existsSync(envPath)) {
8
8
  }
9
9
 
10
10
  const raw = fs.readFileSync(envPath, "utf8");
11
- if (!raw.includes("HYPERFRAMES_LOCAL_PATH=")) {
12
- console.error("HYPERFRAMES_LOCAL_PATH is required in .env");
11
+ // Canonical: HYPERFRAMES_HOME. Legacy alias: HYPERFRAMES_LOCAL_PATH.
12
+ if (!raw.includes("HYPERFRAMES_HOME=") && !raw.includes("HYPERFRAMES_LOCAL_PATH=")) {
13
+ console.error("HYPERFRAMES_HOME (or legacy HYPERFRAMES_LOCAL_PATH) is required in .env");
13
14
  process.exit(1);
14
15
  }
15
16
 
@@ -7,3 +7,8 @@ MUAPI_API_KEY=your_muapi_key_here
7
7
 
8
8
  # Muapi base URL — do not change unless self-hosting
9
9
  MUAPI_BASE_URL=https://api.muapi.io
10
+
11
+ # Optional: override local fork path for Open-Higgsfield-AI clone.
12
+ # Canonical env var: OPEN_HIGGSFIELD_HOME (uniform pattern across all worker kits)
13
+ # Default when unset: $HOME/open-higgsfield-ai
14
+ # OPEN_HIGGSFIELD_HOME=$HOME/open-higgsfield-ai
@@ -50,7 +50,7 @@ Checks for `node`, `npm`, `git`, and `ffmpeg`. All four are required for local-f
50
50
  bash setup/clone-fork.sh
51
51
  ```
52
52
 
53
- Clones the Open Higgsfield AI repo to `~/open-higgsfield-ai`, installs dependencies, **automatically applies the CORS proxy patch** (see `setup/patch-cors-proxy.sh`), and starts the dev server at `http://localhost:3001`.
53
+ Clones the Open Higgsfield AI repo to `$HOME/open-higgsfield-ai`, installs dependencies, **automatically applies the CORS proxy patch** (see `setup/patch-cors-proxy.sh`), and starts the dev server at `http://localhost:3001`.
54
54
 
55
55
  The CORS patch is required — the upstream repo calls `api.muapi.ai` directly from the browser, which modern browsers block. The patch routes all API calls through the local Next.js server instead.
56
56
 
@@ -60,7 +60,7 @@ Next.js proxies them to `api.muapi.ai` from the server where CORS does not apply
60
60
  **To apply manually if not already patched:**
61
61
  ```bash
62
62
  bash setup/patch-cors-proxy.sh [path-to-fork]
63
- # defaults to ~/open-higgsfield-ai
63
+ # defaults to $HOME/open-higgsfield-ai
64
64
  ```
65
65
 
66
66
  **Affected functions in muapi.js:**
@@ -31,8 +31,10 @@ XAI_API_KEY=your_xai_key_here
31
31
 
32
32
  # ─── OpenMontage Fork Path ───
33
33
  # Absolute path to your local OpenMontage clone.
34
- # Defaults to ~/OpenMontage if unset.
35
- # OPENMONTAGE_PATH=~/OpenMontage
34
+ # Canonical env var: OPEN_MONTAGE_HOME (uniform pattern across all worker kits)
35
+ # Legacy alias: OPENMONTAGE_PATH (still accepted by the CLI)
36
+ # Default when unset: $HOME/OpenMontage
37
+ # OPEN_MONTAGE_HOME=$HOME/OpenMontage
36
38
 
37
39
  # ─── GrowthHub CMS Node Bridge ───
38
40
  # When using CMS nodes for video/image generation, the bridge
@@ -58,7 +58,7 @@ bash setup/check-deps.sh # Check Python, FFmpeg, Node.js, Git
58
58
  bash setup/clone-fork.sh # Clone OpenMontage and run make setup
59
59
  ```
60
60
 
61
- This clones OpenMontage to `~/OpenMontage`, installs all dependencies (Python packages, Remotion, Piper TTS), and verifies the tool registry.
61
+ This clones OpenMontage to `$HOME/OpenMontage`, installs all dependencies (Python packages, Remotion, Piper TTS), and verifies the tool registry.
62
62
 
63
63
  Skip this step if you are using agent-only or hybrid mode.
64
64
 
@@ -27,7 +27,7 @@ This file documents the runtime environment expectations for the Open Montage St
27
27
 
28
28
  ### OpenMontage Clone
29
29
 
30
- - Default path: `~/OpenMontage` (override with `OPENMONTAGE_PATH` in `.env`)
30
+ - Default path: `$HOME/OpenMontage` (override with `OPEN_MONTAGE_HOME` (legacy: `OPENMONTAGE_PATH`) in `.env`)
31
31
  - Setup: `git clone https://github.com/calesthio/OpenMontage.git && cd OpenMontage && make setup`
32
32
  - The clone includes Python requirements, Remotion composer, and Piper TTS
33
33
 
@@ -4,7 +4,8 @@ set -euo pipefail
4
4
  # Clone and set up OpenMontage for local-fork execution mode.
5
5
  # Usage: bash setup/clone-fork.sh [target-dir]
6
6
 
7
- TARGET_DIR="${1:-${OPENMONTAGE_PATH:-$HOME/OpenMontage}}"
7
+ # Canonical: OPEN_MONTAGE_HOME. Legacy alias: OPENMONTAGE_PATH.
8
+ TARGET_DIR="${1:-${OPEN_MONTAGE_HOME:-${OPENMONTAGE_PATH:-$HOME/OpenMontage}}}"
8
9
 
9
10
  echo "=== OpenMontage Fork Setup ==="
10
11
  echo "Target directory: $TARGET_DIR"
@@ -89,8 +89,11 @@ if (configured.length === 0) {
89
89
 
90
90
  console.log(`[summary] ${configured.length} provider(s) configured, ${missing.length} not set.`);
91
91
 
92
- // Check OpenMontage path
93
- const omPath = env.OPENMONTAGE_PATH || resolve(process.env.HOME || "~", "OpenMontage");
92
+ // Check OpenMontage path — canonical OPEN_MONTAGE_HOME, legacy alias OPENMONTAGE_PATH.
93
+ const omPath =
94
+ env.OPEN_MONTAGE_HOME ||
95
+ env.OPENMONTAGE_PATH ||
96
+ resolve(process.env.HOME || "~", "OpenMontage");
94
97
  if (existsSync(omPath)) {
95
98
  console.log(`[ok] OpenMontage clone found at: ${omPath}`);
96
99
  } else {
@@ -16,9 +16,9 @@ Run through this checklist before your first generation session.
16
16
  - [ ] Python 3.10+ installed: `python3 --version`
17
17
  - [ ] FFmpeg installed: `ffmpeg -version`
18
18
  - [ ] Node.js 18+ installed: `node --version`
19
- - [ ] OpenMontage clone exists at `$OPENMONTAGE_PATH` (default `~/OpenMontage`)
20
- - [ ] OpenMontage setup completed: `cd ~/OpenMontage && python -c "from tools.tool_registry import registry; registry.discover(); print('OK')"`
21
- - [ ] Remotion dependencies installed: `cd ~/OpenMontage/remotion-composer && node -e "require('remotion')"`
19
+ - [ ] OpenMontage clone exists at `$OPENMONTAGE_PATH` (default `$HOME/OpenMontage`)
20
+ - [ ] OpenMontage setup completed: `cd $HOME/OpenMontage && python -c "from tools.tool_registry import registry; registry.discover(); print('OK')"`
21
+ - [ ] Remotion dependencies installed: `cd $HOME/OpenMontage/remotion-composer && node -e "require('remotion')"`
22
22
 
23
23
  ## CMS Node Validation (skip if local-fork only)
24
24
 
@@ -76,7 +76,7 @@ If none are set, check whether the user has a GrowthHub session for CMS node gen
76
76
 
77
77
  **Check 3 — OpenMontage clone (local-fork mode only):**
78
78
 
79
- If using `local-fork` execution mode, check whether the clone exists at the path in `OPENMONTAGE_PATH` (default `~/OpenMontage`).
79
+ If using `local-fork` execution mode, check whether the clone exists at the path in `OPEN_MONTAGE_HOME` (legacy: `OPENMONTAGE_PATH`) (default `$HOME/OpenMontage`).
80
80
 
81
81
  If not found:
82
82
 
@@ -148,7 +148,7 @@ remotion-composer/ # React/Remotion composition engine
148
148
  Run capability discovery if local fork is available:
149
149
 
150
150
  ```bash
151
- cd ~/OpenMontage && python -c "from tools.tool_registry import registry; import json; registry.discover(); print(json.dumps(registry.support_envelope(), indent=2))"
151
+ cd $HOME/OpenMontage && python -c "from tools.tool_registry import registry; import json; registry.discover(); print(json.dumps(registry.support_envelope(), indent=2))"
152
152
  ```
153
153
 
154
154
  If the user is not pointing at a fork checkout, proceed using the assumptions frozen in this kit and explicitly mark the plan as `repo-unverified`.
@@ -3,8 +3,10 @@
3
3
  # Never commit .env to version control.
4
4
 
5
5
  # Optional override for your local Postiz fork path.
6
- # Default used by scripts is ~/postiz-app.
7
- # POSTIZ_FORK_PATH=/path/to/your/postiz-app
6
+ # Canonical env var: POSTIZ_HOME (uniform pattern across all worker kits)
7
+ # Legacy alias: POSTIZ_FORK_PATH (still accepted by the CLI)
8
+ # Default when unset: $HOME/postiz-app
9
+ # POSTIZ_HOME=/path/to/your/postiz-app
8
10
 
9
11
  # Base URL for the local Postiz API.
10
12
  POSTIZ_API_URL=http://localhost:3000
@@ -43,7 +43,7 @@ node setup/verify-env.mjs
43
43
  ```
44
44
 
45
45
  This checks:
46
- - Whether the Postiz fork is cloned at `POSTIZ_FORK_PATH` (default: `~/postiz-app`)
46
+ - Whether the Postiz fork is cloned at `POSTIZ_HOME` (legacy: `POSTIZ_FORK_PATH`) (default: `$HOME/postiz-app`)
47
47
  - Whether the Postiz API is reachable on port 3000
48
48
  - Whether `ANTHROPIC_API_KEY` is valid format (if set for AI caption enhancement)
49
49
  - No OAuth tokens are validated here — those are managed inside Postiz
@@ -62,7 +62,7 @@ Verifies that `node`, `docker`, `docker compose`, and `git` are available. Check
62
62
  bash setup/clone-fork.sh
63
63
  ```
64
64
 
65
- This clones `postiz-app` to `~/postiz-app` (or `POSTIZ_FORK_PATH` if set), runs `docker compose up -d` to start Redis, PostgreSQL, and the Postiz API, and waits for the API healthcheck to pass.
65
+ This clones `postiz-app` to `$HOME/postiz-app` (or `POSTIZ_HOME` (legacy: `POSTIZ_FORK_PATH`) if set), runs `docker compose up -d` to start Redis, PostgreSQL, and the Postiz API, and waits for the API healthcheck to pass.
66
66
 
67
67
  Skip this step if you are using **agent-only mode** — the operator can plan campaigns, draft captions, and produce content calendars without a running Postiz instance.
68
68
 
@@ -3,7 +3,7 @@
3
3
  # Usage: bash setup/clone-fork.sh
4
4
  set -e
5
5
 
6
- FORK_DIR="${POSTIZ_FORK_PATH:-$HOME/postiz-app}"
6
+ FORK_DIR="${POSTIZ_HOME:-${POSTIZ_FORK_PATH:-$HOME/postiz-app}}"
7
7
  REPO_URL="https://github.com/gitroomhq/postiz-app"
8
8
 
9
9
  echo "=== Growthub Postiz Social Media Studio — Fork Setup ==="
@@ -29,7 +29,8 @@ console.log("=".repeat(60));
29
29
  console.log("");
30
30
 
31
31
  // --- Check 1: Postiz fork path ---
32
- const forkPath = process.env.POSTIZ_FORK_PATH ?? join(homedir(), "postiz-app");
32
+ // Canonical: POSTIZ_HOME. Legacy alias: POSTIZ_FORK_PATH.
33
+ const forkPath = process.env.POSTIZ_HOME ?? process.env.POSTIZ_FORK_PATH ?? join(homedir(), "postiz-app");
33
34
  const forkExists = existsSync(forkPath);
34
35
  check("Postiz fork directory exists", forkExists, forkExists ? forkPath : `Not found at ${forkPath}`);
35
36
 
@@ -15,7 +15,7 @@
15
15
 
16
16
  ### Local-Fork Mode (skip if agent-only)
17
17
 
18
- - [ ] Postiz fork is cloned at `POSTIZ_FORK_PATH` (default: `~/postiz-app`)
18
+ - [ ] Postiz fork is cloned at `POSTIZ_HOME` (legacy: `POSTIZ_FORK_PATH`) (default: `$HOME/postiz-app`)
19
19
  - [ ] `docker compose ps` shows `postiz`, `postiz-postgres`, `postiz-redis` all running
20
20
  - [ ] `curl http://localhost:3000/api/healthcheck` returns a 200 response
21
21
  - [ ] At least one platform integration is connected and authorized in the Postiz admin UI