Building Custom Agents at Scale: Notion's Multi-Year Journey to Production-Ready Agentic Workflows

notion · Tech · 2026 · source Agentic: yes · promotional bias: med · source-backed · extracted with prompt 0.5.5 (schema v2)

Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.

Problem

Domain: Enterprise custom agents and workspace automation

Notion needed to make custom agents reliable enough to run background workflows across enterprise workspaces without exposing users, administrators, or models to the wrong abstractions. The system had to support many Notion tools, workspace permissions, user-created agents, agent composition, usage-based pricing, evaluation at release quality, and retrieval behavior optimized for agents rather than only humans.

Constraints:

Architecture

Notion built Custom Agents as a production agent harness over Notion's existing system of pages, databases, tools, integrations, and permissions. After several rebuilds, the harness moved from JavaScript-coding agents and custom XML toward model-friendly Notion-flavored markdown, SQL-like database queries, declarative tool definitions, and progressive tool disclosure through tool search. Product teams own the tools their surfaces expose to agents, while the platform team owns eval frameworks, model behavior infrastructure, and the shared agent harness. Agents can set themselves up, write or revise their own instructions, use setup tools, operate over pages and databases as memory, invoke other agents, and coordinate through databases or webhooks. The production system is guarded by explicit permissions, security involvement from the beginning, usage-based credits, model auto-selection, eval tiers, and retrieval/ranking investments for agent-generated search traffic.

Diagram confidence: reconstructed (reconstructed from prose).

flowchart LR
  custom-agent-chat[Custom agent chat] --> setup-tools[Setup tools]
  custom-agent-chat --> tool-discovery[Tool discovery]
  custom-agent-chat --> permission-guardrails[Permission guardrails]
  setup-tools --> agent-instructions[Agent instructions]
  setup-tools --> notion-databases[Notion databases]
  agent-instructions --> tool-discovery
  permission-guardrails --> custom-agent-chat
  tool-discovery --> tool-registry[Tool registry]
  tool-registry --> product-owned-tools[Product-owned tools]
  tool-registry --> mcp-integrations[MCP integrations]
  tool-registry --> custom-integrations[Custom integrations]
  product-owned-tools --> notion-flavored-markdown[Notion-flavored markdown]
  product-owned-tools --> sql-like-database-interface[SQL-like database interface]
  notion-flavored-markdown --> pages[Pages]
  sql-like-database-interface --> notion-databases
  notion-databases --> manager-agent[Manager agent]
  notion-databases --> specialized-agents[Specialized agents]
  manager-agent --> specialized-agents
  manager-agent --> agent-issue-database[Agent issue database]
  specialized-agents --> agent-issue-database
  specialized-agents --> webhooks[Webhooks]
  eval-framework[Eval framework] --> regression-evals[Regression evals]
  eval-framework --> launch-evals[Launch evals]
  eval-framework --> notion-last-exam[Notion Last Exam]
  eval-framework --> model-behavior-engineers[Model behavior engineers]
  credits-and-model-auto[Credits and model auto] --> model-portfolio[Model portfolio]
  agentic-retrieval-stack[Agentic retrieval stack] --> pages
  agentic-retrieval-stack --> notion-databases
Drag to pan · scroll or use +/− to zoom · reconstructed from the source's described component topology

Components

