@cloudgrid-io/mcp 0.16.2 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/README.md +39 -39
  2. package/package.json +1 -1
  3. package/src/corpus/capability-map.md +15 -9
  4. package/src/corpus/cloudgrid-yaml.md +10 -8
  5. package/src/corpus/cookbook.md +4 -4
  6. package/src/corpus/install-for-agents.md +1 -2
  7. package/src/corpus/install.md +1 -1
  8. package/src/corpus/rules/publish-fallbacks.md +1 -1
  9. package/src/corpus/skill-claim.md +1 -1
  10. package/src/corpus/skill-login.md +2 -2
  11. package/src/corpus/skill-plug.md +69 -6
  12. package/src/corpus/skills-readme.md +10 -10
  13. package/src/corpus/templates/ai-knowledge-base/AGENTS.md +1 -1
  14. package/src/corpus/templates/ai-knowledge-base/index.md +1 -1
  15. package/src/corpus/templates/api-docs/README.md +3 -3
  16. package/src/corpus/templates/api-docs/index.md +3 -4
  17. package/src/corpus/templates/appointment-booking/AGENTS.md +9 -9
  18. package/src/corpus/templates/appointment-booking/index.md +6 -6
  19. package/src/corpus/templates/approval-workflow/AGENTS.md +2 -2
  20. package/src/corpus/templates/approval-workflow/index.md +2 -2
  21. package/src/corpus/templates/billing-dashboard/index.md +1 -1
  22. package/src/corpus/templates/calendar-scheduler/AGENTS.md +1 -1
  23. package/src/corpus/templates/calendar-scheduler/index.md +1 -1
  24. package/src/corpus/templates/changelog/README.md +3 -3
  25. package/src/corpus/templates/changelog/index.md +3 -4
  26. package/src/corpus/templates/company-website/README.md +3 -4
  27. package/src/corpus/templates/company-website/cloudgrid.yaml +1 -1
  28. package/src/corpus/templates/company-website/index.md +3 -4
  29. package/src/corpus/templates/course-platform/index.md +1 -1
  30. package/src/corpus/templates/dashboard/cloudgrid.yaml +1 -1
  31. package/src/corpus/templates/dashboard/index.md +3 -4
  32. package/src/corpus/templates/deck/cloudgrid.yaml +1 -1
  33. package/src/corpus/templates/deck/index.md +3 -4
  34. package/src/corpus/templates/docs-site/README.md +3 -3
  35. package/src/corpus/templates/docs-site/index.md +3 -4
  36. package/src/corpus/templates/forum/AGENTS.md +6 -6
  37. package/src/corpus/templates/forum/index.md +1 -1
  38. package/src/corpus/templates/hr-portal/index.md +1 -1
  39. package/src/corpus/templates/internal-tools-portal/index.md +1 -1
  40. package/src/corpus/templates/landing-page/cloudgrid.yaml +1 -1
  41. package/src/corpus/templates/landing-page/index.md +3 -4
  42. package/src/corpus/templates/lms/index.md +1 -1
  43. package/src/corpus/templates/marketplace/AGENTS.md +1 -1
  44. package/src/corpus/templates/marketplace/index.md +1 -1
  45. package/src/corpus/templates/membership-site/AGENTS.md +9 -9
  46. package/src/corpus/templates/membership-site/index.md +6 -6
  47. package/src/corpus/templates/online-store/index.md +1 -1
  48. package/src/corpus/templates/portfolio/README.md +3 -3
  49. package/src/corpus/templates/portfolio/index.md +3 -4
  50. package/src/corpus/templates/product-launch/README.md +3 -4
  51. package/src/corpus/templates/product-launch/cloudgrid.yaml +1 -1
  52. package/src/corpus/templates/product-launch/index.md +3 -4
  53. package/src/corpus/templates/report/cloudgrid.yaml +1 -1
  54. package/src/corpus/templates/report/index.md +3 -4
  55. package/src/corpus/templates/restaurant-reservations/AGENTS.md +9 -9
  56. package/src/corpus/templates/restaurant-reservations/index.md +2 -2
  57. package/src/corpus/templates/saas-marketing/README.md +3 -3
  58. package/src/corpus/templates/saas-marketing/index.md +3 -4
  59. package/src/corpus/templates/status-page/README.md +3 -3
  60. package/src/corpus/templates/status-page/index.md +3 -4
  61. package/src/corpus/templates/subscription-management/AGENTS.md +9 -9
  62. package/src/corpus/templates/subscription-management/index.md +6 -6
  63. package/src/corpus/templates/waitlist/README.md +3 -3
  64. package/src/corpus/templates/waitlist/index.md +3 -4
  65. package/src/corpus/templates/web-app/cloudgrid.yaml +1 -1
  66. package/src/corpus/templates/web-app/index.md +3 -4
  67. package/src/corpus/troubleshooting/deploy-errors.md +1 -1
  68. package/src/corpus/troubleshooting/persistent-apps.md +1 -1
  69. package/src/corpus/usage.md +3 -3
  70. package/src/corpus/workflows/admin-dashboard.md +6 -6
  71. package/src/corpus/workflows/ai-app.md +8 -8
  72. package/src/corpus/workflows/ai-knowledge-base.md +6 -6
  73. package/src/corpus/workflows/analytics-dashboard.md +6 -6
  74. package/src/corpus/workflows/api-dashboard.md +6 -6
  75. package/src/corpus/workflows/api-docs.md +3 -3
  76. package/src/corpus/workflows/api-service.md +8 -8
  77. package/src/corpus/workflows/app-with-data.md +8 -8
  78. package/src/corpus/workflows/appointment-booking.md +8 -8
  79. package/src/corpus/workflows/approval-workflow.md +6 -6
  80. package/src/corpus/workflows/billing-dashboard.md +8 -8
  81. package/src/corpus/workflows/blog-cms.md +6 -6
  82. package/src/corpus/workflows/booking-system.md +7 -7
  83. package/src/corpus/workflows/calendar-scheduler.md +6 -6
  84. package/src/corpus/workflows/changelog.md +3 -3
  85. package/src/corpus/workflows/company-website.md +4 -4
  86. package/src/corpus/workflows/course-platform.md +7 -7
  87. package/src/corpus/workflows/crm.md +7 -7
  88. package/src/corpus/workflows/dashboard.md +4 -4
  89. package/src/corpus/workflows/directory.md +6 -6
  90. package/src/corpus/workflows/docs-site.md +3 -3
  91. package/src/corpus/workflows/erp.md +7 -7
  92. package/src/corpus/workflows/event-board.md +6 -6
  93. package/src/corpus/workflows/expense-tracker.md +6 -6
  94. package/src/corpus/workflows/feature-request-board.md +6 -6
  95. package/src/corpus/workflows/financial-dashboard.md +6 -6
  96. package/src/corpus/workflows/forum.md +7 -7
  97. package/src/corpus/workflows/hr-portal.md +7 -7
  98. package/src/corpus/workflows/internal-tools-portal.md +7 -7
  99. package/src/corpus/workflows/inventory.md +6 -6
  100. package/src/corpus/workflows/invoice.md +6 -6
  101. package/src/corpus/workflows/job-board.md +6 -6
  102. package/src/corpus/workflows/kanban.md +7 -7
  103. package/src/corpus/workflows/landing-page.md +4 -4
  104. package/src/corpus/workflows/lms.md +7 -7
  105. package/src/corpus/workflows/marketplace.md +6 -6
  106. package/src/corpus/workflows/membership-site.md +8 -8
  107. package/src/corpus/workflows/monitoring-dashboard.md +6 -6
  108. package/src/corpus/workflows/online-store.md +8 -8
  109. package/src/corpus/workflows/portfolio.md +3 -3
  110. package/src/corpus/workflows/presentation.md +4 -4
  111. package/src/corpus/workflows/product-catalog.md +6 -6
  112. package/src/corpus/workflows/product-launch.md +4 -4
  113. package/src/corpus/workflows/project-management.md +6 -6
  114. package/src/corpus/workflows/property-listings.md +6 -6
  115. package/src/corpus/workflows/quiz-platform.md +6 -6
  116. package/src/corpus/workflows/report.md +4 -4
  117. package/src/corpus/workflows/restaurant-reservations.md +7 -7
  118. package/src/corpus/workflows/revenue-dashboard.md +6 -6
  119. package/src/corpus/workflows/saas-marketing.md +3 -3
  120. package/src/corpus/workflows/semantic-search.md +7 -7
  121. package/src/corpus/workflows/status-page.md +3 -3
  122. package/src/corpus/workflows/subscription-management.md +8 -8
  123. package/src/corpus/workflows/task-manager.md +6 -6
  124. package/src/corpus/workflows/ticket-system.md +6 -6
  125. package/src/corpus/workflows/time-tracking.md +6 -6
  126. package/src/corpus/workflows/travel-booking.md +7 -7
  127. package/src/corpus/workflows/waitlist.md +3 -3
  128. package/src/corpus/workflows/web-app.md +4 -4
  129. package/src/docs.js +5 -5
  130. package/src/index.js +1 -1
  131. package/src/tools.js +329 -734
  132. package/src/web.js +2 -2
  133. package/src/widgets/live-result.html +1 -1
  134. package/src/widgets/org-picker.html +3 -3
  135. package/src/corpus/skill-drop.md +0 -140
