AI Engineer World's Fair 2026

1,000 Agent Tasks in a Sandbox: What Breaks When LLMs Run Code — Kevin Orellana, AWS

Read the talk

1,000 Agent Tasks in a Sandbox: What Breaks When LLMs Run Code

Kevin Orellana’s overnight AgentCore experiment separates broken interfaces from constrained execution environments—and shows why local success tells you too little about a remote agent’s ability to finish.

From a talk by Kevin Orellana

At a glance

Ideas worth remembering

  • Separate interface failures from sandbox failures: the image round trip failed because of MCP encoding, while another test wrote files it could not retrieve from the sandbox.

  • Choose tests around hosted workflows. Browser tabs exhausted memory in a way the code-interpreter tests did not.

  • Task completion depends on practical execution details, including process permissions, package placement, binary locations and filesystem behavior.

  • Broad agent-generated workflows can reveal overlooked constraints, but local testing must be complemented by tests in the remote environment where the agent will run.

Give the agent the same environment customers use

Kevin Orellana pointed a coding agent at his team’s cloud sandbox platform, told it to “Try to break it,” and left it running overnight. The experiment began with a practical testing question: if customers increasingly use agents to drive a platform, could an agent exercise that platform the way a customer would?

Orellana works on Amazon Bedrock AgentCore, which provides sandboxes alongside agent identity, memory, runtimes and gateways. To make the sandbox accessible to a coding agent, the team spent a day or two building an MCP server around the service. MCP supplied the interface through which the agent could use the cloud environment; refining the exposed tools and smoke-testing them came next.

The first checks were small: write and execute a Python file, or convert a Python file into Java. Then the request expanded to 1,000 tests across ten domains. The number was arbitrary—a way to cast a wide net, rather than a coverage guarantee. A run expected to take hours and consume substantial tokens also needed credential management and injection, plus a way to investigate whether a failure belonged to the service or its MCP wrapper.

0:171:01
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

0:12 · section reference included

Store workflow results where concurrent agents can use them

The harness had three main parts: a coding agent, an MCP server wrapping the cloud sandbox, and a local SQLite database for findings. Results went into the database rather than the Markdown files agents tend to produce. At 1,000 tests, collecting findings as structured records made the experiment more manageable and supported multiple local subagents executing tests concurrently and recording their results.

A “test” could be a complete customer workflow. The coverage included several different demands:

  • Sandbox lifecycle and stress. Exercise how reliably an environment behaves under pressure.
  • File transfer and performance. Upload files, download them again, and test the service’s behavior around filesystem I/O.
  • Software development. Write Python or Java packages, or run an end-to-end machine-learning training program.
  • Document and browser work. Generate a PDF report or open a webpage.

AgentCore hosted both a code sandbox and a cloud browser, and the useful workloads differed between them. Browser tests could create many tabs, scrape and summarize pages, take and download screenshots, fill forms, or automate a login. Those activities put different demands on the environment from compiling a package or generating a report. Testing the platform therefore meant testing what each hosted application actually did.

3:063:37
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

3:06 · section reference included

Three failures reveal two places to investigate

The clearest failure began with an image round trip. Upload an image, download it, and compare what came back with what went in. The returned image did not match the input. Investigation located an incorrect encoding layer in the MCP wrapper. The workflow had exposed a defect in the interface carrying the data, rather than establishing a defect in the sandbox’s execution machinery.

Two other cases broadened the diagnosis:

  • A null byte disrupted the tests. Orellana connects the case to the special treatment a zero byte can receive, including marking the end of a string in some languages. The account does not identify which component mishandled it or give a precise failure mechanism.
  • Written files could not be retrieved. Files were written to a particular directory inside the sandbox, but were unavailable when the test tried to get them back. Orellana identifies this as a sandbox-layer case without specifying the directory or its underlying cause.
The slide names three concrete failures and the proposed fixes: binary encoding, null-byte data/control checking, and filesystem permissions for a /tmp file.Open full source frame
The slide names three concrete failures and the proposed fixes: binary encoding, null-byte data/control checking, and filesystem permissions for a /tmp file.

