Skip to content

AI Operators

Zenvara treats an LLM call the same way it treats a database query: a typed step with declared inputs and outputs, logged prompt and response, composing with retries, secrets, and audit. These operators are native — not plugins or wrappers.

Operatorinvoke:ActionsWhat it does
Claudeclaude.*callAnthropic Claude — text generation and tool/function calling.
ChatGPTchatgpt.*callOpenAI GPT models.
Geminigemini.*callGoogle Gemini models.
Claude CLIclaude-cli.*invoke, start-sessionRun Claude Code autonomously inside a flow, with quota management and human-assist.
Web Searchweb-search.*searchDuckDuckGo, Google, StackOverflow, and Ollama-backed search providers.
using:
- zenvara/claude
steps:
- $summary:
invoke: claude.call
with:
SystemPrompt: "You are a concise analyst."
Prompt: "Summarise these orders in two paragraphs:\n${orders.rows}"

Outputs: content (generated text), stopReason, inputTokens, outputTokens, toolCalls (when function-calling). Reference them as ${summary.content}, ${summary.outputTokens}.

The model, key, and limits live on the environment, not in the flow — so the same flow can target a different model per environment:

Claude:
ApiKey: !secret # Anthropic API key (referenced as a secret)
Model: "claude-sonnet-4-20250514"
MaxTokens: 4096
TimeoutSeconds: 120
EnableCaching: true # emit cache_control breakpoints for cheaper multi-turn loops

ChatGPT and Gemini follow the same shape under their own environment keys.

The Claude operator supports structured content blocks (text, tool_use, tool_result) and a Tools list of tool definitions (Name, Description, InputSchema). This lets a flow run a full agentic tool loop where each tool result is fed back as a typed message — the model’s toolCalls output drives the next step.

Because the response is a typed value, the next step consumes it like any other:

- $tickets:
invoke: jira.search
with:
Jql: "${summary.content}" # AI output → next operator's input

That composition — AI output flowing into a database query, an HTTP call, or a filter: — is the point of native AI operators. See Authoring Flows for how values flow between steps.