OrchestrationCLI & MCP-native control plane · part of the TrailGuide command center

Orchestrate agentic personalization. Visualize every flow.

The Orchestration Layer is a CLI- and MCP-native control plane. Pull off any data source, stand up personalization endpoints and multi-step journeys, and ship guardrailed, AI-written messages across email and push, driven from your terminal, your CI, or any MCP client. It layers on top of the martech stack you already run, so you're no longer bound by the limits of any single tool in it.

$trailguide extract postgres://prod | personalize --strategy similar | journey deploy
Start Building FreeSee the layerNo credit card · installs into your domain
app.trailguide.co / orchestration / personalizations
Endpoint layer
Personalizations
live
Calls today
214,386
across 8 endpoints
p50 latency
32ms
cached at edge
Agentic sends
4 / 8
within guardrails
Diabetes-Friendly Picks
/v1/fighting-diabetes
similar_to_cookedembeddings
Recipe → Similar Recipes
/v1/recipe-similar
vector similaritycontent-keyed
Trial Day-5 Unlock
/v1/trial-d5-unlock
5 rulesre-rank
Extract from any source · fire into any stack
BrazeIterableSegmentCustomer.ioOneSignalBigQueryMixpanelAmplitudePostHogRudderStackSlack
Agentic orchestration visualization layer

See every marketing & personalization orchestration, driven from MCP or the CLI.

TrailGuide reads the data you already have, shapes it into reusable profile and recommendation objects, and hands them to whatever tool does the sending. Compose it all from an agent or your terminal, and watch the whole flow (source, objects, and delivery) visualized end to end.

Source
Data Warehouse
Snowflake · BigQuery · Postgres
usersordersevents
Orchestration Layer
driven by MCP · CLI
Profileobject
id: "u_8821"
diet: "diabetes"
tier: "trial_d5"
Recommendationobject
strategy: "similar"
items: 12
top: "low-carb-bowl"
Delivery
Engagement Platform
Braze · Iterable · Customer.io
EmailPush
One layer, five primitives

From a row change to a sent message, without leaving the trail.

Each primitive does one job and hands off to the next. Compose them however your lifecycle demands.

01

Segments

Import audiences from Zero-Copy or the warehouse, with live counts and refresh cadence.

02

Triggers

Watch row mutations, thresholds, and event bursts. You set how often we check.

03

Personalizations

Live REST endpoints. Pass an ID, get personalized JSON. Preview right in the editor.

04

Webhooks

Email, push, or custom payloads. Static or agentic copy, every send within guardrails.

05

Sequences

Chain webhooks with waits and exit criteria: return events, segment changes, timeouts.

Orchestrate by prompt

Prompt the outcome. Orchestrate the rest.

Pick an app type, choose what you're shipping, and prompt it. The layer drafts the whole orchestration (segment, trigger, personalization, and message), then renders the result. Try one of the examples.

Onboarding sequence
Welcome new signups across push, email, and SMS
Win-back sequence
Win back lapsed users with a 3-message journey
In-app feed card
Surface the next best content inline
$
Examples:welcome new signupswin back lapsed userssurface the next recipe
Choose an app type & what you're shipping, then hit Orchestrate to build a live example.
01 Segments

Pull in any audience, keep it fresh automatically.

Import from your Zero-Copy hub or build straight off the warehouse. Every segment exposes its member count, attributes, and a refresh cadence you control.

  • Two sources, one model: Zero-Copy hub or custom SQL on BigQuery.
  • Live deltas: see members joining and leaving in real time.
  • Exposed attributes become available to every downstream endpoint.
segments · fighting-diabetes
Fighting Diabetes
zero-copy · refresh 5m
18,432
Weeknight Cooks
bigquery · refresh 1h
64,210
02 Triggers

Derive moments from the database, and decide how often you look.

Triggers watch for the changes that matter: a row mutation, a threshold crossing, a burst of events, or a user joining a segment. Set the polling cadence per trigger, from 30 seconds to daily.

  • Four detection kinds: row change, threshold, event burst, segment join.
  • You own the cadence: tighter polling for high-intent moments.
  • Coalesced events feed straight into webhooks and sequences.
triggers · first-recipe-cooked
First Recipe Cooked
every 30s
edit_favorite_recipes.cooked_count
row change · 0 → 1
03 Personalizations

Every personalization is a live API endpoint.

Pass a user ID, a recipe ID, or any key and get back personalized JSON ready to drop into email, push, or in-app surfaces.

  • One-to-one or content-keyed: a single user, or a recipe / ingredient.
  • Live preview with real users or arbitrary key/value pairs.
  • cURL, JS, Python, Node snippets generated for every endpoint.
