project / experiment

An AI agent in a disposable VM

A personal lab for watching how an ordinary sudo-capable agent handled normal Linux tasks, including malformed actions and a suspected loop.

I wanted to watch an AI agent do ordinary Linux work inside a disposable virtual machine and see how it behaved when the instructions were not a trap. I kept clarifying that distinction. The host should be protected by the VM boundary, but inside the guest the agent could have the normal sudo access of a Linux user. I did not want to tell it that the machine was disposable and invite performative destruction.

The visible trouble was more mundane. Some attempted actions did not fit the tool schema, and I suspected the agent might be looping. Those observations changed what I needed from the experiment: a transcript of proposed actions and actual tool results, enough to tell a bad decision from a malformed call or a runtime failure. This attempt does not show an escape or damage outside the guest. Its value is the narrower question it exposed about how to observe and interpret an agent’s behavior.

The experiment’s shape

The guest was a Debian installation with GNOME. The proposed task set combined inspection, documents, maintenance scripts, package work, services, and a small desktop application. I wanted everyday requests substantial enough to expose judgment about privileges and scope.

Examples discussed included a system inventory report, a backup script, a package-change report, a user service, a simple system health service, and a small graphical system-information or log-viewing tool. These were task designs, not a list of completed deliverables.

The framing supplied to the agent was short: act as a normal sudo-capable Linux user, inspect before changing things, use sudo when normally required, work carefully, and document changes. It did not include an invitation to stress-test or destroy anything.

The first visible failures were basic

A pasted startup run showed an empty action object:

{}

The runtime rejected it because the required tool and args fields were missing. The next action tried a package-related shell command, but it supplied a nonexistent working directory. The process failed with FileNotFoundError before that shell operation could run.

After the runtime exited, several lines of the natural-language task were then entered at the shell prompt. Bash treated them as commands and rejected them. That was a separate interaction problem from the model’s malformed tool call, and it matters when interpreting the transcript: not every error came from the same part of the system.

What would be observable?

I asked whether the agent’s activity was being logged. The assistant described JSONL records containing time, command, requested and actual working directory, exit code, output tails, and duration.

It also described the limit of that logging: it covered operations executed through the runtime’s shell tool, not every manually typed command, GUI interaction, or internal child-process action. A command log is useful, but it is not a complete recording of the machine.

Later I reported that the agent appeared to be looping. The assistant suggested inspecting the action log and running processes, reducing the step budget, and adding an operator pause between steps. Those were proposed interventions, not verified fixes in this entry.

A later assistant analysis of submitted material said the agent had drifted from an inventory task into repeated package maintenance, unrelated paths, and an interactive editor. Because that conclusion depended on a separate supplied report, I keep it attributed to the analysis rather than presenting all of those actions as independently observed here.

What this attempt can say

The visible startup transcript establishes malformed tool output and a working-directory failure. My later report establishes concern about a loop. It does not establish damage to the guest, an escape from it, or verified isolation of the host.

I had not seen an agent escape its guest or break the host. I had seen enough malformed actions and uncertain progress to know what a better run would need to capture: the request, the actual tool result, and a clear end condition for ordinary work.

Related rabbit holes

PublishedOct 3, 2026
note / experiment

A thin-client Linux experiment

A network-boot question became a comparison of separate remote desktops and shared physical desktops, ending with a usable Linux thin-client session and working audio.

Documented activity: September 20, 2026 – September 26, 2026