Claude Code /goal vs parallel agents, NPM supply chain worm, and on-device LLMs

Published on 15.05.2026

AI & AGENTS

I tested Claude Code's new /goal feature against my parallel agent setup

TLDR: A developer benchmarks Anthropic's new Claude Code /goal feature against their own parallel multi-agent CLI called baro. After adding an Architect phase to coordinate design decisions upstream of parallelism, baro won on both speed and code quality.

Summary: This one really grabbed my attention because it gets at something I think most people building multi-agent systems are going to hit eventually. The author started with a reasonable hypothesis: run parallel agents, get parallel speedups. Simple enough. But the first benchmark told a different story. Claude Code's /goal feature beat the parallel setup on wall time, token usage, and actual code quality. The parallel agents produced what the author calls "incoherent output" — wrong column names, duplicate dependencies, broken migrations. Each agent was making cross-cutting design decisions independently, with no one agent aware of what the others had decided.

The initial fix attempts were sensible but insufficient. Better broadcast messages between agents and staggered launches shaved 15-20% off token usage but didn't touch the core issue. The fundamental problem was architectural: parallelism had been introduced before the design was settled. Multiple agents were each filling in the gaps in their own way, and those gaps included things that really needed a single answer.

The actual solution was adding what the author calls an Architect participant to their Mozaik framework. Before any story agents spin up, a single Claude Opus turn reads the codebase and emits a decision document. That document covers the cross-cutting choices — schema names, dependency selections, migration strategies — and every subsequent agent reads from it rather than inventing their own answers. The implementation cost was about 200 lines of new code, touching none of the existing participants. That last detail matters: the event-bus architecture meant this was genuinely additive.

The rematch had baro 0.25 finishing four minutes faster than /goal, with clean production-ready output. Token usage remained about 28% higher than /goal due to multiple context windows, which is a real cost worth acknowledging. But the quality difference was decisive. The article closes with a framing I find genuinely useful: multi-agent setups need a "tech-lead-shaped phase" upstream of parallelism. Not a manager, not a scrum ceremony, but someone or something that makes the hard architectural calls before the parallel work begins.

What I find worth pushing back on here is the implicit assumption that this Architect phase is cheap or always straightforward. A single Opus turn reading a full codebase and producing a coherent decision document is doing a lot of work. If the codebase is large, or if the task spans multiple unfamiliar subsystems, that Architect turn could itself become a bottleneck or a source of errors. The author doesn't discuss what happens when the Architect gets it wrong, or how story agents should handle contradictions between the decision document and what they actually find in the code.

Key takeaways:

  • Parallel agents fail when cross-cutting design decisions are made independently rather than once upstream
  • An Architect phase before parallelism is more effective than trying to coordinate agents mid-flight
  • Event-bus architectures make adding coordination phases genuinely cheap in terms of code changes
  • Token costs remain higher with multi-agent setups even when quality improves
  • The "tech-lead-shaped phase" framing is a useful mental model for designing agent workflows

Why do I care: This directly affects how I think about agentic coding pipelines. The failure mode described here, agents independently resolving architectural ambiguity in incompatible ways, is not a baro-specific bug. It's a structural problem that will appear in any parallel agent setup where tasks have hidden dependencies. The Architect pattern is a practical answer, and the event-bus approach makes it composable. Any team building serious multi-agent workflows should read this before writing their coordination layer.

I tested Claude Code's new /goal feature against my parallel agent setup


A single PR just hijacked the NPM registry

TLDR: A sophisticated supply chain attack hit over 100 npm packages with 50 million weekly downloads by exploiting a misconfigured GitHub Actions workflow in the TanStack repository. The malware spread itself by harvesting npm publish tokens from infected machines.

Summary: This is the kind of attack that security researchers have been warning about for years, and now it's happened at scale. The attack vector was a GitHub Actions misconfiguration in the TanStack repository: using the pull_request_target trigger, which runs fork pull requests with the main repository's permissions. That single configuration mistake gave an attacker the keys to the CI cache and eventually to an npm publish token.

