AI Engineer Summit
November 11, 2026Online track6 min read

A Skill's Instructions Are Not Its Behavior

An agent reads cloud configuration, queries identity services, and probes instance metadata.

Roey Ben ChaimZenity

Official replacement recording · 0:00:00–0:14:30 on YouTube. The player starts and stops at this session’s boundaries.

Introduction

This reading edition uses the complete 14½-minute standalone recording, recovering material cut off in the Day 1 livestream. Text links use the standalone clock. The retained screenshot is explicitly labeled with its original livestream clock.

An agent reads cloud configuration, queries identity services, and probes instance metadata. Those actions could look like credential theft. They could also be part of a legitimate diagnostic workflow. Roey Ben Chaim opens with this ambiguity: the example is an official Azure diagnostic skill, not an infostealer. Deciding whether an agent skill is safe requires more than recognizing suspicious-looking operations.

A skill gives an agent capability on demand: instructions, resources, and sometimes executable scripts. Its entry point might be a SKILL.md file, but that file need not contain everything the agent will eventually use. The safety question concerns the resulting behavior, including the dependencies and instructions loaded later, rather than the entry-point text alone.

0:01:37 ↗

Reading the entry point does not reveal the whole execution

At 00:01:37, Ben Chaim describes two limitations of scanning. First, the payload can live elsewhere. A skill can fetch more instructions from an endpoint, install a package, or invoke a script that downloads further material. Inspecting only SKILL.md misses that transitive chain.

Second, a model used as a scanner can itself be influenced by text inside the material it is judging. Ben Chaim cites Trail of Bits research in which an apparent security-approval comment helped persuade an analyzer to accept a package-registry change. This is an example he cites, not an independently reproduced evaluation in this talk.

The alternative borrows a technique from malware analysis: run the subject in an isolated environment and inspect what happens. For agent skills, however, merely launching a process is not enough. The agent needs a task, the skill needs a usable environment, and the test must reach the relevant behavior.

0:04:50 ↗

The first sandbox was too empty

The initial detonation chamber placed an agent and a skill in a sandbox, supplied a task prompt, let execution continue, and collected agent traces. That simple arrangement exposed several problems.

Many skills depend on command-line tools, services, or existing projects. A Notion skill needs a service context it can actually interact with. A quiet run in an empty environment can mean that the test never engaged the skill, not that the skill is safe. The team added a world builder to inspect the skill and prepare an appropriate environment.

A generic task prompt also provides poor coverage. Creating a presentation, deploying a service, and brainstorming an idea demand different trajectories. Even within deployment, configuration, deployment, and snapshot recovery can reach different parts of a skill. The team added an operator to identify and exercise those routes.

At 00:04:50, Ben Chaim describes another experimental limitation: safeguards sometimes prevented the agent from reaching a behavior under investigation. He emphasizes the contained security-research setting and notes that refusals can occur for legitimate operations too. An adversarial operator helped exercise paths inside that environment. A refusal is therefore neither proof of maliciousness nor proof that the rest of a skill has been tested.

Zenity's isolated skill-evaluation architecture

Original livestream screenshot at 05:01:10, not the standalone clock. The architecture separates environment preparation, path exploration, trace capture, and assessment. The complete recording subsequently adds lower-level telemetry to this design.

0:06:03 ↗

Tool traces miss what a tool's children do

The recovered continuation introduces a crucial change to the capture layer. An agent trace might show npm install, but that does not tell the analyst everything the installation did. A post-installation script can launch another process, which can read or write files and contact an endpoint. Those effects can happen below the level of the agent's visible tool call.

At 00:06:03, Ben Chaim explains that the chamber therefore captures process-creation events, filesystem events, and network traffic alongside agent messages and tool results. The object being evaluated is the whole execution, not merely the agent's account of it.

This distinction makes the earlier dependency problem observable. A harmless-looking instruction can initiate a chain whose consequential action occurs several steps away. Following that chain requires both execution that reaches it and instrumentation that records it.

0:07:57 ↗

A security-review skill can install another skill

Ben Chaim next presents a proof of concept attributed to Zach Korman. A skill called Security Review 2 installs another skill called Security Review. That second skill directs the agent to retrieve a SKILL.md from GitHub, where further instructions lead it to execute a payload.

