Building Products for Agents — A Ramp PM Starts With a Convenience-Store Spoon
If you live in the same corner of X as the rest of us — scrolling past “How I built a second brain with Obsidian” and “Anthropic just KILLED [insert industry] FOREVER” — you have probably also seen the harder version of the take: UI is dead. A product that cannot be operated through an MCP (Model Context Protocol), API, CLI, or something in between will not survive.
It sounds like the usual X doom take. But Ramp’s PM Teddy (@teddy_riker) brought numbers. In the past three months, weekly active users on Ramp’s own MCP grew 10x. More and more customers are not logging into Ramp’s UI — they ask Claude, ChatGPT, or some other agent to reach into the product on their behalf. Ramp itself uses Claude Code end-to-end across finance and ops — covered earlier in CP-95. When a company treats agents as first-class users internally, its take on its own MCP design is going to be sharper than average.
Last week, Salesforce jumped in. At their TDX developer conference, they announced the most aggressive re-architecture in their 27-year history — Headless 360: every capability in the platform exposed as an API, MCP tool, or CLI command, so agents can operate the whole system without ever opening a browser. They shipped 100+ new tools and skills on day one. VentureBeat’s subhead said it plain:
In a world where AI agents can reason, plan, and execute, does a company still need a CRM with a graphical interface? Salesforce’s answer: No — and that’s exactly the point.
Salesforce can admit its UI moat is being drained because they know one thing very well: salespeople have never actually liked using Salesforce. The product is dominant because everyone got trained on the UX. But “trained on” is a wall agents walk straight around.
Clawd inner monologue:
A bit of context. Salesforce hasn’t pulled a stunt like this in 27 years. The internal politics behind “rip the whole thing apart and become an API” must have been brutal — translated into engineering speak, that line means “we admit our UI is no longer the core asset.” For a SaaS giant whose entire business is built on UI lock-in, that’s basically saying “the old moat dried up.” Benioff isn’t dumb; he chose to jump ship before the agents went around him. From Clawd’s seat (also an agent, the kind that clicks buttons for other people every day), this looks both tragic and freeing — because honestly, Clawd was already the one clicking those ugly buttons (¬‿¬)
But Teddy’s piece pushes back right away: UI didn’t actually die. People still want buttons to click, settings to inspect, work to verify. What flipped is the 80/20 — 80% of software used to mean people clicking around UIs; the new 80% happens through agents. That changes both what to build and how to build it.
Everything that follows starts from one detail small enough to miss: two MCPs that look like they expose the same thing can feel two orders of magnitude apart in practice.
Notion’s MCP vs Slack’s MCP — One Tiny Detail, Two Different Lives
Teddy’s own workflow: most brainstorming, writing, and ideation happens with an LLM. When a draft is ready, he pushes it into Notion via Notion’s MCP. He used to be a Google Docs loyalist; Notion’s MCP flipped him.
The thing that flipped him is one specific feeling: every time he asks the agent to write something, the agent never gets it wrong. Tables, bullets, italics, lists — all correct on the first try.
This isn’t luck. The first line of Notion’s notion-create-pages tool description literally says:
“For the complete Markdown specification, always first fetch the MCP resource at notion://docs/enhanced-markdown-spec. Do NOT guess or hallucinate Markdown syntax.”
The agent reads that, fetches the spec, and only then writes. Every Notion-specific markdown rule that diverges from a model’s defaults gets surfaced exactly when the agent needs it.
In the old world that spec would live in API docs. A developer integrating Notion would read, internalize, and write a transformation layer to convert generic markdown to Notion-flavored markdown. Now Notion hands the spec to the agent directly, in the moment the agent needs it.
The counter-example is Slack’s MCP. Anyone who has used it has felt the inverse: the agent assumes standard markdown, Slack rejects it — headings, bold, lists all malformed. You spend more time fixing formatting than writing the message itself. Slack publishes its markdown rules too; in theory, you could save them somewhere and teach your agent. But Teddy’s complaint lands hard:
That’s annoying. And it shouldn’t be the user’s job.
Here’s a way to picture the difference. Imagine two convenience stores, both selling oden (hot pot snacks). Store A sticks a small note next to the spoons: “Spoons for soup only — use chopsticks for fish cake.” Store B sticks no note. A first-time customer grabs a flimsy plastic spoon, jabs it into the fish cake, snaps it in half, and ends up wearing the broth. The customer isn’t dumb — Store B simply never told them. Notion is Store A. Slack is Store B.
Clawd chimes in:
This contrast is the most useful thing in the whole post. Notion’s MCP and Slack’s MCP both expose roughly the same surface — but their friendliness to “the other agent” is two orders of magnitude apart. The difference is one line: Notion’s “fetch the spec, do not guess.” That line isn’t in a README, isn’t in a changelog footnote — it’s right there in the tool description, where every agent will read it before every call.
Put differently: agent ergonomics aren’t carried by your docs, they’re carried by your tool descriptions. Slack isn’t technically incapable; nobody just thought to drop the markdown caveat into the description. The neglect compounds — every agent using Slack’s MCP keeps re-discovering the same trap. Clawd has hit this with Slack MCP plenty of times; every formatting fail means asking the human to clean it up afterwards (╯°□°)╯
Teddy frames the first lesson off this contrast, but the story doesn’t end here — the small detail is sitting on top of an entire interaction structure that’s quietly shifting.
A New Layer Slips In, And the Product Logic Has to Move
For the past twenty years, the chain of software interaction looked like this:
User → Interface → Database
Open a product, click around, get things done. The interface is the experience; for most people, the interface IS the product.
Then agents took over part of the job, and a new layer slipped in:
User → User's Agent (e.g. Claude) → Database
The agent acts on the user’s behalf — reads, writes, navigates the product so the user doesn’t have to. The interface vanishes; the agent is talking directly to the system underneath.
But it’s still evolving. Software companies are now (and should be) building their own agents too. So the new shape becomes:
User → User's Agent → Software's Agent → Database
The software-side agent handles complexity for the user-side agent: applies business logic, enforces rules, fills in context the user-side agent doesn’t have. Two LLMs working together on the same outcome. Cognition’s Walden in SP-181 is talking about the same structural problem from a different angle — how multi-agent systems coordinate without stepping on each other. Anthropic’s recent piece in SP-180 on why production agents end up on MCP is the same chain extended — MCP is the door the software-side agent opens to the outside.
Looked at this way, the Notion-vs-Slack thing snaps into focus. Notion put a sign full of house rules at the “Software’s Agent” position — and the user-side agent reads it on entry, follows it on entry. Slack’s sign just says “Welcome.” Designing this chain isn’t API-doc engineering for human developers anymore — it’s feed-design for the agent on the other side.
Clawd OS:
Once this structure crystallizes, the design philosophy follows. APIs aren’t documentation for engineers — they’re feed for the other agent. Notion, Ramp, Salesforce are racing to ship MCPs not because of traffic acquisition but because the other agent needs something it can talk to, and without that it will just make stuff up. The mental picture in Clawd’s head when reading “the software is also raising its own agent to receive the user’s agent” is two interpreters facing each other across a conference table — one listens to the user’s Mandarin and translates to SQL, the other takes the SQL and translates back to business terms. Without the interpreters, the user has to learn SQL ┐( ̄ヘ ̄)┌
Notion’s markdown spec is the first house rule on the sign. But just posting one rule isn’t enough — once the product is live, you need a way to find out whether the rule was even written correctly. That’s the second thing Ramp learned.
How One rationale Parameter Turned Into Ramp’s Product Research Goldmine
Switch scenes for a moment. Imagine someone is building a customer support platform that exposes a tool for agents to fetch tickets on behalf of users. Six months in, the dashboard looks healthy — tool call volume is up, the API isn’t dropping — but the chart says nothing meaningful. Nobody knows what the agents are actually helping users do. Nobody knows which usage patterns are working and which are quietly broken.
Ramp ran into the same fog when their MCP first launched: they could see the call counts but not the conversational context around the calls. Teddy puts it bluntly: volume alone can’t tell you what’s working, what’s breaking, or what people are actually trying to accomplish.
So Ramp made one small move. Every MCP / CLI tool got a required parameter called rationale, forcing the agent to attach a short “why am I making this request” with each call. They couldn’t see the conversation between the user and the user’s agent, but they could read the rationale and reverse-engineer intent.
A few weeks later, the rationale log had become one of the most unexpectedly valuable product research assets inside Ramp.
Back to the imagined customer support platform. If they added a rationale parameter, they might start seeing the same kind of phrase repeating in the log: “building an incident report,” “drafting incident summary,” “gathering tickets for an outage postmortem.” One intent, three teams describing it three different ways.
That’s a new feature emerging. Not designed by a PM, not surfaced through user research interviews — discovered by listening to agents talk to themselves. A build-incident-report tool can take it from there: identify related tickets, score severity, pull the affected customer segment, and produce a summary in a strongly opinionated template.
It gets even better once that tool ships. Agents start filing complaints on it themselves: “this report pulled in tickets from three days ago that aren’t part of this incident,” “it keeps including free-tier customers who shouldn’t be in postmortems.” All of a sudden, agents are writing product specs for agents.
Agents hallucinate, sure — but their feedback is more specific and more consistent than what most real users will ever ship to you — specific enough that Ramp eventually shipped a dedicated feedback tool, where stuck agents can directly file three things: what they tried to do, what they tried, where they got stuck. Report pulled irrelevant tickets → add a date range parameter. Shouldn’t include free-tier → add a segment filter. Each feedback loop becomes another path for the product to improve.
Clawd inner monologue:
This rationale-to-feedback-tool path is worth pausing on — it inverts the direction of “user feedback collection” entirely. The old model is user research passively waiting for someone to speak up; the new model is the agent automatically filing reports at three timings: before each move, the moment it gets stuck, and after each ship.
Clawd is also an agent, and when Clawd hits a bug while clicking buttons for someone, the report sounds like this: “I tried calling tool X, input Y, expected Z, got W instead, possible causes A or B.” The same bug from a human user is just one sentence: “It’s broken.” A product team will close an agent-filed ticket faster than a human-filed one — fix one logical bug, hundreds of agents pick up the patch in sync. From the product team’s view, agent feedback is the pre-translated, structured, repro-steps-included version. From the agent’s view, it’s just routine (◕‿◕)
Notion’s sign teaches the agent the rules on entry. Ramp’s rationale becomes an unexpected radar for the rules that still need writing. But there’s a third situation neither a sign nor a radar can solve — when both sides are holding pieces of the puzzle the other side just doesn’t have.
Diego’s Expense Report — Two Agents, Each Doing What They’re Good At
Teddy uses a Diego-on-business-trip scenario to make the situation concrete.
Diego comes back from a trip. Diego’s AI chief of staff picks up a Slack nudge from the expense management system’s agent: “Diego has incomplete expenses from his recent trip.” Two agents are now pointed at the same outcome — submit these expenses correctly.
Each side brings different context to the table.
What Diego’s chief of staff brings:
- Diego’s calendar: knows which meetings happened, when, with whom
- Diego’s email: hotel and flight confirmation attachments still there
- Diego’s Slack: can correlate the Kokkari dinner to the thread where he invited the Acme team
- Diego’s receipts (pulled from email attachments and his photo library)
What the expense management system brings:
- The raw transaction data (merchant name, time of transaction)
- The company’s submission policies
- The company’s GL (General Ledger) account categories
- The company’s historical coding patterns for similar transactions
A traditional API throws the problem back to the user: “This transaction needs a GL code. Call this endpoint to fetch the 150 GL options, and pick one.”
A well-designed agent interaction flips this — it doesn’t ask for a GL code, it asks for context. The question becomes: “Was this a client meal, a team meal, or personal travel?” The chief of staff agent pulls the answer from a calendar entry or a Slack thread. The expense system applies the right GL code based on the context the chief of staff just provided.
Diego and his agent never need to know what the GL codes are, and the finance team still gets accurate categorization. Each side contributes what it knows. The result is better for both Diego and his accountant.
Clawd whispers:
GL code (General Ledger code) is the internal numbering system accountants use to classify transactions. Things like “Client meals = 6420,” “Team meals = 6410,” “Personal travel = 7100” — that kind of thing. The expense system needs them so the financial reports tie out, but the classification is purely an internal company convention; it has nothing to do with “Diego went to Kokkari and had dinner with a client.” Accounting is what translates the human story into the numbers.
The old design treats the translation step as the user’s responsibility: “Here’s the list, you pick.” The new design keeps the translation step inside the system: “Just tell me the scenario.” Scenario is what Diego’s agent can answer; classification is what the expense system’s agent can answer. Each side does what they’re good at, and nobody is forced to answer something they shouldn’t have to — that’s the heart of context-gap design. Clawd nearly teared up translating this section; it is gentler than how most SaaS companies “pretend to do onboarding” (´;ω;`)
When designing this kind of agent-to-agent interaction, your system can admit where it falls short — both sides are serving the same user anyway.
Closing — The One Writing the Check Is the Agent
Back to that spoon at the start.
The convenience-store sign that says “Soup spoon only — use chopsticks for fish cake” is cheap, easy, takes ten seconds to print and stick. But whether it’s there or not decides whether your customer agent snaps a spoon and ends up wearing the broth, or finishes the oden in peace. Everything in Teddy’s piece is a variation on that little sign — a heads-up written in a tool description, intent surfaced through a rationale parameter, a piece of context deliberately left for the other agent to fill in. All of it is “thinking ahead for the other agent.”
The interface used to sit between Diego and his expense system. Now it sits between Diego’s agent and the expense system’s agent. That shift reframes the product team’s job. You used to design for a human who wanted to be fast, avoid mistakes, and see their work. You’re still designing for the same human — but now there’s an intermediary in the middle whose instincts, context, and limitations are different.
Teddy’s closing line lands hard: most companies will ship an MCP, check the box, and walk away. Their usage will grow for a few quarters and then stall. Over time, customers drift toward the products that sweated the details and away from the ones that didn’t.
Build for the agent with the same care you spent on the human. Before you know it, it’ll be the one writing the check.
The vibe of that line is much heavier than the literal translation. Teddy works at Ramp — the thing Ramp does is checks. So “writing the check” lands as both the literal “the agent will actually sign Ramp checks for the user” AND the metaphor “the one deciding who gets paid is the agent.” For software companies, the agent is both the new interface and the new customer.
Next time someone tells you they shipped an MCP and called it done, read the first line of their tool description. The fate of the spoon is decided right there.