Operators
An operator is a single, reusable unit of analysis: a natural-language prompt paired with a typed output. Each operator detects, classifies, scores, extracts, or tags exactly one thing about a conversation. An operator describes what to analyse and how — not when, which is decided by the configuration that references it.
Output types
Every operator declares one output type from a fixed vocabulary. The type fixes the shape of the result object on every event the operator emits, so any consumer can handle a result generically once it knows the type — including results from operators you define yourself.
| Output type | Result shape | Use for |
|---|---|---|
classification |
{ "value": "string" } |
One value from a declared set |
boolean |
{ "value": true | false } |
Detected or not |
score |
{ "value": 0–100 } |
A numeric assessment within a range |
multi_tag |
{ "tags": ["a", "b"] } |
Zero or more values from a declared set |
extraction |
{ "value": "string", "found": true | false } |
A specific piece of information stated in the conversation |
text |
{ "value": "string" } |
Free-form generated text, for human consumption |
Each type carries type-specific output_config that both constrains the model and tells consumers what to expect before any results arrive:
classification—{ "values": ["a", "b", "c"] }, the full set of possible valuesscore—{ "min": 0, "max": 100 }, the declared rangemulti_tag—{ "tags": ["a", "b", "c"] }, the full tag setextraction—{ "description": "what to look for" }, an optional hintbooleanandtextneed no configuration
Confidence and reasoning
Every result also carries a confidence value between 0.0 and 1.0 — the model's self-assessed confidence. This is the universal field you can gate actions on, alongside the typed result.
When an operator sets include_reasoning, the model is also asked to justify each result, and a short reasoning string is populated on the event. The instruction is applied consistently across every operator that enables it, so the justification reads the same way whether the operator is platform-maintained or your own.
Model tier
Each operator runs on a declared model_tier:
fast— for high-frequency, latency-sensitive analysis, such as operators that run on every turn.standard— for quality over speed, such as analysis that runs once over the full transcript.
The operator declares only the tier; which model backs each tier is resolved by the platform.
Parameters
Parameters let an operator's prompt reference a value supplied where the operator is configured, rather than hard-coding it into the prompt. The same operator can then be deployed against different inputs across different configurations.
A parameter is declared on the operator and referenced in the prompt as {{parameters.<name>}}. Its value is supplied in the configuration's operator reference and resolved once, at session start, before any analysis runs. The kb_document parameter type resolves to a knowledge base document whose extracted text is substituted into the prompt — useful for running one operator, such as a protocol-adherence check, against each account's own protocol document.
Platform and custom operators
Platform operators are authored and maintained by Simwood and available to every account read-only; custom operators are defined by your account. Both share the same definition structure. A custom operator's name must be kebab-case, unique within your account, and must not collide with a platform operator's name.
Versioning
Operators are versioned. Editing a custom operator creates a new version rather than mutating the existing one, and a configuration's reference stays pinned to the version it was bound to — so a configuration's behaviour is stable across operator edits. Moving a configuration onto a newer operator version is always an explicit step. See Configurations for how references pin and upgrade.
API reference — OperatorsList, create, version, and retrieve operators.