Use case / Automation agents

Debug the chain, not the final error.

Automations fail in the middle, retry, and sometimes do the same thing twice. Follow the whole chain, including retries, queues and fallbacks, to see what really ran.

Retries
Lineage
Side effects
Tracked
Fallbacks
Visible

Execution chain

Debug the chain, not the final error.

  1. Each trigger starts a trace, so you can find the run behind any outcome.

  2. The compiled plan shows what the agent meant to do before anything happened.

  3. A timeout is just one span. The retry lineage shows what it caused next.

  4. Fallbacks are recorded with the step they replaced.

  5. Idempotency checks show whether the same action ran twice or was stopped.

Automation agents1 / 5 steps
  1. 01

    Trigger accepted

    Webhook from the billing system.

    ok
  2. 02

    Plan compiled

    Eight steps, two external calls.

    ok
  3. 03

    Tool timed out

    Retried with the same payload.

    retry
  4. 04

    Fallback executed

    Queue picked up the same job.

    ok
  5. 05

    Duplicate prevented

    Idempotency key matched the first attempt.

    ok
Duplicate side effects0

What Tracify watches.

01

Retry lineage

Recorded on every run, so it can be searched, compared and alerted on.

02

Idempotency

Recorded on every run, so it can be searched, compared and alerted on.

03

Queue latency

Recorded on every run, so it can be searched, compared and alerted on.

04

Fallback outcome

Recorded on every run, so it can be searched, compared and alerted on.

The failure to catch

A retry that quietly performs the same action twice.

Follow multi-step automations through retries, queues, fallbacks, and external side effects.

Instrument it

Trace the chain, not just the end.

Wrap each step of the workflow and retries show up as their own spans, so a duplicated side effect is visible instead of silent.

$ npm install tracify-sdk

import { observe, traceAgent } from "tracify-sdk";

const chargeCard = observe(async function chargeCard(order: Order) {
  return billing.charge(order.id, { idempotencyKey: order.id });
}, { type: "tool" });

export const runOrder = traceAgent(async (order: Order) => {
  await chargeCard(order);
  return fulfil(order);
}, { environment: "production" });