CerebrixOSTrazio by CerebrixOS

← All guides

Create pipelines from the console, code or an assistant

You can set up Trazio three ways. They all do the same thing, with the same limits, so pick whichever suits you.

Best forHow
ConsoleYour first pipeline, and checking things by eyetrazio.cerebrixos.com/console
SDKScripts and repeatable setupWorkspaceClient in Python or Node.js
AssistantSetting up while you chatClaude or ChatGPT with workspace management switched on

Only a workspace admin can set things up. The console walks you through it step by step: see The guided setup. Teammates you invite as members connect an assistant and read the data they were given.

The templates

Each template sets the accepted data sources and the standard rules for you. You choose a name and a use case; everything else is fixed on the server.

TemplateUse it forRules it starts with
roboticsRobot state, faults, battery and motor data, MCAP recordingsphysical-ai
securityEndpoint, authentication and audit eventssecurity-endpoint
kubernetesKubernetes audit and Argo CD eventscloud-kubernetes
observabilityOpenTelemetry logs, metrics and traces, AI-agent runsobservability
videoRecorded footage: upload, scene search, playbacknone until live analysis is approved
liveA live camera, safety rules on what it sees, instant noticeslive video rules (need approval)

Video and live analysis use costly model inference and infrastructure the Trazio team sets up, so those parts start as approval requests: the pipeline is created now, and the costly settings are switched on after approval.

Trial limits

A new workspace has: up to 3 pipelines, 10,000 events a day per pipeline, and 7-day retention. When a pipeline reaches its daily limit, sending is refused with a clear message (HTTP 429) until the next day. Ask the Trazio team if you need more.

From the console

  1. Open trazio.cerebrixos.com/console and choose Continue with CerebrixOS.
  2. Pick what you want to watch, name the pipeline and choose where your data lives (United States or Canada). The region can't be changed later.
  3. Copy the collector token on the next page. It is shown once. It can send data from collectors and log shippers, and cannot read anything.
  4. On the pipeline page, press Get a data token and paste the ready-made commands. They already contain your own tenant and pipeline IDs.
  5. Under Options, switch rule packs and the pipeline on or off. Under Team, create an invite code for a teammate.
  6. To remove a pipeline, use Delete this pipeline at the bottom of its page and type its name to confirm. Turning a pipeline off only stops it accepting data; deleting removes the pipeline, its credentials and everyone's access, and frees the name. Stored events are not erased by either; contact support to have them purged.

From the SDK

Get a workspace API token from the console (Get a workspace API token). It works for an hour.

import os
from trazio_telemetry import WorkspaceClient

ws = WorkspaceClient(token=os.environ["TRAZIO_WORKSPACE_TOKEN"])

created = ws.create_pipeline("fleet", "robotics", region="us")   # protocol token is in created["protocol_token"], shown once
ws.update_pipeline("fleet", rule_packs=["standard/physical-ai@1.0.0"], enabled=True)
ws.update_pipeline("fleet", enabled=False)   # stop accepting data, keep everything else
# ws.delete_pipeline("fleet")                # remove it for good

invite = ws.invite(role="viewer")            # one-time code for a teammate
print(invite["code"])

data = ws.data_token("fleet")                # about an hour, one pipeline
# Use data["token"] as tenant_jwt in Client(...) to send and query events.
import { WorkspaceClient } from "trazio-telemetry";

const ws = new WorkspaceClient({ token: process.env.TRAZIO_WORKSPACE_TOKEN });
const created = await ws.createPipeline({ name: "fleet", template: "robotics", region: "us" });
const invite = await ws.invite({ role: "viewer" });
const data = await ws.dataToken("fleet");

Also available: workspace(), templates(), list_members(), remove_member(id), delete_pipeline(id). Errors raise WorkspaceError with status and code (for example pipeline_limit, exists, admin_required).

Over plain HTTP the same calls are GET /v1/workspace, POST /v1/workspace/pipelines, PATCH /v1/workspace/pipelines/{id}, DELETE /v1/workspace/pipelines/{id}?confirm={id}, POST /v1/workspace/invites, GET /v1/workspace/members, DELETE /v1/workspace/members/{id} and POST /v1/workspace/data-token, with Authorization: Bearer <workspace token>.

Options, dry runs and your own rules

Every option the guided setup shows is available in code. List them for a use case, check a change without making it, and build rules:

opts = ws.options("security")            # every option: label, type, range, tier, plus the rule builder's fields

# Check first. Nothing is created and every problem comes back with its path.
check = ws.create_pipeline("fleet", "security", dry_run=True, options={
    "notifications": {"enabled": True, "channels": [{"type": "slack", "url": "https://hooks.slack.com/services/T/B/x"}]},
    "correlation": {"time_window_seconds": 120},
    "ai": {"enabled": True},                      # costly: becomes an approval request, not applied
})
print(check["errors"], check["pending"])

ws.create_pipeline("fleet", "security", options={...})
view = ws.get_pipeline("fleet")                   # current settings, approval requests, view["rev"]
ws.update_pipeline("fleet", options={"correlation": {"time_window_seconds": 60}}, if_rev=view["rev"])

rules = {"name": "Many failures", "rules": [{"name": "Many failures", "severity": "high",
         "sources": ["windows.security"], "match": "all",
         "conditions": [{"field": "failed_attempts", "op": "at_least", "value": 4}]}]}
print(ws.preview_rules("fleet", rules))           # test events and results, nothing saved
ws.publish_rules("fleet", rules)                  # saved as a versioned pack and attached
const opts = await ws.options("security");
const check = await ws.createPipeline({ name: "fleet", template: "security", dryRun: true, options: { correlation: { timeWindowSeconds: 120 } } });

Options use the same nested shape in both languages (for example { "correlation": { "time_window_seconds": 120 } }). Free options apply when saved. Costly ones (live video, analysis, AI summaries, search by meaning, analytics export) are filed as approval requests instead of being applied: a dry run lists them under pending, and creating the pipeline returns how many were filed as pending_approvals. if_rev stops two people overwriting each other: a stale value fails with a conflict.

Over HTTP: GET /v1/workspace/options?goal=, GET /v1/workspace/pipelines/{id}, POST /v1/workspace/pipelines and PATCH /v1/workspace/pipelines/{id} (both accept options, dry_run, notification_secrets), and POST /v1/workspace/pipelines/{id}/rules/preview and /rules/publish.

From an assistant

Management is off by default. A normal connection only reads data, as the approval page says.

  1. Add https://trazio.cerebrixos.com/mcp as a connector in Claude or ChatGPT.
  2. On the approval page, tick Also let this assistant manage my Trazio workspace, then choose Continue with CerebrixOS. You must be an admin for it to take effect.
  3. Ask in plain language: "Create an observability pipeline called checkout", "Invite a teammate", "Who has access?"

The assistant can list templates and pipelines, create pipelines, invite members, list members and remove a member (it must ask you to confirm). It cannot make admins, change rules, or see your collector token. Use the console for those. Every change is logged, and your admin rights are re-checked on every call, so removing someone's admin role takes effect at once.

Sending data once it exists

Each guide shows the full path, with curl, Python, Node.js and collector examples: robotics, security, Kubernetes and application observability.