primethink-cli 1.6.0__tar.gz → 1.7.0__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 (52) hide show
  1. {primethink_cli-1.6.0/primethink_cli.egg-info → primethink_cli-1.7.0}/PKG-INFO +5 -1
  2. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/README.md +4 -0
  3. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/SPECS.md +6 -1
  4. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/USER_GUIDE.md +83 -6
  5. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/docs/agent-tools.md +1 -1
  6. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/docs/cli-reference.md +185 -2
  7. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/primethink.py +2114 -3
  8. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/primethink_agent_tools/tools.py +21 -2
  9. {primethink_cli-1.6.0 → primethink_cli-1.7.0/primethink_cli.egg-info}/PKG-INFO +5 -1
  10. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/primethink_cli.egg-info/SOURCES.txt +1 -0
  11. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/primethink_mcp.py +22 -2
  12. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/pyproject.toml +1 -1
  13. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/skills/primethink-cli/SKILL.md +39 -0
  14. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/tests/test_agent_tools.py +8 -0
  15. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/tests/test_cli.py +12 -1
  16. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/tests/test_mcp_server.py +7 -0
  17. primethink_cli-1.7.0/tests/test_suite.py +735 -0
  18. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/DEVELOPER.md +0 -0
  19. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/LICENSE +0 -0
  20. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/MANIFEST.in +0 -0
  21. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/docs/install.md +0 -0
  22. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/docs/primethink_help_llms.txt +0 -0
  23. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/install/homebrew/primethink-cli.rb +0 -0
  24. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/install/install.cmd +0 -0
  25. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/install/install.ps1 +0 -0
  26. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/install/install.sh +0 -0
  27. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/primethink_agent_tools/__init__.py +0 -0
  28. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/primethink_agent_tools/client.py +0 -0
  29. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/primethink_agent_tools/settings.py +0 -0
  30. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/primethink_cli.egg-info/dependency_links.txt +0 -0
  31. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/primethink_cli.egg-info/entry_points.txt +0 -0
  32. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/primethink_cli.egg-info/requires.txt +0 -0
  33. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/primethink_cli.egg-info/top_level.txt +0 -0
  34. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/pytest.ini +0 -0
  35. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/scripts/build.sh +0 -0
  36. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/scripts/deploy.sh +0 -0
  37. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/scripts/publish.sh +0 -0
  38. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/setup.cfg +0 -0
  39. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/setup.py +0 -0
  40. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/skills/__init__.py +0 -0
  41. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/tests/__init__.py +0 -0
  42. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/tests/conftest.py +0 -0
  43. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/tests/test_agent_commands.py +0 -0
  44. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/tests/test_env_config.py +0 -0
  45. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/tests/test_install_developer_skill.py +0 -0
  46. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/tests/test_install_skill.py +0 -0
  47. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/tests/test_live_app.py +0 -0
  48. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/tests/test_packaging.py +0 -0
  49. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/tests/test_project_workflows.py +0 -0
  50. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/tests/test_search_commands.py +0 -0
  51. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/tests/test_task_commands.py +0 -0
  52. {primethink_cli-1.6.0 → primethink_cli-1.7.0}/tests/test_whoami.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: primethink-cli
3
- Version: 1.6.0
3
+ Version: 1.7.0
4
4
  Summary: PrimeThink CLI - A powerful tool for interacting with PrimeThink AI API
5
5
  Author-email: PrimeThink <support@primethink.ai>
6
6
  License-Expression: MIT
@@ -147,6 +147,10 @@ pt chat send --agent AGENT_ID --message "your message"
147
147
  | `pt workspace list` / `create` / `rename` / `set-goal` / `delete` | Manage chat workspaces |
148
148
  | `pt workspace archive` / `pin` / `add-chat` / `remove-chat` | Organize chats within workspaces |
149
149
  | `pt tag list` / `create` / `assign` | List, create, and assign tags (task/agent/capability/collection) |