These examples produced a useful split: investigate the interface layer, which exposes operations and carries inputs and outputs, separately from the sandbox layer, where the workload runs. A failed customer task can cross both. The image test is especially instructive because its intended result is simple—get back what was uploaded—yet the wrapper was enough to break that expectation.

5:165:46
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

5:16 · section reference included

An agent’s chosen route becomes an environment requirement

A conventional API service usually exposes a relatively predictable operation: send a request and receive a shaped response from a backend whose work you understand. An agent inside a sandbox can choose a much wider range of intermediate actions. A gateway may expose access to it, but the workload’s actual compute requirements depend on the route the agent takes.

That route can look odd from the outside. An agent might download an unexpected package or convert a CSV into JSON and then into a PDF. Each intermediate step adds requirements: enough memory and CPU, permission to launch or use processes, and permission to access the relevant files. A task can fail because one of those operations is unavailable even when the agent has a plausible plan for producing the final answer.

6:166:45
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

6:16 · section reference included

Browser tabs exposed a memory limit the code tests did not

What changes when the same platform hosts a browser instead of a code interpreter? Orellana’s failure comparison puts the code sandbox above the cloud browser and marks sandbox terminations in red. Opening browser tabs consumed enough memory that many browser tests failed from memory constraints; this was not a comparable failure pattern in the code-interpreter environment. The comparison makes application-specific pressure visible, although the talk gives no numerical failure rates or memory allocations.

The browser tests were unforgiving: starving sessions and sandboxes of memory counted as complete failures. That is a different outcome from a tool returning an error while leaving the environment available. Here, the environment itself could no longer sustain the workflow.

Grouping failures around sandbox primitives suggested more concrete questions to ask. For files, those questions include which filesystems are mounted, which paths permit reading, writing or execution, and whether storage persists or is ephemeral. These are properties a workload depends on. A platform intended to accept varied customer workflows has to account for how those properties affect task completion.

7:518:21
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

7:51 · section reference included

Small execution constraints can block the whole task

The discussion then moves below application tools into the controls composing the sandbox. Kernel capabilities and interception mechanisms can affect whether a workload can make outbound calls or reach internal company services. The consequential relationship is that an agent’s requested operation must also be permitted by the environment executing it.

Three examples make that dependency tangible:

  • Starting a process. A machine-learning package may need to spawn another process. Its workflow depends on the process or container being allowed to do so.
  • Finding a Python package. Downloading a package is only useful if it lands where the Python kernel can pick it up.
  • Executing a Rust binary. A coding agent needs the binary in an appropriate location before it can run the program.

These details accumulate into the ability to solve the business problem. Generating unit tests or integration tests can exercise known behavior, but a sandboxed agent also depends on low-level controls that may be easy to overlook when specifying the task. Orellana’s proposed extension is broad workflow fuzz testing: ask an agent to attempt many tasks across domains, then inspect which combinations expose those constraints. The 1,000-workflow run is a way to discover sharp edges, not a claim that generated tests exhaust the possible workloads.

9:189:48
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

9:18 · section reference included

Test remotely, and give the agent a way to inspect failures

The local-to-remote move gives this testing strategy an immediate use. Running more coding-agent workspaces eventually strains a developer’s laptop; remote sandboxes let teams work through more GitHub pull requests. But the tools, MCP connections and running applications on that laptop may differ from what the remote environment provides. A successful local attempt does not exercise those differences.

At the time of the talk, AgentCore had recently added SSH access to sandboxes so customers could inspect what was happening inside. The investigator could be a human or the coding agent working alongside them. That access provides a way to enter the actual failing environment and look for the conditions preventing the application from running smoothly.

Environment design can also distort how agent capability appears in evaluations. Orellana cites a UC Berkeley study in which an exploit agent with suitable environment controls reportedly reached up to 100% on SWE benchmarks. He contrasts it with another study where broken tools substantially reduced agents’ effectiveness on business tasks. Neither study is identified sufficiently here to establish its evaluation scope or reproduce the result; their role in the argument is to show how favorable or broken tooling can change the outcome attributed to a model.

