aaif-goose/goose · error · RecipeParameterScopesUnsupportedError
The connected Goose server does not support securely scoped
Error message
The connected Goose server does not support securely scoped deeplink recipe parameters. Update the server and try again.
What it means
When a session is created with a recipe deeplink (options.recipeDeeplink), the desktop opens a securely scoped parameter scope so the deeplink's recipe arguments cannot be injected into unrelated config. That scope requires the connected Goose server to advertise the recipeParameterScopes capability; getAcpFeatureCapabilities() is queried first and RecipeParameterScopesUnsupportedError is thrown when the server doesn't list it.
Source
Thrown at ui/desktop/src/sessions.ts:55
const { enabled: _enabled, ...config } = extension;
return config as ExtensionConfig;
});
}
return [];
}
async function createAcpSession(
workingDir: string,
options?: CreateSessionOptions
): Promise<Session> {
const configuredParameterScope = options?.recipeDeeplink
? beginConfiguredRecipeParameterScope()
: undefined;
try {
if (configuredParameterScope) {
const capabilities = await getAcpFeatureCapabilities();
if (!capabilities.recipeParameterScopes) {
throw new RecipeParameterScopesUnsupportedError();
}
}
const selectedNames = new Set(selectedExtensionConfigs(options).map((config) => config.name));
const gooseExtensions =
selectedNames.size > 0
? (await getConfiguredGooseExtensions())
.filter((entry) => selectedNames.has(gooseExtensionName(entry.extension)))
.map((entry) => entry.extension)
: [];
return await acpChatSessionController.createSession(workingDir, gooseExtensions, {
recipeId: options?.recipeId,
recipeDeeplink: options?.recipeDeeplink,
recipeParameterScopeId: configuredParameterScope?.id,
});
} finally {
configuredParameterScope?.finish();
}
}View on GitHub (pinned to 3810898a74)
Solutions
- Update the connected Goose server to a version that supports recipe parameter scopes, then retry the deeplink
- If the server cannot be updated, open the recipe without deeplink parameters (avoid passing options.recipeDeeplink) so the capability check is skipped
- Verify getAcpFeatureCapabilities() is reaching the right backend (check GOOSE_EXTERNAL_BACKEND URL) and not silently probing a stale one
- Catch RecipeParameterScopesUnsupportedError specifically and show the update-server message instead of a generic failure
Defensive patterns
Strategy: validation
Validate before calling
const capabilities = await getAcpFeatureCapabilities();
if (deeplinkParams && !capabilities.recipeParameterScopes) {
// show 'update server' message or drop the deeplink params — skip createAcpSession(recipeDeeplink)
} Type guard
const supportsRecipeParameterScopes = async (): Promise<boolean> => (await getAcpFeatureCapabilities()).recipeParameterScopes === true;
Try / catch
try {
session = await createAcpSession(dir, { recipeDeeplink });
} catch (e) {
if (e instanceof RecipeParameterScopesUnsupportedError) {
// retry once WITHOUT recipeDeeplink so the session still opens
session = await createAcpSession(dir, { recipeId });
} else throw e;
} Prevention
- Gate deeplink-parameter UI on the advertised capability before the user clicks
- Version-capability matrix test: old server + new client must degrade, not crash
- Distinguish RecipeParameterScopesUnsupportedError by type, not message text
When it happens
Trigger: Calling createAcpSession with recipeDeeplink while connected via GOOSE_EXTERNAL_BACKEND to an older goose server; server upgraded partially or capability probing fails and returns an empty capability set; protocol version negotiated below the scopes feature.
Common situations: Users on new desktop + old centrally-hosted backend opening goose:// deeplinks; mixed-version clusters; dev pointing GOOSE_EXTERNAL_BACKEND at a stale local build.
Related errors
- goose serve did not emit TLS certificate fingerprint on ${st
- GOOSE_SERVER__SECRET_KEY must be set when using GOOSE_EXTERN
- goose serve started with TLS but did not return a certificat
- Missing extension ID in args
- Invalid deeplink or recipe format
AI-assisted analysis of aaif-goose/goose@3810898a74 (2026-08-16).
Data as JSON: /api/errors/fa0622dd0353d8fb.
Report an issue: GitHub.