150
+ | `pt suite build` / `validate` / `inspect` | Build, check and describe a `.ptsuite` package (apps, tasks, agents, collections, tags, workspace) |
151
+ | `pt suite install` / `uninstall` | Plan (`--dry-run`) and install/upgrade a package idempotently from a file, folder, GitHub or the catalog; remove what it created |
152
+ | `pt suite export` | Turn live tasks and Live Apps (with their agents and collections) into a package folder |
153
+ | `pt suite catalog build` / `list` / `search` | Index a folder/GitHub repo of packages and browse it |
150
154
  | `pt group list` / `get` / `create` / `update` / `delete` | Manage groups (organizations) |
151
155
  | `pt group members` / `remove-member` / `invite` / `add-agent` | Manage group members, invites, and agents |
152
156
  | `pt settings list` / `get` / `set` / `delete` | Manage group/user settings and provider API keys (secrets never shown) |
@@ -107,6 +107,10 @@ pt chat send --agent AGENT_ID --message "your message"
107
107
  | `pt workspace list` / `create` / `rename` / `set-goal` / `delete` | Manage chat workspaces |
108
108
  | `pt workspace archive` / `pin` / `add-chat` / `remove-chat` | Organize chats within workspaces |
109
109
  | `pt tag list` / `create` / `assign` | List, create, and assign tags (task/agent/capability/collection) |
110
+ | `pt suite build` / `validate` / `inspect` | Build, check and describe a `.ptsuite` package (apps, tasks, agents, collections, tags, workspace) |
111
+ | `pt suite install` / `uninstall` | Plan (`--dry-run`) and install/upgrade a package idempotently from a file, folder, GitHub or the catalog; remove what it created |
112
+ | `pt suite export` | Turn live tasks and Live Apps (with their agents and collections) into a package folder |
113
+ | `pt suite catalog build` / `list` / `search` | Index a folder/GitHub repo of packages and browse it |
110
114
  | `pt group list` / `get` / `create` / `update` / `delete` | Manage groups (organizations) |
111
115
  | `pt group members` / `remove-member` / `invite` / `add-agent` | Manage group members, invites, and agents |
112
116
  | `pt settings list` / `get` / `set` / `delete` | Manage group/user settings and provider API keys (secrets never shown) |
@@ -101,7 +101,6 @@ To obtain an API key, go to `Settings > API Keys` in the PrimeThink app and gene
101
101
  | `pt capability delete` | `DELETE /api/v1/virtual-assistants/capabilities/{capability_id}` |
102
102
  | `pt capability archive` / `unarchive` | `PUT /api/v1/virtual-assistants/capabilities/{capability_id}/archived?archived=true\|false` |
103
103
  | `pt capability duplicate` | `POST /api/v1/virtual-assistants/capabilities/{capability_id}/duplicate` |
104
- | `pt capability resolve` | resolves capability codes/ids to ids via `GET /api/v1/virtual-assistants/capabilities` |
105
104
  | `pt models list` | `GET /api/v1/catalog/llm/models` |
106
105
  | `pt models embeddings` | `GET /api/v1/catalog/embeddings/models` |
107
106
  | `pt task list` | `GET /api/v1/tasks/` |
@@ -147,6 +146,12 @@ To obtain an API key, go to `Settings > API Keys` in the PrimeThink app and gene
147
146
  | `pt tag list` | `GET /api/v1/tags?model=` |
148
147
  | `pt tag create` | `POST /api/v1/tags` (`{model, name, tag_category}`) |
149
148
  | `pt tag assign` | `PUT /api/v1/tags/assignments` (`{model, owner_id, tag_ids}`) |
