Skip to content
← All platform products

Workflows & Agents

Automate the response, and keep every step accountable.

Workflows react to a video alert, a risky sign-in, a cloud anomaly, a data condition, a schedule or a webhook, and act across the platform: notify, open a case or a ticket, run SQL or a pipeline, revoke access, lock a door. Agents do the same under their own identity and budget. Every action is authorized as whoever started it, can be simulated first, and is recorded.

Download the datasheet(PDF)

Investigator console
The trace of an access review: reading the finance lead’s grants was allowed, and revoking a grant was held for human approval, with the reason recorded for each step.The trace of an access review: reading the finance lead’s grants was allowed, and revoking a grant was held for human approval, with the reason recorded for each step.
Every step recorded; the destructive one waits for a person. Shown with demo data.

The advantages

The outcomes this product is built around.

  • See what it would do first

    A dry run plans and authorizes every action exactly as a real run would, and takes none of them.

  • Never more than the person behind it

    Each workflow action is authorized as the triggering principal, and an agent acts within the narrower of its own and its user’s permissions.

  • Destructive steps wait for a person

    Revoking, deprovisioning and other destructive or costly actions stop for human approval, with a timeout and escalation.

  • Stopped within seconds

    A kill switch per agent, per tenant or globally halts an agent before its next step, within 5 seconds.

for a kill switch to stop an agent
< 5 s
reference agents, from security analyst to offboarding
6
side effects from a dry run
0

See it in the console

Real screens from the product, not mock-ups.

A held step

An access review whose revocation is waiting for a person, with every step recorded.

Investigator console
The trace of an access review: reading the finance lead’s grants was allowed, and revoking a grant was held for human approval, with the reason recorded for each step.The trace of an access review: reading the finance lead’s grants was allowed, and revoking a grant was held for human approval, with the reason recorded for each step.
Every step recorded; the destructive one waits for a person. Shown with demo data.

A workflow’s definition

Trigger, condition and actions, each with the permission it is authorized against.

Investigator console
The workflow "Contain a high-risk sign-in": an identity-risk trigger, a condition on risk, and three actions (notify, create a case, revoke the session), each with the permission it is authorized against and what happens on error.The workflow "Contain a high-risk sign-in": an identity-risk trigger, a condition on risk, and three actions (notify, create a case, revoke the session), each with the permission it is authorized against and what happens on error.
Trigger, condition and actions, each with the permission it needs. Shown with demo data.

Reference agents

Six presets, each with the permissions it needs and whether it waits for approval.

Investigator console
The six reference agents (Security Analyst, Ops Responder, FinOps Optimizer, Data Steward, Access Reviewer, Onboarding and Offboarding), each with what it does, the permissions it needs and whether its actions wait for approval.The six reference agents (Security Analyst, Ops Responder, FinOps Optimizer, Data Steward, Access Reviewer, Onboarding and Offboarding), each with what it does, the permissions it needs and whether its actions wait for approval.
Six reference agents, each with the permissions it needs. Shown with demo data.

An agent’s limits

Its own principal and scopes, budgets, blast radius and tools.

Investigator console
The Access Reviewer agent: its own principal and scopes, step and blast-radius limits, token budget, destructive steps waiting for a human, and its three tools with the permission each needs.The Access Reviewer agent: its own principal and scopes, step and blast-radius limits, token budget, destructive steps waiting for a human, and its three tools with the permission each needs.
An agent with its own identity, limits and tool list. Shown with demo data.

How it fits together

What happens between your request and a running resource.

How an action is takenAn event from any pillar starts a workflow, or a person starts an agent. Each step is planned, checked against the guardrails and authorized against the policy decision point as whoever started it. Allowed steps act through the pillar or the connector that owns them; destructive ones wait for a person; every step is recorded.What starts itThe platformWhat it acts onallowedallowedAn eventalert · risk · schedule · webhookA personruns an agentWorkflowconditions · actionsAgent runtimetools · budget · memoryAuthorize each stepas whoever started itPillarsidentity · cloud · video · dataConnectorsSlack · tickets · doors

An event from any pillar starts a workflow, or a person starts an agent. Each step is planned, checked against the guardrails and authorized against the policy decision point as whoever started it. Allowed steps act through the pillar or the connector that owns them; destructive ones wait for a person; every step is recorded.

  • An event: alert · risk · schedule · webhook (What starts it)
  • A person: runs an agent (What starts it)
  • Workflow: conditions · actions (The platform)
  • Agent runtime: tools · budget · memory (The platform)
  • Authorize each step: as whoever started it (The platform)
  • Pillars: identity · cloud · video · data (What it acts on)
  • Connectors: Slack · tickets · doors (What it acts on)
  • An event to Workflow
  • A person to Agent runtime
  • Workflow to Authorize each step
  • Agent runtime to Authorize each step
  • Authorize each step to Pillars: allowed
  • Authorize each step to Connectors: allowed
