claude-code - 💡(How to fix) Fix [BUG] Cowork macOS: VirtioFS mount fails on every prompt after first successful artifact mount — OneDrive symlinked ~/Documents [2 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
anthropics/claude-code#52567Fetched 2026-04-24 06:03:42
View on GitHub
Comments
2
Participants
2
Timeline
7
Reactions
0
Timeline (top)
labeled ×4commented ×2closed ×1

Error Message

RPC error: failed to mount /mnt/.virtiofs-root/shared/Users/JHunt13/Documents/Claude/Artifacts/test-artifact-2026 as .artifacts/test-artifact-2026: source path does not exist and could not be created: /mnt/.virtiofs-root/shared/Users/JHunt13/Documents/Claude/Artifacts/test-artifact-2026: mkdir /mnt/.virtiofs-root/shared/Users/JHunt13/Documents: file exists

Root Cause

</div> <hr class="border-border-200 border-t-0.5 my-3 mx-1.5"> <h2 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">Filesystem Configuration</h2> <div role="group" aria-label="bash code" tabindex="0" class="relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100"><div class="sticky opacity-0 group-hover/copy:opacity-100 group-focus-within/copy:opacity-100 top-2 py-2 h-12 w-0 float-right"><div class="absolute right-0 h-8 px-2 items-center inline-flex z-10"><button class="inline-flex items-center justify-center relative isolate shrink-0 can-focus select-none disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none disabled:drop-shadow-none border-transparent transition font-base duration-300 ease-[cubic-bezier(0.165,0.85,0.45,1)] h-8 w-8 rounded-md backdrop-blur-md _fill_10ocf_9 _ghost_10ocf_96" type="button" aria-label="Copy to clipboard" data-state="closed"><div class="relative"><div class="transition-all opacity-100 scale-100" style="width: 20px; height: 20px; display: flex; align-items: center; justify-content: center;"><svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="transition-all opacity-100 scale-100" aria-hidden="true" style="flex-shrink: 0;"><path d="M12.5 3A1.5 1.5 0 0 1 14 4.5V6h1.5A1.5 1.5 0 0 1 17 7.5v8a1.5 1.5 0 0 1-1.5 1.5h-8A1.5 1.5 0 0 1 6 15.5V14H4.5A1.5 1.5 0 0 1 3 12.5v-8A1.5 1.5 0 0 1 4.5 3zm1.5 9.5a1.5 1.5 0 0 1-1.5 1.5H7v1.5a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5H14zM4.5 4a.5.5 0 0 0-.5.5v8a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5z"></path></svg></div><div class="absolute inset-0 flex items-center justify-center"><div class="transition-all opacity-0 scale-50" style="width: 20px; height: 20px; display: flex; align-items: center; justify-content: center;"><svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="transition-all opacity-0 scale-50" aria-hidden="true" style="flex-shrink: 0;"><path d="M15.188 5.11a.5.5 0 0 1 .752.626l-.056.084-7.5 9a.5.5 0 0 1-.738.033l-3.5-3.5-.064-.078a.501.501 0 0 1 .693-.693l.078.064 3.113 3.113 7.15-8.58z"></path></svg></div></div></div></button></div></div><div class="text-text-500 font-small p-3.5 pb-0">bash</div><div class="overflow-x-auto"><pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed p-3.5" style="color: rgb(20, 24, 31); background: transparent; font-family: var(--font-mono);"><code class="language-bash" style="color: rgb(20, 24, 31); background: transparent; font-family: var(--font-mono); white-space: pre;"><span><span>$ </span><span class="token token" style="color: rgb(0, 81, 194);">ls</span><span> -la ~/Documents </span></span><span><span>lrwxr-xr-x </span><span class="token token" style="color: rgb(0, 128, 128);">1</span><span> JHunt13 staff </span><span class="token token" style="color: rgb(0, 128, 128);">63</span><span> Mar </span><span class="token token" style="color: rgb(0, 128, 128);">24</span><span> </span><span class="token token" style="color: rgb(0, 128, 128);">11</span><span>:21 /Users/JHunt13/Documents -</span><span class="token token" style="color: rgb(20, 24, 31);">&gt;</span><span> </span></span><span>/Users/JHunt13/Library/CloudStorage/OneDrive-CBRE,Inc/Documents </span><span> </span><span><span>$ </span><span class="token token" style="color: rgb(0, 81, 194);">ls</span><span> -la ~/Documents/Claude/ </span></span><span><span>drwxr-xr-x@ </span><span class="token token" style="color: rgb(0, 128, 128);">5</span><span> JHunt13 staff </span><span class="token token" style="color: rgb(0, 128, 128);">160</span><span> Apr </span><span class="token token" style="color: rgb(0, 128, 128);">23</span><span> </span><span class="token token" style="color: rgb(0, 128, 128);">16</span><span>:22 </span><span class="token token" style="color: rgb(179, 74, 0);">.</span><span> </span></span><span><span>lrwxr-xr-x </span><span class="token token" style="color: rgb(0, 128, 128);">1</span><span> JHunt13 staff </span><span class="token token" style="color: rgb(0, 128, 128);">30</span><span> Apr </span><span class="token token" style="color: rgb(0, 128, 128);">23</span><span> </span><span class="token token" style="color: rgb(0, 128, 128);">16</span><span>:22 Artifacts -</span><span class="token token" style="color: rgb(20, 24, 31);">&gt;</span><span> /Users/JHunt13/ClaudeArtifacts </span></span><span><span>drwxr-xr-x@ </span><span class="token token" style="color: rgb(0, 128, 128);">3</span><span> JHunt13 staff </span><span class="token token" style="color: rgb(0, 128, 128);">96</span><span> Apr </span><span class="token token" style="color: rgb(0, 128, 128);">21</span><span> </span><span class="token token" style="color: rgb(0, 128, 128);">11</span><span>:29 Scheduled</span></span></code></pre></div></div> <p class="font-claude-response-body break-words whitespace-normal leading-[1.7]">Note: <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">Artifacts</code> was manually symlinked to a local directory (<code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">/Users/JHunt13/ClaudeArtifacts</code>) as a workaround attempt — this fixed the first mount but did not resolve the subsequent prompt failure.</p> <hr class="border-border-200 border-t-0.5 my-3 mx-1.5"> <h2 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">Workarounds Attempted</h2> <p class="font-claude-response-body break-words whitespace-normal leading-[1.7]">All of the following were attempted and <strong>did not resolve the issue</strong>:</p> <ol class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3"> <li class="whitespace-normal break-words pl-2"><strong>Created <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">~/Documents/Claude/Artifacts</code> directory manually</strong> — first mount succeeds, subsequent prompts still fail</li> <li class="whitespace-normal break-words pl-2"><strong>Symlinked <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">Artifacts</code> to a truly local directory</strong> (<code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">/Users/JHunt13/ClaudeArtifacts</code>) — same result, first mount succeeds, all subsequent prompts fail</li> <li class="whitespace-normal break-words pl-2"><strong>Cleared stale session references</strong> (<code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">cowork-enabled-cli-ops.json</code>, <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">git-worktrees.json</code>, <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">local-agent-mode-sessions</code>) before each session — allows one successful artifact per session, but the error recurs on the very next prompt</li> <li class="whitespace-normal break-words pl-2"><strong>Started a brand new Cowork session</strong> after each artifact — same one-mount-per-session limitation</li> <li class="whitespace-normal break-words pl-2"><strong>Pointed Cowork to a different project folder</strong> — Cowork still hardcodes artifact output to <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">~/Documents/Claude/Artifacts/</code>, ignoring the selected project folder</li> </ol> <hr class="border-border-200 border-t-0.5 my-3 mx-1.5"> <h2 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">Root Cause Analysis</h2> <p class="font-claude-response-body break-words whitespace-normal leading-[1.7]">The issue has two layers:</p> <p class="font-claude-response-body break-words whitespace-normal leading-[1.7]"><strong>Layer 1 — OneDrive symlink incompatibility (existing known bug):</strong> virtiofs cannot traverse <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">~/Documents</code> when it is a symlink to OneDrive CloudStorage. The VM's mount layer expects a real local directory, not a symlink to a cloud filesystem driver. This is documented in #25293 and #42795.</p> <p class="font-claude-response-body break-words whitespace-normal leading-[1.7]"><strong>Layer 2 — Stale file node not released between prompts (new/variant bug):</strong> After the first successful mount (achieved via the local Artifacts symlink workaround), the VM registers <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">Documents</code> as a node in <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">/mnt/.virtiofs-root/</code>. On every subsequent prompt — including non-artifact prompts — Cowork attempts to re-mount the artifact path. The VM finds the <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">Documents</code> node already registered as a file rather than a directory and fails with <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">file exists</code>. This node is <strong>not cleared between prompts within the same session</strong>, making Cowork non-functional after the first artifact regardless of other workarounds.</p> <hr class="border-border-200 border-t-0.5 my-3 mx-1.5"> <h2 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">Feature Request / Suggested Fix</h2> <ol class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3"> <li class="whitespace-normal break-words pl-2"><strong>Add <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">artifactsPath</code> config override</strong> to <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">claude_desktop_config.json</code> — this would allow enterprise users to redirect artifact storage to a local path outside of OneDrive, e.g.:</li> </ol> <div role="group" aria-label="json code" tabindex="0" class="relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100"><div class="sticky opacity-0 group-hover/copy:opacity-100 group-focus-within/copy:opacity-100 top-2 py-2 h-12 w-0 float-right"><div class="absolute right-0 h-8 px-2 items-center inline-flex z-10"><button class="inline-flex items-center justify-center relative isolate shrink-0 can-focus select-none disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none disabled:drop-shadow-none border-transparent transition font-base duration-300 ease-[cubic-bezier(0.165,0.85,0.45,1)] h-8 w-8 rounded-md backdrop-blur-md _fill_10ocf_9 _ghost_10ocf_96" type="button" aria-label="Copy to clipboard" data-state="closed"><div class="relative"><div class="transition-all opacity-100 scale-100" style="width: 20px; height: 20px; display: flex; align-items: center; justify-content: center;"><svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="transition-all opacity-100 scale-100" aria-hidden="true" style="flex-shrink: 0;"><path d="M12.5 3A1.5 1.5 0 0 1 14 4.5V6h1.5A1.5 1.5 0 0 1 17 7.5v8a1.5 1.5 0 0 1-1.5 1.5h-8A1.5 1.5 0 0 1 6 15.5V14H4.5A1.5 1.5 0 0 1 3 12.5v-8A1.5 1.5 0 0 1 4.5 3zm1.5 9.5a1.5 1.5 0 0 1-1.5 1.5H7v1.5a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5H14zM4.5 4a.5.5 0 0 0-.5.5v8a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5z"></path></svg></div><div class="absolute inset-0 flex items-center justify-center"><div class="transition-all opacity-0 scale-50" style="width: 20px; height: 20px; display: flex; align-items: center; justify-content: center;"><svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="transition-all opacity-0 scale-50" aria-hidden="true" style="flex-shrink: 0;"><path d="M15.188 5.11a.5.5 0 0 1 .752.626l-.056.084-7.5 9a.5.5 0 0 1-.738.033l-3.5-3.5-.064-.078a.501.501 0 0 1 .693-.693l.078.064 3.113 3.113 7.15-8.58z"></path></svg></div></div></div></button></div></div><div class="text-text-500 font-small p-3.5 pb-0">json</div><div class="overflow-x-auto"><pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed p-3.5" style="color: rgb(20, 24, 31); background: transparent; font-family: var(--font-mono);"><code class="language-json" style="color: rgb(20, 24, 31); background: transparent; font-family: var(--font-mono); white-space: pre;"><span><span> </span><span class="token token" style="color: rgb(43, 48, 59);">{</span><span> </span></span><span><span> </span><span class="token token" style="color: rgb(184, 10, 24);">"preferences"</span><span class="token token" style="color: rgb(20, 24, 31);">:</span><span> </span><span class="token token" style="color: rgb(43, 48, 59);">{</span><span> </span></span><span><span> </span><span class="token token" style="color: rgb(184, 10, 24);">"artifactsPath"</span><span class="token token" style="color: rgb(20, 24, 31);">:</span><span> </span><span class="token token" style="color: rgb(0, 128, 0);">"/Users/JHunt13/ClaudeArtifacts"</span><span> </span></span><span><span> </span><span class="token token" style="color: rgb(43, 48, 59);">}</span><span> </span></span><span><span> </span><span class="token token" style="color: rgb(43, 48, 59);">}</span></span></code></pre></div></div> <ol class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3" start="2"> <li class="whitespace-normal break-words pl-2"><strong>Detect OneDrive/symlinked paths</strong> at session start and warn the user to select a local directory</li> <li class="whitespace-normal break-words pl-2"><strong>Release or refresh the virtiofs mount node</strong> between prompts rather than leaving a stale file node in the virtual root</li></ol>

