AI workflow automationMacros

Build your Slack workflow with Tevyr AI.
Automate the whole show in minutes.

Connect to your favorite tools. Lights, sound, cameras, Slack, AI copy, scheduled emails, downstream automations — all choreographed in a visual flow builder, fired from a hotkey, a session lifecycle, a cron, or a Stream Deck button. Build once. Fire forever.

ROUND BELL
Saved100%
01Pause Round 1 timer
——
Round 1 · default
02Flash "60s REST" speaker
——
Speaker · 4s
03Run in parallel
——
4 parallel branches
Lights · Cam
04Cut to corner cam
——
Camera 2
05Scene: corner rest
——
Hue scene · 60%
06Mute crowd mic
——
Speaker · ducked
Comms
07Post round result
——
#fight-night
08Hype message
——
embeds · @everyone
Logging · AI
09Append round row
——
Notion · Rounds DB
10Generate AI tease
——
gpt-4o-mini · 80 tok
11Email speaker
——
speaker@event.com
12Log activity
——
macro · round_complete
Finale check
13Check is_final
——
session.flag
14if ctx.round = 5
——
ctx.round = 5
15aCall sub-macro: WIN BELL
if true
↳ WIN BELL · 8 steps
Open
15bWait 60s
else
60s
S01Show match sponsor
——
sponsor.show · KEPLER
S02Start result timer
——
timer.start · 1 min
S03Show WINNER overlay
——
display.show · 5s
S04Run in parallel
——
3 parallel branches
Comms
X1Post to #fight-night
——
Slack · embeds
X2Hype @everyone
——
Discord · GIF reply
X3DM coach scorecard
——
Slack · DM
X4Cross-post recap
——
Slack · #stats-team
Lights
Y1Pulse arena lights
——
Hue · victory gold
Y2Cut to winner cam
——
vMix · CAM 3
AI · Email
Z1Wait until 8:30pm
——
flow.wait_until
Z2Generate AI recap
——
OpenAI · gpt-4o
Z3Append to results DB
——
Notion · Match Log
Z4if ctx.title_fight
——
ctx.title_fight
Z5aVIP recap email
if true
Resend · template VIP
Z5bStandard email
else
Resend · template STD
S05Advance to next session
——
session.next
S06Wait
——
flow.wait_ms · 4s
S07Hide WINNER overlay
——
display.hide
S08Hide match sponsor
——
sponsor.hide
Generate · Refine · Deploy

Describe the show, not the steps.
AI builds the macro. You run it.

Natural language to a working macro. Type 'on session start, post to Slack and flash the timer red at 1 minute remaining' and Tevyr AI generates a 3-step macro wired to your integrations. Don't like the screen target? Type 'move the timer flash to staff only' and Tevyr AI mutates only that step — preserving your retry, on-error, and trigger config. The violet ring shows what changed; you've never touched code.

AI macro guide
Pre-show Recap · Macro builder
47 / 100 this month
Built for showtime

Less rehearsal. More show.

Stop memorizing action verbs and digging through docs. Describe the cue in plain English — Tevyr AI builds the macro, wires the integrations, and gets out of your way. When the run-of-show changes at T-minus-5, you don't rebuild. You type the change and ship it. The same AI powers your macros, your rundowns, and your refines — one tool, one mental model, one bill.

See AI macros guide
Natural language → macro

No verbs to memorize.

Describe what should happen in plain English — or drop in a workflow spec or requirements doc (PDF, DOCX, CSV). Tevyr AI extracts the steps, maps them to the right action verbs — Slack, timer, polling, sessions, displays — and wires the triggers.

Generate
Refine without rebuilding

Change one thing.

Type the change in the refine bar — reference the step by name, position, or just describe what should change. "Swap the Slack channel to #staff", "add a 5-second wait after Slack", "change step 2 to staff only." Tevyr AI mutates the targeted step — retries, error policy, and the rest of the chain stay intact.

