Airwave

Assistant vs the lineup builder

Airwave has two distinct AI systems — the in-the-loop chat and the autonomous durable lineup builder. How they differ, and what they share.

Airwave has two distinct AI systems, and they're easy to conflate because they share a toolbox. Keep them separate:

AI assistant (this section)AI lineup builder
What it isInteractive admin chat that builds channels one at a time, with you in the loopAutonomous, durable job that designs and builds a whole lineup (~50 channels) in one run
Gated byAn AiConnection assigned the chat role (isActive). Nothing else.WORKFLOW_ENABLED=1 and planner / worker connections
Runs onThe Vercel AI SDK, streamed live over /api/ai/chatThe Vercel Workflow SDK (durable, resumable, crash-surviving)
ApprovalEvery write is Approve / Deny in the chatRuns autonomously (the services skip the needsApproval wrapper); the start is confirmed once because a re-run wipes prior AI rows
Model roles usedactive (chat)planner (one big design call) + worker (per-channel loops)
Wherepackages/api/src/services/agent/{chat,agent-tools,tools}.tsapps/server/workflows/lineup.ts (+ import.ts)

What they share

Both systems use the same toolbox in tools.ts, and both stamp their output aiGenerated — so clear_ai_generated cleanly reverses whatever either one made. The difference is entirely in the harness around those tools: the assistant wraps them for approval and streams them to you live; the builder calls them directly and runs unattended.

Why the gates are different

The chat assistant is gated only by a chat-role AiConnection — add one and it works. The lineup builder additionally needs WORKFLOW_ENABLED=1 and planner / worker connections, because it runs on the durable Workflow SDK. If WORKFLOW_ENABLED is unset, the lineup builder is simply unavailable — but the chat assistant still works, because it never touched the workflow engine.

The durable builder is documented in full under Durable workflows (see the AI lineup builder).


See also: Durable workflows · The AI lineup builder · Building channels & packages

On this page