Skip to content

Four Signals

Agentic insights for modern tech teams

Why We Stopped Using LLM Agents to Control LLM Agents (Deterministic Multi-Agent FSM)
AI/ML / dev.to

Why We Stopped Using LLM Agents to Control LLM Agents (Deterministic Multi-Agent FSM)

Minions.AI replaced an LLM orchestrator controlling specialized agents with a deterministic Finite State Machine (FSM) in TypeScript after the original pattern failed 30% of the time due to loop oscillation, context poisoning, and non-deterministic convergence. The FSM enforces hard iteration bounds (max 2 revisions) and routes state transitions via typed code inspecting structured JSON outputs, reserving LLMs solely for content transformation and evaluation. This architectural shift eliminated unpredictable inference costs and failure modes by removing all control flow decisions from the LLM.

Why it matters

For engineers building multi-agent systems, this validates that LLMs are unreliable as control planes and demonstrates a concrete pattern—deterministic FSM with typed state machines—that cuts failure rates and inference costs while keeping LLMs in their strength zone.

Mem0 vs Zep vs LangChain Memory vs Letta: Which One Actually Remembers?
AI/ML / dev.to

Mem0 vs Zep vs LangChain Memory vs Letta: Which One Actually Remembers?

Mem0, Zep, LangChain Memory, and Letta (MemGPT) offer fundamentally different architectures for AI memory, not just retrieval. Mem0 uses a two-stage LLM call to add, update, or delete facts based on conflict resolution, while Zep's Graphiti engine employs a bi-temporal knowledge graph to timestamp and supersede facts without deletion. LangChain provides primitives like ConversationSummaryMemory and ConversationKGMemory that lack built-in invalidation, leaving conflict resolution to the developer.

Claude, Codex, and Hermes installed unowned code inside corporate networks
AI/ML / arstechnica.com

Claude, Codex, and Hermes installed unowned code inside corporate networks

Researchers found 120 llms.txt and llms-full.txt files on 6,214 scanned domains pointing to unregistered code packages or domains. When they registered a few and hosted proof-of-concept packages, coding agents including Claude, OpenAI's Codex, and Nous Research's Hermes automatically executed them inside Fortune 500 and startup networks within an hour. One live exploit on clerk.com uses an `npx` command to fetch and execute a malicious binary without adding it to the dependency manifest, demonstrating a real supply-chain attack vector targeting AI agents.

Astro Introduces Sätteri: A Rust-powered Markdown And Mdx Processor With Up To 60% Faster Builds
Languages / infoq.com

Astro Introduces Sätteri: A Rust-powered Markdown And Mdx Processor With Up To 60% Faster Builds

Astro 7.0 ships Sätteri, a Rust-powered Markdown and MDX processor that replaces the unified/remark/rehype pipeline, delivering 15-61% faster builds by moving parsing out of JavaScript. Built on pulldown-cmark and Oxc for MDX, it ships native binaries with WASM fallback and natively supports GFM, math, wikilinks, and other features that previously required separate plugins. Users reliant on remark/rehype plugins can either port to Sätteri's MDAST/HAST plugin system or stay on unified via @astrojs/markdown-remark, with the Astro team committing to keep both paths available.

Two-step control plane upgrades in GKE: How minor version rollbacks work under the hood
Cloud / dev.to

Two-step control plane upgrades in GKE: How minor version rollbacks work under the hood

GKE now offers two-step control plane upgrades, decoupling binary execution from API capability enablement to allow safe minor version rollbacks. Step 1 upgrades the control plane binary to the target version (e.g., 1.34) but emulates the previous minor version (1.33), enabling a soak window for monitoring. Step 2 finalizes the emulated version, permanently enabling new schemas and deprecations. The GKE rollout engine (CPRS) orchestrates this with a 24-hour soak window and the Canary Analysis Service (CAS) monitors health signals, achieving a 99.999% rolling 30-day upgrade success rate across the global fleet.

Saving 100 terabytes of memory by optimizing 1.1.1.1's DNS cache
Cloud / blog.cloudflare.com

Saving 100 terabytes of memory by optimizing 1.1.1.1's DNS cache

Cloudflare's Big Pineapple DNS cache, storing over 250 billion entries across 1.1.1.1 and other services, was consuming excessive memory due to Rust's Vec and String capacity overhead. By switching to Box<[T]> and Box<str>, which eliminate unused capacity fields and heap reservation, the per-entry footprint dropped over 50%, freeing 100 TB of fleet memory—equivalent to 130 Gen 13 servers. The optimization also improved performance: insert throughput rose 43% and lookup latency fell 19%, as fewer allocations and better memory locality avoided the typical space-speed tradeoff.

RFLCT: Bringing Runtime Type Metadata to TypeScript 7
Languages / dev.to

RFLCT: Bringing Runtime Type Metadata to TypeScript 7

RFLCT is an ahead-of-time (AOT) metadata injector for TypeScript 7 that eliminates the need for experimentalDecorators and emitDecoratorMetadata by injecting design:symbols and design:arguments at build time. It integrates with Vite, Rollup, webpack, and esbuild via unplugin, or via CLI for standalone tsgo projects, enabling decorator-free runtime type metadata for DI containers like InversifyJS, object mapping, RPC frameworks, and runtime validation. The tool performs three core transformations: a global type registry (design:symbols), argument metadata injection (design:arguments), and a Reflect<T> wrapper type for explicit type exposure.

Anthropic’s new Files API vs. pasting: It will save you time, but it won’t save you money.
General / thenewstack.io

Anthropic’s new Files API vs. pasting: It will save you time, but it won’t save you money.

Anthropic's Files API, now out of beta, lets developers upload a document once and reference it by ID, avoiding pasting content into every prompt. Testing against a 1,200-word API reference with five nuanced questions showed all three approaches (pasting, Files API, and prompt caching) produced identical correct answers, but the Files API actually cost 125 more input tokens across five requests due to overhead. Prompt caching, which bills the document once as a cache write at a 25% premium and subsequent reads at one-tenth the rate, was the only method that reduced token costs, though it requires requests within a five-minute cache window.

[Go in Practice] Writing Modern Go with AI: Testing JetBrains go-modern-guidelines and Refactoring a 1,039-line main.go
DevTools / dev.to

[Go in Practice] Writing Modern Go with AI: Testing JetBrains go-modern-guidelines and Refactoring a 1,039-line main.go

JetBrains' go-modern-guidelines CLI helps AI agents write idiomatic Go by providing version-aware syntax rules, addressing both knowledge cutoffs and frequency bias in training data. The tool returns 45 guidelines for Go 1.24 and 54 for 1.27, ensuring agents only suggest features compatible with the project's actual Go version. A real-world refactoring of a 1,039-line main.go replaced a hand-rolled string search with a single `strings.Contains()` call, demonstrating how the plugin prevents outdated patterns like manual loops over standard library functions.

An image of the Android logo on a blue and green background
DevTools / theverge.com

Google tells Android app developers to cool it on memory use, or else

Google will enforce per-app memory limits starting February 2027, penalizing Android apps that exceed thresholds with reduced Play Store visibility and publishing capabilities. The restrictions, introduced with Android 17 on Pixel phones, target apps running on devices with 4GB to 16GB+ RAM as manufacturers adopt lower base memory configurations due to the global RAM shortage. Apps exceeding limits will be slowed or terminated, with Google warning developers to optimize memory usage or face consequences.