skills/superglue/SKILL.md
Build, test, deploy and integrate superglue tools via the sg CLI and superglue SDKs. IMPORTANT — you MUST invoke this skill and read the full reference BEFORE running ANY sg command or writing ANY superglue SDK/REST/webhook integration code. Before using the sg CLI, first check that it is installed (run sg --version; if not found, install with npm install -g @superglue/cli), then verify it is configured (check that sg init has been run or that SUPERGLUE_API_KEY and SUPERGLUE_API_ENDPOINT environment variables are set). If not, guide the user through setup first. After reading SKILL.md, also run `sg skill <topic>` for the specific protocols and topics involved.
npx skillsauth add superglue-ai/cli superglueInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
sg) — Agent ReferenceThis file is the entry point for operating superglue via the sg CLI. It covers setup, tool building, tool editing, system management, running tools, and deployment via SDK/REST/webhooks.
For protocol-specific details (HTTP, databases, Redis, file servers, GraphQL), file handling, access rules, SDK integration, and general superglue information, run sg skill <topic> (linked throughout and listed at the bottom).
Read these on demand — they are authoritative for their topic and kept in sync with the web agent's skill references.
| sg skill command | When to read |
| ------------------------- | ---------------------------------------------------------------------------------------------------- |
| sg skill superglue-info | Company info, interfaces (SDK, REST API, MCP, Web), web UI layout, execution pipeline, internals |
| sg skill integration | Deploying tools — SDK (TS/Python) usage, REST API calls, webhook triggers, retry patterns |
| sg skill http | HTTP step configuration, auth patterns, file uploads, response handling, pagination, error detection |
| sg skill graphql | GraphQL step config, schema introspection, error recovery |
| sg skill postgres | PostgreSQL connection URLs, SSL/TLS handling, schema introspection, parameterized queries |
| sg skill mssql | MSSQL / Azure SQL connection URLs, schema introspection, parameterized queries |
| sg skill odbc | ODBC connections (SAP ASE / Sybase via FreeTDS), driver config, positional ? params |
| sg skill redis | Redis command syntax, connection URLs, key type handling |
| sg skill sftp-smb | SFTP, FTP, and SMB operations, file upload/download semantics, path handling |
| sg skill file-handling | File detection, parsing, file:: reference syntax, lazy base64 access, transform-produced files |
| sg skill access-rules | RBAC roles, resource grants, and tool/system permissions (enterprise only) |
Pre-requisites for using the CLI
sg --version. If it fails with command not found, install: npm install -g @superglue/cli.sg update to update the CLI. For the SDK, run npm install @superglue/client@latest (JS) or pip install --upgrade superglue-client (Python).sg system list. If it fails with fetch failed or auth errors, the CLI needs configuration via sg init (see Setup below). For custom/self-hosted instances, the CLI must know both the instance API endpoint and an org-scoped API key.Calling systems and running tools
sg system find before calling system endpoints and before building tools.sg system search-docs for a targeted keyword search of system docs when unsure how a system works.Authentication & Credentials
<<systemId_credentialKey>> (e.g. "Authorization": "Bearer <<my_api_access_token>>").postgres://<<sys_user>>:<<sys_pass>>@host/db).Saving tools
sg tool save --draft <id> only after the user approves.Non-interactive environments (AI agents, CI)
--credentials '{"api_key":"sk-xxx"}'. Ask the user for secret values, then include them in the JSON.npm install -g @superglue/cli
After installation the sg command is available globally.
The CLI will not work until configured with an API key. The endpoint defaults to https://api.superglue.cloud.
Interactive (humans):
sg init
Prompts for: API key (required — get one at https://app.superglue.cloud/admin?view=api-keys), API endpoint, web endpoint (for OAuth callbacks), output mode (stdout or stdout+file), and config location (project-local .superglue/config.json vs global ~/.superglue/config.json). Verifies the connection before saving.
Non-interactive (CI, agents):
sg init --api-key "your-api-key" --global
sg init --api-key "your-api-key" --endpoint "https://custom.endpoint.com" --global
--api-key and --endpoint are global flags and work on all subcommands.
Environment variables (no config file):
export SUPERGLUE_API_KEY="your-api-key"
export SUPERGLUE_API_ENDPOINT="https://api.superglue.cloud" # optional, this is the default
Config resolution order: CLI flags > environment variables > local .superglue/config.json > global ~/.superglue/config.json.
Verify with sg system list — should return a list (possibly empty) without errors.
Set during sg init or via SUPERGLUE_CLI_PRESET env var. Stored in config.json as "preset".
| Preset | Description |
| --------- | -------------------------------------------------------------------------------- |
| runner | Run saved tools by ID only. Read-only lookups. No building/editing |
| builder | Runner + build/edit/save tools, call systems, manage MCP servers. No system CRUD |
| admin | Full access (default) |
Blocked commands print a clear error showing the current preset and how to change it.
| Flag | Description |
| ------------------ | ------------------------------------------- |
| --table | Human-readable table output (default: JSON) |
| --full | Disable truncation of large fields |
| --api-key <key> | Override API key |
| --endpoint <url> | Override API endpoint |
sg skill <topic> based on the systems involved (http, postgres, graphql, etc.)sg system find for every involved system — note storedCredentials and the system URLsg system search-docs for each system — look up endpoints, auth patterns, pagination, response structuresg system call to test 1-2 primary endpoints — verify response structure and field names before buildingsg tool build --config '{...}' with the full tool config (see Reference → Tool Config Schema)sg tool run --draft <draftId>. Use --include-step-results to inspect raw step datasg tool edit --draft <draftId> --patches '[...]' (see Reference → Tool Editing)sg tool save --draft <draftId>sg tool find --id <toolId> or sg tool find <query> to locate the tool and inspect its current config.data correctly in downstream codesg tool edit --tool <toolId> --patches '[...]' (or --draft <draftId> for drafts)sg system find <query>sg system create --name "..." --url "..." --credentials '{...}'. Prefer --template <id> when one exists — it auto-fills URL and OAuth configsg system oauth --system-id <id> [--scopes "..."] opens a browser flow. User approves → tokens saved automaticallysg system credentials set --system-id <id> --credentials '{...}'sg system callsg system edit --id <id> with the fields to changesg tool run --tool <toolId> --payload '{"userId":"123"}'
sg tool run --draft <draftId> --payload-file payload.json
Streams live execution logs to the terminal. Use --include-step-results for raw per-step responses and --include-config for the full config dump.
Named MCP servers expose a selected set of saved tools through an MCP endpoint. The CLI always uses the configured superglue API endpoint, so it works for Cloud and self-hosted instances when SUPERGLUE_API_ENDPOINT or --endpoint points at the right API.
sg system list or sg mcp listsg tool list or sg tool find <query>sg mcp create --name sales-tools --tool get_customer --tool create_invoice
server.connection.endpoint and clientConfig in the MCP client.sg mcp edit --id <serverId> --add-tool another_tool
sg mcp edit --id <serverId> --tools get_customer,create_invoice
Auth modes:
oauth (default): OAuth-capable MCP clients authenticate users through the MCP auth flow.creator_api_key: private/headless clients must send Authorization: Bearer <SUPERGLUE_API_KEY> where the key is active and assigned to the MCP server creator.If sg mcp ... returns "MCP server management is not available", the target instance or plan does not support named MCP server management. The default all-tools MCP endpoint may still be usable at <api-endpoint>/mcp.
Agents familiar with the web tool names can map them directly to CLI commands:
| Web agent tool | CLI command | Notes |
| ------------------------------------------------ | --------------------------------------------- | ------------------------------------------------------------------ |
| build_tool | sg tool build --config '{...}' | CLI is not AI-powered — you provide the full JSON config |
| edit_tool | sg tool edit --tool <id> --patches '[...]' | JSON Patch (RFC 6902). Use --draft <id> for drafts |
| run_tool | sg tool run --tool <id> / --draft <id> | Add --include-step-results to inspect per-step data |
| save_tool | sg tool save --draft <draftId> | Persists a draft to the database |
| run_command with vfs for /org/tools/ | sg tool find --id <id> / sg tool find <q> | Full config with --id, compact search with a query string |
| create_system | sg system create --name "..." --url "..." | Use --template <id> when available |
| edit_system | sg system edit --id <id> ... | Supports --env dev\|prod |
| run_command with vfs for /org/systems/ | sg system find <query> / --id <id> | Returns storedCredentials and system URL |
| Credentials VFS / user-owned credentials | sg system credentials get/set/clear | Manage current user's credentials for user-owned systems |
| call_system | sg system call --url "..." --system-id <id> | Authenticated ad-hoc calls for testing / schema introspection |
| run_command search | sg system search-docs --system-id <id> -k | Targeted keyword search over ingested system docs |
| authenticate_oauth | sg system oauth --system-id <id> [--scopes] | Opens browser flow. Supports --grant-type client_credentials too |
| run_command with vfs for /org/runs/ | sg run list / sg run get <runId> | Filter list by --tool, --status, --source, --limit |
| run_command with vfs for /org/mcp-servers/ | sg mcp list / sg mcp find --id <id> | Returns endpoint, auth mode, selected tool IDs, and client config |
| create_mcp_server | sg mcp create --name <n> --tool <id> | Creates a named MCP endpoint for selected saved tools |
| edit_mcp_server | sg mcp edit --id <id> ... | Edits name, auth mode, description, or selected tool IDs |
| (no direct equivalent) | sg init, sg update, sg skill | CLI-specific setup, updater, and this reference system |
Web-agent-only concepts with no CLI equivalent: run_command's virtual filesystem (CLI uses concrete sg subcommands), create_schedule/edit_schedule (manage schedules via web app or REST API), authenticate_oauth's dedicated MCP authenticate tool (CLI uses sg system oauth).
sg init — Interactive or non-interactive setup. Creates .superglue/ config. Flags: --api-key, --endpoint, --preset, --global.
Tool commands:
sg tool build --config '{"id":"...","steps":[...]}' # inline JSON
sg tool build --config tool.json # from file
sg tool build --id my-tool --instruction "..." --steps steps.json --payload '{...}'
sg tool run --draft <draftId> --payload '{"userId":"123"}'
sg tool run --tool my-tool --payload-file payload.json --include-step-results
sg tool edit --draft <draftId> --patches '[{"op":"replace","path":"/steps/0/config/url","value":"..."}]'
sg tool edit --tool my-tool --patches patches.json
sg tool save --draft <draftId>
sg tool list
sg tool find "shopify orders" # keyword search (compact results)
sg tool find --id my-tool # exact lookup (full config)
sg tool find --id my-tool --fields instruction,inputSchema # only selected top-level fields (token-efficient)
System commands:
sg system create --name "My API" --url https://api.example.com --credentials '{"api_key":"sk-xxx"}'
sg system create --name "Slack" --template slack
sg system edit --id my_api --credentials '{...}'
sg system list
sg system find slack
sg system find --id my_api --env dev
sg system credentials get --system-id my_api
sg system credentials set --system-id my_api --credentials '{"api_key":"sk-xxx"}'
sg system credentials clear --system-id my_api
sg system call --url https://api.example.com/users --system-id my_api --method GET \
--headers '{"Authorization":"Bearer <<my_api_access_token>>"}'
sg system search-docs --system-id slack -k "send message channels"
sg system oauth --system-id gmail --scopes "https://www.googleapis.com/auth/gmail.readonly"
sg system oauth --system-id my_api --grant-type client_credentials --scopes "read write"
MCP server commands:
sg mcp list
sg mcp find sales
sg mcp find --id <serverId>
sg mcp create --name sales-tools --tool get_customer --tool create_invoice
sg mcp create --name sales-tools --tools get_customer,create_invoice --auth-mode oauth
sg mcp edit --id <serverId> --add-tool another_tool
sg mcp edit --id <serverId> --remove-tool old_tool
sg mcp edit --id <serverId> --auth-mode creator_api_key
Run commands:
sg run list --tool my-tool --status failed --limit 20
sg run get <runId> --fetch-results
File attachments:
sg tool run --draft <id> --payload '{"data":"file::mysheet"}' --file mysheet=data.xlsx
Attach files with repeatable --file key=path. Reference in payloads with file::<key>. Auto-parsed to JSON where applicable. See sg skill file-handling for the full reference syntax including .raw, .base64, and .extracted suffixes.
{
"id": "kebab-case-tool-name",
"instruction": "Brief 1-2 sentence description of what this tool does and returns",
"steps": [
{
"id": "unique-step-id",
"config": {
"type": "request",
"systemId": "example_system",
"url": "<<example_system_url>>/endpoint?param=<<payload_field>>",
"method": "GET",
"headers": { "Authorization": "Bearer <<example_system_access_token>>" },
"queryParams": { "limit": "10" },
"body": "{ \"key\": \"<<payload_field>>\" }"
},
"dataSelector": "(sourceData) => sourceData.previousStep.data.items",
"failureBehavior": "fail",
"modify": false
}
],
"outputTransform": "(sourceData) => sourceData.stepId.data",
"outputSchema": { "type": "object", "properties": {} },
"inputSchema": { "type": "object", "properties": {} }
}
Request step fields (HTTP, Postgres, MSSQL, Redis, FTP/SFTP, SMB) — see protocol-specific references for full details:
| Field | Type | Description |
| ------------- | ------ | ------------------------------------------------------------------------ |
| type | string | "request" (default, can be omitted) |
| systemId | string | Optional. Links system credentials for <<systemId_credKey>> resolution |
| url | string | Full URL with <<variable>> placeholders. Required. |
| method | string | HTTP method (HTTP only) |
| headers | object | HTTP headers with credential placeholders (HTTP only) |
| queryParams | object | URL query parameters (HTTP only) |
| body | string | Request body / DB query / Redis command / file operation |
| pagination | object | Auto-pagination config (HTTP only, see sg skill http) |
Transform step fields:
| Field | Type | Description |
| --------------- | ------ | -------------------------------------------------- |
| type | string | "transform" — required for transform steps |
| transformCode | string | (sourceData) => transformedData — single-line JS |
Transform steps do NOT have systemId, url, method, headers, body, queryParams, or pagination.
Step behavior fields:
| Field | Type | Description |
| ----------------- | ------- | ---------------------------------------------------- |
| dataSelector | string | JS function controlling step input and loop mode |
| failureBehavior | string | fail (default) or continue |
| modify | boolean | Set true only when the step writes/updates/deletes |
<<>>)All step config fields (url, headers, body, queryParams) support <<expression>> placeholders.
Simple top-level keys — only these work without arrow functions:
<<userId>> payload inputs
<<currentItem>> whole current loop item
<<page>> <<offset>> <<cursor>> <<limit>> <<pageSize>> pagination variables
<<systemId_api_key>> system credentials (namespaced: systemId_credKey)
<<systemId_url>> system base URLs (namespaced: systemId_url)
<<sg_auth_email>> email of the authenticated user (NOT available in scheduled runs)
Simple <<varName>> only works for top-level keys. No dots, no nesting. <<currentItem.id>>, <<sourceData.userId>>, <<user.name>> all FAIL at runtime.
Arrow function expressions — for everything else:
<<(sourceData) => sourceData.currentItem.player_id>>
<<(sourceData) => sourceData.getUsers.data.map(u => u.id)>>
<<(sourceData) => JSON.stringify({ ids: sourceData.fetchUsers.data.map(u => u.id) })>>
Object/array return values are JSON.stringify'd automatically when spliced into strings.
sourceData is the cumulative state available to every JS expression, data selector, and transform:
sourceData = {
// Payload fields at ROOT level (NEVER use sourceData.payload.*)
userId: "123",
date: "2024-01-15",
// Previous step results, keyed by step ID
getUsers: { currentItem: {}, data: { users: [...] }, success: true }, // object selector
fetchDetails: [ // array selector
{ currentItem: "id1", data: { name: "Alice" }, success: true },
{ currentItem: "id2", data: { name: "Bob" }, success: true }
],
// Current loop item (only set inside a looping step's config)
currentItem: { id: 1 },
// Credentials (flattened, namespaced)
my_api_access_token: "...",
my_api_api_key: "..."
}
Everything in sourceData shares ONE flat namespace, and the runtime does not detect collisions — when two sources use the same key, one silently wins and the tool misbehaves with no error. Prevent collisions at design time:
Never use these as payload input keys or step ids:
__files__, currentItem, sg_auth_email — overwritten by the runtimepage, offset, cursor, limit, pageSize — a payload key with one of these names shadows the live pagination counters; paginated steps silently stop advancing past the first page<systemId>_<credKey>, <systemId>_url, and any runtime-supplied credential names) — the credential value silently replaces the payload valueSafe naming: payload inputs get specific, domain-flavored names (customerId, reportMonth, maxResults — never page, limit, cursor, data); 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.
Every step result is wrapped in { currentItem, data, success }. You MUST account for this when writing data selectors or transforms.
sourceData.stepId.datasourceData.stepId.map(i => i.data).data field: access via sourceData.stepId.data. Do NOT .map() over it — returns a single object if one result, array if multiple (unwrapped from single-element array).NEVER access step results without .data. sourceData.stepId.results hits the envelope, not the API response.
Control what a step receives as input and whether it loops:
| Return type | Behavior |
| ------------------ | ----------------------------------- |
| Single object | Step runs once with that object |
| Array | Step runs once per item (loop mode) |
| undefined/null | Step receives full sourceData |
In loop mode, sourceData.currentItem is set to the current array element. Empty arrays are valid — the step skips execution.
| Need | Use |
| ------------------------------------------- | ---------------------------------------------------------------------- |
| Reshape data for a SUBSEQUENT request step | Transform step (config.type: "transform") |
| Shape the final tool output | outputTransform (runs after all steps; slightly different signature) |
| Control input / looping for a step | dataSelector on the step |
| Inline data computation in URL/body/headers | <<(sourceData) => ...>> expressions |
outputTransform must be a single-line JS string (no literal newlines or tabs).
File output: To make files downloadable from the tool's API response, set outputFile: true on the step that produces the file. The outputTransform is for shaping JSON data only — it does not handle files. Libraries Papa (CSV), XLSX (Excel), and yaml (YAML) are available in all transforms. See sg skill file-handling for details. Use sg run download <runId> to download artifacts.
Complex request bodies — when a body needs data from multiple steps or aggregation, use a preceding transform step:
// Step: prepareBody (transform)
transformCode: "(sourceData) => { var items = sourceData.step1.data.results; return { data: items.filter(function(i) { return i.active; }), count: items.length }; }";
// Step: submitData (request)
body: "<<(sourceData) => JSON.stringify(sourceData.prepareBody.data)>>";
For each step in order:
sourceData: { ...originalPayload, ...previousStepResults, ...credentials }dataSelector(sourceData) → determines single vs loop executioncurrentItem into sourceData, resolve <<>> variables, execute step
.datatransformCode(sourceData), return value becomes .data{ currentItem, data, success } and store in sourceData[stepId]outputTransform(sourceData) to shape final outputAll user-provided JS runs in an isolated Deno sandbox.
Credentials are namespaced as <<systemId_credentialKey>> and resolved server-side at execution time. You MUST explicitly reference them:
System id="stripe", storedCredentials: api_key → "sk_proj****"
→ Available as: <<stripe_api_key>>
Auth header patterns:
{"Authorization": "Bearer <<stripe_api_key>>"}
{"Authorization": "Bearer <<gmail_access_token>>"}
{"X-API-Key": "<<my_api_api_key>>"}
{"Authorization": "Basic <<my_api_username>>:<<my_api_password>>"}
Basic auth auto-encodes: if the value after Basic isn't already base64, the engine encodes it.
System URL variables — use these instead of hardcoding base URLs. They switch automatically between dev/prod environments:
{ "url": "<<salesforce_url>>/services/data/v58.0/sobjects/Account" }
Credential lifecycle:
--credentials '{"api_key":"...","client_secret":"..."}' on create/editsg system credentials set --system-id <id> --credentials '{...}' to save credentials for the current API-key usersg system credentials get --system-id <id> to inspect current-user credential keys; values are masked unless --reveal is passedaccess_token, refresh_token) auto-refresh before each step executionclient_id, auth_url, token_url) are stored alongside secrets in the same --credentials JSONSystem IDs: lowercase letters, numbers, underscores only — no hyphens. Used for credential namespacing.
Templates: auto-populate endpoints and OAuth config. sg system find lists available templates.
client_id/client_secret needed): slack, salesforce, asana, notion, airtable, jira, confluenceCustom OAuth (no template): must include client_id, client_secret, auth_url, token_url in credentials at create time — or add later with sg system edit:
sg system create --name "My API" --url https://api.example.com \
--credentials '{"client_id":"...","client_secret":"...","auth_url":"https://example.com/oauth/authorize","token_url":"https://example.com/oauth/token"}'
Dev/Prod environments: --env dev|prod at creation (immutable afterward). Two systems with the same ID but different environments are automatically linked. Dev systems inherit documentation from their linked prod system. When creating a dev system, always ask for new credentials — never copy from prod.
System-specific instructions: systems may include specificInstructions from the user (visible in sg system find output). Follow them when present — they override general patterns.
sg tool edit applies RFC 6902 JSON Patch operations. Each operation:
{
op: "add" | "remove" | "replace" | "move" | "copy" | "test",
path: string, // JSON Pointer, e.g. "/steps/0/config/url"
value?: any, // required for add, replace, test
from?: string // required for move, copy
}
Key paths:
/instruction — tool description/steps/N — step at index N/steps/N/config/url, /steps/N/config/method, /steps/N/config/headers, etc./steps/N/dataSelector — JS function controlling input + loop mode/outputTransform — final output shaping function/outputSchema — optional JSON schema for outputOperations:
replace — Change an existing value. Path must exist — if the field is null or absent, replace fails. Prefer add when the field might be absent.add — Creates if missing, overwrites if present. Append to array with /steps/-.remove — Delete field or array element.move — Reorder or relocate.Validation:
id — tool IDs and draft IDs are immutableop and path required; path must start with /Downstream shape changes: if you change a step's output shape, check if later dataSelectors and outputTransform need updating. When removing array elements, subsequent indices shift down.
Drafts live in .superglue/drafts/<draftId>.json. Created by sg tool build, updated by sg tool edit, deleted by sg tool save. Ephemeral — not persisted across sessions.
After building and saving, tools can be invoked from code via REST API, SDK, or webhook. See sg skill integration for complete SDK (TypeScript/Python), REST API, and webhook examples including retry patterns.
IP whitelisting: if a customer's system requires IP whitelisting (firewall rules, security groups, etc.), superglue's outbound IPs are 34.234.12.178 and 18.198.191.215.
Quick reference:
# REST (sync)
curl -X POST "https://api.superglue.cloud/v1/tools/{toolId}/run" \
-H "Authorization: Bearer $SUPERGLUE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"inputs":{"userId":"123"}}'
# Webhook trigger (async, fire-and-forget)
curl -X POST "https://api.superglue.cloud/v1/hooks/{toolId}?token=$SUPERGLUE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"userId":"123"}'
sg system search-docs or sg system call firstsystemId in the wrong place — it belongs inside step.config.systemId, not on the step object<<(sourceData) => sourceData.payload.X>> — payload fields are at root level of sourceData, not under .payload<<currentItem.id>> — must use arrow function syntax: <<(sourceData) => sourceData.currentItem.id>><<page>>, <<offset>>, <<cursor>>, <<limit>><<systemId_url>>) for environment portabilityinstruction — never leave the tool-level instruction blankoutputSchema unsolicited — only add when the user explicitly requests a specific response structureoutputTransform — must be a single-line JS string (no literal newlines or tabs)/.../ literals and complex escapes corrupt during serialization. Use new RegExp(), .split(), or new URL() instead<<>> expressions<<>> expressions return a string via JSON.stringify(...), and use a single expression for the whole body rather than mixing <<>> with static JSONmodify: false. Don't rely on HTTP method alonesg tool run results and ask before sg tool savesg_auth_email in scheduled runs — not available in scheduler-triggered executions. Tools using <<sg_auth_email>> will failFor protocol-specific error recovery (HTTP, Postgres, MSSQL, Redis, GraphQL, SFTP/SMB), run sg skill <protocol>. General strategies below.
sg tool build returns a validation error. Read the message, fix the config, and re-run. Common causes: missing id, empty steps, missing url on request steps, missing transformCode on transform steps, systemId on the step object instead of step.config.systemId.
--include-step-results to see raw per-step responses and data fieldssg system call to test the failing endpoint directly — isolates step config vs system/auth issuessg system find --id <systemId> to verify storedCredentials keys match what the step referencessg skill http and follow the error recovery section (endpoint vs system isolation, credential scopes, rate limiting)sg skill postgres or sg skill mssql — SSL/TLS and schema issues are common causessg system search-docs and web search to verify the current API shape. APIs change across versionssg system find --id <systemId> → check storedCredentials for masked but present valuessg system oauth if tokens are missing or expiredclient_id, client_secret, auth_url, token_url are all present. Confirm the redirect URI is registered on the provider's OAuth appsg system edit to update insteadid uses only lowercase letters, numbers, and underscores (no hyphens)sg system find lists available templates).data directly) or an array selector (access via .map(i => i.data))--include-step-results to see the exact envelope shape.data field — do not .map() over themsourceData.currentItem is only referenced inside looping steps (set by the step's own dataSelector, not upstream)After 3-5 unsuccessful iterations on the same step, stop and ask the user for clarification or additional context (credentials, docs, expected payload shape). Don't keep guessing — gather evidence first.
tools
Build, test, deploy and integrate superglue tools via the sg CLI and superglue SDKs. IMPORTANT — you MUST invoke this skill and read the full reference BEFORE running ANY sg command or writing ANY superglue SDK/REST/webhook integration code. Before using the sg CLI, first check that it is installed (run sg --version; if not found, install with npm install -g @superglue/cli), then verify it is configured (check that sg init has been run or that SUPERGLUE_API_KEY and SUPERGLUE_API_ENDPOINT environment variables are set). If not, guide the user through setup first. After reading the SKILL.md file, also read the relevant references/ files for the specific topic (databases, file servers, transforms, integration/SDK).
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------