Install
$ agentstack add skill-celigo-ai-troubleshooting-flows ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Troubleshooting Flows
A flow is broken when it fails to move data correctly. This skill covers systematic diagnosis: identifying the problem type, isolating the failing step, inspecting errors, and resolving them.
Troubleshooting concerns:
- Job status -- understanding what
completed,failed,canceled, andretryingmean for the flow - Error analysis -- grouping errors by pattern to find root causes instead of reading them one-by-one
- Request/response inspection -- seeing exactly what was sent and returned at each step
- Execution logs -- record-level tracing through every stage of the pipeline
- Retry and resolution -- fixing error data and retrying vs bulk resolving
- Delta/state issues --
lastExportDateTimedrift, stuck deltas, re-processing windows
Problem Categories
Total Failure
Job status is failed with 0 successful records. The entire run collapsed before processing any data. Typically numPagesGenerated: 0 (export-level failure) or pages generated but numPagesProcessed: 0 (import-level failure on the first page).
Common causes: connection failure (credentials expired, endpoint down), export query error (invalid SQL, bad saved search ID), missing/deleted resource, permission denied.
Partial Failure
Job status is completed but numError > 0 alongside successful records. Some records failed while others processed normally. Real-world data shows wide variance -- from 2 errors in 8000 successes to 500+ errors in 8000 successes.
Common causes: validation errors on the destination (required fields missing, type mismatches), duplicate key violations, record-level lookup failures, rate limiting on specific batches, data-dependent issues (specific records have bad data).
Empty Run
Job completes successfully with 0 errors AND 0 records processed.
Common causes: wrong resourcePath on the export (extracts from wrong JSON path), delta export with no changes since last run (legitimate), output filter too restrictive (all records filtered out), source query returns no results, webhook export with no inbound events.
Stuck or Long-Running
Job stays in running or retrying status longer than expected.
Common causes: large dataset with no pagination limits, destination system slow to respond, script hook with long-running logic, on-premise agent connectivity issues, rate limiting causing backoff.
Intermittent Failures
Flow sometimes succeeds and sometimes fails with the same configuration.
Common causes: token/session expiry mid-run (long-running flows), rate limiting (varies with concurrent flows), transient network errors, source system maintenance windows.
Error Diagnosis Framework
Classification
When an error occurs, classify it into one of three categories to determine the right action:
| Category | HTTP status codes | Meaning | Action | |---|---|---|---| | Needs investigation | 400, 401, 403, 404, 405, 409, 422 | Missing info, wrong IDs, permission denied, validation errors | Stop and investigate -- check resource config, connection status, permissions | | Transient | 408, 429, 500, 502, 503, 504 | Timeouts, rate limits, server errors | Retry once. If it fails again, escalate -- the external system may be down | | Configuration error | varies | Preconditions not met but fixable | Follow the error message guidance to fix the config, then retry |
A 5xx error not in the transient list (e.g., 501) is still likely transient. A 4xx error not in the investigation list warrants manual review.
Root Cause: Configuration vs Data
Every flow error has one of two root causes:
- Static configuration -- a hardcoded value in the step config is wrong (mapping expression, filter rule, hardcoded field, URI, query, SQL statement). Fix: change the resource configuration via
celigo set - Dynamic data -- the upstream source sent unexpected data (missing required field, wrong type, null where a value is expected, unexpected array/object shape). Fix: add input filtering or validation upstream, or fix the source system
To distinguish: check if the error reproduces with different input records. If the same error occurs for every record, it's configuration. If only some records fail, it's data.
# Check if all records fail (configuration) or only some (data)
celigo flows error-summary # Compare error count vs total records
celigo flows errors # Sample specific errors to compare
Which Step Failed?
Error location determines which resource and skill to investigate:
| Error location | Resource to check | Skill | |---|---|---| | Export / page generator | Export config (connection, query, resourcePath) | configuring-exports | | Import / page processor | Import config (mapping, destination fields, operation) | configuring-imports | | Script hook | Script code (preSavePage, preMap, postMap, postSubmit) | writing-scripts | | Mapping | Mapping expression (field paths, lookups, hardcoded values) | writing-mappings | | Filter | Filter expression (s-expression syntax, field references) | configuring-filters | | Connection | Connection config (auth, URL, credentials) | configuring-connections |
Quick Reference
Symptom --> First Command
| Symptom | Run first | Then | |---|---|---| | Flow totally failed | celigo jobs list --flow --limit 1 | Check numPagesGenerated -- if 0, export failed; check connection and query | | Partial errors | celigo flows error-summary | celigo flows error-analysis to find root cause pattern | | Empty run (0 records) | celigo jobs list --flow --limit 1 | Check export config (resourcePath, delta state, output filter) | | Stuck / long-running | celigo jobs current --flow | Check job status; if retrying, inspect rate limiting or connection issues | | Intermittent failures | celigo jobs run-stats --flow | Compare failing vs passing runs; check token expiry and rate limits | | Silent logic bug (no errors, wrong output) | celigo flows test-run --export | If test-run can't reach it, enable execution logging (§6) and run for real | | Production incident (real traffic matters) | celigo flows enable-execution-logs then run | Read per-record I/O with query-execution-logs / execution-log-detail; the failing stage names the problem |
Key Diagnostic Commands
# Job status
celigo jobs list --flow --limit 1 # Most recent job
celigo jobs current --flow # Currently running job
celigo jobs diagnostics # Full diagnostic bundle
# Error investigation
celigo flows error-summary # Per-step error counts
celigo flows error-analysis # Group errors by pattern
celigo flows errors # List individual errors (each has an errorId)
celigo flows error --request-detail # Raw HTTP request/response for one error
# Safe iteration first
celigo flows test-run --export # safe, fast, try this first
# End-to-end execution logging (real run, full per-record I/O)
celigo flows enable-execution-logs # arm debug logging, then run the flow
celigo flows execution-logs # list captured per-record logs
celigo flows debug-requests # per-bubble HTTP request/response
Related Skills
- [building-flows > Quick Reference](../building-flows/SKILL.md#quick-reference) -- flow structure, topologies, and configuration
- [configuring-exports > Quick Reference](../configuring-exports/SKILL.md#quick-reference) -- export configuration and adaptor types
- [configuring-imports > Quick Reference](../configuring-imports/SKILL.md#quick-reference) -- import configuration and adaptor types
- [writing-scripts > Quick Reference](../writing-scripts/SKILL.md#quick-reference) -- script hook debugging and data shapes
Diagnostic Workflow
1. Check the job status
Start with the most recent job to understand what happened.
celigo jobs list --flow --limit 1
celigo jobs get
celigo jobs current --flow
Key fields: status, numError, numSuccess, numIgnore, numPagesGenerated, numPagesProcessed, startedAt, endedAt. A failed status with numPagesGenerated: 0 means the export itself failed -- don't look at import errors. completed with numError > 0 means partial failure at the record level.
2. Get the error summary
See which steps have errors and how many.
celigo flows error-summary
This returns per-step error counts. Focus on the step with the most errors first.
3. Analyze error patterns
Group errors by message pattern to find the root cause instead of reading them one-by-one.
celigo flows error-analysis [--limit 200]
If most errors share the same message, that's your root cause. Multiple distinct patterns may indicate multiple issues.
4. Inspect individual errors
Once you know the pattern, look at specific records and the HTTP request/response that produced the error.
celigo flows errors # list open errors (note the errorId of each)
celigo flows error --retry-data # inspect one error + its editable retry data
celigo flows error --request-detail # + the captured HTTP request/response
flows error --request-detail is the most powerful diagnostic -- it resolves the error's reqAndResKey for you and shows exactly what HTTP request was sent and what the destination responded with. (If you already hold a reqAndResKey from debug-requests, use debug-request-detail instead.)
5. Use test runs for safe iteration (try this first)
Test runs process a single page without affecting production data or delta state. Fast, safe, no arming, no side effects -- answers most logic questions.
celigo flows test-run --export
celigo flows test-run-step-results
celigo flows test-run-step-logs
test-run returns {metadata, flowJob, childJobs} -- metadata lists stage names per bubble. Follow with test-run-step-results to get stages[] = [{name, input, output, errors}] per bubble. Errors include retryData inline.
Test runs don't advance the delta timestamp -- you can repeat them safely against the same data.
Limitations: imports don't actually submit, mock data is shared across lookups/imports, and some adaptors don't run in test mode. When these bite, escalate to §6.
6. End-to-end debugging with execution logs (silent/logic bugs, production incidents)
When test-run can't answer it -- imports must actually submit, destination behavior matters, or it's a production incident -- arm execution logging, run the flow for real, then read the per-record I/O the run captured. Disable debug when you're done.
# 1. Arm debug logging on the flow (optionally bound the window)
celigo flows enable-execution-logs [--duration ]
# 2. Trigger the run (or wait for the next scheduled run)
celigo flows run -y
# 3. After the run, list the captured per-record logs for the job
celigo flows execution-logs
# 4. Drill into one record's stages and stage data
celigo flows query-execution-logs --export-or-import-id --group-id --record-id
celigo flows execution-log-detail --export-or-import-id --stage --group-id --record-id
# 5. Disarm debug logging
celigo flows disable-execution-logs
Each per-record log entry names the stage that produced it (matching the test-run-step-results stage shape: { name, input, output, errors }), so the failing stage tells you where the record broke. For raw HTTP at a bubble, use debug-requests / debug-request-detail (§7). Errors carry retryData inline -- see §8 to fix and retry.
7. Low-level debug primitives (surgical control)
These are the debug primitives the §6 workflow builds on -- use them directly when you want manual control over arming, clearing, or probing:
# Flow-level execution logging
celigo flows enable-execution-logs [--duration ]
celigo flows disable-execution-logs
celigo flows execution-logs
celigo flows query-execution-logs --export-or-import-id --group-id --record-id
celigo flows execution-log-detail --export-or-import-id --stage --group-id --record-id
# Per-bubble HTTP request/response
celigo flows debug-requests [--since 60]
celigo flows debug-request-detail
# Per-resource debug toggles (capture raw HTTP at a specific bubble)
celigo exports enable-debug
celigo imports enable-debug
celigo scripts enable-debug
celigo connections enable-debug
Stage names (for execution-log-detail --stage):
- Built-in:
apiCall,transformation,mapping,inputFilter,outputFilter,responseMapping,responseTransformation,routing - Script hooks: the function name wired on the bubble (e.g.,
preMapHook,postSubmitHook,branchingHook,preSavePageHook,postResponseMapHook)
Test-run uses a different stage vocabulary than live /logs/data/query: request/response/parse (three stages) instead of live's merged apiCall; transformTwoDotZero instead of transformation; responseMap instead of responseMapping; router instead of routing. Everything else matches. The live execution-log commands (§6) use the live vocabulary.
8. Fix and retry (or resolve)
Fix the configuration, then retry:
celigo flows retry-errors -y
celigo flows retry-errors key1,key2,key3
Fix the data when specific records have bad values:
celigo flows error --retry-data > data.json
# Edit data.json (the retryData object), then push it back by errorId:
celigo flows update-error-data
Resolve without retry when errors are expected or not worth reprocessing:
celigo flows resolve-errors errorId1,errorId2
celigo flows resolve-errors -y
9. Verify the fix
Run the flow again and confirm clean execution.
celigo flows run -y
celigo jobs list --flow --limit 1
celigo flows error-summary
CLI Commands
All commands shown in the Diagnostic Workflow above, plus these additional commands:
# Job inspection (additional)
celigo jobs cancel [-y]
celigo jobs diagnostics
celigo jobs download-files
celigo jobs get
celigo jobs errors
celigo jobs run-stats [--flow ] [--status ]
# Error investigation (additional)
celigo flows resolved-errors
# Error resolution (additional)
celigo flows assign-errors [errorIds] [-y]
celigo flows delete-resolved-errors [errorIds] [-y]
celigo flows tag-errors
# Debug logging (additional)
celigo flows query-execution-logs --export-or-import-id --group-id --record-id
# Flow state
celigo flows last-export-date
celigo flows run [--start-date ] [--end-date ] [-y]
Diagnostic Checklist
Before escalating or concluding investigation:
- [ ] Checked job status via
celigo jobs list --flow --limit 1-- confirmedstatus,numError,numSuccess,numPagesGenerated - [ ] Ran
celigo flows error-summaryto identify which step(s) have errors - [ ] Ran
celigo flows error-analysisto group errors by pattern and identify root cause - [ ] Inspected individual errors via
celigo flows errorsandceligo flows error --retry-data - [ ] Reviewed raw HTTP request/response via
celigo flows error --request-detail - [ ] If errors are unclear: enabled execution logs, re-ran flow, and inspected record-level trace
- [ ] If HTTP-level detail needed: used
celigo flows debug-requestson the failing export/import - [ ] Verified fix by re-running the flow and confirming clean execution
Gotchas
- A
completedjob can still have errors.completedmeans the job finished, not that every record succeeded. Always checknumErroralongside status. error-analysisonly samples up to--limiterrors. Default is 100. For flows with thousands of errors, increase the limit to get an accurate pattern distribution.flows errortakes theerrorId(the_idfromflows errors), not areqAndResKeyorretryDataKey. It resolves those internal keys for you: `
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.