An open-source observability backend for AI agents — debug what your agents are doing, evaluate their outputs against expected behavior, and catch quality drift before users do. Standards-native: ingests traces through vendor-neutral OTel GenAI + OpenInference (no proprietary wire format), makes every observability primitive queryable by any MCP client, and closes the eval-trace loop in a single schema — traces become dataset items become evaluator inputs become scores become monitor triggers become traces.
Three Deployment Shapes From One Codebase
- Single-file HF Space — DuckDB embedded, the whole observatory running in one hosted notebook
- Docker Compose self-host — ClickHouse + Granian OTLP ingest, Redis Streams buffer
- Kubernetes enterprise — ClickHouse Cloud, Helm-deployed, multi-tenant
Three design choices that differentiate HFAO
- Standards-nativeness done right. OTel GenAI + OpenInference on ingest, full OTLP compatibility, no proprietary wire lock-in. Commercial vendors hedge this because it commoditizes their backend — HFAO has no reason to.
- MCP-native queryability. Traces, scores, causal edges, costs, prompts, datasets, experiments — all queryable by any MCP client. The observability backend agents debug themselves with.
- Closed eval-trace loop. One schema, one system. Not three SaaS products glued together.
Current State
- v1.0.0 (public-release packaging) on main — Phase-1 feature parity landed at v0.5.0 (196 passed / 6 skipped); v1.0.0 reaches the public-release-packaging milestone at 270 passed / 6 skipped (CHANGELOG), with Q-20 counterfactual replay, Q-18 anomaly surfacing, and Q-19 insight routing merged. Still a source-tree milestone — no pushed tag, no published PyPI package, and no hosted Space yet. The HF-Space / Docker publish workflows that used to stamp a green “success” on every push while echoing and building nothing were deleted in PR #29 (2026-08-03);
tests/acceptance/test_workflows_are_honest.pynow fails any workflow that names itself build/publish/deploy, runs automatically, and only echoes. - Try it — from a source checkout,
scripts/demo.shwalks the whole eval-trace loop with zero API keys and no cloud account: migrate, boot the cockpit, emit OTel GenAI spans from a sample agent, query the trace back, seed a golden dataset, and run a gated eval. It usesuvif present, otherwise an installedhfao. Landed in PR #23 (2026-06-09) - Storage plane — ClickHouse backend (§4.3 DDL, §6.1 Docker shape) and DuckDB backend with parity tests between the two
- Ingest plane — OTel GenAI + OpenInference normalizer (§5), Granian OTLP server (§7.1), PII redaction (§6.5), bounded buffer with memory + Redis Streams (§7.1–§7.3), body offload at 64 KiB (§6.6)
- MCP server — FastMCP Streamable HTTP at
:4319/mcp, the full §9.2 read surface plus a gatedscore_observationwrite (the queryability pillar) - Closed eval-trace loop — the computation plane (causal attribution, eval engine, cost rollups, monitors, retention, parquet export) operational end-to-end (§8)
- Stage 2 counterfactual replay — landed on main post-v0.5.0 (SPEC §16 Q-20): driver-pluggable replay across the three Tier-1 frameworks (LangGraph / OpenAI Agents SDK / Claude Agent SDK), tested with deterministic in-process stub agents (no live LLM calls)
- Proactive anomaly surfacing + insight routing — also post-v0.5.0 on main (SPEC §16 Q-18/Q-19): an
Insightschema +AnomalyEngine(rolling-mean Z-score, Western Electric control-chart rules, KS distribution drift, calibration drift, replay-verified) running alongside the monitor worker, plus a rule-basedInsightRoutermatching insights/alerts to role/user/agent subscriptions; surfaced in the cockpit Insights tab and via MCP - Cockpit UI — Gradio single-file cockpit (§10) with the analyst tabs; auth / RBAC / multi-tenancy (§13) and framework instrumentations (LangGraph, OpenAI-Agents, Claude-Agent, smolagents, …) shipped
- Deploy shapes — Helm chart (
helm/hfao) plus the docker-compose shapes (docker-compose.yml,docker-compose.clickhouse.yml) landed on main in PR #22 (2026-06-09), covered bytests/acceptance/test_ac_deploy_compose_and_helm.py - Spec discipline — SPEC.md locked at v1.0.0; every build-plan commit cites a spec section (the §15.3 rule 1 convention, reproduced in CLAUDE.md; chores, CI, and merge commits are outside it). Silent deviation is forbidden — ambiguity gets an Open Question in §16
Future Directions
- A published artifact — tagged release +
pip install hfaofrom PyPI (main is still a source-tree milestone with no pushed tag or package) - DuckLake warm-tier auto-sync (§16 Q-13, targeted v1.1)
- Console UI (SvelteKit analyst surface, §11) — scaffold exists but explicitly deferred to v2.0 per §16 Q-11; not yet a real surface
Positioning
Scope: HFAO targets the same capability surface as LangSmith, Langfuse, Phoenix, Braintrust, Weave and Helicone — tracing, datasets, evals, prompts, annotation, cost and monitoring. No head-to-head evaluation against any of them has been run; the three differentiators above are design choices, not measured advantages.
Technical Stack
- License: Apache-2.0
- Language: Python (
hfaopackage) - Storage: ClickHouse (self-host + enterprise), DuckDB (single-file)
- Ingest: Granian OTLP server, Redis Streams buffer, PII redaction
- Wire: OpenTelemetry GenAI + OpenInference (OTLP-compatible)
- Deploy: single-file HF Space, Docker Compose, Kubernetes (Helm)
Verification
Full proof report → All claims, all projects →- Shipped
Storage plane (ClickHouse + DuckDB) with parity tests — the tests that need a live ClickHouse, including the DuckDB↔ClickHouse parity test, skip unless HFAO_TEST_CLICKHOUSE_DSN is set
- Shipped
Ingest plane (OTel GenAI + OpenInference normalizer, OTLP server, PII redaction, bounded buffer, body offload at 64 KiB)
- Shipped
SPEC.md v1.0.0 locked; every build-plan commit cites a spec section (§15.3 rule 1)
- Shipped
MCP-native queryability across observability primitives (FastMCP Streamable HTTP, §9.2 read surface + gated score_observation write)
packages/hfao/mcp_server/ + tests/acceptance/test_ac_9_mcp.py (v0.5.0, SPEC §9) ↗
- Shipped
Closed eval-trace loop (traces ↔ datasets ↔ scores ↔ monitors), with causal attribution, cost rollups, and retention
- Shipped
Stage 2 counterfactual replay — driver-pluggable, Tier-1 frameworks (LangGraph / OpenAI Agents SDK / Claude Agent SDK); tests use deterministic injected callables, not live framework or model calls
- Shipped
Proactive anomaly surfacing (Insight schema + AnomalyEngine) and rule-based insight routing (subscriptions)
Repository README
We couldn't load this repository's README from GitHub right now. You can view it directly on GitHub instead.
View README on GitHubRelated work
-
beta
SUM — Verifiable Bidirectional Knowledge Distillation
Cryptographic provenance for AI knowledge transforms. Every transform — render, extract, compose, slider — emits a signed receipt anyone can verify offline. Six-regime compliance validators (EU AI Act, GDPR, HIPAA, SOC 2, ISO 27001, PCI DSS) and a layered sum verify --explain output landed in v0.7.0; the current PyPI release is v0.12.0. Same bytes verify identically in Python, Node, and modern browsers.
-
in-development
Memory Mind Mesh — Living Memory for AI
AI memory that learns from feedback. Recall gets more accurate the more corrections a memory has seen, instead of decaying as the model drifts. Hybrid static + adaptive store.