@superglue/cli 1.1.219 → 1.1.221

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.
@@ -229,12 +229,12 @@ sg project label create --project <projectId> --name "Blocked" --color "#ef4444"
229
229
  sg project task edit --project <projectId> --id <taskId> --labels blocked
230
230
  ```
231
231
 
232
- - `sg project task list` returns tasks in board order with each task's `position`. Add `--full` for descriptions and attachments.
232
+ - `sg project task list` returns tasks in board order with each task's `position`. Add `--full` for descriptions.
233
233
  - A new task, or a status change without `--position`, goes to the end of its column. Other edits keep the order.
234
234
  - `sg project task edit` changes only the given fields. `--clear-due-date`, `--unassign`, and `--clear-labels` clear those fields.
235
235
  - Labels belong to one project. `--labels` takes comma-separated label IDs from `sg project label list` and replaces the task's labels. `sg project task list --label <ids>` returns tasks with any of those labels.
236
236
  - `sg project label create` derives the label ID from the name; without `--color` it picks the first unused palette color. `sg project label edit` renames or recolors a label and keeps its ID. `sg project label delete` removes the label from every task; the agent module cannot delete labels.
237
- - `--resource-refs` replaces the attachment list. Task attachments also join the project.
237
+ - Tasks have no attachments. Name the files a task needs in its description; files link to projects only.
238
238
  - Tasks cannot be deleted from the CLI. Archived projects reject task writes.
239
239
 
240
240
  ---
@@ -385,16 +385,16 @@ Attach files with repeatable `--file key=path`. Reference in payloads with `file
385
385
 
386
386
  **Request step fields** (HTTP, Postgres, MSSQL, Redis, MongoDB, FTP/SFTP, SMB) — see protocol-specific references for full details:
387
387
 
388
- | Field | Type | Description |
389
- | ------------- | ------ | ------------------------------------------------------------------------ |
390
- | `type` | string | `"request"` (default, can be omitted) |
391
- | `systemId` | string | Optional. Links system credentials for `<<systemId_credKey>>` resolution |
392
- | `url` | string | Full URL with `<<variable>>` placeholders. Required. |
393
- | `method` | string | HTTP method (HTTP only) |
394
- | `headers` | object | HTTP headers with credential placeholders (HTTP only) |
395
- | `queryParams` | object | URL query parameters (HTTP only) |
396
- | `body` | string | Request body / DB query / Redis command / file operation |
397
- | `pagination` | object | Auto-pagination config (HTTP only, see `sg skill http`) |
388
+ | Field | Type | Description |
389
+ | ------------- | ------ | ------------------------------------------------------------------ |
390
+ | `type` | string | `"request"` (default, can be omitted) |
391
+ | `systemId` | string | Optional. Resolves connection secrets as `<<systemId_secretName>>` |
392
+ | `url` | string | Full URL with `<<variable>>` placeholders. Required. |
393
+ | `method` | string | HTTP method (HTTP only) |
394
+ | `headers` | object | HTTP headers with credential placeholders (HTTP only) |
395
+ | `queryParams` | object | URL query parameters (HTTP only) |
396
+ | `body` | string | Request body / DB query / Redis command / file operation |
397
+ | `pagination` | object | Auto-pagination config (HTTP only, see `sg skill http`) |
398
398
 
399
399
  **Transform step fields:**
400
400
 
@@ -423,8 +423,8 @@ All step config fields (url, headers, body, queryParams) support `<<expression>>
423
423
  <<userId>> payload inputs
424
424
  <<currentItem>> whole current loop item
425
425
  <<page>> <<offset>> <<cursor>> <<limit>> <<pageSize>> pagination variables
426
- <<systemId_api_key>> system credentials (namespaced: systemId_credKey)
427
- <<systemId_url>> system base URLs (namespaced: systemId_url)
426
+ <<systemId_api_key>> connection secrets (namespaced: systemId_secretName)
427
+ <<systemId_url>> connection base URLs (namespaced: systemId_url)
428
428
  <<sg_auth_email>> email of the user triggering this run (in scheduled runs: the schedule creator)
429
429
  <<sg_auth_jwt>> short-lived signed JWT proving the identity of the user triggering this run; receivers verify it against superglue's outbound JWKS endpoint (/api/auth/outbound-jwks on the web app origin)
430
430
  ```
