[BUG] Cowork Windows: present_files returns "not accessible on the user's computer" for all files — blocks plugin installation
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
mcp__cowork__present_files fails with "Cannot present file(s) — not accessible on the user's computer" for every file regardless of location, extension, or creation method. This completely blocks the plugin installation workflow since present_files is the only mechanism to deliver .plugin files with an install card.
The issue was not present yesterday (2026-04-16) on the same machine and plan. It appeared today (2026-04-17) with no user-side changes.
Environment
OS: Windows 11
Claude Desktop version: Current as of 2026-04-17
Plan: Max
Session type: Cowork with a mounted workspace folder
What Should Happen?
present_files should render a clickable file card in the chat. For .plugin files specifically, it should render an install card that lets the user browse plugin contents and accept installation.
Impact
Plugin installation is completely blocked. There is no alternative in-session mechanism to install a locally-built .plugin file. The plugin install directory (.remote-plugins/) is read-only from the agent's perspective.
All file delivery is blocked. Even non-plugin files (.docx, .xlsx, .txt) cannot be presented to the user.
This was the primary delivery mechanism recommended by the create-cowork-plugin skill.
Possibly related
#37713 (Cowork Dispatch sessions fully isolated — closed 2026-04-03, but symptoms persist)
#24859 (Cowork Windows plugin skills searched at wrong path)
#37169 (Upload plugin button hidden)
Error Messages/Logs
Steps to Reproduce
Open a Cowork session with a mounted folder
Have Claude create any file in the workspace folder (e.g., Write tool → test.txt)
Have Claude call mcp__cowork__present_files with that file's path
Result: "Cannot present 1 file(s) — not accessible on the user's computer"
Claude Model
Opus
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
2.1.111
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
Windows Terminal
Additional Information
_No response_
5 Comments
Reproduces on macOS — fresh session, no mounted folder, every path fails
Adding a macOS reproduction with additional detail to support the investigation.
Environment
What was tried across two sessions
Session 1 (prior): Attempted to install a packaged
.skillfile viapresent_filesusing multiple path strategies:/tmp/(file had644permissions) → could not complete test;request_cowork_directoryfor a mounted folder failed mid-session and wedged the bash sandbox600permissions) →present_filesreturned "not accessible on the user's computer"Session 2 (today, fresh): Followed the skill-creator SKILL.md instructions exactly with no connected workspace folder:
/tmp/test-skill/SKILL.mdpython -m scripts.package_skill→ produced a valid 225-byte.skillfile in the session outputs directorypresent_fileswith the outputs directory pathResult:
Cannot present 1 file(s) — not accessible on the user's computerNo connected folder, no multi-folder complexity, no prior session state. Cleanest possible reproduction.
Potential clue: file permissions
In session 1, files packaged directly to
/tmp/had644permissions (world-readable), while copies to a local folder had600. This difference was noticed but never fully tested because the bash sandbox became unstable. It's possible the Cowork host process can't read files with more restrictive permissions from the session VM, but this remains unconfirmed.Workaround
Manual upload via Customize → Skills → + → select
.skillfile. This bypassespresent_filesentirely and works, but requires the user to know the file's path on their Mac and navigate to it manually.Impact
The
present_files+.skillinstall flow is the only documented path for programmatic skill installation from within a Cowork session. With this broken, the skill-creator skill's "Package and Present" step is a dead end on macOS.This also compounds #36438, where Claude Code sessions can't install skills at all because
present_filesisn't available there either. Together these two issues mean there's currently no surface where a Claude session can programmatically complete the skill-creator's install flow end-to-end.Cross-platform corroboration: same bug on macOS
Adding a same-symptom reproduction from the other side —
present_filesrefusing every canonical path is happening on macOS too, not just Windows. Our session today reproduced the exact failure mode described in your report.Environment
fuse.bindfs(verified viamount | grep sessions) — not overlayfs, so #37712's "Bug 2" (overlayfs shadow swallowing writes) does not apply to this sessionuserSelectedFoldersat session start~/Library/CloudStorage/OneDrive-<tenant>/CLAUDE_PA/...) — path layout has been stable for monthsReproduction (four cases, same Cowork session, 2026-05-04)
| # | Surface | File type | Size | Mount state | Outcome |
|---|---------|-----------|------|-------------|---------|
| 1 |
xxxskill |.pptx| 5.9 MB | folder added mid-session viarequest_cowork_directory| refused || 2 |
yyystrip |.pptx| 5.9 MB | folder still mounted from case 1 | refused || 3 |
zzzskill |.pdf| 287 KB | folder added mid-session viarequest_cowork_directory| refused || 4 | direct
present_filescall from chat | five files (.py,.md) | 6 KB – 31 KB | all three folders selected at session start | refused |Case 4 is the architecturally interesting one. Every destination folder was in
userSelectedFoldersat session boot; none was added viarequest_cowork_directory. Files refused anyway. This is stricter than the diagnosis in #52956 (which found that only "non-primary"userSelectedFoldersmounts were rejected, with the "primary" one still working) — in our session, even files written into the primary workspace folder are refused.In all four cases:
ls,stat, and the Read tool against the same canonical path moments before thepresent_filescall)cat file > /dev/nullimmediately before the call — defeats any OneDrive Files-On-Demand placeholder)present_filesrefusesThe error string returned every time:
Architectural diagnosis from #52956 — corroborated and extended
#52956 (closed 2026-04-28 as a duplicate, regrettably — its diagnosis is the most precise on the record) describes the mechanism as:
Our reproduction is consistent with that diagnosis except that even the primary mount appears to be refused for us. Possible explanations: (a) the "primary" determination differs across builds and platforms; (b) a stricter variant of the same regression has shipped since #52956 was filed (2026-04-24); (c) the canonical OneDrive CloudStorage path with
CLAUDE_PA/(literal space + dot) is misclassified by the path normaliser. We do not know which.The workaround described in #52956 — copy file to
/sessions/<vm-name>/mnt/outputs/first, then callpresent_filesagainst the scratchpad path — is the only known agent-side mitigation that consistently produces a card. We have not yet tested it in our session because the destination folders here are OneDrive-synced and the user's expectation is that the card opens the OneDrive copy, not the scratchpad copy that vanishes at session end.Version cluster — same bug class across multiple reports
Listing the public reports we found, with state as of 2026-05-04:
| Issue | Surface | Status | Notes |
|---|---|---|---|
| #50041 (this issue) |
present_files: all files refused on Windows | open, regression label | Reporter's machine: Claude Code 2.1.111, started failing 2026-04-17 || #52956 |
present_files:userSelectedFoldersnon-primary refused on macOS | closed as dup, NOT locked | Claude Desktop 1.3883.0, started failing ~mid-April 2026; precise architectural diagnosis || #37712 |
present_filescards never rendered on macOS | closed as dup of #33564, locked-resolved | Claude Code 2.1.81, filed 2026-03-23 — earliest in the cluster || #33564 |
AskUserQuestioncards not rendered | (the dup target) | Different surface, same bug class (client-side tool registration) || #32665 |
AskUserQuestionentirely unavailable in Cowork chat | closed as dup of #29393 | Namesv1.1.5749as the regression-introducing build || #32837, #32481, #32936 | Cowork v1.1.5749 regressions on Windows VM startup | various | Different surface; same release window; corroborate that v1.1.5749 was a buggy release broadly |
The auto-close-as-duplicate machinery has been merging these into wrong umbrellas — #29393 (subagent silent stall when
AskUserQuestionnot in--allowedTools) and the original #33564, neither of which fully describes the symptom on thepresent_filessurface specifically. Three independent reports across two MCP tool surfaces (AskUserQuestion,present_files) and two months of reproductions are currently mis-bucketed.Asks (echoing #50041's existing asks, with additional points)
v1.1.5749(per #32665) and Claude Desktop1.3883.0(per #52956). Route them to a single owner instead of letting the auto-close machinery split them across#29393and#33564.present_files. Per #52956 the change appears to be a narrowing: the tool now accepts only/sessions/<vm>/mnt/outputs/and the primary workspace folder, rejecting otheruserSelectedFoldersmounts. In our session the narrowing is even stricter (or applied differently) and rejects the primary mount too. Identify the build that introduced the narrowing.E_PATH_NOT_IN_ALLOWLIST,E_NON_PRIMARY_USERSELECTED_FOLDER,E_PLACEHOLDER) would let agents recover programmatically.Workaround we deployed agent-side (for context)
We've shipped an agent-side resilience helper that, on
present_filesrefusal:os.path.realpath()and re-asserts canonical-substring guardpresent_fileswith one retry after 1.5sPresentFilesUnavailableexceptionThis converts a silent invisible-card failure into a visible chat affordance the user can act on. It is a UX mitigation, not a fix. We have NOT yet implemented the #52956 scratchpad-copy workaround; doing so would require accepting that the rendered card opens a vanishing scratchpad copy rather than the OneDrive-synced project copy, which defeats the multi-folder workspace model.
We have a five-row JSONL incident log of refusals from a single session and a five-scenario reproduction harness (Python + Markdown runbook) we'd happily share if anyone on the Cowork team wants reproduction artefacts.
Closing for now — inactive for too long. Please open a new issue if this is still relevant.
Still happening on W11 for download
This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.