Fix Action

Fix / Workaround

</div> <hr class="border-border-200 border-t-0.5 my-3 mx-1.5"> <h2 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">Filesystem Configuration</h2> <div role="group" aria-label="bash code" tabindex="0" class="relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100"><div class="sticky opacity-0 group-hover/copy:opacity-100 group-focus-within/copy:opacity-100 top-2 py-2 h-12 w-0 float-right"><div class="absolute right-0 h-8 px-2 items-center inline-flex z-10"><button class="inline-flex items-center justify-center relative isolate shrink-0 can-focus select-none disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none disabled:drop-shadow-none border-transparent transition font-base duration-300 ease-[cubic-bezier(0.165,0.85,0.45,1)] h-8 w-8 rounded-md backdrop-blur-md _fill_10ocf_9 _ghost_10ocf_96" type="button" aria-label="Copy to clipboard" data-state="closed"><div class="relative"><div class="transition-all opacity-100 scale-100" style="width: 20px; height: 20px; display: flex; align-items: center; justify-content: center;"><svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="transition-all opacity-100 scale-100" aria-hidden="true" style="flex-shrink: 0;"><path d="M12.5 3A1.5 1.5 0 0 1 14 4.5V6h1.5A1.5 1.5 0 0 1 17 7.5v8a1.5 1.5 0 0 1-1.5 1.5h-8A1.5 1.5 0 0 1 6 15.5V14H4.5A1.5 1.5 0 0 1 3 12.5v-8A1.5 1.5 0 0 1 4.5 3zm1.5 9.5a1.5 1.5 0 0 1-1.5 1.5H7v1.5a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5H14zM4.5 4a.5.5 0 0 0-.5.5v8a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5z"></path></svg></div><div class="absolute inset-0 flex items-center justify-center"><div class="transition-all opacity-0 scale-50" style="width: 20px; height: 20px; display: flex; align-items: center; justify-content: center;"><svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="transition-all opacity-0 scale-50" aria-hidden="true" style="flex-shrink: 0;"><path d="M15.188 5.11a.5.5 0 0 1 .752.626l-.056.084-7.5 9a.5.5 0 0 1-.738.033l-3.5-3.5-.064-.078a.501.501 0 0 1 .693-.693l.078.064 3.113 3.113 7.15-8.58z"></path></svg></div></div></div></button></div></div><div class="text-text-500 font-small p-3.5 pb-0">bash</div><div class="overflow-x-auto"><pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed p-3.5" style="color: rgb(20, 24, 31); background: transparent; font-family: var(--font-mono);"><code class="language-bash" style="color: rgb(20, 24, 31); background: transparent; font-family: var(--font-mono); white-space: pre;"><span><span>$ </span><span class="token token" style="color: rgb(0, 81, 194);">ls</span><span> -la ~/Documents </span></span><span><span>lrwxr-xr-x </span><span class="token token" style="color: rgb(0, 128, 128);">1</span><span> JHunt13 staff </span><span class="token token" style="color: rgb(0, 128, 128);">63</span><span> Mar </span><span class="token token" style="color: rgb(0, 128, 128);">24</span><span> </span><span class="token token" style="color: rgb(0, 128, 128);">11</span><span>:21 /Users/JHunt13/Documents -</span><span class="token token" style="color: rgb(20, 24, 31);">&gt;</span><span> </span></span><span>/Users/JHunt13/Library/CloudStorage/OneDrive-CBRE,Inc/Documents </span><span> </span><span><span>$ </span><span class="token token" style="color: rgb(0, 81, 194);">ls</span><span> -la ~/Documents/Claude/ </span></span><span><span>drwxr-xr-x@ </span><span class="token token" style="color: rgb(0, 128, 128);">5</span><span> JHunt13 staff </span><span class="token token" style="color: rgb(0, 128, 128);">160</span><span> Apr </span><span class="token token" style="color: rgb(0, 128, 128);">23</span><span> </span><span class="token token" style="color: rgb(0, 128, 128);">16</span><span>:22 </span><span class="token token" style="color: rgb(179, 74, 0);">.</span><span> </span></span><span><span>lrwxr-xr-x </span><span class="token token" style="color: rgb(0, 128, 128);">1</span><span> JHunt13 staff </span><span class="token token" style="color: rgb(0, 128, 128);">30</span><span> Apr </span><span class="token token" style="color: rgb(0, 128, 128);">23</span><span> </span><span class="token token" style="color: rgb(0, 128, 128);">16</span><span>:22 Artifacts -</span><span class="token token" style="color: rgb(20, 24, 31);">&gt;</span><span> /Users/JHunt13/ClaudeArtifacts </span></span><span><span>drwxr-xr-x@ </span><span class="token token" style="color: rgb(0, 128, 128);">3</span><span> JHunt13 staff </span><span class="token token" style="color: rgb(0, 128, 128);">96</span><span> Apr </span><span class="token token" style="color: rgb(0, 128, 128);">21</span><span> </span><span class="token token" style="color: rgb(0, 128, 128);">11</span><span>:29 Scheduled</span></span></code></pre></div></div> <p class="font-claude-response-body break-words whitespace-normal leading-[1.7]">Note: <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">Artifacts</code> was manually symlinked to a local directory (<code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">/Users/JHunt13/ClaudeArtifacts</code>) as a workaround attempt — this fixed the first mount but did not resolve the subsequent prompt failure.</p> <hr class="border-border-200 border-t-0.5 my-3 mx-1.5"> <h2 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">Workarounds Attempted</h2> <p class="font-claude-response-body break-words whitespace-normal leading-[1.7]">All of the following were attempted and <strong>did not resolve the issue</strong>:</p> <ol class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3"> <li class="whitespace-normal break-words pl-2"><strong>Created <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">~/Documents/Claude/Artifacts</code> directory manually</strong> — first mount succeeds, subsequent prompts still fail</li> <li class="whitespace-normal break-words pl-2"><strong>Symlinked <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">Artifacts</code> to a truly local directory</strong> (<code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">/Users/JHunt13/ClaudeArtifacts</code>) — same result, first mount succeeds, all subsequent prompts fail</li> <li class="whitespace-normal break-words pl-2"><strong>Cleared stale session references</strong> (<code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">cowork-enabled-cli-ops.json</code>, <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">git-worktrees.json</code>, <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">local-agent-mode-sessions</code>) before each session — allows one successful artifact per session, but the error recurs on the very next prompt</li> <li class="whitespace-normal break-words pl-2"><strong>Started a brand new Cowork session</strong> after each artifact — same one-mount-per-session limitation</li> <li class="whitespace-normal break-words pl-2"><strong>Pointed Cowork to a different project folder</strong> — Cowork still hardcodes artifact output to <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">~/Documents/Claude/Artifacts/</code>, ignoring the selected project folder</li> </ol> <hr class="border-border-200 border-t-0.5 my-3 mx-1.5"> <h2 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">Root Cause Analysis</h2> <p class="font-claude-response-body break-words whitespace-normal leading-[1.7]">The issue has two layers:</p> <p class="font-claude-response-body break-words whitespace-normal leading-[1.7]"><strong>Layer 1 — OneDrive symlink incompatibility (existing known bug):</strong> virtiofs cannot traverse <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">~/Documents</code> when it is a symlink to OneDrive CloudStorage. The VM's mount layer expects a real local directory, not a symlink to a cloud filesystem driver. This is documented in #25293 and #42795.</p> <p class="font-claude-response-body break-words whitespace-normal leading-[1.7]"><strong>Layer 2 — Stale file node not released between prompts (new/variant bug):</strong> After the first successful mount (achieved via the local Artifacts symlink workaround), the VM registers <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">Documents</code> as a node in <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">/mnt/.virtiofs-root/</code>. On every subsequent prompt — including non-artifact prompts — Cowork attempts to re-mount the artifact path. The VM finds the <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">Documents</code> node already registered as a file rather than a directory and fails with <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">file exists</code>. This node is <strong>not cleared between prompts within the same session</strong>, making Cowork non-functional after the first artifact regardless of other workarounds.</p> <hr class="border-border-200 border-t-0.5 my-3 mx-1.5"> <h2 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">Feature Request / Suggested Fix</h2> <ol class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3"> <li class="whitespace-normal break-words pl-2"><strong>Add <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">artifactsPath</code> config override</strong> to <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">claude_desktop_config.json</code> — this would allow enterprise users to redirect artifact storage to a local path outside of OneDrive, e.g.:</li> </ol> <div role="group" aria-label="json code" tabindex="0" class="relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100"><div class="sticky opacity-0 group-hover/copy:opacity-100 group-focus-within/copy:opacity-100 top-2 py-2 h-12 w-0 float-right"><div class="absolute right-0 h-8 px-2 items-center inline-flex z-10"><button class="inline-flex items-center justify-center relative isolate shrink-0 can-focus select-none disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none disabled:drop-shadow-none border-transparent transition font-base duration-300 ease-[cubic-bezier(0.165,0.85,0.45,1)] h-8 w-8 rounded-md backdrop-blur-md _fill_10ocf_9 _ghost_10ocf_96" type="button" aria-label="Copy to clipboard" data-state="closed"><div class="relative"><div class="transition-all opacity-100 scale-100" style="width: 20px; height: 20px; display: flex; align-items: center; justify-content: center;"><svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="transition-all opacity-100 scale-100" aria-hidden="true" style="flex-shrink: 0;"><path d="M12.5 3A1.5 1.5 0 0 1 14 4.5V6h1.5A1.5 1.5 0 0 1 17 7.5v8a1.5 1.5 0 0 1-1.5 1.5h-8A1.5 1.5 0 0 1 6 15.5V14H4.5A1.5 1.5 0 0 1 3 12.5v-8A1.5 1.5 0 0 1 4.5 3zm1.5 9.5a1.5 1.5 0 0 1-1.5 1.5H7v1.5a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5H14zM4.5 4a.5.5 0 0 0-.5.5v8a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5z"></path></svg></div><div class="absolute inset-0 flex items-center justify-center"><div class="transition-all opacity-0 scale-50" style="width: 20px; height: 20px; display: flex; align-items: center; justify-content: center;"><svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="transition-all opacity-0 scale-50" aria-hidden="true" style="flex-shrink: 0;"><path d="M15.188 5.11a.5.5 0 0 1 .752.626l-.056.084-7.5 9a.5.5 0 0 1-.738.033l-3.5-3.5-.064-.078a.501.501 0 0 1 .693-.693l.078.064 3.113 3.113 7.15-8.58z"></path></svg></div></div></div></button></div></div><div class="text-text-500 font-small p-3.5 pb-0">json</div><div class="overflow-x-auto"><pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed p-3.5" style="color: rgb(20, 24, 31); background: transparent; font-family: var(--font-mono);"><code class="language-json" style="color: rgb(20, 24, 31); background: transparent; font-family: var(--font-mono); white-space: pre;"><span><span> </span><span class="token token" style="color: rgb(43, 48, 59);">{</span><span> </span></span><span><span> </span><span class="token token" style="color: rgb(184, 10, 24);">"preferences"</span><span class="token token" style="color: rgb(20, 24, 31);">:</span><span> </span><span class="token token" style="color: rgb(43, 48, 59);">{</span><span> </span></span><span><span> </span><span class="token token" style="color: rgb(184, 10, 24);">"artifactsPath"</span><span class="token token" style="color: rgb(20, 24, 31);">:</span><span> </span><span class="token token" style="color: rgb(0, 128, 0);">"/Users/JHunt13/ClaudeArtifacts"</span><span> </span></span><span><span> </span><span class="token token" style="color: rgb(43, 48, 59);">}</span><span> </span></span><span><span> </span><span class="token token" style="color: rgb(43, 48, 59);">}</span></span></code></pre></div></div> <ol class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3" start="2"> <li class="whitespace-normal break-words pl-2"><strong>Detect OneDrive/symlinked paths</strong> at session start and warn the user to select a local directory</li> <li class="whitespace-normal break-words pl-2"><strong>Release or refresh the virtiofs mount node</strong> between prompts rather than leaving a stale file node in the virtual root</li></ol>

