Skip to content

Centralized knowledge-graph coordination

GraphOS exposes one authenticated, tenant-aware graph boundary over MCP and the API gateway. The Rust epistemic-graph engine is the durable authority; optional databases are interoperability mirrors or governed external read sources, never alternate authorities.

Request and mutation authority

flowchart LR
    Client["Agent, UI, or service"]
    Identity[Identity middleware]
    Session[Verified GraphSession]
    Query[graph_query / API graph query]
    Write[graph_write / native ChangeEnvelope]
    Facade[KnowledgeGraph policy facade]
    Engine[(epistemic-graph authority)]
    Mirror[(Optional mirrors)]

    Client -->|bearer, workload identity, or stdio process identity| Identity
    Identity --> Session
    Session --> Query --> Facade --> Engine
    Session --> Write --> Facade --> Engine
    Engine -. governed projection .-> Mirror

The identity layer validates the caller and mints the immutable GraphSession. Tenant, graph, scopes, audience, policy revision, placement epoch, and trace context come from that server-controlled session. Request payloads cannot assert or override them.

Reads use MCP graph_query or /api/graph/query. A caller may select a supported query language—including native Cypher—inside that typed operation; the facade still applies scope, tenant, policy, snapshot, redaction, and audit rules. There is no public raw-Cypher HTTP route and no backend-specific HTTP forwarding from LadybugDB or another embedded database.

Mutations use graph_write, governed ingestion, or native ApplyChangeEnvelope. Query-language writes compile onto the same guarded mutation authority; no direct backend route receives separate durability or authorization semantics. A successful response therefore means the engine has accepted the operation under the verified session and its durability contract.

Concurrency and backpressure

GraphOS reuses the process-owned engine transport and bounds work before it reaches the engine. The engine owns transaction serialization, placement, fencing, WAL/Raft durability, and snapshot visibility. Queue workers use WorkItem leases and fenced commits; connector workers use native ChangeEnvelope application and engine-owned cursors.

This design avoids per-agent database writers and per-agent broker consumers. Registered agents are durable graph identities; only active work is leased to a bounded executor fleet. Backpressure propagates through typed tool/API outcomes rather than silently falling back to a local database.

Cache identity

Any served read cache must bind all authority-changing inputs:

  • tenant and actor authorization fingerprint;
  • policy and redaction revisions;
  • named graph, placement/catalog epoch, and graph snapshot;
  • clearance and requested projection.

If an authoritative revision is unavailable, the read bypasses cache. Cached post-policy rows are never shared across tenants or authorization contexts.

External graph systems

Neo4j, PG-AGE, LadybugDB, GraphQL APIs, and other epistemic-graph deployments connect through the external-graph ingestion contract. The connector discovers schema metadata using bounded read-only operations, produces an opaque schema snapshot, and waits for approval of a generated mapping policy. Connection locations, credentials, TLS profiles, and customized ontologies remain runtime references outside the repository.

Approved ingestion translates source records into governed ChangeEnvelope objects with tenant, ACL, provenance, mapping version, and cursor evidence. The engine commits object, policy, lineage, cursor, and outbox effects together.

Operations

Use agent-utilities-doctor (or graph_configure action=system_doctor) to inspect redacted readiness. Network deployments require verified identity, HTTPS/native TLS, audience and policy binding, and ACL enforcement. Local development uses stdio process identity or the same authenticated network boundary; there is no anonymous served profile.

For implementation details, see: