One capability your systems and agents just call.
On his first day, a new engineer pointed the box at a public taxicab dataset. Trips, fares, tips, boroughs, hours. Nothing to do with media. Nothing configured. He named a cost column and an outcome column, and a ranked contribution answer came back in seconds, with confidence bands attached.
The box never cared about media. It cares about a cost column and an outcome column.
A closed box, typed in and typed out.
In: rows with a cost and an outcome. Logs, a warehouse share, or a file. You name the columns and the units you can act on. Out: contribution values per unit with their bands, next-unit predictions with their confidence, and the decision record for the run: inputs, settings, window, estimate, band, hashed so the run re-executes exactly.
Illustrative payload · the shape of the exchange
POST /v1/contribution or MCP tool: contribution.run
{
"rows": "s3://your-bucket/trips.parquet",
"cost": "fare_usd",
"outcome": "tip_usd",
"units": ["vendor","borough","hour"],
"window": "2026-06"
}
→ 200
{
"units": [
{"name":"borough=JFK","contribution":0.212,"band80":[0.176,0.248]},
{"name":"hour=18-21","contribution":0.147,"band80":[0.121,0.173]},
{"name":"vendor=2","refusal":"not enough data yet"}
],
"marginal": [
{"name":"borough=JFK","per_unit":1.31,"band80":[1.05,1.58]}
],
"record": {
"id":"run_8f3a", "inputs_hash":"9c41…", "settings_hash":"b07d…",
"logged":"before-action", "rerun":"exact"
}
}
What never comes out: your rows. The box runs in your cloud, ours, or your customer's. Results and the run record leave; data does not.
Your agents can hold a session open.
The same capability is exposed two ways. An HTTP API for services and pipelines. MCP for agents, so an agent can call contribution as a tool in the middle of a task, open a session, and keep a long-running analysis warm across turns: same data mounted, new questions against it, every run logged into the same record.
Sessions matter because real analysis is a conversation. Run the partner level, then re-run a finer level where a decision needs it. Compare two windows. Remove one input and measure the difference. Each step is a recorded run with its own hashes, so nothing in the conversation is a screenshot and any step can be re-executed later.
The same box works wherever a cost meets an outcome.
- Which customers renew next quarter.
- Which machine order fills the most orders tomorrow.
- What a square foot of flooring should sell for this week.
- Which onboarding screen loses the customer.
- Which floor price earns the most from the auction.
- Which prompt, model, or retrieval step earned the right answer.
- Which dataset earned the accuracy gain.
- And when five agents from five companies touch one job: who gets paid what.
Cost column, outcome column, same box. We run our own research on it: the last item on that list is the one we use daily, grading which component of our own system earned an eval score.
The machine that builds it.
The box is one capability. Behind it is the system we use to build every capability, and we run it on ourselves daily. It is worth a minute, because it answers a fair question: why believe a small company can ship governed, auditable services quickly?
- Every capability lives behind the same contract. A pure core, exposed through named commands, that describes itself to any client that asks, with continuous evaluations and declared floors: claims that must hold, checked by machine, or the capability refuses to answer. Screens and agents are clients of the core; anything a screen can do that the core cannot is treated as a defect.
- Prototypes move fast, then get packaged. A prototype that earns its keep is packaged into a governed, deployable unit: durable runs that survive restarts, checkpoints and recovery, and a signed run record for every run. The same unit runs in your cloud, ours, or your customer's.
- Existing software joins without a rewrite. Your current code gets wrapped behind the same contract: the real implementation stays, tests prove the wrapped version gives the same answers, and callers move over one at a time.
- A number you see never changes quietly. Before a new model or data treatment can change a result, it runs beside the current one on the same data, and it either beats it and takes over or it does not ship. The comparison is kept, win or lose.
- Every deployment is fenced and accounted for. Each one can touch only what its customer scoped it to and reports what it does; everything we run, in every cloud, rolls up into one signed view we can show you.
Where this goes: the same packaging that ships our capabilities is how a customer's capability, and their customers' capabilities, get packaged for the network.
This is why an idea here becomes a running, auditable service in days. We built the machine before we built the products; that is a description, not a slogan.
The method, in short.
Measurement and prediction are kept separate, so a bad forecast never rewrites what was measured. Contribution is computed by coalition: each unit's share is its average marginal contribution across orderings of the units, the Shapley value, so the parts sum exactly to the observed total and interactions are credited rather than assumed away. Exact enumeration when the unit set is small; above roughly twenty units, complementary contribution sampling, with the sampling variance carried into every band you see.
Predictions are response curves fit on the measured contributions, reported as the local slope at current spend, never the blended average. Every number carries its interval at a declared level, and a second attribution family with different assumptions runs as a cross-check; where the two disagree, the disagreement is reported as a finding, not averaged into one number.
The full methodology brief, including what we refuse to claim →