Component Role Interacts with
Custom agent chat Primary user-facing interface for both using and editing a custom agent. Setup tools, Tool discovery, Permission guardrails
Setup tools Tools that let the agent write system prompts, test itself, configure its setup, and debug failures. Agent instructions, Notion databases
Agent instructions System prompt and configuration generated or revised by the agent with user oversight. Tool discovery
Permission guardrails Explicit grant model and admin mode preventing agents from silently expanding their own permissions. Custom agent chat
Tool discovery Progressive disclosure layer that lets agents search for relevant tools instead of seeing all tools upfront. Tool registry
Tool registry Shared abstraction for Notion tools, MCP tools, custom integrations, and agent callable surfaces. Product-owned tools, MCP integrations, Custom integrations
Product-owned tools Tools owned by the teams responsible for the corresponding Notion product surface. Notion-flavored markdown, SQL-like database interface
Notion-flavored markdown Model-friendly page representation that replaced lossless XML for block content. Pages
SQL-like database interface SQLite-style query surface over Notion databases, chosen because models are good at SQL. Notion databases
Pages Workspace documents that agents can read and edit, including use as memory. —
Notion databases Structured workspace data store used for workflow records, memory, coordination, and issue queues. Manager agent, Specialized agents
Manager agent Supervising agent that watches many specialized agents and reduces blocked-agent notifications. Specialized agents, Agent issue database
Specialized agents User-created agents for workflows such as bug triage, go-to-market research, email processing, and task filing. Agent issue database, Webhooks
Agent issue database Shared database where subordinate agents can file issues for manager-agent review. —
Webhooks Coupling mechanism for invoking other agents or triggering workflows. —
MCP integrations Integration path for tools such as Linear and GitHub where MCP fits the permission and integration shape. —
Custom integrations Notion-built integrations such as Slack and mail where custom triggers and tuned tools matter. —
Eval framework Shared evaluation harness for regression, launch-quality, and frontier/headroom evals. Regression evals, Launch evals, Notion Last Exam, Model behavior engineers
Regression evals CI and nightly tests that catch agent behavior regressions within stochastic margins. —
Launch evals Report-card evals used to decide whether product journeys are ready to launch. —
Notion Last Exam Frontier/headroom eval suite intentionally kept hard enough to reveal future model capability gaps. —
Model behavior engineers Specialized function for eval writing, failure analysis, qualitative model understanding, and LLM judge creation. —
Credits and model auto Pricing and routing layer that abstracts over token usage, model tier, serving tier, web search, and sandbox costs. Model portfolio
Model portfolio Set of frontier, open-source, fine-tuned, and partner models used for task-appropriate routing. —
Agentic retrieval stack Search, ranking, indexing, and query-generation system being re-optimized for agent traffic. Pages, Notion databases

Data flow

A user configures or invokes a custom agent through chat. The setup flow gives the agent development guidance and setup tools so it can draft its own instructions, configure databases, and preview settings, while permission changes require explicit human/admin confirmation. During runtime, the agent discovers relevant tools through progressive disclosure rather than receiving all 100+ definitions, then operates through Notion-flavored markdown, SQL-like database queries, native integrations, MCP integrations where appropriate, and custom-built Slack/Gmail tools where deeper triggers or tool tuning are needed. Agents persist memory by editing pages or databases, coordinate by writing tasks to shared databases or invoking other agents through webhooks, and can be supervised by manager agents. Evaluation flows run in CI, nightly, launch report cards, and frontier/headroom suites; model behavior engineers and eval agents inspect failures and guide product/model changes. Pricing and routing use credits, model tiers, serving tiers, web-search costs, and auto-selection to keep high-cost workflows from overwhelming margins.

4 supporting quotes
“it can set itself up. So we not only give it access to use the tools than it has access to like send your emails or whatever”article, stated
“So then tool search. Yeah. So then a, a progressive disclosure becomes really important. So, you know, we were, we sort of hit a bottleneck where our, our agent worked really well. Um, we hit a bottleneck where, um, it, it, it became pretty hard to. Add new”article, stated
“Memory is, is just pages and databases. And so if you wanna give a memory, just give it a page and give it. Edit access”article, stated
“Every team owns their own evals and a lot of them we’ve integrated to Optin, to ci, or we run them nightly and we have a team, uh, a custom agent that triggers to a team to look at the major failures. That’s really critical because if we have like all these”article, stated

Why this architecture

Notion's architecture follows two principles from the source: give models model-friendly interfaces, and keep enterprise control explicit. The team abandoned Notion-internal XML and JSON abstractions in favor of markdown and SQL-like query surfaces because models already understand them. It moved from few-shot prompt strings to tool definitions and progressive disclosure because the tool surface was too large for one prompt and needed distributed ownership by product teams. It kept memory as pages/databases and agent coordination as databases/webhooks because those are Notion's native primitives. Finally, it brought security, evals, pricing, and model behavior work into the core loop because custom agents run in the background and must be trusted by enterprise users.

