@growthub/cli 0.3.50 → 0.3.53

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 (38) hide show
  1. package/assets/worker-kits/growthub-geo-seo-v1/.env.example +12 -0
  2. package/assets/worker-kits/growthub-geo-seo-v1/QUICKSTART.md +138 -0
  3. package/assets/worker-kits/growthub-geo-seo-v1/brands/NEW-CLIENT.md +104 -0
  4. package/assets/worker-kits/growthub-geo-seo-v1/brands/_template/brand-kit.md +116 -0
  5. package/assets/worker-kits/growthub-geo-seo-v1/brands/growthub/brand-kit.md +117 -0
  6. package/assets/worker-kits/growthub-geo-seo-v1/bundles/growthub-geo-seo-v1.json +54 -0
  7. package/assets/worker-kits/growthub-geo-seo-v1/docs/geo-seo-fork-integration.md +244 -0
  8. package/assets/worker-kits/growthub-geo-seo-v1/docs/pdf-report-layer.md +139 -0
  9. package/assets/worker-kits/growthub-geo-seo-v1/docs/scoring-methodology.md +230 -0
  10. package/assets/worker-kits/growthub-geo-seo-v1/docs/subagent-dispatch.md +273 -0
  11. package/assets/worker-kits/growthub-geo-seo-v1/examples/citability-sample.md +155 -0
  12. package/assets/worker-kits/growthub-geo-seo-v1/examples/geo-audit-sample.md +126 -0
  13. package/assets/worker-kits/growthub-geo-seo-v1/examples/pdf-report-sample.md +207 -0
  14. package/assets/worker-kits/growthub-geo-seo-v1/examples/prospect-proposal-sample.md +184 -0
  15. package/assets/worker-kits/growthub-geo-seo-v1/growthub-meta/README.md +124 -0
  16. package/assets/worker-kits/growthub-geo-seo-v1/growthub-meta/kit-standard.md +116 -0
  17. package/assets/worker-kits/growthub-geo-seo-v1/kit.json +102 -0
  18. package/assets/worker-kits/growthub-geo-seo-v1/output/README.md +114 -0
  19. package/assets/worker-kits/growthub-geo-seo-v1/output-standards.md +143 -0
  20. package/assets/worker-kits/growthub-geo-seo-v1/runtime-assumptions.md +175 -0
  21. package/assets/worker-kits/growthub-geo-seo-v1/setup/check-deps.sh +80 -0
  22. package/assets/worker-kits/growthub-geo-seo-v1/setup/clone-fork.sh +56 -0
  23. package/assets/worker-kits/growthub-geo-seo-v1/setup/verify-env.mjs +152 -0
  24. package/assets/worker-kits/growthub-geo-seo-v1/skills.md +359 -0
  25. package/assets/worker-kits/growthub-geo-seo-v1/templates/brand-visibility-report.md +101 -0
  26. package/assets/worker-kits/growthub-geo-seo-v1/templates/citability-analysis.md +131 -0
  27. package/assets/worker-kits/growthub-geo-seo-v1/templates/client-proposal.md +172 -0
  28. package/assets/worker-kits/growthub-geo-seo-v1/templates/content-analysis.md +136 -0
  29. package/assets/worker-kits/growthub-geo-seo-v1/templates/crawler-access-report.md +115 -0
  30. package/assets/worker-kits/growthub-geo-seo-v1/templates/geo-audit-brief.md +114 -0
  31. package/assets/worker-kits/growthub-geo-seo-v1/templates/geo-score-summary.md +113 -0
  32. package/assets/worker-kits/growthub-geo-seo-v1/templates/llmstxt-plan.md +173 -0
  33. package/assets/worker-kits/growthub-geo-seo-v1/templates/remediation-roadmap.md +150 -0
  34. package/assets/worker-kits/growthub-geo-seo-v1/templates/schema-validation.md +177 -0
  35. package/assets/worker-kits/growthub-geo-seo-v1/templates/technical-foundations.md +108 -0
  36. package/assets/worker-kits/growthub-geo-seo-v1/validation-checklist.md +139 -0
  37. package/assets/worker-kits/growthub-geo-seo-v1/workers/geo-seo-operator/CLAUDE.md +320 -0
  38. package/package.json +1 -1
