Reported issues for Compose Preview Catalogs
Pod holds 18 of 41 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.
Back to Compose Preview Catalogs.
Most discussed
ui_builder_render_native returns no frame for a CMP catalog on preview.coo.ee
Status (2026-09-07). Retitled: the first of the two findings below is fixed, the second is not.
— fixed.verticalScrollblocks the whole exportScreenDocumentProjectionnow emits.verticalScroll(rememberScrollState())with the state constructed inline, and its KDoc records that the old refusal "mislocated the state … a wrong diagnosis". Covered byOrdinaryScreenExportTest, which asserts both the call and its import with `assertEquals(emptyList(),…
Read the thread · 2026-09-06 · closed · 7 comments
Tracking: OpenAI MCP Extensions (ChatGPT/Codex desktop entrypoints, file viewers, mentions, model context)
OpenAI published MCP Extensions (docs). They are openai/* additions to MCP and MCP Apps, declared in tool and resource _meta, and hosts that don't understand them ignore them. They let a plugin appear on ChatGPT and Codex desktop surfaces the user opens directly, instead of only when the model decides to call a tool. This issue tracks what we build on them. Each…
Read the thread · 2026-09-30 · open · 4 comments
test: live verification of chat surfaces (Claude in Slack) — smoke script + manual script
Tracks live verification of the chat-surface work from #1254, which shipped in #1258. Server tests cover the contract. This issue covers what only a real deployment and a real Slack workspace can show. It has enough context to pick up cold.
Background (read first)
- What shipped (#1258): on a host with a public origin, every hosted
/mcpresult that shows a picture also carries a signed https PNG link, which expires after 10 minutes. The link appears three times:- as a…
Read the thread · 2026-10-01 · open · 3 comments
ui-builder: remote-m3 declares asset/image but the widget generator refuses every one, so no widget with artwork exports
What happens
remote-m3 lists asset/image among its components, so the builder lets you place artwork in a widget's content slot and the canvas draws it. The Remote Compose generator then refuses the whole document:
// `asset/image` has no Remote Compose counterpart this generator can write
with one diagnostic:
{"severity":"error","code":"UNEXPRESSIBLE_DOCUMENT",
"message":"`asset/image` has no Remote Compose counterpart this generator can write"}
Reproduce
A…
Read the thread · 2026-09-06 · closed · 2 comments
feat: chat surfaces (Slack first) — text+image fallbacks, pick-from-chat, thread links, notifications, unfurls
Part of #1235. Written so another session can pick it up from scratch.
Why
The work under #1235 targets ChatGPT/Codex desktop, which offers file viewers, thread tabs, MCP Apps, pickers and sidebar apps. Teams also discuss and decide in chat tools: Slack first, then Teams, Discord and Google Chat. There, agents run as Claude in Slack or the ChatGPT Slack app, connected to our hosted /mcp (ServeCatalogMcp, ServeUiBuilderMcp), with no MCP Apps, no file viewer and no editor.…
Read the thread · 2026-10-01 · open · 1 comment
Stale render after notify_file_changed (Antigravity, 3.78.0)
Seen in Antigravity 1.2.12 with server 3.78.0, on the ComposeStarter Wear sample.
- The prompt was: "Edit the header to "Hello Android" and re-render".
- The agent edited
MainActivity.kt(+1 −1). - It then called
notify_file_changed,render_previewandrender_previewagain. - It looked at the returned image, then ran
./gradlew :app:compileDebugKotlinitself.
That Gradle step means the renders after the notification were still stale (the old "Header"). The turn took 44 s and was…
Read the thread · 2026-09-27 · closed · 1 comment
Local MCP (mcp/): send short initialize instructions
Problem
The local compose-preview mcp serve server (mcp/) sends no instructions in its initialize result. The hosted /mcp does (ServeCatalogMcp.kt). Antigravity saves each server's instructions to ~/.gemini/antigravity/mcp/<server>/instructions.md and agents read that file. For this server the file holds only an internal ID.
In an observed Antigravity 1.2.12 session, the agent was asked to "Render ListScreenPreview and show it to me". It worked out the workflow by itself:…
Read the thread · 2026-09-27 · closed · 1 comment
fix(mcp): undeclared or wrong-typed knob overrides are accepted and reported as applied
Found by a live knob test against https://preview.coo.ee (3.91.0, 2026-10-02) with a live grant.
What works
Declared knobs reach the renderer through catalog_render_preview and catalog_render_matrix as knob.<key> overrides. I verified each one by looking at the PNG, not only by its hash:
| Preview | Override | Result |
|---|---|---|
compose-m3 button-filled__ideal__default__light |
knob.label: "Hello MCP" |
button reads "Hello MCP" |
| same | knob.enabled: false |
grey… |
Read the thread · 2026-10-02 · closed · 0 comments
Most recent
feat(mcp): structured settings on the plugin page (openai/settings)
Part of #1235. Works on every platform.
What
Today's preview defaults are flags and environment variables. They become native controls on the plugin's page in ChatGPT/Codex.
Design
- Capability. Advertise
capabilities.extensions["openai/settings"] = {readTool, updateTool}: throughserver/discoverfor MCP2026-07-28, and throughinitializefor older versions. - The two tools.
settings_readaccepts{}, is read-only, and declares anoutputSchemaof…
Read the thread · 2026-09-30 · closed · 0 comments
feat(mcp): sidebar apps + deep links for the preview catalog and UI Builder (global entrypoints)
Part of #1235.
What
The preview catalog and the UI Builder open full screen from the ChatGPT/Codex sidebar, on every platform, without asking the model first. Deep links then point straight at one preview or one design, from a PR comment, the diff bot or the CLI.
Design
- Local server (
mcp/). Apreviews_librarytool with entrypoint{type:"global"}and input{}. It renders the viewer in a library mode: registered projects, then modules, then previews, with search and a render…
Read the thread · 2026-09-30 · closed · 0 comments
feat(mcp): visual choices as thumbnail pickers (OpenAI form elicitation)
Part of #1235. Builds on #1120 (elicitation for rule-driven decisions): this issue is only the OpenAI form extensions layered on top of it, and should start after #1120 has settled on its elicitation plumbing.
What
When a choice is visual, the user picks from rendered thumbnails rather than from names. Examples:
- which of three layout variants the agent proposed;
- which preview was meant, when a
render_previewquery matches several; - which device or theme to use for a matrix.
##…
Read the thread · 2026-09-30 · closed · 0 comments
feat(mcp): composer @-mentions for previews
Part of #1235. Desktop only (per the spec).
What
The user types @ProfileScr… in the composer and picks a preview. The message then carries its exact compose-preview:// URI, so the agent renders it directly. It never has to search source files, which is the #1163 failure mode (6.7 minutes spent to do a 3-second render).
Design
- Tool
preview_mentions._meta["openai/extensions"]["mentions/search"]: {}and_meta.ui.visibilityincluding"app". It takes{query: string},…
Read the thread · 2026-09-30 · closed · 0 comments
feat(mcp): thread "Previews" tab — point at a node, it becomes context for the next prompt
Part of #1235.
What
A Previews tab inside each conversation shows the previews for the source files this thread has touched, and re-renders them as the agent edits. The user clicks a node in a render, and it is attached to the next prompt: the crop, its semantics and its source location. "Make this bigger" then refers to exactly that node, where today the user has to describe it.
Design
- Tool
previews_tray. Entrypoint{type:"thread"}; accepts{}; renders…
Read the thread · 2026-09-30 · closed · 0 comments
Local daemon doesn't provide compose/semantics (ComposeStarter, CLI 2.28.0)
Seen in Antigravity 1.2.12 with the compose-preview plugin, CLI 2.28.0 (mcp serve), on the Wear ComposeStarter sample. The agent reported:
Programmatic semantic tree inspection (
compose/semantics) was unavailable on the local daemon, so layout validation was performed directly against the rendered bitmaps
Why it matters:
render_previewdefaults toobserve=semantics(the tree, sha256 and dimensions, with no base64). That default is the token-cheap path for agents.- Without…
Read the thread · 2026-09-27 · closed · 0 comments
Hosted /mcp list_previews with no catalog runs for more than 3 minutes (client timeout)
Observed
In Antigravity 1.2.12 (clientInfo.name antigravity-client), an agent called the hosted catalog server's list_previews with empty arguments ({}):
call_mcp_tool(ServerName="compose-catalogs_compose-preview-catalog", ToolName="list_previews", Arguments={})
→ MCP tool call … timed out after 3m0s: context deadline exceeded
The same session then rendered a local preview in about 3 s. So this single call took up about 3 of the 6.7 minutes the turn lasted. The agent…
Read the thread · 2026-09-27 · closed · 0 comments
Remote render results: add a fetchable signed https PNG URL
Problem (observed in Antigravity 1.2.12 today)
The hosted /mcp render_preview returns the PNG as inline base64 plus a resource_link with a compose-preview://… URI. Hosts without an MCP Apps bridge can't use either to show the image:
- Antigravity renders
<agent-embed>cards asiframe srcdoc. Inside the card,about:srcdocdrops#/?, relative andfile://images fail, whiledata:andhttps:images load (checked with a gstatic PNG: LOADED). - To show a catalog…
Read the thread · 2026-09-27 · closed · 0 comments
ui-builder: server-rendered read-only fallback when the browser has no WebGL
Problem
The Wasm editor (compose-ui-builder ui-builder/src/wasmJsMain/.../Main.kt) needs WebGL for Skiko. When the browser refuses a context, the editor now shows a "WebGL required" message and stops (showWebGlRequiredMessage). The person gets nothing to look at, even for a design they only wanted to view or share.
Ask
Serve a read-only fallback page for a design: the revision-pinned PNG (already produced by the render port), plus title, revision and comments. The editor's no-WebGL…
Read the thread · 2026-09-23 · closed · 0 comments
serve --module: a failed render build is reported as "matched no discovered preview module" (exit 3, not 2)
What is wrong
#956 made --module select the requested module before the build result is checked, so a failed build and a misspelled module are now reported the same way — and the wrong way for the build failure.
ServeRunner.kt (main, ~line 980):
val discovered = discoverAndBuild(silenceStdout = false)
val outcome =
explicitModule?.let { requested ->
selectRequestedModule(discovered, requested)
?: run {
System.err.println(
"serve: --module…
[Read the thread](https://github.com/yschimke/compose-preview-server/issues/957) · 2026-09-19 · closed · 0 comments
The remaining reports are on [the project's issue tracker](https://github.com/yschimke/compose-preview-server/issues).