Admin.app.intent.link now deep-links to the app page instead of rendering in the Sidekick panel

Our app exposes a Sidekick action via an admin_link extension targeting admin.app.intent.link. When Sidekick invokes the intent, it used to render the declared url inside its own intent modal, with the merchant staying in the Sidekick panel.

That is no longer happening. The intent now resolves as a plain deep link: the admin navigates to the app page (/store/<store>/apps/<handle>/split/create_split), and the merchant ends up in the app dashboard instead of the Sidekick panel. The page itself loads correctly and receives the ?intent= payload — only the surface it renders in has changed.

This worked correctly before, with no change on our side to the extension’s type, target, or url.

Extension config:

[[extensions]]
name = "t:name"
description = "t:description"
handle = "sidekick-product-splitting"
type = "admin_link"

[[extensions.targeting]]
target = "admin.app.intent.link"
url = "/split/create_split"
tools = "./tools.json"
instructions = "./instructions.md"

[[extensions.targeting.intents]]
type = "shopify/product"
action = "import"
schema = "./intent-schema.json"

Versions

  • App Bridge: https://cdn.shopify.com/shopifycloud/app-bridge.js , @shopify/app-bridge-react 4.2.8, @shopify/app-bridge 3.7.10
  • App api_version: 2026-01

Question: was the rendering surface for admin.app.intent.link changed, and is rendering inside the Sidekick panel still expected for this target?

Can anyone help me with this?

Please have some patience. It hasn’t even been 24 hours.

I have also noticed this while testing on dev app.

When we invoke the same intent manually from the dev console with a payload, the app UI opens correctly inside the Sidekick panel.

However, when Sidekick itself triggers the intent, Shopify navigates to our app route as a full admin page (/apps/<handle>/...), effectively taking the merchant out of the Sidekick panel. No changes were made on our side to the extension type, target, or URL, and the intent payload (?intent=...) still arrives correctly.