v1.4.0: Bluebird
You dropped in, the run went well, and now the clouds have lifted. Bluebird day: the whole face is in front of you, and for the first time you can see your line before you ride it 🌤️
v1.3.0 was about committing to the run. v1.4.0 is about seeing exactly where you're going. DevTools now renders your app inside a mock ChatGPT or Claude conversation, on desktop and on mobile, so the thing you're building looks like the thing your users will get. And if commerce is your run, there's a full template waiting at the top of the lift.
- Preview mode: your widget inside a ChatGPT or Claude conversation shell, desktop and mobile, without leaving DevTools
- Ecom template:
npm create skybridge@latest --ecomscaffolds a working shopping app, Shopify included - Skills over MCP, updated:
skills/listandskills/getper the current SEP-2640, so ChatGPT's skill importer works
Clear skies, fresh snow. Here's what's new 🏔️
Preview mode
Until now, DevTools showed your widget in a panel. Useful, but a panel is not a conversation, and plenty of layout problems only appear once your view sits in a 768px column under a thread of messages.
Hit preview in the tool panel toolbar and the panel becomes a full ChatGPT conversation, with your real widget in it. Everything around the widget is skeleton (sidebar, thread, disabled composer), measured against the real client in light and dark. Switch the client and you get the same treatment for Claude. Toggle the device and the shell renders inside a 390 x 844 phone frame, with the mobile layout each client actually uses.
The host context is real too: ui/initialize carries the client's own style variables, container dimensions and available display modes while preview is active, so your view themes itself the way it will in production.
Two related changes come with it:
- Display mode is now read-only in the tool panel. It shows what the view asked for, and changes only when the view calls
requestDisplayMode, which is how it works in a real client. - Fullscreen is bounded to the panel work area, so the tools sidebar and header stay visible while you inspect.
The DevTools guide covers the whole thing.
Ecom template
create-skybridge gains a third template next to demo and blank. Pick ecom in the prompt, or skip it:
npm create skybridge@latest my-shop -- --ecomYou get a working shopping app: a search-products tool, a render-carousel tool, a product carousel with a detail view, variant picker, image gallery and a small design system, all with Ladle stories so you can work on the components on their own.
Data goes through a single seam. src/catalog/index.ts re-exports search and getProducts, and that is the only place the app talks to a backend. It ships pointing at a mock catalog, so the app runs before you have any credentials. Point it at ./shopify.js, set SHOPIFY_STORE_DOMAIN and SHOPIFY_STOREFRONT_TOKEN, and you're on the Storefront API. Writing your own provider means exporting those same two functions.
The ecommerce guide walks through the whole thing.
Skills over MCP, updated
v1.3.0 shipped Skills over MCP against the pre-July draft of SEP-2640, which exposed skills as a skill://index.json resource. The SEP has since replaced that index with two mandatory methods, and declaring the extension now commits a server to both.
Skybridge implements skills/list and skills/get, which unblocks ChatGPT's skill importer: it enters through skills/list and used to get a -32601 back. Nothing changes on your side, keep dropping SKILL.md under src/skills/ with skills: true on the server.
Still experimental while the SEP is under review.
Also in this release
authplaneProvider: Authplane joins the branded OAuth providers, configuration only, no extra dependencies.useHostInfo: a view can now tell which host it renders in (claude,chatgpt,cursor,goose, …) and adapt copy, shortcuts or layout to it.getToolError: the MCP SDK swallows whatever a tool handler throws, somcpMiddlewarenever saw the originalError.getToolError(extra)hands it back with stack andcauseintact, which is what you want for Sentry.- Verifier messages no longer leak into the
WWW-Authenticatechallenge unescaped. - Asset URL rewriting at runtime now applies to JS only, leaving CSS alone.
Changes
- chore(deps): update dependency postcss to ^8.5.20 by @renovate[bot] in #992
- feat: add claude to conformance test by @paulleseute in #979
- feat(e2e): add alpic playground by @paulleseute in #998
- fix: re-add examples/* to pnpm workspace by @harijoe in #1002
- fix(descope): advertise the agentic AS's own discovery document by @harijoe in #1004
- fix(build): allow extending esbuild externals via skybridge({ serverExternal }) by @harijoe in #1005
- fix: push images ids to ctx.imageIds by @paulleseute in #1009
- fix(web): don't call adaptor.setViewState inside the React state updater by @harijoe in #1006
- chore(deps): update actions/setup-node action to v7 by @renovate[bot] in #978
- feat(web): add useHostInfo hook to identify the rendering host by @qchuchu in #1011
- fix(deps): update all non-major dependencies by @renovate[bot] in #996
- feat(auth): add authplaneProvider by @muralx in #1013
- fix: chatgpt conformance failure by @paulleseute in #1020
- feat(landing): track install copies, docs CTAs and GitHub clicks in GA by @harijoe in #1019
- docs(skill): update skills for authentication by @harijoe in #894
- fix(create-skybridge): allow esbuild builds for pnpm scaffolds by @qchuchu in #1030
- fix: conformance usesendfollowup message false positive by @paulleseute in #1034
- docs(skill): clarify model context guidance by @thleonard in #1038
- fix(1018): only rewrite asset URLs at runtime for JS, not CSS by @thomaswelton in #1021
- feat(core): implement skills/list and skills/get per current SEP-2640 by @qchuchu in #1036
- fix(devtools): scope forwarded headers to the MCP server origin by @muralx in #1024
- fix(auth): keep verifier messages safe inside the WWW-Authenticate challenge by @muralx in #1025
- feat(auth): type-safe AuthInfo.extra, owned by the verifier by @harijoe in #1023
- feat(core): expose thrown tool errors to MCP middleware via getToolError by @harijoe in #1022
- fix(e2e): dismiss claude modal by @paulleseute in #1039
- DevTools: warn on large tool output and view state by @thleonard in #1040
- feat(landing): install OpenAI Ads measurement pixel by @harijoe in #1042
- feat(devtools): preview mode with ChatGPT skeleton shell by @harijoe in #1043
- feat(devtools): Claude preview shell with client switch (SKY-535) by @harijoe in #1044
- feat(devtools): read-only display mode and panel-bounded fullscreen (SKY-536) by @harijoe in #1048
- feat(devtools): mobile view in the ChatGPT and Claude previews (SKY-541) by @harijoe in #1050
- feat: add ecom template by @paulleseute in #997
- docs(devtools): document preview mode, read-only display mode and context warnings by @harijoe in #1051
Contributors
@harijoe, @muralx, @paulleseute, @qchuchu, @renovate[bot], @thleonard, @thomaswelton