4 supporting quotes
“just like a SQL light query. And the models are super good at that. So [00:49:51] swyx: give the models what they want. [00:49:52] Simon Last: That was another one. Yeah. Yeah. Give us what they want. I mean, that was, I would say that”article, stated
“really try so hard not to expose it to any complexity about your system that, that’s unnecessary. [00:50:12] swyx: Notions underlying database is Postgres, right? Not sql, right? Yeah. So I don’t know if there’s any mismatch there. [00:50:18] **Simon”article, stated
“being able to distribute tools and not have to all collaborate on like one very select string of system prompt is truly, I would say the biggest lever”article, stated
“security reviews one of the things that we bring in first because it just slows us down way more and, um, causes a lot of tension and they build better product if they’re involved early. So, um, that is probably the first person to get involved in something”article, stated

Models used: GPT-4 · Claude Sonnet 3.5/3.6 · OpenAI GPT-5.2 · MiniMax · Open-source models · Opus · Haiku

Scale

Alternatives considered (roads not taken)

Use JavaScript coding agents instead of explicit tools.

Rejected because: The first version tried to give agents JavaScript APIs and have them write code, but the models were not good enough at writing code then.

3 supporting quotes
“[00:48:10] Simon Last: oh [00:48:10] swyx: wow. [00:48:10] Simon Last: I mean the, the first version we built was actually a coding agent. Yeah. So we’re like, oh, instead of building tools, let’s make everything be JavaScript and then we’ll just give it JavaScript”article, stated
“let’s make everything be JavaScript and then we’ll just give it JavaScript APIs and we’ll just write code. And that’s how it speaks to the tools. Um, but at the time. It just sucked at writing code. It wasn’t that good. Uh, so then we moved to, uh, more of”article, stated
“give it JavaScript APIs and we’ll just write code. And that’s how it speaks to the tools. Um, but at the time. It just sucked at writing code. It wasn’t that good. Uh, so then we moved to, uh, more of like a tool calling obstruction. A tool calling didn’t exist yet,”article, stated

Expose lossless Notion XML and internal mutation operations.

Rejected because: The representation mapped well to Notion internals but forced the model to learn an unfamiliar XML format and prompt overhead.

“we created this whole, uh, XML, uh, format that can losslessly mapped in notion blocks. And the transformation between them is super easy to do. Uh, and then we created this sort of like mutation operations to, to add to pages. Um, but it sucked because the”article, stated
“Uh, and then we created this sort of like mutation operations to, to add to pages. Um, but it sucked because the model didn’t know the XML format and also the, and you have to prompt it [00:49:04] swyx: in and [00:49:04] Simon Last: Yeah, to prompt it in”article, stated

Use Notion's internal database JSON query shape.

Rejected because: The internal JSON format mapped to Notion's system but was less model-friendly than SQLite-style queries.

“the way you query a database is there’s a crazy JSON format and it’s, you know, kind of limiting, but it maps nicely to like how we represent things internally. We scrapped all that and we’re like, okay, let’s just make it SQL light. Everything is a SQL”article, stated
“nicely to like how we represent things internally. We scrapped all that and we’re like, okay, let’s just make it SQL light. Everything is a SQL Light database. You, you can query it just like a SQL light query. And the models are super good at that. So [00:49:51] swyx: give”article, stated

Keep all tool behavior in few-shot prompt examples owned by a central team.

Rejected because: Few-shot prompt ordering and shared-string editing could not scale across product teams; tool definitions enabled distributed ownership.

3 supporting quotes
“when it was all few shots, it was everyone truly editing one string and things would o would compete. And like the order, there were all this, all these papers about, oh, you know, not all context is created equal. The higher up it is in your examples, like”article, stated
“order and the selection of the few shot. And that really had to be a center of excellence and it didn’t scale with the number of people for the need the company had. It was really just five or six people that were allowed to even touch that or had to approve it rather in our code base.”article, stated
“now we can actually, with the right eval, setup, distribute, um, so that everyone owns their tool and their tool definition.”article, stated

Put all 100+ tools directly into the prompt.

Rejected because: Showing every tool made simple interactions token-heavy and caused quality issues when niche tools were overcalled.

3 supporting quotes
“slow. I [00:52:37] Simon Last: can see you’re the efficiency person here. Yeah. It’s, it was too many tokens. But also it’s a quality issue because it meant that like any engineer could introduce this, this new tool for some like, like niche feature. And it would”article, stated
“like, like niche feature. And it would kind of like, like Nerf, the overall model by like causing it to call the tool too much and stuff like that. And so, um, it, uh, yeah, so we, uh, we had an effort basically to, to make our harness. Uh, implement progressive disclosure”article, stated
“And so, um, it, uh, yeah, so we, uh, we had an effort basically to, to make our harness. Uh, implement progressive disclosure in, in a nice way. Um, that’s a big shift. [00:53:00] Sarah Sachs: You said earlier, like everyone says reasoning models was the big”article, stated