On session start
lifecycle trigger
Post to Slack
#broadcast
Flash timer red
at 1:00 remaining
Refine
Aware of your event

It knows your room.

Tevyr AI sees your sessions, polls, ad-hoc timers, integrations, sponsor walls, and webhooks before it generates. No hallucinated session IDs, no fake Slack channels, no orphaned webhooks — just the macro you asked for, ready to run.

📅12 sessions📊3 polls5 integrations
Post to Slack
"Round 3 of 12 started" · #broadcast
no hallucinated IDs
Before · During · After — automated

Stop being the orchestration layer.
Let the workflow be.

Right now, you're tab-switching between Slack, vMix, lights, and the IFB — live, with no take-backs. Miss one step and the room sees it. Macros run the cue. You run the show.

See the macros guide
Before · No more memorizing

The workflow holds the sequence.

Cue stacks live in the macro. Version-controlled. Dry-run before doors open.

ROUND BELLv301 · timer.start02 · message.flash03 · flow.http_request
During · No more juggling

Press the button. Run the room.

Hotkey, Stream Deck, lifecycle, or schedule. Every step fires in parallel.

RUNNING
After · No more guessing

What happened. Not what people remember.

Every fire writes itself down. The next rehearsal starts from a record.

HISTORY09:55OK10:25FAIL10:55RETRY11:25OK
Auto-heal · Retries · Recovery · Multi-trigger

Auto-heal the workflow.
Reliability, your way.

Every step auto-heals — auto-retries with configurable backoff, plus an on_error policy you set: continue, abort, or retry. Failures stay scoped. Workflows recover before the audience notices. Broken integrations don't break the show.

Auto-heal + retries
SHOW OPEN
Resilient by default · Configurable by you

Recovery isn't optional. The policy is.

Every step ships with auto-retry. You set the count, the backoff curve, and the on_error policy that fits the moment. The cue stack adapts to your show — not the other way around.

Retry + on_error guide
Four triggers · One macro

Fire it however the show fires.

Manual, hotkey (⌘-key), session lifecycle (start / end / pause / resume / warning / overtime), and cron + IANA schedule — all bind to the same macro. Same stack, every entry point.

Bind a trigger
Manual
Operator clicks Run.
Hotkey
⌘-key bind, conflict-free.
Lifecycle
on_session_*
Schedule
Cron + IANA tz.
Keybind LCancelSave
Continue · Abort

Your error policy. Per step.

Slack post fails? Set on_error: continue — the cue keeps moving. vMix scene cut fails? Set on_error: abort — the show doesn't advance with the wrong scene live. Each step decides on its own.

01slack.postcontinue
failed · continues to next step
02vmix.sceneabort
failed · halts the chain
Reliability you can measure

See which steps actually work.

Each step shows a live success rate from the last N runs. Resend at 80%? You know to add retries or fix the integration before it breaks the show.

R
03resend.send
80%
over 20 runs · flake
Per-screen targeting · One macro, many windows

One macro, the right view on every screen.

Speaker monitor runs the script and countdown. Audience screen shows a brand-themed timer with sponsor wall behind it. Staff display shows the agenda, IFB cues, and producer notes the audience never sees. Greenroom holds time-of-day. Embed iframes for any in-house dashboard. One macro fires — every output renders the view its role needs.