How an action is taken

Who it is for

The teams and situations this product was built for.

  • Security operations

    A consistent first response to a risky sign-in or a camera going dark, at any hour.

    Workflows that notify, open a case and contain access, simulated before they are switched on.

  • IT and HR

    Leavers whose data, door and cloud access all end on the same day.

    An offboarding agent that revokes across four pillars in one traced run, each destructive step approved by a person.

  • Platform and finance teams

    Idle resources found and stopped without handing a bot the keys.

    A FinOps agent with a spend cap that proposes resizes and stops, and waits for approval to make them.

What it does

The core capabilities, live in the product today.

  • Triggers from every pillar

    Schedule, data condition, video alert, identity risk, cloud anomaly, webhook or manual, with conditions written over any pillar’s data.

    A workflow starts from the event that matters and checks its conditions before it does anything, so a high-risk sign-in from a finance account can be handled differently from the rest.

  • Actions across the platform and beyond

    Notify, create a case, open a ticket, call an API, run SQL or a pipeline, provision and deprovision, revoke access, disable an account, lock a door.

    Connectors reach email, SMS, push, Slack, Teams and webhooks; PagerDuty and Opsgenie; ServiceNow, Jira Service Management, Zendesk and Freshservice; door control, PA, radio and SNMP; and generic HTTP, MQTT and message queues.

  • Build visually or in code, versioned

    Build a workflow in the console — a live diagram of trigger, conditions and actions, reordered by drag or by keyboard — or keep the same definition in code, with versions, rollback and a run history recording inputs and outputs.

    The builder and the API write one structure, so a workflow made in either is the same workflow. Publishing a change makes a new version; rolling back republishes an earlier one as the next version, so the history is never rewritten.

  • Approvals and error handling

    Human approval gates with timeout and escalation, and per-action retry, compensate or escalate when something fails.

    Each action says what happens if it fails. A refused or failed step is recorded as such in the run, and the run reports what was and was not done.

  • Agents with their own identity

    An agent is a real principal with scopes, credentials and a budget, a registry of tools each declared with a schema and a permission, and memory.

    The runtime plans, calls tools, keeps short-term context and long-term memory in the lakehouse, retries and times out. Agents are versioned with staged rollout and rollback, and six reference agents install from a catalogue.

  • Guardrails on every run

    Tool allow-lists, spend caps, rate limits, blast-radius limits on destructive actions, hard-stopped budgets and a full replayable trace.

    Every reasoning step and tool call is recorded with its decision, so a run can be replayed and reviewed. A budget in tokens or currency stops the run when it is spent.

The ideas behind it

The words this page uses, explained once.

Trigger
What starts a workflow: a schedule, a data condition, a video alert, an identity risk, a cloud anomaly, a webhook or a person.
Dry run
A run that plans and authorizes every action as a real one would, and takes none of them.
Agent identity
The principal an agent acts as, with its own scopes, credentials and budget, separate from the person who runs it. Read more: Agent identity
Blast radius
The most destructive actions an agent may take in one run. One more is refused.

In depth

The detail an evaluation asks for.

Authorization per action

Approving a workflow is consent to the workflow, not permission for its actions. Each action is asked about separately, as the principal behind the run, and an agent can never exceed its own identity’s permissions.

Budgets that stop

Spend caps and rate limits apply per agent, and a token or currency budget hard-stops a run when it is spent rather than warning after the fact.

A record of every step

Workflow runs keep their inputs and outputs, and agent runs keep a replayable trace of every reasoning step and tool call with its decision.

How it works

  1. API

    Define it

    Write the trigger, conditions and actions as a definition, with what each action does on error.

  2. Console

    Simulate it

    Run it dry and read what every step would do and whether it would be allowed.

  3. Console

    Install an agent

    Pick a reference agent, give it its own principal and scopes, and set its budget.

  4. Console

    Review the trace

    Read each run step by step, and see which steps are waiting for a person.

In code

The same task in the CLI and both SDKs. Every call shown exists in the API.

prx CLI

Define a workflow and simulate it, then give an agent its own identity and run it

