CorpusRepo, BriefRepo, RunRepo, AccountRepo, OpportunityRepo,
InboxRepo). One backend object implements as many as it supports.
Two backends ship in core, with zero infrastructure:
MemoryStores and SqliteStores each satisfy every repo, so either drops into
Metalworks(store=...), ResearchDeps, or the Reddit OAuth account store.
Your own backend
Implement the repo methods you need on your own class and pass it asstore.
Verify it against the same conformance suite the built-ins pass — including the
1000-rows-behind-one-filter pagination case that catches silent truncation:
Supabase / PostgREST
A Supabase backend is one such custom store. If you want one, implement the repos over the Supabase client (paginating reads with.range() to exhaustion, since
PostgREST silently caps result sets at its max-rows setting and returns HTTP
200). Bind it to pre-existing columnar tables by mapping logical collections to
your physical table names in the constructor. This is a backend you write for your
own infrastructure, not something metalworks configures for you.
Pick the right one
| Backend | Use it for | Infra |
|---|---|---|
MemoryStores | tests, one-shot runs, the offline demo | none |
SqliteStores | a single machine, persistence across runs | none |
| your own | a service, a shared DB, multi-tenant | yours |