Build
Flows & model providers
Connect any OpenAI-compatible provider, keep the key write-only, and control the agent's behavior.
A flow pairs a model provider with governance: which model answers, with which parameters, and which tools it may call. Flows are created and managed under Flows in the console.
Providers
Presets are available for OpenAI, OpenRouter, Groq, Z.AI, and Mistral, and any other OpenAI-compatible endpoint works via a custom base URL. The platform speaks the chat-completions protocol to the provider — if your provider exposes it, it works.
Write-only provider keys
- The provider API key is encrypted (AES-256-GCM) the moment the flow is saved and is injected server-side only when the flow runs.
- No console screen, API response, or log ever contains the key after saving — editing a flow leaves the key field empty, and an empty field means 'keep the stored key'.
- Replacing the key re-encrypts a new secret; old secret rows are retained append-only, like rotation history.
Parameters
Model name is required; timeout, temperature, and max tokens are optional. Changes apply immediately — the runtime cache is invalidated on every update, so disabling a flow stops traffic within a second, not when a cache expires.
Disabled flows fail closed: the API and every channel refuse with flow_disabled instead of guessing.
Per-flow response views
The same published tool can read differently per flow. On a flow's tool binding, open Response view: run the tool once to fetch a real sample (no copy-paste), tick the fields the model should read on the derived field tree, pick List or Table, and cap long arrays with a max-items limit — the rendered text previews live from the real response. A Custom mode exposes the underlying template ({{$.name}} inserts a field, {{#each $.items limit=50}}…{{/each}} repeats per array item) with clickable field pills for composing by hand. Applied at call time on every execution through that binding.