@@ -485,7 +485,7 @@ sourceData = {
485
485
  - State gives at-least-once execution with progress tracking, never exactly-once: crashes, concurrent-run conflicts, and state resets all cause re-processing, which re-executes side effects. Steps that write to external systems MUST be replay-safe — upsert by a stable external id or pass an idempotency key — or duplicates will land in the target system.
486
486
  - Keep set-valued keys bounded (e.g. keep only the most recent ~1,000 ids): an unbounded set eventually exceeds the 64KB value limit, which rejects the tool's entire state write on every run.
487
487
  - Never copy credential values into state — state is stored unencrypted and readable by anyone with read access to the tool.
488
- - Inspect current state via `sg tool state get <toolId>` (values matching known system credentials are masked); reset it via `sg tool state reset <toolId>`. A reset wins over in-flight runs: their updates to pre-reset keys are discarded as conflicts; only keys they newly add are kept.
488
+ - Inspect current state via `sg tool state get <toolId>` (values matching known connection secrets are masked); reset it via `sg tool state reset <toolId>`. A reset wins over in-flight runs: their updates to pre-reset keys are discarded as conflicts; only keys they newly add are kept.
489
489
  - Set state deliberately via `sg tool state set <toolId> --state '<json>'` (or `--state-file`) — a full replace, subject to the same key and size limits. To test warm-state behavior without touching real state, pass `--state-fixture '<json>'` (or `--state-fixture-file`) to `sg tool run`: it seeds `sourceData.persistedState` for that run and the run never saves state changes. Side effects still execute, including `tool:` chain webhooks — a chained tool runs for real against its own real state.
490
490
 
491
491
  ### Naming Rules — Avoiding Key Collisions
@@ -495,7 +495,7 @@ Everything in `sourceData` shares ONE flat namespace. Saving a tool rejects payl
495
495
  - `__files__`, `currentItem`, `persistedState`, `sg_auth_email`, `sg_auth_jwt` — injected by the runtime
496
496
  - `page`, `offset`, `cursor`, `limit`, `pageSize` — rejected only when the tool has a paginated step, because they would shadow the live pagination counters; on non-paginated tools they are allowed but discouraged (a later edit that adds pagination will force a rename)
497
497
  - the tool's own step ids — the step result overwrites a same-named payload key
498
- - anything starting with `<systemId>_` for a system the tool uses — the entire prefix is reserved for namespaced credentials (`<systemId>_<credKey>`, `<systemId>_url`), even names that don't match an existing credential, because credentials added to the system later would silently shadow the input
498
+ - anything starting with `<systemId>_` for a system the tool uses — the entire prefix is reserved for namespaced secrets (`<systemId>_<secretName>`, `<systemId>_url`), even names that don't match an existing secret, because secrets added to a connection later would silently shadow the input
499
499
 
500
500
  Safe naming: payload inputs get specific, domain-flavored names (`customerId`, `reportMonth`, `maxResults` — prefer `maxResults` over `limit` even on non-paginated tools, and never prefix an input with a referenced system's id); step ids are verb-prefixed camelCase (`fetchUsers`) and distinct from every payload key. If the user asks for an input named like a reserved key, use a safe alternative and explain why.
501
501
 
@@ -1,13 +1,13 @@
1
1
  # Access Rules (RBAC)
2
2
 
3
- On superglue, roles define active resource grants for tools, credentials, playbooks, artifacts, files, and projects. Systems are not a resource: a system id is a plain string on connections and tool steps. Users can have multiple roles. Roles and access rules are only available on enterprise organizations.
3
+ On superglue, roles define active resource grants for tools, credentials, playbooks, files, and projects. Files include uploads and agent-written HTML documents and spreadsheets. Systems are not a resource: a system id is a plain string on connections and tool steps. Users can have multiple roles. Roles and access rules are only available on enterprise organizations.
4
4
 
5
5
  ## Data Model
6
6
 
7
7
  ```typescript
8
8
  interface ResourceGrant {
9
9
  roleId: string;
10
- resourceRef: "<kind>:<encodedId>" | "<kind>:*"; // kind: tool | credential | playbook | artifact | file | project
10
+ resourceRef: "<kind>:<encodedId>" | "<kind>:*"; // kind: tool | credential | playbook | file | project
11
11
  permissions: Array<"viewer" | "editor">;
12
12
  source: "access_rule" | "ownership" | "share" | "project"; // project: computed from project access, never stored
13
13
  grantedByUserId?: string;
@@ -83,13 +83,13 @@ Users can also have additional custom roles on top of their base role. Custom ro
83
83
  Personal roles are per-user containers for ownership and user-targeted share grants.
84
84
 
85
85
  - Each user can have at most one personal role.
86
- - Ownership grants are added automatically when a user creates a tool, connection, playbook, artifact, file, or project.
86
+ - Ownership grants are added automatically when a user creates a tool, connection, playbook, file, or project.
87
87
  - Personal role grants are unioned with the user's other roles.
88
88
  - Ordinary role edits preserve personal roles and their ownership/share grants.
89
89
 
90
90
  ## Sharing Semantics
91
91
 
92
- Sharing supports saved tools, connections, projects, playbooks, artifacts, and files.
92
+ Sharing supports saved tools, connections, projects, playbooks, and files.
93
93
 
94
94
  - Targets are organization users or roles. The admin role and personal roles cannot be role targets.
95
95
  - User-targeted shares live on personal roles; role-targeted shares live on the selected role.
@@ -99,7 +99,7 @@ Sharing supports saved tools, connections, projects, playbooks, artifacts, and f
99
99
  - Recipients can remove their own direct share, including connection shares, without editor access.
100
100
  - Sharing a tool shares only the tool. The recipient still needs a connection for every system id it references.
101
101
  - Sharing playbooks does not cascade to their tools or connections.
102
- - Access to a project gives the same access (viewer or editor) to every resource attached to it. Removing the resource from the project, removing the project access, or archiving the project removes that access. Anyone with access to a project, including viewers, can attach a resource they can share. Project editors and people who can share a resource can remove it from the project.
102
+ - Access to a project gives the same access (viewer or editor) to every file and tool linked to it. Removing the file or tool from the project, removing the project access, or archiving the project removes that access. Anyone with access to a project, including viewers, can link a file or tool they can share. Project editors and people who can share a file or tool can remove it from the project. Playbooks and connections are never shared through projects.
103
103
 
104
104
  ## Auto-Grant On Resource Creation
105
105
 
@@ -26,7 +26,7 @@ GraphQL APIs use HTTP POST under the hood. This skill covers the GraphQL-specifi
26
26
  | `method` | yes | Always `POST` |
27
27
  | `headers` | yes | Must include `Content-Type: application/json` and auth |
28
28
  | `body` | yes | JSON string with `query` and optional `variables` |
29
- | `systemId` | no | Links system credentials and URL |
29
+ | `systemId` | no | Resolves connection secrets and URL |
30
30
 
31
31
  ### Body Format
32
32
 
@@ -27,7 +27,7 @@ All fields support `<<variable>>` and `<<(sourceData) => ...>>` expressions.
27
27
  | `queryParams` | no | Key-value pairs appended to URL |
28
28
  | `body` | no | Stripped for GET/HEAD/DELETE/OPTIONS |
29
29
  | `pagination` | no | See Pagination section |
30
- | `systemId` | no | Links system credentials and URL. Omit for public APIs |
30
+ | `systemId` | no | Resolves connection secrets and URL. Omit for public APIs |
31
31
 
32
32
  For APIs that require the same query key multiple times, use an array value:
33
33
  `{ metadataHeaders: ["From", "Subject"] }` -> `?metadataHeaders=From&metadataHeaders=Subject`.
@@ -19,11 +19,11 @@ Configure the connection URL based on the selected credential's secrets — use
19
19
 
20
20
  ### Fields
21
21
 
22
- | Field | Required | Notes |
23
- | ---------- | -------- | -------------------------------------------------------------- |
24
- | `url` | yes | Connection string with `<<credential>>` placeholders |
25
- | `body` | yes | JSON: single operation object or array of operations |
26
- | `systemId` | no | Links system credentials for `<<systemId_credKey>>` resolution |
22
+ | Field | Required | Notes |
23
+ | ---------- | -------- | -------------------------------------------------------- |
24
+ | `url` | yes | Connection string with `<<credential>>` placeholders |
25
+ | `body` | yes | JSON: single operation object or array of operations |
26
+ | `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
27
27
 
28
28
  ### URL Format
29
29
 
@@ -21,11 +21,11 @@ Configure the connection URL based on the selected connection's secrets — use
21
21
 
22
22
  ### Fields
23
23
 
24
- | Field | Required | Notes |
25
- | ---------- | -------- | -------------------------------------------------------------- |
26
- | `url` | yes | Connection string with `<<credential>>` placeholders |
27
- | `body` | yes | JSON string with `query` and optional `params` |
28
- | `systemId` | no | Links system credentials for `<<systemId_credKey>>` resolution |
24
+ | Field | Required | Notes |
25
+ | ---------- | -------- | -------------------------------------------------------- |
26
+ | `url` | yes | Connection string with `<<credential>>` placeholders |
27
+ | `body` | yes | JSON string with `query` and optional `params` |
28
+ | `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
29
29
 
30
30
  ### URL Format
31
31
 
@@ -19,11 +19,11 @@ Configure the connection URL based on the selected credential's secrets — use
19
19
 
20
20
  ### Fields
21
21
 
22
- | Field | Required | Notes |
23
- | ---------- | -------- | -------------------------------------------------------------- |
24
- | `url` | yes | Connection string with `<<credential>>` placeholders |
25
- | `body` | yes | JSON string with `query` and optional `params` |
26
- | `systemId` | no | Links system credentials for `<<systemId_credKey>>` resolution |
22
+ | Field | Required | Notes |
23
+ | ---------- | -------- | -------------------------------------------------------- |
24
+ | `url` | yes | Connection string with `<<credential>>` placeholders |
25
+ | `body` | yes | JSON string with `query` and optional `params` |
26
+ | `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
27
27
 
28
28
  ### URL Format
29
29
 
@@ -19,11 +19,11 @@ Configure the connection URL based on the selected credential's secrets — use
19
19
 
20
20
  ### Fields
21
21
 
22
- | Field | Required | Notes |
23
- | ---------- | -------- | -------------------------------------------------------------- |
24
- | `url` | yes | Connection string with `<<credential>>` placeholders |
25
- | `body` | yes | JSON string with `query` and optional `params` |
26
- | `systemId` | no | Links system credentials for `<<systemId_credKey>>` resolution |
22
+ | Field | Required | Notes |
23
+ | ---------- | -------- | -------------------------------------------------------- |
24
+ | `url` | yes | Connection string with `<<credential>>` placeholders |
25
+ | `body` | yes | JSON string with `query` and optional `params` |
26
+ | `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
27
27
 
28
28
  ### URL Format
29
29
 
@@ -19,11 +19,11 @@ Configure the connection URL based on the selected credential's secrets — use
19
19
 
20
20
  ### Fields
21
21
 
22
- | Field | Required | Notes |
23
- | ---------- | -------- | -------------------------------------------------------------- |
24
- | `url` | yes | Connection string with `<<credential>>` placeholders |
25
- | `body` | yes | JSON: single command object or array for pipeline |
26
- | `systemId` | no | Links system credentials for `<<systemId_credKey>>` resolution |
22
+ | Field | Required | Notes |
23
+ | ---------- | -------- | -------------------------------------------------------- |
24
+ | `url` | yes | Connection string with `<<credential>>` placeholders |
25
+ | `body` | yes | JSON: single command object or array for pipeline |
26
+ | `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
27
27
 
28
28
  ### URL Format
29
29
 
@@ -21,11 +21,11 @@ Configure the connection URL based on the selected connection's secrets — use
21
21
 
22
22
  ### Fields
23
23
 
24
- | Field | Required | Notes |
25
- | ---------- | -------- | -------------------------------------------------------------- |
26
- | `url` | yes | Connection string with `<<credential>>` placeholders |
27
- | `body` | yes | JSON: single operation object or array for batch |
28
- | `systemId` | no | Links system credentials for `<<systemId_credKey>>` resolution |
24
+ | Field | Required | Notes |
25
+ | ---------- | -------- | -------------------------------------------------------- |
26
+ | `url` | yes | Connection string with `<<credential>>` placeholders |
27
+ | `body` | yes | JSON: single operation object or array for batch |
28
+ | `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
29
29
 
30
30
  ### URL Formats
31
31
 
@@ -76,16 +76,12 @@ If a customer's system requires IP allowlisting for firewall rules, security gro
76
76
 
77
77
  Use this section as the source of truth for high-level web app navigation. Do not invent UI locations that are not listed here.
78
78
 
79
- Brain contains context-source setup, playbooks, artifacts, and files. Capabilities contains tools, connections, MCP servers, and schedules; tools are project-attachable, the others configure execution. A system is only the system ID that groups connections and tool steps. Projects are managed separately and group selected context and capabilities. People with project access get the same access to its attached resources.
79
+ Brain contains context-source setup, project folders, playbooks, and files. Files include uploads and the artifacts and spreadsheets that agents write; a file can belong to several projects. Capabilities contains tools, connections, MCP servers, and schedules; tools can be linked to projects, the others configure execution. A system is only the system ID that groups connections and tool steps. Projects are managed separately; a project links brain files and tools, and people with project access get the same access to them; playbooks are org-wide.
80
80
 
81
81
  The persistent left sidebar contains these top-level items:
82
82
 
83
- - The project switcher and session list — always visible at the top. The project switcher selects one project or **All projects**. The selection sets which sessions the list shows, whether the right panel shows a project plan, and which project new sessions start in. With a project selected, the list shows only that project's sessions. With **All projects**, the list shows all sessions, each labeled with its project, and new sessions start at the organization level without a project. Choosing an item in the switcher starts a new session there. The switcher footer has **New project**, which starts agent-assisted project planning; with a project selected, it also opens the project page, pins or unpins the project, and archives it. **New session** starts a session in the selected project. When a project is selected and the user opens a session from another project, the selection changes to that project. `/` opens a new session in the selected project; saved sessions open `/agents/{sessionId}`. Archived projects and their sessions are hidden. A briefing run appears here after the user opens it from the briefing email or **View last briefing**.
84
- - **Brain** — expandable group for context and focused work:
85
- - **Setup** (`/brain`) — context-source connections that use only the current user's personal credentials.
86
- - **Playbooks** (`/playbooks`, detail at `/playbooks/{playbookId}`) — reusable guidance for recurring work. Built-in and custom playbooks share one grid; built-ins are labeled and can be duplicated.
87
- - **Artifacts** (`/artifacts`, detail at `/artifacts/{artifactId}`) — interactive outputs.
88
- - **Files** (`/files`) — uploaded source material.
83
+ - The project switcher and session list — always visible at the top. The switcher selects one project or **All projects**, which scopes the session list and new sessions; `/` starts a session and `/agents/{sessionId}` opens a saved one. New projects are planned with the agent.
84
+ - **Brain** (`/brain`) — a file drive: the managed **Documentation** (system documentation and scraped pages) and **Playbooks** folders, one folder per project (`/brain/projects/{projectId}`), and files in no project. Files open at `/brain/files/{fileId}` and playbooks at `/brain/playbooks/{playbookId}`. Users upload files and drag them onto project folders to link them. **Setup** (`/brain/setup`) connects context sources with the user's own credentials.
89
85
  - **Capabilities** — expandable group for connected and executable resources:
90
86
  - **Tools** (`/tools`, detail at `/tools/{toolId}`) — saved tools; opens the tool playground for editing, testing, and running.
91
87
  - **Connections** (`/connections`, detail at `/connections/{connectionId}`) — connections to external services, grouped by system id, with secret status per connection; yours and the ones shared with you. A system ID is a namespace derived from existing connections; no system record is created. API keys are not managed here.
@@ -99,11 +95,11 @@ The persistent left sidebar contains these top-level items:
99
95
  - **API Keys** (`/api-keys`) — API key management.
100
96
  - **Settings** (`/settings`) — appearance and agent memory notes for every user; organization settings for admins.
101
97
 
102
- The right panel's **Project plan** tab shows the selected project's tasks; with a project selected, `/projects` opens it. **New project** in the project switcher starts agent-assisted project planning; projects are created only through the agent. Project detail pages (`/projects/{projectId}`) have **Tasks**, **Resources**, and **Sessions** tabs. **Tasks** filters by label and assignee; each project has its own task labels. Projects support sharing, archive, and deletion; people with project access get the same access to its attached resources.
98
+ The right panel's **Project plan** tab shows the selected project's tasks; with a project selected, `/projects` opens it. **New project** in the project switcher starts agent-assisted project planning; projects are created only through the agent. A project's page is its Brain folder (`/brain/projects/{projectId}`), with **Files** (the default) and **Tasks** tabs. **Tasks** filters by label and assignee; each project has its own task labels. Projects support sharing, archive, and deletion; people with project access get the same access to its linked files.
103
99
 
104
100
  Below the navigation, the sidebar shows the current organization menu. Opening it shows the signed-in user's name and email, lists the user's organizations and pending invitations, and contains **Sign Out**. Selecting an organization switches to it.
105
101
 
106
- After onboarding, while no context source is connected, a banner at the top of every page except Brain offers to connect email. **Set up** opens **Brain > Setup** (`/brain`), and the close button hides the banner for 7 days in that browser.
102
+ While a brain setup step is open, a banner at the top of **Brain** links to **Brain > Setup** (`/brain/setup`), and the close button hides it for 7 days in that browser.
107
103
 
108
104
  When cloud billing is enabled, Trial organizations see **Upgrade Plan** in the sidebar, which opens a 15-minute call booking page. The app shows no pricing. For Pro and Team organizations, admins see **Manage Plan** in the organization menu, which opens the Stripe portal. Enterprise organizations see neither. Do not quote prices. For pricing questions, point users to **Upgrade Plan** to book a call. There is no separate Billing page.
109
105
 
@@ -113,7 +109,7 @@ When cloud billing is enabled, Trial organizations see **Upgrade Plan** in the s
113
109
 
114
110
  - **Appearance** — light, dark, or system theme.
115
111
  - **Organization** — organization name.
116
- - **Design system** (`/settings/design-system`) — the brand every artifact follows: colors, fonts, logos, guidelines, HTML, Word, and PowerPoint templates, reference documents, and an import from the company website.
112
+ - **Design system** (`/settings/design-system`) — the brand every document follows: colors, fonts, logos, guidelines, HTML, Word, and PowerPoint templates, reference documents, and an import from the company website.
117
113
  - **Run settings** — run preferences: draft/single-step run visibility, run result storage, member run visibility, and delete-all-runs.
118
114
  - **Notifications** — run-alert channels for Slack and email (on failure, success, completion, or daily/weekly summaries). Slack setup opens `/settings/notifications/slack`; email setup opens `/settings/notifications/email`.
119
115
  - **Agent memory** (`/settings#settings-memory`) — every user adds, edits, and deletes their personal and organization memory notes; admins also turn agent memory on or off.
@@ -128,7 +124,7 @@ When cloud billing is enabled, Trial organizations see **Upgrade Plan** in the s
128
124
  1. **Validate** tool structure (id, steps array, URLs on request steps)
129
125
  2. **For each step in order:**
130
126
  a. Build aggregated data: `{ ...originalPayload, ...previousStepResults }`
131
- b. Resolve system credentials (refresh OAuth if needed), namespace as `systemId_key`
127
+ b. Resolve connection secrets (refresh OAuth if needed), namespace as `systemId_secretName`
132
128
  c. Run `dataSelector` → object means single execution, array means loop
133
129
  d. For each item: merge `currentItem` into input and execute
134
130
  e. Wrap result: `{ currentItem, data, success }`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superglue/cli",
3
- "version": "1.1.219",
3
+ "version": "1.1.221",
4
4
  "bin": {
5
5
  "sg": "./dist/cli.js"
6
6
  },
@@ -229,12 +229,12 @@ sg project label create --project <projectId> --name "Blocked" --color "#ef4444"
229
229
  sg project task edit --project <projectId> --id <taskId> --labels blocked
230
230
  ```
231
231
 
232
- - `sg project task list` returns tasks in board order with each task's `position`. Add `--full` for descriptions and attachments.
232
+ - `sg project task list` returns tasks in board order with each task's `position`. Add `--full` for descriptions.
233
233
  - A new task, or a status change without `--position`, goes to the end of its column. Other edits keep the order.
234
234
  - `sg project task edit` changes only the given fields. `--clear-due-date`, `--unassign`, and `--clear-labels` clear those fields.
235
235
  - Labels belong to one project. `--labels` takes comma-separated label IDs from `sg project label list` and replaces the task's labels. `sg project task list --label <ids>` returns tasks with any of those labels.
236
236
  - `sg project label create` derives the label ID from the name; without `--color` it picks the first unused palette color. `sg project label edit` renames or recolors a label and keeps its ID. `sg project label delete` removes the label from every task; the agent module cannot delete labels.
237
- - `--resource-refs` replaces the attachment list. Task attachments also join the project.
237
+ - Tasks have no attachments. Name the files a task needs in its description; files link to projects only.
238
238
  - Tasks cannot be deleted from the CLI. Archived projects reject task writes.
239
239
 
240
240
  ---
@@ -385,16 +385,16 @@ Attach files with repeatable `--file key=path`. Reference in payloads with `file
385
385
 
386
386
  **Request step fields** (HTTP, Postgres, MSSQL, Redis, MongoDB, FTP/SFTP, SMB) — see protocol-specific references for full details:
387
387
 
388
- | Field | Type | Description |
389
- | ------------- | ------ | ------------------------------------------------------------------------ |
390
- | `type` | string | `"request"` (default, can be omitted) |
391
- | `systemId` | string | Optional. Links system credentials for `<<systemId_credKey>>` resolution |
392
- | `url` | string | Full URL with `<<variable>>` placeholders. Required. |
393
- | `method` | string | HTTP method (HTTP only) |
394
- | `headers` | object | HTTP headers with credential placeholders (HTTP only) |
395
- | `queryParams` | object | URL query parameters (HTTP only) |
396
- | `body` | string | Request body / DB query / Redis command / file operation |
397
- | `pagination` | object | Auto-pagination config (HTTP only, see `sg skill http`) |
388
+ | Field | Type | Description |
389
+ | ------------- | ------ | ------------------------------------------------------------------ |
390
+ | `type` | string | `"request"` (default, can be omitted) |
391
+ | `systemId` | string | Optional. Resolves connection secrets as `<<systemId_secretName>>` |
392
+ | `url` | string | Full URL with `<<variable>>` placeholders. Required. |
393
+ | `method` | string | HTTP method (HTTP only) |
394
+ | `headers` | object | HTTP headers with credential placeholders (HTTP only) |
395
+ | `queryParams` | object | URL query parameters (HTTP only) |
396
+ | `body` | string | Request body / DB query / Redis command / file operation |
397
+ | `pagination` | object | Auto-pagination config (HTTP only, see `sg skill http`) |
398
398
 
399
399
  **Transform step fields:**
400
400
 
@@ -423,8 +423,8 @@ All step config fields (url, headers, body, queryParams) support `<<expression>>
423
423
  <<userId>> payload inputs
424
424
  <<currentItem>> whole current loop item
425
425
  <<page>> <<offset>> <<cursor>> <<limit>> <<pageSize>> pagination variables
426
- <<systemId_api_key>> system credentials (namespaced: systemId_credKey)
427
- <<systemId_url>> system base URLs (namespaced: systemId_url)
426
+ <<systemId_api_key>> connection secrets (namespaced: systemId_secretName)
427
+ <<systemId_url>> connection base URLs (namespaced: systemId_url)
428
428
  <<sg_auth_email>> email of the user triggering this run (in scheduled runs: the schedule creator)
429
429
  <<sg_auth_jwt>> short-lived signed JWT proving the identity of the user triggering this run; receivers verify it against superglue's outbound JWKS endpoint (/api/auth/outbound-jwks on the web app origin)
430
430
  ```
@@ -485,7 +485,7 @@ sourceData = {
485
485
  - State gives at-least-once execution with progress tracking, never exactly-once: crashes, concurrent-run conflicts, and state resets all cause re-processing, which re-executes side effects. Steps that write to external systems MUST be replay-safe — upsert by a stable external id or pass an idempotency key — or duplicates will land in the target system.
486
486
  - Keep set-valued keys bounded (e.g. keep only the most recent ~1,000 ids): an unbounded set eventually exceeds the 64KB value limit, which rejects the tool's entire state write on every run.
487
487
  - Never copy credential values into state — state is stored unencrypted and readable by anyone with read access to the tool.
488
- - Inspect current state via `sg tool state get <toolId>` (values matching known system credentials are masked); reset it via `sg tool state reset <toolId>`. A reset wins over in-flight runs: their updates to pre-reset keys are discarded as conflicts; only keys they newly add are kept.
488
+ - Inspect current state via `sg tool state get <toolId>` (values matching known connection secrets are masked); reset it via `sg tool state reset <toolId>`. A reset wins over in-flight runs: their updates to pre-reset keys are discarded as conflicts; only keys they newly add are kept.
489
489
  - Set state deliberately via `sg tool state set <toolId> --state '<json>'` (or `--state-file`) — a full replace, subject to the same key and size limits. To test warm-state behavior without touching real state, pass `--state-fixture '<json>'` (or `--state-fixture-file`) to `sg tool run`: it seeds `sourceData.persistedState` for that run and the run never saves state changes. Side effects still execute, including `tool:` chain webhooks — a chained tool runs for real against its own real state.
490
490
 
491
491
  ### Naming Rules — Avoiding Key Collisions
@@ -495,7 +495,7 @@ Everything in `sourceData` shares ONE flat namespace. Saving a tool rejects payl
495
495
  - `__files__`, `currentItem`, `persistedState`, `sg_auth_email`, `sg_auth_jwt` — injected by the runtime
496
496
  - `page`, `offset`, `cursor`, `limit`, `pageSize` — rejected only when the tool has a paginated step, because they would shadow the live pagination counters; on non-paginated tools they are allowed but discouraged (a later edit that adds pagination will force a rename)
497
497
  - the tool's own step ids — the step result overwrites a same-named payload key
498
- - anything starting with `<systemId>_` for a system the tool uses — the entire prefix is reserved for namespaced credentials (`<systemId>_<credKey>`, `<systemId>_url`), even names that don't match an existing credential, because credentials added to the system later would silently shadow the input
498
+ - anything starting with `<systemId>_` for a system the tool uses — the entire prefix is reserved for namespaced secrets (`<systemId>_<secretName>`, `<systemId>_url`), even names that don't match an existing secret, because secrets added to a connection later would silently shadow the input
499
499
 
500
500
  Safe naming: payload inputs get specific, domain-flavored names (`customerId`, `reportMonth`, `maxResults` — prefer `maxResults` over `limit` even on non-paginated tools, and never prefix an input with a referenced system's id); step ids are verb-prefixed camelCase (`fetchUsers`) and distinct from every payload key. If the user asks for an input named like a reserved key, use a safe alternative and explain why.
501
501
 
@@ -1,13 +1,13 @@
1
1
  # Access Rules (RBAC)
2
2
 
3
- On superglue, roles define active resource grants for tools, credentials, playbooks, artifacts, files, and projects. Systems are not a resource: a system id is a plain string on connections and tool steps. Users can have multiple roles. Roles and access rules are only available on enterprise organizations.
3
+ On superglue, roles define active resource grants for tools, credentials, playbooks, files, and projects. Files include uploads and agent-written HTML documents and spreadsheets. Systems are not a resource: a system id is a plain string on connections and tool steps. Users can have multiple roles. Roles and access rules are only available on enterprise organizations.
4
4
 
5
5
  ## Data Model
6
6
 
7
7
  ```typescript
8
8
  interface ResourceGrant {
9
9
  roleId: string;
10
- resourceRef: "<kind>:<encodedId>" | "<kind>:*"; // kind: tool | credential | playbook | artifact | file | project
10
+ resourceRef: "<kind>:<encodedId>" | "<kind>:*"; // kind: tool | credential | playbook | file | project
11
11
  permissions: Array<"viewer" | "editor">;
12
12
  source: "access_rule" | "ownership" | "share" | "project"; // project: computed from project access, never stored
13
13
  grantedByUserId?: string;
@@ -83,13 +83,13 @@ Users can also have additional custom roles on top of their base role. Custom ro
83
83
  Personal roles are per-user containers for ownership and user-targeted share grants.
84
84
 
85
85
  - Each user can have at most one personal role.
86
- - Ownership grants are added automatically when a user creates a tool, connection, playbook, artifact, file, or project.
86
+ - Ownership grants are added automatically when a user creates a tool, connection, playbook, file, or project.
87
87
  - Personal role grants are unioned with the user's other roles.
88
88
  - Ordinary role edits preserve personal roles and their ownership/share grants.
89
89
 
90
90
  ## Sharing Semantics
91
91
 
92
- Sharing supports saved tools, connections, projects, playbooks, artifacts, and files.
92
+ Sharing supports saved tools, connections, projects, playbooks, and files.
93
93
 
94
94
  - Targets are organization users or roles. The admin role and personal roles cannot be role targets.
95
95
  - User-targeted shares live on personal roles; role-targeted shares live on the selected role.
@@ -99,7 +99,7 @@ Sharing supports saved tools, connections, projects, playbooks, artifacts, and f
99
99
  - Recipients can remove their own direct share, including connection shares, without editor access.
100
100
  - Sharing a tool shares only the tool. The recipient still needs a connection for every system id it references.
101
101
  - Sharing playbooks does not cascade to their tools or connections.
102
- - Access to a project gives the same access (viewer or editor) to every resource attached to it. Removing the resource from the project, removing the project access, or archiving the project removes that access. Anyone with access to a project, including viewers, can attach a resource they can share. Project editors and people who can share a resource can remove it from the project.
102
+ - Access to a project gives the same access (viewer or editor) to every file and tool linked to it. Removing the file or tool from the project, removing the project access, or archiving the project removes that access. Anyone with access to a project, including viewers, can link a file or tool they can share. Project editors and people who can share a file or tool can remove it from the project. Playbooks and connections are never shared through projects.
103
103
 
104
104
  ## Auto-Grant On Resource Creation
105
105
 
@@ -26,7 +26,7 @@ GraphQL APIs use HTTP POST under the hood. This skill covers the GraphQL-specifi
26
26
  | `method` | yes | Always `POST` |
27
27
  | `headers` | yes | Must include `Content-Type: application/json` and auth |
28
28
  | `body` | yes | JSON string with `query` and optional `variables` |
29
- | `systemId` | no | Links system credentials and URL |
29
+ | `systemId` | no | Resolves connection secrets and URL |
30
30
 
31
31
  ### Body Format
32
32
 
@@ -27,7 +27,7 @@ All fields support `<<variable>>` and `<<(sourceData) => ...>>` expressions.
27
27
  | `queryParams` | no | Key-value pairs appended to URL |
28
28
  | `body` | no | Stripped for GET/HEAD/DELETE/OPTIONS |
29
29
  | `pagination` | no | See Pagination section |
30
- | `systemId` | no | Links system credentials and URL. Omit for public APIs |
30
+ | `systemId` | no | Resolves connection secrets and URL. Omit for public APIs |
31
31
 
32
32
  For APIs that require the same query key multiple times, use an array value:
33
33
  `{ metadataHeaders: ["From", "Subject"] }` -> `?metadataHeaders=From&metadataHeaders=Subject`.
@@ -19,11 +19,11 @@ Configure the connection URL based on the selected credential's secrets — use
19
19
 
20
20
  ### Fields
21
21
 
22
- | Field | Required | Notes |
23
- | ---------- | -------- | -------------------------------------------------------------- |
24
- | `url` | yes | Connection string with `<<credential>>` placeholders |
25
- | `body` | yes | JSON: single operation object or array of operations |
26
- | `systemId` | no | Links system credentials for `<<systemId_credKey>>` resolution |
22
+ | Field | Required | Notes |
23
+ | ---------- | -------- | -------------------------------------------------------- |
24
+ | `url` | yes | Connection string with `<<credential>>` placeholders |
25
+ | `body` | yes | JSON: single operation object or array of operations |
26
+ | `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
27
27
 
28
28
  ### URL Format
29
29
 
@@ -21,11 +21,11 @@ Configure the connection URL based on the selected connection's secrets — use
21
21
 
22
22
  ### Fields
23
23
 
24
- | Field | Required | Notes |
25
- | ---------- | -------- | -------------------------------------------------------------- |
26
- | `url` | yes | Connection string with `<<credential>>` placeholders |
27
- | `body` | yes | JSON string with `query` and optional `params` |
28
- | `systemId` | no | Links system credentials for `<<systemId_credKey>>` resolution |
24
+ | Field | Required | Notes |
25
+ | ---------- | -------- | -------------------------------------------------------- |
26
+ | `url` | yes | Connection string with `<<credential>>` placeholders |
27
+ | `body` | yes | JSON string with `query` and optional `params` |
28
+ | `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
29
29
 
30
30
  ### URL Format
31
31
 
@@ -19,11 +19,11 @@ Configure the connection URL based on the selected credential's secrets — use
19
19
 
20
20
  ### Fields
21
21
 
22
- | Field | Required | Notes |
23
- | ---------- | -------- | -------------------------------------------------------------- |
24
- | `url` | yes | Connection string with `<<credential>>` placeholders |
25
- | `body` | yes | JSON string with `query` and optional `params` |
26
- | `systemId` | no | Links system credentials for `<<systemId_credKey>>` resolution |
22
+ | Field | Required | Notes |
23
+ | ---------- | -------- | -------------------------------------------------------- |
24
+ | `url` | yes | Connection string with `<<credential>>` placeholders |
25
+ | `body` | yes | JSON string with `query` and optional `params` |
26
+ | `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
27
27
 
28
28
  ### URL Format
29
29
 
@@ -19,11 +19,11 @@ Configure the connection URL based on the selected credential's secrets — use
19
19
 
20
20
  ### Fields
21
21
 
22
- | Field | Required | Notes |
23
- | ---------- | -------- | -------------------------------------------------------------- |
24
- | `url` | yes | Connection string with `<<credential>>` placeholders |
25
- | `body` | yes | JSON string with `query` and optional `params` |
26
- | `systemId` | no | Links system credentials for `<<systemId_credKey>>` resolution |
22
+ | Field | Required | Notes |
23
+ | ---------- | -------- | -------------------------------------------------------- |
24
+ | `url` | yes | Connection string with `<<credential>>` placeholders |
25
+ | `body` | yes | JSON string with `query` and optional `params` |
26
+ | `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
27
27
 
28
28
  ### URL Format
29
29
 
@@ -19,11 +19,11 @@ Configure the connection URL based on the selected credential's secrets — use
19
19
 
20
20
  ### Fields
21
21
 
22
- | Field | Required | Notes |
23
- | ---------- | -------- | -------------------------------------------------------------- |
24
- | `url` | yes | Connection string with `<<credential>>` placeholders |
25
- | `body` | yes | JSON: single command object or array for pipeline |
26
- | `systemId` | no | Links system credentials for `<<systemId_credKey>>` resolution |
22
+ | Field | Required | Notes |
23
+ | ---------- | -------- | -------------------------------------------------------- |
24
+ | `url` | yes | Connection string with `<<credential>>` placeholders |
25
+ | `body` | yes | JSON: single command object or array for pipeline |
26
+ | `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
27
27
 
28
28
  ### URL Format
29
29
 
@@ -21,11 +21,11 @@ Configure the connection URL based on the selected connection's secrets — use
21
21
 
22
22
  ### Fields
23
23
 
24
- | Field | Required | Notes |
25
- | ---------- | -------- | -------------------------------------------------------------- |
26
- | `url` | yes | Connection string with `<<credential>>` placeholders |
27
- | `body` | yes | JSON: single operation object or array for batch |
28
- | `systemId` | no | Links system credentials for `<<systemId_credKey>>` resolution |
24
+ | Field | Required | Notes |
25
+ | ---------- | -------- | -------------------------------------------------------- |
26
+ | `url` | yes | Connection string with `<<credential>>` placeholders |
27
+ | `body` | yes | JSON: single operation object or array for batch |
28
+ | `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
29
29
 
30
30
  ### URL Formats
31
31