@@ -34,13 +34,13 @@ requires the **local edition** (Claude Desktop / Claude Code) or the CLI.
34
34
 
35
35
  ## 2. Auth + grid
36
36
 
37
- 1. Ensure signed in: `gridctl_login_status`; if not, `gridctl_login`.
37
+ 1. Ensure signed in: `grid_login_status`; if not, `grid_login`.
38
38
  2. A grid is required. Respect the grid picker: if the user has more than one
39
39
  grid, ask which to use; do not assume a target.
40
40
 
41
41
  ## 3. Fetch the blueprint and READ AGENTS.md
42
42
 
43
- `gridctl_fetch("template", "marketplace")`. The deliverable is the **`AGENTS.md`
43
+ `grid_fetch("template", "marketplace")`. The deliverable is the **`AGENTS.md`
44
44
  structure guide** — read it before writing anything. It defines:
45
45
  - the `services/web/` file tree (pages, API routes, `lib/`),
46
46
  - the Mongo collections (`vendors`, `listings`, `orders`) + fields,
@@ -54,7 +54,7 @@ There is no app code to copy — you generate it from the guide.
54
54
 
55
55
  ## 4. Scaffold + fill cloudgrid.yaml
56
56
 
57
- `gridctl_init` an app `<name>` FIRST (creates the entity + `.cloudgrid/link.json`
57
+ `grid_init` an app `<name>` FIRST (creates the entity + `.cloudgrid/link.json`
58
58
  and a starter `cloudgrid.yaml` with empty `services:{}`; `plug` needs a linked
59
59
  directory). Then put the app under **`services/web/`** and set `cloudgrid.yaml` to
60
60
  the blueprint's active fields:
@@ -97,7 +97,7 @@ Generate the files under `services/web/` per the guide:
97
97
  - Map secrets in the `vault:` block (done above), then **store the values**:
98
98
  `grid secrets set stripe-live-key sk_live_…`,
99
99
  `grid secrets set stripe-webhook-secret whsec_…`,
100
- `grid secrets set auth-provider-key …`. Non-secret public config → `gridctl_env`.
100
+ `grid secrets set auth-provider-key …`. Non-secret public config → `grid_env`.
101
101
  - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` / legacy
102
102
  `MONGODB_URL`) — the grid injects them.
103
103
 
@@ -108,9 +108,9 @@ secrets before deploying. Don't require it.
108
108
 
109
109
  ## 8. Deploy (async)
110
110
 
111
- Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
111
+ Deploy the folder with `grid_plug`. A **runtime deploy is ASYNC**: the first
112
112
  response is `status: "building"`, NOT a live URL yet.
113
- - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
113
+ - Poll `grid_status` (or the returned poll_url) until the entity is live.
114
114
  - Surface a liveness signal while it builds — never a bare silent wait.
115
115
  - Only once it is live, return the deployed app URL (NOT the build/log link).
116
116
 
@@ -34,7 +34,7 @@ edition** (Claude Desktop / Claude Code) or the CLI.
34
34
 
35
35
  ## 2. Auth + grid
36
36
 
37
- 1. Ensure signed in: `gridctl_login_status`; if not, `gridctl_login`.
37
+ 1. Ensure signed in: `grid_login_status`; if not, `grid_login`.
38
38
  2. A grid is required. Respect the grid picker: if the user has more than one
39
39
  grid, ask which to use; do not assume a target.
40
40
 
@@ -43,17 +43,17 @@ edition** (Claude Desktop / Claude Code) or the CLI.
43
43
  Fetch the template and read its structure guide — this is the core of the
44
44
  workflow:
45
45
 
46
- - `gridctl_fetch("template", "membership-site")` — the `cloudgrid.yaml` +
46
+ - `grid_fetch("template", "membership-site")` — the `cloudgrid.yaml` +
47
47
  **`AGENTS.md`**. AGENTS.md has the file tree, the Mongo collections
48
48
  (`users`, `memberships`), the CloudGrid injection table, and the auth + Stripe
49
49
  wiring. **Read it fully before building.**
50
- - `gridctl_fetch("template", "app-with-data")` — the proven Next.js + Mongo
50
+ - `grid_fetch("template", "app-with-data")` — the proven Next.js + Mongo
51
51
  shape this blueprint extends (lazy db client in `lib/db.js`, App-Router
52
52
  GET/POST route). Imitate its wiring.
53
53
 
54
54
  ## 4. Scaffold
55
55
 
56
- `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
56
+ `grid_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
57
57
  and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
58
58
  directory, so run `init` FIRST. Then write the app under **`services/web/`** and
59
59
  set `cloudgrid.yaml` to the active shape below.
@@ -98,11 +98,11 @@ never set `needs:` and `requires:` together (the validator rejects it).
98
98
 
99
99
  ## 6. Config / secrets
100
100
 
101
- - Stripe + auth secrets → `gridctl_secrets` (set the vault items `stripe-live-key`,
101
+ - Stripe + auth secrets → `grid_secrets` (set the vault items `stripe-live-key`,
102
102
  `stripe-webhook-secret`, `auth-provider-key` that the `vault:` block maps from).
103
103
  The deployer injects each as its env var at runtime and under `grid dev`.
104
104
  - Non-secret config (auth publishable key `NEXT_PUBLIC_...`, Stripe price id) →
105
- `gridctl_env` / `services.web.env`.
105
+ `grid_env` / `services.web.env`.
106
106
  - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` / legacy
107
107
  `MONGODB_URL`) — the grid injects them.
