記事一覧へ
## エージェントのためのデザイン
私がよくいる X の界隈にいると、「Obsidian でセカンドブレインを構築した方法」や「Anthropic が [某業界] を FOREVER 終わらせた」という投稿の合間に、「UIは死んだ」という主張も目にするはずです。プロダクトが MCP・API・CLI・その中間の何かでエージェントに使われなければ生き残れない、という話です。
このトレンドは Ramp では現実です。過去3か月間、Claude・ChatGPT・その他のエージェントを通じてプロダクトに手を伸ばしてくる顧客が増えるにつれ、当社MCPのウィークリーアクティブユーザーは10倍に成長しました。
先週、Salesforce がこのテーゼに最初に乗り込んだ大手の1社になりました。
VentureBeat より:
> Salesforce は水曜日に、27年の歴史の中で最も野心的なアーキテクチャの変革を発表しました。「Headless 360」と呼ばれるこの包括的なイニシアチブは、プラットフォームのすべての機能をAPI・MCPツール・CLIコマンドとして公開し、AIエージェントがブラウザを開かずにシステム全体を操作できるようにするものです。
>
> 同社の年次TDX開発者カンファレンス(サンフランシスコ)で発表されたこのアップデートは、100以上の新しいツールとスキルを即座に開発者が利用可能にします。これは、エンタープライズソフトウェアに突きつけられた実存的な問いへの明確な回答です:AIエージェントが推論・計画・実行できる世界で、企業はまだグラフィカルインターフェースを持つCRMを必要とするのでしょうか?
>
> Salesforce の答えはNoで、それこそがポイントです。
これは Salesforce の賢い動きであり、容易ではなかったはずです。ほとんどの営業担当者に聞けば、Salesforceを使うのがいかに嫌いかを語るでしょう。それでもそのプロダクトが広まっているのは、UXの親しみやすさゆえです。セールスリーダーは自分のチームを新しいテクノロジーに慣れさせることに関心はなく、一貫性が機能性を凌駕することが多いです。
Benioff とそのチームは、このお堀が侵食されていることを認め、使用量の大半が Claude・ChatGPT・その他ユーザーの目に触れないバックグラウンドプロセスといったエージェント経由で生まれるという現実に乗り出しています。
UIが死んでいるとは思いません。人間はまだポイントしてクリックしたい、自分の設定を見たい、完了した作業を確認したいと思っています。しかし80/20は逆転しました:ソフトウェアとのインタラクションの新しい80%はエージェント経由になります。これは何を作る必要があるかだけでなく、どのように作るかも変えます。
---
## 新しいインタラクションパターン
過去20年間、人々がソフトウェアと関わる主要な方法はこうでした:
```
ユーザー → インターフェース → データベース
```
プロダクトを開いて、クリックして、作業を完了させます。インターフェースはソフトウェアを体験する方法です。ほとんどの人にとって、インターフェースがプロダクトです。
エージェントがより多くの作業を担うにつれ、新しいレイヤーが生まれました:
```
ユーザー → ユーザーのエージェント(例:Claude) → データベース
```
エージェントがユーザーに代わって動きます。プロダクトを読み、書き、操作するので、ユーザーがそうする必要がなくなります。そして突然インターフェースが消えます。エージェントが直接その下のシステムと話しています。
しかしこれさえも急速に変化しています。ソフトウェア会社は(そうすべきですが)自社のエージェントと機能をデザインしています。新しいパターンはこのようになります:
```
ユーザー → ユーザーのエージェント → ソフトウェアのエージェント → データベース
```
このモデルでは、ソフトウェアのエージェントがユーザーのエージェントに代わって複雑さを処理します:ビジネスロジックを適用し、ルールを施行し、相手が持っていないコンテキストを引き込みます。2つのLLMが協力してある成果に向かって動きます。
---
## エージェントを成功させるための教え方
私はほとんどのブレインストーミング・執筆・アイデア出しをLLMと行います。下書きが共有できる状態になったら、Notion の MCP サーバーを通じてプッシュします。私は長年 Google Docs 派でしたが、Notion の MCP が私を切り替えさせました。
Notion MCP ユーザーとして私が評価することの一つは、エージェントに何かを書くよう頼むたびに、それが完璧に仕上がってくることです。テーブル、箇条書き、イタリック、リスト、何でも — エージェントが失敗することはありません。
これは意図的な設計です。
`notion-create-pages` ツールの説明はこう始まります:「完全な Markdown 仕様については、常に最初に `notion://docs/enhanced-markdown-spec` にある MCP リソースをフェッチしてください。Markdown 構文を推測したり幻覚させたりしないでください。」エージェントにページに何かを書くよう頼むと、それが最初にやることです。仕様をフェッチして、それから書きます。Notion 固有のすべての前提が、一般モデルのデフォルトに対して明示的に呼び出されます。
古い世界では、その仕様はAPIドキュメントに書かれていて、Notion と統合する開発者がそれを読んで内面化し、変換レイヤーを書きます。今では Notion が仕様を必要な瞬間に直接エージェントに手渡します。
Slack MCP を使ったことがあれば、おそらくこの逆を経験しているでしょう。エージェントが標準的な Markdown を前提として Slack 固有のフォーマットに従わない、あの体験です。メッセージを書くより後でフォーマットを直す時間の方が長くなってしまいます。
フォーマットガイドラインはオンラインにあって、どこかに保存してエージェントに使い方を教えることもできます。しかしそれは面倒で、必要なはずがありません。
エージェントの呼び出し元が成功するために何を知る必要があるかを考えて、それを積極的に提供してください。自分で解明させないでください。
---
## フィードバックループを構築する
Ramp で最初に MCP をリリースした時、オブザーバビリティが最大の問題でした。ツール呼び出しの量は見えましたが、それらの呼び出しを生み出した周囲のチャットコンテキストが見えませんでした。量だけでは、何が機能していて、何が壊れていて、人々が実際に何をしようとしているかがわかりませんでした。
いくつかの方法でこれに対処しました:
**すべてのツール呼び出しに `rationale` を必須にする。** すべての MCP または CLI ツール呼び出しで、エージェントにリクエストをする理由を説明する `rationale` パラメータを含めることを必須にしています。チャットは見えませんが、rationale が意図を再構築します。rationale のパターンが、人々が実際に何をしようとしているかを教えてくれます。
**フィードバックツール。** エージェントが行き詰まったり、うまくいかないパターンに遭遇した時に呼び出せるスタンドアロンのツールをリリースしました。エージェントは、何をしようとしていたか・何を試みたか・どこで行き詰まったかを送信します。
**ツール固有のシード。** 後で欲しいコンテキストを取得するために、個別のツールに専用のパラメータを追加しています:エージェントがアクセスできる情報で、そうでなければ推論しなければならないもの。
顧客サポートプラットフォームを構築していて、チケット取得ツールを提供しているとします。時間が経つにつれ、rationale ログに同じフレーズが現れ始めます:「インシデントレポートを作成中」「インシデントサマリーを下書き中」「障害のポストモーテム用にチケットを集めている」。
これは新しいプロダクト機能です! `build-incident-report` ツールは関連チケットを特定し、重大度をスコアリングし、影響を受けた顧客セグメントを引き込み、強く意見のある形式でサマリーを下書きできます。
それが稼働すると、ツールへのフィードバックが届き始めるかもしれません:「レポートが3日前のチケットを引き込んだが、このインシデントとは関係なかった」「フリーティアのユーザーのチケットを含め続けるが、ポストモーテムには入れるべきでない」。突然、エージェントがあなたのエージェントに何を作るべきかを教えてくれています。エージェントは確かに幻覚を起こします。しかし、あなたがリリースするほとんどの人間よりも具体的で一貫したフィードバックを返します。
レポートに無関係なチケットが含まれるなら、日付範囲パラメータを追加します。フリーティアの顧客を含めるべきでないなら、セグメントフィルターを追加します。各フィードバックループがプロダクトを改善する新しい方法になります。
---
## コンテキストギャップを意識する
あらゆるエージェントとのインタラクションで、あなたのシステムは呼び出し元のエージェントが持っていないコンテキストを持っており、呼び出し元のエージェントはあなたのシステムが持っていないコンテキストを持っています。これらのインタラクションをデザインする際、それぞれがどこで優位性を持つかについて意見を持つべきです。
Diegoが出張に行ったとします。DiegoのAI参謀が経費管理システムのエージェントからのSlack通知を受け取ります:最近の出張で未完了の経費があります。2つのエージェントが同じ成果に向けて動いています:これらの経費を正しく提出する。
**Diegoの参謀が持つもの:**
- Diegoのカレンダー:どのミーティングがいつ誰と行われたかを知っている
- Diegoのメール:ホテルと航空券の確認メールが添付ファイルとして存在する
- DiegoのSlack:Acme チームを招待したスレッドから Kokkari のディナーを関連付けられる
- Diegoのレシート(メール添付ファイルとフォトライブラリから抽出)
**経費管理システムが持つもの:**
- 生のトランザクションデータ(加盟店名、取引時間など)
- 申請に関する会社のポリシー
- 会社のGLコード
- 会社の過去のコーディングパターン
従来のAPIはその問題をユーザーに押し返すでしょう。「コードが必要なトランザクションです。このエンドポイントを使って150のGLコードオプションを取得し、1つを選んでください。」
適切に設計されたエージェントインタラクションはこれを逆転させます — GLコードを聞きません。コンテキストを聞きます:これはクライアントミールか、チームミールか、個人の旅行か?参謀エージェントがカレンダーのエントリーかSlackスレッドから答えを引き出します。経費管理システムが、不足していたコンテキストに基づいて正しいコードを適用します。
Diegoも彼のエージェントも、GLコードが何であるかを知る必要はありません。財務チームは正確な分類を得られます。各サイドが知っていることを提供し、Diegoにとって — そして彼の会計士にとって — より良い成果を届けます。
インターフェースはかつてDiegoと彼の経費システムの間に座っていました。今は彼のエージェントとあなたのエージェントの間に座っています。
---
このシフトはプロダクトチームの仕事を再定義します。かつては、速く動きたい、ミスを避けたい、自分の作業を見たいと思う人間のためにデザインしていました。今は同じ人のために、しかし本能・コンテキスト・制限が本人とは異なる仲介者を通してデザインしています。
エージェントを成功させるための教え方、フィードバックループの構築、コンテキストギャップへの対処、これらすべてが同じ根本的な問いを問いかけています:あなたのエージェントの呼び出し元が仕事をうまくこなすために何が必要か、そしてあなたはそれを提供しているか?
ほとんどの会社は MCP をリリースして、チェックボックスを入れて、次に進むでしょう。使用量は数四半期成長して、それから頭打ちになります。時間が経つにつれ、顧客は細部までこだわったプロダクトへと流れ、そうでないものを迂回します。
人間のためにかけた同じ丁寧さでエージェントのためにビルドしてください。気づけば、それが小切手を書く存在になっています。

