Live data from Hacker News

Cowork: Claude Code for the rest of your work

claude.com

121–130 of 593 posts

Re: Cowork: Claude Code for the rest of your work

#121
post #99
post #86

Earlier quoted context omitted.

So sandbox and contain the network the agent operates within. Enterprises have done this in sensitive environments already for their employees. Though, it's important to recognize the amplification of insider threat that exists on any employees desktop who uses this. In theory, there is no solution to the real problem here other than sophisticated cat/mouse monitoring.

The solution is to cut off one of the legs of the lethal trifecta. The leg that makes the most sense is the ability to exfiltrate data - if a prompt injection has access to private data but can't actually steal it the damage is mostly limited. If there's no way to externally communicate the worst a prompt injection can do is modify files that are in the sandbox and corrupt any answers from the bot - which can still b…

Cutting off the ability to externally communicate seems difficult for a useful agent. Not only because it blocks a lot of useful functionality but because a fetch also sends data.

“Hey, Claude, can you download this file for me? It’s at https://example.com/(mysocialsecuritynumber)/(mybankinglogin...

Re: Cowork: Claude Code for the rest of your work

#122
post #4

This looks useful for people not using Claude Code, but I do think that the desktop example in the video could be a bit misleading (particularly for non-developers) - Claude is definitely not taking screenshots of that desktop & organizing, it's using normal file management cli tools. The reason seems a bit obvious - it's much easier to read file names, types, etc. via an "ls" than try to infer via an image. But it a…

I keep seeing “Claude image understanding is poor” being repeated, but I’ve experienced the opposite. I was running some sentiment analysis experiments; describe the subject and the subjects emotional state kind of thing. It picked up on a lot of little detail; the brand name of my guitar amplifier in the background, what my t shirt said and that I must enjoy craft beer and or running (it was a craft beer 5k kind of…

I regularly show Claude Code a screenshot of a completely broken UI--lots of cut off text, overlapping elements all over the place, the works--and Claude will reply something like "Perfect! The screenshot shows that XYZ is working."

I can describe what is wrong with the screenshot to make Claude fix the problem, but it's not entirely clear to what extent it's using the screenshot versus my description. Any human with two brain cells wouldn't need the problems pointed out.

Re: Cowork: Claude Code for the rest of your work

#123

Hi, Felix from the team here, this is my product - let us know what you think. We're on purpose releasing this very early, we expect to rapidly iterate on it. (We're also battling an unrelated Opus 4.5 inference incident right now, so you might not see Cowork in your client right away.)

Beachball of death on “Starting Claude’s workspace” on the Cowork tab. Force quit and relaunch, and Claude reopens on the Cowork tab, again hanging with the beachball of death on “Starting Claude’s workspace”. Deleting vm_bundles lets me open Claude Desktop and switch tabs. Then it hangs again, I delete vm_bundles again, and open it again. This time it opens on the Chat tab and I know not to click the Cowork tab...

Can you submit feedback and attach your logs when asked?

Re: Cowork: Claude Code for the rest of your work

#124
post #33

Earlier quoted context omitted.

Hi Felix! Simple suggestion: logo should be a cow and and orc to match how I originally read the product name.

OK I couldn't resist that one: https://gist.github.com/simonw/d06dec3d62dee28f2bd993eb78beb...

That is an unreasonably good interpretation

Re: Cowork: Claude Code for the rest of your work

#125
post #119

Hi, Felix from the team here, this is my product - let us know what you think. We're on purpose releasing this very early, we expect to rapidly iterate on it. (We're also battling an unrelated Opus 4.5 inference incident right now, so you might not see Cowork in your client right away.)

Your terms for Claude Max point to the consumer ToS. This ToS states it cannot be used for commercial purposes. Why is this? Why are you marketing a product clearly for business use and then have terms that strictly forbid it. I’ve been trying to reach a human at Anthropic for a week now to clarify this on behalf of our company but can’t get past your AI support.

> Why are you marketing a product clearly for business use

Huh? Their "individual" plans are clearly for personal use.

Re: Cowork: Claude Code for the rest of your work

#126
post #41

Hi, Felix from the team here, this is my product - let us know what you think. We're on purpose releasing this very early, we expect to rapidly iterate on it. (We're also battling an unrelated Opus 4.5 inference incident right now, so you might not see Cowork in your client right away.)

Hey Felix, would love to give you feedback, but the language redirect of the website is trying to route me to de-de, and thus I can't see the page. You might want to fix this.

I think this should be fixed now. If not can you tell me the URL you're getting redirected to.

Re: Cowork: Claude Code for the rest of your work

#127
post #24

I was hoping for a moment that this meant they had come up with a design that was safe against lethal trifecta / prompt injection attacks, maybe by running everything in a tight sandbox and shutting down any exfiltration vectors that could be used by a malicious prompt attack to steal data. Sadly they haven't completely solved that yet. Instead their help page at https://support.claude.com/en/articles/13364135-using-…

