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
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. Perception Lake
  • 2. World Graph
  • 3. Query Engine
  • 4. Live Surface
  • 5. Event Bus
  • 6. Behavior Engine
  • 7. Algorithm Library
WorldCypher
  • Overview
  • 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
  • Server Modes & PG Wire
  • Persistence (ops)
  • Import & Export
  • Deployment
  • Daemon (UDS)
  • 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 Conformance
  • Conformance Dashboard
  • openCypher TCK Results
  • Extension Regressions
GQL 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

Fleet Coordination

Every multi-agent deployment faces one question the research community has not answered: how does agent-2 read what agent-1 just observed?

ArcFlow's native multi-writer graph handles concurrent agent writes — but without typed agent identity, there is no standard model for which agent wrote what, or how to query "what does the fleet collectively believe about entity X?" This guide covers the fleet coordination layer: typed Agent nodes, per-observation attribution, automatic belief edges, Kalman fusion of conflicting observations, and agent-scoped queries.


Agent nodes#

Agents are first-class nodes with a standard schema. Create one with CREATE AGENT or an equivalent CREATE:

-- Declare a physical agent with capability metadata
CREATE (:Agent {
  id:                   'robot-01',
  modalities:           'lidar,camera',
  role:                 'scout',
  zone:                 'sector-A',
  observation_rate_hz:  10
})

Standard Agent properties:

PropertyTypeMeaning
idStringUnique agent identifier
modalitiesStringComma-separated sensor types (lidar, camera, radar)
roleStringOperational role (scout, inspector, coordinator)
zoneStringAssigned operational zone
observation_rate_hzFloatMaximum observation write rate
-- List all agents and their zones
MATCH (a:Agent)
RETURN a.id, a.role, a.zone, a.observation_rate_hz
ORDER BY a.zone, a.id

Per-observation attribution#

Every observation can be attributed to the agent that recorded it. When _agent_id is set, the engine automatically creates fleet edges (see below).

-- Write an observation attributed to robot-01
MATCH (e:Entity {id: 'player-07'})
SET e.x = 10.5,
    e.y = 7.2,
    e._observation_class = 'observed',
    e._confidence = 0.91,
    e._agent_id = 'robot-01'
-- Query attribution: who observed this entity, and how confident?
MATCH (e:Entity {id: 'player-07'})
RETURN e.x, e.y, e._agent_id, e._observation_class, e._confidence
-- Returns: 10.5, 7.2, 'robot-01', 'observed', 0.91

_agent_id is indexed alongside _observation_class and _confidence for fast agent-scoped filtering.


Fleet edges — BELIEVES and DETECTED#

The engine auto-creates two typed edges when an observation is attributed to an agent. No manual edge creation is required.

[:BELIEVES] — created for every observation, prediction, and inference:

(:Agent {id: 'robot-01'})-[:BELIEVES {_confidence: 0.91, _timestamp_ms: ...}]->(:Entity {id: 'player-07'})

Encodes the agent's current working belief about the entity at a given confidence.

[:DETECTED] — created only for _observation_class: 'observed':

(:Agent {id: 'robot-01'})-[:DETECTED {_confidence: 0.91, _observation_class: 'observed'}]->(:Entity {id: 'player-07'})

Captures direct sensor contact as distinct from belief derived from other agents' data.


Fleet-wide state queries#

Standard GQL patterns for querying across the entire fleet — no custom procedures required:

-- What does each agent believe about entity 'player-07'?
MATCH (a:Agent)-[:BELIEVES]->(e:Entity {id: 'player-07'})
RETURN a.id, e.x, e.y, e._confidence, e._observation_class
ORDER BY e._confidence DESC
-- Which agents have direct sensor contact with 'player-07'?
MATCH (a:Agent)-[:DETECTED]->(e:Entity {id: 'player-07'})
RETURN a.id, a.zone, e._confidence
-- Fleet-wide entity coverage: which entities no agent currently observes?
MATCH (e:Entity)
WHERE NOT EXISTS {
  MATCH (a:Agent)-[:BELIEVES]->(e)
  WHERE e._observation_class = 'observed'
}
RETURN e.id, e._observation_class, e._confidence
-- Full fleet belief state: every agent's view of every entity
MATCH (a:Agent)-[:BELIEVES]->(e:Entity)
RETURN a.id, a.zone, e.id, e.x, e.y, e._confidence, e._observation_class
ORDER BY e.id, e._confidence DESC

algo.beliefReconcile — Kalman fusion#

When two or more agents have conflicting observed positions for the same entity, algo.beliefReconcile fuses them into a single inferred fact using Kalman precision-weighted averaging.

CALL algo.beliefReconcile('player-07')
YIELD fused_confidence,
      source_agents,
      source_confidences,
      reconciliation_method,
      observation_seq

Return columns:

ColumnTypeMeaning
fused_confidenceFloatWeighted fused confidence — always ≥ any single source
source_agentsStringComma-separated agent IDs that contributed
source_confidencesStringComma-separated per-agent confidence values
reconciliation_methodStringAlways kalman-fusion
observation_seqIntNumber of source observations fused

Algorithm: precision-weighted Kalman mean — fused = Σ(cᵢ²) / Σ(cᵢ) where cᵢ is the _confidence on each BELIEVES edge. A single source with confidence 0.8 fuses to exactly 0.8. Two sources at 0.9 and 0.7 fuse to 0.8125 (higher than either alone due to information gain).

