agentsclimarketplace

Pipeline replay

Skill robdasi/skills/pipeline-replay

Make a multi-step agent or automation pipeline safely re-runnable. Maps each step to its side-effect class (read / internal-write / external-write / irreversible), assigns idempotency keys, finds the safe resume point after a failure, and builds a dedup table so a retry never double-sends, double-charges, or double-posts. Use this when designing a Trigger.dev / cron / multi-step pipeline, or after one ran twice and did the damage twice. Produces a replay plan and stops.From its SKILL.md

Install
npx -y skills add robdasi/skills --skill pipeline-replay

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its file declares

Copied from the file, not written here

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

4.9 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it

Pipeline Replay

The two worst sentences in automation: "it ran twice" and "it died on step four, how do I restart it." Both have the same root cause. Nobody decided, per step, what is safe to repeat and what is not. So the retry sends the email again, or you can't resume without redoing the charge.

This skill makes that decision explicit, step by step, before it bites. The pattern it builds is the one I run in production: a persisted state file is the source of truth, every step saves to it, and a re-run skips finished work by looking at the data, not a flag. You describe the pipeline, it produces a replay plan.

Work through every step. Build the plan, then stop.

Inputs (ask for whatever is missing)

  • The pipeline (required): the steps in order, what each one does. If a build-spec exists, take the happy path and the state notes from it.
  • What each step touches: which steps call an external system (send, charge, post, write to someone else's database) vs only read or write your own state.
  • Optional: where state lives (a JSON file, a DB row, a queue), and the real incident if this is a post-mortem ("it sent two emails").

The method

  1. List the steps in order. One row per step. If a step does two things to the outside world, split it — a row should have one external effect at most.

  2. Classify each step's side effect. The core of the whole skill:

    • read — pure lookup. Always safe to repeat.
    • internal-write — writes only your own state. Safe to repeat if it's an upsert on a stable key.
    • external-write — sends/posts/writes to a system you don't own (email, Slack, a CRM, a webhook). Repeating it is visible to someone else. Needs a dedup key.
    • irreversible — charges, deletes, sends something you can't unsend. Repeating it is real damage. Needs a dedup key and a pre-check.
  3. Make state the source of truth, and save after every step. Name the one place that records what's done (a state file, a DB row with a status field, the record itself). The rule is to persist after each step, not once at the end — a pipeline with a single checkpoint at the end can only restart from zero.

  4. Skip finished work by filtering the data, not by flags. A re-run should look at the state and skip what's already there: leads.filter(l => !l.score), "process posts not in processedPosts", "rows where email is null". Presence of the output is the done-marker. This is what makes re-running a no-op for completed work without a separate bookkeeping layer that can drift.

  5. Assign an idempotency key per writing step. What makes "the same work" the same: prospect_id + campaign_day, invoice_id, order_id + step. You check it before acting and store it after. No key means no safe retry — design one in here.

  6. Find the safe resume point. For each failure step, name the step the pipeline can re-enter from without repeating an external-write or irreversible action. That is the answer to "it died on step four." If there isn't one, that's the gap to design out now.

  7. Build the dedup table. One row per external-write / irreversible action: the action, its idempotency key, where the key is recorded, and the check that runs before acting ("if a send exists for this key, skip"). This table is what turns a re-run into a no-op instead of a second send.

  8. Set the unattended guardrails. Run it single-flight (concurrency limit 1) so two copies never overlap on the same state. If it loops toward a target, give the loop a hard iteration cap and a break-when-no-progress, so a stuck source can't spin forever. On error, aggregate failures into the run's result and return them rather than throwing the whole run away. Then the retry/backoff and the kill switch.

Output

Produce the replay plan as two markdown tables — a step ledger (step, side-effect class, idempotency key, saves-state?, safe resume point) and a dedup table (action, key, recorded where, pre-check) — followed by the guardrail rules (single-flight, loop cap, error-aggregation, kill switch). Call out, in one line each, any step that has no safe resume point or no dedup key: those are the bugs to fix before this runs unattended.

Then stop. The plan is the deliverable. Wiring the keys and checks into the code is the next step, and now you know exactly which steps need them.

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Gives 0 of the 12 instructions most automation workflows skills give in ~1.1k tokens

Counted across 745 of the 1,008 authors here whose files we hold, read 2026-08-07

  • Write conventional commit messagesin 36 of 745, across 35 files
  • Delete branches after mergein 30 of 745, across 21 files
  • Make atomic commitsin 25 of 745, across 15 files
  • Write minimal code to pass testsin 22 of 745, across 10 files
  • Re-snapshot after navigation or DOM changesin 21 of 745, across 13 files
  • Use try-catch for error handlingin 20 of 745, across 8 files
  • Run tests before committingin 20 of 745, across 12 files
  • Write tests before implementationin 20 of 745, across 8 files
  • Configure branch protection rulesin 19 of 745, across 5 files
  • Explain the why in commit messagesin 19 of 745, across 9 files
  • Refactor code while tests remain greenin 19 of 745, across 6 files
  • Interact with elements using refsin 19 of 745, across 11 files

Said here and by no other author read

  • List the pipeline steps in order
  • Split steps that have multiple external effects
  • Classify each step's side effect
  • Assign idempotency keys to writing steps
  • Persist state after each step
  • Determine the safe resume point for each step

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 326,367. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.