anthropics / anthropics/claude-code

[FEATURE] Cowork can't read the user's own published artifacts — no authenticated read path, unlike Claude Code

Abierto
#91,611 2 comentarios 0 reacciones 0 asignados Ver en GitHub
area:cowork enhancement
Lenguaje dominante
Python
Estrellas
145k
Forks
23.1k
Métricas de merge de PR
Métricas de PR pendientes

Descripción

# [FEATURE] Cowork can't read the user's own published artifacts — no authenticated read path, unlike Claude Code

### Preflight Checklist

- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single request
- [x] I am using the latest version

### What I'm Trying To Do

Ask a Cowork session to read back one of **my own** published artifacts — a `claude.ai/code/artifact/{uuid}` page that I created and own — so it can update it, audit it, or use it as input to another artifact.

This does not work, and there is currently no route that does.

### What Happens

`WebFetch` on the artifact URL fails in Cowork. It does not return my artifact's content.

Two things make this worth reporting as a gap rather than a permissions problem:

**1. WebFetch itself works fine in Cowork.** In the same sessions, on the same day, it fetched ordinary sites without trouble:

```
webfetch:stockanalysis.com → approved → 26,093 chars
webfetch:www.jobs.manchester.ac.uk → approved
webfetch:findajob.dwp.gov.uk → approved
webfetch:example.com → approved → 249 chars
webfetch:news.ycombinator.com → approved → 16,983 chars, 163 links
```

So this is not a disabled tool, a missing permission, or a network sandbox problem. Generic fetching is healthy; my own artifact specifically is not reachable.

**2. Claude Code can already do it.** From the Claude Code CLI, `WebFetch` on the exact same URL returns the artifact, explicitly tagged as mine:

```
[Artifact dc0d7658-… "Skills Galaxy" — owned by you; raw HTML follows]

```

Claude Code's own tool documentation calls this out as a deliberate capability — *"claude.ai/code/artifact/{uuid} URLs ARE fetchable via your claude.ai login — use WebFetch, not curl."* So an authenticated artifact read exists in the product. Cowork just doesn't have it, despite being the surface that creates most of these artifacts.

### Why This Matters

The obvious workaround — read the local copy at `~/Claude/Artifacts//index.html` instead — **also doesn't work**, because publishing stops updating that file once an artifact is hosted. On my machine the local copy of one artifact is five weeks behind its hosted version. (Filed separately.)

Between the two, a published Cowork artifact is currently unreadable from Cowork by **either** route: the URL isn't authenticated and the local file is stale. Cowork can write artifacts but cannot reliably read back what it wrote. That blocks:

- updating an artifact whose source file is gone or was authored in another session
- auditing or diffing what's actually live versus what a skill believes is live
- one artifact consuming another as input
- any scheduled task that reconciles hosted state

### What I'd Like

Give Cowork the same authenticated artifact read that Claude Code has — WebFetch on a `claude.ai/code/artifact/{uuid}` URL owned by the signed-in user should return that artifact's current content. A dedicated tool (`read_artifact(uuid)`) would be just as good, arguably better, since it could return version metadata alongside the HTML.

### Note On The Error Text

I have not captured the verbatim string Cowork returns when the artifact fetch fails, and I'd rather leave that gap visible than paraphrase it into something misleading. I'll add the exact text as a comment on this issue. The behaviour above — generic fetches succeeding in the same session, the same URL succeeding in Claude Code — is reproducible without it.

### Possible Mechanism (inference — unverified, may be wrong)

Cowork's WebFetch appears not to fetch locally at all. It looks like it POSTs to `…/api/organizations/{orgId}/cowork/web_fetch` with `{url, allowed_urls}`, and that server-side fetcher retrieves pages anonymously — it doesn't carry the signed-in user's session, so a private artifact page looks like any other private URL and is refused. There also seems to be a provenance guard, where `allowed_urls` is seeded from previously-fetched pages' links, so a URL pasted in cold may be rejected before it's even attempted.

I inferred this from the desktop bundle and log lines rather than from source, and I was wrong twice on the way to it — so please treat the mechanism as a hint, not a diagnosis. The observable facts are the ones above: generic fetches succeed in Cowork, the same artifact URL succeeds in Claude Code, and it fails in Cowork.

### Environment

- macOS (Apple Silicon), Darwin 25.5.0
- Claude Desktop 1.44121.1
- Bundled Claude Code SDK 2.1.258
- Plan:

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

Reproduce the behavior with WebFetch in Cowork and Claude Code using the same claude.ai/code/artifact/{uuid} URL. Start by examining the inferred /api/organizations/{orgId}/cowork/web_fetch entry point, the desktop bundle, and related logs; done means Cowork can read the signed-in user's current published artifact while generic fetches continue to work.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
macos
Área
api, authentication
Tipo de issue
Nueva funcionalidad
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Activo
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.