Files
dotfiles/dot_agents/skills/cloudflare/references/tail-workers/configuration.md
T
Prad Nukala 6406208b35 shell: fish functions -> ~/.local/bin executables + bash/zsh ports; manage ~/.agents
- 16 cross-shell utilities converted to sh/bash chezmoi executables:
  ai c2p cp-appid extract_agents fab gdc gh-sonr-org-migrate ghg-clone
  ghn gho git-summary launch_omp_livediff_overlay lc-elir mdcp mdp pj
  (ghg-clone not named ghg: unrelated cargo binary owns that name)
- cwd/history helpers stay per-shell: yy c cd clip-last + ghg/ghn/gho
  cd-wrappers in bash/functions/ and zsh/functions/, loaded by rc files
- fish keeps only shell-state functions; converted ones now hit PATH
- cp-appid ignore gating moved to .local/bin path
- dot_agents/skills: 82 skills materialized from dotstate storage so
  dot_claude skill symlinks resolve on fresh bootstrap; dotstate
  profile/symlinks.json released .agents/skills .bashrc .zshrc
2026-08-10 15:15:06 -04:00

3.4 KiB

Tail Workers Configuration

Setup Steps

1. Create Tail Worker

Create a Worker with a tail() handler:

export default {
  async tail(events, env, ctx) {
    // Process events from producer Worker
    ctx.waitUntil(
      fetch(env.LOG_ENDPOINT, {
        method: "POST",
        body: JSON.stringify(events),
      })
    );
  }
};

2. Configure Producer Worker

In producer's wrangler.jsonc:

{
  "name": "my-producer-worker",
  "tail_consumers": [
    {
      "service": "my-tail-worker"
    }
  ]
}

3. Deploy Both Workers

# Deploy Tail Worker first
cd tail-worker
wrangler deploy

# Then deploy producer Worker
cd ../producer-worker
wrangler deploy

Wrangler Configuration

Single Tail Consumer

{
  "name": "producer-worker",
  "tail_consumers": [
    {
      "service": "logging-tail-worker"
    }
  ]
}

Multiple Tail Consumers

{
  "name": "producer-worker",
  "tail_consumers": [
    {
      "service": "logging-tail-worker"
    },
    {
      "service": "metrics-tail-worker"
    }
  ]
}

Note: Each consumer receives ALL events independently.

Remove Tail Consumer

{
  "tail_consumers": []
}

Then redeploy producer Worker.

Environment Variables

Tail Workers use same binding syntax as regular Workers:

{
  "name": "my-tail-worker",
  "vars": {
    "LOG_ENDPOINT": "https://logs.example.com/ingest"
  },
  "kv_namespaces": [
    {
      "binding": "LOGS_KV",
      "id": "abc123..."
    }
  ]
}

Testing & Development

Local Testing

Tail Workers cannot be fully tested with wrangler dev. Deploy to staging environment for testing.

Testing Strategy

  1. Deploy producer Worker to staging
  2. Deploy Tail Worker to staging
  3. Configure tail_consumers in producer
  4. Trigger producer Worker requests
  5. Verify Tail Worker receives events (check destination logs/storage)

Wrangler Tail Command

# Stream logs to terminal (NOT Tail Workers)
wrangler tail my-producer-worker

This is different from Tail Workers:

  • wrangler tail streams logs to your terminal
  • Tail Workers are Workers that process events programmatically

Deployment Checklist

  • Tail Worker has tail() handler
  • Tail Worker deployed before producer
  • Producer's wrangler.jsonc has correct tail_consumers
  • Environment variables configured
  • Tested with staging environment
  • Monitoring configured for Tail Worker itself

Limits

Limit Value Notes
Max tail consumers per producer 10 Each receives all events independently
Events batch size Up to 100 events per invocation Larger batches split across invocations
Tail Worker CPU time Same as regular Workers 10ms (free), 30ms (paid), 50ms (paid bundle)
Pricing tier Workers Paid or Enterprise Not available on free plan
Request body size 100 MB max When sending to external endpoints
Event retention None Events not retried if tail handler fails

Workers for Platforms

For dynamic dispatch Workers, both dispatch and user Worker events sent to tail consumer:

{
  "name": "dispatch-worker",
  "tail_consumers": [
    {
      "service": "platform-tail-worker"
    }
  ]
}

Tail Worker receives TWO TraceItem elements per request:

  1. Dynamic dispatch Worker event
  2. User Worker event

See patterns.md for handling.