Use MCP for every integration.

Rejected because: Notion found MCP useful for some tools, but custom Slack/mail integrations needed built-in triggers and heavily tuned tools.

“you know, the linear and the GitHub mm-hmm. [00:46:20] Simon Last: Use M ccp, but, but the Slack mail, er, those are actually ones they built in house. And we spent a lot of time really fine tuning all the tools to make the really good and also like building out the triggers.”article, stated
“we spent a lot of time really fine tuning all the tools to make the really good and also like building out the triggers.”article, stated

Fine-tune a model to understand Notion tools.

Rejected because: The tools changed too frequently; retraining a model every time would slow down the harness/tool velocity that actually fixed most failures.

3 supporting quotes
“Our tools change really frequently, and right now we spend a lot of time rethinking and building tools for capability”article, stated
“it actually really slow us down, um, to have a model that was fine tuned on our tools because we’d have to retrain it”article, stated
“to train a model. It’s like, oh, maybe there’s just a bug in one of the tools. Right? And actually 99% of the time it’s a bug in one of the tools, right? And so just fix the bug. And then the outer loop thing that’s really fruitful to think about is like, how can you”article, stated

Patterns

tool-use-orchestration (architecture)

Notion treats Custom Agents as tool users over Notion APIs, integrations, setup tools, and agent-invocation tools, with product teams owning their tool definitions.

“every team that has a product service at Notion that a user can interface with owns the tool that the agent interfaces with”article, stated
“We have like internal abstractions for like what is a tool, what is an agent, what is a completion call?”article, stated

structured-output-contract (architecture)

The harness evolved toward structured tool definitions, Notion-flavored markdown, and SQL-like database queries that are constrained enough for systems but familiar enough for models.

“creating a notion flavored markdown where, uh, you know, the whole goal was like, it has to be just simple markdown at the core”article, stated
“Everything is a SQL Light database. You, you can query it just like a SQL light query.”article, stated

eval-driven-development (evaluation)

Notion uses regression evals, launch report cards, and frontier/headroom evals, with teams owning evals and a platform team maintaining the framework.

“Regression test. Those live in ci, those have to pass a certain percent”article, stated
“frontier or headroom evals, where we actively wanna be at 30% pass rate.”article, stated

agent-memory (architecture)

Notion did not create a separate memory system; agents use pages and databases as editable memory primitives that humans can also inspect and update.

“we have no built-in memory concept. Memory is, is just pages and databases.”article, stated
“shared databases as primitives, agents invoking other agents, “manager agents” supervising dozens of specialized agents, and memory implemented simply as pages and databases * Notion’s take on MCP vs CLI:”article, stated

multi-agent-orchestration (architecture)

Users can create many specialized agents, then add manager agents that invoke, observe, and debug subordinate agents through shared databases or direct calls.

“Releasing it like next week is, uh, in the settings for an agent, you can give access to invoke any other agent. [00:35:34] swyx:”article, stated
“has access to invoke all the other agents and it’s sort of like, like watching and observing them”article, stated

safety-policy-enforcement (safety)

Custom Agents default to no permissions, require explicit grants, prevent self-editing of permissions, and involve security early for enterprise compliance.

3 supporting quotes
“by default it has no permission to do anything and then you have to explicitly grant it all its permissions”article, stated
“can trust that. Right. If you let it fix itself, you know, you’re, you’re breaking that, that version there, it, it is not allowed to edit its own permissions. But as, so, you know, in the current product you can sort of click a button to fix, but now you’re entering sort of an admin mode where,”article, stated
“So sometimes it’ll be in dev for a couple weeks before it makes it to prod just because we still have to like, make it robust, make it HIPAA compliant, ZDR compliant, figure out the right contracting with the vendor, whatever it is.”article, stated

model-routing (operations)

Notion uses credits and an auto model-selection concept to map tasks to model tiers rather than default every workflow to the most expensive model.

“auto is not just our cheapest, dumbest model, but actually the model that’s best for the task that you wanna do.”article, stated
“we have a lot of people figuring out what model is best for the right task.”article, stated

cost-aware-routing (operations)

