Claude Desktop Cowork: VirtioFS mount fails on macOS because assemble() creates symlink instead of real directory for skills/

Resolved 💬 1 comment Opened Apr 21, 2026 by dicofi Closed May 26, 2026

Platform

  • macOS (darwin arm64)
  • Claude Desktop (Cowork)

Bug Description

On macOS, the assemble() function in the Operon assembly code (class Umn in the compiled app.asar/index.js) contains this platform branch:

\\\javascript
process.platform === "win32"
? await ce.cp(A, t, { recursive: true }) // Windows: real copy
: await ce.symlink(A, t, "dir") // macOS/Linux: creates SYMLINK
\
\\

This runs on every Cowork session start and replaces the directory at:

\\\
~/Library/Application Support/Claude/local-agent-mode-sessions/skills-plugin/<orgId>/<accountId>/skills
\
\\

…with a symlink pointing to ~/.claude/skills.

VirtioFS cannot mount through symlinks. The result is a hard failure every time a Cowork session starts:

\\\
RPC error: failed to mount
/mnt/.virtiofs-root/shared/Users/.../skills-plugin/<org>/<account>/skills
as .claude/skills: source path does not exist and could not be created:
mkdir .../skills: file exists
\
\\

The error message is confusing ("does not exist" + "file exists") because VirtioFS finds a symlink where it expects a real directory.

Steps to Reproduce

  1. Install Claude Desktop with Cowork on macOS
  2. Open any Cowork session — skills mount succeeds initially
  3. Close and reopen a Cowork session
  4. assemble() fires → replaces skills/ directory with a symlink
  5. VirtioFS mount fails with the RPC error above
  6. Cowork is unusable until the symlink is manually replaced with a real directory

Expected Behavior

assemble() should use cp (recursive copy) on macOS as it does on Windows, not symlink. Or alternatively, VirtioFS should be able to resolve symlinks before attempting to mount.

Workaround

Manually replace the symlink with a real directory and apply chflags uchg to prevent assemble() from recreating it on subsequent session starts:

\\\bash
SKILLS="$HOME/Library/Application Support/Claude/local-agent-mode-sessions/skills-plugin/<orgId>/<accountId>/skills"
rm "$SKILLS"
mkdir -m 700 "$SKILLS"
chflags uchg "$SKILLS"
\
\\

The uchg flag causes the unlink() inside assemble() to fail silently, leaving the real directory intact so VirtioFS can mount correctly.

Impact

  • Cowork becomes permanently broken after the first session close/reopen cycle on macOS
  • Error message is misleading and makes diagnosis very difficult
  • No in-app recovery mechanism — requires manual filesystem intervention

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