MCPagent-designSalesforceharness-design
エージェントのためのデザイン:MCP時代にソフトウェアを設計する新しい原則
♥ 324↻ 25
原文を表示 / Show original
Teddy Riker
@teddy_riker
Designing for Agents
29
103
891
410K
If you spend time in the same corner of X as I do, scrolling past the "How I built a second brain with Obsidian" and "Anthropic just KILLED [insert industry] FOREVER" posts, you've probably also seen the take that UI is dead. And unless a product can be used by agents via an MCP, API, CLI, or something in between, it won't survive.
The trend is real at Ramp. Over the past three months, weekly active users on our MCP have grown 10x as more customers reach into the product through Claude, ChatGPT, and other agents.
Last week, Salesforce became one of the first incumbents to lean into this thesis.
From VentureBeat:
Salesforce on Wednesday unveiled the most ambitious architectural transformation in its 27-year history, introducing "Headless 360" — a sweeping initiative that exposes every capability in its platform as an API, MCP tool, or CLI command so AI agents can operate the entire system without ever opening a browser.
The announcement, made at the company's annual TDX developer conference in San Francisco, ships more than 100 new tools and skills immediately available to developers. It marks a decisive response to the existential question hanging over enterprise software: 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.
This is a smart move by Salesforce, and one that I can't imagine was easy to make. Ask most salespeople, and they'll tell you how much they dislike using Salesforce. But the product is pervasive because of the familiarity of its UX. Sales leaders aren't interested in ramping up their teams on new technology, and consistency frequently trumps functionality.
Benioff and team are accepting that this moat is eroding and leaning into the reality that a majority of usage will be driven through agents like Claude, ChatGPT, and other background processes that users never see.
I don't think UI is dying. Humans still want to point and click, see their configurations, and verify completed work. But the 80/20 has flipped: the new 80% of interaction with software will be through agents. That changes not only what you need to build, but how you build it.
The new interaction pattern
For the past twenty years, the primary way people have interacted with software has been:
User → Interface → Database
You open a product, click around, get things done. The interface is how you experience the software. For most people, the interface is the product.
As agents take on more of the work, a new layer has emerged:
User → User's Agent (e.g. Claude) → Database
The agent acts on the user's behalf. It reads, writes, and navigates the product so they don't have to. And suddenly the interface is gone. The agent is talking directly to the system underneath.
But even this is rapidly changing. Software companies are (and should be) designing their own agents and capabilities. So the new pattern looks more like this:
User → User's Agent → Software's Agent → Database
In this model, the software's agent handles complexity on behalf of the user's agent: applying business logic, enforcing rules, pulling in context the latter doesn't have. Two LLMs working together to drive toward an outcome.
Teach agents how to succeed
I do a majority of my brainstorming, writing, and ideating with LLMs. When a draft is ready to share, I push it to Notion through their MCP server. I was a Google Docs loyalist for years; Notion's MCP flipped me.
One thing I appreciate as a Notion MCP user is how every time I ask an agent to write something, it nails it. Tables, bullets, italics, lists, you name it — the agent never fails.
This is by design.
The notion-create-pages tool's description opens with: "For the complete Markdown specification, always first fetch the MCP resource at notion://docs/enhanced-markdown-spec. Do NOT guess or hallucinate Markdown syntax." When I ask my agent to write to a page, that's the first thing it does. It fetches the spec, then writes. Every Notion-specific assumption gets explicitly called out against the general model's defaults.
In an old world, that spec would've lived in API docs, and a developer integrating with Notion would read it, internalize it, and write a transformation layer. Now Notion hands the spec directly to the agent, at the moment it's needed.
If you've ever used the Slack MCP, you've probably experienced the inverse of this. Your agent assumes standard markdown and doesn't adhere to Slack's specific formatting. You end up spending more time editing the formatting than you would have writing the message:
Sure, the formatting guidelines are online and you could save them somewhere and teach your agent how to use them. But that's annoying, and it shouldn't be necessary.
Think about what your agent's callers need to know to succeed, and give it to them proactively. Don't make them figure it out.
Build feedback loops
When we first launched our MCP at Ramp, observability was our largest problem. We could see tool call volume, but we couldn't see the surrounding chat context that produced those calls. Volume alone didn't tell us what was working, what was breaking, or what people were actually trying to accomplish.
We've addressed this in a few ways:
Require a 'rationale' on every tool call. Every MCP or CLI tool call requires the agent to include a rationale parameter explaining why it's making the request. We can't see the chat, but the rationale reconstructs intent. Patterns in the rationales tell us what people are actually trying to do.
A feedback tool. We shipped a standalone tool the agent can call when it gets blocked or runs into a pattern that isn't working. The agent submits what it was trying to do, what it tried, and where it got stuck.
Tool-specific seeds. We add purpose-built parameters to individual tools to capture context we'd want later: things the agent has access to that we'd otherwise have to infer.
Imagine you're building a customer support platform, and you offer tools for customers to fetch tickets. Over time, you start noticing the same phrase in rationale logs: "building an incident report," "drafting incident summary," "gathering tickets for an outage postmortem."
That's a new product feature! A build-incident-report tool could identify related tickets, score severity, pull the affected customer segment, and draft a summary in a strongly opinionated format.
Once that's live, you might start receiving feedback on the tool: "the report pulled in tickets from three days ago that weren't part of this incident" or "it keeps including tickets from free-tier users who don't belong in postmortems." All of a sudden you've got agents telling your agents exactly what to build. Agents hallucinate, sure. But they're also more specific and more consistent in their feedback than most humans you'd ever ship to.
If the report pulls irrelevant tickets, you add a date range parameter. If it shouldn't include free-tier customers, you add a segment filter. Each feedback loop becomes a new way for the product to improve.
Mind the context gap
In any agent interaction, your system has context the calling agent doesn't have, and the calling agent has context your system doesn't have. When designing these interactions, you should have an opinion about where each has a leg up.
Let's say Diego goes on a business trip. Diego's AI chief of staff picks up a Slack nudge from the expense management system's agent: he has incomplete expenses from his recent trip. Two agents are now pointed at the same outcome: submit these expenses correctly.
These two agents bring their own context.
What Diego's chief of staff brings:
Diego's calendar: knows which meetings happened, when, and with whom
Diego's email: has the hotel and flight confirmation as attachments
Diego's Slack: can correlate the Kokkari dinner to a thread where he invited the Acme team
Diego's receipts (pulled from email attachments and photo library)
What the expense management system brings:
The raw transaction data (e.g., merchant, time of transaction)
The company's policies around submission
The company's GL accounts
The company's historical coding patterns
A traditional API would dump the problem back on the user. "Here is a transaction that needs a GL code. Use this endpoint to fetch the 150 GL code options, and pick one."
A well-designed agent interaction flips this — it doesn't ask for a GL code. It asks for context: 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 EM system applies the correct code based on the context it was missing.
Diego and his agent never need to know what the GL codes are, and the finance team gets accurate categorization. Each side contributes what it knows, and delivers an outcome that is better for Diego — and his accountant.
As you design these agent-to-agent interactions, be mindful of the context gap. It's ok to admit where your agent falls short — you're both serving the same user.
The interface used to sit between Diego and his expense system. Now it sits between his agent and yours.
That shift reframes the product team's job. You used to design for a human who wanted to move fast, avoid mistakes, and see their work. Now you're designing for that same person through an intermediary whose instincts, context, and limitations are different from theirs. Teaching agents how to succeed, building feedback loops, and minding the context gap all ask the same underlying question: what does your agent's caller need to do its job well, and are you giving it to them?
Most companies will ship an MCP, check the box, and move on. Their usage will grow for a few quarters, then stall. Over time, customers will route toward products that sweated the details and around 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.
Want to publish your own Article?
Upgrade to Premium
10:53 PM · Apr 23, 2026
·
410K
Views
29
103
891
2.7K
Read 29 replies