gravity-cli 0.5.2__tar.gz → 0.5.3__tar.gz

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 (111) hide show
  1. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/AGENT_STANDARD.md +30 -1
  2. gravity_cli-0.5.2/README.md → gravity_cli-0.5.3/PKG-INFO +42 -0
  3. gravity_cli-0.5.2/PKG-INFO → gravity_cli-0.5.3/README.md +25 -17
  4. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/gravity_schema/catalog_imported.yaml +478 -0
  5. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/pyproject.toml +1 -1
  6. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/pyproject.toml +2 -2
  7. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/BUILDER_GUIDE.md +2 -1
  8. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/_runner_script.py +1 -0
  9. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/cli.py +2 -0
  10. gravity_cli-0.5.3/src/gravity_cli/commands/dev.py +40 -0
  11. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/commands/run.py +157 -63
  12. gravity_cli-0.5.3/src/gravity_cli/dev.py +309 -0
  13. gravity_cli-0.5.3/src/gravity_cli/dev_page/index.html +406 -0
  14. gravity_cli-0.5.3/src/gravity_cli/localrun.py +228 -0
  15. gravity_cli-0.5.3/tests/test_dev.py +267 -0
  16. gravity_cli-0.5.3/tests/test_localrun.py +83 -0
  17. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/tests/test_run.py +24 -0
  18. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/uv.lock +6 -6
  19. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/.env.example +0 -0
  20. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/.github/workflows/ci.yml +0 -0
  21. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/.github/workflows/release.yml +0 -0
  22. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/.gitignore +0 -0
  23. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/LICENSE +0 -0
  24. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/NOTICE +0 -0
  25. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/RELEASING.md +0 -0
  26. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/TEMPLATES.md +0 -0
  27. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/LICENSE +0 -0
  28. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/NOTICE +0 -0
  29. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/README.md +0 -0
  30. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/gravity_schema/__init__.py +0 -0
  31. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/gravity_schema/__main__.py +0 -0
  32. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/gravity_schema/catalog.py +0 -0
  33. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/gravity_schema/catalog.yaml +0 -0
  34. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/gravity_schema/contract.py +0 -0
  35. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/gravity_schema/cron.py +0 -0
  36. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/gravity_schema/errors.py +0 -0
  37. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/gravity_schema/export.py +0 -0
  38. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/gravity_schema/gen_catalog.py +0 -0
  39. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/gravity_schema/manifest.py +0 -0
  40. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/gravity_schema/source_scan.py +0 -0
  41. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/gravity_schema/validation.py +0 -0
  42. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/schema/manifest.schema.json +0 -0
  43. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/tests/conftest.py +0 -0
  44. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/tests/test_catalog_parity.py +0 -0
  45. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/tests/test_cron.py +0 -0
  46. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/tests/test_errors.py +0 -0
  47. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/tests/test_json_schema.py +0 -0
  48. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/tests/test_kind_outputs.py +0 -0
  49. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/tests/test_manifest.py +0 -0
  50. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/tests/test_slots.py +0 -0
  51. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/tests/test_source_scan.py +0 -0
  52. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/packages/gravity-schema/tests/test_validation.py +0 -0
  53. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/__init__.py +0 -0
  54. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/__main__.py +0 -0
  55. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/api.py +0 -0
  56. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/commands/__init__.py +0 -0
  57. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/commands/adapt.py +0 -0
  58. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/commands/build.py +0 -0
  59. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/commands/connect.py +0 -0
  60. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/commands/guide.py +0 -0
  61. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/commands/init.py +0 -0
  62. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/commands/login.py +0 -0
  63. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/commands/push.py +0 -0
  64. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/commands/runs.py +0 -0
  65. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/commands/schedule.py +0 -0
  66. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/commands/tools.py +0 -0
  67. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/commands/validate.py +0 -0
  68. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/config.py +0 -0
  69. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/manifest.py +0 -0
  70. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/project.py +0 -0
  71. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/templates/chat/.gitignore +0 -0
  72. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/templates/chat/manifest.yaml +0 -0
  73. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/templates/chat/requirements.txt +0 -0
  74. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/templates/chat/src/agent.py +0 -0
  75. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/templates/deepagent/.gitignore +0 -0
  76. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/templates/deepagent/manifest.yaml +0 -0
  77. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/templates/deepagent/requirements.txt +0 -0
  78. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/templates/deepagent/src/agent.py +0 -0
  79. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/templates/minimal/.gitignore +0 -0
  80. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/templates/minimal/manifest.yaml +0 -0
  81. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/templates/minimal/requirements.txt +0 -0
  82. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/templates/minimal/src/agent.py +0 -0
  83. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/templates/structured/.gitignore +0 -0
  84. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/templates/structured/manifest.yaml +0 -0
  85. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/templates/structured/requirements.txt +0 -0
  86. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/templates/structured/src/agent.py +0 -0
  87. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/templates/structured/src/gateway.py +0 -0
  88. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/templates/structured/src/nodes/agent.py +0 -0
  89. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/templates/structured/src/prompts.py +0 -0
  90. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/templates/structured/src/state.py +0 -0
  91. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/timeline.py +0 -0
  92. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/src/gravity_cli/ui.py +0 -0
  93. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/starter/manifest.yaml +0 -0
  94. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/starter/requirements.txt +0 -0
  95. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/starter/src/agent.py +0 -0
  96. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/starter/src/summary.py +0 -0
  97. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/starter/tests/test_summary.py +0 -0
  98. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/tests/conftest.py +0 -0
  99. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/tests/test_adapt.py +0 -0
  100. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/tests/test_api.py +0 -0
  101. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/tests/test_build_push.py +0 -0
  102. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/tests/test_connect.py +0 -0
  103. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/tests/test_gateway_token.py +0 -0
  104. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/tests/test_manifest_integration.py +0 -0
  105. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/tests/test_session.py +0 -0
  106. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/tests/test_templates.py +0 -0
  107. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/tests/test_timeline.py +0 -0
  108. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/tests/test_tools.py +0 -0
  109. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/tests/test_ui.py +0 -0
  110. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/tests/test_validate.py +0 -0
  111. {gravity_cli-0.5.2 → gravity_cli-0.5.3}/tests/test_welcome.py +0 -0
