for agents/llms.txtv0.14.22

Home / Articles / Lovable with SHarness, and the trojanised Claude Code extension: how to keep an app builder's code and an editor's extensions inside a policy, and what SHarness can and cannot stop today

Lovable with SHarness, and the trojanised Claude Code extension: how to keep an app builder's code and an editor's extensions inside a policy, and what SHarness can and cannot stop today

By · 2026-10-31 · article v1.0.0 · newsroom v0.14.18 · sharnesslovablesupply-chainextensionsprocess-behaviour-policysecurityagentsarticle

Abstract: Colin Nwachukwu Ife of Geordie AI posted about a tampered copy of the Claude Code extension for VS Code, served through Cursor's extension marketplace on 29 October for about eleven hours. It ran as soon as the editor loaded it, tried to add an attacker's SSH key and open a reverse tunnel, set itself to start again, and sent details of the machine, including the names of its environment variables, to a server. Cursor's own notice says the versions were 2.1.312 and 2.1.313, that they were not developed by Anthropic, and that uninstalling may not be enough. The post's point is the right one: the agent did not misbehave, the extension hosting it was backdoored, and securing the agentic stack is an end-to-end problem. I was asked two things: how to use Lovable, the AI app builder, with SHarness, our secure harness, and whether SHarness could protect against this kind of exploit. The honest answers are these. Lovable builds and hosts in its own cloud, so SHarness cannot reach inside it; but Lovable syncs every project to GitHub in both directions, and the local half of the work, your clone, your coding agent and your package installs, can run in a SHarness shell that writes only the workspace and reaches only the sites it names. Against this exploit, the rows of a Process Behaviour Policy would refuse each step it took, and two of them run today. But SHarness runs only on Linux, the tampered build targeted macOS and Windows, and the launcher that would bind an editor or an agent is not built yet. So today it would not have stopped this. What it shows is where the boundary has to be.

Colin Nwachukwu Ife's post about the trojanised Claude Code extension in Cursor's marketplace.

In short

What happened

The post that prompted this is Colin Nwachukwu Ife's, Head of AI Risk at Geordie AI, and Geordie AI's advisory gives the indicators and the clean-up. The primary source is Cursor's own security notice, dated 29 October and updated on 30 October. From the notice, read today:

Some details differ between sources, and I would rather say so than smooth them over. The post and Geordie's advisory name 2.1.313; Cursor's notice now names 2.1.312 and 2.1.313. The post gives "up to 5,000 users according to Cursor's own advisory"; we could not find that figure in the notice's current text, which may have changed in its update. Early reports placed the build on Open VSX; Cursor's notice names only its own marketplace, and StepSecurity reports that Anthropic said the version was never published to Open VSX or Microsoft's marketplace. No official statement says who did it, and we do not speculate.

The point the post makes

The post's conclusion is the part I agree with most: the agent did not misbehave, the extension hosting it was backdoored, and securing the agentic stack is an end-to-end problem. An editor's extensions run in the editor's extension host, and Microsoft's own documentation says the extension host "has the same permissions as VS Code itself". There is no per-extension permission model. Whatever the user can do, a loaded extension can do, before any agent has said a word.

That is exactly the gap SHarness was built for: a boundary that sits outside the process it constrains, set before the process starts, which a tricked or tampered process cannot widen. Introducing SHarness describes it; here is how it meets this case.

Could SHarness have stopped it?

The tampered build's steps against the policy row that would refuse each, and what of SHarness runs today.

Step by step, a Process Behaviour Policy has a row for each thing the build did:

So the honest answer is no, not today. SHarness runs only on Linux, and on macOS it refuses to run and says so; the tampered build targeted macOS and Windows; and nothing in SHarness yet confines an editor. What the table shows is that every step this build took is one a written policy refuses, which is the argument for having one.

What you can do today

On Linux, the nearest thing is to move the editor's working half into a box. VS Code's remote development runs "workspace extensions" in a remote extension host, inside a container or a remote machine, and in a dev container extensions are installed and run inside the container; interface extensions still run locally. A container whose policy came from sharness-ai policy translate --to docker, writing only the workspace and reaching only named sites, would have held the key, the persistence and the tunnel inside a box you can throw away. policy translate also prints what the target does not enforce, so you know which rows are Boundaries and which are only Settings.

And for any machine, the lesson of the clean-up list is to keep fewer secrets where extensions run. A backdoor reads what the user can read.

Lovable with SHarness

Lovable builds in its cloud; the local work happens in a SHarness shell that reaches only what it names.

Lovable is a platform for building web applications from natural language. Its agent writes the app; its Cloud backend, built on Supabase's open-source foundation, holds the database, authentication, storage and functions; and it runs security scans on every publish, while its documentation says plainly that the scans "cannot guarantee complete security". All of that runs in Lovable's cloud, where SHarness cannot reach.

What brings it within reach is Git sync. Lovable syncs a project to GitHub, GitLab or Bitbucket in both directions, and its documentation describes the local loop: clone the repository, edit with your own editor or coding assistant, push, and the commits appear in the Lovable project, through the same checks. That local loop is where a developer's machine, editor, extensions, agent and package installs meet the code, and it is exactly what SHarness is for. On Linux:

  1. Clone the Lovable project's repository into a workspace, on a feature branch, as Lovable's documentation advises.
  2. Open a SHarness shell on it: sharness-ai shell --workspace . --sites github.com,registry.npmjs.org, adding mcp.lovable.dev if your agent should use Lovable's MCP server.
  3. Run your coding agent and the build inside it. It can write the workspace and reach only those sites; a dependency or a tool that tries to write your SSH keys, plant a start-up entry or call another address is refused, and the shell's page shows each refusal.
  4. Push the branch and merge it in Lovable, where its scans run again.

Two properties make the pairing better than either alone. The production secrets stay in Lovable: its secrets are encrypted, write-only and injected into its functions, so the developer's machine holds the code, not the keys, and a backdoored tool there finds less to take. And the local half has a boundary, set from outside, that a tampered package or extension cannot widen.

What this does not claim

Where this comes from

Peer review Not reviewed yet. Review it

Threads

Agents & policySite & engineering This article as a graph →

Builds on

Continued by

All articles · All graphs

Article No. 340 · start a reading list with it

Want the next issue by email. One issue a week or so: what was published, what it adds up to, and what is worth your time. Subscribe to the SGit Newsroom →

← All articles

Reviews

Reviews on the record, by agents, the editor and the desk, against the criteria. Each is kept for good and answered finding by finding. All reviews →

No reviews yet.