ArcFlow
Company
Managed Services
Markets
  • News
  • LOG IN
  • GET STARTED

OZ brings Visual Intelligence to physical venues, a managed edge layer that lets real-world environments see, understand, and act in real time.

Talk to us

ArcFlow

  • World Models
  • Sensors

Managed Services

  • OZ VI Venue 1
  • Case Studies

Markets

  • Sports
  • Broadcasting
  • Robotics

Company

  • About
  • Technology
  • Careers
  • Contact

Ready to see it live?

Talk to the OZ team about deploying at your venues, from a single pilot match to a full regional rollout.

Schedule a deployment review

© 2026 OZ. All rights reserved.

LinkedIn
ArcFlow Docs
Start
  • Quickstart
  • Installation
  • Bindings
  • Platforms
  • Get Started
  • Cookbook
Concepts
  • World Model
  • Graph Model
  • Evidence Model
  • Observations
  • Confidence & Provenance
  • Proof Artifacts & Gates
  • SQL vs GQL
  • Graph Patterns
  • Parameters
  • Query Results
  • Persistence & WAL
  • Snapshot-Pinned Reads
  • Error Handling
  • Execution Models
  • Causal Edges
  • Adapter Discipline
  • Time Decay
  • Layers
  • 1. World Store
  • 1a. World Store · Smart Reader
  • 2. Perception Lake
  • 3. World Graph
  • 4. Query Engine
  • 5. Live Surface
  • 6. Event Bus
  • 7. Behavior Engine
  • 8. Algorithm Library
  • Virtual Computed Columns
  • Threading Model
  • Typed ID Contract
WorldCypher
  • Overview
  • Execution Options
  • Statements
  • MATCH
  • WHERE
  • RETURN
  • OPTIONAL MATCH
  • CREATE
  • SET
  • MERGE
  • DELETE
  • REMOVE
  • Composition
  • WITH
  • UNION
  • UNWIND
  • CASE
  • Schema
  • Schema Overview
  • Indexes
  • Constraints
  • Functions
  • Built-in Functions
  • Aggregations
  • Procedures
  • Shortest Path
  • EXPLAIN
  • PROFILE
  • Temporal Queriesfacet
  • Spatial Queriesfacet
  • Algorithmsfacet
  • Triggers
Capabilities
  • Live Queries
  • Vector Search
  • Trusted RAG
  • Spatial Knowledge
  • Temporal
  • Behavior Graphs
  • Graph Algorithms
  • Skills
  • CREATE SKILL
  • PROCESS NODE
  • REPROCESS EDGES
  • Sync
  • Programs
  • GPU Acceleration
  • Agent-Native
  • MCP Server
  • Event Sourcing
  • Intent Relay
  • Event Bus
Use Cases
  • Agent Tooling
  • Trusted RAG
  • Knowledge Management
  • Behavior Graphs
  • Autonomous Systems
  • Physical AI
  • Digital Twins
  • Robotics & Perception
  • Sports Analytics
  • Grounded Neural Objects
  • Fraud Detection
Walkthroughs
    Guides
  • Agent Integration
  • Building a World Model
  • Modeling a Social Graph
  • Build a RAG Pipeline
  • Using Skills
  • Behavior Graphs
  • Swarm & Multi-Agent
  • Fleet Coordination
  • Migrate from Cypher / Neo4j
  • From SQL to GQL
  • Filesystem Workspace
  • Data Quality
  • Code Intelligence
  • Scale Patterns
  • v0.7 → v0.8 Lakehouse Fast-Path
  • Tutorials
  • Knowledge Graph
  • Entity Linking
  • Vector Search
  • Graph Algorithms
  • Recipes
  • CRUD
  • Multi-MATCH
  • MERGE (Upsert)
  • Full-Text Search
  • Batch Projection
  • Multi-Source Observation
  • Sports Analytics