Code Example

RPC error: failed to mount /mnt/.virtiofs-root/shared/Users/JHunt13/Documents/Claude/Artifacts/test-artifact-2026 as .artifacts/test-artifact-2026: source path does not exist and could not be created: /mnt/.virtiofs-root/shared/Users/JHunt13/Documents/Claude/Artifacts/test-artifact-2026: mkdir /mnt/.virtiofs-root/shared/Users/JHunt13/Documents: file exists
RAW_BUFFERClick to expand / collapse

Preflight Checklist

  • I have searched existing issues and this hasn't been reported yet
  • This is a single bug report (please file separate reports for different bugs)
  • I am using the latest version of Claude Code

What's Wrong?

Cowork on macOS fails with an RPC virtiofs mount error on every prompt after the first artifact is successfully created, including non-artifact prompts (e.g. "hello"). The first artifact mounts and renders correctly, but the VM registers Documents as a stale file node in the virtual root and all subsequent mount attempts fail.

This is a regression/variant of issues #42795, #25293, and related virtiofs mount bugs. The specific environment trigger is an enterprise macOS configuration where ~/Documents is a symlink to OneDrive CloudStorage — common on CBRE and other enterprise-managed Macs.

What Should Happen?

Artifact on Cowork should be created successfully and follow up attempts to use cowork should continue without issue.