cURLResponse
# GET a personalized payload for one user curl 'https://api.trailguide.co/v1/\n fighting-diabetes/recommend\n ?identifier=pHtbccS3kme8VkRj0a' \ -H 'Authorization: Bearer pk_live_••8f2a'
05 Sequences

Chain it all into a flow with real exit criteria.

A trigger drops a user in. Webhooks fire on your schedule with waits between them. The user exits the moment any criterion matches: they cook a recipe, enter another segment, unsubscribe, or time runs out.

  • Multi-step: sends and waits, visualized end to end.
  • Exit criteria: trigger fires, segment change, timeout, or unsubscribe.
  • In-flight counts at every step so nothing silently stalls.
sequences · diabetes-onboarding
Joined Fighting Diabetes
EXIT WHEN
cooks 3 recipesenters lapsed-30after 14 days
04 · Webhooks · Agentic copy

Fresh copy every send, with a human still on the trail.

Flip a webhook from static to agentic and the message rewrites itself on every run. You write the brief and the hard constraints; the model stays inside them, and a person can review before anything ships.

Guardrails, and a human in the loop.

Tone, brand voice, length, and banned words are enforced on every generation.

Must avoidbanned words & topics
dietguilt
Must includerequired elements
recipe titlessoft CTA
LATEST BATCH · 3 VARIANTS
● VARIANT A · in use
Morgan, three lower-carb dinners that won't repeat what you've cooked
You've saved a lot of lighter mains lately. Here are three weeknight dinners that fit that thread…
○ VARIANT B
Three picks for you, Morgan
We looked at the meals you saved this month and pulled three you haven't cooked yet…
Optimization lineage

Every message is a hypothesis. Track what won, and why.

Branch any message into variants, attach the hypothesis behind each one, and let the layer measure lift against its parent. When an experiment has a winner, TrailGuide recommends the next variants to try: timing, frequency, message, and audience angles grounded in your lift and campaign context.

  • Winner-triggered suggestions: the layer analyzes lift, goals, and send history to propose what to test next.
  • Choose or modify: pick a recommendation into the clone form, or edit the hypothesis before you branch.
  • Linked generations: every variant stays in the optimization lineage, so you always know what you tested and why.
Gen 01 · baseline
v0 · baselinebaseline
Subject"3 diabetes-friendly wins for this week"
41.2% open-
v-A● winner
HypothesisLeading with the first name lifts opens.
46.1% open+11.9%
Gen 02 · from v-A
v-A2● winner
HypothesisA question raises curiosity over a statement.
49.0% open+6.3%
Gen 03 · from v-A2
v-A2a testing
HypothesisName + question together compounds both lifts.
running · 38% sent±
Recommended experimentsAI · from v-A winner
MessageUse this
Turn the subject into a question
Name personalization lifted opens 11.9%; a question may raise curiosity further.
TimingUse this
Shift send to Tuesday morning
Weekday morning sends often outperform for this audience segment.
CLI & MCP-native

Drive the whole layer from your terminal, or an agent.

Every primitive is scriptable. Extract, personalize, and deploy journeys from the CLI and your CI.

Composable by design

Pipe data through, ship a journey out.

The CLI mirrors the layer one-to-one. Chain commands with pipes, version them in git, and run them anywhere.

zsh · ~/lifecycle
# extract any source → build a personalization $ trailguide extract postgres://prod/users \ | personalize --strategy similar_to_cooked --ttl 60 ✓ endpoint live · /v1/weeknight-feed · 32ms p50
Built for developers

Hit any endpoint. See real output. Ship.

Every personalization and webhook is addressable over REST with versioning, edge caching, and per-key auth.

WEBHOOK LOGS · BRAZE
12:48:0220023 users · picks injected184ms
12:43:0120018 users · picks injected192ms
32ms
p50 endpoint latency, cached at edge
30s
tightest trigger polling cadence
5
composable primitives, one layer
0
tools to rip out. It layers on top of your stack
How it works

Live in an afternoon, not a quarter.

STEP 01

Extract from any source

Point the CLI at a database, warehouse, Zero-Copy hub, or API. Import segments with no pipelines to build.

STEP 02

Define moments & endpoints

Set triggers on the changes that matter and spin up personalization endpoints. Preview output against real users.

STEP 03

Orchestrate & ship

Wire webhooks with static or agentic copy, chain them into sequences with exit criteria, test fire, and watch the logs.

Ship the right message,
at the exact right moment.

The Orchestration Layer installs straight into your domain with auth, theming, and auditing baked in, like every TrailGuide app.