Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Analyze Output SDK workflow execution traces. Use when debugging a specific workflow, examining step failures, analyzing input/output data, understanding execution flow, or when you have a workflow ID to investigate.
.claude/skills/growthxai-output-workflow-trace/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 35% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 46% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -30% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -19% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 2% | 0% |
This skill provides guidance on retrieving and analyzing workflow execution traces using the Output CLI. Traces show the complete execution history including step inputs, outputs, errors, and timing information.
Basic trace (text format, may be truncated):
bashnpx output workflow debug <workflowId>
Full trace (JSON format, recommended for detailed analysis):
bashnpx output workflow debug <workflowId> --json
Tip: Always use --json when you need complete trace data. The text format truncates long values which can hide important debugging information.
Follow this checklist when examining a trace:
Open http://localhost:8080 in your browser for a visual workflow inspection:
| Error Message | Likely Cause | |---------------|--------------| | "incompatible schema" | Zod import issue - using zod instead of @outputai/core | | "non-deterministic" | Using Math.random(), Date.now(), etc. in workflow code | | "FatalError" with retry context | Try-catch wrapping step calls | | "undefined is not a function" | Missing schema definitions | | "workflow must be deterministic" | Direct I/O in workflow function | | "ECONNREFUSED" or timeout | Services not running or network issues |
When examining JSON traces, focus on these fields:
steps[].name: Step identifiersteps[].status: Execution resultsteps[].input: Data passed to the stepsteps[].output: Data returned from the stepsteps[].error: Error details if failedsteps[].attempts: Number of execution attemptssteps[].duration: How long the step tookScenario: Debug a failed workflow
bash# Get the workflow ID from runs list npx output workflow runs list --limit 5 --json # Get detailed trace npx output workflow debug abc123xyz --json # Look for the failing step in the output # Example output structure: # { # "workflowId": "abc123xyz", # "status": "FAILED", # "steps": [ # { "name": "fetchData", "status": "COMPLETED", ... }, # { "name": "processData", "status": "FAILED", "error": "..." } # ] # }
Scenario: Investigate retry behavior
bashnpx output workflow debug abc123xyz --json | jq '.steps[] | select(.attempts > 1)'
Scenario: Check inputs to a specific step
bashnpx output workflow debug abc123xyz --json | jq '.steps[] | select(.name == "processData") | .input'
workflow-quality subagent for best practicesnpx output workflow run <workflowName> --input '<input>'| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 6,168 | 1,329 | -78% | 1 | 1 | 0% | 906 | 1,220 | +35% | 0 | 0 | — |
case-02 | fail→fail | 7,438 | 4,985 | -33% | 1 | 1 | 0% | 534 | 1,231 | +131% | 0 | 0 | — |
case-03 | fail→pass | 11,444 | 9,743 | -15% | 1 | 1 | 0% | 1,757 | 2,562 | +46% | 0 | 0 | — |
case-04 | fail→pass | 12,677 | 2,515 | -80% | 1 | 1 | 0% | 2,060 | 1,444 | -30% | 0 | 0 | — |
case-05 | pass→pass | 15,367 | 1,687 | -89% | 1 | 1 | 0% | 2,841 | 1,271 | -55% | 0 | 0 | — |
case-06 | fail→pass | 13,397 | 3,372 | -75% | 1 | 1 | 0% | 1,976 | 1,593 | -19% | 0 | 0 | — |
case-07 | pass→pass | 12,500 | 6,379 | -49% | 1 | 1 | 0% | 1,753 | 2,043 | +17% | 0 | 0 | — |
case-08 | pass→pass | 12,507 | 7,279 | -42% | 1 | 1 | 0% | 1,946 | 2,155 | +11% | 0 | 0 | — |
case-09 | pass→pass | 16,402 | 10,923 | -33% | 1 | 1 | 0% | 2,430 | 2,640 | +9% | 0 | 0 | — |
case-10 | fail→pass | 11,135 | 5,019 | -55% | 1 | 1 | 0% | 1,769 | 1,806 | +2% | 0 | 0 | — |
case-11 | pass→pass | 8,861 | 3,408 | -62% | 1 | 1 | 0% | 1,491 | 1,573 | +5% | 0 | 0 | — |
case-12 | fail→pass | 9,740 | 2,750 | -72% | 1 | 1 | 0% | 1,762 | 1,498 | -15% | 0 | 0 | — |
case-13 | pass→pass | 7,076 | 2,749 | -61% | 1 | 1 | 0% | 1,190 | 1,517 | +27% | 0 | 0 | — |
case-14 | pass→pass | 9,014 | 4,813 | -47% | 1 | 1 | 0% | 1,469 | 1,761 | +20% | 0 | 0 | — |
case-15 | pass→pass | 15,635 | 7,228 | -54% | 1 | 1 | 0% | 2,382 | 2,127 | -11% | 0 | 0 | — |
case-16 | fail→pass | 4,974 | 1,348 | -73% | 1 | 1 | 0% | 773 | 1,212 | +57% | 0 | 0 | — |
case-17 | fail→pass | 9,199 | 3,700 | -60% | 1 | 1 | 0% | 1,622 | 1,545 | -5% | 0 | 0 | — |
case-18 | pass→pass | 7,698 | 1,613 | -79% | 1 | 1 | 0% | 1,222 | 1,262 | +3% | 0 | 0 | — |
case-19 | pass→pass | 6,799 | 1,584 | -77% | 1 | 1 | 0% | 1,029 | 1,262 | +23% | 0 | 0 | — |
case-20 | pass→pass | 3,146 | 3,018 | -4% | 1 | 1 | 0% | 508 | 1,477 | +191% | 0 | 0 | — |
case-21 | pass→pass | 7,315 | 5,201 | -29% | 1 | 1 | 0% | 1,201 | 1,860 | +55% | 0 | 0 | — |
case-22 | fail→fail | 2,434 | 2,226 | -9% | 1 | 1 | 0% | 365 | 1,413 | +287% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +36 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.