lytics/agent-skills

campaign-flow-builder

Guided flow/journey creation from business intent -- multi-step campaigns with delays, conditionals, A/B tests, and exports. Use when the user wants to create a campaign, build a journey, or design a multi-step marketing flow.

First seen Apr 2, 2026

Installation

$ npx skills add lytics/agent-skills --skill campaign-flow-builder

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from lytics/agent-skills · top by installs.

npx skills add lytics/agent-skills

Browse all from lytics/agent-skills

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 4
License LICENSE
Default branch main
Open issues 1
Status Active

Skill metadata

Parsed from SKILL.md frontmatter.

More metadata
arguments
description of the desired campaign or journey

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 8,350 B
  • docs SUMMARY.md 255 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 50 installs

SKILL.md

Campaign Flow Builder

Purpose

Guides users from business intent ("I want a welcome email series") to a complete, validated flow with entry segments, delays, conditional branches, A/B tests, and export steps. Follows the advisor pattern: understand the goal, suggest structure, iterate, then create.

Flows are the most complex Lytics object -- this skill makes them approachable.

Environment

Requires authenticated API access. See ../references/auth.md for credential resolution.

Flow API Format

Flows use a node-edge graph representation (TranslatedFlow format):

  • Nodes: Steps in the journey (trigger, delay, export, conditional, A/B test, exit)
  • Edges: Connections between steps (with optional conditions or probabilities)

Building a Flow

Step 1: Understand the Campaign Goal

Classify the user's intent:

  • "Welcome email series" -> trigger on segment entry, delays between emails
  • "Re-engagement campaign" -> trigger on lapsed users, conditional check, export
  • "A/B test two offers" -> trigger, A/B split, two export paths
  • "Multi-channel nurture" -> trigger, delays, conditionals, multiple export channels

Ask:

  • What triggers entry? (entering a segment, being in a segment)
  • How many steps/touchpoints?
  • Any branching logic? (VIP vs standard, engaged vs not)
  • What timing between steps?
  • Can users re-enter?

Step 2: Verify Entry Segment

The flow needs a trigger segment. Check if it exists:

curl -s "${LYTICS_API_URL:-https://api.lytics.io}/v2/segment?table=user&sizes=true" \
  -H "Authorization: ${LYTICS_API_TOKEN}"

If no suitable segment exists, suggest using audience-builder skill or audience-advisor skill to create one.

Step 3: Design the Flow Structure

Present a visual text diagram of the proposed flow:

TRIGGER: On entry to "New Signups" segment
  |
  v
[Send Welcome Email] (export)
  |
  v
[Wait 3 days] (delay)
  |
  v
[Opened Welcome?] (conditional split)
  |           |
  YES         NO
  |           |
  v           v
[Send Offer] [Send Reminder]
  |           |
  v           v
[EXIT]       [EXIT]

Iterate with the user until they're happy with the structure.

Step 4: Build the Flow Payload

Node Types

Trigger (always sequence_id: 0):

{
  "sequence_id": 0,
  "type": "trigger",
  "entry_segment_id": "segment-uuid-here",
  "entry_condition": "on_segment_entry",
  "reentry_allowed": false,
  "reentry_delay": 86400
}

Entry conditions:

  • "onsegmententry" -- fires when user enters the segment (event-based, most common)
  • "in_segment" -- fires for users currently in the segment (snapshot)

Reentry delay is in seconds. Minimum is 3600 (1 hour).

Export (send to external platform):

{
  "sequence_id": 1000,
  "type": "export",
  "label": "Send Welcome Email",
  "work_config": {}
}

The work_config is configured separately after flow creation via the work endpoint.

Delay (wait between steps):

{
  "sequence_id": 2000,
  "type": "delay",
  "label": "Wait 3 days",
  "delay": 259200000000000
}

Delay is in nanoseconds. Common values:

  • 1 hour: 3600000000000
  • 24 hours: 86400000000000
  • 3 days: 259200000000000
  • 7 days: 604800000000000

Optional: delaycondition (FilterQL) -- proceed only when condition is met. Optional: delayuntil_enters (array of segment IDs) -- wait until user enters all listed segments.

Conditional Split (if/else branching):

{
  "sequence_id": 3000,
  "type": "conditional_split",
  "label": "Opened Welcome?"
}

Conditions are defined on the edges, not the node. See Edges section.

A/B Test (random split):