TP
speaker
Script + countdown
Confidence monitor
Speaker
10:00
audience
Up-next timer
Branded countdown
Timer
LOGO
brand
Themed lockup
Per-session branding
Brand
WALL
sponsor
Rotating partners
Logos + tier carousel
Sponsor
OPS
staff
Producer notes + IFB
Back-of-house only
Staff
8:45
agenda
Next-up running order
Per-session schedule
Agenda
8:42
greenroom
Time-of-day clock
For talent
ToD
URL
iframe
In-house dashboard
Embed any web URL
Embed
#
producer
Slack alerts + cues
Ops channel
Slack
N
multi-venue
Per-room targeting
Different room · view
Rooms
5 MIN
flash
5 / 1 / WRAP cues
Speaker time warnings
Flash
THM
theme
Per-session visuals
Brand theme switcher
Theme
TP
speaker
Script + countdown
Confidence monitor
Speaker
10:00
audience
Up-next timer
Branded countdown
Timer
LOGO
brand
Themed lockup
Per-session branding
Brand
WALL
sponsor
Rotating partners
Logos + tier carousel
Sponsor
OPS
staff
Producer notes + IFB
Back-of-house only
Staff
8:45
agenda
Next-up running order
Per-session schedule
Agenda
8:42
greenroom
Time-of-day clock
For talent
ToD
URL
iframe
In-house dashboard
Embed any web URL
Embed
#
producer
Slack alerts + cues
Ops channel
Slack
N
multi-venue
Per-room targeting
Different room · view
Rooms
5 MIN
flash
5 / 1 / WRAP cues
Speaker time warnings
Flash
THM
theme
Per-session visuals
Brand theme switcher
Theme
one macromany outputs
IFB earpiece via Generic HTTP

Cue the producer without saying a word.

Wire a Generic HTTP connection to your IFB system's HTTP endpoint. Fire a "5 minutes" cue straight to the speaker's earpiece from the same macro that flashes the on-stage confidence monitor.

trigger · 5-min warning
step 1/3
01Cue IFB earpiece
running
flow.http_request · POST /ifb/play
02Flash speaker monitor
queued
message.flash · screens: [speaker]
03Notify producer
queued
Slack · #producer-ops
cue · 5 minutesone macro · 3 outputs
Parallel · Branch · Wait · Compose

Your show isn't linear.
Your automation shouldn't be either.

Linear chains can't run a live show. Macros support parallel branches that fire concurrently, conditional routes that choose by context, waits that hold for a real-world signal, and sub-macros that compose without bound — every shape a production actually needs.

Workflow shapes deep-dive
Composition · Not just sequencing

Production stacks reuse. They don't re-author.

Build SPONSOR DELIVERY LEDGER once, call it from every show. Pair flow.branch_if with {{ctx.session.is_bilingual}} so the Spanish-service variant fires the right teleprompter cue. Use flow.wait_for_event to pause the macro on a session lifecycle signal instead of guessing a duration. The shapes compose.

See the 3 production recipes
Limits · Hard caps
8
01Max parallel branches
flow.parallel · per fork
6h
02Max wait per step
flow.wait_ms · flow.wait_until
12h
03Max total duration
End-to-end macro timeout
Compose · No ceiling

Chain sub-macros without bound.

Real-time updates, versioned saves, fault-tolerant by design. When a single macro outgrows the caps, split the long-running half into a sub-macro and let the parent fire-and-forget.

Faster
Faster than manual cues
One press fires the room
Speed
99.9%
Reliable
Fault-tolerant by design
Per-step retries + auto-heal
Healed
Scale
Unlimited workflow size
Compose sub-macros that chain together
Compose
Real-time
Updates
WebSocket fan-out
Every screen, every operator
Live
Versioned
Every save
Snapshot-on-save audit
Roll back any edit
Audit
24/7
Headless
Cron without an operator
Schedule fires unattended
Scheduled
Multi-day
Sub-macros
Outgrow the 12h cap?
Spans days or weeks via sub-macros
Chain
Faster
Faster than manual cues
One press fires the room
Speed
99.9%
Reliable
Fault-tolerant by design
Per-step retries + auto-heal
Healed
Scale
Unlimited workflow size
Compose sub-macros that chain together
Compose
Real-time
Updates
WebSocket fan-out
Every screen, every operator
Live
Versioned
Every save
Snapshot-on-save audit
Roll back any edit
Audit
24/7
Headless
Cron without an operator
Schedule fires unattended
Scheduled
Multi-day
Sub-macros
Outgrow the 12h cap?
Spans days or weeks via sub-macros
Chain
Macro runs
and counting
Live data, every fire