@@ -202,6 +202,26 @@ emb = OpenAIEmbeddings(model="voyageai/voyage-4-lite", # or google/gemini-embe
202
202
  vectors = await emb.aembed_documents(["first text", "second text"])
203
203
  ```
204
204
 
205
+ **Images** come from an image model through the same URL and token: no tool to
206
+ declare. Ask for image output; the picture comes back as a data URL, which is
207
+ exactly what the corpus takes (§8):
208
+
209
+ ```python
210
+ async with httpx.AsyncClient(timeout=120) as http:
211
+ resp = await http.post(f"{os.environ['GRAVITY_LLM_URL']}/chat/completions",
212
+ headers={"Authorization": f"Bearer {os.environ['GRAVITY_RUN_TOKEN']}"},
213
+ json={"model": "google/gemini-2.5-flash-image", # or openai/gpt-5-image-mini
214
+ "modalities": ["image", "text"],
215
+ "messages": [{"role": "user", "content": "A flat illustration of ..., no text"}]})
216
+ resp.raise_for_status()
217
+ src = resp.json()["choices"][0]["message"]["images"][0]["image_url"]["url"] # data:image/png;base64,...
218
+ ```
219
+
220
+ An image is a few MB and the whole state is checkpointed after every step, so
221
+ make pictures in the **last** node (or the one that builds the corpus) and keep
222
+ them out of state until then. Each one is metered and counts toward the run's
223
+ budget like any model call.
224
+
205
225
  Those three env vars — `GRAVITY_GATEWAY_URL`, `GRAVITY_LLM_URL`,
206
226
  `GRAVITY_RUN_TOKEN` — are the entire Gravity surface, plus the `gravity`
207
227
  package for tools on the platform (§8). No `OPENAI_API_KEY`: locally and in
@@ -228,6 +248,11 @@ undeclared tool is refused locally exactly as it will be when hosted. Your
228
248
  agent only ever sees the run token. `GRAVITY_GATEWAY_URL` defaults to
229
249
  `http://127.0.0.1:8000/mcp` and `GRAVITY_LLM_URL` to the same host's `/v1`.
230
250
 
251
+ `gravity dev` opens a local dashboard over the same runs: a form from your
252
+ manifest, a live timeline, approvals, the result and a history. A run from
253
+ `gravity run` in the same folder shows up in it, and the other way round (both
254
+ leave their record in `.gravity/runs/`; one run is live per folder).
255
+
231
256
  ## 7. What's checked where
232
257
 
233
258
  | Stage | Catches |
@@ -328,6 +353,7 @@ corpus = gravity.Corpus(
328
353
  facts=[gravity.Fact(label="TAM", value="$18B", source="s1")], # value: text or a number
329
354
  table=gravity.Table(columns=["Segment", "Teams"], rows=[["Founders", "1.2M"]]),
330
355
  notes="speaker notes / read-out text",
356
+ images=[gravity.Image(src=src, alt="server rack", caption="Option A")], # data URL, see §4
331
357
  sections=[gravity.Section(heading="one level of nesting, same shape")],
332
358
  )],
333
359
  sources=[gravity.Source(id="s1", title="Report", url="https://example.com")],
@@ -336,7 +362,10 @@ return {**corpus.to_state(), "result": {"title": corpus.title}}
336
362
  ```
337
363
 
338
364
  A plain dict of the same shape works too. The models catch a typo when the
339
- corpus is built rather than when it's rendered. Set `result` as well: it's
365
+ corpus is built rather than when it's rendered. Images (`png`, `jpeg`, `webp`
366
+ or `gif` data URLs, at most 8 MB each and 12 per corpus) are embedded in the
367
+ Word, PowerPoint and Markdown downloads and shown on `/app` and in `gravity
368
+ dev`; an emailed output names each one as `[image: alt — caption]` instead. Set `result` as well: it's
340
369
  what the run returns.
341
370
 
342
371
  ## 9. Checklist
@@ -1,3 +1,20 @@
1
+ Metadata-Version: 2.5
2
+ Name: gravity-cli
3
+ Version: 0.5.3
4
+ Summary: gravity cli — init, run, and push python agents to the Gravity marketplace
5
+ License-Expression: Apache-2.0
6
+ License-File: LICENSE
7
+ License-File: NOTICE
8
+ Requires-Python: >=3.12
9
+ Requires-Dist: gravity-schema==0.5.3
10
+ Requires-Dist: httpx>=0.27.0
11
+ Requires-Dist: keyring>=25.0.0
12
+ Requires-Dist: python-dotenv>=1.0.0
13
+ Requires-Dist: rich>=13.9.0
14
+ Requires-Dist: typer>=0.15.0
15
+ Requires-Dist: uv>=0.8.0
16
+ Description-Content-Type: text/markdown
17
+
1
18
  <h1 align="center">Gravity CLI</h1>
2
19
 
3
20
  <p align="center">
@@ -179,6 +196,7 @@ Run `gravity help` for this list in the terminal, and add `-h` to any command fo
179
196
  | **Build an agent** | [`gravity init`](#gravity-init) | Create a new agent from a template |
180
197
  | | [`gravity validate`](#gravity-validate) | Check your agent for mistakes before it runs |
181
198
  | | [`gravity run`](#gravity-run) | Run your agent locally against real tools |
199
+ | | [`gravity dev`](#gravity-dev) | Open a local dashboard to run and watch your agent |
182
200
  | | [`gravity schedule`](#gravity-schedule) | Run your agent on its schedule, locally |
183
201
  | | [`gravity adapt`](#gravity-adapt) | Write a new slot adapter with AI, kept only if its tests pass |
184
202
  | **Publish** | [`gravity build`](#gravity-build) | Package your agent into `build/agent.zip` |
@@ -274,6 +292,29 @@ gravity run --reply "make it shorter"
274
292
  - Requires a gateway token: the one `gravity login` stores, or `GRAVITY_DEV_TOKEN`.
275
293
  - A call to a tool in `approvals.required_for` pauses, shows what it would do, and waits for `y` or `n`. With no terminal to ask in, it is rejected.
276
294
  - Exits with code 0 when the run finishes and 1 when it fails.
295
+ - Leaves a record in `.gravity/runs/<id>/` (`run.json` and `events.jsonl`), which is what `gravity dev` reads. One run is live per folder at a time, because runs share the folder's memory, store and thread files.
296
+
297
+ ### `gravity dev`
298
+
299
+ Open a local dashboard for the agent in this folder: a form built from the manifest's inputs, a live timeline of each step, model call and tool call, approval buttons for held calls, the result, and a history of runs.
300
+
301
+ ```
302
+ gravity dev [path] [--port 4747] [--no-open] [--llm-url URL]
303
+ ```
304
+
305
+ | Option | Description |
306
+ |---|---|
307
+ | `--port N` | Port to listen on (default 4747). If it is taken, a free one is used and printed. |
308
+ | `--no-open` | Print the address without opening a browser (SSH, WSL, CI) |
309
+ | `--llm-url URL` | Model endpoint to use instead of `GRAVITY_LLM_URL` |
310
+
311
+ - A run from `gravity run` in the same folder shows up in the dashboard live, and a run started in the dashboard is the same run (same engine, same memory, store and thread files), so `gravity run --reply` continues it.
312
+ - It listens on `127.0.0.1` only, behind a random token in the printed address, for as long as the command runs. Ctrl+C stops it and any run it started. Nothing keeps running in the background.
313
+ - Connected accounts: it shows the accounts your tools need and a Connect button for each one that is missing.
314
+ - Approvals: a call held for approval can be decided in the terminal or in the dashboard; whichever answers first wins.
315
+ - Cancel a run from the dashboard only if the dashboard started it; stop a terminal run with Ctrl+C in that terminal.
316
+ - Results show as text. Word, PowerPoint and CSV files are produced by Gravity after you push. A file input is read as text here.
317
+ - Same requirements as `gravity run`: a gateway token from `gravity login`, or `GRAVITY_DEV_TOKEN`.
277
318
 
278
319
  ### `gravity schedule`
279
320
 
@@ -738,6 +779,7 @@ Real tools act on a connected account. Connect one with `gravity-gateway connect
738
779
 
