Every signal your team already produces — commits, tickets, logins, calls, AI sessions — connected by identity, characterized by what it was, and reported for whoever's asking. Breadth is the point: every source, every person, one record.
al_…) authenticate writes — one per source, never sharedPOST /messages/batchsourceEventId — safe to retry on network failure/api/v1/otlp/v1/logs and /api/v1/otlp/v1/traces. Drop-in for any OpenTelemetry SDK or Collector. No new instrumentation, no SDK rewrite — change the exporter endpoint and you're done. Content-Encoding: gzip supported. gRPC deferred.service.name from resource attributes is promoted to a first-party column/api/public/ingestion. Python langfuse, langfuse-js, the LangChain integration, and the OpenAI proxy all keep working — change three environment variables, leave your code alone. MessageAnnotation rows, queryable alongside the tracegen_ai.* semantic conventions, we promote them out of the metadata bag and into first-party columns: model, input tokens, output tokens, cache reads, cache creates, and cost. Same for the equivalents in Langfuse generation events. The query API stays the same; you just get new dimensions to filter and aggregate on. model=claude-opus-4-7; aggregate cost by user; compare prompt versionsInputTokens, OutputTokens, CacheReadTokens, CacheCreateTokens, CostMicrocents available on the message rowBeyond the raw event list, POST /activity/search runs over the facet index: filter by person, partner, action, source, or date and get matching events plus roll-up counts in a single call — one person's or one partner's activity across every connected tool. Keyset-paginated, so pages stay stable while new data streams in.
person, partner, action, source, or date — filter and group in the same requestnextCursor — stable under concurrent ingest, no skip driftGET /messages still filters by stream, level, type, tag, and timeal_* token, every Content / Media / Member / User lifecycle event flows into ActivityLog with the right partner / project / actor hierarchy attached. v13 ships first; v17 to follow. The plugin is one piece of a broader extensibility seam: any code in your host process can inject IActivityLogClient and emit events through the same batched, retried OTel pipeline — custom controllers, hosted services, your own audit tables. Not Umbraco-only by design. ActivityLog is in beta. No agents on anyone's machine — just the sources you already have, connected.
Request a walkthrough →Already have an account? Sign in →