Fetching from the wire…
Public story · 2026-09-18 · high
Every 10-minute refresh, a gateway re-encoded tool schemas in a new Go map order, forcing vLLM to re-read about 107,000 cached tokens.
Why now: Detailed in a postmortem published September 15.
Go's randomized map order slowed a coding agent's replies to 26 to 28 seconds, according to a September 15 postmortem. The bug hid inside a layer nobody thought to check. Worst-case wait time reached 514 seconds before anyone fixed it, for a slowdown that looked like a model problem and wasn't.
The postmortem traces the cause to Bifrost, the gateway that decodes MCP tool definitions into Go maps before passing them to the model. Go deliberately randomizes map iteration order by design, so code can't depend on it. Every 10 minutes, when the gateway refreshed its tool schemas, the keys came back in a different order.
One reshuffled schema broke vLLM's shared prefix cache after 12,622 tokens. About 107,000 remaining tokens had to be re-read from scratch instead of pulled from cache.
Sorting schema keys in the chat template with tojson(sort_keys=True), combined with upstream fixes to Bifrost and the mcp-go library, made key order stable across refreshes. Cache hit rate rose from 55% to 95%. Average time to first token dropped to 7.3 seconds, and the worst case fell to 54 seconds.
Teams debugging slow agent responses check the model long before they check whether their gateway serializes tool schemas deterministically, and that order is usually backwards. A KV cache matches prefixes byte for byte, not by meaning, so a nondeterministic serialization layer breaks it with no warning in the logs.
The postmortem doesn't say how long the bug ran before anyone traced it to map order, or whether other Go-based MCP gateways share the exposure.
Each link below shares sources, entities, or timing with this story.
Posted to Show HN on September 4, it's a Rust loop engine that dispatches Claude, Codex, Hermes, Pi or NanoClaw against a codebase on a schedule, each run in a fresh isolated workbench inside a tmux session to prevent state leakage, with watchdog monitoring and REST, MCP and w...
1. Set package cooldown to 72 hours across all your package managers. pnpm: resolution-time=72h, uv: --exclude-newer, npm via .npmrc. This single config change would have protected you from the LiteLLM attack. Willison's survey covers all seven managers. 2. Install Lasso Secur...
Cloudflare's Stephanie Cohen told SaaStr AI 2026 that 50% of HTML requests are already non-human, tracking toward 66% by year-end. (SaaStr) By December, two out of three requests to your marketing site will be a machine. Your CSS is being rendered for nobody. Your hero animati...
tokentab (September 7, 481 stars) computes cost from Claude Code, Codex and Gemini CLI logs. tracecrate (September 10, 105 stars) is a local-first workbench inspecting Claude Code, Codex and OTLP traces and comparing runs with no backend or keys. ai-data-extractor (September 1...
Two merged PRs, five hours apart, and together they change what agent tool approval means on macOS. PR #43624, merged at 00:15Z on September 8, implements macOS user verification using P-256 keys in the Secure Enclave, stored in the Data Protection Keychain, with biometric aut...
Engrim (SQLite memory readable by four harnesses), Kit by Speakeasy (one binary speaking ACP v1/v2, A2A, MCP and Agent Skills), Yurei (MCP browser control for OpenCode, Cursor, Windsurf and Codex CLI) and Crew (agents messaging each other through ~/.crew hooks) all appeared be...
MindPattern daily
One email a day at 7 AM. Sources and a take on every story. Unsubscribe anytime.