739
780
  ## What's new
740
781
 
782
+ - **0.5.3** `gravity dev` opens a local dashboard for your agent: a form from your manifest, a live timeline, approvals, the result and run history; runs from `gravity run` in the same folder show up in it live, and the other way round. WhatsApp joins the catalog (51 tools; 1,374 across 12 apps). Agents can return generated images: put them in a corpus section's `images` and they land in the Word, PowerPoint and Markdown outputs. The agent standard now shows how to generate images and embeddings through the gateway. `NEEDS_RECONNECT` on the shared test account tells you to ask Gravity, not to connect your own account.
741
783
  - **0.5.2** Jira, Confluence and Notion join the catalog: 1,351 tools across 11 apps. `get_store()` works in local runs, kept in `.gravity/store.json`. Renewing an expired sign-in keeps your gateway token, so `gravity run` keeps working after an hour. Commands start faster: the catalog loads in a quarter of the time.
742
784
  - **0.5.0** `gravity connect` links your own accounts. `web.search` and `web.fetch` join the catalog. `gravity validate` now refuses a tool that isn't in the catalog, an imported write tool without an approval, and code that names a write tool the manifest doesn't grant. `gravity tools` reads the gateway's list and needs no sign-in. On Windows the session stays in the keychain instead of a file.
743
785
  - **0.4.4** Same code as 0.4.3, released from this repository so the GitHub release, the tag and PyPI line up again. Adds `RELEASING.md`.
@@ -1,20 +1,3 @@
1
- Metadata-Version: 2.5
2
- Name: gravity-cli
3
- Version: 0.5.2
4
- Summary: gravity cli — init, run, and push python agents to the Gravity marketplace
5
- License-Expression: Apache-2.0
6
- License-File: LICENSE
7
- License-File: NOTICE
8
- Requires-Python: >=3.12
9
- Requires-Dist: gravity-schema==0.5.2
10
- Requires-Dist: httpx>=0.27.0
11
- Requires-Dist: keyring>=25.0.0
12
- Requires-Dist: python-dotenv>=1.0.0
13
- Requires-Dist: rich>=13.9.0
14
- Requires-Dist: typer>=0.15.0
15
- Requires-Dist: uv>=0.8.0
16
- Description-Content-Type: text/markdown
17
-
18
1
  <h1 align="center">Gravity CLI</h1>
19
2
 
20
3
  <p align="center">
