For the complete documentation index, see llms.txt. This page is also available as Markdown.

Status and diff

Two views of a local tree: celigo status is offline and answers "what did I change since the last pull"; celigo diff fetches the live account and answers "how do my files differ from the server". Both are informational by default and become CI gates with --exit-code, like git diff --exit-code.

celigo status

Compare the tree against .celigo/manifest.json. No API call, no token, no profile check — it is instant and safe anywhere.

Signature

celigo status [flags]

Flags

Flag
Type
Default
Description

--dir <path>

string

.

Tree root directory.

--exit-code

boolean

false

Exit 1 when the tree is not clean. Without it, status exits 0 even when the tree is dirty — a pull-request branch normally is.

Output

Each list is in alphabetical path order:

modified:  exports/Get Orders/export.json
missing:   imports/Old Import/import.json
moved:     exports/Orders/export.json → exports/Get Orders/export.json  (folder names follow the resource's own name — `celigo pull` moves it back)
untracked: exports/New Orders/export.json  (no _id — push will create)
unreadable: integrations/Shop/connections/Shopify.link.json  unresolved git merge conflict (conflict markers at line 3)
State
Meaning

modified

A tracked file's content differs from the hash recorded at the last pull or push.

missing

A tracked file is gone. push --prune deletes the resource; celigo pull restores the file.

moved

A resource folder was renamed locally. One event, never a missing plus an untracked, so push --prune cannot delete a resource over a rename.

untracked

A file the manifest does not know. With no _id, push creates it.

unreadable

A pull-generated .link.json pointer or .external.json stub that no longer parses (git conflict markers, invalid JSON). Nothing is pushed from such a file and celigo pull rewrites it, but the tree is not clean.

A clean tree prints Clean — no local changes since <time of this machine's last pull>. With --format json the report is a JSON object with the same lists.

A CRLF checkout is not an edit: a .json, .js, or .md file that differs from its recorded hash only by \r\n line endings or a leading UTF-8 BOM is clean. Storage content files are compared byte for byte, because \r\n in them is data.

Example

celigo diff

Compare the tree against the live account. The CLI fetches fresh copies, ignores volatile fields, and prints field-level differences with JSON-pointer paths.

Required: read mode is enough.

Signature

Arguments

Argument
Type
Required
Description

[refs...]

file path, type:id, or bare id

No

The resources to compare. With no refs, diff compares only the files the checkout modified.

Flags

Flag
Type
Default
Description

--dir <path>

string

.

Tree root directory.

--exit-code

boolean

false

Exit 1 when any compared resource is changed, deleted on the server, or local only. Default: exit 0.

--concurrency <n>

integer

8

Requests in flight at once (1–16). CELIGO_CONCURRENCY sets the default.

--target <name>

string

—

Compare against a promote target instead of the tree's own account. See Diff against a promote target.

Output

Changed resources come first, then the rest in tree-path order. Each entry is a JSON pointer with the server's value on the left and yours on the right:

  • An edit to script.js shows up under the document's /content: the editable source and its document are two faces of one resource. Lookup cache data is reported per key under /data/<key>, a sync's datasets under /datasets/<name>, a tampered storage file under /content.

  • A changed value longer than the line is shown as a window around the first differing character on both sides, tagged (differs at line L, col C) — or (differs at char N) for a one-line value — so two script sources that share a long prefix are reviewable. --format json carries the whole values.

  • Secrets never print. A local value replacing the server's ****** mask renders as (set), and so does a new secret-named field (password, token, secret, apiKey, …) on a connection, iClient, or MCP OAuth provider. The masking happens in the entries themselves, so --format json carries no value either, and a diff posted as a CI comment is safe.

  • A tracked file that is not a JSON object, or a script.js or instructions.md holding git conflict markers, is reported as changed with the problem in place of the local value and (not compared) on the remote side, rather than aborting the diff.

The no-ref form compares only what you changed. It cannot see the server drifting on a file nobody edited locally, and says so on stderr: note: only locally modified files were compared — pass refs … to check unmodified resources for server-side drift. To check specific resources for drift, name them:

A moved folder is compared where the file now sits; both the new path and the vacated one are accepted as refs. diff refuses a profile bound to a different account than the tree, with no override, and it never binds an unbound tree — it writes nothing.

Diff against a promote target

celigo diff --target <name> compares against a promote target instead of the tree's own account. For every source document mapped in .celigo/targets/<name>.json it renders what celigo promote --to <name> would send — references remapped, server fields stripped — against the target's live copy. Every mapped resource is compared, refs or not; an unmapped one is local only (promote will create), a vanished target copy deleted in target.

The comparison uses the target's profile — or CELIGO_TARGET_API_TOKEN and CELIGO_TARGET_BASE_URL on a machine with no such profile — never the selected one, in whatever mode that profile is in: it only reads, so a read-mode production profile on a reviewer's machine serves it, while promote itself needs full mode. It announces the target on stderr first: celigo: diff --target tree of profile 'prod' (…) → profile 'sandbox' → api.integrator.io.

  • Pull a tree — pull --force <path> takes the server copy of one resource.

  • Push changes — push --dry-run is the plan; diff is the content.

  • Teams, git, and CI — the PR check that posts diff --exit-code and push --dry-run.

Last updated

Was this helpful?