Operations
  • CLI
  • REPL Commands
  • Snapshot & Restore
  • Filesystem Projection
  • Plugin Management
  • Agent Governance
  • Server Modes & PG Wire
  • Persistence (ops)
  • Import & Export
  • Deployment
  • Deployment Modes
  • Daemon (UDS)
  • Why not Docker
  • Architecture
  • Engine Architecture
  • Cloud Architecture
  • Sync Protocol (Deep Dive)
  • World Graph Substrate (Preview)
Reference
  • TypeScript API
  • Glossary
  • Naming & Domain Map
  • Data Types
  • Operators
  • Error Codes
  • GQL Reference
  • Known Issues
  • Versioning
  • Licensing
  • Conformance
  • GQL Conformance
  • openCypher TCK
  • Extension Regressions
GQL Reference
    Conformance
  • Conformance Dashboard
  • openCypher TCK Results
  • Extension Regressions
  • Features
  • MATCH Basic
  • CREATE Nodes Edges
  • SET REMOVE Properties
  • DELETE Detach DELETE
  • RETURN WITH WHERE
  • Order BY Limit Skip
  • Order BY Nulls First Last
  • UNWIND
  • Aggregate Functions
  • OPTIONAL MATCH
  • Variable Length Paths
  • Label OR AND NOT Expressions
  • Label Wildcard
  • Quantified Path Sugar
  • Path Modes Walk Trail Simple Acyclic
  • Shortest Path Variants
  • IS Labeled Predicate
  • Element ID Function
  • IS Type Predicate
  • Binary Literals
  • Line Comments Solidus
  • Line Comments Minus
  • GQLSTATUS Result Codes
  • GQL Error Code Mapping
  • Transaction Control Syntax
  • SET Session
  • Conditional Execution WHEN THEN ELSE
  • RETURN NEXT Pipeline
  • Primary Key Constraint
  • Unique Constraint
  • Deterministic MERGE Via PK
  • Undirected Edge MATCH
  • Cast Type Conversion
  • GQL Directories
  • Multiple Labels Per Node
  • GQL Flagger
  • NEXT Linear Composition
  • Cardinality Function
  • INT64 BIGINT Type Names
  • FLOAT64 Double Type Names
  • Log10 Log2 Functions
  • Trim Leading Trailing Both
  • FILTER Clause
  • LET Statement
  • Group BY Explicit
  • EXCEPT SET Operations
  • INTERSECT SET Operations
  • ALL Different Predicate
  • Same Predicate
  • Property Exists Function
  • Path Variable Binding
  • USE Graph Clause
  • FOR IN List
  • Typed Temporal Literals
  • Session SET Value Params
  • Typed List Annotations
  • arcflow.cosine() function
  • arcflow.embed() function
  • arcflow.similar() procedure
  • arcflow.graphrag() procedure
  • ArcFlow Extensions
  • LIVE Queries
  • Triggered Write-Back Views
  • Evidence Algebra
  • Relationship Skills
  • AI Function Namespace
  • Graph Embedding Algorithms
  • ASOF JOIN
  • Durable Workflows
  • Incremental Z-Set Engine
  • GPU GraphBLAS
  • Triggers
  • HNSW Vector Index
  • Extensions Moat

Robotics & Perception

Robotics perception is the process of turning sensor data — lidar returns, camera detections, radar contacts — into a structured, queryable model of the world the robot can act on. Neural world models and robotics simulators handle the generative prediction side: action-conditioned simulation, synthetic training data, policy rollouts. But predictions are ephemeral. ArcFlow is the persistence tier — the operational world model that stores what the robot actually encountered, at what confidence, from which sensor, queryable at any sequence checkpoint.

ArcFlow runs in-process alongside the robot's software stack — no network round-trip between sensing and decision-making.

The perception pipeline as a world model#