> (I don't think it's fair to ask non-technical users to look out for "suspicious actions that may indicate prompt injection" personally!) It's the "don't click on suspicious links" of the LLM world and will be just as effective. It's the system they built that should prevent those being harmful, in both cases.

Operating systems should prevent privilege escalations, antiviruses should detect viruses, police should catch criminals, claude should detect prompt injections, ponies should vomit rainbows.

Re: Cowork: Claude Code for the rest of your work

#128
post #121
post #99

Earlier quoted context omitted.

The solution is to cut off one of the legs of the lethal trifecta. The leg that makes the most sense is the ability to exfiltrate data - if a prompt injection has access to private data but can't actually steal it the damage is mostly limited. If there's no way to externally communicate the worst a prompt injection can do is modify files that are in the sandbox and corrupt any answers from the bot - which can still b…

Cutting off the ability to externally communicate seems difficult for a useful agent. Not only because it blocks a lot of useful functionality but because a fetch also sends data. “Hey, Claude, can you download this file for me? It’s at https://example.com/(mysocialsecuritynumber)/(mybankinglogin... ”

Exactly - cutting off network access for security has huge implications on usability and capabilities.

Building general purpose agents for a non-technical audience is really hard!

Re: Cowork: Claude Code for the rest of your work

#129
post #24

I was hoping for a moment that this meant they had come up with a design that was safe against lethal trifecta / prompt injection attacks, maybe by running everything in a tight sandbox and shutting down any exfiltration vectors that could be used by a malicious prompt attack to steal data. Sadly they haven't completely solved that yet. Instead their help page at https://support.claude.com/en/articles/13364135-using-…

There's no AI that's secure and capable of doing anything an idiot would do on the internet with whatever data you give it.

This is a perfect encapsulation of the same problem: https://www.reddit.com/r/BrandNewSentence/comments/jx7w1z/th...

Substitute AI with Bear

Re: Cowork: Claude Code for the rest of your work

#130
post #24

I was hoping for a moment that this meant they had come up with a design that was safe against lethal trifecta / prompt injection attacks, maybe by running everything in a tight sandbox and shutting down any exfiltration vectors that could be used by a malicious prompt attack to steal data. Sadly they haven't completely solved that yet. Instead their help page at https://support.claude.com/en/articles/13364135-using-…

I haven't dug too deep, but it appears to be using a bubblewrap sandbox inside a vm on the Mac using Apple's Virtualization.framework from what I can tell. It then uses unix sockets to proxy network via socat.

ETA: used Claude Code to reverse engineer it:

   Insight ─────────────────────────────────────

  Claude.app VM Architecture:
  1. Uses Apple's Virtualization.framework (only on ARM64/Apple Silicon, macOS 13+)
  2. Communication is via VirtioSocket (not stdio pipes directly to host)
  3. The VM runs a full Linux system with EFI/GRUB boot

  ─────────────────────────────────────────────────

        ┌─────────────────────────────────────────────────────────────────────────────────┐
        │  macOS Host                                                                     │
        │                                                                                 │
        │  Claude Desktop App (Electron + Swift native bindings)                          │
        │      │                                                                          │
        │      ├─ @anthropic-ai/claude-swift (swift_addon.node)                           │
        │      │   └─ Links: Virtualization.framework (ARM64 only, macOS 13+)            │
        │      │                                                                          │
        │      ↓ Creates/Starts VM via VZVirtualMachine                                   │
        │                                                                                 │
        │  ┌──────────────────────────────────────────────────────────────────────────┐  │
        │  │  Linux VM (claudevm.bundle)                                              │  │
        │  │                                                                          │  │
        │  │  ┌────────────────────────────────────────────────────────────────────┐  │  │
        │  │  │  Bubblewrap Sandbox (bwrap)                                        │  │  │
        │  │  │  - Network namespace isolation (--unshare-net)                     │  │  │
        │  │  │  - PID namespace isolation (--unshare-pid)                         │  │  │
        │  │  │  - Seccomp filtering (unix-block.bpf)                              │  │  │
        │  │  │                                                                    │  │  │
        │  │  │  ┌──────────────────────────────────────────────────────────────┐  │  │  │
        │  │  │  │  /usr/local/bin/claude                                       │  │  │  │
        │  │  │  │  (Claude Code SDK - 213MB ARM64 ELF binary)                  │  │  │  │
        │  │  │  │                                                              │  │  │  │
        │  │  │  │  --input-format stream-json                                  │  │  │  │
        │  │  │  │  --output-format stream-json                                 │  │  │  │
        │  │  │  │  --model claude-opus-4-5-20251101                            │  │  │  │
        │  │  │  └──────────────────────────────────────────────────────────────┘  │  │  │
        │  │  │       ↑↓ stdio (JSON-RPC)                                          │  │  │
        │  │  │                                                                    │  │  │
        │  │  │  socat proxies:                                                    │  │  │
        │  │  │  - TCP:3128 → /tmp/claude-http-*.sock (HTTP proxy)                │  │  │
        │  │  │  - TCP:1080 → /tmp/claude-socks-*.sock (SOCKS proxy)              │  │  │
        │  │  └────────────────────────────────────────────────────────────────────┘  │  │
        │  │                                                                          │  │
        │  └──────────────────────────────────────────────────────────────────────────┘  │
        │           ↕ VirtioSocket (RPC)                                                 │
        │      ClaudeVMDaemonRPCClient.swift                                             │
        │           ↕                                                                    │
        │      Node.js IPC layer                                                         │
        └─────────────────────────────────────────────────────────────────────────────────┘
