Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Re-run an Output SDK workflow from after a specific completed step, creating a new run that replays up to that point and re-executes subsequent steps. Use when iterating on a later step's prompt or logic without re-running the entire workflow, or when recovering from a failure that only affects steps after a known-good point.
.claude/skills/growthxai-output-workflow-reset/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -58% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -13% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -31% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 197% | 0% |
This skill resets a workflow to re-run from after a specific completed step. The current run is terminated and a new run is created that replays the workflow up to the given step (reusing its recorded output), then re-executes every step after it.
Use this to avoid re-running expensive early steps (like LLM calls or slow HTTP requests) when you only need to iterate on a later step.
npx output workflow stop <id> or terminate <id>409)npx output workflow run <name> or workflow start <name>bashnpx output workflow reset <workflowId> --step <stepName> npx output workflow reset <workflowId> --step <stepName> --reason "<why>"
| Flag | Short | Required | Description | |------|-------|----------|-------------| | --step | -s | yes | Name of the completed step to reset after | | --reason | -r | no | Free-text reason, recorded in Temporal history for auditability |
The workflowId argument is required. The step name is the step function name as it appears in the trace (e.g. fetchArticle, consolidateCompetitors).
Step names come from the workflow's execution trace:
bashnpx output workflow debug <workflowId> --json
Look for step entries with status: "completed". The step name is the one you pass to --step.
On success the CLI prints the original workflowId and a new runId — the new run created by the reset. The pre-reset run is terminated.
Workflow reset successfully
Workflow ID: lead_enrichment-a1b2c3d4
New Run ID: 8f3e2a91-...
Reset after step: consolidateCompetitors
Reason: retrying with updated promptUse the new runId (via the pinned workflow runs list) to inspect the new execution. The workflowId is unchanged, so workflow status / workflow result will target the latest run by default.
Scenario: Rerun after fixing a downstream prompt
bash# The workflow failed at `generateBlogPost`, but `consolidateCompetitors` # (the step before it) completed successfully. npx output workflow debug lead_enrichment-a1b2c3d4 --json # ... confirms consolidateCompetitors completed # Edit src/workflows/lead_enrichment/prompts/generate_blog_post@v1.prompt # Then rerun from after the last good step — skipping the expensive # competitor consolidation LLM call. npx output workflow reset lead_enrichment-a1b2c3d4 \ --step consolidateCompetitors \ --reason "Retry with updated blog-post prompt"
Scenario: Iterate on a late step without re-paying upstream costs
bash# Workflow completed, but step output is wrong. Rerun just the last step. npx output workflow reset blog_evaluator-xyz789 --step analyze_claims # Check the new run's result npx output workflow result blog_evaluator-xyz789
Scenario: Record an audit reason
bashnpx output workflow reset wf-12345 \ --step fetchCompanyData \ --reason "Source API returned stale data; rerunning after cache invalidation"
Scenario: Capture the new run ID for follow-up
bash# Grab the new runId from the reset output, then watch it npx output workflow reset lead_enrichment-a1b2c3d4 --step lookupCompany npx output workflow status lead_enrichment-a1b2c3d4 npx output workflow result lead_enrichment-a1b2c3d4
| Error | Cause | Solution | |-------|-------|----------| | 404 Workflow or step not found | Wrong workflowId or --step name | Check with npx output workflow runs list and workflow debug <id> | | 409 Step has not completed | Target step is still running or never ran | Wait for the step to complete, or pick an earlier completed step | | API returned invalid response | Transport failure | Check services with docker ps | grep output and curl http://localhost:3001/health |
workflow debug — confirm which steps completed before picking a reset point<stepName>; the step itself is not re-executed--reason — it shows up in Temporal history and helps teammates (and future you) understand why the run forkednpx output workflow debug <id> — find completed step names to pass to --stepnpx output workflow runs list — see the new run created by reset alongside the terminated originalnpx output workflow status <id> — check the new run's statusnpx output workflow result <id> — get the new run's final outputnpx output workflow stop <id> / workflow terminate <id> — stop a running workflow before resettingnpx output workflow run <name> / workflow start <name> — fresh run from scratch (no replay)| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 29,690 | 2,797 | -91% | 1 | 1 | 0% | 4,797 | 2,026 | -58% | 0 | 0 | — |
case-02 | fail→pass | 34,158 | 2,594 | -92% | 1 | 1 | 0% | 2,241 | 1,953 | -13% | 0 | 0 | — |
case-03 | fail→pass | 23,639 | 3,054 | -87% | 1 | 1 | 0% | 1,693 | 1,985 | +17% | 0 | 0 | — |
case-04 | fail→pass | 19,909 | 3,820 | -81% | 1 | 1 | 0% | 3,033 | 2,091 | -31% | 0 | 0 | — |
case-05 | fail→pass | 4,313 | 2,471 | -43% | 1 | 1 | 0% | 636 | 1,886 | +197% | 0 | 0 | — |
case-06 | fail→pass | 10,266 | 5,215 | -49% | 1 | 1 | 0% | 1,540 | 2,351 | +53% | 0 | 0 | — |
case-07 | fail→pass | 8,530 | 2,009 | -76% | 1 | 1 | 0% | 1,288 | 1,825 | +42% | 0 | 0 | — |
case-08 | fail→pass | 4,536 | 2,603 | -43% | 1 | 1 | 0% | 723 | 1,939 | +168% | 0 | 0 | — |
case-09 | pass→pass | 11,198 | 5,590 | -50% | 1 | 1 | 0% | 1,866 | 2,436 | +31% | 0 | 0 | — |
case-10 | fail→pass | 13,790 | 5,176 | -62% | 1 | 1 | 0% | 2,147 | 2,322 | +8% | 0 | 0 | — |
case-11 | fail→pass | 16,343 | 7,315 | -55% | 1 | 1 | 0% | 2,550 | 2,709 | +6% | 0 | 0 | — |
case-12 | fail→pass | 9,913 | 3,793 | -62% | 1 | 1 | 0% | 1,741 | 2,132 | +22% | 0 | 0 | — |
case-13 | pass→pass | 13,783 | 2,771 | -80% | 1 | 1 | 0% | 1,888 | 1,886 | -0% | 0 | 0 | — |
case-14 | fail→pass | 4,966 | 2,763 | -44% | 1 | 1 | 0% | 809 | 1,955 | +142% | 0 | 0 | — |
case-15 | fail→pass | 16,541 | 2,382 | -86% | 1 | 1 | 0% | 2,751 | 1,958 | -29% | 0 | 0 | — |
case-16 | pass→pass | 5,416 | 2,358 | -56% | 1 | 1 | 0% | 817 | 1,877 | +130% | 0 | 0 | — |
case-17 | fail→pass | 8,725 | 4,094 | -53% | 1 | 1 | 0% | 1,498 | 2,159 | +44% | 0 | 0 | — |
case-18 | fail→pass | 12,581 | 3,212 | -74% | 1 | 1 | 0% | 1,945 | 2,036 | +5% | 0 | 0 | — |
case-19 | fail→pass | 16,312 | 2,091 | -87% | 1 | 1 | 0% | 2,659 | 1,770 | -33% | 0 | 0 | — |
case-20 | fail→pass | 12,752 | 2,153 | -83% | 1 | 1 | 0% | 2,100 | 1,802 | -14% | 0 | 0 | — |
case-21 | fail→pass | 14,910 | 4,806 | -68% | 1 | 1 | 0% | 2,350 | 2,332 | -1% | 0 | 0 | — |
case-22 | fail→pass | 30,218 | 2,141 | -93% | 1 | 1 | 0% | 2,382 | 1,819 | -24% | 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 19 counted toward the lift figure. The other 3 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 +86 percentage points is the difference between those two pass rates over the 19 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.