prx CLI
prx opsintel workflow create --body '{"slug":"contain-risky-sign-in","name":"Contain a high-risk sign-in","owner":"prx:northwind:iam:_:user:a.ferreira","trigger":{"type":"identity_risk","config":{"band":"high"}},"actions":[{"type":"notify","config":{"channel":"security-oncall"}},{"type":"revoke_access","config":{"resource":"prx:northwind:iam:_:session:latest"}}]}'prx opsintel workflow run contain-risky-sign-in --body '{"dry_run":true}'prx identity agent create --body '{"name":"security-analyst","acts_for":"prx:northwind:iam:_:user:a.ferreira","scopes":["platform:alerting:manage","platform:alerting:read","platform:ask:query","video:fleet:search"]}'prx opsintel agent agents-install --body '{"slug":"security-analyst","principal":"prx:northwind:iam:_:agent_identity:security-analyst","scopes":["platform:alerting:manage","platform:alerting:read","platform:ask:query","video:fleet:search"]}'prx opsintel agent run security-analyst --body '{"goal":"Summarise what is firing","plan":[{"tool":"read_alerts","inputs":{"since":"24h"}}]}'

TypeScript SDK

Define a workflow and simulate it, then give an agent its own identity and run it

TypeScript SDK
await client.opsintel.workflow.create({ slug: 'contain-risky-sign-in', name: 'Contain a high-risk sign-in', owner: me, trigger: { type: 'identity_risk', config: { band: 'high' } }, actions: [{ type: 'notify', config: { channel: 'security-oncall' } }, { type: 'revoke_access', config: { resource: session } }] });const { steps } = await client.opsintel.workflow.run('contain-risky-sign-in', { dry_run: true });const scopes = ['platform:alerting:manage', 'platform:alerting:read', 'platform:ask:query', 'video:fleet:search'];const identity = await client.identity.agent.create({ name: 'security-analyst', acts_for: me, scopes });await client.opsintel.agent.agentsInstall({ slug: 'security-analyst', principal: identity.urn, scopes });const run = await client.opsintel.agent.run('security-analyst', { goal: 'Summarise what is firing', plan: [{ tool: 'read_alerts', inputs: { since: '24h' } }] });

Python SDK

Define a workflow and simulate it, then give an agent its own identity and run it

Python SDK
client.opsintel.workflow.create({"slug": "contain-risky-sign-in", "name": "Contain a high-risk sign-in", "owner": me, "trigger": {"type": "identity_risk", "config": {"band": "high"}}, "actions": [{"type": "notify", "config": {"channel": "security-oncall"}}, {"type": "revoke_access", "config": {"resource": session}}]})steps = client.opsintel.workflow.run("contain-risky-sign-in", {"dry_run": True})["steps"]scopes = ["platform:alerting:manage", "platform:alerting:read", "platform:ask:query", "video:fleet:search"]identity = client.identity.agent.create({"name": "security-analyst", "acts_for": me, "scopes": scopes})client.opsintel.agent.agents_install({"slug": "security-analyst", "principal": identity["urn"], "scopes": scopes})run = client.opsintel.agent.run("security-analyst", {"goal": "Summarise what is firing", "plan": [{"tool": "read_alerts", "inputs": {"since": "24h"}}]})

The difference

The way this job usually goes, and the way it goes here.

The usual way

An automation account with standing admin rights.

Every action authorized as the person or agent that started it.

Find out what a new automation does when it runs for real.

A dry run that plans and authorizes every step and changes nothing.

A bot that can delete anything it is pointed at.

Blast-radius limits, budgets and human approval on destructive steps.

Works with your tools

Every surface below drives the same product — script it, click it, or hand it to your existing tooling.

  • Investigator console
  • API
  • prx CLI
  • TypeScript SDK
  • Python SDK
  • Slack, Teams, PagerDuty, ServiceNow and Jira

Questions, answered

How are workflows written?

As definitions through the API, CLI and SDKs, which you can keep in version control. The console shows each workflow with its definition, dry runs, run history and versions.

What can an agent do without asking?

Only what its own scopes and its user’s permissions both allow. Destructive or high-cost actions wait for a person, and a blast-radius limit caps how many it may take in one run.

Does an agent need a language model?

No. You can give an agent its plan, or let a model-driven planner propose the tool calls; the proposals are held to the same guardrails and widen nothing.

How do we stop one?

A kill switch per agent, per tenant or globally takes effect within 5 seconds, before the agent’s next step.

How is it priced?

Workflows are billed per 1,000 executions and agents per run, at published rates in Platform Credits. A dry run is free. The rates are on the pricing page.

Start with ProjectX today.

Create a company in minutes and add this product to your invoice at the published rate.

Workflows & Agents · ProjectX