July 11, 2025 in data, agents by Thomas Hedan4 minutes
Fred now supports agentic access to tabular data like CSV and Excel through a new DuckDB-based backend and the Tessa agent. Explore how this works and what it unlocks.
Until now, Fred agents were document experts, Kubernetes analysts, or general-purpose assistants. But what if your data lives in a CSV file, or an Excel sheet?
That’s where our latest update comes in: Fred now supports tabular data exploration using a local DuckDB store and a dedicated agent called Tessa.
With this integration, structured datasets are no longer static — they become intelligent, explorable knowledge spaces.
We added a new backend layer powered by DuckDB, a high-performance, SQL-based analytical database that works entirely in-process.
We then exposed this through a clean BaseTabularStore
interface, allowing any component (or agent) to:
This DuckDB backend is lightweight and persistent — a perfect fit for CSV uploads or Excel parsing.
To make this backend truly useful, we created Tessa, an agent specialized in answering questions over tabular data.
Tessa uses:
list_datasets
, get_schema
, and query
Tessa is designed to:
This means users can now ask:
“What are the top 5 departments by spending?”
“How did energy usage evolve across regions?”
“Can you calculate the average cost per project?”
And get structured, data-backed answers in seconds.
The tabular agent follows a predictable, verifiable reasoning loop:
list_datasets → inspect_schema → formulate_query → execute → answer
This is encoded in the agent prompt:
1. ALWAYS start by invoking the tool to list all available datasets.
2. For each dataset you think might be relevant, get its schema.
3. Decide which dataset(s) to use.
4. Formulate an SQL-like query using the relevant schema.
5. Invoke the query tool to get the answer.
6. Derive your final answer from the actual data you retrieved.
This ensures trust and reliability — the agent never hallucinates column names or values.
Here’s a sample CSV uploaded to Fred:
timestamp,Country,Zone Name,Zone Id,Carbon Intensity gCO₂eq/kWh (direct),Carbon Intensity gCO₂eq/kWh (LCA),Low Carbon Percentage,Renewable Percentage,Data Source,Data Estimated,Data Estimation Method
2025-01-01 00:00:00,France,France,FR,14.66,29.09,96.55,35.07,opendata.reseaux-energies.fr,false,
2025-01-01 01:00:00,France,France,FR,15.41,30.08,96.42,34.74,opendata.reseaux-energies.fr,false,
2025-01-01 02:00:00,France,France,FR,17.29,32.32,96.01,29.11,opendata.reseaux-energies.fr,false,
2025-01-01 03:00:00,France,France,FR,17.75,32.96,95.9,28.42,opendata.reseaux-energies.fr,false,
2025-01-01 04:00:00,France,France,FR,17.78,33.0,95.89,28.22,opendata.reseaux-energies.fr,false,
2025-01-01 05:00:00,France,France,FR,18.15,33.41,95.83,27.41,opendata.reseaux-energies.fr,false,
2025-01-01 06:00:00,France,France,FR,19.01,34.52,95.63,27.52,opendata.reseaux-energies.fr,false,
Ask:
“What is the average carbon intensity over the dataset ?”
And the agent replies as illustrated below:
Here is a recap schema to see the various parts in action:
flowchart TD subgraph UI["🧑 User Interface (React UI)"] ChatUI[Chat Interface] end subgraph AgenticBackend["🧠 Fred Agentic Backend"] Fred[Main Agent: Fred] Prompting[Prompt Engineering and Tools] Tessa[Tabular Expert: Tessa] Tessa --> Prompting Fred -->|delegates tabular tasks| Tessa Tessa -->|uses MCP tools| MCP end subgraph KnowledgeFlow["📚 Knowledge Flow Backend"] API[Document and Data API] DuckDB[DuckDB Tabular Store] Formats[CSV / Parquet / Iceberg] MCP[MCP Protocol Exposure] API --> DuckDB DuckDB --> Formats DuckDB --> MCP end ChatUI -->|WebSocket + REST| Fred ChatUI -->|REST| API style ChatUI fill:#d0e1ff,stroke:#333,stroke-width:1.5px style Fred fill:#ffe5cc,stroke:#333,stroke-width:1.5px style Prompting fill:#ffd4aa,stroke:#333,stroke-dasharray: 3,3 style Tessa fill:#fff2cc,stroke:#333,stroke-width:1.5px style API fill:#e2ffe2,stroke:#333,stroke-width:1.5px style DuckDB fill:#ccf2cc,stroke:#333,stroke-width:1.5px style MCP fill:#e6f7ff,stroke:#333,stroke-width:1.5px style Formats fill:#f8f8f8,stroke:#888,stroke-dasharray: 5,5
Fred’s architecture shines here — open source, fast and modular. It lets teams deploy, experiment, and most importantly, explore with us a wide range of agentic topics. One promising direction: helping Tessa better understand and discriminate between datasets — not just by name, but by structure, semantics, and potential value.
With this feature:
Best of all, this works locally — no need for cloud infrastructure or distributed databases.
We’re exploring:
Tabular data is everywhere. Now, thanks to Fred and DuckDB, it’s agent-aware.
Check out the new Tabular Expert in your Fred deployment — and as always, explore the source or join the community!