System of Record for AI Agents

The data layer your agents actually use

Collections, records, relationships, and file attachments — created at runtime, no migrations. Access via MCP tools, CLI, or REST API.

agent session
// Agent creates a collection and upserts a record

> manage_collection({ action: "upsert", workspace_id: "ws_ops",
    collection: "incidents", json_schema: {
      type: "object",
      required: ["title", "severity", "status"],
      properties: {
        title:    { type: "string" },
        severity: { type: "string", enum: ["p0","p1","p2","p3"] },
        status:   { type: "string", enum: ["open","investigating","resolved"] },
        assignee: { type: "string" }
      }
    }
  })

< { id: "incidents", name: "incidents", version: 1 }

> manage_record({ action: "upsert", workspace_id: "ws_ops",
    collection: "incidents",
    external_id: "INC-2847", external_source: "pagerduty",
    data: {
      title: "API latency spike in us-east-1",
      severity: "p1",
      status: "investigating",
      assignee: "oncall@team.dev"
    }
  })

< { id: "01961a3b-...", external_id: "INC-2847", version: 1 }

Three Primitives

Everything in Rekor is a collection, a record, or a relationship between records.

Collection

JSON Schema defining a record type. Created at runtime, no migrations needed.

rekor collections upsert incidents \
  --schema '{"type":"object","properties":{"title":{"type":"string"}}}'

Record

JSON document conforming to a collection schema. Upsert by external ID for idempotency.

rekor records upsert incidents \
  --external-id INC-2847 --source pagerduty \
  --data '{"title":"API spike","severity":"p1"}'

Relationship

Typed, directed link between two records with metadata. First-class entity, queryable in any direction.

rekor relationships upsert \
  --type caused_by --source incidents/rec_1 \
  --target deployments/rec_2

Capabilities

ACID Writes

Atomic, consistent writes per workspace

Fast Queries

Filter, sort, and aggregate at scale

File Attachments

Upload and retrieve files linked to any record

Batch Operations

Up to 100 atomic operations in a single request

Hooks

Inbound webhooks — external systems push data in

Triggers

Outbound webhooks — react to data changes

Three Interfaces

MCP

11 tools for AI agents

CLI

Full command-line interface

REST

Standard HTTP API

File Attachments

Attach files to any record. Agents upload directly via presigned URLs and retrieve signed download links on demand.

# Upload files with folder structure
rekor attachments upload incidents rec_abc \
  --filename docs/runbook.md --content-type text/markdown

rekor attachments upload incidents rec_abc \
  --filename docs/screenshots/error.png --content-type image/png

# Get a signed download URL for any file
rekor attachments url incidents rec_abc --filename docs/runbook.md

# List all files, or filter by folder
rekor attachments list incidents rec_abc --prefix docs/

One Interface, Any Data Source

Connect collections to external APIs like Stripe, Salesforce, or any REST endpoint. Agents use the same tools — Rekor handles the integration.

# Same tool, different backends — the agent doesn't know the difference

# Upsert a Stripe invoice (proxied to Stripe API)
rekor records upsert invoices \
  --external-id inv_2847 --source stripe \
  --data '{"amount":5000,"status":"issued"}'

# Upsert a native record (stored in Rekor)
rekor records upsert notes \
  --data '{"title":"Follow up on invoice"}'

# Query records — same interface for both
rekor records query invoices --source stripe --limit 10

Hooks & Triggers

Connect Rekor to external systems in both directions. Hooks receive data in; triggers push notifications out.

# Create a hook — external systems POST data to Rekor
rekor hooks create --workspace my-workspace \
  --name "PagerDuty Incidents" --collection incidents

# Hook returns a unique URL: /v1/{ws}/hooks/{hook_id}/ingest
# External system POSTs JSON → Rekor creates a record automatically

# Create a trigger — Rekor notifies you when data changes
rekor triggers create --workspace my-workspace \
  --name "Notify Slack on P1" --collection incidents \
  --url https://hooks.slack.com/services/T00/B00/xxx \
  --events '["create","update"]'

# When a record is created or updated, Rekor POSTs to the URL
# with an HMAC signature for authenticity

Batch Operations

Group multiple writes into a single atomic request. All operations succeed together or fail together — no partial state.

# Atomic operations — all succeed or all fail
rekor batch --workspace my-workspace --operations '[
  {"type":"upsert_record","collection":"orders",
   "data":{"customer":"Acme","total":5000}},
  {"type":"upsert_record","collection":"line_items",
   "data":{"product":"Widget","qty":10}},
  {"type":"upsert_relationship",
   "rel_type":"contains",
   "source_collection":"orders","source_id":"ord_1",
   "target_collection":"line_items","target_id":"li_1"}
]'

# Up to 100 operations per batch
# Records, relationships, and collections supported

Environments

Agents experiment in preview workspaces. Humans review and promote to production. Schema compatibility checks catch breaking changes before they ship.

# Create a preview workspace to experiment safely
rekor workspaces create-preview my-workspace --name "add-invoices"

# Agent works freely in preview — modify schemas, test with data
rekor collections upsert invoices \
  --workspace my-workspace--add-invoices \
  --schema '{"type":"object","properties":{"amount":{"type":"number"}}}'

# Human reviews and promotes to production
rekor workspaces promote my-workspace \
  --from my-workspace--add-invoices --dry-run

# Apply when ready
rekor workspaces promote my-workspace \
  --from my-workspace--add-invoices