Skip to main content

Data Interface

Your database has 40 tables. How many can a human, agent, or machine actually talk to?


The Job

When a venture needs to read, write, or query structured data — whether through a human operator, a conversational agent, or an autonomous machine — help it access any table through a consistent interface without bespoke integration work.

Trigger EventCurrent FailureDesired Progress
New table createdTable exists in schema but nothing can reach itTable is accessible via Admin UI + Chat + A2A within one cycle
Human needs dataOpens pgAdmin or asks a developer to run a queryOpens Admin UI, filters, edits, done
Agent needs contextHard-coded API call or no access at allAsks a question in natural language, gets structured answer
Machine-to-machine syncCustom integration per table, per consumerStandard protocol — any consumer reads any table it's authorised for

The Pattern

Every table gets three interfaces. Not eventually. As a condition of being considered "live."

InterfaceWho Uses ItWhat It Does
Admin UIHuman operatorsCRUD — create, read, update, delete through a browser
ChatConversational agents (human or AI)Natural-language query that returns structured results
A2AAutonomous agents and external systemsMachine-to-machine protocol for programmatic access

Most tables today have one of these. Some have none. The pattern says: all three, or it's not done.

Why Three

Admin UI without Chat means humans can see data but agents can't reason over it. Chat without Admin means agents can query but humans can't correct errors. A2A without either means machines talk to each other with no human oversight. The three interfaces aren't features — they're a trust architecture.


Test Results as Truth

A table hasCrudInterface when the CRUD test passes. hasAgentInterface when the intent-to-query test passes. Not when someone says it's done. Not when the code looks right. The test is the proof.

This borrows from factory commissioning: the team that builds it is never the team that verifies it. A passing test is an independent witness. A green README badge is hearsay.

Maturity States

StateMeaningProof
0 — Schema onlyTable exists in databaseMigration ran
1 — Admin UIHuman can CRUDCRUD test passes
2 — ChatAgent can query via natural languageIntent test passes
3 — A2AMachine can read/write via protocolProtocol test passes
4 — Full coverageAll three interfaces verifiedAll three tests green

A table at state 0 is infrastructure debt. A table at state 4 is a platform primitive.


Bootstrap → Mature

Not everything starts as a protocol. The path is intentional:

PhaseInterface StyleWhen It Fits
BootstrapCLI tool for quick operator accessEarly tables, small team, speed over ceremony
MatureA2A protocol for autonomous interactionProven tables, multiple consumers, operating independently

Bootstrap is not inferior — it's appropriate. The graduation signal is when multiple consumers need the same table and the CLI becomes a bottleneck.


Feature / Function / Outcome

#FeatureFunctionOutcomeStatus
1Admin UI generatorProduce CRUD interface from table schemaAny operator can manage data without developer helpGap
2Chat query layerNatural-language intent mapped to structured queryAgents reason over data conversationallyGap
3A2A protocolStandard machine-to-machine read/write interfaceAutonomous agents compose data across tablesGap
4Maturity trackerDashboard showing each table's interface coverageTeam sees which tables are accessible and which are darkGap
5Test-as-proof harnessAutomated verification that each interface worksNo false claims of coverage — the test is the truthGap
6Auth + scope layerPer-interface authorisation for who can access whatChat can't write, A2A can't delete, unless authorisedGap

Business Dev

This is infrastructure — it doesn't sell directly. It sells by making every venture's capabilities possible.

LayerDecisionCurrent HypothesisValidation Signal
ICPWho benefits first?Stackmates ventures with active data tables5 tables reach state 4 in first cycle
OfferWhat does this enable?"Any consumer can talk to your data" — foundational for all venturesOne venture ships a feature that depends on this layer
ChannelHow does adoption happen?Internal-first — every new table gets three interfaces by defaultNew tables ship with interfaces, not after
ConversionWhat proves it works?Consumer successfully queries a table it's never been explicitly coded againstZero bespoke integration for a new consumer-data pair
RetentionWhy does it stick?Once consumers expect three interfaces, reverting to bespoke feels brokenNo venture requests a custom data connector
ExpansionHow does it compound?Cross-venture data sharing via standard protocolDreamineering agent queries Stackmates data without custom code

Commissioning

ComponentSchemaAPIUITestsStatus
Admin UI generatorPendingPendingPendingPending0%
Chat query layerPendingPendingPendingPending0%
A2A protocolPendingPendingPendingPending0%
Maturity trackerPendingPendingPendingPending0%
Test harnessPendingPendingPendingPending0%
Auth + scopePendingPendingPendingPending0%

Metrics

MetricTargetWhy It Matters
Tables at state 4 (full coverage)20 tablesScale signal — the pattern works beyond a handful
Interface coverageOver 70% of active tablesMost data is accessible, not locked behind UI-only
Bootstrap → mature graduation rateTracked per tableProves the progression model isn't just theory
Time to three-interface for new tableUnder 1 sprintThe pattern is fast enough to be default, not a project

Risks + Kill Signal

RiskMitigation
Over-engineering for tables nobody queriesStart with the 10 most-accessed tables, not all tables
Chat interface returns wrong data confidentlyTest harness catches regressions; auth layer limits blast radius
A2A protocol becomes attack surfaceScope-limited tokens per consumer; read-only default
Three interfaces per table is too much overheadGenerator tooling — if it takes more than an hour per table, the tooling is wrong

Kill signal: If tables get all three interfaces but nobody uses them, the pattern adds overhead without value. Track invocation counts. Zero-use interfaces after 60 days means the interface isn't solving a real access problem.


Context