108
108
 
@@ -113,9 +113,9 @@ and vault secrets before deploying. Don't require it.
113
113
 
114
114
  ## 8. Deploy (async)
115
115
 
116
- Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
116
+ Deploy the folder with `grid_plug`. A **runtime deploy is ASYNC**: the first
117
117
  response is `status: "building"`, NOT a live URL yet.
118
- - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
118
+ - Poll `grid_status` (or the returned poll_url) until the entity is live.
119
119
  - Surface a liveness signal while it builds — never a bare silent wait.
120
120
  - Once live, register the `/api/webhook` URL as the Stripe webhook endpoint,
121
121
  copy the signing secret into the `stripe-webhook-secret` vault item, and
@@ -33,13 +33,13 @@ edition** (Claude Desktop / Claude Code) or the CLI.
33
33
 
34
34
  ## 2. Auth + grid
35
35
 
36
- 1. Ensure signed in: `gridctl_login_status`; if not, `gridctl_login`.
36
+ 1. Ensure signed in: `grid_login_status`; if not, `grid_login`.
37
37
  2. A grid is required. Respect the grid picker: if the user has more than one
38
38
  grid, ask which to use; do not assume a target.
39
39
 
40
40
  ## 3. Scaffold
41
41
 
42
- `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
42
+ `grid_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
43
43
  and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
44
44
  directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
45
45
  and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
@@ -64,7 +64,7 @@ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
64
64
  author new yaml with it, and never set `needs:` and `requires:` together (the
65
65
  validator rejects it).
66
66
  2. Fetch the template for the Mongo wiring + CRUD shape:
67
- `gridctl_fetch("template", "monitoring-dashboard")`. It is a minimal, real
67
+ `grid_fetch("template", "monitoring-dashboard")`. It is a minimal, real
68
68
  Next.js + `mongodb`-driver health board under `services/web/`: a lazy client
69
69
  in `services/web/lib/db.js`, an App-Router GET/POST/DELETE route on a `checks`
