Late last year, I wanted to showcase to my team the possibilities AI brings for analytics so I built Ida, a small agent that could read data from our data warehouse, create visualizations, and run Python for more complex analyses. After showcasing it to the team, we decided to provide Ida as a service. This proved valuable to internal users that started using it for all types of workflows, such as preparing for sales calls, 1:1s, as well as exploring operational and strategic questions using data from across all our systems.
Ida was able to handle many of these workflows, but we quickly saw that the interaction model of a chat has a ceiling. Users had to come to Ida, know what to ask, and initiate the work. We believed that the right role for agents is to take on more workflows and to be proactive. Humans can then focus on providing judgement, context, and guidance. Being able to do this requires more than just a capable agent, so we built an internal platform which we call Reef (we used an octopus avatar for Ida, so we wanted the name to inspire thoughts of an ecosystem of agents). Rather than being just an agent, Reef is an execution layer for work at Funnel.
Using Reef
"Pelle Made and I hanging out with Reef on a Friday afternoon in the office doing analysis for the commercial strategy that would have required a whole team of people to help with in the past. This thing is on fire :fire: I'm so impressed with what the team has achieved. And it will just get better! :muscle:" - Fredrik Skantze, CEO
Users interact with Reef through our web application, Slack, or an MCP server. Tasks can also start on a schedule or when a predefined condition is met, and their outputs can be delivered to Google Drive (as Slides, Sheets, or Docs) or to Slack.
Each of these modes of interaction sees a different pattern in usage. In Slack, requests are often “simpler” and related to an ongoing discussion or task, such as looking up information about a customer or deal. Tasks in the web application tend to be larger multi-step tasks that require more information from across Funnel to be completed. In the web application, Reef can generate and display Artifacts (dashboard-like objects) that chart data to be used for conveying a data-driven narrative.
These examples still use the same interaction model as Ida did, but Reef also supports tasks that previously were not possible. One such common example we see in the commercial team is scheduling tasks to review and forecast sales reps’ open deals. The reps get a report in their Slack DMs on a daily basis, without them or the agent needing to care about the logistics of it.
Building a platform around the agent
Moving from a simple agent that interacts with data to an agent that does work for our users introduced requirements on reliability, permissions, storage, and delivery. Reef still uses an agent built on our own agent harness but the platform around it manages how work starts, what the agent and each user can see and do, and where outputs go.
The first distinction we made was between managing the work on the platform and doing the work. We built the Agent Control Plane (ACP) as the surface for managing tasks, any other service or client that wants to use Reef’s agent or Reef’s capabilities has to go through ACP as it manages access and permissions and it coordinates task execution. This enabled us to build out our agent runtime to only focus on two things: the core agent loop and durable execution.
Within the agent runtime we wanted explicit control over the context and what survives between model turns in the agent loop. For this, we built a virtual filesystem based on S3 that allows the agent to work efficiently with data. Using the filesystem, the agent can store intermediate query results and use code to process them without loading the full results into context.
Tasks don’t have to start with an explicit user request though. My colleague Simon Kalicinski built a scheduling service, Summoner, which can start tasks on behalf of users at a specified time or when a trigger is met. An example trigger used by some users is if a meeting is scheduled in the coming days, the agent in Reef is then asked to generate a brief with detailed information and tactics to take into the meeting.
Running a task reliably is only part of the problem though, the agent also needs to find the relevant data and interpret it. Reef has direct access to our federated data catalog in AWS, which means that it can query the core data my team models as well as the data generated by all the product development teams at Funnel. To aid the agent in its understanding of the data, we maintain both a data catalog and a semantic layer built on Apache Ossie. The semantic layer gives the agent the same metric definitions across time and runs. While much business logic can live in the semantic layer, we cannot rely only on that to give the agent an understanding of the Funnel context. So my colleague Ola Gustafsson also built a Funnel World Model, a knowledge graph built on linked documents that details what Funnel is, the processes we have, how we position ourselves and what our priorities are. The agent uses this knowledge to place the data and its actions in the Funnel context, making the output more actionable.
Another data source that is used in almost every task is our “claims” data, described in more detail here. This data allows the agent to find and synthesize information across all the interactions we have with customers, helping it find pain-points, decisions, and other signals across vast amounts of text.
Making Reef proactive
Reef is now used by all teams at Funnel to aid in their work, but there is still more we want to explore when it comes to proactivity. While scheduled and triggered executions free up time for our colleagues to focus on more important work, we want to explore how we can get Reef to monitor and react to data continuously. A big part of that is deciding when a data point is worth bringing to someone’s attention. And the next question is of course, what can Reef do more than just bringing it up, can we create materials, artifacts, or decision support that enable our colleagues to take action immediately?
In my coming posts I will dive deeper into how each part of Reef currently works as well as how we are making Reef proactive.