Preview
Operations AI is an experimental preview
A read-only assistant that answers questions about a single project's events, workflows and projections. It is unfinished, off by default, and nothing else in the platform depends on it.
Status
Work in progress — do not build on it yet
Operations AI is the one surface in useEventStack that is not finished. It is disabled by default, its answers can be incomplete or wrong, and its shape may change or be withdrawn between releases. Every other capability described in these docs is implemented and covered by tests.
We are publishing it in this state deliberately rather than hiding it, because it is visible in the dashboard. If you see it there, you should know exactly how much weight it carries.
| Aspect | State |
|---|---|
| Conversation storage and history | Implemented and project-scoped |
| Read-only tool calls against live data | Implemented |
| Access control and project isolation | Implemented and tested |
| Answer quality | Unverified — no evaluation suite |
| Enabled by default | No |
| Rate limits and cost controls | Not implemented |
| Streaming responses | Not implemented |
| Write or remediation actions | Not implemented, and not planned for the preview |
What it can do
When enabled, the assistant answers questions by calling a fixed set of read-only tools against the project you have selected:
| Tool | Reads |
|---|---|
query_events | The event ledger |
list_workflows | Workflow definitions |
list_contracts | Event contracts |
query_projections | Operational projections |
list_custom_actions | Custom action names and status |
get_failed_events | Failed events awaiting triage |
The dashboard shows which tools were used to produce each answer, so you can check the reasoning against the same data yourself.
What it cannot do
- Change anything. There is no write tool. It cannot emit events, edit workflows, upload actions, trigger replays, or alter billing.
- Cross a project boundary. Every tool call is scoped to the project in the request, and the project is verified against your organization before any query runs.
- Read another tenant's data. The same isolation that governs the API governs the assistant.
- Read your custom action source or secrets. It sees action names and status, never WASM bytes or secret values.
- Be driven by an API key. It requires a signed-in user session; machine credentials are refused with
403.
Enabling it
Self-hosted deployments turn it on with two environment variables:
USEEVENTSTACK_AI_ASSISTANT_ENABLED=true
USEEVENTSTACK_AI_ASSISTANT_MODEL_ID=anthropic.claude-3-haiku-20240307-v1:0The API process also needs AWS credentials that can invoke that Bedrock model in its region. There is no other supported provider yet.
Because there are no rate limits or spend controls in the preview, treat model cost as unbounded and enable it only where you can watch the bill.
When it is off
The surface reports its own state rather than failing on first use. The dashboard asks before it offers you an input box:
GET /ai/status
{
"enabled": false,
"status": "not_configured",
"stage": "experimental",
"read_only": true,
"message": "The Operations AI assistant is an experimental preview and is not enabled on this deployment."
}Sending a message anyway returns a specific error, not a generic failure:
POST /ai/chat -> 503
{
"error": {
"code": "ai_assistant_not_configured",
"message": "The Operations AI assistant is an experimental preview and is not enabled on this deployment. Everything else in the workspace is unaffected."
}
}If the assistant is enabled but its model cannot be reached, the code isai_assistant_unavailable, also 503. Neither case is reported as an internal error, because neither means the platform is broken.
Access control
The assistant is the most restricted surface in the API:
| Requirement | Behavior |
|---|---|
| Signed-in user session | Required. An API key is refused with 403. |
| Anonymous request | 401 |
| Organization membership | Checked, including MFA enforcement and session expiry |
| Project header | Mandatory, and verified to belong to your organization |
| Foreign project id | 403 project_access_denied, logged as a blocked cross-project access |
| Conversation access | Scoped to the owning user, organization and project |
Data handling
- Conversations are stored in your organization's Postgres rows, scoped to your user and project, and are readable and deletable through
/ai/conversations. - When enabled, message content and the results of tool calls are sent to the configured AWS Bedrock model in order to produce an answer.
- Nothing is sent anywhere while the assistant is disabled, which is the default.
- Tool results are the same rows the API would return to you directly — the assistant has no privileged view.
Roadmap
Before this stops being labelled a preview it needs, at minimum: an evaluation suite for answer quality, per-organization rate limits and spend caps, streaming responses, and a documented policy for what leaves your deployment. Until those exist, treat every answer as a starting point for your own query rather than an authoritative result.
Planned work is tracked in the roadmap. Nothing on this page describes behavior that is not in the code today.