@@ -196,6 +179,7 @@ Run `gravity help` for this list in the terminal, and add `-h` to any command fo
196
179
  | **Build an agent** | [`gravity init`](#gravity-init) | Create a new agent from a template |
197
180
  | | [`gravity validate`](#gravity-validate) | Check your agent for mistakes before it runs |
198
181
  | | [`gravity run`](#gravity-run) | Run your agent locally against real tools |
182
+ | | [`gravity dev`](#gravity-dev) | Open a local dashboard to run and watch your agent |
199
183
  | | [`gravity schedule`](#gravity-schedule) | Run your agent on its schedule, locally |
200
184
  | | [`gravity adapt`](#gravity-adapt) | Write a new slot adapter with AI, kept only if its tests pass |
201
185
  | **Publish** | [`gravity build`](#gravity-build) | Package your agent into `build/agent.zip` |
@@ -291,6 +275,29 @@ gravity run --reply "make it shorter"
291
275
  - Requires a gateway token: the one `gravity login` stores, or `GRAVITY_DEV_TOKEN`.
292
276
  - A call to a tool in `approvals.required_for` pauses, shows what it would do, and waits for `y` or `n`. With no terminal to ask in, it is rejected.
293
277
  - Exits with code 0 when the run finishes and 1 when it fails.
278
+ - Leaves a record in `.gravity/runs/<id>/` (`run.json` and `events.jsonl`), which is what `gravity dev` reads. One run is live per folder at a time, because runs share the folder's memory, store and thread files.
279
+
280
+ ### `gravity dev`
281
+
282
+ Open a local dashboard for the agent in this folder: a form built from the manifest's inputs, a live timeline of each step, model call and tool call, approval buttons for held calls, the result, and a history of runs.
283
+
284
+ ```
285
+ gravity dev [path] [--port 4747] [--no-open] [--llm-url URL]
286
+ ```
287
+
288
+ | Option | Description |
289
+ |---|---|
290
+ | `--port N` | Port to listen on (default 4747). If it is taken, a free one is used and printed. |
291
+ | `--no-open` | Print the address without opening a browser (SSH, WSL, CI) |
292
+ | `--llm-url URL` | Model endpoint to use instead of `GRAVITY_LLM_URL` |
293
+
294
+ - A run from `gravity run` in the same folder shows up in the dashboard live, and a run started in the dashboard is the same run (same engine, same memory, store and thread files), so `gravity run --reply` continues it.
295
+ - It listens on `127.0.0.1` only, behind a random token in the printed address, for as long as the command runs. Ctrl+C stops it and any run it started. Nothing keeps running in the background.
296
+ - Connected accounts: it shows the accounts your tools need and a Connect button for each one that is missing.
297
+ - Approvals: a call held for approval can be decided in the terminal or in the dashboard; whichever answers first wins.
298
+ - Cancel a run from the dashboard only if the dashboard started it; stop a terminal run with Ctrl+C in that terminal.
299
+ - Results show as text. Word, PowerPoint and CSV files are produced by Gravity after you push. A file input is read as text here.
300
+ - Same requirements as `gravity run`: a gateway token from `gravity login`, or `GRAVITY_DEV_TOKEN`.
294
301
 
295
302
  ### `gravity schedule`
296
303
 
@@ -755,6 +762,7 @@ Real tools act on a connected account. Connect one with `gravity-gateway connect
755
762
 
756
763
  ## What's new
757
764
 
765
+ - **0.5.3** `gravity dev` opens a local dashboard for your agent: a form from your manifest, a live timeline, approvals, the result and run history; runs from `gravity run` in the same folder show up in it live, and the other way round. WhatsApp joins the catalog (51 tools; 1,374 across 12 apps). Agents can return generated images: put them in a corpus section's `images` and they land in the Word, PowerPoint and Markdown outputs. The agent standard now shows how to generate images and embeddings through the gateway. `NEEDS_RECONNECT` on the shared test account tells you to ask Gravity, not to connect your own account.
758
766
  - **0.5.2** Jira, Confluence and Notion join the catalog: 1,351 tools across 11 apps. `get_store()` works in local runs, kept in `.gravity/store.json`. Renewing an expired sign-in keeps your gateway token, so `gravity run` keeps working after an hour. Commands start faster: the catalog loads in a quarter of the time.
759
767
  - **0.5.0** `gravity connect` links your own accounts. `web.search` and `web.fetch` join the catalog. `gravity validate` now refuses a tool that isn't in the catalog, an imported write tool without an approval, and code that names a write tool the manifest doesn't grant. `gravity tools` reads the gateway's list and needs no sign-in. On Windows the session stays in the keychain instead of a file.
760
768
  - **0.4.4** Same code as 0.4.3, released from this repository so the GitHub release, the tag and PyPI line up again. Adds `RELEASING.md`.
@@ -13156,3 +13156,481 @@
13156
13156
  breadth: generic
13157
13157
  guarantee: experimental
13158
13158
  side_effect: read
13159
+ - name: whatsapp.configure_conversational_automation
13160
+ slug: WHATSAPP_CONFIGURE_CONVERSATIONAL_AUTOMATION
13161
+ toolkit: whatsapp
13162
+ description: Configure conversational automation settings for a WhatsApp Business phone number. Sets up away messages, greeting messages, custom commands, and ice breaker prompts to automate customer interactions....
13163
+ scopes:
13164
+ - whatsapp_business_messaging
13165
+ - whatsapp_business_management
13166
+ breadth: generic
13167
+ guarantee: experimental
13168
+ side_effect: write
13169
+ - name: whatsapp.create_flow
13170
+ slug: WHATSAPP_CREATE_FLOW
13171
+ toolkit: whatsapp
13172
+ description: Create a new WhatsApp Flow for the WhatsApp Business Account. Use this action when you want to create an interactive flow that can collect user data, guide users through a process, or provide structur...
13173
+ scopes:
13174
+ - whatsapp_business_messaging
13175
+ - whatsapp_business_management
13176
+ breadth: generic
13177
+ guarantee: experimental
13178
+ side_effect: write
13179
+ - name: whatsapp.create_max_price_agreements
13180
+ slug: WHATSAPP_CREATE_MAX_PRICE_AGREEMENTS
13181
+ toolkit: whatsapp
13182
+ description: Create a max price agreement for WhatsApp marketing messages pricing. Max price agreements set a ceiling on the per-conversation price you'll pay for WhatsApp messaging across your WhatsApp Business A...
13183
+ scopes:
13184
+ - business_management
13185
+ - whatsapp_business_management
13186
+ - whatsapp_business_messaging
13187
+ breadth: generic
13188
+ guarantee: experimental
13189
+ side_effect: write
13190
+ - name: whatsapp.create_message_template
13191
+ slug: WHATSAPP_CREATE_MESSAGE_TEMPLATE
13192
+ toolkit: whatsapp
13193
+ description: Create a new message template for the WhatsApp Business Account. Templates must be approved by WhatsApp before they can be used. Templates are required for marketing messages and messages sent outside...
13194
+ scopes:
13195
+ - whatsapp_business_management
13196
+ breadth: generic
13197
+ guarantee: experimental
13198
+ side_effect: write
13199
+ - name: whatsapp.create_qr_code
13200
+ slug: WHATSAPP_CREATE_QR_CODE
13201
+ toolkit: whatsapp
13202
+ description: Create a new QR code with a prefilled message for a WhatsApp Business phone number. Use this action when you need to generate a shareable QR code that customers can scan to start a conversation with y...
13203
+ scopes:
13204
+ - whatsapp_business_management
13205
+ breadth: generic
13206
+ guarantee: experimental
13207
+ side_effect: write
13208
+ - name: whatsapp.create_upload_session
13209
+ slug: WHATSAPP_CREATE_UPLOAD_SESSION
13210
+ toolkit: whatsapp
13211
+ description: Create a resumable upload session for large file uploads to WhatsApp. This action initiates an upload session that allows you to upload large files in chunks. First create a session, then use the sess...
13212
+ scopes:
13213
+ - whatsapp_business_messaging
13214
+ breadth: generic
13215
+ guarantee: experimental
13216
+ side_effect: write
13217
+ - name: whatsapp.get_activities
13218
+ slug: WHATSAPP_GET_ACTIVITIES
13219
+ toolkit: whatsapp
13220
+ description: Retrieve activity history for a WhatsApp Business Account. This action returns a paginated list of activities such as phone number verifications, user additions, and other administrative actions perfo...
13221
+ scopes:
13222
+ - whatsapp_business_management
13223
+ breadth: generic
13224
+ guarantee: experimental
13225
+ side_effect: read
13226
+ - name: whatsapp.get_business_account_details
13227
+ slug: WHATSAPP_GET_BUSINESS_ACCOUNT_DETAILS
13228
+ toolkit: whatsapp
13229
+ description: Retrieve comprehensive details about a WhatsApp Business Account (WABA). Returns configuration, status, and settings information including account review status, business verification status, timezone...
13230
+ scopes:
13231
+ - whatsapp_business_messaging
13232
+ breadth: generic
13233
+ guarantee: experimental
13234
+ side_effect: read
13235
+ - name: whatsapp.get_business_compliance_info
13236
+ slug: WHATSAPP_GET_BUSINESS_COMPLIANCE_INFO
13237
+ toolkit: whatsapp
13238
+ description: Retrieve comprehensive business compliance information for a WhatsApp Business phone number. Returns regulatory and compliance details including entity registration status, grievance officer contact i...
13239
+ scopes:
13240
+ - whatsapp_business_management
13241
+ breadth: generic
13242
+ guarantee: experimental
13243
+ side_effect: read
13244
+ - name: whatsapp.get_business_encryption
13245
+ slug: WHATSAPP_GET_BUSINESS_ENCRYPTION
13246
+ toolkit: whatsapp
13247
+ description: Retrieve the WhatsApp Business public key and its signature verification status. Use this action when you need to obtain the end-to-end encryption public key for a WhatsApp Business phone number. This...
13248
+ scopes:
13249
+ - whatsapp_business_messaging
13250
+ breadth: generic
13251
+ guarantee: experimental
13252
+ side_effect: read
13253
+ - name: whatsapp.get_business_profile
13254
+ slug: WHATSAPP_GET_BUSINESS_PROFILE
13255
+ toolkit: whatsapp
13256
+ description: Get the business profile information for a WhatsApp Business phone number. This includes business details like description, address, website, and contact info.
13257
+ scopes:
13258
+ - whatsapp_business_messaging
13259
+ breadth: generic
13260
+ guarantee: experimental
13261
+ side_effect: read
13262
+ - name: whatsapp.get_client_business_accounts
13263
+ slug: WHATSAPP_GET_CLIENT_BUSINESS_ACCOUNTS
13264
+ toolkit: whatsapp
13265
+ description: Retrieve WhatsApp Business Accounts shared with or managed by a business portfolio. Use this action when you need to get WhatsApp Business Accounts (WABAs) that are client accounts shared with or mana...
13266
+ scopes:
13267
+ - whatsapp_business_management
13268
+ breadth: generic
13269
+ guarantee: experimental
13270
+ side_effect: read
13271
+ - name: whatsapp.get_commerce_settings
13272
+ slug: WHATSAPP_GET_COMMERCE_SETTINGS
13273
+ toolkit: whatsapp
13274
+ description: Get commerce settings for a WhatsApp Business phone number. Retrieves cart and catalog visibility settings for a specific WhatsApp Business phone number. Use this action to check whether shopping cart...
13275
+ scopes:
13276
+ - whatsapp_business_messaging
13277
+ breadth: generic
13278
+ guarantee: experimental
13279
+ side_effect: read
13280
+ - name: whatsapp.get_flow_assets
13281
+ slug: WHATSAPP_GET_FLOW_ASSETS
13282
+ toolkit: whatsapp
13283
+ description: List assets associated with a WhatsApp Flow. Use this action when you need to retrieve the assets (such as flow.json) that are associated with a WhatsApp Flow. The response includes download URLs for...
13284
+ scopes:
13285
+ - whatsapp_business_messaging
13286
+ breadth: generic
13287
+ guarantee: experimental
13288
+ side_effect: read
13289
+ - name: whatsapp.get_join_requests
13290
+ slug: WHATSAPP_GET_JOIN_REQUESTS
13291
+ toolkit: whatsapp
13292
+ description: Get all pending join requests for a WhatsApp group. Use this action when you need to retrieve pending requests from users who want to join a WhatsApp group. This is useful for group administration, mo...
13293
+ scopes:
13294
+ - whatsapp_business_management
13295
+ - whatsapp_business_messaging
13296
+ breadth: generic
13297
+ guarantee: experimental
13298
+ side_effect: read
13299
+ - name: whatsapp.get_media_info
13300
+ slug: WHATSAPP_GET_MEDIA_INFO
13301
+ toolkit: whatsapp
13302
+ description: Get metadata and download URL for uploaded WhatsApp media. Returns media ID, download URL (valid for 5 minutes), MIME type, SHA256 hash, and file size. The download URL can be used to retrieve the act...
13303
+ scopes:
13304
+ - whatsapp_business_messaging
13305
+ breadth: generic
13306
+ guarantee: experimental
13307
+ side_effect: read
13308
+ - name: whatsapp.get_message_history
13309
+ slug: WHATSAPP_GET_MESSAGE_HISTORY
13310
+ toolkit: whatsapp
13311
+ description: Retrieve message history for a WhatsApp Business phone number. Returns a paginated list of messages with their delivery status information, including events like delivery status updates, timestamps, a...
13312
+ scopes:
13313
+ - whatsapp_business_messaging
13314
+ - whatsapp_business_management
13315
+ breadth: generic
13316
+ guarantee: experimental
13317
+ side_effect: read
13318
+ - name: whatsapp.get_message_templates
13319
+ slug: WHATSAPP_GET_MESSAGE_TEMPLATES
13320
+ toolkit: whatsapp
13321
+ description: Get all message templates for the WhatsApp Business Account. Templates are required for sending messages outside the 24-hour window and for marketing/utility messages.
13322
+ scopes:
13323
+ - whatsapp_business_management
13324
+ breadth: generic
13325
+ guarantee: experimental
13326
+ side_effect: read
13327
+ - name: whatsapp.get_owned_business_accounts
13328
+ slug: WHATSAPP_GET_OWNED_BUSINESS_ACCOUNTS
13329
+ toolkit: whatsapp
13330
+ description: Retrieve WhatsApp Business Accounts owned by a business portfolio. Use this action when you need to get all WhatsApp Business Accounts (WABAs) that are directly owned by a specific business. This diff...
13331
+ scopes:
13332
+ - whatsapp_business_messaging
13333
+ breadth: generic
13334
+ guarantee: experimental
13335
+ side_effect: read
13336
+ - name: whatsapp.get_phone_number
13337
+ slug: WHATSAPP_GET_PHONE_NUMBER
13338
+ toolkit: whatsapp
13339
+ description: Retrieve detailed information about a specific WhatsApp Business phone number. Returns phone number details including verification status, quality rating, display number, verified business name, throu...
13340
+ scopes:
13341
+ - whatsapp_business_management
13342
+ breadth: generic
13343
+ guarantee: experimental
13344
+ side_effect: read
13345
+ - name: whatsapp.get_phone_numbers
13346
+ slug: WHATSAPP_GET_PHONE_NUMBERS
13347
+ toolkit: whatsapp
13348
+ description: Retrieve all phone numbers registered to your WhatsApp Business Account. Returns phone number IDs, display numbers, verification status, quality ratings, and messaging throughput limits. Use the phone...
13349
+ scopes:
13350
+ - whatsapp_business_management
13351
+ breadth: generic
13352
+ guarantee: experimental
13353
+ side_effect: read
13354
+ - name: whatsapp.get_schedules
13355
+ slug: WHATSAPP_GET_SCHEDULES
13356
+ toolkit: whatsapp
13357
+ description: Retrieve campaign schedules associated with a WhatsApp Business Account. Use this action when you need to list all scheduled campaigns for a WABA, including their status, timing, and recurrence patter...
13358
+ scopes:
13359
+ - whatsapp_business_management
13360
+ breadth: generic
13361
+ guarantee: experimental
13362
+ side_effect: read
13363
+ - name: whatsapp.get_settings
13364
+ slug: WHATSAPP_GET_SETTINGS
13365
+ toolkit: whatsapp
13366
+ description: Get Cloud API settings for a WhatsApp Business phone number. Retrieves calling, storage, and payload encryption settings for a specific WhatsApp Business phone number. This includes information about...
13367
+ scopes:
13368
+ - whatsapp_business_management
13369
+ - whatsapp_business_messaging
13370
+ breadth: generic
13371
+ guarantee: experimental
13372
+ side_effect: read
13373
+ - name: whatsapp.get_subscribed_apps
13374
+ slug: WHATSAPP_GET_SUBSCRIBED_APPS
13375
+ toolkit: whatsapp
13376
+ description: Get all applications currently subscribed to webhooks for a WhatsApp Business Account. Use this action when you need to retrieve the list of third-party applications or integrations that are subscribe...
13377
+ scopes:
13378
+ - whatsapp_business_management
13379
+ - whatsapp_business_messaging
13380
+ breadth: generic
13381
+ guarantee: experimental
13382
+ side_effect: read
13383
+ - name: whatsapp.get_template_library
13384
+ slug: WHATSAPP_GET_TEMPLATE_LIBRARY
13385
+ toolkit: whatsapp
13386
+ description: Browse the pre-built message template library for WhatsApp Business Account. This retrieves a list of available templates that can be used for messaging. Use when you need to discover available messag...
13387
+ scopes:
13388
+ - whatsapp_business_messaging
13389
+ - whatsapp_business_management
13390
+ breadth: generic
13391
+ guarantee: experimental
13392
+ side_effect: read
13393
+ - name: whatsapp.get_template_status
13394
+ slug: WHATSAPP_GET_TEMPLATE_STATUS
13395
+ toolkit: whatsapp
13396
+ description: Get the status and details of a specific message template. This is useful for checking if a template has been approved, rejected, or is still pending review.
13397
+ scopes:
13398
+ - whatsapp_business_management
13399
+ breadth: generic
13400
+ guarantee: experimental
13401
+ side_effect: read
13402
+ - name: whatsapp.list_flows
13403
+ slug: WHATSAPP_LIST_FLOWS
13404
+ toolkit: whatsapp
13405
+ description: List all WhatsApp Flows associated with the WhatsApp Business Account. Returns flow details including name, status, categories, and any validation errors. Use when you need to retrieve all available f...
13406
+ scopes:
13407
+ - whatsapp_business_management
13408
+ breadth: generic
13409
+ guarantee: experimental
13410
+ side_effect: read
13411
+ - name: whatsapp.list_groups
13412
+ slug: WHATSAPP_LIST_GROUPS
13413
+ toolkit: whatsapp
13414
+ description: List all WhatsApp groups associated with a business phone number. Use this action when you need to retrieve the list of groups that a business phone number is a member of. This is useful for managing...
13415
+ scopes:
13416
+ - whatsapp_business_management
13417
+ - whatsapp_business_messaging
13418
+ breadth: generic
13419
+ guarantee: experimental
13420
+ side_effect: read
13421
+ - name: whatsapp.list_qr_codes
13422
+ slug: WHATSAPP_LIST_QR_CODES
13423
+ toolkit: whatsapp
13424
+ description: Get a list of all QR codes for a WhatsApp Business phone number. Use this action when you need to retrieve all message QR codes associated with a specific WhatsApp Business phone number. This is usefu...
13425
+ scopes:
13426
+ - whatsapp_business_management
13427
+ breadth: generic
13428
+ guarantee: experimental
13429
+ side_effect: read
13430
+ - name: whatsapp.list_solutions
13431
+ slug: WHATSAPP_LIST_SOLUTIONS
13432
+ toolkit: whatsapp
13433
+ description: Retrieve a paginated list of Multi-Partner Solutions for a WhatsApp Business Account. Use when you need to view all multi-partner solutions (such as SMB solutions) associated with a WABA, including th...
13434
+ scopes:
13435
+ - whatsapp_business_management
13436
+ breadth: generic
13437
+ guarantee: experimental
13438
+ side_effect: read
13439
+ - name: whatsapp.publish_flow
13440
+ slug: WHATSAPP_PUBLISH_FLOW
13441
+ toolkit: whatsapp
13442
+ description: Publish a WhatsApp Flow to make it available for use. Use this action when you have finished designing and testing a WhatsApp Flow and are ready to make it available for users. The flow must be in DRA...
13443
+ scopes:
13444
+ - whatsapp_business_management
13445
+ - whatsapp_business_messaging
13446
+ breadth: generic
13447
+ guarantee: experimental
13448
+ side_effect: write
13449
+ - name: whatsapp.register_phone
13450
+ slug: WHATSAPP_REGISTER_PHONE
13451
+ toolkit: whatsapp
13452
+ description: Register a WhatsApp Business phone number for use with WhatsApp Cloud API. Use when you need to register a phone number that has been added to your WhatsApp Business Account. This action requires sett...
13453
+ scopes:
13454
+ - whatsapp_business_management
13455
+ - whatsapp_business_messaging
13456
+ breadth: generic
13457
+ guarantee: experimental
13458
+ side_effect: write
13459
+ - name: whatsapp.send_contacts
13460
+ slug: WHATSAPP_SEND_CONTACTS
13461
+ toolkit: whatsapp
13462
+ description: 'Send contacts WhatsApp number. Note: The message will be delivered to the recipient only if they have initiated a conversation first.'
13463
+ scopes:
13464
+ - whatsapp_business_messaging
13465
+ breadth: generic
13466
+ guarantee: experimental
13467
+ side_effect: write
13468
+ - name: whatsapp.send_interactive_buttons
13469
+ slug: WHATSAPP_SEND_INTERACTIVE_BUTTONS
13470
+ toolkit: whatsapp
13471
+ description: Send an interactive button message with up to 3 reply buttons to a WhatsApp user. Interactive button messages allow recipients to quickly respond by tapping predefined buttons. Perfect for yes/no ques...
13472
+ scopes:
13473
+ - whatsapp_business_messaging
13474
+ breadth: generic
13475
+ guarantee: experimental
13476
+ side_effect: write
13477
+ - name: whatsapp.send_interactive_list
13478
+ slug: WHATSAPP_SEND_INTERACTIVE_LIST
13479
+ toolkit: whatsapp
13480
+ description: Send an interactive list message to a WhatsApp number. List messages display a menu of options organized into sections. Users tap a button to view the list and select one option. Perfect for product c...
13481
+ scopes:
13482
+ - whatsapp_business_messaging
13483
+ breadth: generic
13484
+ guarantee: experimental
13485
+ side_effect: write
13486
+ - name: whatsapp.send_location
13487
+ slug: WHATSAPP_SEND_LOCATION
13488
+ toolkit: whatsapp
13489
+ description: Send a location message with coordinates, name, and address to a WhatsApp user. This action allows you to share location information through WhatsApp Business API. The location message includes latitu...
13490
+ scopes:
13491
+ - whatsapp_business_messaging
13492
+ breadth: generic
13493
+ guarantee: experimental
13494
+ side_effect: write
13495
+ - name: whatsapp.send_media
13496
+ slug: WHATSAPP_SEND_MEDIA
13497
+ toolkit: whatsapp
13498
+ description: 'Send a media message to a WhatsApp number. Note: The media will be delivered to the recipient only if they have texted first.'
13499
+ scopes:
13500
+ - whatsapp_business_messaging
13501
+ breadth: generic
13502
+ guarantee: experimental
13503
+ side_effect: write
13504
+ - name: whatsapp.send_media_by_id
13505
+ slug: WHATSAPP_SEND_MEDIA_BY_ID
13506
+ toolkit: whatsapp
13507
+ description: Send media using a media ID from previously uploaded media. This is more efficient than sending media by URL as the media is already on WhatsApp servers. Use upload_media action first to get the media...
13508
+ scopes:
13509
+ - whatsapp_business_messaging
13510
+ breadth: generic
13511
+ guarantee: experimental
13512
+ side_effect: write
13513
+ - name: whatsapp.send_message
13514
+ slug: WHATSAPP_SEND_MESSAGE
13515
+ toolkit: whatsapp
13516
+ description: 'Send a text message to a WhatsApp user. Important: The recipient phone number must be registered on WhatsApp and must have initiated a conversation with your business within the last 24 hours, OR you...'
13517
+ scopes:
13518
+ - whatsapp_business_messaging
13519
+ breadth: generic
13520
+ guarantee: experimental
13521
+ side_effect: write
13522
+ - name: whatsapp.send_template_message
13523
+ slug: WHATSAPP_SEND_TEMPLATE_MESSAGE
13524
+ toolkit: whatsapp
13525
+ description: Send a template message to a WhatsApp number.
13526
+ scopes:
13527
+ - whatsapp_business_messaging
13528
+ breadth: generic
13529
+ guarantee: experimental
13530
+ side_effect: write
13531
+ - name: whatsapp.set_two_step_verification
13532
+ slug: WHATSAPP_SET_TWO_STEP_VERIFICATION
13533
+ toolkit: whatsapp
13534
+ description: Set or reset the two-step verification PIN for a WhatsApp Business phone number. Use when you need to change the 6-digit PIN that protects a registered phone number — for example after onboarding a ne...
13535
+ scopes:
13536
+ - whatsapp_business_management
13537
+ - whatsapp_business_messaging
13538
+ breadth: generic
13539
+ guarantee: experimental
13540
+ side_effect: write
13541
+ - name: whatsapp.subscribe_app
13542
+ slug: WHATSAPP_SUBSCRIBE_APP
13543
+ toolkit: whatsapp
13544
+ description: Subscribe your application to receive webhook notifications for a WhatsApp Business Account (WABA). This action registers the application to receive webhook events from the specified WABA. Use this ac...
13545
+ scopes:
13546
+ - whatsapp_business_management
13547
+ - whatsapp_business_messaging
13548
+ breadth: generic
13549
+ guarantee: experimental
13550
+ side_effect: write
13551
+ - name: whatsapp.update_business_account
13552
+ slug: WHATSAPP_UPDATE_BUSINESS_ACCOUNT
13553
+ toolkit: whatsapp
13554
+ description: Update metadata for a WhatsApp Flow including its name, categories, and endpoint URI. Use when you need to modify the configuration or settings of an existing WhatsApp Flow.
13555
+ scopes:
13556
+ - whatsapp_business_management
13557
+ breadth: generic
13558
+ guarantee: experimental
13559
+ side_effect: write
13560
+ - name: whatsapp.update_business_profile
13561
+ slug: WHATSAPP_UPDATE_BUSINESS_PROFILE
13562
+ toolkit: whatsapp
13563
+ description: Update WhatsApp Business Profile information including business details, contact information, and profile settings. Use when you need to modify the business profile settings such as the about text, bu...
13564
+ scopes:
13565
+ - whatsapp_business_management
13566
+ - whatsapp_business_messaging
13567
+ breadth: generic
13568
+ guarantee: experimental
13569
+ side_effect: write
13570
+ - name: whatsapp.update_commerce_settings
13571
+ slug: WHATSAPP_UPDATE_COMMERCE_SETTINGS
13572
+ toolkit: whatsapp
13573
+ description: Set or update commerce settings for a WhatsApp Business phone number. Use this action to enable or disable shopping cart functionality and product catalog visibility for a specific WhatsApp Business p...
13574
+ scopes:
13575
+ - whatsapp_business_management
13576
+ - whatsapp_business_messaging
13577
+ breadth: generic
13578
+ guarantee: experimental
13579
+ side_effect: write
13580
+ - name: whatsapp.update_flow_json
13581
+ slug: WHATSAPP_UPDATE_FLOW_JSON
13582
+ toolkit: whatsapp
13583
+ description: Update the Flow JSON configuration for a WhatsApp Flow. Use this action when you need to update or upload a new flow.json file for an existing WhatsApp Flow. The Flow JSON defines the structure, scree...
13584
+ scopes:
13585
+ - whatsapp_business_management
13586
+ - whatsapp_business_messaging
13587
+ breadth: generic
13588
+ guarantee: experimental
13589
+ side_effect: write
13590
+ - name: whatsapp.update_settings
13591
+ slug: WHATSAPP_UPDATE_SETTINGS
13592
+ toolkit: whatsapp
13593
+ description: Update Cloud API settings for a WhatsApp Business phone number. Use this action to modify calling features, user identity verification settings, payload encryption configuration, and data storage pref...
13594
+ scopes:
13595
+ - whatsapp_business_management
13596
+ - whatsapp_business_messaging
13597
+ breadth: generic
13598
+ guarantee: experimental
13599
+ side_effect: write
13600
+ - name: whatsapp.upload_media
13601
+ slug: WHATSAPP_UPLOAD_MEDIA
13602
+ toolkit: whatsapp
13603
+ description: 'Upload media files (images, videos, audio, documents, stickers) to WhatsApp servers. The uploaded media gets a media ID that can be used in send_media or other messaging actions. Supported formats: -...'
13604
+ scopes:
13605
+ - whatsapp_business_messaging
13606
+ breadth: generic
13607
+ guarantee: experimental
13608
+ side_effect: write
13609
+ - name: whatsapp.upsert_message_template
13610
+ slug: WHATSAPP_UPSERT_MESSAGE_TEMPLATE
13611
+ toolkit: whatsapp
13612
+ description: Create or update a message template for the WhatsApp Business Account. Use this action when you need to create a new message template or update an existing one with the same name. If a template with t...
13613
+ scopes:
13614
+ - whatsapp_business_management
13615
+ - whatsapp_business_messaging
13616
+ breadth: generic
13617
+ guarantee: experimental
13618
+ side_effect: write
13619
+ - name: whatsapp.verify_code
13620
+ slug: WHATSAPP_VERIFY_CODE
13621
+ toolkit: whatsapp
13622
+ description: Verify the OTP code for a pre-verified phone number. Use when you need to complete phone number verification by submitting the received OTP code. The phone number must first be added to your WhatsApp...
13623
+ scopes:
13624
+ - whatsapp_business_management
13625
+ - whatsapp_business_messaging
13626
+ breadth: generic
13627
+ guarantee: experimental
13628
+ side_effect: write
13629
+ - name: whatsapp.who_am_i
13630
+ slug: WHATSAPP_WHO_AM_I
13631
+ toolkit: whatsapp
13632
+ description: Return the identity (name) of the connected WhatsApp (Meta) account.
13633
+ scopes: []
13634
+ breadth: generic
13635
+ guarantee: experimental
13636
+ side_effect: read