Agent Memento
Agent Memento turns 12.7M raw voice-agent traces (Braintrust spans) into governed Claude copilots and an autonomous supervisor on Snowflake.
Core trick
Converts 12.7M raw voice-agent traces into a star schema under row-access and masking policies, queuing proposed fixes for human approval.
Description
Agent Memento turns 12.7M raw voice-agent traces (Braintrust spans) into governed Claude copilots and an autonomous supervisor on Snowflake. Voice-AI platforms pay
per token and per telephony minute but bill customers per contract, so no one can see which accounts, caller intents or model choices destroy margin. We built a
governed data mart, a semantic view, three persona copilots (Finance, Agent Product Manager, Customer Success) as Cortex Agents, and a daily supervisor that detects
problems in SQL, has Claude draft the diagnosis and fix, and puts them in an Action Inbox for a human to approve. Row access and masking policies make sure each persona
and each agent only sees what that role is allowed to see.
README excerpt
# agent_memento
Governed data product for voice AI agents on Snowflake.
- Turns 12.7 M Braintrust agent spans into a star schema with account economics.
- Serves 3 persona copilots (Agent PM, CSM, Finance) in Snowflake Intelligence and in Claude Desktop over MCP.
- Runs an autonomous supervisor that proposes actions, which humans approve in a Streamlit Action Inbox. Built for the Anthropic × Snowflake "Intelligence at Work" hackathon.
## Quick Navigation
- [Layout](#layout)
- [Build](#build)
- [Docs](#docs)
---
## Layout
```mermaid
flowchart LR
S["scripts/"] -->|"PUT"| R["sql/10 RAW"]
R --> ST["sql/20 STAGING"] --> M["sql/30-50 MART"] --> SE["sql/60-80 SEMANTIC"]
SE --> A["app/ Streamlit"]
V["sql/90 validate"] -.-> M
```
| Path | Contents |
|---|---|
| [sql/](sql) | Numbered build scripts `00`–`90`, run in order |
| [scripts/upload_parquet.py](scripts/upload_parquet.py) | PUT local Parquet (`PARQUET_DIR`) to `@AGENT_MEMENTO.RAW.SPANS_STAGE` |
| [scripts/run_sql.py](scripts/run_sql.py) | Run SQL files through the Python connector (browser login) |
| [app/](app) | Streamlit dashboard and `snowflake.yml` |
| [docs/](docs) | Architecture, plan, tracker |
[Back to top](#quick-navigation)
---
## Build
1. Run [00_foundation.sql](sql/00_foundation.sql).
2. Run `python scripts/upload_parquet.py`, then [10_raw_load.sql](sql/10_raw_load.sql).
3. Run `20`, `30`, `35`, `40`, `50`, `55`, `60`, `65`, `70`, `75` and `80` in [sql/](sql), in that order.
- `55` MUS