He explicitly says the payload in this demonstration is not malicious. The demonstration establishes the indirection: evaluating only the first skill file would not expose the complete chain that the agent follows. One chamber run recovered that behavior.

At 00:07:57, he reports finding 100 malicious skills among thousands examined and says they were removed from the skills.sh ecosystem. The talk does not supply a sufficiently precise denominator or validation protocol to turn that statement into a prevalence estimate or a measured detector accuracy. It is a reported investigation outcome.

The next example involves a Polymarket-themed skill. According to Ben Chaim, its installation led to a lookalike package rather than the expected official package, and investigation revealed a nonofficial registry and an infostealing payload. The exact package spelling is not necessary to understand the failure: a familiar product name does not establish the identity of the dependency actually loaded.

Persistence, replacement, and instructions that change later

The talk then catalogs behaviors observed across the ecosystem. Some skills add persistent instructions telling an agent to reinstall the skill if it is missing. Another skill-creation tool, Ben Chaim says, silently replaces the official tool rather than simply coexisting with it. These changes affect what happens on later runs, not just the initial task.

Remote prompt execution introduces a time dimension. Fetching instructions from elsewhere can be legitimate, but the contents can change after a reviewer approves the original skill. A domain can change hands, or its operator can deliberately replace the prompt. Approval of a local entry point at one time does not freeze the remote instructions it will retrieve later.

Hooks create another expansion of scope. A skill attached to a frequent lifecycle event can run far more often than a user expects from a one-off installation. The important question becomes not only what a skill does, but when it is triggered and which future actions it can influence.

0:10:35 ↗

A lookalike project becomes a distribution channel

At 00:10:35, Ben Chaim describes a campaign involving lookalike versions of recognizable agent projects. In his account, a copy of Paperclip was modified so ordinary project routes invoked an added logging action. That action led to remotely supplied code which harvested credentials. Related attempts used other project identities and shared infrastructure.

The useful lesson is the mismatch between packaging and behavior. The surrounding project can look familiar, while a small added operation changes what running it means. A skill or installer can then become a distribution channel for that altered dependency.

Ben Chaim says some package-distribution attempts were removed quickly, while associated skills continued circulating. He cites a figure of 1.7 million total downloads in this discussion. That number should not be interpreted as 1.7 million confirmed compromises, distinct users, or verified executions of the payload; the talk does not establish those equivalences.

He reports that the team notified Vercel and Microsoft and that the relevant material was taken down. These are the speaker's account of the investigation and response. This reading edition does not independently attribute the campaign to a named individual or reproduce operational payload details.

0:13:33 ↗

Treat skills as dependencies, not trusted prose

The conclusion at 00:13:33 expands the boundary beyond skills. Websites, database rows, packages, and even comments can enter an agent's context. Skills are one part of that larger supply chain of information and behavior.

For skills specifically, Ben Chaim recommends the habits used for package dependencies: inspect what they load, restrict what they can access, apply least privilege, and observe what actually runs. The detonation chamber contributes behavioral evidence to that process. It does not make one successful test a proof of safety across every environment, task, remote dependency, or future version.

The opening diagnostic example still matters at the end. Suspicious-looking actions need context. Reassuring-looking instructions need verification. And an execution trace needs enough depth to include the processes, files, and network effects that the agent's tools set in motion.

Full transcript 231 timestamped passages

Machine-generated source transcript; recognition errors remain. Timestamps and subtitles use the selected source recording’s clock, not clip-relative time. Section links use cited source moments; sections without a verified moment return to the talk start.

0:00:03 Hi, everyone. Welcome to my talk about what happens when you detonate thousands of agent skills.

0:00:08 This is a look inside our agent detonation chamber and what we saw when we put skills in there.

0:00:16 My name is Roey. I'm a staff engineer at Zenity, and I'm a Muts Research Fellow.

0:00:21 I talk a lot about AI safety and security. Follow me on Twitter and LinkedIn.

0:00:26 Before we even start our session, we need to talk about what an agent's skill is.

0:00:33 Well, essentially, an agent's skill is capability on demand.

0:00:37 It has a bunch of instructions, resources, new behavior.