70
70
  collection, a server-component page that derives the status grid, and a client
@@ -85,15 +85,15 @@ before deploying. Don't require it.
85
85
 
86
86
  ## 6. Config
87
87
 
88
- - API keys / secrets → `gridctl_secrets`. Non-secret config → `gridctl_env`.
88
+ - API keys / secrets → `grid_secrets`. Non-secret config → `grid_env`.
89
89
  - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
90
90
  legacy `MONGODB_URL`) — the grid injects them.
91
91
 
92
92
  ## 7. Deploy (async)
93
93
 
94
- Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
94
+ Deploy the folder with `grid_plug`. A **runtime deploy is ASYNC**: the first
95
95
  response is `status: "building"`, NOT a live URL yet.
96
- - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
96
+ - Poll `grid_status` (or the returned poll_url) until the entity is live.
97
97
  - Surface a liveness signal while it builds — never a bare silent wait.
98
98
  - Only once it is live, return the deployed app URL (NOT the build/log link).
99
99
 
@@ -34,13 +34,13 @@ edition** (Claude Desktop / Claude Code) or the CLI.
34
34
 
35
35
  ## 2. Auth + grid
36
36
 
37
- 1. Ensure signed in: `gridctl_login_status`; if not, `gridctl_login`.
37
+ 1. Ensure signed in: `grid_login_status`; if not, `grid_login`.
38
38
  2. A grid is required. Respect the grid picker: if the user has more than one
39
39
  grid, ask which to use; do not assume a target.
40
40
 
41
41
  ## 3. Scaffold
42
42
 
43
- `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
43
+ `grid_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
44
44
  and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
45
45
  directory, so run `init` FIRST.
46
46
 
@@ -48,7 +48,7 @@ directory, so run `init` FIRST.
48
48
 
49
49
  This is a blueprint — the structure guide is the deliverable, not copy-paste code.
50
50
 
51
- 1. `gridctl_fetch("template", "online-store")`.
51
+ 1. `grid_fetch("template", "online-store")`.
52
52
  2. **Read `AGENTS.md`** in the fetched template. It has: the file tree (app under
53
53
  `services/web/`), the Mongo collections (`products`, `orders`) and their
54
54
  fields, how the grid injects Mongo (`DATABASE_MONGODB_URL`) and the Stripe key
@@ -88,24 +88,24 @@ This is a blueprint — the structure guide is the deliverable, not copy-paste c
88
88
 
89
89
  ## 6. Config
90
90
 
