Thing Event SystembyPentatonic

Features

Everything your data needs to become intelligent

An immutable event store with built-in AI enrichment, vector search, and compliance reporting. Every capability builds on the same append-only event spine.

tes events --stream

Capabilities

What TES does

Nine capabilities, one event log. Each one builds on the immutable foundation below it.

01

Immutable Event Log

Every state change is an append-only event. No updates, no deletes. Current state is always derived from history, never overwritten. Full history preserved — trace what happened, when, why, and by whom.

await tes.emit("thing.status_changed", {
  thing_id: "thing_abc",
  status: "identified",
  holder_id: "holder_wh01",
});
02

Entity Lifecycle Tracking

Track things, holders, locations, and products through 26 lifecycle stages. Every custody transfer, location change, and status update is recorded. Edge history tracks every relationship over time.

capturedidentifiedvaluedlistedsolddelivered
03

AI Enrichment

Every event triggers automatic AI processing. Vision analysis, taxonomy classification, market pricing, valuation, and 1024-dim embeddings — all generated without any configuration required.

await tes.query(`mutation {
  uploadThingImage(id: "thing_abc", input: {
    url: "https://example.com/photo.jpg"
  }) { success eventId }
}`);
// → vision, pricing, valuation, embedding
04

Vector Search

Find similar entities by natural language, image, or existing item. BGE-M3 embeddings with cosine similarity. Search by meaning, not keywords. Embeddings are generated automatically by the enrichment pipeline.

const results = await tes.search({
  query: "vintage leather jacket",
  min_score: 0.7,
  limit: 10,
});
05

Compliance & Audit

Because every event is immutable, governance comes for free. Query the full audit trail for any entity. Export compliance reports by entity, time range, or jurisdiction. EU AI Act ready.

const trail = await tes.query(`{
  eventsByEntity(entityId: "thing_abc") {
    eventType timestamp source clientId
  }
}`);
06

Edge-Native Infrastructure

Built on Cloudflare Workers, Queues, R2, and D1. Sub-50ms globally across 300+ edge locations. Zero cold starts, automatic scaling. Multi-tenant with physical data isolation per client.

// POST https://tes.pentatonic.com/api/events
// x-response-time: 12ms
// cf-ray: 8a1b2c3d4e5f-LHR
// Tenant isolation is automatic
07

Webhooks & Integrations

HMAC-SHA256 signed webhooks for real-time event notifications. Subscribe to any event type. Connect via GraphQL, REST, MCP for AI assistants, or the SDK.

await tes.webhooks.create({
  url: "https://your-app.com/hooks/tes",
  events: ["item.graded", "settlement.completed"],
  secret: "whsec_...",
});
08

Extensible Modules

Purpose-built modules extend the event log. Deep Memory for persistent AI recall. Bias Evolution for pattern and drift detection. Predictive modelling, pricing rules, Shopify sync, and more — enabled per client.

// Modules extend the GraphQL schema
// - deep-memory        (persistent AI memory)
// - bias-evolution     (anomaly detection)
// - predictive-modelling (demand forecasting)
// - pricing            (rules-based pricing)
// - shopify-catalog    (product sync)
09

AI Agent SDK

Open-source SDK (MIT) that wraps any LLM client for automatic observability. Provider-agnostic — works with OpenAI, Anthropic, and Cloudflare Workers AI. Zero runtime dependencies. Includes a Claude Code plugin for persistent memory.

import { TESClient } from "@pentatonic/ai-agent-sdk";

const tes = new TESClient({ apiKey, clientId });
const ai = tes.wrap(new Anthropic());

// Every call is now automatically tracked
// Token usage, tool calls, sessions — all captured

FAQ

Frequently asked questions

Try it yourself

See TES in action

Simulate real-world entity lifecycles in the playground, or start building with the free tier.