What it writes back on the entity:

_observation_class: 'inferred'
_confidence:        <fused_confidence>
_propagation_rule:  'kalman-fusion'
_source_agents:     'robot-01,robot-02'
_source_count:      2

Example — two cameras observe the same player:

-- robot-01 observes at 0.91 confidence
MATCH (e:Entity {id: 'player-07'})
SET e._agent_id = 'robot-01', e._confidence = 0.91, e._observation_class = 'observed'
 
-- robot-02 observes at 0.78 confidence
MATCH (e:Entity {id: 'player-07'})
SET e._agent_id = 'robot-02', e._confidence = 0.78, e._observation_class = 'observed'
 
-- Fuse: Σ(0.91² + 0.78²) / Σ(0.91 + 0.78) = (0.8281 + 0.6084) / 1.69 ≈ 0.851
CALL algo.beliefReconcile('player-07')
YIELD fused_confidence, source_agents, reconciliation_method
 
-- Entity now has: _observation_class='inferred', _confidence≈0.851, _propagation_rule='kalman-fusion'
MATCH (e:Entity {id: 'player-07'})
RETURN e._observation_class, e._confidence, e._propagation_rule, e._source_agents

When to use it: Call beliefReconcile when multiple agents have written BELIEVES edges to the same entity within a fusion window — typically triggered by a live skill that fires on new observations.

Trigger pattern — auto-fuse on every new observation:

-- Register a skill that runs beliefReconcile whenever a new BELIEVES edge is created
CREATE SKILL fleet.autoFuse AS
MATCH (a:Agent)-[:BELIEVES]->(e:Entity)
WHERE e._observation_class = 'observed'
CALL algo.beliefReconcile(e.id)
YIELD fused_confidence
RETURN e.id, fused_confidence

AS AGENT — agent-scoped queries#

AS AGENT 'name' scopes a query to an agent's operational context. The agent.* binding resolves to the named Agent node's properties without any application-level filtering.

-- robot-01's control loop: process only entities in its own zone
AS AGENT 'robot-01'
MATCH (e:Entity)
WHERE e.zone = agent.zone
RETURN e.id, e.x, e.y, e._confidence

Available bindings:

BindingResolves to
agent.idThe agent's id property
agent.zoneThe agent's zone property
agent.roleThe agent's role property
agent.observation_rate_hzThe agent's observation_rate_hz property

The bindings are substituted before compilation — no runtime cost beyond a node lookup.

Error handling: If the named agent does not exist, the query returns AGENT_NOT_FOUND:

-- Unknown agent name → AGENT_NOT_FOUND error
AS AGENT 'nonexistent-robot'
MATCH (e:Entity) RETURN e.id

Zone-scoped tasking example:

-- Each robot's perception loop queries only its own zone's entities
AS AGENT 'robot-02'
MATCH (e:Entity)
WHERE e.zone = agent.zone
  AND e._confidence > 0.7
  AND e._observation_class IN ['observed', 'inferred']
RETURN e.id, e.x, e.y, e._confidence
ORDER BY e._confidence DESC

Putting it together — a multi-robot observation pipeline#

-- 1. Declare agents at deployment startup
CREATE (:Agent {id: 'cam-left',  role: 'scout', zone: 'pitch', modalities: 'camera', observation_rate_hz: 25})
CREATE (:Agent {id: 'cam-right', role: 'scout', zone: 'pitch', modalities: 'camera', observation_rate_hz: 25})
CREATE (:Agent {id: 'lidar-top', role: 'scout', zone: 'pitch', modalities: 'lidar',  observation_rate_hz: 10})
 
-- 2. Agents write observations (BELIEVES + DETECTED edges created automatically)
MATCH (e:Entity {id: 'ball'})
SET e._agent_id = 'cam-left', e._confidence = 0.94, e._observation_class = 'observed',
    e.x = 34.2, e.y = 22.1
 
MATCH (e:Entity {id: 'ball'})
SET e._agent_id = 'cam-right', e._confidence = 0.89, e._observation_class = 'observed',
    e.x = 34.5, e.y = 22.0
 
-- 3. Check fleet belief state
MATCH (a:Agent)-[:BELIEVES]->(e:Entity {id: 'ball'})
RETURN a.id, e._confidence, e._observation_class
ORDER BY e._confidence DESC
 
-- 4. Fuse conflicting observations into a single ground truth
CALL algo.beliefReconcile('ball')
YIELD fused_confidence, source_agents, reconciliation_method
 
-- 5. Downstream agents query the fused entity
AS AGENT 'lidar-top'
MATCH (e:Entity)
WHERE e.zone = agent.zone
  AND e._observation_class = 'inferred'
  AND e._confidence > 0.85
RETURN e.id, e.x, e.y, e._confidence, e._propagation_rule

See Also#

  • Physical AI Deployment — the two-tier architecture this fleet layer sits in
  • Observations & Evidence — _observation_class, _confidence, and provenance
  • Swarm & Multi-Agent — LLM agent coordination on a shared world model
  • Procedures Reference — full algo.beliefReconcile signature
  • Live Queries — standing queries for live fleet monitoring
Try it
Open ↗⌘↵ to run
Loading engine…
← PreviousSwarm & Multi-AgentNext →Migrate from Cypher / Neo4j