{
  "sequence_id": 4000,
  "type": "ab_test",
  "label": "50/50 Test"
}

Probabilities are defined on the edges. Must sum to 1.0.

Exit (end of flow):

{
  "sequence_id": 9999,
  "type": "exit"
}

Edge Types

Simple connection:

{"id": "0-1000", "source": 0, "target": 1000, "type": "connected"}

Conditional split edge (with FilterQL):

{
  "id": "3000-4000",
  "source": 3000,
  "target": 4000,
  "type": "connected",
  "condition": {
    "definition": "FILTER AND (email_opened = true) FROM user",
    "label": "Yes",
    "priority": 2
  }
}

Higher priority numbers are checked first. The default/fallback edge should have "definition": "" and "priority": 1.

A/B test edge (with probability):

{
  "id": "4000-5000",
  "source": 4000,
  "target": 5000,
  "type": "connected",
  "probability": 0.5
}

All probabilities from the same source node must sum to 1.0.

Step ID Assignment

  • Trigger is always sequence_id: 0
  • All other IDs are caller-assigned positive integers (must be unique within the flow)
  • Convention: use multiples of 1000 (1000, 2000, 3000) for readability

Step 5: Confirm and Create

Use the confirmation-gate pattern. Show:

  • Flow diagram (text visual)
  • Entry segment name and size
  • Step count and types
  • Timing summary
  • Raw API payload
curl -s -X POST "${LYTICS_API_URL:-https://api.lytics.io}/v2/flow/ui" \
  -H "Authorization: ${LYTICS_API_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{ ... flow payload ... }'

Step 6: Configure Export Steps

After the flow is created in draft state, configure the work/export for each export step:

curl -s -X POST "${LYTICS_API_URL:-https://api.lytics.io}/v2/flow/ui/${FLOW_ID}/step/${STEP_ID}/work" \
  -H "Authorization: ${LYTICS_API_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{ ... work configuration ... }'

Then publish the work:

curl -s -X POST "${LYTICS_API_URL:-https://api.lytics.io}/v2/flow/ui/${FLOW_ID}/step/${STEP_ID}/work/publish" \
  -H "Authorization: ${LYTICS_API_TOKEN}"

Step 7: Activate the Flow

Once all export steps have published work, activate the flow:

curl -s -X POST "${LYTICS_API_URL:-https://api.lytics.io}/v2/flow/ui/${FLOW_ID}" \
  -H "Authorization: ${LYTICS_API_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"state": "running"}'

Important: Only one version of a flow can be running at a time. Publishing a new version automatically sets the old one to draining.

Common Campaign Patterns

Welcome Series

TRIGGER (on_segment_entry: "New Signups")
  -> [Send Welcome] -> [Wait 3d] -> [Send Tips] -> [Wait 7d] -> [Send Offer] -> EXIT

Re-engagement

TRIGGER (in_segment: "Lapsed 30d")
  -> [Send Win-Back] -> [Wait 7d]
  -> CONDITIONAL (opened email?)
     YES -> [Send Discount] -> EXIT
     NO  -> [Send Final Notice] -> EXIT

A/B Test

TRIGGER (on_segment_entry: "Trial Users")
  -> [Wait 1d]
  -> A/B TEST (50/50)
     A -> [Send Offer A] -> EXIT
     B -> [Send Offer B] -> EXIT

Multi-Channel Nurture

TRIGGER (on_segment_entry: "High Intent")
  -> [Send Email] -> [Wait 2d]
  -> CONDITIONAL (converted?)
     YES -> EXIT
     NO  -> [Push Notification] -> [Wait 3d]
           -> [Retarget on Facebook] -> EXIT

Flow States

State Description Can Edit?
draft Not active, fully editable Yes -- add/remove/modify steps
running Active, processing users Limited -- can update work_config, labels, conditions; cannot add/remove steps
draining Winding down, no new entries Same as running
deleted Permanently deleted No

Error Handling

  • Invalid FilterQL in conditions: Validate conditions before creating the flow
  • Probabilities don't sum to 1.0: Adjust and retry
  • Entry segment not found: Help create one with audience-builder
  • Duplicate step IDs: Regenerate with unique values
  • Missing work config: Guide through export step configuration

Dependencies

  • Composes: segment-manager skill, audience-builder skill, job-manager skill
  • References: ../references/filterql-grammar.md, ../references/confirmation-gate.md, ../references/auth.md, ../references/api-client.md