Cowork should either: Keep the virtiofs mount alive between prompts within the same session, OR Cleanly re-mount the artifact path on subsequent prompts without leaving a corrupted file node in the virtual root

Error Messages/Logs

RPC error: failed to mount /mnt/.virtiofs-root/shared/Users/JHunt13/Documents/Claude/Artifacts/test-artifact-2026 as .artifacts/test-artifact-2026: source path does not exist and could not be created: /mnt/.virtiofs-root/shared/Users/JHunt13/Documents/Claude/Artifacts/test-artifact-2026: mkdir /mnt/.virtiofs-root/shared/Users/JHunt13/Documents: file exists

Steps to Reproduce

1.) Use macOS with ~/Documents symlinked to OneDrive CloudStorage:

/Users/JHunt13/Documents -> /Users/JHunt13/Library/CloudStorage/OneDrive-CBRE,Inc/Documents

  1. Open Claude Desktop and start a new Cowork session
  2. Ask Cowork to create any artifact (e.g. a simple HTML dashboard)
  3. Observe: first artifact creates and mounts successfully ✓
  4. Send any follow-up prompt in the same session — including a plain text prompt with no artifact involved (e.g. "how are you feeling")
  5. Observe: RPC mount error fires immediately ✗

Claude Model

Sonnet (default)