Credits abstract over token usage, model type, serving tier, web search, and sandbox costs so high-volume agent features can be priced without bankrupting the product.

“So we had to think of an abstraction above tokens. And it’s also not just tokens, it’s the token model. Um, and serving tier trade off, right?”article, stated
“if every single autofill action was an agent running on Opus on every single database sell, it would be billions of dollars”article, stated

retrieval-ranking (retrieval)

Notion is reworking search, ranking, indexing, snippets, and query generation because agent queries now dominate search traffic and need different retrieval optimization than human search.

“The search load and the search traffic. Majority of it’s coming from agents, not humans.”article, stated
“It’s a different optimization function for retrieval, um, model.”article, stated

Tradeoffs

Expose model-friendly abstractions rather than lossless internal abstractions.

Chose Notion-flavored markdown and SQLite-like database queries over Lossless XML blocks and Notion's internal JSON database query format.

Rationale: Lossless internal representations made transformations easy for Notion but added unnecessary model-facing complexity; markdown and SQL are formats models already handle well.

3 supporting quotes
“And the transformation between them is super easy to do. Uh, and then we created this sort of like mutation operations to, to add to pages.”article, stated
“Um, but it sucked because the model didn’t know the XML format and also the, and you have to prompt it [00:49:04] swyx: in and [00:”article, stated
“give the models what they want. [00:49:52] Simon Last: That was another one. Yeah. Yeah. Give us what they want.”article, stated

Use progressive tool disclosure.

Chose Tool search and short prompts over Sending every tool definition upfront.

Rationale: The 100+ tool surface created token, quality, and ownership pressure; progressive disclosure lets the agent find relevant tools without overloading every request.

3 supporting quotes
“One big, big shift that, uh, that we I’ve been working on recently that’s about to ship is, um, you know, what happens when you have a lot of tools? [00:52:13] swyx:”article, stated
“It’s, uh, in the latest version of the agent, I, it’s not in custom agents yet, but it will be like, like next week, a week after or so, um, there’s now like over a hundred tools. Just for all, all the crazy notion stuff.”article, stated
“It’s, it was too many tokens. But also it’s a quality issue because it meant that like any engineer could introduce this, this new tool for some like, like niche feature.”article, stated

Distribute tool ownership to product teams.

Chose Product-owned tool definitions with shared eval/platform support over A central AI team owning one prompt and every tool behavior.

Rationale: Distributed ownership scaled contribution velocity and matched the reality that each product surface owns its agent-facing API.

“every team that has a product service at Notion that a user can interface with owns the tool that the agent interfaces with”article, stated
“distribute tools and not have to all collaborate on like one very select string of system prompt is truly, I would say the biggest lever on how we’ve scaled. [00:54:57] Simon Last: We’re fighting to keep the prompt as short as possible now and then, yeah. Yeah. It’s, uh, in the latest version”article, stated

Keep memory and coordination in Notion primitives.

Chose Pages, databases, webhooks, and agent invocation over A separate dedicated agent-memory or agent-message subsystem.

Rationale: Using native primitives lets humans inspect/edit memory and lets agents coordinate through the same system of record users already understand.

3 supporting quotes
“actually, yeah, we didn’t make any special concepts at all. [00:37:06] swyx: They’re interested to the motion notifications that I would’ve got, [00:”article, stated
“they can just like write a task to a database that the other agent’s task to listening to”article, stated
“Memory is, is just pages and databases. And so if you wanna give a memory, just give it a page and give it. Edit access to that page and the [00:”article, stated

Let setup and usage happen in the same chat.

Chose An agent-centered chat with settings as a side panel over Separate settings UI and usage UI as the primary workflow.

Rationale: This increased bootstrapping power and made the agent itself responsible for setup, test, and workflow execution, but required launch-delaying product work and permission safeguards.

3 supporting quotes
“The thing that I really like that most people don’t do is like, the editing chat is the same thing as the using chat. Like you can message the agent to both edit it and use it, versus a lot of other products are like, I think [00:”article, stated
“It can set itself up, it can test itself and it can run the workflow that they want to run.”article, stated
“I mean that’s really fun ‘cause the, we, we ended up sort of uh, uh, painfully delaying the launch. Mm-hmm. By. [01:00:04] Sarah Sachs:”article, stated

Use credits and model auto-selection for custom agents.

Chose Credits over raw token accounting, with task-appropriate model selection over Flat agent-run pricing or always using the most capable model.

Rationale: Costs include tokens, model tier, serving tier, web search, and future sandboxing; many knowledge-work tasks do not need frontier models.

3 supporting quotes
“So we at first we were like, let’s just charge on agent runs. And you know what, you went through all the different versions that ultimately just brought you back to a lot of complexity that mapped directly to token throughput.”article, stated
“the credits and payment structures associated with the token usage.”article, stated
“A lot of the time, the right tool for the job is actually just writing code and not even using agent at all.”article, stated

Use MCP selectively.

Chose MCP for some long-tail or narrow integrations and custom-built integrations for deeply tuned workflows over A single integration strategy for every tool.

Rationale: MCP is useful for some tools and permission shapes, while custom integrations are better when triggers, tool quality, and deterministic operations need deeper product ownership.

“Some things make sense sometimes. And then, you know, we just have to like, like harness the right tool at the right time.”article, stated
“Use M ccp, but, but the Slack mail, er, those are actually ones they built in house. And we spent a lot of time really fine tuning all the tools to make the really good and also like building out the triggers.”article, stated

Gotchas (what bit them)

Building agents before model capability is ready burns effort unless the team can tell whether it is swimming upstream.

Root cause: Early models were too weak for multi-turn agents, context was too short, and tool standards did not exist yet.

Resolution: Notion treated the work as a portfolio, repeatedly rebuilt, and waited for model capability while learning which parts were engineering versus model limitations.

3 supporting quotes
“The models are just too dumb and the context thing was also way too short.”article, stated
“One is not letting yourself swim upstream. So like quickly realizing if you’re just pressing against model capabilities versus not exposing the model to the right information, not having the right infrastructure set up.”article, stated
“You know, we’re always working on multiple projects and, and we’re always trying to work on, you know, maintaining things where that have already shipped, like, like shipping new things that are like eminently working well and make them really good.”article, stated

Internal product representations can be too complex or unnatural for models.

Root cause: Notion first catered to its own block/data model with lossless XML and internal query formats instead of what models had seen in training.

Resolution: The team switched to Notion-flavored markdown and SQLite-like database queries to reduce model-facing complexity.

3 supporting quotes
“we were catering way too much to what made sense for notion and notions data model versus what the model wants.”article, stated
“the model’s no markdown, you know. So, uh, we did a whole project around basically, uh, uh, creating a notion flavored markdown”article, stated
“And the models are super good at that. So [00:49:51] swyx: give the models what they want. [00:49:52] Simon Last:”article, stated

A central few-shot prompt becomes an organizational bottleneck as tool count grows.

Root cause: Few-shot prompting meant one prompt string, ordering effects, and only a small group allowed to edit safely.

Resolution: Notion moved to tool definitions with eval-backed distributed tool ownership.

“It was really just five or six people that were allowed to even touch that or had to approve it rather in our code base.”article, stated
“with the right eval, setup, distribute, um, so that everyone owns their tool and their tool definition.”article, stated

Large tool surfaces can both slow the system and degrade model choices.

Root cause: Putting many tools into the prompt made simple interactions expensive and encouraged inappropriate niche-tool calls.

Resolution: The latest harness uses progressive disclosure and tool search while fighting to keep the prompt short.

3 supporting quotes
“It’s, it was too many tokens. But also it’s a quality issue because it meant that like any engineer could introduce this, this new tool for some like, like niche feature.”article, stated
“we, uh, we had an effort basically to, to make our harness. Uh, implement progressive disclosure”article, stated
“We’re fighting to keep the prompt as short as possible now and then, yeah. Yeah. It’s, uh, in the latest version of the agent, I, it’s not in custom agents yet, but it will be like, like next week, a week after or so, um, there’s now like over a hundred tools.”article, stated

Self-fixing agents create a permission escalation problem.

Root cause: An agent that can edit its own permissions could undermine the explicit grants that make background delegation trustworthy.

Resolution: Notion lets agents help fix setup in an admin/synchronous mode, but does not let them edit their own permissions silently.

3 supporting quotes
“If you let it fix itself, you know, you’re, you’re breaking that, that version there, it, it is not allowed to edit its own permissions.”article, stated
“you’re entering sort of an admin mode where, where, where you’re in a synchronous chat”article, stated
“But as, so, you know, in the current product you can sort of click a button to fix, but now you’re entering sort of an admin mode where, where, where you’re in a synchronous chat and, and you can, and you can see what it’s doing. [00:58:35] Sarah Sachs:”article, stated

Usage-unlimited background agents can create unacceptable margin risk.

Root cause: Some high-volume automations could invoke expensive frontier models at database scale, and asynchronous users may not care about speed-based incentives.

Resolution: Notion introduced credits, usage-based pricing, UI nudges, and auto model selection to align cost with value and capability.

3 supporting quotes
“And if we wanted to ship this functionality, uh, you, we couldn’t afford it, it would bankrupt the company. If we let, for instance, like autofill or the database autofill feature, we’ll soon be agentic That will be associated with usage based pricing.”article, stated
“people don’t care about speed and custom agents. And so the incentive of like, uh, haiku being faster, people don’t care when it’s asynchronous.”article, stated
“we will actually give you nudges in the product to rethink if that’s the right choice.”article, stated

Human search assumptions do not carry over to agentic retrieval.

Root cause: Agent queries differ from human queries, and ranking objectives shift when the consumer is an agent needing top-K context and snippets rather than click-through position.

Resolution: Notion is reinvesting in retrieval, ranking, indexing, snippets, and query generation as one agentic-find journey.

3 supporting quotes
“Positional ranking matters less, but top K retrieval mode matters more.”article, stated
“Similarly, uh, what snippet you include matters more or less. Right. So we are rethinking a lot of that functionality, um, to work with how the agents like to write queries and how, um, they wanna, uh, receive information.”article, stated
“the people that are working on, um, ranking and retrieval are the same people working on what query generation is.”article, stated

Evaluation

Notion treats evals as both product gates and an agent harness. Regression evals live in CI or nightly runs, launch-quality report cards need roughly 80-90% pass rates across user journeys, and frontier/headroom evals such as Notion Last Exam intentionally sit near 30% to avoid saturation. Dedicated model behavior engineers, data scientists, and eval engineers inspect failures, write judges, and use coding agents to run evals, debug failures, and implement fixes.

Metrics: Regression eval pass rate within stochastic margins · Launch report-card pass rate by user journey · Frontier/headroom eval pass rate near 30% · Major nightly/CI failures routed to teams · P99 most token-exhaustive custom-agent transcript reviews · Latency-regression acceptance when appropriate · Enterprise-work-focused model snapshot feedback · Tool ownership and eval ownership by product team

4 supporting quotes
“Regression test. Those live in ci, those have to pass a certain percent, you know, within some stochastic error rate.”article, stated
“we have a report card and we need to, on these categories, you know, be it 80 or 90% of all of these user journeys to launch”article, stated
“Notions last exam is a big thing inside the company and we have people, full-time staff to it exclusively.”article, stated
“Last**: Yeah, this is something that I’ve been pretty excited about recently is we made an effort basically to treat the eval system as like an agent harness. So if you think about it, like, you know, you should be able to have an agent end-to-end, download a dataset, run an eval, iterate on a”article, stated

Outcomes

The case spans late 2022 through the Custom Agents launch, four or five rebuilds, a 50-person core AI capabilities/infrastructure group, 30-40 packaging-team members, over 100 tools, launch evals targeting 80-90%, frontier evals around 30%, 30+ internal go-to-market agents, a manager-agent reduction from 70+ notifications to roughly five per day, a launch delay of weeks to about a month, potential billions of dollars in Opus-backed database-cell autofill cost, and majority search traffic from agents on AI-enabled plans.

6 supporting quotes
“it was our most successful launch in terms of free trials and converting people and things like that.”article, stated
“there’s now like over a hundred tools. Just for all, all the crazy notion stuff.”article, stated
“And so like one of our biggest use cases is bug triaging. So if someone posts something in Slack, can you just have a custom agent that lives there that has its own routing constitution of what team this belongs to, creates a task in your task database and then posts in that Slack channel, right?”article, stated
“So instead of 70 notifications per day, it’s like, like five. And then, and then the manager agent can help like, uh, debug and fix any problems with the, [00:”article, stated
“The search load and the search traffic. Majority of it’s coming from agents, not humans.”article, stated
“Meeting nuts is just like the agent primitive packaged on top of a transcription.”article, stated