What makes this attack genuinely alarming is what happened next. The malware didn't just compromise one package. It scanned infected machines for npm tokens, then used those tokens to republish poisoned versions of whatever packages those tokens had publish access to. A worm, in the traditional sense. From TanStack, it spread to packages from Mistral AI, UiPath, OpenSearch, and others. The blast radius grew not because of one misconfiguration but because the attacker weaponized the trust that developers and organizations had built up over years.

The embedded malware had two particularly nasty properties. First, it embedded itself into VS Code and Claude Code, tools that developers keep running constantly and trust implicitly. Second, it included a dead-man switch: when a stolen GitHub token expires, the malware nukes the root directory. That's not just theft, it's sabotage with a timer.

The mitigations mentioned in the article are worth taking seriously. Using pnpm version 1 or later with a minimum release age setting gives you a window to catch newly poisoned packages before they reach production. Blocking exotic subdependencies limits your exposure to transitive attacks. The approved-builds feature adds another layer of verification. None of these are magic, but together they meaningfully raise the cost of this class of attack.

What the article doesn't fully address is the systemic issue: the npm publish model, where a single token can silently replace any version of a package, is the root problem. Token-based publishing without mandatory review or signing is an attractive target precisely because the payoff scales. Until package signing and verification become standard infrastructure rather than optional features, this kind of attack will keep working.

Key takeaways:

  • The pull_request_target GitHub Actions trigger is dangerous when used with untrusted fork PRs and should be avoided or heavily sandboxed
  • Supply chain worms that harvest and reuse tokens represent a qualitatively different threat than single-package compromises
  • Embedding into developer tools like VS Code and Claude Code gives attackers persistent access to high-privilege environments
  • pnpm's minimum release age and approved-builds features are practical defenses against newly poisoned packages
  • Package signing and verification remain unsolved at the infrastructure level

Why do I care: Every JavaScript project I work on has a dependency tree measured in hundreds of packages. The attack surface here is enormous and largely invisible. The TanStack connection is particularly uncomfortable because those are libraries I use and recommend. The practical takeaways around pnpm settings are worth implementing immediately, but the deeper lesson is that CI configuration deserves the same security scrutiny as application code. A misconfigured workflow file is a vulnerability.

A single PR just hijacked the NPM registry


When code is cheap and specs go stale the moment they're written, what becomes the source of truth?

TLDR: As agentic coding tools make implementation faster, the gap between original intent and what the code actually does grows silently. The post argues for lightweight requirements management borrowed from regulated industries to address this drift.

Summary: This article is wrestling with a problem that I think most teams haven't fully confronted yet. The premise is straightforward: when agents can fill in implementation gaps based on context that isn't written down anywhere, the code may pass all its tests while quietly drifting from what anyone actually wanted it to do. Tests are green, CI passes, deployment succeeds. Nobody notices until someone tries to change behavior and discovers the system has been doing something subtly wrong for months.

The author makes a distinction that I think is genuinely useful: the difference between a spec and a requirement. A spec is a temporary artifact that guides implementation and then gets thrown away or forgotten. A requirement is something that persists after implementation, links to tests and evidence, and serves as an invalidation mechanism. When the code changes, the requirement tells you whether that change was intentional or accidental. When a test changes, the requirement tells you whether the new behavior is actually what was wanted.

The argument is that software teams operating at high velocity with agentic tools need something closer to requirements than to specs. Not the heavyweight documentation processes of aerospace or medical device development, but something lighter that preserves intent across the full lifecycle of a feature. The author frames this as borrowing from regulated industries, which is an interesting framing because it implies that some of what those industries do has real value beyond compliance theater.

What I'd push back on is the assumption that this is primarily a tooling problem. The real challenge is cultural and organizational. Teams move fast precisely because they don't want to maintain documentation. Asking them to maintain requirements in any form, even lightweight ones, is asking them to slow down in ways that feel bureaucratic. The article acknowledges the cost but doesn't fully grapple with how you make requirements maintenance feel worthwhile rather than burdensome in practice.

Key takeaways:

  • Agentic coding accelerates implementation but amplifies intent drift when context isn't explicitly recorded
  • Requirements differ from specs by persisting after implementation and serving as an invalidation mechanism
  • Green tests don't guarantee alignment with original intent when agents fill in unspecified gaps
  • Regulated industries have solved adjacent problems; their approaches can be adapted at lower cost
  • The challenge is organizational as much as technical: teams need to value preserved intent