The closing challenge is concrete: test locally, then fuzz-test a wide set of domain workflows remotely. Once an application can choose arbitrary actions inside a sandbox, its failure points include every execution constraint along that chosen route. Exercising real workflows in the destination environment makes those constraints observable before customers discover them through unfinished tasks.

12:0112:31
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

12:01 · section reference included

Resources

Read the complete timestamped transcript
  1. 0:12

    Hello, everyone. I think we can get started.

  2. 0:17

    So a few months ago, I did something that was, um, a bit slightly absurd. I took a coding agent, I pointed it at my team's, uh, cloud sandbox hosting environment, and I said, "Try to break it." And I let that run overnight, and this talk is a bit about what we found.

  3. 0:39

    Uh, my name is Kevin. I work at Amazon Bedrock AgentCore. It's a sandbox hosting environment or platform, and we do more than that. We provide agents identity, memory, um, runtime environment, sandboxes, gateways, anything you wanna use to build and host your agents on, agents on the cloud.

  4. 1:01

    So the way this started was basically with me taking a hard look at how, um, customers use our platform. And increasingly, I think a lot of us in the industry see that, uh, a lot of platform components on the internet are just agents. And increasingly, they're also sandbox hosted. I think today's talks will maybe walk you through all the architectures that can exist in cloud-hosted, uh, sandbox environments. And so this kinda got me thinking, how can I perhaps

  5. 1:31

    emulate, simulate the customer, and also test the service the same way agents use our platform?

  6. 1:39

    So the first thing I think we, we set out to do was create an attraction or interface that allows coding agents as well as agent applications to interact with our service, uh, in a way that's pretty native to them. And today, we know that frontier models know the MCP protocol pretty well. So we spent a day or two just creating an MCP server to expose access to our environment and platform, um, just so it can get started pretty quickly. The second piece was

  7. 2:09

    polishing that. Uh, we spent some time refining the tools that can be made accessible and, uh, smoke testing some runs and, and things like that. So some of the tests we ran just by hand was, uh, for example, write a Python code file and execute it, or take a Python file and, uh, convert it into Java. And then we realized we wanted to just expand the test domains that we, we were gonna set the coding agents to do. So we asked to just plainly write a thousand tests across ten domains, and a

  8. 2:39

    thousand tests here was pretty arbitrary. It was just to cast a wide net and see what we caught back. This took a bit of polishing because we knew that a thousand tests would take a, a few hours and was gonna be a little token heavy, so we, um, did things like credential management, credential management injection, um, what happens when a test fails? Is it a service issue? Is it an MCP layer issue? Uh, those are the kinda things we, we let the agent, um, figure out.

  9. 3:06

    So the architecture is honestly very simple, but it's also very powerful, and I think a lot of us have probably seen this in our day-to-day, uh, development. So we have our coding agent on top left. We have an MCP server that basically wraps our cloud sandbox environment, and all the findings get sent back to us. We store them in a SQLite database just because, as some of you might have seen, um, agents are pretty prone to write markdown files, but that doesn't really scale when you have a thousand tests that you wanna run.

  10. 3:37

    And this allowed us to tap into concurrency. We can have multiple sub-agents running locally and running and executing their tests and storing those results, uh, locally.

  11. 3:47

    Now, a thousand tests, I think, is kind of easy to just say out loud, but really every single dot on the screen kind of represents a, a workflow that a customer would actually run. So we did things like testing the sandbox, uh, life cycle. How reliable is it when you put it under stress? Um, things like file system IO. What happens when you upload a file and download it from the sandbox? Uh, tested performance. We tested some software development life cycles like, uh, for example,

  12. 4:18

    writing Python packages, Java packages, um, and the like.

  13. 4:24

    So to give you a perspective of what's one of these dots could represent, it could be an end-to-end machine learning training, uh, program. It could be generating a PDF report. Uh, it could also just be, um, as simple as opening a webpage. And we re-- quickly realized that our platform, which at the time was hosting two, uh, major applications, one was a code sandbox, the other one was a cloud browser, would have different tests that mattered differently to the sandboxes that they were hosted in. So for example, here in

  14. 4:54

    the browser, we c- ask the agent to create a bunch of, uh, tabs and try to scrape them all and summarize them, maybe take some screenshots, download them, maybe fill out a form, automate a login workflow. But the point here is these sandbox hosted applications, uh, tend to go through different workflows that demand different requirements from the sandbox.

  15. 5:16

    So we ran through the tests, and I wanna talk about just three failures that I think, um, showcase some of the patterns we saw, uh, from these, uh, sandbox hosted applications. So a simple one was we uploaded an image, we downloaded it, and we wanted to see if the same thing that we put up, uh, we got back when we asked to download it. And lo and behold, that was not the case. Uh, we deep dived a bit into it, and we found that the encoding layer at the MCP layer was incorrect. The second one was a bit interesting too, which was

  16. 5:46

    a null byte. It just threw off, off our tests. Um, a null byte can be a zero. It could also be a marker in some coding languages that just mean that-- means that the string is, is, uh, complete. Now, an interesting one that was particular to the sandbox layer is one where we actually wrote files to a specific directory in the sandbox, and when we tried to get it back, it just wouldn't be available. So, so now we started to segregate the patterns, uh, and failures into

  17. 6:16

    two layers. One was at the interface, and the other one was at the sandbox layer. And it's important, I think, to draw a distinction because, uh, when we start to host applications in sandboxes, we, um, they deviate a little bit from the typical API service pattern where you have a long-running service that has-- exposes an API, uh, and you, you know, send a request, you get an output that's reasonably, um, shaped, and you, you kind of know what your backend service does. But obviously in today's world, we, th- we no longer have as many long-running

  18. 6:45

    applications. Rather, we have specialized agents that are, uh, sandboxed in an environment. We expose access to them through a gateway, and the demands that they have on their, let's say, compute environment are gonna differ greatly. We know that-- And, and this is an experience I think a lot of us can relate to, which is you are developing something locally, and you just start to see your agent, uh, either a hero, cloud, Codex, whatever it might be, do funny things. Like, it might, uh, download a, a package you might not have expected, or it might

  19. 7:16

    translate a CSV file to a JSON to PDF for whatever reason. And all of these workflows that your agents want to do are gonna demand, uh, different things from your environment. So things, for example, like how much memory or CPU your sandbox has, the permissions that are available to your processes and file systems. I think in a lot of the talks we'll see today, there are a lot of different architectures that your sandboxes can have, and the wider point here, I think, is all of these constraints have pretty massive implications for your

  20. 7:46

    agent's ability to solve these problems.

  21. 7:51

    And just to kind of visualize that, these are some of the faults that we saw when we compared two different applications hosted in sandboxes. So at the top, we have the code sandbox, and the bottom, we have the c- uh, cloud browser. At the bottom right, we have the failure modes that are highlighted in red, which signify how many times the sandbox actually, uh, perished. In this case, because cloud browsers, we know that whenever we open up tabs, they're pretty memory heavy, and so a lot of our tests failed just due to memory constraints. And that wasn't really a

  22. 8:21

    fault we saw in the, uh, code interpreter environment. And when we map them out a little bit differently, we start to see that the failure modes coalesce around sandbox primitives. So we know some of the components around file systems tend to be file system permissions, uh, mounted file systems, uh, permissions to read, write, execute files, um, whether or not the file system, uh, is persistent or, uh, ephemeral. Um, and the tests, uh, were pretty unforgiving. Um,

  23. 8:51

    for example, in the bottom right, we have, uh, the browser tests just starving the, the, the sessions and sandboxes out of memory and signaling that as a complete failure. And I think the wider point here is, as we host these applications in sandboxes, and we expect our customers to be able to build, uh, pretty arbitrary workloads in these sandboxes, we have to be pretty careful that the sandbox constraints have massive implications as to those agents' ability to complete those problems.

  24. 9:18

    Now, if we look a little bit closely, and this slide is pretty heavy, on the second column, we have a lot of the primitives used to compose what a sandbox container, um, might look like. So we can go as deep as kernel capabilities, things like kernel interceptors, um, these things called extended VP- VPF programs, which allow you to run kernel modules and intercept programs at the, at the Python layer. Um, those might, uh, control how your agent actually can make some

  25. 9:48

    egress calls, maybe make a internal API call to, um, your internal company services.

  26. 9:59

    If we diagram this out, this is kind of what a, a very high-level overview of how the components in the sandbox might, uh, affect your, um, workload's ability to do its job. So here, for example, I think earlier in our talks we spoke about, uh, security, secure compute, which controls the system control programs that your applications might want to run. So for example, say I have a machine learning package that needs to spawn a process. Does my process or container even have the ability to start a new process?

  27. 10:29

    Um, perhaps I have a code interpreter, uh, task that needs to download a Python repor-- a Python package into a very specific module for, uh, the Python kernel to be able to pick it up. Or are the Rust binaries in the right location for when the coding agent is able to, um, run or execute a program? All these very, very small things tend to add up into your agent's ability to, uh, execute th-the business problem.

  28. 10:59

    Now, just taking a step back, I think this was kind of interesting, uh, which was the idea of, like, using an LLM to generate basically unit tests. I think we've all done it. We-- I don't know if anyone writes unit tests by hand anymore. Uh, and similarly, if we go up a s- up a layer, integration tests, uh, we, we, we can anticipate agents to be pretty good at understanding the problem space and writing tests for them. But as we move towards hosting more and more applications, which are just agents, uh, in

  29. 11:28

    sandboxes, we start to see the cracks in the model, which is, um, these very low-level primitives and controls, um, might actually hamper your agent's ability to do its stated goal. Um, and what we were hoping to relay here is a, a very strong way to actually surface these failure modes that are m- that are pretty innocuous to us is just through fuzzy testing your agent sandbox, asking it to complete, perhaps, in this case, a thousand workflows and seeing what

  30. 11:58

    results you get.

  31. 12:01

    And just to also make it a little bit more tangible, um, a lot of us here, developers, we are very used to running coding agents locally. You might have your, you know, your, your Codex or your Claude running locally, and- As we expand and create more workspaces, you quickly put a constraint on your laptop and now, you know, your teams wanna put these coding agents in remote sandboxes so you can scale how many GitHub PRs you, you work through and the like. But as you've probably seen, the tools that you have in your local workstation, your

  32. 12:31

    MCP tools, your locally running applications might not match what you have in a remote sandbox.

  33. 12:38

    And just a small shout-out to, uh, AgentCore. This is actually one of the problems that we're very keen on because we recognize that customers want to, uh, scale their coding agents, um, and how customers are actually running these, uh, software development life cycles. So one of the releases we recently did was grant the ability to customers to SSH into their, um, sandbox just to see what's going on. And of course, it's not really a human who is SSH-ing into your sandbox anymore, it's a coding agent who you're developing with, uh, as well. But

  34. 13:08

    the idea is there. Uh, bridging into the sandbox and poking around and seeing what problems are causing your coding agent or the application to not run as smoothly is a pretty, um, stated business problem for us, and one that we're trying to solve for customers.

  35. 13:25

    And if you look a little bit, a bit, uh, if you look a little bit at academia, uh, one interesting example that I think a lot of us probably care about is when- whenever frontier models come out, the first thing we look at is the SWE benchmark report, which is, okay, this model got XYZ percentage on this SWE benchmark versus another. And there was a recent study made by some researchers at UC Berkeley where they found that given the right environment controls and an exploit agent, they actually beat the SWE benchmarks, like reaching up to a hundred percent. And

  36. 13:55

    in- inversely, uh, there was another study where, um, researchers were trying to give a wide set of business problems to an agent with broken tools. Uh, and of course, the effectiveness of that agent, uh, went down greatly.

  37. 14:12

    So I think this is, uh, mostly where I want to aim to leave today, which is as these applications that we build today are more and more agentic and they're not constrained to a, a REST API service that you, you build for customers, but rather, uh, an arbitrary agent running inside a sandbox, it's really, really, um, uh, challenging to find all the sharp edges where the sandbox primitives, uh, lead to, you know, a less efficient, uh, ability for your agent to complete that

  38. 14:42

    problem. So my challenge here for you today is, uh, if you're looking to host your agents on sandboxes, sure, test it locally, but also fuzzy test it with a wide set of, uh, domain tests, um, remotely.

  39. 14:59

    Yeah. Thank you.