Skip to content

GcpSkillRegistry.get_skill() always fails with 302: Agent Registry media download redirect to GCS signed URL is not followed #6908

Closed

Description

@codebee-aoki

🔴 Required Information

Describe the Bug:
GcpSkillRegistry.get_skill() always fails when downloading the skill archive. The Agent Registry API serves the revision media download (?alt=media) as a 302 redirect to a short-lived GCS signed URL. The httpx.AsyncClient created in _create_httpx_client does not follow redirects (httpx default), and httpx's response.raise_for_status() raises on 3xx responses, so _make_request surfaces the redirect as an error and the skill archive can never be downloaded:

RuntimeError: API request failed with status 302: ...

This makes skill loading from the GCP Agent Registry (e.g. via SkillToolset.load_skill) unusable against the real API.

Steps to Reproduce:

  1. Install google-adk==2.7.1.
  2. Point GcpSkillRegistry at an Agent Registry project/location containing any skill.
  3. await registry.get_skill(name="<any-skill>").
  4. The metadata request succeeds, then the ?alt=media media download fails with the RuntimeError above.

Expected Behavior:
The client follows the 302 redirect to the GCS signed URL and downloads the skill archive. (This is safe: httpx removes the Authorization header when following a cross-origin redirect, so the OAuth bearer token is not forwarded to the signed-URL host.)

Observed Behavior:
RuntimeError: API request failed with status 302: ... raised from _make_request for every skill download.

Environment Details:

Model Information:

  • Are you using LiteLLM: No
  • Which model is being used: N/A (client-side registry download; no model involved)

Fix

PR #6824 is open with the fix: pass follow_redirects=True to both httpx.AsyncClient constructions in _create_httpx_client (plain and mTLS/ssl-context branches). It includes unit tests and has been verified end-to-end against a real Agent Registry catalog (the identical change applied as a monkey-patch on Agent Engine runtime restores skill downloads).

Activity

  1. added
    services[Component] This issue is related to runtime services, e.g. sessions, memory, artifacts, etc
    on Aug 27, 2026
  2. llalitkumarrr commented on Aug 28, 2026

    @llalitkumarrr
    Collaborator

    Hello @codebee-aoki ,

    Thank you for your contribution. We were able to reproduce the bug and test your fix which resolves the issue. The pull request is currently under review and will be merged if approved. Thank you for your patience in the meantime.

  3. codebee-aoki commented on Sep 29, 2026

    @codebee-aoki
    ContributorAuthor

    Fixed by #6824, which landed on main via Copybara as fd14aec (2026-09-29). Verified against a real Agent Registry catalog on unmodified main: GCPSkillRegistry.get_skill() now follows the ?alt=media 302 and the skill archive downloads and parses. Not in a release yet (latest is 2.10.0); it will ship in the next one together with cbbdec3 (#7136). Closing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

services[Component] This issue is related to runtime services, e.g. sessions, memory, artifacts, etc

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions