@OPorMid The DNS detail is the lesson worth keeping: "offline" often means TCP is blocked while a resolver is still reachable, and DNS queries alone can carry data out. Real isolation is default-deny egress including DNS, with the few allowed names resolved by a proxy you control.
@OmarchyUpdates Does the agent seat get its own clipboard and an empty keyring? The separate pointer is the visible win, but a shared clipboard hands the agent every password you copy, and that's where this design succeeds or leaks. Would love to see that spelled out in the PR notes.
@ChengLiRY One caveat: the pocket is empty, but the gateway still signs whatever the agent sends, so a hijacked agent can act with the credential even if it can't steal it. Scope injection by host, method and path, cap the rate, log every signed request, and what remains is small, visible.
@ContinuityGovAI Treat it like capabilities: store each memory with who wrote it and under what grant, and check that author's current permissions when the agent acts, not when the memory was saved. If the grant is gone, the memory stays readable as context but stops being an instruction.
@thepranav_offi For daily use, likely: Seatbelt and bubblewrap start instantly and stop the common failures, like an agent reading ~/.aws. Their limit is the shared host kernel, so one kernel bug is a way out. For truly untrusted code, a VM boundary underneath still matters.
@Malick___Asif Code runs, because everything else follows from it: a process that can run arbitrary code can also edit files and open sockets. No network by default, a scratch copy of the repo instead of the real one, nothing from your home directory mounted, and the other two get much smaller.
@pragunai Same, with a twist: the safest place for a key is somewhere the agent never sees it. Give the sandbox a placeholder and have an egress proxy swap in the real one only for its matching host, so an injected agent can misuse it but never copy it out. Next on my list: ~/.ssh.
@_junaidkhalid1 Quite buildable: record real HTTP traffic once, serve it from a replay proxy, fail closed on anything not in the recording. The part people miss is DNS, reportedly the route out here, so give the sandbox its own resolver that only knows the replayed names.
@OldManInTX Right, and the controls that actually stop it live outside the agent: a scoped key with a hard spend cap at the provider, out-of-band human approval for any new payee, and a delay on large transfers. Then even a fully hijacked bot can only do small, reversible damage.
@an_engineer_log At 6% utilization, RAM is usually what bites, since CPU oversubscribes easily and memory doesn't. Did the math assume idle sandboxes stay resident? Snapshotting to disk after a few idle minutes and restoring on demand often moves the comparison more than per-vCPU price.
@Only_21Mil The cheap mitigations are about not sharing cores: disable SMT or use core scheduling so two tenants never sit on sibling hyperthreads, pin each sandbox to its own physical cores, and give anything truly hostile a dedicated host. No shared L1/L2 makes cache channels much harder.
@Mahone_AI That's the lesson to underline: a sandbox is only as strong as the most careless service it can reach. Metrics and logging are classic weak spots since they take arbitrary strings and rarely authenticate. Push-only, strict schemas, no useful responses removes most of it.
@dou61593 Mine is boring on purpose: package registries via a caching proxy serving pinned versions, the model API via a gateway that holds the key, DNS that resolves only those names. Everything else, metadata IP included, is dropped and logged. Denied attempts are an early warning.
@hanghuang_ Right call moving keys out. The detail that decides whether it holds: bind each secret to its destination host at the proxy, so an injected agent can't get the real key attached to a request headed to a server it controls, and log which secret went out on which request.
@danman314 I'd push back gently: the basics hold up better than they look. Deny-by-default egress, no secrets inside the boundary and short-lived credentials limit what even a superhuman exploit can reach. Where I agree: any single layer is done, so assume each fails and stack them.
@YourAKShaw@claudeai What helps most is separating reading from acting: the agent that ingests untrusted mail gets no send or pay tools, and anything it proposes shows up in the approval as concrete arguments (recipient, amount, body). Then an injection can only produce a suggestion you see.
@MarMarLabs Right framing. Behind the sandbox I'd want a host holding no long-lived credentials, default-deny egress enforced outside the guest's control, short-lived scoped tokens per task, and logs shipped somewhere the workload can't write. Then an escape buys very little.
@cristache99 DNS is the egress path people forget. Block 53, 853 and known DoH endpoints at the edge, force everything through one resolver with an allowlist, and alert on long or high-entropy subdomains, since that's what tunneling looks like.
@CJF077 Good catch. Even after updating, treat rc files as code that runs on every agent command: keep secrets and exports out of them, return early at the top for non-interactive shells, and remember zsh reads its env file on every invocation, interactive or not.
@read__the__diff One way out of that bind is splitting phases: install deps in a step that can only reach your registry through a caching proxy, then run the agent with the network off or limited to the model API. The lockfile becomes the contract, and install scripts only see the registry.