Every run carries the room with it.

Drop {{session.name}}, {{round.number}}, or any prior-step output into any URL, header, or body. The macro fires with the moment's live data — never a stale template.

60+
inbound
Any HTTP → Tevyr
Companion · vMix · OBS · Slack
Receive
13+
outbound
Tevyr → any HTTP
Slack · Discord · Notion · Resend
Emit
connected
Public API · both directions

Trigger Tevyr from anywhere. Fire anywhere from Tevyr.

Inbound: Bitfocus Companion, vMix, OBS, Slack slash commands, your own webhooks — anything that speaks HTTP can run a macro. Outbound: every step can hit Slack, Discord, Notion, Resend, your own API, or any URL. The room talks both ways.

Recurring Automation

Recurring shows. Zero recurring work.
Run every Sunday at 9:55am forever.

Every recurring cue you fire by hand is time you're not getting back. Tevyr moves the recurring spine — Slack digests, ChatGPT briefings, Zapier syncs, any HTTP webhook — to a server-side scheduler that fires on time, every time, whether you remember or not.

Schedules guide
macro · scheduled
SUNDAY SERVICE START
0 8,10,12 * * 0
Sundays · 8/10/12 PT
07:0009:0011:0013:00
08:00 PT
STAFF HUDDLE
10:00 PT
SUNDAY MAIN SERVICE
12:00 PT
SPANISH SERVICE
Preview · next 5 firesAmerica/Los_Angeles
Sun · May 1908:00:00STAFF HUDDLE
Sun · May 1910:00:00SUNDAY MAIN SERVICE
Sun · May 1912:00:00SPANISH SERVICE
Sun · May 2608:00:00STAFF HUDDLE
Sun · May 2610:00:00SUNDAY MAIN SERVICE
The Time Tax

The hidden hours in every recurring show.

Sunday service at 9:55. Monday huddle at 9:00. The nightly ChatGPT briefing. The hourly Slack digest. Each one is a calendar reminder, a phone alarm, a 'did I remember?' moment — and a five-minute panic the week your operator is out sick. Tevyr moves the recurring spine to a server-side scheduler, so the cue fires whether you're there or not, the room is open or not, anyone remembers or not.

Cross-macro scheduling
Any Timezone · Anywhere

Scheduled Across Every Timezone.

IANA-aware schedules fire in the event's local time — DST-safe, region-correct, from any operator anywhere.

US West (Oregon)
US East (Washington DC)
EU West (London)
EU Central (Frankfurt)
India Asia-South
Asia Pacific (Tokyo)
What Operators Get Back

Hours Back. Every Week.

A single recurring schedule replaces dozens of phone alarms, calendar reminders, and "did I remember?" moments — every week, forever.

Speed
Faster than manual cues
Reliability
99.9%
Server-side fire reliability
Errors
<0.1%
Failed requests
Latency
<100ms
Median API latency
Tail latency
<300ms
p95 API latency
Resilience
Auto
Automatic reconnect handling
Slack · Notion · Discord · OpenAI · Anthropic · Resend · vMix · Hue · WLED · Zapier · Generic HTTP

Your favorite tools.
Already wired up.

11 saved-connection templates in the Integrations Library. OAuth into Slack, paste a Notion token, drop a Discord webhook URL, store an API key for OpenAI / Anthropic / Resend, expose your LAN vMix / WLED through a tunnel, or fall back to Generic HTTP for anything else. Credentials encrypted at rest, OAuth tokens auto-refresh.

Browse the integration library
One connection · Any macro

Set up once. Reference everywhere.

Save a connection in Settings → Integrations, then call it from any macro via flow.http_request. The same Slack connection drives the producer alert in your conference macro and the visitor welcome in your worship macro. Edit the connection once; every macro updates.

Macros + integrations recipes
OAuth · API key · webhook

The auth model each tool actually ships