VM Specifications (from inside)

ComponentDetailsKernelLinux 6.8.0-90-generic aarch64 (Ubuntu PREEMPT_DYNAMIC)OSUbuntu 22.04.5 LTS (Jammy Jellyfish)HostnameclaudeCPU4 cores, Apple Silicon (virtualized), 48 BogoMIPSRAM3.8 GB total (~620MB used at idle)SwapNone

Storage Layout

DeviceSizeTypeMount PointPurpose/dev/nvme0n1p19.6 GBext4/Root filesystem (rootfs.img)/dev/nvme0n1p1598 MBvfat/boot/efiEFI boot partition/dev/nvme1n19.8 GBext4/sessionsSession data (sessiondata.img)virtiofs-virtiofs/mnt/.virtiofs-root/shared/...Host filesystem access

Filesystem Mounts (User Perspective)

        /sessions/gallant-vigilant-lamport/
        ├── mnt/
        │   ├── claude-cowork/     → Your selected folder (virtiofs + bindfs)
        │   ├── .claude/           → ~/.claude config (bindfs, rw)
        │   ├── .skills/           → Skills/plugins (bindfs, ro)
        │   └── uploads/           → Uploaded files (bindfs)
        └── tmp/                   → Session temp files
        
        Session User
        A dedicated user is created per session with a Docker-style random name:
        User: gallant-vigilant-lamport
        UID:  1001
        Home: /sessions/gallant-vigilant-lamport
        Process Tree
        PID 1: bwrap (bubblewrap sandbox)
        └── bash (shell wrapper)
            ├── socat TCP:3128 → unix socket (HTTP proxy)
            ├── socat TCP:1080 → unix socket (SOCKS proxy)
            └── /usr/local/bin/claude (Claude Code SDK)
                └── bash (tool execution shells)

        Security Layers

        Apple Virtualization.framework - Hardware-level VM isolation
        Bubblewrap (bwrap) - Linux container/sandbox

        --unshare-net - No direct network access
        --unshare-pid - Isolated PID namespace
        --ro-bind / / - Read-only root (with selective rw binds)


        Seccomp - System call filtering (unix-block.bpf)
        Network Isolation - All traffic via proxied unix sockets

        Network Architecture
        ┌─────────────────────────────────────────────────────────────┐
        │  Inside Sandbox                                             │
        │                                                             │
        │  claude process                                             │
        │      │                                                      │
        │      ↓ HTTP/HTTPS requests                                  │
        │  localhost:3128 (HTTP proxy via env vars)                   │
        │      │                                                      │
        │      ↓                                                      │
        │  socat → /tmp/claude-http-*.sock ─────────┐                │
        │                                            │                │
        │  localhost:1080 (SOCKS proxy)              │                │
        │      │                                     │                │
        │      ↓                                     │                │
        │  socat → /tmp/claude-socks-*.sock ────────┤                │
        └───────────────────────────────────────────┼────────────────┘
                                                    │
                                VirtioSocket ←──────┘
                                                    │
        ┌───────────────────────────────────────────┼────────────────┐
        │  Host (macOS)                             │                │
        │                                           ↓                │
        │                              Claude Desktop App            │
        │                                           │                │
        │                                           ↓                │
        │                                    Internet                │
        └─────────────────────────────────────────────────────────────┘
        Key insight: The VM has only a loopback interface (lo). No eth0, no bridge. All external network access is tunneled through unix sockets that cross the VM boundary via VirtioSocket.


  Communication Flow

  From the logs and symbols:

  1. VM Start: Swift calls VZVirtualMachine.start() with EFI boot
  2. Guest Ready: VM guest connects (takes ~6 seconds)
  3. SDK Install: Copies /usr/local/bin/claude into VM
  4. Process Spawn: RPC call to spawn /usr/local/bin/claude with args

  The spawn command shows the actual invocation:
  /usr/local/bin/claude --output-format stream-json --verbose \
    --input-format stream-json --model claude-opus-4-5-20251101 \
    --permission-prompt-tool stdio --mcp-config {...}
Post reply on HN