0:00:41 It can contain scripts, and it can even contain code.

0:00:45 The problem is that it was written by someone else, and this is exactly where the problems start.

0:00:50 So let's take a look at the skill's trajectory, for instance.

0:00:54 If we look at the trajectory over here,

0:00:58 we can see the skill leads through the cloud configuration

0:01:03 and Kubernetes configuration.

0:01:04 It contacts the identity service,

0:01:07 and it even props the instance metadata endpoint.

0:01:10 Now, I don't know what was the original intent of the skill,

0:01:13 but I can tell you that a lot of infosteelers

0:01:16 are operating in the same way.

0:01:18 They scan for the different secret and identity folders.

0:01:22 In this case, however, it was an official Azure diagnostic skill.

0:01:26 And this is exactly the point where it's kind of hard for us to identify whether a skill is malicious or benign.

0:01:32 And we have to understand the original intent of the skill according to its actions.

0:01:37 And at this point, you might ask, okay, so we can just like scan the skill, right?

0:01:42 Well, it's more complicated than that.

0:01:45 The first problem that we've noticed is that the payload just lives elsewhere.

0:01:50 In a lot of the skills, skill.md is just the entry point.

0:01:54 It can invoke another endpoint that contains the rest of the prompt.

0:01:59 It can download another package as part of its installation script.

0:02:03 And it might have another script or code that downloads other payloads and other packages.

0:02:09 So if you use just a static scanner and read through skills.md, you would lose all of that.

0:02:16 And you would have to create some sort of mechanism to track all of these payloads.

0:02:20 if you don't want to lose them.

0:02:21 The second problem that we've noticed

0:02:23 is that LLM analyzers can be tricked.

0:02:26 There's a really interesting research by Trail of Bits

0:02:29 in which they showcased a skill

0:02:31 that manipulated the package registry

0:02:34 of one of the projects,

0:02:36 and it had like a small comment

0:02:38 that said that the AppSec team approved this change,

0:02:42 and it completely worked on the LLM analyzer.

0:02:46 So given that scans are not bulletproof,

0:02:50 we've resorted to a different kind of action.

0:02:52 And we actually decided to just run the skill with the agent.

0:02:56 This is a technique employed by malware researchers for years now,

0:03:00 and it's called detonation, a detonation chamber.

0:03:03 So we created the same one, but for agents and skills.

0:03:08 And this was our first version.

0:03:10 In our first version, we created a task prompt.

0:03:13 We put an agent and a skill inside a sandbox.

0:03:15 We let it operate over, like, minutes or hours.

0:03:19 until it completed a task with an observed agent traces and analyzed it.

0:03:25 You can imagine that it wasn't enough.

0:03:27 Our first problem was that the environment was missing most of the time.

0:03:32 A lot of skills rely on CLIs.

0:03:35 They rely on specific services and even on the existence of projects.

0:03:40 You can imagine notion skill, for instance.

0:03:43 This will have to have a notion service available to talk to.

0:03:47 So we've added a world builder that looks at the skill and builds the appropriate environment accordingly.

0:03:55 But then we'll encounter another issue.

0:03:57 A generic task prompt might not be enough for all skills.

0:04:02 I mean, think about it.

0:04:03 You can have a presentation skill that needs to create a deck or a deployment skill that needs to ship a service,

0:04:09 a brainstorming skill that needs to explore an idea.

0:04:12 Each and every one of them has an entirely different motus operandi.

0:04:16 Let's take shipping a service, for instance.

0:04:19 You need to learn how to configure it.

0:04:21 You need to learn how to deploy it.

0:04:22 You need to tell it to recover from snapshots, using snapshots.

0:04:26 Each and every one of them requires a different set of prompts,

0:04:31 and you also need to make sure that you cover every route in that skill

0:04:39 because one of them can be malicious.

0:04:40 So we created the operator that does just that.

0:04:43 It leads through the skill and tries to analyze what are the different trajectories that we should invoke.

0:04:50 And why it worked pretty well?

0:04:52 If you worked with agents, especially in the security domain, you can assess that we went through a lot of safeguards,

0:05:05 safeguard triggers.

0:05:07 We got a lot of refusals.