OAuth gives you an auto-refreshing access token — sign in once, the refresh runs on a background timer so the connection never goes stale. API key lets you paste a personal access token or secret and we store it encrypted at rest with AES-256-GCM. Webhook URL accepts a signed inbound payload — paste the URL, fire from any macro. Tevyr handles the refresh, the rotation, and the encryption — no proprietary middleware sits between you and the tool.

OAuth
auto-refresh token
refresh on a timer
API key
paste a personal token
AES-256-GCM
Webhook URL
signed inbound payload
HMAC-verified
authorized
Audit-grade run log

Every run logged. Every response captured.

Each run stores the full response of every step — body, status, headers, timing. Open the Playback panel, click a step, and see the actual payload your endpoint returned. Days later, for audit, debugging, or compliance — the run history is right there.

{
  "body": { "ok": true, "channel": "C0L4N0M" },
  "status": 200,
  "headers": {
    "content-type": "application/json; charset=utf-8",
    "x-slack-req-id": "a4f9c2e1b8",
    "date": "Wed, 20 May 2026 16:39:50 GMT"
  },
  "durationMs": 137
}
Live context in every payload

{{ctx.*}} resolves at fire time

URL, headers, JSON body, and form fields all support {{ctx.session.name}}, {{ctx.timer.remaining}}, {{ctx.now.local}} and a dozen more. The same macro fires personalized copy for Round 1 and Round 5 — no per-round duplicates.

templateresolved
{{ctx.session.name}}Round 1
{{ctx.timer.remaining}}1:30
{{ctx.now.local}}8:42 PM
Live recovery · 90-day receipts · Hardware-grade triggers

When a cue misfires —
the show doesn't.

Retry, Resolve, and Stop live on the operator's screen — never the audience's. Every fire goes on the record for 90 days: who triggered it, which step ran, the exact payload, the retry chain. The same macro fires from a Bitfocus Companion button the producer already owns — with skip_if_running protecting the round-bell from a double-press.

Live recovery + audit guide
01Round 1 · 3m
queued
timer.start · Round 1
02Flash speaker · 5s
queued
message.flash · screens: [speaker]
03Notify producer
queued
flow.http_request · Slack · #producer
04SPONSOR LEDGER
queued
flow.call_macro · 4 steps
Run by operators · Reviewed by stakeholders

Operator-only recovery. Stakeholder-grade receipts.

The Live Playback panel hides nothing from the operator and shows nothing to the audience. The History tab keeps 90 days of full-payload receipts — exportable when a sponsor asks if their cue actually fired, when a client wants the post-show timing report, when last Saturday's bug needs answering Sunday at 9. And every macro has a stable /v1/macros/run/<id> URL — the same $200 Stream Deck the producer already owns becomes a $5k cue console, with skip_if_running on by default so a button-mash never doubles a cue.

Public /v1/ API · macros
Operator-only recovery

The audience never knows a cue misfired.

When auto-heal is off — by your choice, on the steps where you want a human in the loop — Retry, Resolve, and Stop live on the operator's screen, not the audience's. Step 3 fails? Retry picks up at step 3 with the prior-step output still in context. The show keeps moving. The audience never sees the seam. Stop kills a mid-flight runaway on the next tick.

FAILRETRYOK
90 days of receipts

Prove every cue fired. Every sponsor played.

Every fire on the record for 90 days — who triggered it, which step ran, the exact payload, the retry chain. Pull the receipt when a sponsor asks if their slot played, when a client wants the timing report, when last Saturday's botched cue needs answering Sunday at 9.

90 DAYSON THE RECORD
Hardware-grade triggers

Your $200 Stream Deck just became a $5k cue console.

Each macro has a stable /v1/macros/run/<id> URL. Drop into the Companion button the producer already owns, the vMix shortcut the switcher already maps, the OBS hotkey the streamer already presses. skip_if_running is on by default — a button-mash never double-fires the round bell.

COMPANION READY

Transform your day with macros you can rely on.

Build once. Fire forever. Macros ship on every plan; saved integrations scale from 5 to unlimited as you grow.