Why do I care: This lands differently when you're working in a codebase where AI agents are increasingly doing the implementation work. The spec I write today may be interpreted by an agent tomorrow in a way I didn't anticipate, and the resulting code may look perfectly reasonable while being subtly wrong. I don't have a clean answer to this yet, but I'm increasingly convinced that the investment in explicit, persistent requirements pays off faster than it used to now that the implementation layer moves so much faster than the understanding layer.

When code is cheap, and spec stale right after it written, what will be source of truth?


Capacitor LocalLLM: On-device AI inference for iOS and Android

TLDR: A new Capacitor plugin brings on-device LLM inference to iOS and Android apps via a unified TypeScript API, using Apple Intelligence and Gemini Nano to run models locally without any cloud dependency.

Summary: On-device AI inference has been a theoretical possibility for a while, but practical developer tooling for it has lagged behind. This Capacitor plugin is a direct attempt to close that gap. The pitch is simple: a TypeScript API that lets you run LLMs locally on iOS using Apple Intelligence and on Android using Gemini Nano. No data leaves the device, no API keys, no latency from a round trip to a server.

The demo application is a fictional fintech app called Oakline Bank, featuring an AI assistant called OakBot that answers questions about account balances and spending patterns. The interesting technical choice here isn't the inference itself but how context is fed to the model. The author injects serialized transaction data as plain text into the model's context window before inference runs, rather than using structured JSON. The reasoning is token efficiency and better reasoning performance on small on-device models.

That plain-text-over-JSON choice is worth dwelling on. Small models have limited context windows and are more sensitive to how information is formatted. JSON, with its brackets and quotes and nesting, consumes tokens on structure rather than content. Plain text narrations of the data, something like "account balance is $1,240, last five transactions were at..." give the model the same information with fewer tokens and in a format closer to its training distribution. It's a practical insight that applies beyond this specific plugin.

The broader significance here is what this enables for privacy-sensitive applications. Financial data, health information, anything you'd be uncomfortable sending to an external API can now be processed locally on a modern phone. The performance won't match a cloud-hosted frontier model, but for many common tasks, a capable small model running locally is more than sufficient.

Key takeaways:

  • Capacitor LocalLLM provides a unified TypeScript API for on-device AI on both iOS and Android
  • Apple Intelligence and Gemini Nano power inference on their respective platforms, requiring no cloud connectivity
  • Plain text context injection outperforms JSON for small on-device models due to better token efficiency
  • On-device inference is particularly valuable for privacy-sensitive domains like finance and health
  • The plugin requires no API keys and adds no per-inference cost

Why do I care: For mobile web developers and hybrid app teams, this changes the calculus on what's feasible without a backend. Local inference means features that would previously require careful API design, token budget management, and privacy review can be built as pure client-side functionality. It's not right for every use case, but the set of cases where it is right is larger than it was six months ago.

Capacitor Showcase – LocalLLM


Svelte Dot Matrix Loaders: Free and Open-Source

TLDR: A collection of 50+ dot-matrix loader components for Svelte, built with TypeScript and Tailwind CSS, available as a shared component registry.

Summary: This is a small, focused open-source release: over fifty dot-matrix style loading animation components for Svelte, built with TypeScript and Tailwind CSS. The components are distributed as a shared component registry, which means you pull in what you need rather than installing a monolithic package. The aesthetic is retro dot-matrix, which has been having a moment in UI design circles.

There's not a lot of hidden depth here, but the distribution model is worth noting. Shared component registries, in the pattern popularized by shadcn, give you source-level access to components rather than compiled package output. You can read the code, modify it, and own it fully. For UI primitives like loaders that often need small adjustments to match a specific design system, that ownership is genuinely useful.

Key takeaways:

  • 50+ dot-matrix loader animations available as Svelte components
  • Built with TypeScript and Tailwind CSS, distributed via shared component registry
  • Registry model means you own the component source rather than a black-box dependency

Why do I care: Svelte's component registry ecosystem is still smaller than React's, so new open-source additions are worth knowing about. The registry distribution model is a pattern worth adopting more broadly regardless of framework, since it trades the convenience of a package update for full visibility and control over your UI code.

Svelte Dot Matrix Loaders - Free & Open-Source