Open source · Apache-2.0
Give your agent an empirical memory.
elbi is an open-source data-science harness. Your agent saves what it learns from your data, with the work behind it, so later sessions and other agents can build on it.
install elbiwhy
A home for what your agent finds.
Agents are getting good at finding things in data. With elbi, each finding is kept in an empirical layer with its code, data, and result, so you can check it, other agents can build on it, and the next run after the data changes recomputes it.
Claude Code, Cursor, Codex or any MCP client, and the dashboards and notebooks in the elbi app.
Findings your agents saved, from analyses to trained models, each with its code, data, and result.
Warehouses, databases and files: Snowflake, BigQuery, PostgreSQL, S3, CSV, Parquet.
how it works
What your agent gets
Three things elbi adds, each shown on one example: an agent asked to model loan defaults.
1 · discover
Your agent digs deeper.
elbi gives your agent extra tools for data science, starting with the statistical structure of your data: which columns identify a row, which derive from others, and which could confound a comparison.
- In this example.
days_past_duealone tells you whether a loan defaulted: a warning sign.
- you
Build a model that predicts which loans default.
- agent
First, how does this table fit together?
callselbistructure_map loans
- elbi
… Functional dependencies (one value fixes another): - days_past_due determines defaulted
- agent
days_past_due alone tells me whether a loan defaulted. Suspicious. I'll check it's known at application before I use it.
2 · validate
It tests a finding before trusting it.
Define your own checks, like data contracts and expected results, and more than 30 statistical checks come in the box, from leakage and confounding to causal designs. Most answer sound, unsound, or inconclusive, with the reason.
- In this example.
- The leakage check confirms that
days_past_duegives the answer away: it's only known after a loan defaults.
- agent
callselbiverify_leakage loans defaulted
- elbi
… # Verification: **UNSOUND** … pivotal issue: feature(s) 'days_past_due' (1.000) predict the target near-perfectly: likely leakage (a proxy or consequence of the label); confirm each is available at prediction time before trusting the model
- agent
It only exists after a loan defaults, so it isn't known at application. I'll leave it out.
3 · build on
Your agent builds on its findings.
The findings worth keeping are saved as derivations, with their code, data, and result. Any agent you connect can call them again, and the next run after the data changes recomputes them.
- In this example.
- The default rate by credit band, saved by one agent and recomputed for another after next month's loans arrived.
- Or write your own.
- A metric, a model, or a piece of business logic: write it as a derivation and elbi serves it to every MCP client. Writing derivations
- you
Which applicants are riskier, using only what we know at application?
- agent
I'll compute the default rate by credit band and save it.
the code it wrote
def default_rate_by_band(ctx): bands = [("under 620", 0, 620), ("620-699", 620, 700), ("700+", 700, 1000)] rows = [] for band, lo, hi in bands: loans = [r for r in ctx.input("loans").rows if lo <= int(r["credit_score"]) < hi] bad = sum(int(r["defaulted"]) for r in loans) rate = round(bad / len(loans), 2) rows.append({"band": band, "loans": len(loans), "default_rate": rate}) return rowscallselbipropose_derivation default_rate_by_band
- elbi
Authored and certified 'default_rate_by_band' (origin=agent), … | under 620 | 78 | 0.53 | … | 700+ | 118 | 0.25 |
- agent
Default falls as scores rise: 53% under 620, 25% at 700+. Saved for any agent on this project.
- next month, 150 new loans, a new session
- you
Default rate under 620 now?
- agent
callselbirun_default_rate_by_band
- elbi
… | under 620 | 119 | 0.52 | …
- agent
52%, recomputed on this month's 450 loans. A note from last month would still say 53%.
Use elbi from your agent, or in your browser.
Connect elbi to Claude Code, Codex, or Cursor, or run elbi serve for a batteries-included environment in your browser.
