About Tracey

The recurring problem all data teams know well

Every data team I've worked on has the same quiet failure mode: someone drops a message in Slack, linking the PR or describing a data model change : "heads up, deprecating that column this week in favour of a new one". and the conversation moves on. Three sprints later, a revenue forecast breaks, a commission report silently returns wrong numbers, and nobody connects the two events. The root cause was always a change that seemed small in isolation but had a blast radius nobody saw in the moment.

The real missed opportunity is that most data teams context already lives in Slack. The people, the old threads, the questions people asked six months ago and the data experts replies. It's all there. It's just not connected to the live conversation, and nobody has time to go dig through it while a PR is waiting to be merged and deployed.

What I built

Tracey is a Slack-native AI sidekick for data engineering and analytics teams. It monitors your data channels and whenever someone mentions a dbt model in the context of a proposed change: a rename, a deprecation, a refactor etc.. it automatically runs a full impact analysis and posts the results as a structured Block Kit card, right in the thread, without anyone leaving Slack including the lineage pulled using dbt MCP and a visualization rendered and posted using Excalidraw MCP.

The analysis combines three real data sources: dbt manifest.json for compiled lineage and column-level dependencies, DuckDB for per-domain usage statistics and a changelog of past schema changes, and Slack's Real-Time Search API for historical threads and expert ranking. From there, Tracey offers four actions: kick off a cross-team review (creating a dedicated channel and inviting ranked experts or any data team member or stakeholders to the review channel), generate a safe migration checklist following topological order of the data lineage acyclic graph, mark stale threads that predate the last schema change to invalidate outdated tribal knowledge, and annotate a GitHub PR with the full impact summary.

Under the hood, Tracey is a single Python package with three clean layers: pure service functions for lineage, usage, and changelog; a FastMCP HTTP server that exposes those same tools for Slackbot and other MCP clients; and a Bolt SDK Slack Agent orchestrated by the Claude Agent SDK with agentic LLM capabilities. A deterministic manifest prefilter keeps the LLM out of the hot path for messages that don't mention a known model name.

What I learned

The hardest part for me was the surface design and keeping clean and useful UX that strikes the right balance between hiding the noisy LLM output (nobody wants to be slammed with a wall of text, let alone a wall of text full of emojis). So getting from "here's a wall of lineage data" to "here's what your team actually needs to do next" required a lot of iteration on the system prompt, the Block Kit layout, and the logic for surfacing relevant experts from RTS results. I also learned a lot about Slack's new agent primitives: say_stream for real-time streaming, set_status with rotating loading messages, and the modal submission lifecycle for multi-step actions. Wiring the FastMCP server correctly so that Slackbot could invoke Tracey's tools via HTTP MCP (the same tools the internal agent uses) without a significant code duplication was satisfying. It means Tracey isn't a siloed bot; it's a specialist that any agent in the workspace can lean on and use its tools to enrich its context or provide useful information to users in other processes, DMs etc..

The other big challenge was making the demo feel real. I seeded realistic dbt models across Sales, Finance, and Product domains, built a DuckDB database with usage statistics and a changelog, and tuned the scenarios so that the "blast radius" of a column rename genuinely spans multiple domains. But I had to use a token and "customize" the message to make them look like they were posted by real users which is hacky way to do it.. but hey, this is a hackathon! The realistic data is what makes the agent's responses land and not just technically correct. In real life scenarios, anyone who has worked on a data team knows how fragmented the lineage graphs are and how many teams rely on each others for downstream or upstream data source. Hopefully Tracey with the power of Slack helps those team do their work better and with less friction.

What I learned

The next step would be to polish some papercuts around configuring Tracey to work in any Slack workspace, it needs to have a proper onboarding guide to enable it to connect to the data model and monitor the correct slack channels.

Built With

  • bolt
  • dbt
  • deepseek
  • duckdb
  • excalidraw
  • mcp
  • python
  • rts
  • slack
  • slack-agent
Share this project:

Updates