149
+ | `pt capability resolve` / `pt agent create --capability` | `GET /api/v1/virtual-assistants/capabilities?page=N&page_size=100` — every page (the endpoint returns only 10 without page parameters) |
150
+ | `pt suite build` / `validate` / `inspect` / `catalog build` | local only (no API) |
151
+ | `pt suite install SOURCE` | reads: `GET /api/v1/virtual-assistants/capabilities` (all pages), `…/virtual-assistants/types`, `/groups/current/settings`, `/users/me/settings`, `/tags?model=`, `/virtual-assistants?search=`, `/collections?search=`, `/tasks/?search=&status=all`, `/chat-workspaces`, `/memories?workspace_id=`, `/chats?search=`, `/chats/{id}/collections`, `/chats/{id}/users`, `/users/me/visible-users`, `/scheduled_jobs/scheduled_jobs_in_chat/{chat}`, `POST /chats/{id}/chatdb/list`; writes (not in `--dry-run`): `POST /tags`, `PUT /tags/assignments`, `POST/PATCH /virtual-assistants/capabilities[/{id}]`, `POST /virtual-assistants`, `PATCH /virtual-assistants/{id}`, `POST /virtual-assistants/{id}/collections/attach`, `POST /collections?name=&type=`, `POST /collections/{id}/documents`, `POST /tasks/`, `PATCH /tasks/{id}`, `POST /tasks/{id}/image`, the `@app` sync of `pt live-app publish`, `POST /tasks/{id}/versions`, `POST /tasks/{id}/collections-files`, `POST /chat-workspaces`, `PUT /chat-workspaces/{id}/goal`, `POST /memories?workspace_id=`, `POST /chats?copy_from_task_id=`, `POST /chats/{id}/collections/{cid}`, `DELETE /chats/{id}/collections`, `POST /chats/{id}/members`, `POST /chats/{id}/chatdb/entities`, `POST/PUT /scheduled_jobs/scheduled_job_in_chat[/{id}]` |
152
+ | `pt suite uninstall ID` | `DELETE /scheduled_jobs/scheduled_job_in_chat/{id}`, `DELETE /tasks/{id}`, `DELETE /virtual-assistants/{id}`, `DELETE /virtual-assistants/capabilities/{id}`; with flags `DELETE /collections/{id}`, `DELETE /chats/{id}` |
153
+ | `pt suite export` | `GET /tasks/{id}`, `GET /virtual-assistants/{id}`, `GET /virtual-assistants/types`, `GET /collections/{id}`, `GET /tasks/{id}/directories?path=/app`, `GET /documents/{id}/download` |
154
+ | `pt suite … github:owner/repo[@ref]` | `GET https://codeload.github.com/{owner}/{repo}/zip/{ref}`, or with `GITHUB_TOKEN` `GET https://api.github.com/repos/{owner}/{repo}/zipball/{ref}` |
150
155
  | `pt group list` | `GET /api/v1/groups/` |
151
156
  | `pt group get` | `GET /api/v1/groups/{group_id}` |
152
157
  | `pt group create` | `POST /api/v1/groups/` |
