Everything is a tool.
In Eunice there is one kind of thing: a tool. Searching a document library is a tool. Joining two spatial layers is a tool. Training a model, drawing a chart, and writing a spreadsheet are tools. Each declares what it takes in and what it gives back, and each is called the same way.
The assistant reads your request, picks the tools that apply, runs them in order, and hands the result of one to the next. There is no pipeline to build in advance and no separate application for each task. A new capability is a new tool, registered alongside the rest and available in the next conversation.
Because every step is a tool call, every step is visible. You can see which tools ran, with what inputs, and what they returned, which makes the answer something you can check rather than take on faith.
Example
Upload two spreadsheets, one listing your sites and one listing your regional offices, and ask which sites are within a short drive of an office, shown on a map, with the list as a workbook. Eunice geocodes both lists, buffers the offices, filters the sites that fall inside, renders the interactive map, and writes the workbook. Each intermediate table is registered in the catalog with its lineage, so the same list can be reused next quarter without redoing the work.
user > "Which sites are within a short drive
of a regional office? Map it, and give
me the list as a workbook."
geocode → sites, offices
buffer → drive-radius polygons
spatial_filter → sites inside a polygon
display_map → interactive map
export_excel → workbook
every table registered with its lineage Catalog and lineage
Every dataset that passes through Eunice, whether uploaded, derived, or exported, is registered once with the record of where it came from and what it was built from. Duplicate detection keeps the same table from being pulled twice, and grouping into Kits keeps related data together. The store is PostgreSQL with PostGIS.
catalog entry "sites_near_offices"
built from: sites, offices
via: geocode → buffer → spatial_filter
exported as: workbook
duplicates: none
kit: quarterly site review Verifiability
Every message, tool call, input, output, and cost is recorded without truncation and can be replayed or exported as a report. Merging or splitting records across systems does not run on its own: it is proposed to an approvals ledger and released only by an authenticated person, and the approved content and the approver are recorded. Sending email or changing a ticket asks the person first. Verifiability is not a feature added on top; it is the consequence of everything being a tool.
replay(conversation)
→ every message, tool call, input, output, cost
→ export as a report
merge records across systems?
→ proposed to the approvals ledger
→ released by an authenticated person
→ approved content + approver recorded
send email or change a ticket?
→ asks the person first