1import{j as e}from"./metal-fx-C6GZ_SKA.js";import{f9 as l,cg as d,c$ as n,dl as c,bM as r,aV as h}from"./index-D1yBc__G.js";import{B as m}from"./BlogBack-CjkMrBR9.js";import{D as p}from"./document-meta-J3yIAzKg.js";import"./motion-BHwmuFpx.js";import"./CaretLeft.es-C4E89nBF.js";const s="text-[16px] leading-[1.7] text-foreground/60 sm:text-[17px]",o="mt-14 font-display text-2xl font-semibold text-foreground sm:text-[28px]",u="mt-8 font-display text-base font-semibold text-foreground",g=[{what:"Neutral governance",detail:"Anthropic contributed MCP to the Linux Foundation's Agentic AI Foundation in December 2025, alongside projects from Block and OpenAI."},{what:"OpenAI",detail:"Added remote MCP server support to its Responses API in May 2025."},{what:"Google",detail:"Announced native SDK support for MCP definitions in the Gemini API at Google I/O 2025."},{what:"First-party servers",detail:"GitHub, Stripe, Shopify, Figma, Notion, Linear and Supabase publish first-party MCP servers or endpoints."}],f=[{q:"What is an agentic interface?",a:"A human-facing surface for monitoring and controlling an AI agent. It shows current state, inputs, actions, outcomes, exceptions, and the interventions a person can make."},{q:"Do AI agents replace dashboards?",a:"Not entirely. Chat replaces some lookup and command interfaces. Dashboards stay useful for repeated monitoring, comparison, approvals, exception handling, and decisions where being wrong is expensive."},{q:"What role does MCP play in interface design?",a:"MCP gives compatible AI clients a standard way to reach external tools and data. It does not decide what a person should see. Teams still choose what to expose, how to represent agent state, and where humans keep control."},{q:"Can a small product team build a custom AI interface?",a:"Yes, for a focused prototype. AI-assisted development makes that practical for a small team. Production work still benefits from engineering review, particularly around authentication, permissions, financial actions, sensitive data, and reliability."},{q:"Is a headless platform the same as an API-first platform?",a:"They overlap. Headless usually describes a system whose interface layer has been separated from its backend. API-first describes a platform built so every capability is reachable programmatically. Salesforce Headless 360 is positioned as both."}],a="underline decoration-foreground/25 underline-offset-2 hover:text-foreground/70";function N(){return e.jsxs("div",{className:"relative min-h-screen",children:[e.jsx(p,{title:l("The Platforms Became APIs. Why AI Agents Still Need Interfaces"),description:"Salesforce made its browser interface optional and major vendors now publish MCP endpoints. Why AI agents do not make interface design obsolete, and when to build your own.",canonicalPath:"/blog/platforms-became-apis"}),e.jsxs("div",{className:"relative z-10",children:[e.jsx(d,{}),e.jsxs("main",{className:"mx-auto max-w-[860px] px-5 pt-28 sm:px-8 sm:pt-[188px]",children:[e.jsx(m,{className:"mb-10"}),e.jsx(n,{children:e.jsx("img",{src:"/blog/cover-platforms-apis.webp",srcSet:"/blog/cover-platforms-apis-960.webp 960w, /blog/cover-platforms-apis.webp 1600w",sizes:"(min-width: 860px) 860px, 100vw",alt:"The word API, an arrow, and the word Interface. Below the arrow, a card showing a GET /v1/portfolio response with fields for value, change, series, holdings and sectors, connected by curved lines to a holdings table of ten positions and a sector allocation donut. Two stone slabs sit at the lower corners.",width:1600,height:840,fetchPriority:"high",decoding:"async",className:"mb-10 block w-full rounded-xl"})}),e.jsxs(n,{children:[e.jsx(c,{icon:"book",align:"start",reveal:!1,className:"mb-4"}),e.jsx("span",{className:"label text-faint",children:"Positioning"}),e.jsx("h1",{className:"display-mid mt-4 text-4xl sm:text-5xl md:text-[54px] md:leading-[1.04]",children:"The platforms became APIs. Why AI agents still need interfaces."}),e.jsxs("p",{className:"mt-4 text-sm font-medium text-faint",children:["Published ",e.jsx("time",{dateTime:"2026-08-04",children:"4 August 2026"}),e.jsx("span",{"aria-hidden":"true",children:" · "}
1),"Every external claim linked to a primary source"]}),e.jsx("p",{className:"mt-6 text-lg leading-[1.6] font-medium text-muted sm:text-xl",children:"AI agents do not make user interfaces obsolete. When software platforms expose their capabilities through APIs and the Model Context Protocol, product teams still need designed surfaces for oversight, intervention, and accountability."})]}),e.jsx(n,{className:"mt-8",children:e.jsxs("div",{className:"rounded-2xl border border-foreground/[0.08] bg-foreground/[0.02] p-5 sm:p-6",children:[e.jsx("span",{className:"label text-faint",children:"Short answer"}),e.jsx("p",{className:`mt-2 ${s}`,children:"The platform may no longer supply the only screen. People still need to see what an AI agent is doing, what changed, where it failed, and when to step in. The interface stops being something you receive and becomes something you own."})]})}),e.jsxs(n,{className:"mt-10",children:[e.jsx("p",{className:s,children:"In 2026, Salesforce announced Headless 360. It makes every major platform capability reachable through an API, an MCP tool, or a CLI command, with more than sixty MCP tools across the launch. The hosted Headless 360 MCP server entered beta in July 2026."}),e.jsxs("p",{className:`mt-4 ${s}`,children:["The phrase worth sitting with is in"," ",e.jsx("a",{href:"https://www.salesforce.com/headless/",rel:"noreferrer",className:a,children:"Salesforceâs own description"}),": the browser interface becomes optional. That does not mean their interface disappeared. It means the browser is now one surface among custom applications, collaboration tools, agents, and command-line workflows."]}),e.jsx("p",{className:`mt-4 ${s}`,children:"Which leaves a question nobody has to answer while the vendor still owns the screen. If the platform no longer supplies the only interface, who decides what a person should see?"})]}),e.jsxs(n,{children:[e.jsx("h2",{className:o,children:"What does it mean when a software platform becomes an API?"}),e.jsxs("p",{className:`mt-4 ${s}`,children:["An ",e.jsx("strong",{className:"font-semibold text-foreground/80",children:"API-first"})," or"," ",e.jsx("strong",{className:"font-semibold text-foreground/80",children:"headless"})," platform exposes its data and actions programmatically instead of requiring every task to happen inside the vendorâs browser interface."]}),e.jsxs("p",{className:`mt-4 ${s}`,children:["MCP extends that idea to AI systems. The"," ",e.jsx("strong",{className:"font-semibold text-foreground/80",children:"Model Context Protocol"})," is an open standard that lets compatible AI clients discover and use external tools and data through one shared interface. Anthropic"," ",e.jsx("a",{href:"https://www.anthropic.com/news/model-context-protocol",rel:"noreferrer",className:a,children:"released MCP in November 2024"}),", and the project launched an"," ",e.jsx("a",{href:"https://blog.modelcontextprotocol.io/posts/2025-09-08-mcp-registry-preview/",rel:"noreferrer",className:a,children:"official public registry"})," ","in September 2025."]}),e.jsx("p",{className:`mt-4 ${s}`,children:"I would not build an argument on one vendorâs launch, so I went looking for whether this was Salesforce or the industry."}),e.jsx("dl",{className:"mt-6 space-y-5",children:g.map(t=>e.jsxs("div",{className:"border-l-2 border-accent-400/40 pl-5",children:[e.jsx("dt",{className:"font-display text-base font-semibold text-foreground",children:t.what}),e.jsx("dd",{className:`mt-1 ${s}`,children:t.detail})]},t.what))}),e.jsx("p",{className:`mt-6 ${s}`,children:"Two of those matter more than the rest. A company does not hand a strategic asset to a foundation; it hands over the things that have to stay neutral for everyone to build on. And competitors do not adopt a rivalâs protocol unless standing outside it costs more than joining."}),e.jsx("p",{className:`mt-4 ${s}`,children:"This is evidence of broad adoption. It is not evidence that every product is headless or that vendor interfaces are going away. Coverage, permissions, and maturity vary."})]}),e.jsxs(n,{children:[e.jsx("h2",{className:o,children:"What changes when the vendor interface is no longer the default?"}),e.jsx("p",{className:`mt-4 ${s}`,children:"Buying operational software has meant buying somebody elseâs opinion about how the work should look. The CRM decides what a pipeline is. The analytics platform decides which numbers sit next to each other. You configure the edges, and where the arrangement does not match how your team thinks, you adapt to the softw
1are."}),e.jsx("p",{className:`mt-4 ${s}`,children:"That arrangement had one quiet benefit. Nobody on your side had to design anything. The interface came in the box."}),e.jsx("p",{className:`mt-4 ${s}`,children:"When the same capabilities arrive through APIs and MCP tools, a team can arrange data and actions around its own workflow instead. The vendorâs interface stays available. It stops being the only possible arrangement."}),e.jsx("blockquote",{className:"my-8 border-l-2 border-accent-400/60 pl-5",children:e.jsx("p",{className:"font-display text-xl font-semibold text-foreground sm:text-2xl",children:"What should an operator see when they arrive in the morning?"})}),e.jsx("p",{className:s,children:"No API answers that. It is a product design question, and the vendor has stopped volunteering one."}),e.jsxs("figure",{className:"mt-8",children:[e.jsx("img",{src:"https://ssicevs.com/blog/api-to-ui.webp",srcSet:"https://ssicevs.com/blog/api-to-ui-960.webp 960w, https://ssicevs.com/blog/api-to-ui.webp 1600w",sizes:"(min-width: 860px) 860px, 100vw",alt:"One API response on the left, reading GET /v1/portfolio with fields for value, change, series, holdings and sectors. Three curved connectors fan out to three different interface components on the right: a price card with a chart, a holdings table with returns and weights, and a sector allocation donut with a legend. The same payload, three answers to what a person should see.",width:1600,height:1102,decoding:"async",className:"block w-full rounded-xl"}),e.jsx("figcaption",{className:"mt-3 text-[13.5px] leading-relaxed text-foreground/40",children:"One payload, three surfaces. Every component here is from my library, rendering the same fields. The platform decides what the data is. Somebody else decides which of these an operator opens in the morning."})]})]}),e.jsxs(n,{children:[e.jsx("h2",{className:o,children:"Do AI agents make user interfaces obsolete?"}),e.jsx("p",{className:`mt-4 ${s}`,children:"No. Agents remove the need for an interface in low-stakes tasks. Consequential workflows still need a human-facing surface."}),e.jsx("p",{className:`mt-4 ${s}`,children:"If an agent is reconciling payments, adjusting inventory, publishing content, or escalating a support case, somebody remains accountable for the outcome. A chat response covers an occasional request. It does not cover continuous oversight, exception handling, or approval."}),e.jsxs("p",{className:`mt-4 ${s}`,children:["An ",e.jsx("strong",{className:"font-semibold text-foreground/80",children:"agentic interface"})," is a human-facing surface that makes an agentâs activity understandable and controllable. A useful one answers five questions:"]}),e.jsx("ol",{className:"mt-4 space-y-2",children:["What is the agent doing now?","Which data and tools did it use?","What changed as a result?","Where is it waiting, uncertain, or failing?","What can a person approve, correct, stop, or retry?"].map((t,i)=>e.jsxs("li",{className:`flex gap-3 ${s}`,children:[e.jsx("span",{className:"mt-0.5 w-4 shrink-0 font-display text-sm font-semibold tabular-nums text-faint",children:i+1}),e.jsx("span",{children:t})]},t))}),e.jsx("p",{className:`mt-4 ${s}`,children:"Five states get skipped in almost every mockup: running, waiting, blocked, failed, needs review. In an AI-operated workflow they are the product."}),e.jsxs("figure",{className:"mt-8",children:[e.jsx("img",{src:"https://ssicevs.com/blog/agent-console.webp",srcSet:"https://ssicevs.com/blog/agent-console-960.webp 960w, https://ssicevs.com/blog/agent-console.webp 1600w",sizes:"(min-width: 860px) 860px, 100vw",alt:"An agent setup flow. The agent proposes a configuration and says the operator can approve it or edit it, listing suggested instruction, product instructions and tone, with an Approve and continue button. The right panel is a review queue with columns reading New, Drafts, Rejected and Ready to send.",width:1600,height:1e3,decoding:"async",className:"block w-full rounded-xl"}),e.jsx("figcaption",{className:"mt-3 text-[13.5px] leading-relaxed text-foreground/40",children:"Setup for an agent in a client project. It proposes a configuration and stops, and the queue behind it separates New from Drafts from Ready to send. Nothing leaves without somebody pressing approve, which is the intervention point a chat reply has nowhere to put. The sidebar entry reading Desearch Twitter MCP is the same protocol this article is about, already shipped in a product."})]})]}),e.jsxs(n,{children:[e.jsx("h2",{className:o,children:"Why interface design matters more in high-stakes AI workflows"}),e.jsx("p",{className:`mt-4 ${s}`,children:"Agents change who supplies the interface, and they raise the stakes of what it communicates."}),e.jsx("p",{className:`mt-4 ${s}`,children:"A good operational surface does more than display output. It establishes hierarchy, shows provenance, separates what the system did from what it recommends, surfaces exceptions, and gives somebody a way to intervene before a mistake gets expensive."}),e.jsxs("figure",{className:"mt-8",children:[e.jsx("img",{src:"https://ssicevs.com/blog/request-log.webp",srcSet:"https://ssicevs.com/blog/request-log-960.webp 960w, https://ssicevs.com/blog/request-log.webp 1600w",sizes:"(min-width: 860px) 860px, 100vw",alt:"A request log listing five API calls. Each row shows a status code, method, path, latency and timestamp. Three rows read 200, one reads 422 in amber, one reads 404 in grey.",width:1600,height:1200,decoding:"async",className:"block w-full rounded-xl"}),e.jsx("figcaption",{className:"mt-3 text-[13.5px] leading-relaxed text-foreground
1/40",children:"Provenance as a component. Status, method, path, latency, timestamp. The 422 and the 404 are the rows that matter, and they are legible without opening anything."})]}),e.jsx("p",{className:`mt-4 ${s}`,children:"There is a real counterargument and I do not want to skip it. Plenty of teams will point an agent at an API, take the answer in a chat window, and never build anything. For lightweight or reversible work that is the right call, and it covers more cases than people in my line of work like to admit."}),e.jsx("p",{className:`mt-4 ${s}`,children:"The dividing line is consequence and repetition:"}),e.jsx("ul",{className:"mt-3 space-y-2",children:["Being wrong is cheap and the task is occasional, so a conversation is enough.","The same judgement happens daily, so a structured surface starts paying for itself.","A mistake is expensive, so somebody needs a reliable way to inspect and intervene."].map(t=>e.jsxs("li",{className:`flex gap-3 ${s}`,children:[e.jsx("span",{"aria-hidden":!0,className:"mt-2 h-1 w-1 shrink-0 rounded-full bg-accent-400/70"}),e.jsx("span",{children:t})]},t))}),e.jsx("p",{className:`mt-4 ${s}`,children:"Most of my work now sits on the third line. Dense product interfaces, AI search, dashboards, and the operational states around them. I decide the information hierarchy and interaction model, then use AI-assisted development to turn those decisions into working software. The coding tools handle a lot of the implementation. Production systems still need engineering review for security, reliability, and maintenance."})]}),e.jsxs(n,{children:[e.jsx("h2",{className:o,children:"A worked example: seven analytics tools, one interface"}),e.jsx("p",{className:`mt-4 ${s}`,children:"In late July 2026 I built an analytics console for my own site, because no single product would show me the relationship between search visibility, behaviour, performance, uptime, and errors."}),e.jsx("p",{className:`mt-4 ${s}`,children:"The data sat in seven places: Google Search Console, Google Analytics 4, Bing Webmaster Tools, Vercel Web Analytics, PageSpeed Insights, Checkly, and Sentry. Seven products, seven logins, and not one of them could see the others. Search Console knows what people searched. Analytics knows what they did next. Neither knows whether the site was up when they arrived."}),e.jsx("p",{className:`mt-4 ${s}`,children:"So I decided what belonged on the same screen and directed the implementation from there. The collector reads each API, normalises the output, and lets any single source fail on its own instead of taking down the view."}),e.jsx("p",{className:`mt-4 ${s}`,children:"The first thing it surfaced was a disagreement. PageSpeedâs simulated mobile Lighthouse runs reported Largest Contentful Paint between 6.8 and 8.0 seconds. My own throttled local runs measured 2.0 to 2.6 seconds."}),e.jsxs("p",{className:`mt-4 ${s}`,children:["My first instinct was that PageSpeed was wrong, and I was ready to write that down. It is not that simple."," ",e.jsx("a",{href:"https://developers.google.com/speed/docs/insights/v5/about",rel:"noreferrer",className:a,children:"Googleâs own documentation"})," ","explains that its lab data comes from a simulated Lighthouse environment, while local and field measurements use different devices, networks, cache states, and locations. The two numbers were never measuring the same thing."]}),e.jsx("p",{className:`mt-4 ${s}`,children:"The finding was not that a number was false. It was that neither number meant anything without its measurement context, and no single vendorâs dashboard shows you that, because each one displays its own figure with complete confidence and never shows you the one that disagrees."}),e.jsx("p",{className:`mt-4 ${s}`,children:"The APIs supplied the data. Putting the values, their sources, and their conditions in one place supplied the meaning. That part was a design decision, not an API call."}),e.jsxs("figure",{className:"mt-8",children:[e.jsx("img",{src:"https://ssicevs.com/blog/lcp-gap.webp",srcSet:"https://ssicevs.com/blog/lcp-gap-960.webp 960w, https://ssicevs.com/blog/lcp-gap.webp 1600w",sizes:"(min-width: 860px) 860px, 100vw",alt:"A comparison chart of mobile Largest Contentful Paint across four routes. Hollow markers show PageSpeed simulated values between 6.8 and 7.7 seconds. Solid markers show throttled browser measurements between 1.9 and 4.6 seconds. A connecting line makes the distance between the two visible on each row.",width:1600,height:666,decoding:"async",className:"block w-full rounded-xl"}),e.jsx("figcaption",{className:"mt-3 text-[13.5px] leading-relaxed text-foreground
1/40",children:"The same four routes, measured two ways on the same day. The connector is the point: each row shows how far a simulated figure sits from a measured one. Neither is wrong, and neither means much alone."})]})]}),e.jsxs(n,{children:[e.jsx("h2",{className:o,children:"When should a product team build its own agentic interface?"}),e.jsx("p",{className:`mt-4 ${s}`,children:"Build one when several of these are true:"}),e.jsx("ul",{className:"mt-3 space-y-2",children:["The workflow crosses multiple platforms or data sources.","Operators make the same judgement repeatedly.","The vendor interface hides context the decision depends on.","Delayed intervention is expensive.","You need approvals, audit history, or exception handling.","A chat transcript cannot show the current operational state."].map(t=>e.jsxs("li",{className:`flex gap-3 ${s}`,children:[e.jsx("span",{"aria-hidden":!0,className:"mt-2 h-1 w-1 shrink-0 rounded-full bg-accent-400/70"}),e.jsx("span",{children:t})]},t))}),e.jsx("p",{className:`mt-4 ${s}`,children:"Keep the vendor interface where it already fits. Use a conversational surface for lightweight, reversible work. Build a focused operational surface when the team needs shared context, repeatability, and control."}),e.jsx("p",{className:`mt-4 ${s}`,children:"Production software still needs authentication, permissions, data contracts, security, monitoring, and maintenance. What AI-assisted development changed is the cost of finding out whether the idea is right. A small team can validate a useful interface now before committing to a platform build."})]}),e.jsxs(n,{children:[e.jsx("h2",{className:o,children:"The interface did not disappear. It came unbundled."}),e.jsx("p",{className:`mt-4 ${s}`,children:"Platforms becoming APIs did not end interface design. It separated the interface from the vendor that owns the system underneath."}),e.jsx("p",{className:`mt-4 ${s}`,children:"AI tools make a prototype faster to build. They do not decide which information belongs together, which states matter, where trust breaks, or when a person should intervene. Somebody still has to sit with the workflow and decide."}),e.jsx("p",{className:"mt-8 font-display text-xl font-semibold text-foreground sm:text-2xl",children:"The opportunity is that more teams can now choose which interface is worth owning, and most have not noticed they are allowed to."})]}),e.jsxs(n,{children:[e.jsx("h2",{className:o,children:"Frequently asked questions"}),e.jsx("dl",{className:"mt-4",children:f.map(t=>e.jsxs("div",{children:[e.jsx("dt",{className:u,children:t.q}),e.jsx("dd",{className:`mt-1.5 ${s}`,children:t.a})]},t.q))})]}),e.jsxs(n,{className:"mt-14",children:[e.jsx("h2",{className:"font-display text-base font-medium text-foreground",children:"Primary sources"}),e.jsxs("ul",{className:"mt-3 space-y-1.5 text-[14px] leading-relaxed text-foreground/45",children:[e.jsxs("li",{children:["Salesforce:"," ",e.jsx("a",{href:"https://www.salesforce.com/headless/",rel:"noreferrer",className:a,children:"Headless 360 overview"})," ","and"," ",e.jsx("a",{href:"https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/headless-360-mcp.html",rel:"noreferrer",className:a,children:"hosted MCP server beta documentation"})]}),e.jsxs("li",{children:["Anthropic:"," ",e.jsx("a",{href:"https://www.anthropic.com/news/model-context-protocol",rel:"noreferrer",className:a,children:"Introducing the Model Context Protocol"})]}),e.jsxs("li",{children:["MCP project:"," ",e.jsx("a",{href:"https://blog.modelcontextprotocol.io/posts/2025-09-08-mcp-registry-preview/",rel:"noreferrer",className:a,children:"Introducing the MCP Registry"})]}),e.jsxs("li",{children:["Linux Foundation:"," ",e.jsx("a",{href:"https://www.linuxfoundation.org/press/linux-foundation-announces-the-formation-of-the-agentic-ai-foundation",rel:"noreferrer",className:a,children:"Formation of the Agentic AI Foundation"})]}),e.jsxs("li",{children:["OpenAI:"," ",e.jsx("a",{href:"https://openai.com/index/new-tools-and-features-in-the-responses-api/",rel:"noreferrer",className:a,children:"Remote MCP server support in the Responses API"})]}),e.jsxs("li",{children:["Google:"," ",e.jsx("a",{href:"https://blog.google/innovation-and-ai/models-and-research/google-deepmind/google-gemini-updates-io-2025/",rel:"noreferrer",className:a,children:"MCP support in the Gemini API"})," ","and"," ",e.jsx("a",{href:"https://developers.google.com/speed/docs/insights/v5/about",rel:"noreferrer",className:a,children:"About PageSpeed Insights"})]}),e.jsxs("li",{children:["First-party MCP documentation:"," ",e.jsx("a",{href:"https://docs.stripe.com/mcp",rel:"noreferrer",className:a,children:"Stripe"}),", ",e.jsx("a",{href:"https://developers.figma.com/docs/figma-mcp-server/",rel:"noreferrer",className:a,children:"Figma"}),", ",e.jsx("a",{href:"https://linear.app/docs/mcp",rel:"noreferrer",className:a,children:"Linear"}),", ",e.jsx("a",{href:"https://supabase.com/docs/guides/ai-tools/mcp",rel:"noreferrer",className:a,children:"Supabase"})]})]})]}),e.jsx(n,{className:"mt-12",children:e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs(r,{to:"/contact",className:"group inline-flex items-center gap-2 rounded-full bg-foreground px-6 py-3 font-display text-base font-semibold text-background transition-colors hover:bg-foreground
1/90",children:["Book a 15-min call",e.jsx("span",{"aria-hidden":!0,className:"transition-transform duration-300 group-hover:translate-x-1",children:"â"})]}),e.jsxs(r,{to:"/services/dashboard-design",className:"group inline-flex items-center gap-2 rounded-full border border-foreground/15 bg-foreground/[0.03] px-6 py-3 font-display text-base font-medium text-foreground/85 transition-colors hover:border-foreground/30 hover:text-foreground",children:["How I build these surfaces",e.jsx("span",{"aria-hidden":!0,className:"transition-transform duration-300 group-hover:translate-x-1",children:"â"})]})]})})]}),e.jsx("div",{className:"mt-24",children:e.jsx(h,{hideCta:!0,hidePortrait:!0,hideAscii:!0})})]})]})}export{f as BLOG_FAQS,N as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.