Is this a regression?

Yes, this worked in a previous version

Last Working Version

No response

Claude Code Version

Claude Desktop app (macOS) — Claude 1.3883.0 (93ff6c) 2026-04-21T17:24:01.000Z

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Terminal.app (macOS)

Additional Information

Actual Behavior

First artifact mount: succeeds Every subsequent prompt in the same session: fails immediately with the error above The VM registers /mnt/.virtiofs-root/shared/Users/JHunt13/Documents as a file node after the first mount All subsequent mount attempts through the same Documents path node fail with file exists This affects all prompts, not just artifact creation — even plain conversational prompts trigger a mount attempt

<h2 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">Environment</h2> <div class="overflow-x-auto w-full px-2 mb-6"> Field | Value -- | -- OS | macOS (latest) Hardware | Apple MacBook (managed CBRE enterprise device) Claude Desktop version | Latest Plan | Enterprise (CBRE) ~/Documents | Symlink → /Users/JHunt13/Library/CloudStorage/OneDrive-CBRE,Inc/Documents OneDrive | Enabled, CBRE-managed </div> <hr class="border-border-200 border-t-0.5 my-3 mx-1.5"> <h2 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">Filesystem Configuration</h2> <div role="group" aria-label="bash code" tabindex="0" class="relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100"><div class="sticky opacity-0 group-hover/copy:opacity-100 group-focus-within/copy:opacity-100 top-2 py-2 h-12 w-0 float-right"><div class="absolute right-0 h-8 px-2 items-center inline-flex z-10"><button class="inline-flex items-center justify-center relative isolate shrink-0 can-focus select-none disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none disabled:drop-shadow-none border-transparent transition font-base duration-300 ease-[cubic-bezier(0.165,0.85,0.45,1)] h-8 w-8 rounded-md backdrop-blur-md _fill_10ocf_9 _ghost_10ocf_96" type="button" aria-label="Copy to clipboard" data-state="closed"><div class="relative"><div class="transition-all opacity-100 scale-100" style="width: 20px; height: 20px; display: flex; align-items: center; justify-content: center;"><svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="transition-all opacity-100 scale-100" aria-hidden="true" style="flex-shrink: 0;"><path d="M12.5 3A1.5 1.5 0 0 1 14 4.5V6h1.5A1.5 1.5 0 0 1 17 7.5v8a1.5 1.5 0 0 1-1.5 1.5h-8A1.5 1.5 0 0 1 6 15.5V14H4.5A1.5 1.5 0 0 1 3 12.5v-8A1.5 1.5 0 0 1 4.5 3zm1.5 9.5a1.5 1.5 0 0 1-1.5 1.5H7v1.5a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5H14zM4.5 4a.5.5 0 0 0-.5.5v8a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5z"></path></svg></div><div class="absolute inset-0 flex items-center justify-center"><div class="transition-all opacity-0 scale-50" style="width: 20px; height: 20px; display: flex; align-items: center; justify-content: center;"><svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="transition-all opacity-0 scale-50" aria-hidden="true" style="flex-shrink: 0;"><path d="M15.188 5.11a.5.5 0 0 1 .752.626l-.056.084-7.5 9a.5.5 0 0 1-.738.033l-3.5-3.5-.064-.078a.501.501 0 0 1 .693-.693l.078.064 3.113 3.113 7.15-8.58z"></path></svg></div></div></div></button></div></div><div class="text-text-500 font-small p-3.5 pb-0">bash</div><div class="overflow-x-auto"><pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed p-3.5" style="color: rgb(20, 24, 31); background: transparent; font-family: var(--font-mono);"><code class="language-bash" style="color: rgb(20, 24, 31); background: transparent; font-family: var(--font-mono); white-space: pre;"><span><span>$ </span><span class="token token" style="color: rgb(0, 81, 194);">ls</span><span> -la ~/Documents </span></span><span><span>lrwxr-xr-x </span><span class="token token" style="color: rgb(0, 128, 128);">1</span><span> JHunt13 staff </span><span class="token token" style="color: rgb(0, 128, 128);">63</span><span> Mar </span><span class="token token" style="color: rgb(0, 128, 128);">24</span><span> </span><span class="token token" style="color: rgb(0, 128, 128);">11</span><span>:21 /Users/JHunt13/Documents -</span><span class="token token" style="color: rgb(20, 24, 31);">&gt;</span><span> </span></span><span>/Users/JHunt13/Library/CloudStorage/OneDrive-CBRE,Inc/Documents </span><span> </span><span><span>$ </span><span class="token token" style="color: rgb(0, 81, 194);">ls</span><span> -la ~/Documents/Claude/ </span></span><span><span>drwxr-xr-x@ </span><span class="token token" style="color: rgb(0, 128, 128);">5</span><span> JHunt13 staff </span><span class="token token" style="color: rgb(0, 128, 128);">160</span><span> Apr </span><span class="token token" style="color: rgb(0, 128, 128);">23</span><span> </span><span class="token token" style="color: rgb(0, 128, 128);">16</span><span>:22 </span><span class="token token" style="color: rgb(179, 74, 0);">.</span><span> </span></span><span><span>lrwxr-xr-x </span><span class="token token" style="color: rgb(0, 128, 128);">1</span><span> JHunt13 staff </span><span class="token token" style="color: rgb(0, 128, 128);">30</span><span> Apr </span><span class="token token" style="color: rgb(0, 128, 128);">23</span><span> </span><span class="token token" style="color: rgb(0, 128, 128);">16</span><span>:22 Artifacts -</span><span class="token token" style="color: rgb(20, 24, 31);">&gt;</span><span> /Users/JHunt13/ClaudeArtifacts </span></span><span><span>drwxr-xr-x@ </span><span class="token token" style="color: rgb(0, 128, 128);">3</span><span> JHunt13 staff </span><span class="token token" style="color: rgb(0, 128, 128);">96</span><span> Apr </span><span class="token token" style="color: rgb(0, 128, 128);">21</span><span> </span><span class="token token" style="color: rgb(0, 128, 128);">11</span><span>:29 Scheduled</span></span></code></pre></div></div> <p class="font-claude-response-body break-words whitespace-normal leading-[1.7]">Note: <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">Artifacts</code> was manually symlinked to a local directory (<code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">/Users/JHunt13/ClaudeArtifacts</code>) as a workaround attempt — this fixed the first mount but did not resolve the subsequent prompt failure.</p> <hr class="border-border-200 border-t-0.5 my-3 mx-1.5"> <h2 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">Workarounds Attempted</h2> <p class="font-claude-response-body break-words whitespace-normal leading-[1.7]">All of the following were attempted and <strong>did not resolve the issue</strong>:</p> <ol class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3"> <li class="whitespace-normal break-words pl-2"><strong>Created <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">~/Documents/Claude/Artifacts</code> directory manually</strong> — first mount succeeds, subsequent prompts still fail</li> <li class="whitespace-normal break-words pl-2"><strong>Symlinked <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">Artifacts</code> to a truly local directory</strong> (<code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">/Users/JHunt13/ClaudeArtifacts</code>) — same result, first mount succeeds, all subsequent prompts fail</li> <li class="whitespace-normal break-words pl-2"><strong>Cleared stale session references</strong> (<code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">cowork-enabled-cli-ops.json</code>, <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">git-worktrees.json</code>, <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">local-agent-mode-sessions</code>) before each session — allows one successful artifact per session, but the error recurs on the very next prompt</li> <li class="whitespace-normal break-words pl-2"><strong>Started a brand new Cowork session</strong> after each artifact — same one-mount-per-session limitation</li> <li class="whitespace-normal break-words pl-2"><strong>Pointed Cowork to a different project folder</strong> — Cowork still hardcodes artifact output to <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">~/Documents/Claude/Artifacts/</code>, ignoring the selected project folder</li> </ol> <hr class="border-border-200 border-t-0.5 my-3 mx-1.5"> <h2 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">Root Cause Analysis</h2> <p class="font-claude-response-body break-words whitespace-normal leading-[1.7]">The issue has two layers:</p> <p class="font-claude-response-body break-words whitespace-normal leading-[1.7]"><strong>Layer 1 — OneDrive symlink incompatibility (existing known bug):</strong> virtiofs cannot traverse <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">~/Documents</code> when it is a symlink to OneDrive CloudStorage. The VM's mount layer expects a real local directory, not a symlink to a cloud filesystem driver. This is documented in #25293 and #42795.</p> <p class="font-claude-response-body break-words whitespace-normal leading-[1.7]"><strong>Layer 2 — Stale file node not released between prompts (new/variant bug):</strong> After the first successful mount (achieved via the local Artifacts symlink workaround), the VM registers <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">Documents</code> as a node in <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">/mnt/.virtiofs-root/</code>. On every subsequent prompt — including non-artifact prompts — Cowork attempts to re-mount the artifact path. The VM finds the <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">Documents</code> node already registered as a file rather than a directory and fails with <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">file exists</code>. This node is <strong>not cleared between prompts within the same session</strong>, making Cowork non-functional after the first artifact regardless of other workarounds.</p> <hr class="border-border-200 border-t-0.5 my-3 mx-1.5"> <h2 class="text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold">Feature Request / Suggested Fix</h2> <ol class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3"> <li class="whitespace-normal break-words pl-2"><strong>Add <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">artifactsPath</code> config override</strong> to <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">claude_desktop_config.json</code> — this would allow enterprise users to redirect artifact storage to a local path outside of OneDrive, e.g.:</li> </ol> <div role="group" aria-label="json code" tabindex="0" class="relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100"><div class="sticky opacity-0 group-hover/copy:opacity-100 group-focus-within/copy:opacity-100 top-2 py-2 h-12 w-0 float-right"><div class="absolute right-0 h-8 px-2 items-center inline-flex z-10"><button class="inline-flex items-center justify-center relative isolate shrink-0 can-focus select-none disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none disabled:drop-shadow-none border-transparent transition font-base duration-300 ease-[cubic-bezier(0.165,0.85,0.45,1)] h-8 w-8 rounded-md backdrop-blur-md _fill_10ocf_9 _ghost_10ocf_96" type="button" aria-label="Copy to clipboard" data-state="closed"><div class="relative"><div class="transition-all opacity-100 scale-100" style="width: 20px; height: 20px; display: flex; align-items: center; justify-content: center;"><svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="transition-all opacity-100 scale-100" aria-hidden="true" style="flex-shrink: 0;"><path d="M12.5 3A1.5 1.5 0 0 1 14 4.5V6h1.5A1.5 1.5 0 0 1 17 7.5v8a1.5 1.5 0 0 1-1.5 1.5h-8A1.5 1.5 0 0 1 6 15.5V14H4.5A1.5 1.5 0 0 1 3 12.5v-8A1.5 1.5 0 0 1 4.5 3zm1.5 9.5a1.5 1.5 0 0 1-1.5 1.5H7v1.5a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5H14zM4.5 4a.5.5 0 0 0-.5.5v8a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5z"></path></svg></div><div class="absolute inset-0 flex items-center justify-center"><div class="transition-all opacity-0 scale-50" style="width: 20px; height: 20px; display: flex; align-items: center; justify-content: center;"><svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="transition-all opacity-0 scale-50" aria-hidden="true" style="flex-shrink: 0;"><path d="M15.188 5.11a.5.5 0 0 1 .752.626l-.056.084-7.5 9a.5.5 0 0 1-.738.033l-3.5-3.5-.064-.078a.501.501 0 0 1 .693-.693l.078.064 3.113 3.113 7.15-8.58z"></path></svg></div></div></div></button></div></div><div class="text-text-500 font-small p-3.5 pb-0">json</div><div class="overflow-x-auto"><pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed p-3.5" style="color: rgb(20, 24, 31); background: transparent; font-family: var(--font-mono);"><code class="language-json" style="color: rgb(20, 24, 31); background: transparent; font-family: var(--font-mono); white-space: pre;"><span><span> </span><span class="token token" style="color: rgb(43, 48, 59);">{</span><span> </span></span><span><span> </span><span class="token token" style="color: rgb(184, 10, 24);">"preferences"</span><span class="token token" style="color: rgb(20, 24, 31);">:</span><span> </span><span class="token token" style="color: rgb(43, 48, 59);">{</span><span> </span></span><span><span> </span><span class="token token" style="color: rgb(184, 10, 24);">"artifactsPath"</span><span class="token token" style="color: rgb(20, 24, 31);">:</span><span> </span><span class="token token" style="color: rgb(0, 128, 0);">"/Users/JHunt13/ClaudeArtifacts"</span><span> </span></span><span><span> </span><span class="token token" style="color: rgb(43, 48, 59);">}</span><span> </span></span><span><span> </span><span class="token token" style="color: rgb(43, 48, 59);">}</span></span></code></pre></div></div> <ol class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3" start="2"> <li class="whitespace-normal break-words pl-2"><strong>Detect OneDrive/symlinked paths</strong> at session start and warn the user to select a local directory</li> <li class="whitespace-normal break-words pl-2"><strong>Release or refresh the virtiofs mount node</strong> between prompts rather than leaving a stale file node in the virtual root</li></ol>

Claude-logs-2026-04-21T21-15-31-594Z.zip

extent analysis

TL;DR

The most likely fix is to add an artifactsPath config override to claude_desktop_config.json to redirect artifact storage to a local path outside of OneDrive.

Guidance

  1. Verify the issue: Confirm that the problem occurs when ~/Documents is a symlink to OneDrive CloudStorage and that the first artifact mounts successfully but subsequent prompts fail.
  2. Check for stale file nodes: Investigate if the VM is leaving a stale file node in the virtual root after the first successful mount, causing subsequent mount attempts to fail.
  3. Test the suggested fix: Try adding an artifactsPath config override to claude_desktop_config.json to redirect artifact storage to a local path, such as /Users/JHunt13/ClaudeArtifacts.
  4. Detect OneDrive/symlinked paths: Consider implementing a check at session start to detect OneDrive/symlinked paths and warn the user to select a local directory.
  5. Release or refresh the virtiofs mount node: Look into releasing or refreshing the virtiofs mount node between prompts to prevent stale file nodes from causing issues.

Example

{
  "preferences": {
    "artifactsPath": "/Users/JHunt13/ClaudeArtifacts"
  }
}

This example shows how to add an artifactsPath config override to claude_desktop_config.json.

Notes

The issue is specific to the combination of OneDrive symlinked paths and the virtiofs mount behavior. The suggested fix may not apply to other configurations.

Recommendation

Apply the workaround by adding an artifactsPath config override to claude_desktop_config.json to redirect artifact storage to a local path outside of OneDrive. This should allow Cowork to function correctly even with OneDrive symlinked paths.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

claude-code - 💡(How to fix) Fix [BUG] Cowork macOS: VirtioFS mount fails on every prompt after first successful artifact mount — OneDrive symlinked ~/Documents [2 comments, 2 participants]