Run the pipeline.
Keep the data.
These aren't synthetic benchmarks. They're three real pipelines we ran on SentraZero — retail comparison, image embedding, and duplicate detection — all executed on agents inside our own infrastructure. The control plane never saw a single byte of our data. Here's the proof.
Every step,
every millisecond.
SentraZero logs every plugin execution, every agent assignment, and every timing metric. Here's what three real production runs actually looked like — straight from the agent, never from the control plane.
$ sentra job run --pipeline walmart-scrape-compare
Compound mode │ 9 URL pairs │ scrape→compare→merge │ ~65s
✓ Completed — 100% success
$ sentra job run --pipeline cat-image-embed
Compound mode │ 202 images │ load→resize→embed │ 27–81s
✓ Completed — 100% success
$ sentra job run --pipeline walmart-duplicate-detection
Compound mode │ 19 products │ search→classify │ 14.4s
✓ Matched ground-truth 19/19 (100% correct)
$ _
One engine. Every data type.
Structured rows, images, and product catalogs — three completely different workloads, all orchestrated by the same self-hosted engine. That's the point: you bring the data, SentraZero brings the pipeline.
Walmart Scrape & Compare
Retail catalog validation
Compares products across retailers by scraping live pages and matching them against a reference dataset. Catches price discrepancies and listing errors in under a minute, with every decision logged for audit.
Cat Image Pipeline
ML data preparation
Loads 202 images, resizes them, and produces 809-dimensional hand-crafted numpy embeddings — color histogram, edge, texture, and channel stats. Output lands in the client's own object storage, never ours.
Duplicate Detection
Catalog reconciliation
Searches and classifies 19 products, then reconciles against the client's own ground-truth Baselining.xlsx. Matched the reference exactly — 19 of 19, 100% correct — in 14.4 seconds.
Walmart Scrape & Compare
This pipeline answers a question every retail and ops team asks: “Do our listings actually match what's on the marketplace?” It scrapes live product pages, compares them against a reference dataset, and flags every discrepancy — all on your infrastructure, with raw pages never touching our servers.
Why this matters
A single mismatched price erodes margin and trust. SentraZero automates the whole loop — scrape, compare, merge — in about 65 seconds of compound-mode wall time, and logs every verdict so it's audit-ready.
Honest about limits
Some matches were capped only because Walmart geo-blocked outbound requests — an external source constraint, not a platform defect. The engine did its job; the wall did its job too.
9 URL pairs fetched from retailers. Playwright handles JavaScript-rendered pages; a lightweight fallback covers the rest. Automatic retry on failure keeps the run green.
Rows compared using similarity on product titles and brands. Exact-match, brand-similarity, and title-similarity thresholds plus a UPC fast-path keep matching precise and fast.
Results merged back into the original dataset. Each row carries a decision (match / no_match / uncertain), a confidence score, and the reasoning behind the verdict.
Plugin Configuration
Cat Image Pipeline
This is what data sovereignty looks like in practice. 202 images are loaded, resized, and turned into 809-dimensional hand-crafted numpy embeddings — built from color histograms, edge, texture, and channel statistics — and the results are written straight to the client's own object storage. The control plane stores none of it.
Why this matters
Most platforms pull your imagery into their cloud to preprocess it. SentraZero flips that: the work happens where the data already lives. Only lightweight feature vectors leave the machine — raw images never do.
Integration Details
202 JPEG images pulled from the client's own object storage over a custom S3HTTP backend with AWS SigV4 signing. Cross-project access validated; nothing is copied to SentraZero.
All 202 images resized in a single batched pass, ready for downstream model input. Size-based batching keeps memory flat regardless of dataset size.
Each image becomes an 809-dimensional hand-crafted numpy embedding — color histogram, edge, texture, and per-channel statistics — written back to the client's storage. No raw pixels leave their perimeter.
Three workloads, one engine
Structured rows, images, and catalog reconciliation — different data, same orchestration. That's the “One engine. Every data type.” promise, measured.
| Metric | Scrape & Compare | Image Embed | Duplicate Detect |
|---|---|---|---|
| Data type | Structured rows | Images | Catalog products |
| Dataset | 9 URL pairs | 202 images | 19 products |
| Steps | Scrape → Compare → Merge | Load → Resize → Embed | Search → Classify |
| Wall time | ~65s | 27–81s | 14.4s |
| Success | 100% | 100% | 19/19 matched |
| Output stored | Client side | Client object storage | Client side |
| Control-plane bytes | 0 | 0 | 0 |
Key insight
Compound mode ran roughly 7× faster than per-step execution — the engine batches the I/O-bound work instead of paying for it twice. The bottleneck in every pipeline is network I/O, not compute, which means adding agents parallelizes the slow part. Your data stays put; the work comes to it.
Battle-tested on real runs
Real pipelines surface real edge cases. Three agent-binary fixes came directly out of these runs — each validated by re-running the pipeline until it was green. That's how a self-hosted platform earns your trust: it breaks in the open, then it doesn't.
Separated stdout / stderr in the sandbox
internal/plugin/sandbox.go
Plugin stdout and stderr shared one buffer. A stray warning turned valid JSON into garbage and a step would fail silently.
Split stdout and stderr into distinct OS pipes. Only stdout is parsed as JSON; stderr is captured for logs.
Reliability win for every plugin that emits warnings or framework logs. No more silent step failures.
Removed the 4 KB output ceiling
internal/plugin/sandbox.go
A hard 4096-byte cap truncated large plugin output mid-object, silently dropping records from the result.
Raised the output buffer from 4 KB to 10 MB so plugins can return full datasets with complete metadata.
Pipelines that process hundreds of records no longer lose data. The 202-image run depends on this.
Defensive JSON parser
internal/dispatcher/handlers_unix.go
Debug banners or warnings ahead of a JSON payload crashed json.Unmarshal at the parse site.
Added parsePluginOutputAsJSON() — a backward-scanning parser that finds the last valid JSON object. Rolled out to all 5 parse sites.
The agent now tolerates imperfect plugin output. Plugins can log freely without breaking the run.
Zero client data in the control plane.
The headline isn't speed — it's sovereignty. We verified it: the control-plane tables that would tempt a vendor to hoard your data held exactly zero rows.
Sovereignty, verified — not claimed
Control-plane tables vector_store, step_outputs, and plugin_execution_history contained 0 rows of client data. We checked. Your raw data never transits or rests in our systems.
One engine, every data type
CSV rows, 202 images, and 19-product catalog reconciliation all ran through the same orchestration. Structured, visual, and document data — no separate stack to buy or learn.
Signed, sandboxed, isolated
Plugins are Ed25519-signed and execute in a sandbox; orgs are isolated by Row-Level Security. Unauthorized code can't run, and one tenant can't see another's data.
Honest about what we can't control
When an external source (Walmart) geo-blocked requests, matches were capped — a wall on their side, not a defect in ours. We tell you that instead of hiding it.
See the benchmarks for yourself
Deploy an agent on your own infrastructure. Point it at your sources. Watch real pipelines run with every step logged, every byte staying home, and every metric auditable. See the verified benchmarks for yourself.