npx skills add ...
npx skills add celigo/ai --skill getting-started
Orientation for Celigo integrations -- core concepts, build order, account discovery, planning discipline, sandbox awareness, and which skill to use for each task. Start here when the task is unclear or the user is new to Celigo.
npx skills add celigo/ai --skill getting-started
Celigo integrations move data between external systems through a small set of resource types:
The three pipeline-carrying resources differ mainly in what starts them:
| Resource | Started by | Schedule/listeners | Runtime controls |
|---|---|---|---|
| Flow | Itself -- cron schedule, listener/webhook, or another flow chaining into it | Yes | Yes (proceedOnFailure, skipRetries, chaining, ...) |
| API | An external HTTP caller; the request IS the source record | No | No -- errors land on the fail response; retries are the caller's concern |
| Tool | A consumer -- flow step, AI agent, API, MCP server, or another tool | No | No -- the consumer decides error behavior |
"Every night at 2 AM" or "when a webhook fires" always points at a flow. "Reachable from outside Celigo over HTTP" points at an API. "Reusable from multiple places inside Celigo" points at a tool (and a recipe needed both inside and outside is a tool exposed behind an API).
Always build bottom-up. Resources reference each other, so dependencies must exist first:
Never start by creating a flow -- its exports and imports must exist first, and those require connections.
At each layer, match the connector to the target application -- raw HTTP is the fallback, not the default. Use the application-specific adaptor when one exists (NetSuite, Salesforce, databases, FTP/S3); otherwise check for a pre-built HTTP connector (550+ apps: celigo http-connectors list); hand-write HTTP config only when neither covers the target. See configuring-connections and the adaptor decision matrices in configuring-exports / configuring-imports.
For APIs and tools, the same principle applies: build the connections, exports, and imports that the API/tool will use, then wire them into the API/tool definition.
Skills in this pack show celigo ... CLI commands, but there are two equivalent ways to execute most operations:
list_<type> / upsert_<type> replace celigo <type> list|get|create|update, delete_resource replaces celigo <type> delete, and run_flow, cancel_job, list_jobs, list_flow_errors, list_execution_logs, deploy_template, and get_schema cover running, monitoring, deploying, and schema lookups. The MCP server also has tools with no CLI equivalent, such as search_knowledge_base and triage_flow_errors.A few operations are CLI-only (no MCP tool): the local account index (celigo account snapshot|search|dependencies|lint), API-token management (celigo accesstokens ...), stacks, on-premise agents, and user management. For those, use the CLI, the integrator.io REST API, or the UI.
The CLI accepts either token kind from Resources > API tokens as its bearer token: a personal access token (any user can generate one; inherits your own permissions; expires after 90 days by default) or an account API token (owner/admin-created, scopeable, long-lived -- prefer it for CI). See managing-api-tokens.
Which account the CLI targets. The CLI keeps one profile per account or environment (celigo profile list; each holds its own token). Every command resolves its profile as --profile > CELIGO_PROFILE > the machine-wide active profile that celigo profile use <name> selects. A person switching with profile use moves every session that did NOT pin a profile -- a session still passing --profile <name> keeps hitting <name>. An agent once carried a stale --profile for a day and wrote flows into another customer's account while the person believed their switch had moved it. Rules:
celigo profile whoami, and read the celigo: profile '<name>' → <host> line every write prints on stderr. If it names a profile other than the one the user means, stop and ask.--profile unless the user asked for that specific profile in this request. Work on the active profile. If a session must stay on one account, bind it once with export CELIGO_PROFILE=<name> rather than repeating the flag -- a repeated flag is how a stale value survives a switch.(pinned with --profile; the active profile is '<other>') on a stderr line is a stop sign (CLI 2026.9.2 and later, printed on reads too): the person switched profiles and your pin did not follow. Ask which account they mean before the next command. Under profile_pin_policy = strict the CLI refuses such a command outright -- do not run celigo profile use, change profile_pin_policy, or edit ~/.celigo/config.json to get past it; which account a machine targets is the person's decision, never the agent's.config set api_token or profile use in response to an error. Profile 'x' does not exist means the NAME is wrong, not the token; celigo profile list shows what exists -- pick from it, never guess a name.The account index is a local snapshot of all resources in your Celigo account. It enables fast search, dependency analysis, and linting without repeated API calls.
The index auto-refreshes when stale (default: 4 hours, configurable via CELIGO_INDEX_STALE_HOURS). Commands that depend on the index refresh it automatically unless --no-refresh is passed.
Before creating new resources, always check what already exists:
celigo account search "customer sync" -- find existing flows, exports, imports by keywordceligo account dependencies flow <id> -- see the full resource tree for an existing flowceligo account lint -- identify orphaned exports/imports you might reuseBefore writing any JSON or CLI commands, answer these questions:
What kind of operation is this?
celigo <type> set or celigo <type> get + edit + celigo <type> update. Don't rebuild the flowDesign checklist (when ambiguity exists):
proceedOnFailure, error notifications)sandbox: true flows only use sandbox: true connections)Celigo enforces strict separation:
sandbox: true connection can only be used by sandbox: true flowsWhen testing, always create flows with disabled: true and verify before enabling.
| Task | Skill | Key sections |
|---|---|---|
| Set up credentials for an external system | configuring-connections | Connection Type Decision Matrix, iClients |
| Fetch data from a system (export) | configuring-exports | Adaptor Decision Matrix, Export Execution Pipeline |
| Write data to a system (import) | configuring-imports | Adaptor Decision Matrix, Import Execution Pipeline |
| Wire exports to imports in a pipeline | building-flows | Flow Topologies, How to Build a Flow |
| Build a synchronous HTTP endpoint | building-apis | Builder vs Script mode, API Execution Pipeline |
| Build a reusable operation | building-tools | Tool Concepts, Tool Execution Pipeline |
| Map fields between source and destination | writing-mappings | Mapper 2.0 Workflow, Transformation 2.0 |
| Write dynamic expressions in configs | writing-handlebars | Helper Catalog, Expression Patterns |
| Write JavaScript hooks | writing-scripts | Hook Point Decision Matrix |
| Set up EDI/B2B trading partner integrations | building-b2b | EDI Standards, Trading Partner Onboarding |
| Debug a failing flow | troubleshooting-flows | Error Diagnosis Framework, Diagnostic Workflow |
| Configure filters on exports or imports | configuring-filters | Expression Syntax, Filter Placement |
| Set up AI-powered import processing | configuring-ai-agents | Provider Decision Matrix |
| Add PII/moderation/policy checks | configuring-guardrails | Type Decision Matrix, Guardrails Flag, They Don't Enforce |
| Configure lookup caches | configuring-lookup-caches | How to Build a Lookup Cache |
| Expose tools via MCP for AI agents | building-mcp-servers | How to Build an MCP Server |
| Manage account users and access | managing-users | Access Strategy Decision Matrix |
| Organize flows/APIs in a container; clone or promote across environments | managing-integrations | Clone Decision Matrix, ILM Reference |
| Install a prebuilt Template or Integration App from the Marketplace | using-marketplace-templates | Templates vs Integration Apps |
| Create inbound API tokens for scripts, pipelines, or MCP servers | managing-api-tokens | Access Scope Decision Matrix |
| Run extension code on your own server or AWS Lambda | managing-stacks | Do You Need a Stack?, server vs lambda |
| Reach a private system behind your firewall | managing-on-premise-agents | Do You Need an On-Premise Agent? |
The reference schemas shipped with these skills cover the high-stakes shapes where guessing corrupts data, not the whole API surface. When you need a field or resource no skill documents, use the live sources — in this order:
celigo <type> get <id> returns the exact wire shape; request bodies for create/update are exactly what GET returns. Copying a live resource beats any documentation..md to any page URL (e.g. https://developer.celigo.com/api/api-reference/flows.md), start from the index at https://developer.celigo.com/llms.txt, or ask a direct question: GET https://developer.celigo.com/readme.md?ask=<question>.references/ are synced from the API specs and reviewed before shipping, and their x-celigo-ai-guidance notes carry hazards the raw docs don't.celigo account snapshot # Fetch all resources, build dependency graph
celigo account search <keyword> # Find resources by name or keyword
celigo account dependencies <type> <id> # Show what a resource uses and what uses it
celigo account lint # Find orphaned resources, offline connections, untriggered flows
celigo account stats # Resource counts by type