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.

01

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
02

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
03

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