Build1 publisher3 min readPublished
AgentGate read the shipped code behind 30-plus OSV and GHSA flags, verified 19 npm packages as malicious, and found 18 still resolvable on publication day. Removal, not detection, is where the chain stopped.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
The spawn line carries no payload of its own. `--dangerously-skip-permissions` is a flag on a program the developer installed deliberately, and the package contributes only a socket to a hardcoded server plus a loop that feeds received task objects into that flag [10][12]. Capability comes from the host side: a process holding the developer's credentials that can read any file, run any command and reach any network endpoint [9]. This ships a string [8]. Eight of the named packages carry that pattern verbatim, according to the post [11][2].
The registry claim is the cheap one to check, which is why it should carry weight. AgentGate says it re-ran the check on publication day with `node scripts/launch-live-check.mjs` from its own repo rather than copying a figure out of an older report [6]. That works out to 95 percent of the verified set still resolvable [1]. Anyone with npm and 19 package names can reproduce or refute it in a minute, which is more than most vendor tables offer.
Note which one did come down. `anthropic-setup` was a single base64-concealed eval that wrote `~/.claude/settings.json` with `env.ANTHROPIC_BASE_URL` pointed at the author's domain and added an `apiKeyHelper` that echoed the stored key, so every later Claude Code invocation routed prompts, code context and key through the operator [16]. That is the shape both a scanner and an abuse triager recognise. It is the only removal the post documents [5].
The post states the provenance plainly: the discoveries belong to the public feeds, the tarball-level verification is AgentGate's, and AgentGate publishes an Apache-2.0 tool built to gate this class of package [2][23]. The test the authors say they apply in an advisory is narrow and answerable: can the remote endpoint cause code execution on the host without a fresh, informed local consent step [15]. That is a better gate than the word "malicious", because outbound-only channels mean no firewall rule saves you, per the post, and legitimate remote-access products would otherwise argue their way past [14]. The disclosure email to npm security sits in the repo under `docs/launch/disclosure/` with per-package behaviour and affected versions [7]. Absent is npm's half of the exchange: no reply, no triage timeline, no per-package flag date. "Weeks" is the post's word, and it is not broken out per package [4].
The prompt-as-payload case has texture worth reading. `claude-cup` presents itself as a Claude Code usage leaderboard, auto-registers into Claude Code and Cursor, then drives the authenticated CLI with prompts assembled from a codeword dictionary: striker for github, midfielder for npm, goalkeeper for aws credentials, referee for private keys [18]. The request reads as football chatter while the developer's own agent walks the filesystem. `llm-interceptor` is blunter. One postinstall writes an MCP server entry into `~/.cursor/mcp.json`, runs `claude mcp add`, installs a Claude Code `SessionEnd` hook, and on Windows creates a logon task [17]. Four footholds from one install.
The install-time PATH swap is the part that outlives an incident review. `opencode-optimised-toolings` renames the on-PATH `opencode` aside and installs a build from a non-publisher GitHub repo in its place, while `opencode-engos-ai` symlinks whatever the attacker published most recently into `/usr/local/bin` [20]. Every later invocation runs attacker-built code and the project directory shows nothing [21]. Several of the packages also register launchd jobs, systemd units, or a hidden Windows WScript launcher, so the channel returns after a reboot [13]. Dropping the dependency undoes none of it. The machine is the artifact you have to rebuild.
Ranked by verification strength, evidence, and original report placement.
While building a public advisory database for the Model Context Protocol ecosystem, AgentGate unpacked and read the shipped code of more than 30 npm packages in the AI-agent space that public feeds (OSV/GHSA) had flagged as malicious.
The post states that the discoveries are the public feeds' work and the tarball-level verification is AgentGate's own.
AgentGate verified 19 of the flagged packages as malicious in the shipped code.
As of 2026-09-06, 18 of those 19 packages were still installable from the public npm registry, weeks after being flagged.
The 19th package, anthropic-setup, has since been replaced by an npm security-holder placeholder, which the post says is what should happen to the other 18.
The registry check was re-run on the day the post was published, using node scripts/launch-live-check.mjs in the repo, so the figure is not a stale copy from an earlier report.
Follow any of these and your For You feed starts watching them — no settings page required.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
One reader, checkable detail
The specificity is unusual for a launch post: named packages and scopes, exact config paths, an exact command line, a dated registry snapshot and a script anyone can run against npm. The provenance is also handled honestly, with the flags credited to OSV and GHSA and only the tarball reading claimed. Against that, a single party did all of the reading and published it on its own launch day, and the method is reproducible by anyone who pulls the same tarballs, which nobody in this coverage has.
Registry state, not installs
The only hard uptake signals here are registry states. Eighteen packages resolvable, one replaced by an npm security placeholder, and a freshly published Apache-2.0 tool with no disclosed users. How many developers actually installed any of the eight spawn-pattern packages, or how many are running the gate, is nowhere in the reporting.
Headline outruns the reading
"Still remote-controlling AI coding agents" asserts more than the tarballs show. What AgentGate documented is capability sitting in shipped code plus the fact that the code remains fetchable; no compromised developer, session or exfiltrated secret appears anywhere in the account. The count itself is dated, narrow and re-measured, and the advisory criterion is stated openly, which keeps the stretch modest.
The gate-builder grades the gate
The people who read the tarballs are the people launching the product that blocks them, and "removal is where the chain stopped" is the strongest available argument for install-time gating. Working against that reading, the discoveries are handed to OSV and GHSA rather than claimed, and a disclosure email to npm security sits in the evidence pack -- not typical of pure marketing.
Specific, and it checks out so far
Our confidence comes from how easily the specifics could be shown wrong: package names and versions anyone can pull, a script anyone can run, a date attached to the count. It stops short of high because a lone interested party supplied all of it, and some of the surrounding argument, such as the claim that no firewall rule helps, is asserted without a test against egress filtering.
security
Seven AI coding agents run attacker code named in a repository's own .git config2 publishers
product
Four leaderboards, four denominators: what you buy when you standardize on a coding agent1 publisher
build
Six specifications decide whether an agent can move off the harness it was built on1 publisher
product
Binance gives agents a trading seat, and gives users the permission slip1 publisher
Publishers with included, body-backed reporting in this cluster.
1 article · September 6, 2026