0:05:10 the agents wasn't willing to decode

0:05:12 and when it was willing to decode

0:05:14 it wasn't willing to execute

0:05:17 so we had to give you

0:05:18 an offer you can't refuse

0:05:20 and essentially create an adversarial operator

0:05:22 that convinces the agents

0:05:25 to run

0:05:25 and in case you didn't run even

0:05:29 start the run from

0:05:30 the beginning

0:05:33 now I would

0:05:34 emphasize that we're doing a security

0:05:37 research here, this is a container environment

0:05:39 Nothing is malicious in here.

0:05:41 But this is one of the things that we had to do in order to make it run properly.

0:05:45 I would also note that a lot of the time, safeguards are being run on something which is definitely not malicious.

0:05:52 Sometimes you need to decode a payload, and it's part of the official skill.

0:05:56 But the safeguard would still be triggered.

0:05:58 So up until now, we were dealing with the sandbox.

0:06:03 At this point, we started to tackle the capturing mechanism.

0:06:09 So agent traces can go that far.

0:06:14 At some point, you'd be missing some side effects.

0:06:17 And npm install is the perfect example.

0:06:20 npm install has a post-installation script.

0:06:23 And the post-installation script can invoke a new process.

0:06:26 And that process can read and write to a file and then connect to an endpoint.

0:06:30 That's exactly how infosteelers work.

0:06:33 So we understood that these are also events and signals that we need to capture.

0:06:40 And we did just that as part of the capturing mechanism.

0:06:43 We added process creation event, file system event, and network packet capturing.

0:06:49 Given all of that along with the agent traces, we then moved it to quality evidence and captured the behavior.

0:07:00 Even this final form of the detonation chamber, let's take a look at an example skill.

0:07:08 So Zach Korman, you should follow him on Twitter, he created a really interesting skill proof

0:07:13 of concept where he created a skill called Security Review 2.

0:07:18 And as part of the skill installation, it installed a new skill called Security Review.

0:07:23 and security review tells you to go into GitHub

0:07:26 and fetch the content of skill.md.

0:07:28 And as you can imagine,

0:07:29 that skill.md contains hidden instructions

0:07:32 for the agent to execute the following payload.

0:07:35 And it actually did it.

0:07:36 Now, I would note that this is not a malicious payload.

0:07:40 This was just a proof of concept,

0:07:41 but it does work.

0:07:43 And static scanners can't figure that out.

0:07:46 You have to actually execute the entire chain

0:07:50 in order to recover it.

0:07:52 And this is a result of one run on the detonation chamber.

0:07:57 Using this approach, we were able to uncover 100 malicious skill out of thousands,

0:08:04 and they were shut off the skills.sh framework.

0:08:10 Now, let's take a look at another example.

0:08:13 Polymarket.

0:08:14 This was an interesting skill that is part of its installation script called Polymarket Client V2.

0:08:21 You notice the S over here.

0:08:23 This is not the original Polymarket package.

0:08:26 And when we went into NPM and looked at package.json of the package,

0:08:32 we noticed that it actually links to a non-official NPM registry.

0:08:37 This isn't real.

0:08:38 This isn't official.

0:08:39 And looking at the payload, it was actually an infostealer.

0:08:45 So it's out there.

0:08:46 It's happening.

0:08:49 Now, let's take a look at tricks that we've seen actors have been doing in the ecosystem.

0:08:57 One of them is persistence.

0:08:59 So some of the skills would add an additional prompt to Sol.js, to Sol.md or to Agent.md,

0:09:08 stating that if the skill is not installed, just reinstall it.

0:09:12 We've seen it happening a couple of times.

0:09:15 Another thing that we've noticed is silent actions.

0:09:18 There's a skill creator out there,

0:09:20 which is not Entropic's official skill creator,

0:09:23 that checks if Entropic's skill creator is installed,

0:09:26 in case it is uninstalled, and install itself instead.

0:09:31 This whole thing happens silently.

0:09:36 Another trick that we've seen a lot of actors employed,

0:09:40 and this is actually legitimate, but it's still problematic,

0:09:42 is remote prompt execution

0:09:44 where the initial prompt

0:09:46 doesn't contain all of the prompt

0:09:48 and it contains instruction