91
- - Stripe secrets → the vault: `gridctl_secrets` to set `stripe-live-key` (and a
91
+ - Stripe secrets → the vault: `grid_secrets` to set `stripe-live-key` (and a
92
92
  `stripe-webhook-secret` if you map one). The `vault:` block turns them into env
93
- vars. Non-secret config → `gridctl_env`.
93
+ vars. Non-secret config → `grid_env`.
94
94
  - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` /
95
95
  `MONGODB_URL`) — the grid injects them.
96
96
 
97
97
  ## 7. Deploy (async)
98
98
 
99
- Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
99
+ Deploy the folder with `grid_plug`. A **runtime deploy is ASYNC**: the first
100
100
  response is `status: "building"`, NOT a live URL yet.
101
- - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
101
+ - Poll `grid_status` (or the returned poll_url) until the entity is live.
102
102
  - Surface a liveness signal while it builds — never a bare silent wait.
103
103
  - Only once it is live, return the deployed app URL (NOT the build/log link).
104
104
 
105
105
  ## 8. Wire the Stripe webhook + return the live URL
106
106
 
107
107
  1. Register `<live-url>/api/webhook` as a webhook endpoint in the Stripe
108
- dashboard, copy its `whsec_…` secret into the vault, and re-`gridctl_plug` the
108
+ dashboard, copy its `whsec_…` secret into the vault, and re-`grid_plug` the
109
109
  SAME entity if you changed the `vault:` mapping (same URL).
110
110
  2. Give the user the live store URL — that is the deliverable. To iterate, re-plug
111
111
  the SAME entity so it updates the same URL.
@@ -4,7 +4,7 @@ when: portfolio, personal site, freelancer site, my work, showcase, resume site,
4
4
  needs: none
5
5
  deploy: inspiration
6
6
  editions: all
7
- capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via gridctl_drop.
7
+ capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via grid_plug.
8
8
  summary: Fetch the portfolio template, fill it with the user's projects and bio, deploy it, and return the live share URL.
9
9
  ---
10
10
 
@@ -15,7 +15,7 @@ follow this recipe. Reach for this over `landing-page` when the request is about
15
15
  showcasing projects with an about, skills, and contact. Do not ask setup
16
16
  questions first; use sensible defaults and build.
17
17
 
18
- 1. **Fetch the template.** Call `gridctl_fetch("template", "portfolio")` to load
18
+ 1. **Fetch the template.** Call `grid_fetch("template", "portfolio")` to load
19
19
  the self-contained HTML portfolio (hero, about, skills, projects grid,
20
20
  contact).
21
21
  2. **Fill the template.** Replace the placeholders with the user's content:
@@ -27,7 +27,7 @@ questions first; use sensible defaults and build.
27
27
  stylesheets, fonts, or large embedded media.
28
28
  3. **Deploy.** Deploy the filled HTML:
29
29
  - Hosted MCP edition: call the drop tool with the HTML.
30
- - Local MCP / CLI edition: write the HTML to a file and run `gridctl plug`.
30
+ - Local MCP / CLI edition: write the HTML to a file and run `grid plug`.
31
31
  It is an inspiration and deploys synchronously, so you get a URL right away.
32
32
  4. **Return the live share URL.** For revisions, re-deploy with the entity id
33
33
  from the first deploy — it updates the same share URL.
@@ -4,7 +4,7 @@ when: slides, deck, pitch, presentation, slideshow.
4
4
  needs: none
5
5
  deploy: inspiration
6
6
  editions: all
7
- capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via gridctl_drop.
7
+ capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via grid_plug.
8
8
  summary: Fetch the deck template, fill it with the user's content, deploy it, and return the live share URL.
9
9
  ---
10
10
 
@@ -13,9 +13,9 @@ summary: Fetch the deck template, fill it with the user's content, deploy it, an
13
13
  Detect the intent ("build me a presentation / deck / slides about X") and follow
14
14
  this recipe. Do not ask setup questions first; use sensible defaults and build.
15
15
 
16
- 1. **Fetch the template.** Call `gridctl_fetch("template", "deck")` to load the
16
+ 1. **Fetch the template.** Call `grid_fetch("template", "deck")` to load the
17
17
  self-contained HTML deck template.
18
- 2. **(Optional) Fetch the example.** Call `gridctl_fetch("example", "deck")` to
18
+ 2. **(Optional) Fetch the example.** Call `grid_fetch("example", "deck")` to
19
19
  see a filled deck as a reference for tone and structure.
20
20
  3. **Fill the template.** Replace the placeholders with the user's content:
21
21
  - The deck title and subtitle.
@@ -24,7 +24,7 @@ this recipe. Do not ask setup questions first; use sensible defaults and build.
24
24
  stylesheets, fonts, or large embedded media.
25
25
  4. **Deploy.** Deploy the filled HTML:
26
26
  - Hosted MCP edition: call the drop tool with the HTML.
27
- - Local MCP / CLI edition: write the HTML to a file and run `gridctl plug`.
27
+ - Local MCP / CLI edition: write the HTML to a file and run `grid plug`.
28
28
  An HTML deck is an inspiration and deploys synchronously, so you get a URL
29
29
  right away.
30
30
  5. **Return the live share URL.** Give the user the URL that serves the deck.
@@ -35,13 +35,13 @@ edition** (Claude Desktop / Claude Code) or the CLI.
35
35
 
36
36
  ## 2. Auth + grid
37
37
 
38
- 1. Ensure signed in: `gridctl_login_status`; if not, `gridctl_login`.
38
+ 1. Ensure signed in: `grid_login_status`; if not, `grid_login`.
39
39
  2. A grid is required. Respect the grid picker: if the user has more than one
40
40
  grid, ask which to use; do not assume a target.
41
41
 
42
42
  ## 3. Scaffold
43
43
 
44
- `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
44
+ `grid_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
45
45
  and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
46
46
  directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
47
47
  and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
@@ -66,7 +66,7 @@ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
66
66
  author new yaml with it, and never set `needs:` and `requires:` together (the
67
67
  validator rejects it).
68
68
  2. Fetch the template for the Mongo wiring + CRUD shape:
69
- `gridctl_fetch("template", "product-catalog")`. It is a minimal, real
69
+ `grid_fetch("template", "product-catalog")`. It is a minimal, real
70
70
  Next.js + `mongodb`-driver catalog under `services/web/`: a lazy client in
71
71
  `services/web/lib/db.js`, an App-Router GET/POST/DELETE route on a `products`
72
72
  collection, a server-component page, and a client grid with a category filter
@@ -86,15 +86,15 @@ before deploying. Don't require it.
86
86
 
87
87
  ## 6. Config
88
88
 
89
- - API keys / secrets → `gridctl_secrets`. Non-secret config → `gridctl_env`.
89
+ - API keys / secrets → `grid_secrets`. Non-secret config → `grid_env`.
90
90
  - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
91
91
  legacy `MONGODB_URL`) — the grid injects them.
92
92
 
93
93
  ## 7. Deploy (async)
94
94
 
95
- Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
95
+ Deploy the folder with `grid_plug`. A **runtime deploy is ASYNC**: the first
96
96
  response is `status: "building"`, NOT a live URL yet.
97
- - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
97
+ - Poll `grid_status` (or the returned poll_url) until the entity is live.
98
98
  - Surface a liveness signal while it builds — never a bare silent wait.
99
99
  - Only once it is live, return the deployed app URL (NOT the build/log link).
100
100
 
@@ -4,7 +4,7 @@ when: product launch page, launch announcement, new product page, we just launch
4
4
  needs: none
5
5
  deploy: inspiration
6
6
  editions: all
7
- capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via gridctl_drop.
7
+ capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via grid_plug.
8
8
  summary: Fetch the product-launch template, fill it with the user's product/launch content, deploy it, and return the live share URL.
9
9
  ---
10
10
 
@@ -14,10 +14,10 @@ Detect the intent ("build a launch page / announcement for our new product X")
14
14
  and follow this recipe. Do not ask setup questions first; use sensible defaults
15
15
  and build.
16
16
 
17
- 1. **Fetch the template.** Call `gridctl_fetch("template", "product-launch")` to
17
+ 1. **Fetch the template.** Call `grid_fetch("template", "product-launch")` to
18
18
  load the self-contained HTML launch-page template (hero + product image,
19
19
  countdown, features, launch offer, social proof).
20
- 2. **(Optional) Fetch the example.** Call `gridctl_fetch("example", "product-launch")`
20
+ 2. **(Optional) Fetch the example.** Call `grid_fetch("example", "product-launch")`
21
21
  to see a filled launch page as a reference for tone and structure.
22
22
  3. **Fill the template.** Replace the placeholders with the user's content:
23
23
  - Product name, hero headline, subhead, launch badge, and CTA label/target.
@@ -33,7 +33,7 @@ and build.
33
33
  or large embedded media.
34
34
  4. **Deploy.** Deploy the filled HTML:
35
35
  - Hosted MCP edition: call the drop tool with the HTML.
36
- - Local MCP / CLI edition: write the HTML to a file and run `gridctl plug`.
36
+ - Local MCP / CLI edition: write the HTML to a file and run `grid plug`.
37
37
  A launch page is an inspiration and deploys synchronously, so you get a URL
38
38
  right away.
39
39
  5. **Return the live share URL.** Give the user the URL that serves the page.
@@ -36,13 +36,13 @@ edition** (Claude Desktop / Claude Code) or the CLI.
36
36
 
37
37
  ## 2. Auth + grid
38
38
 
39
- 1. Ensure signed in: `gridctl_login_status`; if not, `gridctl_login`.
39
+ 1. Ensure signed in: `grid_login_status`; if not, `grid_login`.
40
40
  2. A grid is required. Respect the grid picker: if the user has more than one
41
41
  grid, ask which to use; do not assume a target.
42
42
 
43
43
  ## 3. Scaffold
44
44
 
45
- `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
45
+ `grid_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
46
46
  and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
47
47
  directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
48
48
  and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
@@ -67,7 +67,7 @@ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
67
67
  author new yaml with it, and never set `needs:` and `requires:` together (the
68
68
  validator rejects it).
69
69
  2. Fetch the template for the Mongo wiring + CRUD shape:
70
- `gridctl_fetch("template", "project-management")`. It is a minimal, real
70
+ `grid_fetch("template", "project-management")`. It is a minimal, real
71
71
  Next.js + `mongodb`-driver app under `services/web/`: a lazy client in
72
72
  `services/web/lib/db.js`, an App-Router GET/POST/DELETE route on a `projects`
73
73
  collection, a GET/POST/PATCH/DELETE route on a `tasks` collection, a
@@ -87,15 +87,15 @@ before deploying. Don't require it.
87
87
 
88
88
  ## 6. Config
89
89
 
90
- - API keys / secrets → `gridctl_secrets`. Non-secret config → `gridctl_env`.
90
+ - API keys / secrets → `grid_secrets`. Non-secret config → `grid_env`.
91
91
  - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
92
92
  legacy `MONGODB_URL`) — the grid injects them.
93
93
 
94
94
  ## 7. Deploy (async)
95
95
 
96
- Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
96
+ Deploy the folder with `grid_plug`. A **runtime deploy is ASYNC**: the first
97
97
  response is `status: "building"`, NOT a live URL yet.
98
- - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
98
+ - Poll `grid_status` (or the returned poll_url) until the entity is live.
99
99
  - Surface a liveness signal while it builds — never a bare silent wait.
100
100
  - Only once it is live, return the deployed app URL (NOT the build/log link).
101
101
 
@@ -32,13 +32,13 @@ edition** (Claude Desktop / Claude Code) or the CLI.
32
32
 
33
33
  ## 2. Auth + grid
34
34
 
35
- 1. Ensure signed in: `gridctl_login_status`; if not, `gridctl_login`.
35
+ 1. Ensure signed in: `grid_login_status`; if not, `grid_login`.
36
36
  2. A grid is required. Respect the grid picker: if the user has more than one
37
37
  grid, ask which to use; do not assume a target.
38
38
 
39
39
  ## 3. Scaffold
40
40
 
41
- `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
41
+ `grid_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
42
42
  and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
43
43
  directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
44
44
  and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
@@ -63,7 +63,7 @@ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
63
63
  author new yaml with it, and never set `needs:` and `requires:` together (the
64
64
  validator rejects it).
65
65
  2. Fetch the template for the Mongo wiring + CRUD shape:
66
- `gridctl_fetch("template", "property-listings")`. It is a minimal, real
66
+ `grid_fetch("template", "property-listings")`. It is a minimal, real
67
67
  Next.js + `mongodb`-driver listings site under `services/web/`: a lazy client
68
68
  in `services/web/lib/db.js`, an App-Router GET/POST/DELETE route on a
69
69
  `properties` collection (GET supports `?location=` and `?maxPrice=` filters), a
@@ -82,15 +82,15 @@ before deploying. Don't require it.
82
82
 
83
83
  ## 6. Config
84
84
 
85
- - API keys / secrets → `gridctl_secrets`. Non-secret config → `gridctl_env`.
85
+ - API keys / secrets → `grid_secrets`. Non-secret config → `grid_env`.
86
86
  - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
87
87
  legacy `MONGODB_URL`) — the grid injects them.
88
88
 
89
89
  ## 7. Deploy (async)
90
90
 
91
- Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
91
+ Deploy the folder with `grid_plug`. A **runtime deploy is ASYNC**: the first
92
92
  response is `status: "building"`, NOT a live URL yet.
93
- - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
93
+ - Poll `grid_status` (or the returned poll_url) until the entity is live.
94
94
  - Surface a liveness signal while it builds — never a bare silent wait.
95
95
  - Only once it is live, return the deployed app URL (NOT the build/log link).
96
96
 
@@ -33,13 +33,13 @@ edition** (Claude Desktop / Claude Code) or the CLI.
33
33
 
34
34
  ## 2. Auth + grid
35
35
 
36
- 1. Ensure signed in: `gridctl_login_status`; if not, `gridctl_login`.
36
+ 1. Ensure signed in: `grid_login_status`; if not, `grid_login`.
37
37
  2. A grid is required. Respect the grid picker: if the user has more than one
38
38
  grid, ask which to use; do not assume a target.
39
39
 
40
40
  ## 3. Scaffold
41
41
 
42
- `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
42
+ `grid_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
43
43
  and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
44
44
  directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
45
45
  and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
@@ -64,7 +64,7 @@ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
64
64
  author new yaml with it, and never set `needs:` and `requires:` together (the
65
65
  validator rejects it).
66
66
  2. Fetch the template for the Mongo wiring + CRUD shape:
67
- `gridctl_fetch("template", "quiz-platform")`. It is a minimal, real Next.js +
67
+ `grid_fetch("template", "quiz-platform")`. It is a minimal, real Next.js +
68
68
  `mongodb`-driver quiz platform under `services/web/`: a lazy client in
69
69
  `services/web/lib/db.js`, an App-Router GET/POST/DELETE route on a
70
70
  `questions` collection, a server-component page that reads the collection, and
@@ -86,15 +86,15 @@ before deploying. Don't require it.
86
86
 
87
87
  ## 6. Config
88
88
 
89
- - API keys / secrets → `gridctl_secrets`. Non-secret config → `gridctl_env`.
89
+ - API keys / secrets → `grid_secrets`. Non-secret config → `grid_env`.
90
90
  - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
91
91
  legacy `MONGODB_URL`) — the grid injects them.
92
92
 
93
93
  ## 7. Deploy (async)
94
94
 
95
- Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
95
+ Deploy the folder with `grid_plug`. A **runtime deploy is ASYNC**: the first
96
96
  response is `status: "building"`, NOT a live URL yet.
97
- - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
97
+ - Poll `grid_status` (or the returned poll_url) until the entity is live.
98
98
  - Surface a liveness signal while it builds — never a bare silent wait.
99
99
  - Only once it is live, return the deployed app URL (NOT the build/log link).
100
100
 
@@ -4,7 +4,7 @@ when: report, one-pager, summary, brief, whitepaper, case study, formatted docum
4
4
  needs: none
5
5
  deploy: inspiration
6
6
  editions: all
7
- capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via gridctl_drop.
7
+ capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via grid_plug.
8
8
  summary: Fetch the report template, fill it with the user's content, deploy it, and return the live share URL.
9
9
  ---
10
10
 
@@ -13,9 +13,9 @@ summary: Fetch the report template, fill it with the user's content, deploy it,
13
13
  Detect the intent ("build me a report / one-pager / brief about X") and follow
14
14
  this recipe. Do not ask setup questions first; use sensible defaults and build.
15
15
 
16
- 1. **Fetch the template.** Call `gridctl_fetch("template", "report")` to load
16
+ 1. **Fetch the template.** Call `grid_fetch("template", "report")` to load
17
17
  the self-contained, print-friendly HTML report template.
18
- 2. **(Optional) Fetch the example.** Call `gridctl_fetch("example", "report")`
18
+ 2. **(Optional) Fetch the example.** Call `grid_fetch("example", "report")`
19
19
  to see a filled report as a reference for tone and structure.
20
20
  3. **Fill the template.** Replace the placeholders with the user's content:
21
21
  - The report title, subtitle, and date line.
@@ -27,7 +27,7 @@ this recipe. Do not ask setup questions first; use sensible defaults and build.
27
27
  stylesheets, fonts, or large embedded media.
28
28
  4. **Deploy.** Deploy the filled HTML:
29
29
  - Hosted MCP edition: call the drop tool with the HTML.
30
- - Local MCP / CLI edition: write the HTML to a file and run `gridctl plug`.
30
+ - Local MCP / CLI edition: write the HTML to a file and run `grid plug`.
31
31
  A report is an inspiration and deploys synchronously, so you get a URL right
32
32
  away.
33
33
  5. **Return the live share URL.** Give the user the URL that serves the report.
@@ -37,13 +37,13 @@ edition** (Claude Desktop / Claude Code) or the CLI.
37
37
 
38
38
  ## 2. Auth + grid
39
39
 
40
- 1. Ensure signed in: `gridctl_login_status`; if not, `gridctl_login`.
40
+ 1. Ensure signed in: `grid_login_status`; if not, `grid_login`.
41
41
  2. A grid is required. Respect the grid picker: if the user has more than one
42
42
  grid, ask which to use; do not assume a target.
43
43
 
44
44
  ## 3. Fetch the blueprint and READ AGENTS.md
45
45
 
46
- `gridctl_fetch("template", "restaurant-reservations")`. This is a **blueprint**,
46
+ `grid_fetch("template", "restaurant-reservations")`. This is a **blueprint**,
47
47
  so the deliverable is `cloudgrid.yaml` + `AGENTS.md`, not app code.
48
48
 
49
49
  **Read `AGENTS.md` before building.** It defines:
@@ -56,7 +56,7 @@ so the deliverable is `cloudgrid.yaml` + `AGENTS.md`, not app code.
56
56
 
57
57
  ## 4. Scaffold + fill
58
58
 
59
- 1. `gridctl_init` an app `<name>` — creates the entity + `.cloudgrid/link.json`
59
+ 1. `grid_init` an app `<name>` — creates the entity + `.cloudgrid/link.json`
60
60
  and a `cloudgrid.yaml` with an EMPTY `services: {}`. Run `init` FIRST (plug
61
61
  needs a linked directory).
62
62
  2. Write the app under **`services/web/`** (`path:` is the URL mount, NOT the
@@ -85,9 +85,9 @@ so the deliverable is `cloudgrid.yaml` + `AGENTS.md`, not app code.
85
85
 
86
86
  ## 5. Config / secrets
87
87
 
88
- - Secret values (Stripe, SendGrid, auth) → `gridctl_secrets` (the `vault:` block
88
+ - Secret values (Stripe, SendGrid, auth) → `grid_secrets` (the `vault:` block
89
89
  maps them to env vars). Non-secret config (publishable keys, flags) →
90
- `gridctl_env`.
90
+ `grid_env`.
91
91
  - Do **NOT** set the DB vars yourself (`DATABASE_MONGODB_URL` / `MONGODB_URL`) —
92
92
  the grid injects them.
93
93
 
@@ -98,9 +98,9 @@ against dev Mongo. Seed the `menu` collection, test a booking. Don't require it.
98
98
 
99
99
  ## 7. Deploy (async)
100
100
 
101
- Deploy `services/web/` with `gridctl_plug`. A **runtime deploy is ASYNC**: the
101
+ Deploy `services/web/` with `grid_plug`. A **runtime deploy is ASYNC**: the
102
102
  first response is `status: building`, NOT a live URL.
103
- - Poll `gridctl_status` (or the returned poll URL) until live.
103
+ - Poll `grid_status` (or the returned poll URL) until live.
104
104
  - Surface a liveness signal while it builds — never a bare silent wait.
105
105
  - Only once live, return the deployed app URL (NOT the build/log link).
106
106
  - If Stripe deposits are on, register the live `/api/webhooks/stripe` URL in the
@@ -32,13 +32,13 @@ edition** (Claude Desktop / Claude Code) or the CLI.
32
32
 
33
33
  ## 2. Auth + grid
34
34
 
35
- 1. Ensure signed in: `gridctl_login_status`; if not, `gridctl_login`.
35
+ 1. Ensure signed in: `grid_login_status`; if not, `grid_login`.
36
36
  2. A grid is required. Respect the grid picker: if the user has more than one
37
37
  grid, ask which to use; do not assume a target.
38
38
 
39
39
  ## 3. Scaffold
40
40
 
41
- `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
41
+ `grid_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
42
42
  and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
43
43
  directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
44
44
  and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
@@ -63,7 +63,7 @@ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
63
63
  author new yaml with it, and never set `needs:` and `requires:` together (the
64
64
  validator rejects it).
65
65
  2. Fetch the template for the Mongo wiring + CRUD shape:
66
- `gridctl_fetch("template", "revenue-dashboard")`. It is a minimal, real
66
+ `grid_fetch("template", "revenue-dashboard")`. It is a minimal, real
67
67
  Next.js + `mongodb`-driver dashboard under `services/web/`: a lazy client in
68
68
  `services/web/lib/db.js`, an App-Router GET/POST/DELETE route on a `sales`
69
69
  collection, a server-component page that computes the total + per-product
@@ -83,15 +83,15 @@ before deploying. Don't require it.
83
83
 
84
84
  ## 6. Config
85
85
 
86
- - API keys / secrets → `gridctl_secrets`. Non-secret config → `gridctl_env`.
86
+ - API keys / secrets → `grid_secrets`. Non-secret config → `grid_env`.
87
87
  - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
88
88
  legacy `MONGODB_URL`) — the grid injects them.
89
89
 
90
90
  ## 7. Deploy (async)
91
91
 
92
- Deploy the folder with `gridctl_plug`. A **runtime deploy is ASYNC**: the first
92
+ Deploy the folder with `grid_plug`. A **runtime deploy is ASYNC**: the first
93
93
  response is `status: "building"`, NOT a live URL yet.
94
- - Poll `gridctl_status` (or the returned poll_url) until the entity is live.
94
+ - Poll `grid_status` (or the returned poll_url) until the entity is live.
95
95
  - Surface a liveness signal while it builds — never a bare silent wait.
96
96
  - Only once it is live, return the deployed app URL (NOT the build/log link).
97
97
 
@@ -4,7 +4,7 @@ when: SaaS marketing site, product marketing page, features and pricing page, mu
4
4
  needs: none
5
5
  deploy: inspiration
6
6
  editions: all
7
- capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via gridctl_drop.
7
+ capabilities_note: static — no infrastructure. Publishes as an inspiration (instant, works on hosted) via grid_plug.
8
8
  summary: Fetch the saas-marketing template, fill it with the user's product content, deploy it, and return the live share URL.
9
9
  ---
10
10
 
@@ -16,7 +16,7 @@ it when the request calls for pricing tiers, testimonials, and an FAQ, not just
16
16
  hero. For a plain single-section landing page, use `landing-page`. Do not ask
17
17
  setup questions first; use sensible defaults and build.
18
18
 
19
- 1. **Fetch the template.** Call `gridctl_fetch("template", "saas-marketing")` to
19
+ 1. **Fetch the template.** Call `grid_fetch("template", "saas-marketing")` to
20
20
  load the self-contained HTML marketing site.
21
21
  2. **Fill the template.** Replace the placeholders with the user's content:
22
22
  - The product name, tagline, and hero eyebrow/headline/subheadline.
@@ -29,7 +29,7 @@ setup questions first; use sensible defaults and build.
29
29
  stylesheets, fonts, or large embedded media.
30
30
  3. **Deploy.** Deploy the filled HTML:
31
31
  - Hosted MCP edition: call the drop tool with the HTML.
32
- - Local MCP / CLI edition: write the HTML to a file and run `gridctl plug`.
32
+ - Local MCP / CLI edition: write the HTML to a file and run `grid plug`.
33
33
  It is an inspiration and deploys synchronously, so you get a URL right away.
34
34
  4. **Return the live share URL.** For revisions, re-deploy with the entity id
35
35
  from the first deploy — it updates the same share URL.