{"version":"2.1.234","anchor":"artifact-requests-from-cloud-sessions-can-go-via-a-gateway-r","canonical_anchor":"artifact-requests-from-cloud-sessions-can-go-via-a-gateway-r","heading":"Artifact requests from cloud sessions can go via a gateway relay","tier":"notice","area":"Artifacts","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.234\/e\/artifact-requests-from-cloud-sessions-can-go-via-a-gateway-r","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.234","markdown":"### Artifact requests from cloud sessions can go via a gateway relay\n\nCloud sessions may route artifact calls through a gateway relay, falling back to direct calls on failure.\n\n**What**\n\nWhen Claude Code is running as a remote session, calls to claude.ai for publishing, comments and reads may now be sent through `\/v1\/code\/agent-proxy\/frame` on the gateway using the session's own token, instead of calling claude.ai directly with OAuth. If the relay refuses or errors, the request falls back to the direct call and that request family is skipped for a cool-off period.\n\n**Details**\n\n- Requests are grouped into families (boot, publish, comments, db) by method and URL shape; each family keeps its own decline and serve windows, with failures opening roughly a five-minute fallback to direct calls.\n- Replies carry `route: \"direct\"` or `route: \"relay\"` plus a flag saying whether the answer really came from claude.ai, derived from an `x-ccr-relay-upstream` header. Every caller now checks it, so a relay-level HTTP status is no longer read as claude.ai's verdict: a database write whose relay call failed reports the outcome as unknown rather than failed, and publish failures get their own advisory.\n- The relay path only engages when the session is marked remote with no environment kind set, and behind the `tengu_cobalt_plinth_sorrel` flag, whose built-in fallback is on when the server sends no value.\n- Frame-specific headers matching `^x-frame-[a-z0-9-]+$` are stripped on the relay path. Retry-after on 429\/503 is honoured only when the response actually came from claude.ai.\n- Telemetry `artifact_frame_relay` records `relay_unavailable`, `relay_refused`, `relay_error` and `request_error`, tagged with the family.\n\n**Evidence**\n\n`artifact_frame_relay`, `\/v1\/code\/agent-proxy\/frame`, `x-ccr-relay-upstream`, `tengu_cobalt_plinth_sorrel`, `db write outcome unknown (relay HTTP `\n\n- Flag `tengu_cobalt_plinth_sorrel`: On for this account, and not off by default (read for one account on one subscription tier against v2.1.234; this account: on, anonymous baseline: on, compiled default: on)\n- Area: Artifacts\n- Tier: You'll notice\n- Useful: 2\/5\n- Signal: 4\/5"}