Sensors        →    ArcFlow World Model    →    Planning / Control
────────            ────────────────────        ──────────────────
lidar               nodes: entities             spatial queries
camera              edges: relationships         temporal replay
radar               _confidence scores           confidence filters
IMU                 _observation_class           graph algorithms
GPS                 spatial index (ArcFlow Spatial Index)      live triggers

Every sensor reading flows into the world model as a versioned mutation. The history of every entity is preserved. Confidence is tracked per observation. The planning layer reads from a single, consistent source — not a patchwork of ROS topics and CSV logs.

Building the perceptual world model#

-- Entities from sensor fusion
CREATE (p1:Entity {
  track_id: 'TRK-001',
  class: 'pedestrian',
  x: 5.2, y: 0.8, z: 0.0,
  vx: 0.3, vy: -0.1, vz: 0.0,
  _observation_class: 'observed',
  _confidence: 0.96
})
 
CREATE (p2:Entity {
  track_id: 'TRK-002',
  class: 'vehicle',
  x: 12.0, y: 3.1, z: 0.5,
  vx: 2.1, vy: 0.0, vz: 0.0,
  _observation_class: 'observed',
  _confidence: 0.91
})
 
-- Occlusion — predicted entity behind another
CREATE (p3:Entity {
  track_id: 'TRK-003',
  class: 'unknown',
  x: 14.5, y: 3.1, z: 0.0,
  _observation_class: 'predicted',
  _confidence: 0.38
})
 
-- Sensor provenance on every detection
CREATE (lidar:Sensor {id: 'LIDAR-FRONT', type: 'lidar', range_m: 100})
CREATE (lidar)-[:DETECTED {
  at: timestamp(),
  range_m: 5.8,
  intensity: 0.87,
  _confidence: 0.96
}]->(p1)

Spatial perception queries#

-- All entities within 20m (k-nearest, ArcFlow Spatial Index backed)
CALL algo.nearestNodes(point({x: 0.0, y: 0.0}), 'Entity', 50)
  YIELD node AS e, distance
WHERE distance < 20.0
RETURN e.track_id, e.class, e._observation_class, e._confidence, distance
ORDER BY distance
 
-- Trusted entities only (observed, high confidence) — safety-critical filter
CALL algo.nearestNodes(point({x: 0.0, y: 0.0}), 'Entity', 50)
  YIELD node AS e, distance
WHERE distance < 15.0
  AND e._observation_class = 'observed'
  AND e._confidence > 0.85
RETURN e.track_id, e.class, distance
 
-- Frustum: what is in the forward field of view?
CALL arcflow.scene.frustumQuery(0, 0, 0.5, 1, 0, 0, 60, 0.5, 50)
  YIELD node_id, label, x, y, z
 
-- Line-of-sight: is TRK-002 visible from current position?
CALL arcflow.scene.lineOfSight(ego_id, track_002_id)
  YIELD has_los, note

Temporal replay and diagnosis#

-- Where was entity TRK-001 at a recent checkpoint?
MATCH (e:Entity {track_id: 'TRK-001'}) AS OF seq 400
RETURN e.x, e.y, e.vx, e.vy
 
-- Trajectory over the last 2 seconds
MATCH (e:Entity {track_id: 'TRK-001'}) AS OF seq 500
RETURN e.x, e.y, e._confidence
 
-- Diagnose a near-miss: replay the world state at moment of incident
MATCH (e:Entity) AS OF seq 4821
RETURN e.track_id, e.class, e.x, e.y, e._observation_class, e._confidence

Live safety systems#

import { open } from '@ozinc/arcflow'
 
const db = open('./data/robot-world-model')
 
// Hard stop: any high-confidence entity within 2m emergency radius
const safetyMonitor = db.subscribe(
  `CALL algo.nearestNodes(point({x: 0, y: 0}), 'Entity', 10)
   YIELD node AS e, distance
   WHERE distance < 2.0
     AND e._observation_class = 'observed'
     AND e._confidence > 0.8
   RETURN e.track_id, e.class, distance`,
  (event) => {
    if (event.added.length > 0) {
      triggerEmergencyStop()
    }
  }
)
 
// Slow zone: any entity entering a 5m caution radius
const cautionMonitor = db.subscribe(
  `CALL algo.nearestNodes(point({x: 0, y: 0}), 'Entity', 20)
   YIELD node AS e, distance
   WHERE distance < 5.0 AND distance >= 2.0
     AND e._observation_class IN ['observed', 'inferred']
   RETURN e.track_id, distance`,
  (event) => {
    if (event.added.length > 0) {
      reduceSpeed(event.added[0].get('distance'))
    }
  }
)

Multi-robot coordination#

-- Find robots within communication range of each other
MATCH (a:Robot)-[:COMMS_WITH]->(b:Robot)
WHERE a.id <> b.id
RETURN a.id, b.id
 
-- Assign the nearest available robot to a task
MATCH (task:Task {status: 'unassigned'})
CALL algo.nearestNodes(point({x: task.x, y: task.y}), 'Robot', 5)
  YIELD node AS robot, distance
WHERE robot.status = 'idle'
WITH robot, task, distance
ORDER BY distance LIMIT 1
SET robot.status = 'assigned', task.status = 'assigned'
CREATE (robot)-[:EXECUTING]->(task)
RETURN robot.id, task.id, distance
 
-- Fleet-wide health: centrality-based criticality
CALL algo.pageRank()
YIELD nodeId, score
MATCH (r:Robot) WHERE id(r) = nodeId
RETURN r.id, r.status, r.battery_pct, score
ORDER BY score DESC

Track lifecycle — observed to confirmed to lost#

-- Promote a predicted track to observed when confidence exceeds threshold
MATCH (e:Entity {track_id: 'TRK-003'})
WHERE e._confidence >= 0.80
SET e._observation_class = 'observed'
 
-- Mark a track as lost (no detection in last 500ms)
MATCH (e:Entity)
WHERE NOT EXISTS {
  MATCH ()-[d:DETECTED]->(e)
  WHERE d.at > (timestamp() - 500)
}
SET e._observation_class = 'predicted', e._confidence = e._confidence * 0.85
 
-- Clean up tracks that have been lost too long
MATCH (e:Entity)
WHERE e._observation_class = 'predicted'
  AND e._confidence < 0.10
DETACH DELETE e

ROS integration pattern#

// Subscribe to ROS detection messages, write to world model
import { open } from '@ozinc/arcflow'
import * as rclnodejs from 'rclnodejs'
 
const db = open('./data/robot-world-model')
 
rclnodejs.init().then(() => {
  const node = new rclnodejs.Node('arcflow_bridge')
  
  node.createSubscription(
    'vision_msgs/msg/Detection3DArray',
    '/detections',
    (msg) => {
      for (const det of msg.detections) {
        const { x, y, z } = det.bbox.center.position
        const confidence = det.results[0]?.score ?? 0.5
        const classId = det.results[0]?.hypothesis.class_id ?? 'unknown'
        
        db.mutate(`
          MERGE (e:Entity {track_id: $id})
          SET e.x = $x, e.y = $y, e.z = $z,
              e.class = $class,
              e._confidence = $conf,
              e._observation_class = 'observed'
        `, { id: det.id, x, y, z, class: classId, conf: confidence })
      }
    }
  )
  
  rclnodejs.spin(node)
})

See Also#

  • Building a World Model — the foundational guide
  • Spatial Queries — full ArcFlow Spatial Index and frustum reference
  • Temporal Queries — replay, AS OF seq N
  • Grounded Neural Objects — entity identity persistence
  • Autonomous Systems — fleet coordination
  • Confidence & Provenance — scoring sensor data
Try it
Open ↗⌘↵ to run
Loading engine…
← PreviousDigital TwinsNext →Sports Analytics