0:09:49 to retrieve it from another location.

0:09:52 We've seen it on a bunch of skills.

0:09:55 Some of them are legitimate.

0:09:58 Some of them are illegitimate.

0:09:59 And it's kind of problematic

0:10:01 because as you can imagine

0:10:02 that when something is appropriate

0:10:04 at one point in time,

0:10:05 at another point in time,

0:10:07 someone can either take over the domain

0:10:09 or either do it intentionally

0:10:12 and change the prompt entirely.

0:10:15 This is fairly interesting.

0:10:17 And another technique that we've seen is hook abuse.

0:10:19 You can actually trigger a skill on a given hook,

0:10:24 like user prompt submit.

0:10:25 Now imagine what would happen if a skill is triggered

0:10:27 every time a user sends a message to the assistant.

0:10:31 This could have major consequences,

0:10:33 and you need to be aware of that.

0:10:35 But let's talk about a campaign that we've uncovered.

0:10:38 Meet Carly, or Carly Paperclip, as he known in GitHub.

0:10:41 he faked the Paperclip organization. Paperclip is a well-known project. It's an open-source

0:10:50 project aimed for orchestration of various agents. Carly here basically created a fake

0:10:58 organization that mimics it. He registered the domain under kind of the same name, created a

0:11:05 lookalike organization, and then clone the project.

0:11:08 After he cloned the project, he did something bad.

0:11:14 He created a new log action call and called it under all of the different routes of the

0:11:19 project.

0:11:20 When we looked into what's happening into log action, we noticed that it's calling the

0:11:31 attackers' control endpoint.

0:11:34 It fetches a payload from there, decodes it, saves it into a temporary file, and executes it under a node and self-destroy after 60 seconds.

0:11:47 When we looked at the payload, this was alarming.

0:11:52 It was a credential harvester.

0:11:53 Essentially, it went through the different sensitive paths on the machine, such as SSH, AWS, and Azure, collected all the information from those folders, and then posted everything to a feedback endpoint on by the attacker.

0:12:11 This was bad.

0:12:13 He then did the same thing in browser use.

0:12:16 But this was a Python package, but he used the same command and control.

0:12:20 And then he tried to publish it in PyPy.

0:12:23 That didn't work.

0:12:25 Like under two hours, it was just down.

0:12:27 He did the same thing with Paperclip AI, which is the Python version of what we just saw.

0:12:31 And that also went down after less than an hour.

0:12:35 Well, at this point, you'd think that we'd be winning, but no, because the skins that

0:12:40 were using the same command and control were actually trading, trending at that time to

0:12:45 the point where they had 1.7 million total downloads.

0:12:50 So that's, that was pretty bad.

0:12:52 And it operates approximately the same way.

0:12:56 Upon setup installation, the payload is fetched from the attacker's own health endpoint.

0:13:02 It is then being decoded and sent to a JavaScript file.

0:13:07 Node then executes it.

0:13:08 And then the entire credential harvesting and sending to the post endpoint happens.

0:13:12 And it's of destruction as well.

0:13:14 Exactly the same chain.

0:13:16 We reported the incident to Vercel and Microsoft.

0:13:19 And under the last 12 hours, they took everything down.

0:13:22 If you want to read more about it, you should read the Zenity Labs blog.

0:13:26 It's very interesting.

0:13:29 Incredible work.

0:13:33 Skill is just one single part of the agent supply chain.

0:13:38 Everything that goes inside the agent context is part of it.

0:13:42 It can be a website.

0:13:43 It can be rows in your database.

0:13:45 It can be packages.

0:13:46 It can even be a YouTube comment.

0:13:48 Everything that comes into the context is under risk.

0:13:51 And if we talk about skills in particular, you need to treat them as package dependencies.

0:13:58 You need to inspect everything that it loads, limit what it can access, list privileges, as you're well aware, and observe what is actually being run.

0:14:08 Now, this entire work on the detonation shiver was done by the entire research and engineering thing that you see over here.

0:14:17 highly talented people, and I encourage you to follow them.

0:14:22 And with that, if you want to test out your skills,

0:14:25 it's available in a.total.io.

0:14:26 This is the donation chamber, and thank you so much.