v1.4.0
THU-MAIC/OpenMAICv1.4.0Aug 11, 2026by harijoe
AI Summary
Introduces a 'Bluebird' release focused on enhancing developer experience with a realistic preview mode in DevTools and a new e-commerce template, alongside updates to the Skills protocol.
Key Highlights
- Preview Mode: Widget rendered inside ChatGPT or Claude conversation shells (desktop/mobile)
- Ecom Template: New scaffolding for shopping apps with Shopify support
- Skills Protocol: Updated to skills/list and skills/get per SEP-2640
- Authplane: New OAuth provider support
New Features
- Preview mode in DevTools
- Ecommerce template
- Skills list and get methods
- Authplane provider
- useHostInfo hook
- getToolError for error handling
- Asset URL rewriting for JS only
Full Release Notes
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 --ecom` scaffolds a working shopping app, Shopify included
- **Skills over MCP, updated**: `skills/list` and `skills/get` per 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](https://docs.skybridge.tech/test/devtools) 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:
```bash
npm create skybridge@latest my-shop -- --ecom
```
You 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](https://docs.skybridge.tech/guides/ecommerce) walks through the whole thing.
## Skills over MCP, updated
`v1.3.0` shipped Skills over MCP against the pre-July draft of [SEP-2640](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/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](https://developers.openai.com/plugins/build/mcp-server#import-skills-from-the-mcp-server): 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](https://authplane.com/) 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, so `mcpMiddleware` never saw the original `Error`. `getToolError(extra)` hands it back with stack and `cause` intact, which is what you want for Sentry.
- **Verifier messages** no longer leak into the `WWW-Authenticate` challenge 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 https://github.com/alpic-ai/skybridge/pull/992
* feat: add claude to conformance test by @paulleseute in https://github.com/alpic-ai/skybridge/pull/979
* feat(e2e): add alpic playground by @paulleseute in https://github.com/alpic-ai/skybridge/pull/998
* fix: re-add examples/* to pnpm workspace by @harijoe in https://github.com/alpic-ai/skybridge/pull/1002
* fix(descope): advertise the agentic AS's own discovery document by @harijoe in https://github.com/alpic-ai/skybridge/pull/1004
* fix(build): allow extending esbuild externals via skybridge({ serverExternal }) by @harijoe in https://github.com/alpic-ai/skybridge/pull/1005
* fix: push images ids to ctx.imageIds by @paulleseute in https://github.com/alpic-ai/skybridge/pull/1009
* fix(web): don't call adaptor.setViewState inside the React state updater by @harijoe in https://github.com/alpic-ai/skybridge/pull/1006
* chore(deps): update actions/setup-node action to v7 by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/978
* feat(web): add useHostInfo hook to identify the rendering host by @qchuchu in https://github.com/alpic-ai/skybridge/pull/1011
* fix(deps): update all non-major dependencies by @renovate[bot] in https://github.com/alpic-ai/skybridge/pull/996
* feat(auth): add authplaneProvider by @muralx in https://github.com/alpic-ai/skybridge/pull/1013
* fix: chatgpt conformance failure by @paulleseute in https://github.com/alpic-ai/skybridge/pull/1020
* feat(landing): track install copies, docs CTAs and GitHub clicks in GA by @harijoe in https://github.com/alpic-ai/skybridge/pull/1019
* docs(skill): update skills for authentication by @harijoe in https://github.com/alpic-ai/skybridge/pull/894
* fix(create-skybridge): allow esbuild builds for pnpm scaffolds by @qchuchu in https://github.com/alpic-ai/skybridge/pull/1030
* fix: conformance usesendfollowup message false positive by @paulleseute in https://github.com/alpic-ai/skybridge/pull/1034
* docs(skill): clarify model context guidance by @thleonard in https://github.com/alpic-ai/skybridge/pull/1038
* fix(1018): only rewrite asset URLs at runtime for JS, not CSS by @thomaswelton in https://github.com/alpic-ai/skybridge/pull/1021
* feat(core): implement skills/list and skills/get per current SEP-2640 by @qchuchu in https://github.com/alpic-ai/skybridge/pull/1036
* fix(devtools): scope forwarded headers to the MCP server origin by @muralx in https://github.com/alpic-ai/skybridge/pull/1024
* fix(auth): keep verifier messages safe inside the WWW-Authenticate challenge by @muralx in https://github.com/alpic-ai/skybridge/pull/1025
* feat(auth): type-safe AuthInfo.extra, owned by the verifier by @harijoe in https://github.com/alpic-ai/skybridge/pull/1023
* feat(core): expose thrown tool errors to MCP middleware via getToolError by @harijoe in https://github.com/alpic-ai/skybridge/pull/1022
* fix(e2e): dismiss claude modal by @paulleseute in https://github.com/alpic-ai/skybridge/pull/1039
* DevTools: warn on large tool output and view state by @thleonard in https://github.com/alpic-ai/skybridge/pull/1040
* feat(landing): install OpenAI Ads measurement pixel by @harijoe in https://github.com/alpic-ai/skybridge/pull/1042
* feat(devtools): preview mode with ChatGPT skeleton shell by @harijoe in https://github.com/alpic-ai/skybridge/pull/1043
* feat(devtools): Claude preview shell with client switch (SKY-535) by @harijoe in https://github.com/alpic-ai/skybridge/pull/1044
* feat(devtools): read-only display mode and panel-bounded fullscreen (SKY-536) by @harijoe in https://github.com/alpic-ai/skybridge/pull/1048
* feat(devtools): mobile view in the ChatGPT and Claude previews (SKY-541) by @harijoe in https://github.com/alpic-ai/skybridge/pull/1050
* feat: add ecom template by @paulleseute in https://github.com/alpic-ai/skybridge/pull/997
* docs(devtools): document preview mode, read-only display mode and context warnings by @harijoe in https://github.com/alpic-ai/skybridge/pull/1051
## Contributors
@harijoe, @muralx, @paulleseute, @qchuchu, @renovate[bot], @thleonard, @thomaswelton