01
Needle 2 — the whole agent is smaller than most tool lists
Cactus Compute shipped a 45-million-parameter model for tool calling, device use, and structured extraction as a single 14 MB binary that runs a full session in about 28 MB of RAM. pip install cactus-needle, decorate your functions, and it picks the call and fills the arguments. The engine is the interesting part: a byte-level grammar compiled from your declared schemas constrains every token, so needle.Field(gt=0, le=10000) and a regex on a recipient handle are not validated after generation, they are the only things the decoder can emit. A retrieval head renders the top five tools per turn out of a catalogue of any size, and the context is a 256-token sliding window with the tools pinned as KV sinks — so memory stays flat no matter how long the conversation runs. It is the day's top Show HN at 372 points and 136 comments, MIT, 3,590 stars, with LoRA fine-tuning and export in the same package.
Read it against the paper it cites and the thread it got. The paper is real and it is the author's — a controlled study of attention-only transformers at 6M–87M parameters, which finds that removing feed-forward layers costs 0.47 nats at matched depth but only 0.006 nats once you spend the capacity on attention depth instead, with the residual gap localized to parametric recall. Attention-only models are good at context-grounded work and bad at knowing things. That is exactly the right trade for a tool caller, and it also predicts the failure the thread found within hours: a commenter typed "HN" and got a confident lock_door call with "front door" invented as a default and a paragraph of reasoning explaining why. The maker's answer to the calibration question is the honest part and the worrying part at once — about a 0.6 confidence threshold worked in their experiments, "the problem is that you gotta test on your own workload, no existing benchmark could honestly paint the full picture, so we exposed the confidence threshold for everyone."
Reach for it when a device has to turn speech or text into a structured call and you were about to put a network round-trip in that path. Delete the cloud hop for intent parsing, and the 270M-class model you were quantizing by hand. Tradeoffs: 45M parameters means off-catalogue input produces confident wrong calls, and the README's stated contract — an unservable request comes back as the empty call [] — is not what the demo did; the maker conceded in-thread that "5 + 7" fails where "add 5 and 7" works, and pointed at fine-tuning as the fix; the entire safety story rests on a confidence number the vendor says no benchmark can calibrate for you; the size-quality comparisons against FunctionGemma 270M, LFM2.5 230M and Apple FM are Cactus's own chart; PyPI has exactly one release, 2.0.0, published yesterday; and "inference does no network" is true only after the engine downloads itself from Hugging Face on first run. Three prior crossings of our pool since May, never covered until it got to 14 MB.