Boring Benchmark

A virtual company for testing analytics agents

DuckDB Slack Linear YOUR INFRASTRUCTURE THE DATA ROOM Your agent any stack, your keys HTTPS One endpoint one bearer token Warehouse DuckDB · the benchmark's tables · read-only SQL Slack channels, threads, search · Slack API shape Linear tickets and decisions · GraphQL

We load a benchmark into the room: its data into the warehouse, its context spread across Slack and Linear, the way it ends up in a real company.

01

Why this exists

An analytics agent is only as good as the context it can find, and the context is never in one place. The definition it needs was settled in a thread, the caveat lives in a ticket, and the table it is querying says nothing about either.

Testing that honestly means standing up a company: a warehouse, the tools around it, and knowledge scattered across them the way people actually leave it. That is weeks of work before you learn anything about your agent.

That is what the data room is: an off-the-shelf virtual company, already filled with a benchmark's data and its context. One URL, one token, running in an afternoon.

02

What is in the room

One company, filled differently for each benchmark we run in it.

We do not take a benchmark as it comes. Its data goes into the warehouse, but the knowledge its questions turn on — a definition, a rule, a threshold — we write ourselves, and then split deliberately across the tools. No single place holds the whole picture, so an agent has to reconstruct it the way it would at work.

These are the tools in the virtual company today.

WAREHOUSE
DuckDB over the benchmark's tables. Read-only, full SQL, no row limits worth working around.
SLACK
A Slack-shaped API, with the method names your client already calls. Where a definition was argued out and settled, months ago, in a channel nobody thinks to search.
LINEAR
A Linear GraphQL API. Where the decision behind that definition was recorded, and where it was later changed.
PEOPLE
Colleagues with names, channels and message histories, so a search returns something a person would recognise rather than filler.

More are on the way — a dbt project, a Git host, a wiki — each added the same way: the real API shape, so your agent reaches it with the client it already has.

Two arms, one question set. In the colocated arm the knowledge sits in a documentation file beside the data. In the dispersed arm it is spread across the tools and nothing announces where. The gap between the two scores is the number worth knowing.

How you reach it

One host, one bearer token, plain HTTP. Your agent runs on your side and never leaves your infrastructure.

POST
/warehouse/query DuckDB SQL in, columns and rows out
GET
/warehouse/tables the schema, and nothing more than the schema
GET
/slack/api/conversations.list · conversations.history · search.messages · users.list Slack Web API method names, so an existing Slack client works by changing its base URL
POST
/linear/graphql Linear's GraphQL shape: issues, comments, teams
GET
/run/tasks the questions, without their answers
POST
/run/answers your answers, marked in the response

The service is stateless. Every call that crosses the boundary is appended to a log as one JSON line, which is how we can tell you which documents your agent opened and which it walked past. Nothing is stored in a database, and we never see inside your product.

03

The benchmarks

We started with DABstep.

DABstep

Adyen & Hugging Face · public · live today

Multi-step questions that cannot be answered from the tables alone: they need a fee rule, a field definition, or a threshold that only exists in prose. That dependency on outside knowledge is why it was the right one to disperse first. The demo runs five questions, in both arms.

5 questions live colocated & dispersed arms

More are coming. The next public set is queued, and we are writing our own from interviews with senior analysts, so that the hardest questions in the room are ones no model has been trained on.

04

How to proceed

  1. FetchYour agent pulls the questions from /run/tasks. Answers are not included.
  2. WorkIt queries the warehouse and searches Slack and Linear, the way an analyst would.
  3. SubmitYou post the answers with the configuration you ran: product, version, model.
  4. MarkedWe score the submission and return the result in that same response: the total, and right or wrong for every task. The gold answers stay on our side. DABstep is public, so we can be this open about per-task results.
05

Request access

Access is by invitation during the beta. You get a private page with your token, your endpoints, and an instruction file to hand to your agent.