@@ -0,0 +1,102 @@
1
+ {
2
+ "schemaVersion": 2,
3
+ "kit": {
4
+ "id": "growthub-geo-seo-v1",
5
+ "version": "1.0.0",
6
+ "name": "Growthub Agent Worker Kit — GEO SEO Studio",
7
+ "description": "Self-contained local execution environment for GEO + SEO auditing using geo-seo-claude. Produces AI search visibility audits, citability scores, crawler access reports, brand mention scans, remediation roadmaps, and client-ready PDF deliverables via 14 specialized commands and 5 parallel subagents.",
8
+ "type": "worker",
9
+ "visibility": "public-open-source",
10
+ "sourceRepo": "growthub-local",
11
+ "family": "studio"
12
+ },
13
+ "entrypoint": {
14
+ "workerId": "geo-seo-operator",
15
+ "path": "workers/geo-seo-operator/CLAUDE.md"
16
+ },
17
+ "workerIds": ["geo-seo-operator"],
18
+ "agentContractPath": "workers/geo-seo-operator/CLAUDE.md",
19
+ "brandTemplatePath": "brands/_template/brand-kit.md",
20
+ "publicExampleBrandPaths": ["brands/growthub/brand-kit.md"],
21
+ "frozenAssetPaths": [
22
+ "QUICKSTART.md",
23
+ ".env.example",
24
+ "skills.md",
25
+ "output-standards.md",
26
+ "runtime-assumptions.md",
27
+ "validation-checklist.md",
28
+ "workers/geo-seo-operator/CLAUDE.md",
29
+ "brands/_template/brand-kit.md",
30
+ "brands/growthub/brand-kit.md",
31
+ "brands/NEW-CLIENT.md",
32
+ "setup/clone-fork.sh",
33
+ "setup/verify-env.mjs",
34
+ "setup/check-deps.sh",
35
+ "output/README.md",
36
+ "templates/geo-audit-brief.md",
37
+ "templates/citability-analysis.md",
38
+ "templates/crawler-access-report.md",
39
+ "templates/brand-visibility-report.md",
40
+ "templates/geo-score-summary.md",
41
+ "templates/content-analysis.md",
42
+ "templates/schema-validation.md",
43
+ "templates/technical-foundations.md",
44
+ "templates/llmstxt-plan.md",
45
+ "templates/remediation-roadmap.md",
46
+ "templates/client-proposal.md",
47
+ "examples/geo-audit-sample.md",
48
+ "examples/citability-sample.md",
49
+ "examples/pdf-report-sample.md",
50
+ "examples/prospect-proposal-sample.md",
51
+ "docs/geo-seo-fork-integration.md",
52
+ "docs/subagent-dispatch.md",
53
+ "docs/scoring-methodology.md",
54
+ "docs/pdf-report-layer.md",
55
+ "growthub-meta/README.md",
56
+ "growthub-meta/kit-standard.md"
57
+ ],
58
+ "setupPaths": {
59
+ "quickstart": "QUICKSTART.md",
60
+ "envExample": ".env.example",
61
+ "setupDir": "setup/",
62
+ "outputDir": "output/"
63
+ },
64
+ "outputStandard": {
65
+ "type": "working-directory",
66
+ "description": "Exported folder is intended to be pointed at directly by the agent Working Directory. All outputs are Markdown files written to output/<client-slug>/<project-slug>/.",
67
+ "requiredPaths": [
68
+ "QUICKSTART.md",
69
+ ".env.example",
70
+ "kit.json",
71
+ "bundles/growthub-geo-seo-v1.json",
72
+ "skills.md",
73
+ "workers/geo-seo-operator/CLAUDE.md",
74
+ "brands/_template/brand-kit.md",
75
+ "brands/growthub/brand-kit.md",
76
+ "brands/NEW-CLIENT.md",
77
+ "setup/clone-fork.sh",
78
+ "setup/verify-env.mjs",
79
+ "setup/check-deps.sh",
80
+ "output/README.md",
81
+ "templates",
82
+ "docs",
83
+ "growthub-meta"
84
+ ]
85
+ },
86
+ "bundles": [
87
+ {
88
+ "id": "growthub-geo-seo-v1",
89
+ "version": "1.0.0",
90
+ "path": "bundles/growthub-geo-seo-v1.json"
91
+ }
92
+ ],
93
+ "executionMode": "export",
94
+ "activationModes": ["export"],
95
+ "compatibility": {
96
+ "cliMinVersion": "0.3.50"
97
+ },
98
+ "provenance": {
99
+ "sourceRepo": "growthub-local",
100
+ "frozenAt": "2026-04-14T00:00:00.000Z"
101
+ }
102
+ }
@@ -0,0 +1,114 @@
1
+ # Output Directory
2
+
3
+ All GEO SEO audit artifacts are written here. Each client gets a subdirectory. Each engagement gets a project subdirectory.
4
+
5
+ ---
6
+
7
+ ## Directory Structure
8
+
9
+ ```
10
+ output/
11
+ <client-slug>/
12
+ <project-slug>/
13
+ GeoAuditBrief_v1_YYYYMMDD.md
14
+ CitabilityAnalysis_v1_YYYYMMDD.md
15
+ CrawlerAccessReport_v1_YYYYMMDD.md
16
+ BrandVisibilityReport_v1_YYYYMMDD.md
17
+ GeoScoreSummary_v1_YYYYMMDD.md
18
+ ContentAnalysis_v1_YYYYMMDD.md
19
+ SchemaValidation_v1_YYYYMMDD.md
20
+ TechnicalFoundations_v1_YYYYMMDD.md
21
+ LlmstxtPlan_v1_YYYYMMDD.md
22
+ RemediationRoadmap_v1_YYYYMMDD.md
23
+ ClientProposal_v1_YYYYMMDD.md (if requested)
24
+ geo_score_data.json (machine-readable score data for PDF generation)
25
+ <ClientSlug>_GeoScoreReport_v1_YYYYMMDD.pdf (if PDF delivery requested)
26
+ ```
27
+
28
+ ---
29
+
30
+ ## File Naming Convention
31
+
32
+ ```
33
+ <ClientSlug>_<OutputType>_v<N>_<YYYYMMDD>.md
34
+ ```
35
+
36
+ | Part | Format | Example |
37
+ |---|---|---|
38
+ | ClientSlug | TitleCase, no spaces | `GrowthHub` |
39
+ | OutputType | CamelCase artifact type | `GeoScoreSummary` |
40
+ | Version | `v` + integer | `v1`, `v2` |
41
+ | Date | `YYYYMMDD` | `20260414` |
42
+
43
+ Full example: `GrowthHub_GeoScoreSummary_v1_20260414.md`
44
+
45
+ ---
46
+
47
+ ## Artifact Types (9 Core + 2 Optional)
48
+
49
+ | Artifact | File Name Pattern | Description |
50
+ |---|---|---|
51
+ | GEO Audit Brief | `GeoAuditBrief_v<N>_<YYYYMMDD>.md` | Project scope, objective, command plan |
52
+ | Citability Analysis | `CitabilityAnalysis_v<N>_<YYYYMMDD>.md` | 5-metric citability score with component breakdown |
53
+ | Crawler Access Report | `CrawlerAccessReport_v<N>_<YYYYMMDD>.md` | 14 AI crawler permission matrix |
54
+ | Brand Visibility Report | `BrandVisibilityReport_v<N>_<YYYYMMDD>.md` | 8-platform brand mention scan |
55
+ | GEO Score Summary | `GeoScoreSummary_v<N>_<YYYYMMDD>.md` | 6-component weighted composite score |
56
+ | Content Analysis | `ContentAnalysis_v<N>_<YYYYMMDD>.md` | E-E-A-T, answer blocks, statistical density |
57
+ | Schema Validation | `SchemaValidation_v<N>_<YYYYMMDD>.md` | Structured data coverage and errors |
58
+ | Technical Foundations | `TechnicalFoundations_v<N>_<YYYYMMDD>.md` | Server headers, Core Web Vitals signals |
59
+ | llms.txt Plan | `LlmstxtPlan_v<N>_<YYYYMMDD>.md` | llms.txt implementation plan and files |
60
+ | Remediation Roadmap | `RemediationRoadmap_v<N>_<YYYYMMDD>.md` | 4-week sprint plan with owners |
61
+ | Client Proposal | `ClientProposal_v<N>_<YYYYMMDD>.md` | Agency proposal with pricing and ROI |
62
+ | PDF Report | `<ClientSlug>_GeoScoreReport_v<N>_<YYYYMMDD>.pdf` | Branded PDF for stakeholder delivery |
63
+
64
+ ---
65
+
66
+ ## Usage Notes
67
+
68
+ - **Never edit output files directly.** Always run a new audit and increment the version number.
69
+ - **Version numbering:** Start at v1. Increment on each rescore or significant update.
70
+ - **Rescore tracking:** Compare GEO Score Summary files across versions to track improvement.
71
+ - **Brand kit log:** The operator appends a line to the brand kit's DELIVERABLES LOG after each package is delivered.
72
+
73
+ ---
74
+
75
+ ## Deliverable Tracking Format
76
+
77
+ Append this line to `brands/<client-slug>/brand-kit.md` after each delivery:
78
+
79
+ ```
80
+ - YYYY-MM-DD | GEO SEO Audit Package v<N> — <Project Name> | output/<client-slug>/<project-slug>/
81
+ ```
82
+
83
+ Examples:
84
+ ```
85
+ - 2026-04-14 | GEO SEO Audit Package v1 — Studio Launch Reference | output/growthub/studio-launch-reference/
86
+ - 2026-05-01 | GEO SEO Audit Package v1 — UrbanCycle Full Audit | output/urban-cycle/full-audit-q2-2026/
87
+ - 2026-05-15 | GEO SEO Audit Package v2 — UrbanCycle Post-Remediation Rescore | output/urban-cycle/rescore-may-2026/
88
+ ```
89
+
90
+ ---
91
+
92
+ ## Example Layout (Populated)
93
+
94
+ ```
95
+ output/
96
+ growthub/
97
+ studio-launch-reference/
98
+ GeoAuditBrief_v1_20260414.md
99
+ CitabilityAnalysis_v1_20260414.md
100
+ CrawlerAccessReport_v1_20260414.md
101
+ BrandVisibilityReport_v1_20260414.md
102
+ GeoScoreSummary_v1_20260414.md
103
+ ContentAnalysis_v1_20260414.md
104
+ SchemaValidation_v1_20260414.md
105
+ TechnicalFoundations_v1_20260414.md
106
+ LlmstxtPlan_v1_20260414.md
107
+ RemediationRoadmap_v1_20260414.md
108
+ geo_score_data.json
109
+ GrowthHub_GeoScoreReport_v1_20260414.pdf
110
+ urban-cycle/
111
+ full-audit-q2-2026/
112
+ GeoAuditBrief_v1_20260501.md
113
+ ...
114
+ ```
@@ -0,0 +1,143 @@
1
+ # Output Standards
2
+
3
+ **All GEO SEO Operator outputs must meet these standards before being delivered to a client.**
4
+
5
+ ---
6
+
7
+ ## Output Directory Structure
8
+
9
+ ```
10
+ output/
11
+ <client-slug>/
12
+ <project-slug>/
13
+ GeoAuditBrief_v<N>_<YYYYMMDD>.md
14
+ CitabilityAnalysis_v<N>_<YYYYMMDD>.md
15
+ CrawlerAccessReport_v<N>_<YYYYMMDD>.md
16
+ BrandVisibilityReport_v<N>_<YYYYMMDD>.md
17
+ GeoScoreSummary_v<N>_<YYYYMMDD>.md
18
+ ContentAnalysis_v<N>_<YYYYMMDD>.md
19
+ SchemaValidation_v<N>_<YYYYMMDD>.md
20
+ TechnicalFoundations_v<N>_<YYYYMMDD>.md
21
+ LlmstxtPlan_v<N>_<YYYYMMDD>.md
22
+ RemediationRoadmap_v<N>_<YYYYMMDD>.md
23
+ ClientProposal_v<N>_<YYYYMMDD>.md (if requested)
24
+ geo_score_data.json (always — powers PDF and rescores)
25
+ <ClientSlug>_GeoScoreReport_v<N>_<YYYYMMDD>.pdf (if PDF requested)
26
+ ```
27
+
28
+ ---
29
+
30
+ ## File Naming Convention
31
+
32
+ ```
33
+ <ClientSlug>_<OutputType>_v<N>_<YYYYMMDD>.md
34
+ ```
35
+
36
+ | Part | Rules | Example |
37
+ |---|---|---|
38
+ | ClientSlug | TitleCase, no spaces, no special chars | `UrbanCycle` |
39
+ | OutputType | CamelCase from the list below | `GeoScoreSummary` |
40
+ | Version | `v` + integer, starting at 1 | `v1` |
41
+ | Date | `YYYYMMDD` format | `20260414` |
42
+
43
+ **Output type names:**
44
+
45
+ | Artifact | OutputType string |
46
+ |---|---|
47
+ | GEO Audit Brief | `GeoAuditBrief` |
48
+ | Citability Analysis | `CitabilityAnalysis` |
49
+ | Crawler Access Report | `CrawlerAccessReport` |
50
+ | Brand Visibility Report | `BrandVisibilityReport` |
51
+ | GEO Score Summary | `GeoScoreSummary` |
52
+ | Content Analysis | `ContentAnalysis` |
53
+ | Schema Validation | `SchemaValidation` |
54
+ | Technical Foundations | `TechnicalFoundations` |
55
+ | llms.txt Plan | `LlmstxtPlan` |
56
+ | Remediation Roadmap | `RemediationRoadmap` |
57
+ | Client Proposal | `ClientProposal` |
58
+
59
+ ---
60
+
61
+ ## Required Sections Per Artifact
62
+
63
+ Each artifact must include all sections from its template. Incomplete sections must be marked `<!-- data-gap: reason -->` — never left blank without explanation.
64
+
65
+ | Artifact | Minimum Required Sections |
66
+ |---|---|
67
+ | GeoAuditBrief | Project Overview table, Audit Objective, Command Selection Plan, Success Criteria |
68
+ | CitabilityAnalysis | URL Audited, Citability Score table, Component Breakdown table, Top 3 Improvements |
69
+ | CrawlerAccessReport | URL Audited, Crawler Permission Matrix (all 14 rows), Summary, Recommended Actions |
70
+ | BrandVisibilityReport | Brand Audited, Platform Scan table (all 8 rows), Brand Authority Score, Gap Analysis |
71
+ | GeoScoreSummary | Overall GEO Score (number + grade), Component Scores table, Score Narrative, Priority Recommendations |
72
+ | ContentAnalysis | E-E-A-T Assessment table, Answer Block Analysis, Self-Containment Check, Content Quality Score |
73
+ | SchemaValidation | Schema Types Found table, Validation Errors table, Missing Recommended Types, Implementation Priority |
74
+ | TechnicalFoundations | Server Headers table, Core Signals table, Technical Score, Critical Fixes |
75
+ | LlmstxtPlan | Current Status, Proposed llms.txt content, Proposed llms-full.txt content, Implementation Steps |
76
+ | RemediationRoadmap | Current vs. Target Score, 4-Week Sprint Plan (all 4 weeks), Estimated Score After Roadmap |
77
+ | ClientProposal | GEO Audit Summary, Why GEO Matters Now, 3 Critical Issues, Recommended Engagement (all 3 tiers), ROI Projection |
78
+
79
+ ---
80
+
81
+ ## Quality Bar
82
+
83
+ ### Data-Grounded
84
+
85
+ - Every score must be derived from actual page data, not estimated without basis
86
+ - If a score cannot be determined (e.g., robots.txt returns 500), use 50 and flag as `data-gap`
87
+ - Never invent a score to complete a section — a flagged gap is more useful than a fabricated number
88
+
89
+ ### No Filler
90
+
91
+ - Every sentence must either present data, explain a finding, or specify an action
92
+ - Remove phrases like "This is an important area to consider" — replace with the actual consideration
93
+ - Recommendations must be specific: name the exact robots.txt line, the exact schema type, the exact paragraph to rewrite
94
+
95
+ ### Actionable
96
+
97
+ - Every finding must have a corresponding action in the Remediation Roadmap
98
+ - Actions must include: what to do, who should do it, how long it should take, what the expected impact is
99
+ - Code snippets in SchemaValidation must be copy-pasteable
100
+
101
+ ### Consistent
102
+
103
+ - All scores in all artifacts must match — the GEO Score in GeoScoreSummary must equal the calculated composite from all component scores
104
+ - Dates must be consistent across all artifacts
105
+ - Client name and URL must match the brand kit exactly
106
+
107
+ ### Output Order
108
+
109
+ Artifacts must be produced and numbered in this order:
110
+
111
+ 1. GeoAuditBrief
112
+ 2. CitabilityAnalysis
113
+ 3. CrawlerAccessReport
114
+ 4. BrandVisibilityReport
115
+ 5. GeoScoreSummary
116
+ 6. ContentAnalysis
117
+ 7. SchemaValidation
118
+ 8. TechnicalFoundations
119
+ 9. LlmstxtPlan
120
+ 10. RemediationRoadmap
121
+ 11. ClientProposal (if requested)
122
+
123
+ ---
124
+
125
+ ## Versioning Rules
126
+
127
+ | Scenario | Action |
128
+ |---|---|
129
+ | First audit for a client | All files at v1 |
130
+ | Rescore after remediation | Increment all files to v2 (or current version + 1) |
131
+ | Partial update (one artifact revised) | Increment only the revised artifact's version |
132
+ | Major scope change | Start new project-slug, all files at v1 |
133
+
134
+ ---
135
+
136
+ ## geo_score_data.json
137
+
138
+ This file must always be written to the output directory. It is the machine-readable record of the audit and is required for:
139
+ - PDF generation (`generate_pdf_report.py`)
140
+ - Rescore comparison (load v1 data, compare to v2)
141
+ - CRM dashboard import (`crm_dashboard.py`)
142
+
143
+ See `examples/pdf-report-sample.md` for the complete format.
@@ -0,0 +1,175 @@
1
+ # Runtime Assumptions
2
+
3
+ **Frozen at kit creation: 2026-04-14. Update this file when upstream fork behavior changes.**
4
+
5
+ ---
6
+
7
+ ## Execution Mode Overview
8
+
9
+ | Mode | Requirements | Fork Used? | Python Scripts? | PDF? | Accuracy |
10
+ |---|---|---|---|---|---|
11
+ | `local-fork` | Python 3.8+, Playwright, geo-seo-claude clone | Yes | Yes | Yes | Highest |
12
+ | `agent-only` | Nothing (Claude Code only) | No | No | No | Good |
13
+ | `hybrid` | ANTHROPIC_API_KEY + fork | Yes | Yes | Yes | Highest |
14
+
15
+ ### Choosing a Mode
16
+
17
+ - **Use `local-fork`** when you need the most accurate citability scores (Python parser), real Playwright-rendered page content, or PDF output.
18
+ - **Use `agent-only`** when the fork is not installed or when speed matters more than exact precision. All outputs are still produced using the same templates and formulas.
19
+ - **Use `hybrid`** when you want agent reasoning layer on top of Python data collection — useful for complex competitor comparisons or detailed content rewrites.
20
+
21
+ ---
22
+
23
+ ## geo-seo-claude Upstream Assumptions
24
+
25
+ These are the assumptions frozen at kit creation time about the `geo-seo-claude` fork at https://github.com/zubair-trabzada/geo-seo-claude.
26
+
27
+ ### Python Environment
28
+
29
+ | Requirement | Value | Notes |
30
+ |---|---|---|
31
+ | Python version | 3.8+ | Tested on 3.10 and 3.11 |
32
+ | Package manager | pip | `pip install -r requirements.txt` |
33
+ | Key dependencies | BeautifulSoup4, Playwright, ReportLab, Flask, Rich, validators | See requirements.txt |
34
+ | Playwright browser | chromium | `playwright install chromium` |
35
+
36
+ ### 14 CLI Skills (Commands)
37
+
38
+ All 14 `/geo` commands are available in `skills/` directory:
39
+
40
+ | Command | File | Status |
41
+ |---|---|---|
42
+ | `/geo audit` | `skills/audit.md` | Available |
43
+ | `/geo citability` | `skills/citability.md` | Available |
44
+ | `/geo crawlers` | `skills/crawlers.md` | Available |
45
+ | `/geo brands` | `skills/brands.md` | Available |
46
+ | `/geo report` | `skills/report.md` | Available |
47
+ | `/geo report-pdf` | `skills/report-pdf.md` | Available |
48
+ | `/geo content` | `skills/content.md` | Available |
49
+ | `/geo schema` | `skills/schema.md` | Available |
50
+ | `/geo technical` | `skills/technical.md` | Available |
51
+ | `/geo llmstxt` | `skills/llmstxt.md` | Available |
52
+ | `/geo quick` | `skills/quick.md` | Available |
53
+ | `/geo proposal` | `skills/proposal.md` | Available |
54
+ | `/geo prospect` | `skills/prospect.md` | Available |
55
+ | `/geo compare` | `skills/compare.md` | Available |
56
+
57
+ ### 5 Parallel Subagents
58
+
59
+ All 5 subagent definitions are in `agents/` directory:
60
+
61
+ | Subagent | File | Weight |
62
+ |---|---|---|
63
+ | geo-ai-visibility | `agents/geo-ai-visibility.md` | 25% |
64
+ | geo-content | `agents/geo-content.md` | 20% |
65
+ | geo-platform-analysis | `agents/geo-platform-analysis.md` | 10% |
66
+ | geo-schema | `agents/geo-schema.md` | 10% |
67
+ | geo-technical | `agents/geo-technical.md` | 15% |
68
+
69
+ ### Key Python Scripts
70
+
71
+ | Script | Path in Fork | Purpose |
72
+ |---|---|---|
73
+ | fetch_page.py | `scripts/fetch_page.py` | Playwright-based page fetcher |
74
+ | citability_scorer.py | `scripts/citability_scorer.py` | 5-metric citability algorithm |
75
+ | brand_scanner.py | `scripts/brand_scanner.py` | 8-platform brand mention scanner |
76
+ | generate_pdf_report.py | `scripts/generate_pdf_report.py` | ReportLab PDF generator |
77
+ | llmstxt_generator.py | `scripts/llmstxt_generator.py` | llms.txt generator |
78
+ | crm_dashboard.py | `scripts/crm_dashboard.py` | Flask CRM dashboard |
79
+
80
+ ### Schema Templates
81
+
82
+ 6 JSON-LD templates in `schema/` directory:
83
+
84
+ | Template | Type |
85
+ |---|---|
86
+ | organization.json | Organization |
87
+ | article.json | Article |
88
+ | faqpage.json | FAQPage |
89
+ | product.json | Product |
90
+ | localbusiness.json | LocalBusiness |
91
+ | breadcrumblist.json | BreadcrumbList |
92
+
93
+ ---
94
+
95
+ ## Execution Surface Flows
96
+
97
+ ### Local-Fork Mode
98
+
99
+ ```
100
+ User request → Environment gate (Step 0)
101
+
102
+ Read skills.md + brand kit (Step 1)
103
+
104
+ Read runtime docs (Step 2)
105
+
106
+ Inspect fork: README, skills/, agents/, scripts/ (Step 3)
107
+
108
+ 3-question gate (Step 4)
109
+
110
+ Select /geo command (Step 5)
111
+
112
+ Phase 1: python fetch_page.py <url> → phase1_data.json (Step 6)
113
+
114
+ Phase 2: 5 subagents in parallel → component scores (Step 7)
115
+
116
+ GEO Score synthesis → composite score (Step 8)
117
+
118
+ Artifact package: 9–11 Markdown files (Step 9)
119
+ ↓ (if PDF requested)
120
+ python generate_pdf_report.py --input geo_score_data.json (Step 9)
121
+
122
+ Log deliverable → brand kit DELIVERABLES LOG (Step 10)
123
+ ```
124
+
125
+ ### Agent-Only Mode
126
+
127
+ ```
128
+ User request → Environment gate (Step 0 — confirm agent-only)
129
+
130
+ Read skills.md + brand kit (Step 1)
131
+
132
+ Read runtime docs (Step 2)
133
+
134
+ Skip fork inspection (Step 3 — N/A)
135
+
136
+ 3-question gate (Step 4)
137
+
138
+ Select /geo command (Step 5)
139
+
140
+ Phase 1: fetch page via Claude built-in fetch → parse manually (Step 6)
141
+
142
+ Phase 2: 5 subagents via Claude reasoning → component scores (Step 7)
143
+
144
+ GEO Score synthesis → composite score (Step 8)
145
+
146
+ Artifact package: 9–11 Markdown files + geo_score_data.json (Step 9)
147
+ ↓ (PDF not available — note Markdown equivalent)
148
+ Log deliverable → brand kit DELIVERABLES LOG (Step 10)
149
+ ```
150
+
151
+ ---
152
+
153
+ ## Output Assumption
154
+
155
+ All outputs are Markdown files written to:
156
+
157
+ ```
158
+ output/<client-slug>/<project-slug>/
159
+ ```
160
+
161
+ The operator does not write directly to client systems. Outputs are produced locally and then shared with clients via the agreed delivery channel.
162
+
163
+ ---
164
+
165
+ ## Flask CRM Dashboard Assumption
166
+
167
+ The CRM dashboard (`crm_dashboard.py`) runs as a separate process. It is not started automatically during an audit session.
168
+
169
+ To launch manually from the fork directory:
170
+ ```bash
171
+ python scripts/crm_dashboard.py
172
+ # Accessible at http://localhost:5000 (or FLASK_PORT if set)
173
+ ```
174
+
175
+ The dashboard reads from the `output/` directory and displays audit history across all clients.
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env bash
2
+ # check-deps.sh — Verify dependencies for geo-seo-claude local-fork workflows
3
+ # Usage: bash setup/check-deps.sh
4
+ set -e
5
+
6
+ PASS=0
7
+ FAIL=0
8
+
9
+ check() {
10
+ local name="$1" cmd="$2" hint="$3"
11
+ if command -v "$cmd" >/dev/null 2>&1; then
12
+ echo "OK $name ($(command -v $cmd))"
13
+ PASS=$((PASS+1))
14
+ else
15
+ echo "MISS $name — $hint"
16
+ FAIL=$((FAIL+1))
17
+ fi
18
+ }
19
+
20
+ echo "=== Growthub GEO SEO Studio — Dependency Check ==="
21
+ echo ""
22
+
23
+ check "python3" "python3" "https://python.org — install Python 3.8+"
24
+ check "pip" "pip" "Comes with Python — try: python3 -m pip"
25
+ check "playwright" "playwright" "pip install playwright && playwright install chromium"
26
+ check "git" "git" "https://git-scm.com"
27
+ check "node" "node" "https://nodejs.org — required for setup/verify-env.mjs"
28
+
29
+ echo ""
30
+
31
+ # Check Python version is 3.8+
32
+ if command -v python3 >/dev/null 2>&1; then
33
+ PY_VERSION=$(python3 -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
34
+ PY_MAJOR=$(python3 -c "import sys; print(sys.version_info.major)")
35
+ PY_MINOR=$(python3 -c "import sys; print(sys.version_info.minor)")
36
+ if [ "$PY_MAJOR" -ge 3 ] && [ "$PY_MINOR" -ge 8 ]; then
37
+ echo "OK Python version: $PY_VERSION (3.8+ required)"
38
+ PASS=$((PASS+1))
39
+ else
40
+ echo "MISS Python version: $PY_VERSION — geo-seo-claude requires Python 3.8+"
41
+ FAIL=$((FAIL+1))
42
+ fi
43
+ fi
44
+
45
+ # Check Playwright chromium is installed (not just the CLI)
46
+ if command -v playwright >/dev/null 2>&1; then
47
+ if playwright browsers 2>/dev/null | grep -q "chromium"; then
48
+ echo "OK Playwright chromium browser installed"
49
+ PASS=$((PASS+1))
50
+ else
51
+ echo "MISS Playwright chromium browser not found — run: playwright install chromium"
52
+ FAIL=$((FAIL+1))
53
+ fi
54
+ fi
55
+
56
+ # Check for the fork directory
57
+ FORK_DIR="${GEO_SEO_FORK_PATH:-$HOME/geo-seo-claude}"
58
+ if [ -d "$FORK_DIR" ]; then
59
+ echo "OK geo-seo-claude fork at $FORK_DIR"
60
+ PASS=$((PASS+1))
61
+ else
62
+ echo "MISS geo-seo-claude fork not found at $FORK_DIR"
63
+ echo " Run: bash setup/clone-fork.sh"
64
+ echo " Or set GEO_SEO_FORK_PATH to your fork path in .env"
65
+ FAIL=$((FAIL+1))
66
+ fi
67
+
68
+ echo ""
69
+ echo "Passed: $PASS | Missing: $FAIL"
70
+
71
+ if [ "$FAIL" -gt 0 ]; then
72
+ echo ""
73
+ echo "Install missing dependencies before running local-fork workflows."
74
+ echo "Agent-only mode (no fork required) is always available as a fallback."
75
+ exit 1
76
+ fi
77
+
78
+ echo ""
79
+ echo "All dependencies present. Local-fork mode is ready."
80
+ echo "Next: node setup/verify-env.mjs"
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env bash
2
+ # clone-fork.sh — Clone geo-seo-claude and install dependencies
3
+ # Usage: bash setup/clone-fork.sh
4
+ set -e
5
+
6
+ FORK_DIR="${GEO_SEO_FORK_PATH:-$HOME/geo-seo-claude}"
7
+ REPO_URL="https://github.com/zubair-trabzada/geo-seo-claude"
8
+
9
+ echo "=== Growthub GEO SEO Studio — Fork Setup ==="
10
+ echo ""
11
+
12
+ if [ -d "$FORK_DIR" ]; then
13
+ echo "Fork already exists at $FORK_DIR — skipping clone."
14
+ echo "To re-clone, remove the directory first: rm -rf $FORK_DIR"
15
+ else
16
+ echo "Cloning geo-seo-claude → $FORK_DIR"
17
+ git clone "$REPO_URL" "$FORK_DIR"
18
+ echo "Clone complete."
19
+ fi
20
+
21
+ echo ""
22
+ echo "Installing Python dependencies..."
23
+ cd "$FORK_DIR"
24
+ pip install -r requirements.txt
25
+ echo "Python dependencies installed."
26
+
27
+ echo ""
28
+ echo "Installing Playwright browsers..."
29
+ playwright install chromium
30
+ echo "Playwright chromium installed."
31
+
32
+ echo ""
33
+ echo "Verifying key scripts..."
34
+ SCRIPTS_OK=0
35
+ for script in fetch_page.py citability_scorer.py brand_scanner.py generate_pdf_report.py llmstxt_generator.py; do
36
+ if [ -f "scripts/$script" ]; then
37
+ echo " OK scripts/$script"
38
+ else
39
+ echo " MISS scripts/$script — may not exist in this fork version"
40
+ SCRIPTS_OK=1
41
+ fi
42
+ done
43
+
44
+ echo ""
45
+ if [ "$SCRIPTS_OK" -eq 0 ]; then
46
+ echo "geo-seo-claude is ready at $FORK_DIR"
47
+ else
48
+ echo "geo-seo-claude cloned at $FORK_DIR — some scripts may be missing."
49
+ echo "Check the fork's README for the correct script paths."
50
+ fi
51
+
52
+ echo ""
53
+ echo "Quick test:"
54
+ echo " python $FORK_DIR/scripts/fetch_page.py https://example.com"
55
+ echo ""
56
+ echo "Run the GEO audit operator by pointing Claude Code at this kit."