@@ -22,11 +22,12 @@ For a terse, complete listing of every command and option, see the [CLI Referenc
22
22
  14. [Finding Users](#finding-users)
23
23
  15. [Notifications](#notifications)
24
24
  16. [Scaffolding Live Apps](#scaffolding-live-apps)
25
- 17. [MCP Server](#mcp-server)
26
- 18. [Common Use Cases](#common-use-cases)
27
- 19. [Tips and Tricks](#tips-and-tricks)
28
- 20. [Troubleshooting](#troubleshooting)
29
- 21. [FAQ](#faq)
25
+ 17. [Suite Packages](#suite-packages)
26
+ 18. [MCP Server](#mcp-server)
27
+ 19. [Common Use Cases](#common-use-cases)
28
+ 20. [Tips and Tricks](#tips-and-tricks)
29
+ 21. [Troubleshooting](#troubleshooting)
30
+ 22. [FAQ](#faq)
30
31
 
31
32
  ## Introduction
32
33
 
@@ -77,7 +78,7 @@ pt version
77
78
 
78
79
  You should see output like:
79
80
  ```
80
- PrimeThink CLI v1.6.0
81
+ PrimeThink CLI v1.7.0
81
82
  ```
82
83
 
83
84
  ## Getting Started
@@ -1338,6 +1339,82 @@ pt live-app test ./my-live-app --chat-id "$(cat ./my-live-app/.chat-id)"
1338
1339
 
1339
1340
  Automated UI testing of a Live App is not part of the CLI. It is a deterministic, plan-driven workflow provided by the `primethink-developer` skill (`pt install-developer-skill`): the skill captures the running app's accessibility snapshot, authors a reviewable `tests/test_plan.yaml`, runs it with a bundled Playwright runner without an LLM in the execution loop, reads the structured results, and heals failing selectors before re-running.
1340
1341
 
1342
+ ## Suite Packages
1343
+
1344
+ A **suite package** (`.ptsuite`) installs a complete working set in one step: Live Apps,
1345
+ tasks with their schedules, the agents they run on, DB and document collections, tags,
1346
+ and a workspace with its shared rules and the chats to open. It is a folder with a
1347
+ `manifest.json` — shipped as that folder, zipped as a `.ptsuite` file, or kept in a
1348
+ GitHub repository.
1349
+
1350
+ ### Look before you install
1351
+
1352
+ ```bash
1353
+ pt suite inspect ./primethink.gtm-1.0.0.ptsuite
1354
+ ```
1355
+
1356
+ `inspect` shows the name and description in your language, what the package needs
1357
+ (capabilities, agent types, a minimum CLI version, settings such as `SERPER_API_KEY`), its
1358
+ install parameters, and everything it contains.
1359
+
1360
+ ### Install
1361
+
1362
+ Always plan first — a dry run only reads from PrimeThink:
1363
+
1364
+ ```bash
1365
+ pt suite install ./primethink.gtm-1.0.0.ptsuite --params gtm.params.json --model openai:gpt-5.4 --dry-run
1366
+ pt suite install ./primethink.gtm-1.0.0.ptsuite --params gtm.params.json --model openai:gpt-5.4 --yes
1367
+ ```
1368
+
1369
+ The plan lists every resource as *create*, *update* or *ok*. A **BLOCKED** line (a missing
1370
+ capability or required setting, a CLI too old) means nothing will be written; the message
1371
+ says how to fix it. `--model` is the model for agents the package does not pin
1372
+ (`pt models list --only-configured`).
1373
+
1374
+ Parameters come from the package (`inspect` lists them), as a JSON file (`--params`) or one
1375
+ at a time (`--param key=value`, where the value may be JSON).
1376
+
1377
+ ### Upgrade and re-run
1378
+
1379
+ Installing again is safe and is how you upgrade: the installer finds what it created
1380
+ (even from another machine), updates it in place and adds what is new. It never deletes a
1381
+ collection, never removes a capability from an agent, and never overwrites a reference
1382
+ row you have edited (seed rows are insert-only). After a daylight-saving change, run it
1383
+ again with `--reschedule` — PrimeThink stores schedules in UTC.
1384
+
1385
+ ### Sources and the catalog
1386
+
1387
+ ```bash
1388
+ pt suite install github:primethink-ai/primethink-catalog/suites/gtm@gtm@1.0.0
1389
+ pt suite catalog list --catalog github:primethink-ai/primethink-catalog
1390
+ pt suite catalog search "sales" --kind suite
1391
+ pt suite install gtm@1.0.0 # by name, through the catalog
1392
+ ```
1393
+
1394
+ For a private repository set `GITHUB_TOKEN`; it is sent only to GitHub.
1395
+
1396
+ ### Make your own
1397
+
1398
+ ```bash
1399
+ pt suite export --task-id 81 --task-id 82 -o ./my-suite --id acme.onboarding
1400
+ # add ./my-suite/icon.png (a PNG), review the files, then:
1401
+ pt suite build ./my-suite
1402
+ ```
1403
+
1404
+ `build` hashes every file into the manifest and zips it. `validate` refuses scripts,
1405
+ secrets, environment ids, and files that changed after the build. `pt suite catalog build
1406
+ DIR` indexes a folder of packages into `catalog.json`.
1407
+
1408
+ ### Remove
1409
+
1410
+ ```bash
1411
+ pt suite uninstall primethink.gtm --dry-run
1412
+ pt suite uninstall primethink.gtm --yes
1413
+ ```
1414
+
1415
+ Only what the install created is removed. Collections (your data) and chats stay unless
1416
+ you pass `--delete-data` / `--delete-chats`.
1417
+
1341
1418
  ## MCP Server
1342
1419
 
1343
1420
  Core API management operations can also be exposed over the [Model Context
@@ -60,7 +60,7 @@ resolve on 3.8. The `dev` extra installs the plugin's test dependencies only on
60
60
 
61
61
  ```bash
62
62
  # In the API image (production): one pinned line in requirements.txt
63
- primethink-cli[agent-tools]==1.6.0
63
+ primethink-cli[agent-tools]==1.7.0
64
64
 
65
65
  # From a checkout (dev): the dev extra already includes langchain-core
66
66
  pip install -e ".[dev]"
@@ -1,6 +1,6 @@
1
1
  # PrimeThink CLI — Command Reference
2
2
 
3
- Complete reference for every command in the PrimeThink CLI (`pt`), version 1.6.0.
3
+ Complete reference for every command in the PrimeThink CLI (`pt`), version 1.7.0.
4
4
 
5
5
  Commands are organized into noun groups: `profile`, `live-app`, `chat`, `collection`, `agent`, `task`, `search`, and `image`.
6
6
 
@@ -17,6 +17,14 @@ Commands are organized into noun groups: `profile`, `live-app`, `chat`, `collect
17
17
  - [`pt live-app new`](#pt-live-app-new)
18
18
  - [`pt live-app publish`](#pt-live-app-publish)
19
19
  - [`pt live-app test`](#pt-live-app-test)
20
+ - [Suite packages: `pt suite`](#suite-packages-pt-suite)
21
+ - [`pt suite build`](#pt-suite-build)
22
+ - [`pt suite validate`](#pt-suite-validate)
23
+ - [`pt suite inspect`](#pt-suite-inspect)
24
+ - [`pt suite install`](#pt-suite-install)
25
+ - [`pt suite uninstall`](#pt-suite-uninstall)
26
+ - [`pt suite export`](#pt-suite-export)
27
+ - [`pt suite catalog`](#pt-suite-catalog)
20
28
  - [Profiles: `pt profile`](#profiles-pt-profile)
21
29
  - [`pt profile add`](#pt-profile-add)
22
30
  - [`pt profile use`](#pt-profile-use)
@@ -221,7 +229,7 @@ Display the CLI version.
221
229
 
222
230
  ```bash
223
231
  pt version
224
- # PrimeThink CLI v1.6.0
232
+ # PrimeThink CLI v1.7.0
225
233
  ```
226
234
 
227
235
  ### `pt whoami`
@@ -507,6 +515,181 @@ iterating on. The status check alone would miss a run that exits `0` without pri
507
515
 
508
516
  ---
509
517
 
518
+ ## Suite packages: `pt suite`
519
+
520
+ A **suite package** bundles Live Apps, tasks, agents, custom capabilities, collections,
521
+ tags and a workspace into one declarative package — a folder with `manifest.json` at its
522
+ root, that folder zipped as a **`.ptsuite`** file, or the same folder in a GitHub
523
+ repository. Resources reference each other by package **key**, never by id; the installer
524
+ maps keys to ids in the target environment. Nothing in a package is executed on the
525
+ installing machine. Design: `docs/superpowers/specs/2026-09-28-ptsuite-package-design.md`.
526
+
527
+ ```bash
528
+ pt suite build DIR [-o FILE] [--no-zip]
529
+ pt suite validate SOURCE [--catalog C]
530
+ pt suite inspect SOURCE [--catalog C] [--json] [--help-text]
531
+ pt suite install SOURCE [--params FILE] [--param k=v ...] [--dry-run] [--yes]
532
+ [--agent-type NAME|ID] [--model M] [--reschedule] [--catalog C]
533
+ pt suite uninstall SUITE_ID [--delete-data] [--delete-chats] [--dry-run] [--yes]
534
+ pt suite export --task-id ID [--task-id ID ...] -o DIR [--id ID] [--version V]
535
+ pt suite catalog build DIR [--refresh]
536
+ pt suite catalog list [--catalog C] [--kind suite|app|task|agent] [--tag T] [--json]
537
+ pt suite catalog search TEXT [--catalog C] [--kind K] [--json]
538
+ ```
539
+
540
+ **`SOURCE`** is any of: a package folder; a `.ptsuite` file;
541
+ `github:owner/repo[/path][@ref]` (the ref may itself contain `@`, e.g.
542
+ `github:primethink-ai/primethink-catalog/suites/gtm@gtm@1.0.0`); or a catalog name
543
+ `name[@version]`, resolved through `--catalog` / `$PT_CATALOG` / the default
544
+ `github:primethink-ai/primethink-catalog`. Public repositories download from
545
+ `codeload.github.com`. With `GITHUB_TOKEN` set, the download goes to `api.github.com`
546
+ with the token, and GitHub's redirect to codeload drops it — the token is never sent
547
+ anywhere else.
548
+
549
+ ### Package layout
550
+
551
+ ```
552
+ manifest.json format, kind (suite|app|task|agent), id, version (semver), name, description
553
+ (a string or a language map with "en"), icon (PNG), help, help_url,
554
+ languages, tags, requires {cli, capabilities, agent_types, models},
555
+ prerequisites {settings[{name, scope, required, description}], permissions,
556
+ notes}, params, contents[{path, sha256, bytes}]
557
+ params.schema.json install parameters (JSON Schema subset: type, properties, required, items,
558
+ enum, pattern, minItems, default)
559
+ tags.json [{key, name, model: task|agent|capability|collection}]
560
+ capabilities/<key>.json custom api/mcp capabilities {name, code, type, access_type, options, …}
561
+ agents/<key>.json {name, public_description, description|description_file, type, model,
562
+ access_type, capabilities: [code | "@capabilities/<key>"], collections, tags}
563
+ collections/<key>.json {name, type: db|collection|skill|external_source, description, schema,
564
+ seed {entity: file.jsonl}, files, for_each, attach_to, tags}
565
+ apps/<key>/app.json task fields + {agent, extra_agents, evaluator_agent, collections, tags,
566
+ goal_file, initial_prompt_file, image, dist, schedule}
567
+ apps/<key>/dist/… the flat build uploaded to @app
568
+ tasks/<key>/task.json as app.json, without dist; schedule {nl, prompt_file|prompt, timezone}
569
+ workspace.json {name, goal|goal_file, memories|memories_file, chats[{key, app|task, name,
570
+ for_each, in_workspace, collections, only_collections, invite}]}
571
+ ```
572
+
573
+ - **Templates** — a collection or chat with `for_each: "<param>"` is expanded once per
574
+ item of that array parameter; `{field}` placeholders in `name`/`invite` come from the
575
+ item. `attach_to: ["apps/<key>", …]` attaches every instance to those apps/tasks.
576
+ - **`invite`** — emails, `{field}` from the item, or `@params.<name>` (a list parameter).
577
+ - **`only_collections: true`** on a chat detaches any collection not listed for it (an
578
+ introducer's Portal chat carries only its own collection).
579
+ - `requires.models` is informational (not checked).
580
+
581
+ ### `pt suite build`
582
+
583
+ Recomputes `manifest.contents` (SHA-256 and size of every file), validates, and writes a
584
+ deterministic zip (sorted entries, fixed timestamps: the same folder always produces the
585
+ same bytes). Final line: `Built FILE (N files, B bytes, sha256 …)`. `--no-zip` only
586
+ refreshes contents and validates (`Valid: id version`).
587
+
588
+ ### `pt suite validate`
589
+
590
+ Checks the manifest (format, kind, id, semver, name/description, the icon is a real PNG),
591
+ every file against `contents` (no unlisted, missing or modified file), every reference
592
+ (agents, collections, capabilities, tags, templates, chats), the apps' `dist` is flat with
593
+ `index.html`, images match their extension, seed rows carry a unique `seed_key`, no
594
+ environment ids (`virtual_assistant_id` …) appear, **no script or executable files**, and
595
+ **no secret-shaped strings** (API keys, tokens, private keys). A prerequisite setting that
596
+ carries a value is an error. Exit 1 on any error.
597
+
598
+ ### `pt suite inspect`
599
+
600
+ Name, description, requirements, prerequisites, parameters and contents, in the user's
601
+ language (`PT_LANG`, else `LANG`). `--json` prints the manifest (without `contents`), the
602
+ resource list, the parameter schema, errors and warnings. `--help-text` prints the
603
+ package's `HELP.md`.
604
+
605
+ ### `pt suite install`
606
+
607
+ Plans first, then applies (after a confirmation, or with `--yes`). `--dry-run` prints the
608
+ plan and sends **only reads** (GETs, plus `chatdb/list` to compare seed rows).
609
+
610
+ 1. **Prerequisites** — `requires.cli` (`>=X.Y.Z`), capability codes, agent types, and
611
+ required settings (checked by name at group/user scope; a missing one prints the exact
612
+ `pt settings set NAME <value> --scope group`). Any blocker stops the install before a write.
613
+ 2. **Tags** — created if missing, plus one `suite:<id>` tag per model used.
614
+ 3. **Capabilities** (custom) — created, or updated by code.
615
+ 4. **Agents** — found by provenance / name, else created with the type (`type`, else
616
+ `--agent-type`) and model (`model`, else `--model`). Capabilities are the **union** of
617
+ what the agent has and what the package wants: `PATCH` replaces the set, so the
618
+ installer never drops one.
619
+ 5. **Collections** — found by exact name (a different type is a blocker), else created;
620
+ `files` uploaded if missing.
621
+ 6. **Apps and tasks** — created or PATCHed with their fields; apps' `dist` synced into
622
+ `@app` (identical files are left unchanged) and a Production version created; the image
623
+ is uploaded on create.
624
+ 7. **Attachments** — collections on tasks (`POST /tasks/{id}/collections-files`) and RAG
625
+ collections on agents.
626
+ 8. **Workspace** — created or its goal updated; missing `workspace_constitution` memories added.
627
+ 9. **Chats** — each launched from its task (`POST /chats?copy_from_task_id=…`) into the
628
+ workspace unless `in_workspace: false`; collections attached; members invited (users
629
+ already in the chat are skipped).
630
+ 10. **Seed** — through the first chat that carries the collection. **Insert-only**: a row
631
+ whose `seed_key` exists is never updated or deleted.
632
+ 11. **Schedules** — a scheduled job in each chat of a task with a `schedule` (created, or
633
+ updated when its `nl` changed or with `--reschedule`, e.g. after a clock change).
634
+
635
+ Every created task and agent records `extra.ptsuite = {id, version, key}`, and every
636
+ resource gets the `suite:<id>` tag, so a re-install finds its resources **without** the
637
+ local lock file (a Deep1 sandbox loses its files). The lock file
638
+ `.ptsuite/<api host>/<id>.lock.json` (key → id, what this install created) is a cache and
639
+ the input to `uninstall`. Final line:
640
+ `Installed ID VERSION: N apps, N tasks, N agents, N collections, N chats`.
641
+
642
+ ### `pt suite uninstall`
643
+
644
+ Removes what the install **created** (from its lock file): scheduled jobs, apps, tasks,
645
+ agents and custom capabilities. Resources it found and updated are left alone.
646
+ Collections stay unless `--delete-data` (their rows remain server-side), chats unless
647
+ `--delete-chats`.
648
+
649
+ ### `pt suite export`
650
+
651
+ Turns live tasks/Live Apps into a package folder: each task becomes `apps/<key>` (page type
652
+ html; its `@app` files are downloaded into `dist/`) or `tasks/<key>`, its agents become
653
+ `agents/<key>.json` (+ description), custom api/mcp capabilities become
654
+ `capabilities/<key>.json` (review them for secrets), attached collections become
655
+ descriptors (no rows or files), tags become `tags.json`. Ids become keys. Add `icon.png`,
656
+ review, then `pt suite build`.
657
+
658
+ ### `pt suite catalog`
659
+
660
+ A catalog is a folder or GitHub repo of packages with a generated `catalog.json`.
661
+ `catalog build DIR` validates every package under DIR and writes the index (id, kind,
662
+ version, path, name, description, icon, tags, languages, requires, counts, and the
663
+ SHA-256 of each package's canonical zip — `install NAME` refuses a package that no longer
664
+ matches it). `--refresh` recomputes each package's contents first. `list` and `search`
665
+ read a catalog (every search word must match id, name, description or tags).
666
+ Versions are git tags `<slug>@<version>`: `pt suite install gtm@1.2.0` fetches
667
+ `github:<catalog>/<path>@gtm@1.2.0`.
668
+
669
+ | Step | Endpoint |
670
+ |---|---|
671
+ | capabilities | `GET /api/v1/virtual-assistants/capabilities?page=&page_size=` (all pages), `POST`/`PATCH …/capabilities/{id}` |
672
+ | agent types | `GET /api/v1/virtual-assistants/types` |
673
+ | settings | `GET /api/v1/groups/current/settings`, `GET /api/v1/users/me/settings` |
674
+ | tags | `GET /api/v1/tags?model=`, `POST /api/v1/tags`, `PUT /api/v1/tags/assignments` |
675
+ | agents | `GET /api/v1/virtual-assistants?search=`, `GET/PATCH /api/v1/virtual-assistants/{id}`, `POST /api/v1/virtual-assistants`, `POST …/{id}/collections/attach` |
676
+ | collections | `GET /api/v1/collections?search=`, `POST /api/v1/collections`, `GET …/{id}/directories`, `POST …/{id}/documents` |
677
+ | apps/tasks | `GET /api/v1/tasks/?search=&status=all`, `POST /api/v1/tasks/`, `GET/PATCH /api/v1/tasks/{id}`, `POST …/image`, `@app` sync (as `pt live-app publish`), `POST …/versions`, `POST …/collections-files` |
678
+ | workspace | `GET/POST /api/v1/chat-workspaces`, `PUT …/{id}/goal`, `GET/POST /api/v1/memories?workspace_id=` |
679
+ | chats | `POST /api/v1/chats?copy_from_task_id=`, `GET /api/v1/chats?search=`, `GET/POST …/{id}/collections[/{cid}]`, `DELETE …/{id}/collections`, `GET …/{id}/users`, `POST …/{id}/members`, `GET /api/v1/users/me/visible-users` |
680
+ | seed | `POST /api/v1/chats/{id}/chatdb/list`, `POST /api/v1/chats/{id}/chatdb/entities` (with `collection_id`) |
681
+ | schedules | `GET /api/v1/scheduled_jobs/scheduled_jobs_in_chat/{chat}`, `POST/PUT /api/v1/scheduled_jobs/scheduled_job_in_chat[/{id}]` |
682
+
683
+ ```bash
684
+ pt suite build ./gtm-suite/package/gtm -o primethink.gtm-1.0.0.ptsuite
685
+ pt suite inspect primethink.gtm-1.0.0.ptsuite
686
+ pt suite install primethink.gtm-1.0.0.ptsuite --params gtm.params.json --model openai:gpt-5.4 --dry-run
687
+ pt suite install primethink.gtm-1.0.0.ptsuite --params gtm.params.json --model openai:gpt-5.4 --yes
688
+ pt suite catalog list --catalog github:primethink-ai/primethink-catalog --kind app
689
+ ```
690
+
691
+ ---
692
+
510
693
  ## Profiles: `pt profile`
511
694
 
512
695
  Profiles let you store multiple API tokens (e.g. for different accounts or environments) and switch between them.