@growthub/cli 0.3.53 → 0.3.55
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.
- package/assets/worker-kits/growthub-ai-website-cloner-v1/.env.example +7 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/QUICKSTART.md +116 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/brands/NEW-CLIENT.md +22 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/brands/_template/brand-kit.md +27 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/brands/growthub/brand-kit.md +26 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/bundles/growthub-ai-website-cloner-v1.json +53 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/docs/ai-website-cloner-fork-integration.md +118 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/docs/design-token-system.md +135 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/docs/multi-phase-pipeline.md +129 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/docs/parallel-builder-dispatch.md +103 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/examples/clone-brief-sample.md +54 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/examples/component-spec-sample.md +123 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/examples/platform-handoff-sample.md +102 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/examples/visual-qa-sample.md +119 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/growthub-meta/README.md +71 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/growthub-meta/kit-standard.md +47 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/kit.json +105 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/output/README.md +26 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/output-standards.md +75 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/runtime-assumptions.md +70 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/setup/check-deps.sh +50 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/setup/clone-fork.sh +66 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/setup/verify-env.mjs +78 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/skills.md +186 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/asset-manifest.md +57 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/builder-dispatch-plan.md +92 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/clone-brief.md +59 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/component-spec.md +124 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/design-token-extraction.md +89 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/platform-handoff.md +114 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/reconnaissance-report.md +77 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/visual-qa-checklist.md +107 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/validation-checklist.md +76 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/workers/ai-website-cloner-operator/CLAUDE.md +256 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/.env.example +40 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/QUICKSTART.md +114 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/brands/NEW-CLIENT.md +42 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/brands/_template/brand-kit.md +49 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/brands/growthub/brand-kit.md +50 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/bundles/growthub-open-montage-studio-v1.json +55 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/docs/cms-node-bridge.md +152 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/docs/open-montage-fork-integration.md +120 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/docs/pipeline-reference.md +147 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/docs/provider-adapter-layer.md +105 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/examples/cms-node-video-gen-sample.md +109 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/examples/pipeline-selection-sample.md +67 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/examples/platform-ready-handoff-sample.md +101 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/examples/video-production-brief-sample.md +68 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/growthub-meta/README.md +7 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/growthub-meta/kit-standard.md +45 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/kit.json +107 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/output/README.md +34 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/output-standards.md +79 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/runtime-assumptions.md +86 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/setup/check-deps.sh +43 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/setup/clone-fork.sh +53 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/setup/verify-env.mjs +102 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/skills.md +254 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/asset-tracking.md +46 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/cms-node-pipeline-mapping.md +64 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/generation-batch-plan.md +70 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/pipeline-selection-brief.md +67 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/platform-ready-execution-handoff.md +103 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/prompt-matrix.md +48 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/provider-selection-brief.md +86 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/review-qa-checklist.md +59 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/scene-plan.md +65 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/video-production-brief.md +58 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/validation-checklist.md +46 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/workers/open-montage-studio-operator/CLAUDE.md +304 -0
- package/assets/worker-kits/growthub-postiz-social-v1/.env.example +18 -0
- package/assets/worker-kits/growthub-postiz-social-v1/QUICKSTART.md +136 -0
- package/assets/worker-kits/growthub-postiz-social-v1/brands/NEW-CLIENT.md +67 -0
- package/assets/worker-kits/growthub-postiz-social-v1/brands/_template/brand-kit.md +120 -0
- package/assets/worker-kits/growthub-postiz-social-v1/brands/growthub/brand-kit.md +117 -0
- package/assets/worker-kits/growthub-postiz-social-v1/bundles/growthub-postiz-social-v1.json +52 -0
- package/assets/worker-kits/growthub-postiz-social-v1/docs/ai-caption-layer.md +118 -0
- package/assets/worker-kits/growthub-postiz-social-v1/docs/bullmq-queue-layer.md +157 -0
- package/assets/worker-kits/growthub-postiz-social-v1/docs/platform-coverage.md +97 -0
- package/assets/worker-kits/growthub-postiz-social-v1/docs/postiz-fork-integration.md +143 -0
- package/assets/worker-kits/growthub-postiz-social-v1/examples/analytics-brief-sample.md +125 -0
- package/assets/worker-kits/growthub-postiz-social-v1/examples/client-proposal-sample.md +127 -0
- package/assets/worker-kits/growthub-postiz-social-v1/examples/content-calendar-sample.md +75 -0
- package/assets/worker-kits/growthub-postiz-social-v1/examples/social-campaign-sample.md +104 -0
- package/assets/worker-kits/growthub-postiz-social-v1/growthub-meta/README.md +128 -0
- package/assets/worker-kits/growthub-postiz-social-v1/growthub-meta/kit-standard.md +113 -0
- package/assets/worker-kits/growthub-postiz-social-v1/kit.json +104 -0
- package/assets/worker-kits/growthub-postiz-social-v1/output/README.md +56 -0
- package/assets/worker-kits/growthub-postiz-social-v1/output-standards.md +127 -0
- package/assets/worker-kits/growthub-postiz-social-v1/runtime-assumptions.md +159 -0
- package/assets/worker-kits/growthub-postiz-social-v1/setup/check-deps.sh +117 -0
- package/assets/worker-kits/growthub-postiz-social-v1/setup/clone-fork.sh +83 -0
- package/assets/worker-kits/growthub-postiz-social-v1/setup/verify-env.mjs +99 -0
- package/assets/worker-kits/growthub-postiz-social-v1/skills.md +277 -0
- package/assets/worker-kits/growthub-postiz-social-v1/templates/analytics-brief.md +123 -0
- package/assets/worker-kits/growthub-postiz-social-v1/templates/caption-copy-deck.md +127 -0
- package/assets/worker-kits/growthub-postiz-social-v1/templates/client-proposal.md +139 -0
- package/assets/worker-kits/growthub-postiz-social-v1/templates/content-calendar.md +65 -0
- package/assets/worker-kits/growthub-postiz-social-v1/templates/platform-publishing-plan.md +112 -0
- package/assets/worker-kits/growthub-postiz-social-v1/templates/scheduling-manifest.md +83 -0
- package/assets/worker-kits/growthub-postiz-social-v1/templates/social-campaign-brief.md +111 -0
- package/assets/worker-kits/growthub-postiz-social-v1/validation-checklist.md +79 -0
- package/assets/worker-kits/growthub-postiz-social-v1/workers/postiz-social-operator/CLAUDE.md +287 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/.env.example +15 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/QUICKSTART.md +90 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/brands/NEW-CLIENT.md +57 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/brands/_template/brand-kit.md +88 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/brands/growthub/brand-kit.md +92 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/bundles/growthub-twenty-crm-v1.json +56 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/docs/api-and-webhooks.md +296 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/docs/data-model-layer.md +172 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/docs/twenty-fork-integration.md +213 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/examples/crm-playbook-sample.md +172 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/examples/crm-setup-sample.md +100 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/examples/lead-enrichment-sample.md +117 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/examples/pipeline-automation-sample.md +132 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/growthub-meta/README.md +114 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/growthub-meta/kit-standard.md +61 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/kit.json +108 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/output/README.md +46 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/output-standards.md +175 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/runtime-assumptions.md +150 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/setup/check-deps.sh +56 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/setup/clone-fork.sh +77 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/setup/verify-env.mjs +105 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/skills.md +401 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/api-query-plan.md +179 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/crm-playbook.md +155 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/crm-setup-brief.md +94 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/custom-object-design.md +115 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/data-model-design.md +112 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/enrichment-field-map.md +100 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/import-mapping.md +139 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/integration-handoff.md +190 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/lead-enrichment-pipeline.md +128 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/pipeline-automation-brief.md +88 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/webhook-integration-spec.md +129 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/workspace-config-checklist.md +129 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/validation-checklist.md +115 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/workers/twenty-crm-operator/CLAUDE.md +310 -0
- package/package.json +1 -1
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 2,
|
|
3
|
+
"kit": {
|
|
4
|
+
"id": "growthub-twenty-crm-v1",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"name": "Growthub Agent Worker Kit — Twenty CRM",
|
|
7
|
+
"description": "Self-contained local execution environment for Twenty CRM — the open-source Salesforce/Apollo alternative. Produces CRM setup plans, data model designs, lead enrichment pipelines, pipeline automation briefs, webhook integration specs, API query plans, and client-ready CRM playbooks for teams adopting Twenty as their growth stack foundation.",
|
|
8
|
+
"type": "worker",
|
|
9
|
+
"visibility": "public-open-source",
|
|
10
|
+
"sourceRepo": "growthub-local",
|
|
11
|
+
"family": "studio"
|
|
12
|
+
},
|
|
13
|
+
"entrypoint": {
|
|
14
|
+
"workerId": "twenty-crm-operator",
|
|
15
|
+
"path": "workers/twenty-crm-operator/CLAUDE.md"
|
|
16
|
+
},
|
|
17
|
+
"workerIds": [
|
|
18
|
+
"twenty-crm-operator"
|
|
19
|
+
],
|
|
20
|
+
"agentContractPath": "workers/twenty-crm-operator/CLAUDE.md",
|
|
21
|
+
"brandTemplatePath": "brands/_template/brand-kit.md",
|
|
22
|
+
"publicExampleBrandPaths": [
|
|
23
|
+
"brands/growthub/brand-kit.md"
|
|
24
|
+
],
|
|
25
|
+
"frozenAssetPaths": [
|
|
26
|
+
"QUICKSTART.md",
|
|
27
|
+
".env.example",
|
|
28
|
+
"skills.md",
|
|
29
|
+
"output-standards.md",
|
|
30
|
+
"runtime-assumptions.md",
|
|
31
|
+
"validation-checklist.md",
|
|
32
|
+
"workers/twenty-crm-operator/CLAUDE.md",
|
|
33
|
+
"brands/_template/brand-kit.md",
|
|
34
|
+
"brands/growthub/brand-kit.md",
|
|
35
|
+
"brands/NEW-CLIENT.md",
|
|
36
|
+
"setup/clone-fork.sh",
|
|
37
|
+
"setup/verify-env.mjs",
|
|
38
|
+
"setup/check-deps.sh",
|
|
39
|
+
"output/README.md",
|
|
40
|
+
"templates/crm-setup-brief.md",
|
|
41
|
+
"templates/data-model-design.md",
|
|
42
|
+
"templates/lead-enrichment-pipeline.md",
|
|
43
|
+
"templates/pipeline-automation-brief.md",
|
|
44
|
+
"templates/webhook-integration-spec.md",
|
|
45
|
+
"templates/api-query-plan.md",
|
|
46
|
+
"templates/crm-playbook.md",
|
|
47
|
+
"templates/custom-object-design.md",
|
|
48
|
+
"templates/import-mapping.md",
|
|
49
|
+
"templates/workspace-config-checklist.md",
|
|
50
|
+
"templates/integration-handoff.md",
|
|
51
|
+
"templates/enrichment-field-map.md",
|
|
52
|
+
"examples/crm-setup-sample.md",
|
|
53
|
+
"examples/lead-enrichment-sample.md",
|
|
54
|
+
"examples/pipeline-automation-sample.md",
|
|
55
|
+
"examples/crm-playbook-sample.md",
|
|
56
|
+
"docs/twenty-fork-integration.md",
|
|
57
|
+
"docs/api-and-webhooks.md",
|
|
58
|
+
"docs/data-model-layer.md",
|
|
59
|
+
"growthub-meta/README.md",
|
|
60
|
+
"growthub-meta/kit-standard.md"
|
|
61
|
+
],
|
|
62
|
+
"setupPaths": {
|
|
63
|
+
"quickstart": "QUICKSTART.md",
|
|
64
|
+
"envExample": ".env.example",
|
|
65
|
+
"setupDir": "setup/",
|
|
66
|
+
"outputDir": "output/"
|
|
67
|
+
},
|
|
68
|
+
"outputStandard": {
|
|
69
|
+
"type": "working-directory",
|
|
70
|
+
"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>/.",
|
|
71
|
+
"requiredPaths": [
|
|
72
|
+
"QUICKSTART.md",
|
|
73
|
+
".env.example",
|
|
74
|
+
"kit.json",
|
|
75
|
+
"bundles/growthub-twenty-crm-v1.json",
|
|
76
|
+
"skills.md",
|
|
77
|
+
"workers/twenty-crm-operator/CLAUDE.md",
|
|
78
|
+
"brands/_template/brand-kit.md",
|
|
79
|
+
"brands/growthub/brand-kit.md",
|
|
80
|
+
"brands/NEW-CLIENT.md",
|
|
81
|
+
"setup/clone-fork.sh",
|
|
82
|
+
"setup/verify-env.mjs",
|
|
83
|
+
"setup/check-deps.sh",
|
|
84
|
+
"output/README.md",
|
|
85
|
+
"templates",
|
|
86
|
+
"docs",
|
|
87
|
+
"growthub-meta"
|
|
88
|
+
]
|
|
89
|
+
},
|
|
90
|
+
"bundles": [
|
|
91
|
+
{
|
|
92
|
+
"id": "growthub-twenty-crm-v1",
|
|
93
|
+
"version": "1.0.0",
|
|
94
|
+
"path": "bundles/growthub-twenty-crm-v1.json"
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
"executionMode": "export",
|
|
98
|
+
"activationModes": [
|
|
99
|
+
"export"
|
|
100
|
+
],
|
|
101
|
+
"compatibility": {
|
|
102
|
+
"cliMinVersion": "0.3.50"
|
|
103
|
+
},
|
|
104
|
+
"provenance": {
|
|
105
|
+
"sourceRepo": "growthub-local",
|
|
106
|
+
"frozenAt": "2026-04-15T00:00:00.000Z"
|
|
107
|
+
}
|
|
108
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Output Directory — Twenty CRM v1
|
|
2
|
+
|
|
3
|
+
This directory is where the agent writes all client deliverables.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Structure
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
output/
|
|
11
|
+
└── <client-slug>/
|
|
12
|
+
└── <project-slug>/
|
|
13
|
+
├── <ClientSlug>_CRMSetupBrief_v<N>_<YYYYMMDD>.md
|
|
14
|
+
├── <ClientSlug>_DataModelDesign_v<N>_<YYYYMMDD>.md
|
|
15
|
+
├── <ClientSlug>_LeadEnrichmentPipeline_v<N>_<YYYYMMDD>.md
|
|
16
|
+
├── <ClientSlug>_PipelineAutomationBrief_v<N>_<YYYYMMDD>.md
|
|
17
|
+
├── <ClientSlug>_WebhookIntegrationSpec_v<N>_<YYYYMMDD>.md
|
|
18
|
+
├── <ClientSlug>_APIQueryPlan_v<N>_<YYYYMMDD>.md
|
|
19
|
+
├── <ClientSlug>_CustomObjectDesign_v<N>_<YYYYMMDD>.md
|
|
20
|
+
├── <ClientSlug>_ImportMapping_v<N>_<YYYYMMDD>.md
|
|
21
|
+
├── <ClientSlug>_WorkspaceConfigChecklist_v<N>_<YYYYMMDD>.md
|
|
22
|
+
├── <ClientSlug>_IntegrationHandoff_v<N>_<YYYYMMDD>.md
|
|
23
|
+
├── <ClientSlug>_EnrichmentFieldMap_v<N>_<YYYYMMDD>.md
|
|
24
|
+
└── <ClientSlug>_CRMPlaybook_v<N>_<YYYYMMDD>.md
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## File naming
|
|
30
|
+
|
|
31
|
+
Pattern: `<ClientSlug>_<OutputType>_v<N>_<YYYYMMDD>.md`
|
|
32
|
+
|
|
33
|
+
- `ClientSlug` is PascalCase (e.g. `AcmeCorp`, `Growthub`)
|
|
34
|
+
- `OutputType` matches the artifact type exactly (e.g. `CRMSetupBrief`, `DataModelDesign`)
|
|
35
|
+
- `v<N>` is the version number (start at `v1`, increment on revision)
|
|
36
|
+
- `YYYYMMDD` is the date of production
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Rules
|
|
41
|
+
|
|
42
|
+
- never overwrite an existing version file — create a new version
|
|
43
|
+
- keep one artifact per file
|
|
44
|
+
- Markdown only
|
|
45
|
+
- no placeholder text in any delivered file
|
|
46
|
+
- brand kit DELIVERABLES LOG must be updated after each delivery
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# Output Standards — Twenty CRM v1
|
|
2
|
+
|
|
3
|
+
This document defines the output contract for every artifact produced by this kit.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## OUTPUT FOLDER STRUCTURE
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
output/
|
|
11
|
+
└── <client-slug>/
|
|
12
|
+
└── <project-slug>/
|
|
13
|
+
├── <ClientSlug>_CRMSetupBrief_v<N>_<YYYYMMDD>.md
|
|
14
|
+
├── <ClientSlug>_DataModelDesign_v<N>_<YYYYMMDD>.md
|
|
15
|
+
├── <ClientSlug>_LeadEnrichmentPipeline_v<N>_<YYYYMMDD>.md
|
|
16
|
+
├── <ClientSlug>_PipelineAutomationBrief_v<N>_<YYYYMMDD>.md
|
|
17
|
+
├── <ClientSlug>_WebhookIntegrationSpec_v<N>_<YYYYMMDD>.md
|
|
18
|
+
├── <ClientSlug>_APIQueryPlan_v<N>_<YYYYMMDD>.md
|
|
19
|
+
├── <ClientSlug>_CustomObjectDesign_v<N>_<YYYYMMDD>.md
|
|
20
|
+
├── <ClientSlug>_ImportMapping_v<N>_<YYYYMMDD>.md
|
|
21
|
+
├── <ClientSlug>_WorkspaceConfigChecklist_v<N>_<YYYYMMDD>.md
|
|
22
|
+
├── <ClientSlug>_IntegrationHandoff_v<N>_<YYYYMMDD>.md
|
|
23
|
+
├── <ClientSlug>_EnrichmentFieldMap_v<N>_<YYYYMMDD>.md
|
|
24
|
+
└── <ClientSlug>_CRMPlaybook_v<N>_<YYYYMMDD>.md
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## REQUIRED OUTPUT TYPES
|
|
30
|
+
|
|
31
|
+
Every full CRM implementation package must include:
|
|
32
|
+
- CRM setup brief
|
|
33
|
+
- data model design
|
|
34
|
+
- lead enrichment pipeline
|
|
35
|
+
- pipeline automation brief
|
|
36
|
+
- webhook integration spec
|
|
37
|
+
- API query plan
|
|
38
|
+
- workspace config checklist
|
|
39
|
+
- integration handoff
|
|
40
|
+
- CRM playbook
|
|
41
|
+
|
|
42
|
+
Custom object design and import mapping are included when the scope requires them.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## REQUIRED SECTIONS
|
|
47
|
+
|
|
48
|
+
### CRM setup brief
|
|
49
|
+
1. Client context and CRM objective
|
|
50
|
+
2. Deployment mode (cloud / self-hosted / local-fork)
|
|
51
|
+
3. Team size and user roles
|
|
52
|
+
4. Data sources and volume estimates
|
|
53
|
+
5. Integration scope
|
|
54
|
+
6. Go-live timeline and milestones
|
|
55
|
+
7. Success criteria
|
|
56
|
+
|
|
57
|
+
### Data model design
|
|
58
|
+
1. Standard objects in use and configuration notes
|
|
59
|
+
2. Custom objects (if any) with full field definitions
|
|
60
|
+
3. Relationship map (which objects link to which)
|
|
61
|
+
4. Field type table per object
|
|
62
|
+
5. Display configuration (labels, icons, default views)
|
|
63
|
+
6. Open questions / decisions required
|
|
64
|
+
|
|
65
|
+
### Lead enrichment pipeline
|
|
66
|
+
1. Enrichment provider(s) and auth mechanism
|
|
67
|
+
2. Source fields provided
|
|
68
|
+
3. Target Twenty fields
|
|
69
|
+
4. Deduplication strategy and match key
|
|
70
|
+
5. Insert vs. merge behavior
|
|
71
|
+
6. Update frequency
|
|
72
|
+
7. Error and failure handling
|
|
73
|
+
|
|
74
|
+
### Pipeline automation brief
|
|
75
|
+
1. Pipeline name and purpose
|
|
76
|
+
2. Trigger type and object
|
|
77
|
+
3. Trigger conditions (field, value, timing)
|
|
78
|
+
4. Action sequence
|
|
79
|
+
5. Failure / timeout behavior
|
|
80
|
+
6. Monitoring and alerting plan
|
|
81
|
+
|
|
82
|
+
### Webhook integration spec
|
|
83
|
+
1. Inbound vs. outbound classification
|
|
84
|
+
2. Event name and trigger object
|
|
85
|
+
3. Payload schema
|
|
86
|
+
4. Target endpoint or source
|
|
87
|
+
5. Auth mechanism
|
|
88
|
+
6. Retry policy
|
|
89
|
+
7. Test procedure
|
|
90
|
+
|
|
91
|
+
### API query plan
|
|
92
|
+
1. Query type (GraphQL / REST)
|
|
93
|
+
2. Object(s) targeted
|
|
94
|
+
3. Filter conditions
|
|
95
|
+
4. Field selection
|
|
96
|
+
5. Expected response structure
|
|
97
|
+
6. Use case and consumer
|
|
98
|
+
|
|
99
|
+
### Custom object design
|
|
100
|
+
1. Object name and purpose
|
|
101
|
+
2. Field table (name, type, required, options)
|
|
102
|
+
3. Relationship definitions
|
|
103
|
+
4. Creation method (UI vs. metadata API)
|
|
104
|
+
5. Default view configuration
|
|
105
|
+
6. Validation rules
|
|
106
|
+
|
|
107
|
+
### Import mapping
|
|
108
|
+
1. Source CRM / export format
|
|
109
|
+
2. Column-by-column mapping table
|
|
110
|
+
3. Transformation rules
|
|
111
|
+
4. Deduplication key
|
|
112
|
+
5. Import mode (insert / merge)
|
|
113
|
+
6. Post-import validation steps
|
|
114
|
+
|
|
115
|
+
### Workspace config checklist
|
|
116
|
+
1. Settings to configure (auth, members, roles, branding)
|
|
117
|
+
2. Integrations to enable
|
|
118
|
+
3. Objects to activate or create
|
|
119
|
+
4. Views and filters to configure
|
|
120
|
+
5. Email and notification settings
|
|
121
|
+
6. API token generation and distribution
|
|
122
|
+
|
|
123
|
+
### Integration handoff
|
|
124
|
+
1. System integration diagram
|
|
125
|
+
2. Auth credentials required (types only — no values)
|
|
126
|
+
3. Endpoint contracts
|
|
127
|
+
4. Sequence diagram for data flow
|
|
128
|
+
5. Environment checklist (dev / staging / prod)
|
|
129
|
+
6. Rollback plan
|
|
130
|
+
|
|
131
|
+
### Enrichment field map
|
|
132
|
+
1. Provider name
|
|
133
|
+
2. Provider field → Twenty field table with types and transformations
|
|
134
|
+
3. Deduplication key
|
|
135
|
+
4. Update frequency
|
|
136
|
+
5. Notes and edge cases
|
|
137
|
+
|
|
138
|
+
### CRM playbook
|
|
139
|
+
1. Team roles and permissions
|
|
140
|
+
2. Daily workflow (record creation, updates, activities)
|
|
141
|
+
3. Pipeline management procedures
|
|
142
|
+
4. Enrichment cadence
|
|
143
|
+
5. Reporting and dashboard instructions
|
|
144
|
+
6. Escalation and handoff protocols
|
|
145
|
+
7. Maintenance and data hygiene checklist
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## FILE NAMING RULES
|
|
150
|
+
|
|
151
|
+
Pattern:
|
|
152
|
+
|
|
153
|
+
```text
|
|
154
|
+
<ClientSlug>_<OutputType>_v<N>_<YYYYMMDD>.md
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Rules:
|
|
158
|
+
- `ClientSlug` is PascalCase
|
|
159
|
+
- never overwrite an existing version
|
|
160
|
+
- keep one artifact per file
|
|
161
|
+
- Markdown only
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## QUALITY BAR
|
|
166
|
+
|
|
167
|
+
An output is complete when:
|
|
168
|
+
- no placeholder text remains
|
|
169
|
+
- all object and field names match Twenty's naming conventions
|
|
170
|
+
- deduplication keys are named in every enrichment or import artifact
|
|
171
|
+
- every automation trigger-action pair has a documented failure path
|
|
172
|
+
- webhook specs include full payload schemas
|
|
173
|
+
- GraphQL queries are syntactically correct
|
|
174
|
+
- the CRM playbook is written at a level a non-technical team member can execute
|
|
175
|
+
- integration handoff provides enough detail for a developer to implement without asking follow-up questions
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Runtime Assumptions — Twenty CRM v1
|
|
2
|
+
|
|
3
|
+
This document defines the runtime boundary for this kit.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## OVERVIEW
|
|
8
|
+
|
|
9
|
+
This kit targets a self-contained local working directory used by an agent operating against one of four execution surfaces:
|
|
10
|
+
|
|
11
|
+
| Mode | When to use | Assumption |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| `local-fork` | local checkout of Twenty via Docker Compose | repo files can be inspected before planning |
|
|
14
|
+
| `self-hosted` | Twenty deployed on the team's own infrastructure | API is live and accessible via token |
|
|
15
|
+
| `cloud` | Twenty Cloud workspace at app.twenty.com | API is live, no repo inspection required |
|
|
16
|
+
| `agent-only` | no live Twenty instance | produce planning artifacts only, label as assumption-based |
|
|
17
|
+
|
|
18
|
+
Default planning mode is `agent-only` when no deployment info is provided. Escalate to `local-fork` if a checkout path is confirmed.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## TWENTY CRM FROZEN ASSUMPTIONS
|
|
23
|
+
|
|
24
|
+
Frozen upstream assumptions for this kit (based on Twenty v0.35+, MIT, TypeScript/React/NestJS):
|
|
25
|
+
|
|
26
|
+
- Standard objects are: `Person`, `Company`, `Opportunity`, `Note`, `Task`, `Workspace Member`
|
|
27
|
+
- Custom objects are supported via `Settings > Objects` (UI) and the metadata API
|
|
28
|
+
- GraphQL is the primary query and mutation surface
|
|
29
|
+
- REST API exists at `/api/objects/<object-name>` for CRUD operations
|
|
30
|
+
- App tokens are generated in `Settings > API > Tokens` and must be sent as `Bearer` in the `Authorization` header
|
|
31
|
+
- The workflow engine supports trigger types: `on_create`, `on_update`, `on_field_change`, `on_delete`, `on_schedule`, `on_webhook`
|
|
32
|
+
- Outbound webhook actions are a supported workflow action type
|
|
33
|
+
- The CLI (`@twenty-crm/cli`) exposes `twenty` commands for workspace management
|
|
34
|
+
- Docker Compose is the canonical local development stack (PostgreSQL + Redis + server + frontend)
|
|
35
|
+
- The default local development port for the Twenty server is `3000` and for the frontend is `3001`
|
|
36
|
+
- The GraphQL endpoint is at `<TWENTY_API_URL>/graphql` (authenticated via Bearer token)
|
|
37
|
+
- The metadata API is at `<TWENTY_API_URL>/metadata` (authenticated via Bearer token)
|
|
38
|
+
|
|
39
|
+
If the local fork or live deployment differs, those actual values win.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## DEPLOYMENT MODE DETAILS
|
|
44
|
+
|
|
45
|
+
### Local fork
|
|
46
|
+
|
|
47
|
+
Expected operator flow:
|
|
48
|
+
1. clone via `bash setup/clone-fork.sh`
|
|
49
|
+
2. Docker Compose starts PostgreSQL, Redis, server, and frontend
|
|
50
|
+
3. navigate to `http://localhost:3001` to configure workspace
|
|
51
|
+
4. generate an API token in Settings
|
|
52
|
+
5. set `TWENTY_API_TOKEN` and `TWENTY_API_URL=http://localhost:3000` in `.env`
|
|
53
|
+
6. run `node setup/verify-env.mjs` to confirm connectivity
|
|
54
|
+
7. proceed with data model inspection and implementation
|
|
55
|
+
|
|
56
|
+
### Self-hosted
|
|
57
|
+
|
|
58
|
+
Expected operator flow:
|
|
59
|
+
1. confirm deployment URL and auth mechanism
|
|
60
|
+
2. generate API token from the hosted workspace
|
|
61
|
+
3. set `TWENTY_API_TOKEN` and `TWENTY_API_URL` to the deployed endpoint
|
|
62
|
+
4. verify with `node setup/verify-env.mjs`
|
|
63
|
+
5. proceed — no local fork inspection required
|
|
64
|
+
|
|
65
|
+
### Cloud
|
|
66
|
+
|
|
67
|
+
Expected operator flow:
|
|
68
|
+
1. log in to Twenty Cloud at [app.twenty.com](https://app.twenty.com)
|
|
69
|
+
2. go to Settings > API > Tokens and generate a token
|
|
70
|
+
3. set `TWENTY_API_TOKEN` and `TWENTY_API_URL=https://api.twenty.com` in `.env`
|
|
71
|
+
4. verify with `node setup/verify-env.mjs`
|
|
72
|
+
5. proceed — no local fork inspection required
|
|
73
|
+
|
|
74
|
+
### Agent-only
|
|
75
|
+
|
|
76
|
+
- produce all planning artifacts using the frozen assumptions in this document
|
|
77
|
+
- label every output with `mode: agent-only` at the top
|
|
78
|
+
- note that implementation requires a live Twenty instance before any data or automation work can execute
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## API AUTHENTICATION
|
|
83
|
+
|
|
84
|
+
Twenty uses Bearer token authentication for all API access.
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
Authorization: Bearer <TWENTY_API_TOKEN>
|
|
88
|
+
Content-Type: application/json
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
For the metadata API, the same token is used:
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
Authorization: Bearer <TWENTY_API_TOKEN>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Tokens are workspace-scoped. One token per workspace. Generate new tokens if the workspace membership changes.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## GRAPHQL ENDPOINT
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
POST <TWENTY_API_URL>/graphql
|
|
105
|
+
Authorization: Bearer <TWENTY_API_TOKEN>
|
|
106
|
+
Content-Type: application/json
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Example:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
curl -X POST https://api.twenty.com/graphql \
|
|
113
|
+
-H "Authorization: Bearer $TWENTY_API_TOKEN" \
|
|
114
|
+
-H "Content-Type: application/json" \
|
|
115
|
+
-d '{"query": "{ people { edges { node { id name { firstName lastName } } } } }"}'
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## METADATA API ENDPOINT
|
|
121
|
+
|
|
122
|
+
The metadata API is used to create and manage custom objects and fields.
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
POST <TWENTY_API_URL>/metadata
|
|
126
|
+
Authorization: Bearer <TWENTY_API_TOKEN>
|
|
127
|
+
Content-Type: application/json
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## DATA VOLUME ASSUMPTIONS
|
|
133
|
+
|
|
134
|
+
- Small team (1–10 users): up to 10,000 Person records, 2,000 Company records
|
|
135
|
+
- Mid-market (10–100 users): up to 100,000 Person records, 20,000 Company records
|
|
136
|
+
- Enterprise (100+ users): requires infrastructure review before recommending Twenty without dedicated devops
|
|
137
|
+
|
|
138
|
+
For enrichment pipelines above 50,000 records, recommend batched imports over direct CSV upload.
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## OUTPUT WRITING ASSUMPTION
|
|
143
|
+
|
|
144
|
+
All deliverables are written as Markdown in:
|
|
145
|
+
|
|
146
|
+
```text
|
|
147
|
+
output/<client-slug>/<project-slug>/
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
The kit does not require its own npm install or custom CLI to be operational. API connectivity requires only `node` for `setup/verify-env.mjs`.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# check-deps.sh — Verify local dependencies required for Twenty CRM local-fork and self-hosted workflows.
|
|
3
|
+
# Run before your first local-fork session.
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
PASS=0
|
|
7
|
+
FAIL=0
|
|
8
|
+
|
|
9
|
+
check() {
|
|
10
|
+
local name="$1"
|
|
11
|
+
local cmd="$2"
|
|
12
|
+
local install_hint="$3"
|
|
13
|
+
if command -v "$cmd" >/dev/null 2>&1; then
|
|
14
|
+
echo "OK $name ($(command -v "$cmd"))"
|
|
15
|
+
PASS=$((PASS + 1))
|
|
16
|
+
else
|
|
17
|
+
echo "MISSING $name — $install_hint"
|
|
18
|
+
FAIL=$((FAIL + 1))
|
|
19
|
+
fi
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
check_docker_running() {
|
|
23
|
+
if docker info >/dev/null 2>&1; then
|
|
24
|
+
echo "OK Docker daemon (running)"
|
|
25
|
+
PASS=$((PASS + 1))
|
|
26
|
+
else
|
|
27
|
+
echo "MISSING Docker daemon — start Docker Desktop or the Docker service"
|
|
28
|
+
FAIL=$((FAIL + 1))
|
|
29
|
+
fi
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
echo "=== Growthub Twenty CRM — Dependency Check ==="
|
|
33
|
+
echo ""
|
|
34
|
+
check "git" "git" "https://git-scm.com/downloads"
|
|
35
|
+
check "node" "node" "https://nodejs.org (v18+ required)"
|
|
36
|
+
check "npm" "npm" "Comes with Node.js"
|
|
37
|
+
check "docker" "docker" "https://docs.docker.com/get-docker/"
|
|
38
|
+
echo ""
|
|
39
|
+
|
|
40
|
+
if command -v docker >/dev/null 2>&1; then
|
|
41
|
+
check_docker_running
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
echo ""
|
|
45
|
+
echo "Passed: $PASS | Missing: $FAIL"
|
|
46
|
+
|
|
47
|
+
if [ "$FAIL" -gt 0 ]; then
|
|
48
|
+
echo ""
|
|
49
|
+
echo "Install missing tools before running local-fork workflows."
|
|
50
|
+
echo "Agent-only mode does not require Docker or a local fork."
|
|
51
|
+
exit 1
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
echo ""
|
|
55
|
+
echo "All dependencies present."
|
|
56
|
+
echo "You are ready for local-fork execution. Run: bash setup/clone-fork.sh"
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# clone-fork.sh — Clone the Twenty CRM repo and boot the local development environment
|
|
3
|
+
# Usage: bash setup/clone-fork.sh
|
|
4
|
+
# Requires: git, node, npm, docker, docker-compose
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
FORK_DIR="${TWENTY_FORK_PATH:-$HOME/twenty}"
|
|
8
|
+
REPO_URL="https://github.com/twentyhq/twenty"
|
|
9
|
+
|
|
10
|
+
echo "=== Growthub Twenty CRM Studio — Fork Setup ==="
|
|
11
|
+
echo ""
|
|
12
|
+
|
|
13
|
+
# Dependency checks
|
|
14
|
+
for cmd in git node npm docker; do
|
|
15
|
+
if ! command -v "$cmd" >/dev/null 2>&1; then
|
|
16
|
+
echo "ERROR: $cmd is required but not found."
|
|
17
|
+
echo "Install it before running this script."
|
|
18
|
+
exit 1
|
|
19
|
+
fi
|
|
20
|
+
done
|
|
21
|
+
|
|
22
|
+
if ! docker info >/dev/null 2>&1; then
|
|
23
|
+
echo "ERROR: Docker daemon is not running."
|
|
24
|
+
echo "Start Docker Desktop or the Docker service before running this script."
|
|
25
|
+
exit 1
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
if [ -d "$FORK_DIR" ]; then
|
|
29
|
+
echo "Fork already exists at $FORK_DIR — skipping clone."
|
|
30
|
+
echo "To re-clone, remove the directory first: rm -rf $FORK_DIR"
|
|
31
|
+
else
|
|
32
|
+
echo "Cloning Twenty CRM → $FORK_DIR"
|
|
33
|
+
git clone "$REPO_URL" "$FORK_DIR"
|
|
34
|
+
echo "Clone complete."
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
cd "$FORK_DIR"
|
|
38
|
+
|
|
39
|
+
echo ""
|
|
40
|
+
echo "Copying environment config..."
|
|
41
|
+
if [ ! -f ".env" ]; then
|
|
42
|
+
if [ -f ".env.example" ]; then
|
|
43
|
+
cp .env.example .env
|
|
44
|
+
echo "Copied .env.example → .env"
|
|
45
|
+
echo "Review .env and set any required values before starting."
|
|
46
|
+
else
|
|
47
|
+
echo "WARNING: .env.example not found — you may need to configure .env manually."
|
|
48
|
+
fi
|
|
49
|
+
else
|
|
50
|
+
echo ".env already exists — skipping copy."
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
echo ""
|
|
54
|
+
echo "Starting Twenty via Docker Compose..."
|
|
55
|
+
echo "This pulls images for PostgreSQL, Redis, the Twenty server, and frontend."
|
|
56
|
+
echo "First run may take several minutes."
|
|
57
|
+
echo ""
|
|
58
|
+
|
|
59
|
+
if command -v docker-compose >/dev/null 2>&1; then
|
|
60
|
+
docker-compose up -d
|
|
61
|
+
else
|
|
62
|
+
docker compose up -d
|
|
63
|
+
fi
|
|
64
|
+
|
|
65
|
+
echo ""
|
|
66
|
+
echo "=== Twenty CRM is starting ==="
|
|
67
|
+
echo ""
|
|
68
|
+
echo "Frontend will be available at: http://localhost:3001"
|
|
69
|
+
echo "Server API will be available at: http://localhost:3000"
|
|
70
|
+
echo ""
|
|
71
|
+
echo "Next steps:"
|
|
72
|
+
echo " 1. Open http://localhost:3001 and create your workspace."
|
|
73
|
+
echo " 2. Go to Settings > API > Tokens and generate an API token."
|
|
74
|
+
echo " 3. Set TWENTY_API_TOKEN and TWENTY_API_URL=http://localhost:3000 in your kit .env file."
|
|
75
|
+
echo " 4. Run: node setup/verify-env.mjs"
|
|
76
|
+
echo ""
|
|
77
|
+
echo "To stop Twenty: docker-compose down (or docker compose down)"
|