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.
Operators
Section titled “Operators”| Operator | invoke: | Actions | What it does |
|---|---|---|---|
| Claude | claude.* | call | Anthropic Claude — text generation and tool/function calling. |
| ChatGPT | chatgpt.* | call | OpenAI GPT models. |
| Gemini | gemini.* | call | Google Gemini models. |
| Claude CLI | claude-cli.* | invoke, start-session | Run Claude Code autonomously inside a flow, with quota management and human-assist. |
| Web Search | web-search.* | search | DuckDuckGo, Google, StackOverflow, and Ollama-backed search providers. |
Claude — example
Section titled “Claude — example”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}.
Environment config
Section titled “Environment config”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 loopsChatGPT and Gemini follow the same shape under their own environment keys.
Tool / function calling
Section titled “Tool / function calling”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.
Treating AI output as data
Section titled “Treating AI output as data”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 inputThat 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.