@cloudgrid-io/mcp 0.21.18 → 0.21.20
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/README.md +2 -2
- package/package.json +11 -3
- package/src/corpus/cli-reference.md +8 -8
- package/src/corpus/cloudgrid-yaml.md +5 -5
- package/src/corpus/cookbook.md +1 -1
- package/src/corpus/playbook.md +3 -3
- package/src/corpus/skill-brain.md +1 -1
- package/src/corpus/skill-claim.md +2 -2
- package/src/corpus/skill-feedback.md +5 -5
- package/src/corpus/skill-plug.md +19 -27
- package/src/corpus/skills-readme.md +5 -5
- package/src/corpus/templates/_cloudgrid.yaml.reference +7 -7
- package/src/corpus/templates/admin-dashboard/cloudgrid.yaml +7 -7
- package/src/corpus/templates/ai-app/cloudgrid.yaml +7 -7
- package/src/corpus/templates/ai-knowledge-base/AGENTS.md +1 -1
- package/src/corpus/templates/ai-knowledge-base/cloudgrid.yaml +7 -7
- package/src/corpus/templates/analytics-dashboard/cloudgrid.yaml +7 -7
- package/src/corpus/templates/api-dashboard/cloudgrid.yaml +7 -7
- package/src/corpus/templates/api-docs/cloudgrid.yaml +7 -7
- package/src/corpus/templates/api-service/cloudgrid.yaml +7 -7
- package/src/corpus/templates/app-with-data/cloudgrid.yaml +7 -7
- package/src/corpus/templates/appointment-booking/cloudgrid.yaml +7 -7
- package/src/corpus/templates/approval-workflow/cloudgrid.yaml +7 -7
- package/src/corpus/templates/billing-dashboard/cloudgrid.yaml +7 -7
- package/src/corpus/templates/blog-cms/cloudgrid.yaml +7 -7
- package/src/corpus/templates/booking-system/cloudgrid.yaml +7 -7
- package/src/corpus/templates/calendar-scheduler/AGENTS.md +1 -1
- package/src/corpus/templates/calendar-scheduler/cloudgrid.yaml +7 -7
- package/src/corpus/templates/changelog/cloudgrid.yaml +7 -7
- package/src/corpus/templates/company-website/cloudgrid.yaml +7 -7
- package/src/corpus/templates/course-platform/cloudgrid.yaml +7 -7
- package/src/corpus/templates/crm/cloudgrid.yaml +7 -7
- package/src/corpus/templates/dashboard/cloudgrid.yaml +7 -7
- package/src/corpus/templates/deck/cloudgrid.yaml +7 -7
- package/src/corpus/templates/directory/cloudgrid.yaml +7 -7
- package/src/corpus/templates/docs-site/cloudgrid.yaml +7 -7
- package/src/corpus/templates/erp/cloudgrid.yaml +7 -7
- package/src/corpus/templates/event-board/cloudgrid.yaml +7 -7
- package/src/corpus/templates/expense-tracker/cloudgrid.yaml +7 -7
- package/src/corpus/templates/feature-request-board/cloudgrid.yaml +7 -7
- package/src/corpus/templates/financial-dashboard/cloudgrid.yaml +7 -7
- package/src/corpus/templates/forum/cloudgrid.yaml +7 -7
- package/src/corpus/templates/hr-portal/cloudgrid.yaml +7 -7
- package/src/corpus/templates/internal-tools-portal/cloudgrid.yaml +7 -7
- package/src/corpus/templates/inventory/cloudgrid.yaml +7 -7
- package/src/corpus/templates/invoice/cloudgrid.yaml +7 -7
- package/src/corpus/templates/job-board/cloudgrid.yaml +7 -7
- package/src/corpus/templates/kanban/cloudgrid.yaml +7 -7
- package/src/corpus/templates/landing-page/cloudgrid.yaml +7 -7
- package/src/corpus/templates/lms/cloudgrid.yaml +7 -7
- package/src/corpus/templates/marketplace/AGENTS.md +1 -1
- package/src/corpus/templates/marketplace/cloudgrid.yaml +7 -7
- package/src/corpus/templates/membership-site/cloudgrid.yaml +7 -7
- package/src/corpus/templates/monitoring-dashboard/cloudgrid.yaml +7 -7
- package/src/corpus/templates/multi-service/cloudgrid.yaml +7 -7
- package/src/corpus/templates/online-store/cloudgrid.yaml +7 -7
- package/src/corpus/templates/portfolio/cloudgrid.yaml +7 -7
- package/src/corpus/templates/product-catalog/cloudgrid.yaml +7 -7
- package/src/corpus/templates/product-launch/cloudgrid.yaml +7 -7
- package/src/corpus/templates/project-management/cloudgrid.yaml +7 -7
- package/src/corpus/templates/property-listings/cloudgrid.yaml +7 -7
- package/src/corpus/templates/quiz-platform/cloudgrid.yaml +7 -7
- package/src/corpus/templates/report/cloudgrid.yaml +7 -7
- package/src/corpus/templates/restaurant-reservations/cloudgrid.yaml +7 -7
- package/src/corpus/templates/revenue-dashboard/cloudgrid.yaml +7 -7
- package/src/corpus/templates/saas-marketing/cloudgrid.yaml +7 -7
- package/src/corpus/templates/semantic-search/cloudgrid.yaml +7 -7
- package/src/corpus/templates/semantic-search/services/backend/requirements.txt +2 -2
- package/src/corpus/templates/semantic-search/services/refresh/requirements.txt +2 -2
- package/src/corpus/templates/semantic-search/services/web/package-lock.json +3 -3
- package/src/corpus/templates/simple-semantic-search/cloudgrid.yaml +7 -7
- package/src/corpus/templates/status-page/cloudgrid.yaml +7 -7
- package/src/corpus/templates/subscription-management/cloudgrid.yaml +7 -7
- package/src/corpus/templates/task-manager/cloudgrid.yaml +7 -7
- package/src/corpus/templates/ticket-system/cloudgrid.yaml +7 -7
- package/src/corpus/templates/time-tracking/cloudgrid.yaml +7 -7
- package/src/corpus/templates/travel-booking/cloudgrid.yaml +7 -7
- package/src/corpus/templates/waitlist/cloudgrid.yaml +7 -7
- package/src/corpus/templates/web-app/cloudgrid.yaml +7 -7
- package/src/corpus/workflows/forum.md +1 -1
- package/src/corpus/workflows/simple-semantic-search.md +1 -1
- package/src/playbook.js +1 -1
- package/src/tools/deploy.js +37 -10
- package/src/tools/register.js +64 -75
- package/src/widgets/grid-login.html +14 -14
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ It ships in two editions from one codebase:
|
|
|
10
10
|
wrappers) for web clients like claude.ai. See [REMOTE.md](REMOTE.md).
|
|
11
11
|
|
|
12
12
|
The local edition wraps the `grid` CLI for authenticated operations (the CLI
|
|
13
|
-
handles auth,
|
|
13
|
+
handles auth, grid context, and error formatting) and calls the API directly for the
|
|
14
14
|
plug, login, and visibility tools.
|
|
15
15
|
|
|
16
16
|
## CLI compatibility
|
|
@@ -231,7 +231,7 @@ block) and structured result data bypass the text scrubber.
|
|
|
231
231
|
|
|
232
232
|
**No other data collection by this server.** The server does not track usage
|
|
233
233
|
analytics or transmit data beyond the flows listed above and the authenticated
|
|
234
|
-
CloudGrid API calls the individual tools make (e.g. `/
|
|
234
|
+
CloudGrid API calls the individual tools make (e.g. `/grids`,
|
|
235
235
|
`/pickup`, `/deploys`, `/inspirations/{id}/source`). CLI-wrapping tools shell
|
|
236
236
|
out to the CloudGrid `grid` CLI, which shares the same
|
|
237
237
|
`~/.cloudgrid/credentials` file and does not send additional telemetry through
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudgrid-io/mcp",
|
|
3
|
-
"version": "0.21.
|
|
3
|
+
"version": "0.21.20",
|
|
4
4
|
"description": "MCP access to CloudGrid — the live runtime environment where the user's apps run WITH the infrastructure they need out of the box: managed MongoDB, Redis (cache/queues/pub-sub), a pgvector store, persistent disk, and built-in AI with no API keys, in any language or stack, no Docker or Kubernetes to manage. Brainstorm, build, plug, and improve apps, games, dashboards, and tools; instant single-page publishes and full runtime-app deploys with a live URL — for developers and non-technical users. Three editions: local stdio (full toolset), hosted web (light, CLI-free), and a public docs-search server.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -31,6 +31,8 @@
|
|
|
31
31
|
"test:plug-output-schema": "node test/plug-output-schema.test.mjs",
|
|
32
32
|
"test:zip-deploy": "node test/zip-deploy.test.mjs",
|
|
33
33
|
"test:create-gates": "node test/create-gates.test.mjs",
|
|
34
|
+
"test:login-required-create": "node test/login-required-create.test.mjs",
|
|
35
|
+
"test:no-guest-publish-copy": "node test/no-guest-publish-copy.test.mjs",
|
|
34
36
|
"test:plug-create-grid-choice": "node test/plug-create-grid-choice.test.mjs",
|
|
35
37
|
"test:hello": "node test/hello.test.mjs",
|
|
36
38
|
"test:grid-provisioning": "node test/grid-provisioning.test.mjs",
|
|
@@ -86,10 +88,10 @@
|
|
|
86
88
|
},
|
|
87
89
|
"dependencies": {
|
|
88
90
|
"@modelcontextprotocol/ext-apps": "^1.7.5",
|
|
89
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
91
|
+
"@modelcontextprotocol/sdk": "^1.32.1",
|
|
90
92
|
"express": "^4.22.2",
|
|
91
93
|
"fflate": "^0.8.3",
|
|
92
|
-
"undici": "^8.
|
|
94
|
+
"undici": "^8.11.2",
|
|
93
95
|
"zod": "^3.23.0"
|
|
94
96
|
},
|
|
95
97
|
"devDependencies": {
|
|
@@ -100,5 +102,11 @@
|
|
|
100
102
|
"repository": {
|
|
101
103
|
"type": "git",
|
|
102
104
|
"url": "https://github.com/cloudgrid-io/mcp.git"
|
|
105
|
+
},
|
|
106
|
+
"//overrides-qs": "qs is held at 6.15.x by express and body-parser, which both declare ~6.15.1: a tilde range that excludes 6.16.0, so no lockfile refresh reaches the patched version. cloudgrid runs this same override in packages/api and functions/event-consumer through the identical pins. REMOVE once express/body-parser declare a range admitting >= 6.16.0: npm view body-parser dependencies.qs . See cloudgrid-io/cloudgrid#4346.",
|
|
107
|
+
"overrides": {
|
|
108
|
+
"proxy-addr": "^2.0.8",
|
|
109
|
+
"fast-uri": "^3.1.8",
|
|
110
|
+
"qs": "^6.16.0"
|
|
103
111
|
}
|
|
104
112
|
}
|
|
@@ -50,7 +50,7 @@ Verify: `grid --version` and `grid doctor`.
|
|
|
50
50
|
|
|
51
51
|
```
|
|
52
52
|
grid login # Google OAuth in the browser
|
|
53
|
-
grid whoami # confirm user + active
|
|
53
|
+
grid whoami # confirm user + active grid
|
|
54
54
|
grid plug # build + deploy the current directory, prints the live URL
|
|
55
55
|
grid open # open it in the browser
|
|
56
56
|
```
|
|
@@ -72,7 +72,7 @@ grid logs --since 10m
|
|
|
72
72
|
grid visibility set my-api link
|
|
73
73
|
grid feedback
|
|
74
74
|
|
|
75
|
-
# Switch
|
|
75
|
+
# Switch grid, list what's on the grid
|
|
76
76
|
grid use atomic
|
|
77
77
|
grid grid
|
|
78
78
|
```
|
|
@@ -81,19 +81,19 @@ grid grid
|
|
|
81
81
|
|
|
82
82
|
| Command | Purpose |
|
|
83
83
|
|---|---|
|
|
84
|
-
| `login` / `logout` / `whoami` | Sign in (Google OAuth), sign out, show user + active
|
|
85
|
-
| `use [slug]` | Set or show the active
|
|
84
|
+
| `login` / `logout` / `whoami` | Sign in (Google OAuth), sign out, show user + active grid |
|
|
85
|
+
| `use [slug]` | Set or show the active grid |
|
|
86
86
|
| `new <name>` | Scaffold a new app or agent project (`--type`, `--needs`, `--agent`, `--dir`); the entity is created on first `plug` |
|
|
87
87
|
| `plug [target]` | Build + deploy (or redeploy); first plug auto-creates the entity from `cloudgrid.yaml`; prints the live URL |
|
|
88
88
|
| `dev` | Run the linked entity locally with grid-injected resources |
|
|
89
|
-
| `status [name]` |
|
|
89
|
+
| `status [name]` | Grid dashboard, entity detail, or a deploy snapshot |
|
|
90
90
|
| `logs [name]` | Stream entity logs |
|
|
91
91
|
| `open [name]` | Open the entity URL in the browser |
|
|
92
92
|
| `info [name]` / `builds [name]` | Entity metadata; recent deploys |
|
|
93
93
|
| `visibility set <slug> <mode>` | private \| grid \| link — or the axes: `--inside <private\|spaces\|grid> --outside <none\|link\|public>` (+ `--require-signin`, `--space <slug>`) |
|
|
94
94
|
| `rollback` / `versions` | Roll back to a prior deploy; list/tag minted versions |
|
|
95
95
|
| `env` / `secrets` | Manage runtime env vars and secrets (secret values are never printed) |
|
|
96
|
-
| `grid` / `list` | List what's on your hub /
|
|
96
|
+
| `grid` / `list` | List what's on your hub / grid |
|
|
97
97
|
| `rename` / `delete` / `unplug` | Rename, archive, take off the grid |
|
|
98
98
|
| `collab` / `pull` / `pickup` | Grant push access (`collab`), continue in place (`pull`), or fork a copy (`pickup`) |
|
|
99
99
|
| `feedback [message]` | Send feedback to the CloudGrid team |
|
|
@@ -111,7 +111,7 @@ Global:
|
|
|
111
111
|
- `-h, --help` — help for any command
|
|
112
112
|
|
|
113
113
|
Common per-command:
|
|
114
|
-
- `--
|
|
114
|
+
- `--grid <slug>` — pick/override the grid
|
|
115
115
|
- `--json` — machine-readable output (where supported)
|
|
116
116
|
- `--no-clipboard` / `--no-notify` — suppress clipboard copy / OS notification on `plug`
|
|
117
117
|
- `--since <dur>` / `--tail <n>` — `logs` window
|
|
@@ -135,7 +135,7 @@ rm -rf ~/.cloudgrid # remove stored credentials + config
|
|
|
135
135
|
## Troubleshooting
|
|
136
136
|
|
|
137
137
|
- **`grid: command not found`** — ensure the npm global bin (or Homebrew bin) is on `$PATH`; re-run the installer.
|
|
138
|
-
- **Auth errors / 401** — `grid login` again; check `grid whoami` shows the expected
|
|
138
|
+
- **Auth errors / 401** — `grid login` again; check `grid whoami` shows the expected grid, switch with `grid use <grid>`.
|
|
139
139
|
- **Deploy fails** — run `grid doctor`; check `grid logs` and `grid status <name>` for the trace.
|
|
140
140
|
|
|
141
141
|
## Support
|
|
@@ -148,7 +148,7 @@ scale: auto # 'auto' (default), 'alert', or integer 1-10
|
|
|
148
148
|
|
|
149
149
|
# ─── Infrastructure needs (v2, CANONICAL — the deployer injects from these) ─
|
|
150
150
|
needs:
|
|
151
|
-
database: true # Mongo (
|
|
151
|
+
database: true # Mongo (grid-tier). Injects DATABASE_MONGODB_URL.
|
|
152
152
|
cache: true # Redis with LRU eviction. Injects CACHE_REDIS_URL.
|
|
153
153
|
kv: true # Redis, no eviction. Injects KV_REDIS_URL.
|
|
154
154
|
queue: true # Redis for BullMQ etc. Injects QUEUE_REDIS_URL.
|
|
@@ -160,12 +160,12 @@ needs:
|
|
|
160
160
|
|
|
161
161
|
# ─── Inter-entity communication ────────────────────────────────────
|
|
162
162
|
calls: # Entities this app calls (outbound grants).
|
|
163
|
-
-
|
|
164
|
-
-
|
|
163
|
+
- atomic/billing-api # <grid-slug>/<app-slug>, a bare slug, or an entity id.
|
|
164
|
+
- atomic/content-service
|
|
165
165
|
|
|
166
166
|
callers: # Inbound caller policy.
|
|
167
167
|
policy: auto # 'auto' or 'manual' (default: 'manual').
|
|
168
|
-
scope: org # 'org', 'space', or 'explicit' (default: 'org').
|
|
168
|
+
scope: org # 'org' (the whole grid), 'space', or 'explicit' (default: 'org').
|
|
169
169
|
fallback: deny # 'deny' or 'warn' (default: 'deny').
|
|
170
170
|
|
|
171
171
|
# ─── Vault ──────────────────────────────────────────────────────────
|
|
@@ -176,7 +176,7 @@ vault: # Map of ENV_VAR: vault_item_key. Optional.
|
|
|
176
176
|
# ─── Connectors and hooks ──────────────────────────────────────────
|
|
177
177
|
connectors:
|
|
178
178
|
- id: team-slack
|
|
179
|
-
target: org # 'system' or 'org'
|
|
179
|
+
target: org # 'system' or 'org' (your grid)
|
|
180
180
|
channel: "#deploys"
|
|
181
181
|
|
|
182
182
|
hooks: # Outbound events. on ∈ release.published |
|
package/src/corpus/cookbook.md
CHANGED
|
@@ -105,6 +105,6 @@ the drop's expiry. Editing an archived or expired drop returns 409
|
|
|
105
105
|
|
|
106
106
|
## Notes
|
|
107
107
|
|
|
108
|
-
- Every command uses the active
|
|
108
|
+
- Every command uses the active grid and linked entity when you omit the name. Run
|
|
109
109
|
`grid whoami` to see the active context.
|
|
110
110
|
- These skills wrap the CLI. Anything the CLI can do, a skill can drive.
|
package/src/corpus/playbook.md
CHANGED
|
@@ -28,8 +28,8 @@ Operating rules:
|
|
|
28
28
|
|
|
29
29
|
On a re-plug/edit of an existing entity, leave its current visibility as-is unless the user asks to change it.
|
|
30
30
|
6. Brainstorm first (lightly) for a real app, then minimize questions. For a substantial runtime app, take ONE lightweight beat before generating/plugging: confirm the goal + 3-5 core features in a sentence, check for a matching template/recipe (capability-map), and infer the data/runtime needs and STATE them ("I'll add a database so entries are saved"). Keep it to a line or two; never ask a non-technical user infra questions they can't answer. A simple single page skips this and builds immediately. Otherwise use sensible defaults and build; don't front-load setup questions.
|
|
31
|
-
7. If a signed-in publish fails with a server error,
|
|
32
|
-
8. When signed in
|
|
31
|
+
7. If a signed-in publish fails with a server error, surface the error, use the CLI fallback if offered, or ask the user. There is no anonymous fallback — a create without sign-in publishes nothing.
|
|
32
|
+
8. When signed in, establish the grid UP FRONT for a NEW app — grid_start returns the grids. If there are NONE, do rule 3b before you start building: suggest a slug, confirm it, call grid_create_grid, and carry that slug into grid_plug (no wait needed — grid_plug holds until the grid is ready). If there is more than one, do not assume a target: ask "which grid should this go on?" before you start building, and carry that slug into grid_plug. As a backstop, grid_plug hard-gates this: an authed create with >1 grid and no chosen grid returns needs_grid (the picker) instead of plugging; a create with no auth returns needs_auth (sign in with grid_login) and publishes nothing. Relay either ask to the user; never pick silently.
|
|
33
33
|
9. When a build/plug fails unexpectedly, offer to report it to the CloudGrid team — only with the user's explicit consent (ask first). Send just the error + the failed request by default (call grid_report), and never send the whole conversation unless the user agrees (include_conversation). Respect privacy.
|
|
34
34
|
10. To modify an existing page when you don't already have its HTML in context, first call grid_get_app_source to fetch the current HTML, apply your change, then call grid_plug with target_entity_id (the entity_id) to update the SAME URL in place. Do not ask the user to paste the HTML back.
|
|
35
35
|
11. Publishing a single HTML page: pass it inline as grid_plug's html parameter (a full self-contained document). For a heavy or image-heavy page in the local edition, pass the path parameter instead so it is read from disk (no inline size limit); never base64-encode HTML and never pass a file path (or an @-prefixed path) as html. If a page looks empty, use grid_get_app_source to check what was actually published, then re-plug with the real HTML/path and target_entity_id.
|
|
@@ -41,7 +41,7 @@ Operating rules:
|
|
|
41
41
|
- Multi-file app or agent (kind is app or agent, or single_html: false): do NOT try to edit it as one inline HTML file. Tell the user it is a multi-file <kind>, give them the entity_id and the source (source_download_url), and explain that rebuilding it needs the local edition (Claude Desktop/Code) or the CLI — the hosted server cannot rebuild a multi-file app.
|
|
42
42
|
- Not yours (capabilities.replug: false, reason not_owner): do NOT attempt a re-plug. If the user wants their OWN copy, offer to fork it into their grid with grid_pickup and edit the copy. If the user wants to COLLABORATE on the SAME entity, use grid_collab. Three distinct verbs, do not conflate them: grid_pickup = make your OWN COPY (a fork, a NEW entity); grid_pull = continue the SAME entity in place (needs push access — you own it or are a collaborator); grid_collab = GET push access to that same entity (grants permission only and fetches nothing — run grid_pull afterwards to get the code, and if the owner gates access grid_collab sends them a request to approve). So if the user asks to "collab", do NOT call grid_pickup; call grid_collab — distinct from pickup's fork.
|
|
43
43
|
16. Help CloudGrid QA. When you plug, fill BOTH of grid_plug's user_request (a brief version of the user's ask) AND session_note (one short paragraph on what you built and why) — include both by default; omit only if the user objects. A successful plug posts the QA log on that same call, so do NOT call grid_note after plugging — session_note is the narrative path. Use grid_note only BEFORE a plug, or in a session that ends without one. Everything here is recorded for quality review and never changes the plug.
|
|
44
|
-
17.
|
|
44
|
+
17. Sign in before a new plug — there is no guest option. grid_start reports signed_in. If the user wants to publish and is NOT signed in (or a create returns needs_auth or a 401), do NOT silently fail and do NOT invent an auth flow: tell them plainly that publishing needs a CloudGrid account so the page belongs to them, call grid_login, and once they finish, re-call grid_plug. Do NOT offer a guest or sign-in-free publish — a signed-out create returns needs_auth and publishes nothing, even with anon: true, so never pass anon: true. Two paths still work for an anonymous drop made earlier: re-plug it in place with target_entity_id plus its owner_token (no sign-in needed), or, once signed in, claim it into their grid with grid_pull and its claim_token.
|
|
45
45
|
18. Using the CLI (runtime apps, `grid dev`, or any shell step): the verb is `grid`, but ALWAYS invoke it as `npx -y @cloudgrid-io/cli@latest <command>` — never a bare `grid` or `cloudgrid`. A `grid` already on the machine is usually a stale global that the API rejects on its version floor, so a bare command fails with a version error and wastes turns; `npx …@latest` needs no install and is always current. In a local edition, prefer the MCP `grid_*` tools — they resolve a current CLI for you — and drop to `npx …@latest` only for shell-only steps like `grid dev`.
|
|
46
46
|
19. Plugging a runtime app (multi-file, or anything with `needs:`) from a terminal-capable edition (Claude Code, Cursor, or a plain terminal): make the CLI ready BEFORE you plug, in ONE pass — do NOT run the plug first and then react to "command not found" / version errors. Sequence: `npx -y @cloudgrid-io/cli@latest whoami` (if not signed in, `npx -y @cloudgrid-io/cli@latest login` and wait for the user), optionally `npx -y @cloudgrid-io/cli@latest dev` to test locally (the AI gateway and `needs:` resources are tunnelled into dev), then `npx -y @cloudgrid-io/cli@latest plug --grid <slug>`. When you hand a hosted/web user the steps to finish a runtime build locally, give them these same `npx …@latest` commands (never a bare `cloudgrid`/`grid`) alongside their downloaded folder or .zip. If you CANNOT run shell commands yourself (a hosted edition, or a client with no terminal), do not skip local testing silently and never imply you tested it — tell the user plainly: "You can test this locally first by running `npx -y @cloudgrid-io/cli@latest dev` in your terminal." Then plug when they are ready. There is no MCP tool that runs `grid dev`: it is a long-running server you stop with Ctrl-C, so it only works in a real terminal.
|
|
47
47
|
|
|
@@ -44,10 +44,10 @@ URL path; the claim token goes in the body:
|
|
|
44
44
|
|
|
45
45
|
```
|
|
46
46
|
JWT=$(jq -r .jwt ~/.cloudgrid/credentials 2>/dev/null)
|
|
47
|
-
|
|
47
|
+
GRID=$(grep -E '^\s*active_org_slug:' ~/.cloudgrid/config.yaml | awk '{print $2}')
|
|
48
48
|
# ENTITY_ID from the drop response; TOKEN from claim_url's ?token=...
|
|
49
49
|
curl -sS -X POST "https://api.cloudgrid.io/api/v2/entities/$ENTITY_ID/pickup" \
|
|
50
|
-
-H "Authorization: Bearer $JWT" -H "X-CloudGrid-
|
|
50
|
+
-H "Authorization: Bearer $JWT" -H "X-CloudGrid-Grid: $GRID" \
|
|
51
51
|
-H "Content-Type: application/json" \
|
|
52
52
|
-d "{\"claim_token\":\"$TOKEN\"}"
|
|
53
53
|
```
|
|
@@ -3,7 +3,7 @@ version: 0.2.0
|
|
|
3
3
|
name: feedback
|
|
4
4
|
description: |
|
|
5
5
|
Read the CloudGrid feedback feed. Use when the user wants to see feedback, check
|
|
6
|
-
what people said, review reactions, or read recent feedback events for their
|
|
6
|
+
what people said, review reactions, or read recent feedback events for their grid.
|
|
7
7
|
Wraps grid feedback list.
|
|
8
8
|
argument-hint: "[--since 7d]"
|
|
9
9
|
allowed-tools: Bash
|
|
@@ -11,7 +11,7 @@ allowed-tools: Bash
|
|
|
11
11
|
|
|
12
12
|
# CloudGrid Feedback
|
|
13
13
|
|
|
14
|
-
List recent feedback events for the active
|
|
14
|
+
List recent feedback events for the active grid. Wraps `grid feedback list`.
|
|
15
15
|
|
|
16
16
|
## Step 0 — Bootstrap
|
|
17
17
|
|
|
@@ -31,15 +31,15 @@ List recent feedback events for the active org. Wraps `grid feedback list`.
|
|
|
31
31
|
grid feedback list
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
The feed is scoped to the active
|
|
34
|
+
The feed is scoped to the active grid. It is not filtered by entity. Useful flags:
|
|
35
35
|
|
|
36
36
|
- `--since <duration>` — only events newer than this, for example `24h`, `7d`.
|
|
37
37
|
- `--limit <n>` — number of events. Default 50, max 200.
|
|
38
|
-
- `--
|
|
38
|
+
- `--grid <slug>` — read another grid's feed (where you have access).
|
|
39
39
|
|
|
40
40
|
## Reading the output
|
|
41
41
|
|
|
42
|
-
Each event has a time, an id,
|
|
42
|
+
Each event has a time, an id, a grid, and a message. Group or summarize by theme
|
|
43
43
|
when there are many. Surface the ones that look like bugs or blockers first.
|
|
44
44
|
|
|
45
45
|
## Note: reading vs sending
|
package/src/corpus/skill-plug.md
CHANGED
|
@@ -5,7 +5,7 @@ description: |
|
|
|
5
5
|
Deploy or share a creation on CloudGrid and get a public URL. Use when the user
|
|
6
6
|
wants to ship, deploy, publish, share, send a friend a link, or go live — a
|
|
7
7
|
single HTML page or a full app. One self-contained HTML page publishes instantly
|
|
8
|
-
as an inspiration (any edition
|
|
8
|
+
as an inspiration (any edition; sign-in required); a multi-file app deploys from a
|
|
9
9
|
directory or URL. Wraps grid plug.
|
|
10
10
|
argument-hint: "[path-or-url]"
|
|
11
11
|
allowed-tools: Bash
|
|
@@ -20,7 +20,7 @@ Deploy or share a creation and get a public URL. This is the one deploy/share ve
|
|
|
20
20
|
|
|
21
21
|
- **ONE self-contained HTML page** (a single file — CSS+JS inline, images/fonts as
|
|
22
22
|
data: URIs; the normal hosted output) → an **inspiration**: instant, works on
|
|
23
|
-
**any edition
|
|
23
|
+
**any edition**; publishing needs sign-in. See "Share a single HTML page" below.
|
|
24
24
|
- **Anything more** — separate files/folders, a real `assets/` dir, separate
|
|
25
25
|
`.css`/`.js`, multiple pages, a SPA build — **or** any data/server/LLM/cron need
|
|
26
26
|
→ a **runtime app**: `grid plug` on a linked folder, **local edition only**,
|
|
@@ -28,46 +28,38 @@ Deploy or share a creation and get a public URL. This is the one deploy/share ve
|
|
|
28
28
|
|
|
29
29
|
## Share a single HTML page (the fast path)
|
|
30
30
|
|
|
31
|
-
No
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
No CLI needed, but publishing needs a CloudGrid account so the page belongs to the
|
|
32
|
+
user. If they are not signed in, run the `cloudgrid:login` skill first — there is no
|
|
33
|
+
guest or sign-in-free publish. Write the page to a single self-contained HTML file
|
|
34
|
+
(a full document starting with `<!doctype html>` or `<html>`; wrap a fragment in a
|
|
35
|
+
minimal document). Then POST it to the unified plug endpoint with your credentials:
|
|
35
36
|
|
|
36
37
|
```
|
|
38
|
+
JWT=$(jq -r .jwt ~/.cloudgrid/credentials 2>/dev/null)
|
|
39
|
+
GRID=$(grep -E '^\s*active_org_slug:' ~/.cloudgrid/config.yaml | awk '{print $2}')
|
|
37
40
|
curl -sS -X POST https://api.cloudgrid.io/api/v2/plug \
|
|
41
|
+
-H "Authorization: Bearer $JWT" -H "X-CloudGrid-Grid: $GRID" \
|
|
38
42
|
-F "artifact=@/path/to/index.html;type=text/html"
|
|
39
43
|
```
|
|
40
44
|
|
|
41
|
-
|
|
45
|
+
Read these fields from the JSON response:
|
|
42
46
|
|
|
43
47
|
- `url` — the live link, composed by the server. Use it verbatim; never compose a
|
|
44
48
|
URL from the slug yourself.
|
|
45
49
|
- `entity_id` — the durable handle for updating this page later (see re-plug below).
|
|
46
|
-
- `owner_token` — a JWT proving you made this page. It authorizes an anonymous
|
|
47
|
-
re-plug and doubles as the claim token; its lifetime matches the expiry (default
|
|
48
|
-
7 days). Persist it with `entity_id` and `url`.
|
|
49
|
-
- `claim_url` / `claim_message` — the link + nudge to sign in and keep it past expiry.
|
|
50
|
-
|
|
51
|
-
Signed in, publish into your own grid instead (owned, no claim needed):
|
|
52
|
-
|
|
53
|
-
```
|
|
54
|
-
JWT=$(jq -r .jwt ~/.cloudgrid/credentials 2>/dev/null)
|
|
55
|
-
ORG=$(grep -E '^\s*active_org_slug:' ~/.cloudgrid/config.yaml | awk '{print $2}')
|
|
56
|
-
curl -sS -X POST https://api.cloudgrid.io/api/v2/plug \
|
|
57
|
-
-H "Authorization: Bearer $JWT" -H "X-CloudGrid-Org: $ORG" \
|
|
58
|
-
-F "artifact=@/path/to/index.html;type=text/html"
|
|
59
|
-
```
|
|
60
50
|
|
|
61
51
|
The MCP `grid_plug` tool does all of this for you: pass the page as its inline
|
|
62
|
-
`html` param (it materializes one `index.html` and handles
|
|
52
|
+
`html` param (it materializes one `index.html` and handles re-plug). Signed out, it
|
|
53
|
+
returns `needs_auth` and publishes nothing — call `grid_login`, then re-call it.
|
|
63
54
|
|
|
64
55
|
### Re-plug: update the same URL in place
|
|
65
56
|
|
|
66
57
|
`/api/v2/plug` is a unified create-or-update endpoint. The switch is the
|
|
67
58
|
`target_entity_id` form field: absent → create (new URL); present → update the
|
|
68
|
-
SAME entity (same slug, same URL, new content).
|
|
69
|
-
|
|
70
|
-
|
|
59
|
+
SAME entity (same slug, same URL, new content). Signed in, use your normal auth
|
|
60
|
+
headers. A page dropped anonymously before sign-in was required is edited with its
|
|
61
|
+
`owner_token` instead; every such edit REFRESHES the `owner_token` (store the
|
|
62
|
+
newest) and resets the expiry. Editing an
|
|
71
63
|
archived/expired page returns **409 `EDIT_REJECTED`** — it never silently creates.
|
|
72
64
|
|
|
73
65
|
Print the `url` on its own line so it can be copied in one go. A single page is an
|
|
@@ -107,8 +99,8 @@ Other shapes:
|
|
|
107
99
|
- **A URL as an inspiration:** `grid plug https://example.com`
|
|
108
100
|
- **Bind to an existing entity first:** `grid plug --existing <entity-id>`
|
|
109
101
|
|
|
110
|
-
If this is the user's first deploy in the
|
|
111
|
-
Pass `--
|
|
102
|
+
If this is the user's first deploy in the grid, the CLI may ask which grid to use.
|
|
103
|
+
Pass `--grid <slug>` to skip that prompt.
|
|
112
104
|
|
|
113
105
|
## After plug
|
|
114
106
|
|
|
@@ -57,24 +57,24 @@ needs, build, plug it in, tail logs, share, read feedback. Everything here is fr
|
|
|
57
57
|
|
|
58
58
|
Claude Desktop, claude.ai, ChatGPT, and every route in one place: [USAGE.md](USAGE.md).
|
|
59
59
|
|
|
60
|
-
## Share something in one step
|
|
60
|
+
## Share something in one step
|
|
61
61
|
|
|
62
62
|
```
|
|
63
63
|
/cloudgrid:plug index.html
|
|
64
64
|
```
|
|
65
65
|
|
|
66
66
|
`cloudgrid:plug` publishes a single HTML page (or deploys a full app) and hands
|
|
67
|
-
back a public URL. For a single page
|
|
68
|
-
|
|
67
|
+
back a public URL. For a single page no CLI is needed; publishing needs a CloudGrid
|
|
68
|
+
account, so sign in first with `/cloudgrid:login`.
|
|
69
69
|
|
|
70
70
|
## Skills
|
|
71
71
|
|
|
72
72
|
| Skill | Invoke | What it does |
|
|
73
73
|
|---|---|---|
|
|
74
74
|
| `login` | `/cloudgrid:login` | Sign in to CloudGrid, with or without the CLI. |
|
|
75
|
-
| `claim` | `/cloudgrid:claim` | Claim an anonymous drop into your account after signing in. |
|
|
75
|
+
| `claim` | `/cloudgrid:claim` | Claim an anonymous drop made earlier into your account after signing in. |
|
|
76
76
|
| `init` | `/cloudgrid:init` | Scaffold a new app or agent. |
|
|
77
|
-
| `plug` | `/cloudgrid:plug` | Share a single HTML page
|
|
77
|
+
| `plug` | `/cloudgrid:plug` | Share a single HTML page or deploy a directory/URL (sign-in required). Get a public URL. |
|
|
78
78
|
| `logs` | `/cloudgrid:logs` | Tail logs for an entity. |
|
|
79
79
|
| `share` | `/cloudgrid:share` | Make an entity shareable and print its URL. |
|
|
80
80
|
| `feedback` | `/cloudgrid:feedback` | Read the feedback feed. |
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
# Entity slug (REQUIRED). 2-42 chars, lowercase alphanumeric + hyphens.
|
|
21
21
|
# Must start and end with a letter or digit.
|
|
22
|
-
# Becomes part of your public URL: <name>-<4hex>--<
|
|
22
|
+
# Becomes part of your public URL: <name>-<4hex>--<grid>.cloudgrid.io
|
|
23
23
|
name: my-app
|
|
24
24
|
|
|
25
25
|
# One-line summary. Max 280 chars. If omitted, Grid Brain auto-generates one.
|
|
@@ -54,7 +54,7 @@ name: my-app
|
|
|
54
54
|
|
|
55
55
|
# ─── DEPLOY NOTIFICATIONS ──────────────────────────────────────────────────
|
|
56
56
|
|
|
57
|
-
# Slack notification to the
|
|
57
|
+
# Slack notification to the grid's default channel on deploy failure.
|
|
58
58
|
# true = notify (default), false = silent.
|
|
59
59
|
# notify: true
|
|
60
60
|
|
|
@@ -104,20 +104,20 @@ name: my-app
|
|
|
104
104
|
|
|
105
105
|
# Entities this app calls (outbound). Service-account token injected per pair.
|
|
106
106
|
# calls:
|
|
107
|
-
# -
|
|
107
|
+
# - atomic/billing-api
|
|
108
108
|
|
|
109
109
|
# Inbound caller policy — who can call YOUR entity.
|
|
110
110
|
# callers:
|
|
111
111
|
# policy: auto # 'auto' | 'manual' (default).
|
|
112
|
-
# scope: org # 'org' (default) | 'space' | 'explicit'.
|
|
112
|
+
# scope: org # 'org' (the whole grid; default) | 'space' | 'explicit'.
|
|
113
113
|
# fallback: deny # 'deny' (default) | 'warn'.
|
|
114
114
|
# # allowed_apps: # required only when scope: explicit
|
|
115
|
-
# # -
|
|
115
|
+
# # - atomic/frontend
|
|
116
116
|
|
|
117
117
|
|
|
118
118
|
# ─── VAULT ──────────────────────────────────────────────────────────────────
|
|
119
119
|
|
|
120
|
-
# Map
|
|
120
|
+
# Map grid vault items to env vars. Keys UPPER_SNAKE_CASE; values = vault item keys.
|
|
121
121
|
# vault:
|
|
122
122
|
# STRIPE_KEY: stripe-live-key
|
|
123
123
|
# SENDGRID_API_KEY: sendgrid-key
|
|
@@ -127,7 +127,7 @@ name: my-app
|
|
|
127
127
|
|
|
128
128
|
# connectors:
|
|
129
129
|
# - id: team-slack
|
|
130
|
-
# target: org # 'system' | 'org'.
|
|
130
|
+
# target: org # 'system' | 'org' (your grid).
|
|
131
131
|
# channel: "#deploys"
|
|
132
132
|
# hooks:
|
|
133
133
|
# - on: deploy.failed # release.published | deploy.failed | feedback.received | entity.created
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
# Entity slug (REQUIRED). 2-42 chars, lowercase alphanumeric + hyphens.
|
|
21
21
|
# Must start and end with a letter or digit.
|
|
22
|
-
# Becomes part of your public URL: <name>-<4hex>--<
|
|
22
|
+
# Becomes part of your public URL: <name>-<4hex>--<grid>.cloudgrid.io
|
|
23
23
|
name: my-admin
|
|
24
24
|
|
|
25
25
|
# One-line summary. Max 280 chars. If omitted, Grid Brain auto-generates one.
|
|
@@ -54,7 +54,7 @@ name: my-admin
|
|
|
54
54
|
|
|
55
55
|
# ─── DEPLOY NOTIFICATIONS ──────────────────────────────────────────────────
|
|
56
56
|
|
|
57
|
-
# Slack notification to the
|
|
57
|
+
# Slack notification to the grid's default channel on deploy failure.
|
|
58
58
|
# true = notify (default), false = silent.
|
|
59
59
|
# notify: true
|
|
60
60
|
|
|
@@ -104,20 +104,20 @@ name: my-admin
|
|
|
104
104
|
|
|
105
105
|
# Entities this app calls (outbound). Service-account token injected per pair.
|
|
106
106
|
# calls:
|
|
107
|
-
# -
|
|
107
|
+
# - atomic/billing-api
|
|
108
108
|
|
|
109
109
|
# Inbound caller policy — who can call YOUR entity.
|
|
110
110
|
# callers:
|
|
111
111
|
# policy: auto # 'auto' | 'manual' (default).
|
|
112
|
-
# scope: org # 'org' (default) | 'space' | 'explicit'.
|
|
112
|
+
# scope: org # 'org' (the whole grid; default) | 'space' | 'explicit'.
|
|
113
113
|
# fallback: deny # 'deny' (default) | 'warn'.
|
|
114
114
|
# # allowed_apps: # required only when scope: explicit
|
|
115
|
-
# # -
|
|
115
|
+
# # - atomic/frontend
|
|
116
116
|
|
|
117
117
|
|
|
118
118
|
# ─── VAULT ──────────────────────────────────────────────────────────────────
|
|
119
119
|
|
|
120
|
-
# Map
|
|
120
|
+
# Map grid vault items to env vars. Keys UPPER_SNAKE_CASE; values = vault item keys.
|
|
121
121
|
# vault:
|
|
122
122
|
# STRIPE_KEY: stripe-live-key
|
|
123
123
|
# SENDGRID_API_KEY: sendgrid-key
|
|
@@ -127,7 +127,7 @@ name: my-admin
|
|
|
127
127
|
|
|
128
128
|
# connectors:
|
|
129
129
|
# - id: team-slack
|
|
130
|
-
# target: org # 'system' | 'org'.
|
|
130
|
+
# target: org # 'system' | 'org' (your grid).
|
|
131
131
|
# channel: "#deploys"
|
|
132
132
|
# hooks:
|
|
133
133
|
# - on: deploy.failed # release.published | deploy.failed | feedback.received | entity.created
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
# Entity slug (REQUIRED). 2-42 chars, lowercase alphanumeric + hyphens.
|
|
21
21
|
# Must start and end with a letter or digit.
|
|
22
|
-
# Becomes part of your public URL: <name>-<4hex>--<
|
|
22
|
+
# Becomes part of your public URL: <name>-<4hex>--<grid>.cloudgrid.io
|
|
23
23
|
name: my-chatbot
|
|
24
24
|
|
|
25
25
|
# One-line summary. Max 280 chars. If omitted, Grid Brain auto-generates one.
|
|
@@ -54,7 +54,7 @@ name: my-chatbot
|
|
|
54
54
|
|
|
55
55
|
# ─── DEPLOY NOTIFICATIONS ──────────────────────────────────────────────────
|
|
56
56
|
|
|
57
|
-
# Slack notification to the
|
|
57
|
+
# Slack notification to the grid's default channel on deploy failure.
|
|
58
58
|
# true = notify (default), false = silent.
|
|
59
59
|
# notify: true
|
|
60
60
|
|
|
@@ -104,20 +104,20 @@ name: my-chatbot
|
|
|
104
104
|
|
|
105
105
|
# Entities this app calls (outbound). Service-account token injected per pair.
|
|
106
106
|
# calls:
|
|
107
|
-
# -
|
|
107
|
+
# - atomic/billing-api
|
|
108
108
|
|
|
109
109
|
# Inbound caller policy — who can call YOUR entity.
|
|
110
110
|
# callers:
|
|
111
111
|
# policy: auto # 'auto' | 'manual' (default).
|
|
112
|
-
# scope: org # 'org' (default) | 'space' | 'explicit'.
|
|
112
|
+
# scope: org # 'org' (the whole grid; default) | 'space' | 'explicit'.
|
|
113
113
|
# fallback: deny # 'deny' (default) | 'warn'.
|
|
114
114
|
# # allowed_apps: # required only when scope: explicit
|
|
115
|
-
# # -
|
|
115
|
+
# # - atomic/frontend
|
|
116
116
|
|
|
117
117
|
|
|
118
118
|
# ─── VAULT ──────────────────────────────────────────────────────────────────
|
|
119
119
|
|
|
120
|
-
# Map
|
|
120
|
+
# Map grid vault items to env vars. Keys UPPER_SNAKE_CASE; values = vault item keys.
|
|
121
121
|
# vault:
|
|
122
122
|
# STRIPE_KEY: stripe-live-key
|
|
123
123
|
# SENDGRID_API_KEY: sendgrid-key
|
|
@@ -127,7 +127,7 @@ name: my-chatbot
|
|
|
127
127
|
|
|
128
128
|
# connectors:
|
|
129
129
|
# - id: team-slack
|
|
130
|
-
# target: org # 'system' | 'org'.
|
|
130
|
+
# target: org # 'system' | 'org' (your grid).
|
|
131
131
|
# channel: "#deploys"
|
|
132
132
|
# hooks:
|
|
133
133
|
# - on: deploy.failed # release.published | deploy.failed | feedback.received | entity.created
|
|
@@ -93,7 +93,7 @@ injected as env vars at `grid dev` (local) and at runtime (after `grid plug`):
|
|
|
93
93
|
|
|
94
94
|
The **AI Gateway needs no API key** — `needs: { ai: true }` injects
|
|
95
95
|
`RUNTIME_GATEWAY_URL` and `@cloudgrid-io/runtime` routes through it. The `vault:` block only
|
|
96
|
-
**maps**
|
|
96
|
+
**maps** a grid vault item key → an env var name; store the real value once with
|
|
97
97
|
`grid secrets set <vault-item-key> <value>`. Never commit a secret; never hardcode
|
|
98
98
|
a connection string.
|
|
99
99
|
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
# Entity slug (REQUIRED). 2-42 chars, lowercase alphanumeric + hyphens.
|
|
21
21
|
# Must start and end with a letter or digit.
|
|
22
|
-
# Becomes part of your public URL: <name>-<4hex>--<
|
|
22
|
+
# Becomes part of your public URL: <name>-<4hex>--<grid>.cloudgrid.io
|
|
23
23
|
name: my-knowledge-base
|
|
24
24
|
|
|
25
25
|
# One-line summary. Max 280 chars. If omitted, Grid Brain auto-generates one.
|
|
@@ -54,7 +54,7 @@ name: my-knowledge-base
|
|
|
54
54
|
|
|
55
55
|
# ─── DEPLOY NOTIFICATIONS ──────────────────────────────────────────────────
|
|
56
56
|
|
|
57
|
-
# Slack notification to the
|
|
57
|
+
# Slack notification to the grid's default channel on deploy failure.
|
|
58
58
|
# true = notify (default), false = silent.
|
|
59
59
|
# notify: true
|
|
60
60
|
|
|
@@ -111,20 +111,20 @@ needs:
|
|
|
111
111
|
|
|
112
112
|
# Entities this app calls (outbound). Service-account token injected per pair.
|
|
113
113
|
# calls:
|
|
114
|
-
# -
|
|
114
|
+
# - atomic/billing-api
|
|
115
115
|
|
|
116
116
|
# Inbound caller policy — who can call YOUR entity.
|
|
117
117
|
# callers:
|
|
118
118
|
# policy: auto # 'auto' | 'manual' (default).
|
|
119
|
-
# scope: org # 'org' (default) | 'space' | 'explicit'.
|
|
119
|
+
# scope: org # 'org' (the whole grid; default) | 'space' | 'explicit'.
|
|
120
120
|
# fallback: deny # 'deny' (default) | 'warn'.
|
|
121
121
|
# # allowed_apps: # required only when scope: explicit
|
|
122
|
-
# # -
|
|
122
|
+
# # - atomic/frontend
|
|
123
123
|
|
|
124
124
|
|
|
125
125
|
# ─── VAULT ──────────────────────────────────────────────────────────────────
|
|
126
126
|
|
|
127
|
-
# Map
|
|
127
|
+
# Map grid vault items to env vars. Keys UPPER_SNAKE_CASE; values = vault item keys.
|
|
128
128
|
# This RAG blueprint needs NO secret by default — the AI Gateway is injected via
|
|
129
129
|
# `needs: { ai: true }` (no API key to manage). Uncomment a vault block ONLY if
|
|
130
130
|
# you add auth (gate the chat UI) or payments. Store the value once with
|
|
@@ -138,7 +138,7 @@ needs:
|
|
|
138
138
|
|
|
139
139
|
# connectors:
|
|
140
140
|
# - id: team-slack
|
|
141
|
-
# target: org # 'system' | 'org'.
|
|
141
|
+
# target: org # 'system' | 'org' (your grid).
|
|
142
142
|
# channel: "#deploys"
|
|
143
143
|
# hooks:
|
|
144
144
|
# - on: deploy.failed # release.published | deploy.failed | feedback.received | entity.created
|