How Wavo works — what it can and can't do
Wavo orchestrates: history (max 20) → tools (max 15 rounds, 30 calls/session) → streamed response. CAN: query, action, generate. CAN'T: voice TTS, cross-team data.
Written By Salvatore Sinigaglia
Last updated About 5 hours ago
Wavo orchestrates: history (max 20) → tools (max 15 rounds, 30 calls/session) → streamed response. CAN: query, action, generate. CAN'T: voice TTS, cross-team data.
How Wavo works — what it can and can't do
Wavo orchestrates each turn in three phases: reads bounded conversation context plus project/user memory facts, calls tools to fetch real data or take actions (
MAX_TOOL_ROUNDS=15per turn, with a cumulativeMAX_TOOL_CALLS_TOTAL=30per session), then streams response back. Verify exact context limits inapps/backend/src/services/chat/chat.service.tsandapps/backend/src/lib/wavo-config-defaults.ts.
Who is this for
Anyone trying to understand Wavo's capability limits before relying on it for important decisions.
The orchestration loop
For each user message:
1. Load bounded conversation context and saved memory facts2. Read system prompt: Wavo persona + platform knowledge + project instructions + user preferences + memory facts3. Pick model (per-session or workspace default)4. Tool round loop (up to 15 rounds per turn, capped at 30 total tool calls per session): a. Model decides: respond directly OR call a tool b. If tool call: execute tool (read data, take action, or request approval) c. Tool result fed back into context d. Loop (until model responds OR MAX_TOOL_ROUNDS=15 OR MAX_TOOL_CALLS_TOTAL=30)5. Stream final response word-by-word (UIMessage)6. Extract follow-ups (up to 3, max 80 chars each)7. Save message + token usage + credits chargedWhat Wavo CAN do
Read your team's data
Tools fetch live data from your campaigns, audiences, metrics, rules. Always cited (Wavo says "I checked..."). Read-only by default. See ai-104 data grounded.
Query analytics
- "What's my ROAS for X?"
- "Compare Meta vs Google CPC this month."
- "Which adset has worst CPA?"
Tools: get_performance_data, campaign_performance_summary, compare_tracker_meta, get_audience_insights, etc.
Create + manage rules
- "Create a rule that pauses adsets with CPA > 30."
- "List my active rules."
- "Turn off rule X."
Tools: create_automation_rule, list_automation_rules, toggle_automation_rule, update_automation_rule, delete_automation_rule. Most require approval (see ai-105).
Draft + manage campaigns
- "Draft a new campaign for ClientA targeting Italy."
- "Get my latest campaign draft."
Tools: create_campaign_draft, draft_get, draft_validate, duplicate_entity, update_entity_budget, toggle_entity_status.
Generate creative
- "Draft 3 ad copy variants."
- "Generate an image of [description]."
- "Remove background from this product photo."
Tools: generate_copy, generate_image, generate_video, remove_background, resize_image, analyze_existing_ad, analyze_landing_page.
Search + external info
- "Look up best practices for Reels ads in 2026."
Tool: web_search.
Open support tickets
- "I'm having trouble with X, can you escalate?"
Tool: create_support_ticket — creates a support ticket on your behalf (requires approval). Tickets are opened in Featurebase, Wevion's support and feedback platform.
What Wavo CANNOT do
Speak back via voice
Voice input is transcribe-only (apps/backend/src/routes/api/chat-voice.route.ts via Whisper). Wavo doesn't generate audio output. No TTS provider wired.
See other teams' data
Hard team isolation via team_id scoping. Wavo cannot see, query, or modify data outside your team.
Bypass approval for HIGH-risk actions
Every write/action tool runs in approval mode (mode: 'approval', requiresApproval: true in chat-tool-registry.ts). This includes:
create_automation_rule,delete_automation_rule,toggle_automation_rule,update_automation_rulecreate_campaign_draft,duplicate_entity,update_entity_budget,toggle_entity_statuscreate_support_ticket,connect_ad_account,disconnect_ad_account,deactivate_account_user
Even a lower-risk action like create_campaign_draft requires approval — it does not run immediately. Read tools (draft_get, draft_validate, list_automation_rules, get_performance_data, etc.) run without an approval card. Wavo presents an approval card; you click Execute or Reject. Approval cards expire after 30 minutes (ACTION_TTL_MS=1800000). See ai-105.
Expose secrets
Output sanitization (chat-security.ts sanitizeToolOutput()) redacts:
- Meta tokens starting with
EAA... - JWT tokens
- AWS keys starting with
AKIA... - Stripe keys
sk_.../pk_... - Google API keys
- Database connection strings
Both directions: secrets are stripped before being sent to the model AND before being displayed.
Ignore RBAC
Tool-level RBAC via chat-tool-rbac.ts: each tool checks user role. Viewer can't trigger write tools. Mediabuyer can't trigger admin-only actions. Role hierarchy enforced.
Run unbounded tool chains
Hard cap: MAX_TOOL_ROUNDS=15 per user turn, plus a cumulative MAX_TOOL_CALLS_TOTAL=30 per session. If Wavo needs more tool calls than the cap allows, it'll respond with what it has + recommend a follow-up query.
Keep infinite memory
MAX_HISTORY=20 messages. Older messages drop from context (still saved in DB for audit + review). For long-running projects: use ai-106 projects memory facts (max 20 per project).
Hard constants (verified)
Streaming behavior
Wavo streams responses as UIMessage parts (text, tool calls, follow-ups, structured data). The UI renders incrementally:
- First: thinking indicator
- Tool calls appear as they execute (with status pending → success / fail)
- Final text streams word-by-word
- Follow-up chips appear at end
If your connection drops mid-stream: the stream manager reconnects + replays missing parts (app.streamManager.resume(sessionId) in apps/backend/src/routes/api/chat.route.ts). No data loss.
Error handling
If a tool fails (API error, permission denied, validation):
- Tool output includes error message
- Wavo explains what failed + offers alternatives or asks for clarification
- Hard failures (model crash, network) surface via the chat route's stream error handling → user-friendly message
Common surprises
- "Why did Wavo only check 20 items?" —
DEFAULT_TOOL_LIMIT=20. Ask "show all" or "top 50" to widen. - "Why did Wavo stop calling tools?" — it hit
MAX_TOOL_ROUNDS=15for this turn or the cumulativeMAX_TOOL_CALLS_TOTAL=30for the session. Continue with a follow-up question. - "Why did the approval card disappear?" — 30-min ACTION_TTL expired. Re-trigger the action.
- "Why doesn't Wavo remember last week's chat?" —
MAX_HISTORY=20messages; older context drops. Use project memory facts for persistent context.
FAQ
How does Wavo process each message in Wevion?
Wavo orchestrates every turn in three phases: it loads bounded conversation context plus project and user memory facts, runs a tool round loop (capped at MAX_TOOL_ROUNDS=15 per turn, with a cumulative MAX_TOOL_CALLS_TOTAL=30 per session) to fetch real data or take actions, then streams the final response word-by-word as a UIMessage. It also extracts up to 3 follow-up suggestions and saves token usage and credits charged.
Why did Wavo stop after checking only 20 items?
Because Wevion sets DEFAULT_TOOL_LIMIT=20 — the default number of result rows per tool query. To widen it, ask Wavo to "show all" or "top 50" (the ceiling is MAX_TOOL_LIMIT=50). Similarly, if Wavo stops mid-task, it hit MAX_TOOL_ROUNDS=15 for the turn (or the cumulative MAX_TOOL_CALLS_TOTAL=30 for the session); continue with a follow-up question.
Why doesn't Wavo remember an earlier part of my conversation?
Wavo keeps only the last 20 messages in context (MAX_HISTORY=20); older messages drop from context but stay saved in the database for audit and review. For long-running projects, rely on project memory facts (up to 20 per project) to carry persistent context across sessions rather than expecting the full history to remain in view.
Why did my Wavo approval card disappear?
Approval cards expire after 30 minutes (ACTION_TTL_MS=1800000). If the card for a high-risk action like update_entity_budget or duplicate_entity vanished, its TTL lapsed — simply re-trigger the action to get a fresh approval card. Wavo requires this explicit confirmation and cannot bypass approval for HIGH-risk operations.
What happens if my connection drops while Wavo is streaming?
No data is lost. Wevion's stream manager reconnects and replays the missing UIMessage parts (app.streamManager.resume(sessionId)), so the response continues from where it left off. If a tool itself fails, Wavo surfaces the error, explains what went wrong, and offers alternatives or asks for clarification rather than fabricating a result.