← AI Hacker Daily

Edition

07

picks

Tuesday brought decision layers from OpenAI and Google.

Tuesday brought decision layers from OpenAI and Google. OpenAI's Decisions API went to public beta the same day Google released EmbeddingGemma 2, whose launch post lists a MediaPipe "Decision Task" among its uses, and five days after the Strands Agents team open-sourced a 2B decider. Armin Ronacher's "What is Codemode", also from Tuesday, explains where calls like these belong. Classifier models, he writes, "do not fit well into the workflows of an agent through the typical tools," so Pi exposes them to code the agent writes, "not via regular tools where they would just waste context." His example classifies 100 open GitHub issues inside one script and shows the model only the 12 angriest. Each of today's five picks returns something smaller than prose, and the question is who controls what produced it. The Decisions API returns a probability from a model OpenAI can change, and the thread's best argument for it was procurement. Strands Decider returns the same kind of answer from weights and training data you can keep. EmbeddingGemma 2 returns vectors you will store for years, which makes its Apache license matter more than its benchmarks. Reika is a coding agent whose author measured how much of a small model's trouble was the harness's fault. Jotbus passes a note between agents so neither has to reread the other's session.

01

OpenAI Decisions API — yes/no, pick-one and rubric answers for $0.10 per million input tokens

The Decisions API (public beta since Tuesday, "we expect to GA in the coming weeks") is a separate endpoint, POST /v1/decisions, with one model, gpt-6-luna. You send text, images or both plus named questions of three types. A predicate returns a probability that a condition is true. A choice returns one of your supplied values with a probability for each option and a confidence. A score returns the probability-weighted average of ordered levels, so "how severe is this" can come back as 1.1. Input costs $0.10 per million tokens, with no output, cache-read or cache-write charges; long-context and regional-processing multipliers apply. It supports Zero Data Retention and HIPAA for eligible customers, with US and EU data residency. OpenAI says it is "about 10x faster than the Responses API," and its own guide says to use Structured Outputs instead when you need to generate an object.

The HN thread (326 points, 168 comments) priced it against Jev at once: $0.10 against $0.042 per million input tokens. One commenter's preliminary eval, under 600 calls through OpenRouter, cost 6 cents against Jev's 1.9 cents for the same set and ran slower than Jev, at a 346 ms median and 860 ms 95th percentile; another measured 160 to 175 ms end to end. The reasons to pay more were about vendors, not quality: an existing OpenAI contract skips a three-to-six-month vendor onboarding, and ZDR terms are already signed. It also takes images, which commenters say Jev does not yet. Simon Willison's caution applies to every pick today: "Anyone using a decision model like this is going to have to spin up their own evals."

Reach for it if your company already has OpenAI billing and retention terms, and you need decisions over images. Delete the Responses call whose JSON schema is one enum field plus a "confidence" the model made up. Tradeoffs: there is one hosted model in beta, so your thresholds are tuned to something OpenAI can update, which one commenter gave as a reason against it; the guide publishes no calibration figures; images must be inline base64, not URLs or file IDs; and on early numbers it costs more than Jev and isn't faster.

→ developers.openai.com/api/docs/guides/decisionsdiscussion ↗

02

Strands Decider 2B — an open decision model with its training data, scored against its own noise

Strands Decider (Apache-2.0, 475 stars, 11 commits, 6 contributors, repo created September 29, announced October 1, v21 weights posted Monday, 206 points on HN today) is a 1.9B-parameter decision model built from Qwen3.5-2B with the text-generating head removed. A pointer head of just over a million parameters scores each option against the answer position, and the torso is fine-tuned with a rank-16 LoRA. pip install strands-decider gives you strands-decider ask for one-off choice, yes/no ("noul") and score questions, and strands-decider serve for an HTTP endpoint. Several questions about one text are nearly free, because the text is read once. The weights are on Hugging Face, and the repo includes the training data and scripts.

The README is unusually honest about its benchmark. On JevBench's 231-task public set, v21 gets 176 right (0.762): every easy task, 0.931 of standard ones and 0.550 of hard ones. It then warns that six retrains varied by 3.2 tasks, so "treat a difference under about 10 tasks between two single runs as unresolved." Answers with confidence of 0.9 or more were right about 95% of the time on short tasks the model hadn't seen. The post's example agent asks it two yes/no questions before every tool call: are the arguments grounded in what the user said, and is it too early to call? The agent then asks which city you meant instead of guessing one. Latency is 115 ms median on an RTX 3090 and 153 ms on an M3 Pro. In the thread, CPU was another story: 1.7 seconds in Docker on an M3, about half a second on six cores.

Reach for it if you want the decision layer on your own hardware, or you want to retrain it on your own labels. Delete the system-prompt paragraph pleading with the model not to call tools with guessed arguments. Tradeoffs: 0.55 on hard tasks is not a reasoning model; it's fast on a GPU or Apple silicon but slow on plain CPU; a commenter who tried to convert the LoRA to GGUF for llama.cpp hit an unmappable tensor, so for now you're on its own CLI and server; and as another commenter put it, "Benchmark calibration does not establish reliability on unfamiliar production inputs."

→ github.com/strands-labs/strands-deciderdiscussion ↗

03

EmbeddingGemma 2 — text, code, images, audio and video in one 740M embedding space, Apache-licensed

EmbeddingGemma 2 (Apache 2.0, Google DeepMind, released Tuesday, 350 points on HN) puts text, code, images, video and audio into one vector space. It has 740M parameters, built so you load only what you need: 270M for text, plus optional vision (170M) and audio (300M) encoders. Vectors truncate from 768 dimensions to 512, 256 or 128. The context is 8K tokens, which holds up to 5.5 minutes of audio, 29 images or 58 video frames. Quantized on a Pixel 11 Pro, it needs about 191 MB of RAM for text and 567 MB for everything. MTEB Code rose from 68.76 to 78.68, which is the number for agent code search. It already runs in transformers, sentence-transformers, MLX, vLLM, llama.cpp, Ollama, LM Studio and transformers.js, and GGUF builds were on Hugging Face the same day.

The license is the story, and Simon Willison made the case in the thread. Embeddings get computed by the million and stored, so if a hosted model is retired, "you still need to pay to re-calculate those millions of stored existing vectors." minimaxir's numbers on an M3 Pro were 78 text embeddings a second, 4 images, and 6 thirty-second audio chunks. Two caveats came from commenters: the text benchmarks match the first EmbeddingGemma, and the vectors shrink but the weights don't (it uses Matryoshka training, not MatFormer). The decision trick, embedding the answer options and taking dot products, failed one tester on Google's own example: "Cancel my flight and refund my credit card immediately" scored 0.22 for being about money.

Reach for it if you want local search across screenshots, recordings and code, without a separate model per format. Delete the CLIP-plus-text-embedder pair, and the job that keeps their two vector spaces lined up. Tradeoffs: a text-only corpus probably doesn't need re-embedding, since text scores match v1; a commenter notes it can't be used for OCR; the decision mode is an embedding trick, not a calibrated decider; and audio is encoded in 30-second chunks, so long recordings need their own chunking.

→ huggingface.co/google/embeddinggemma-2discussion ↗

04

Reika — a coding agent built for 8B to 35B local models, with its failures measured

Reika (Apache-2.0, TypeScript, 6 stars, 1,261 commits, one author, created May 15, v0.1.0 on Monday, v0.1.1 today, on Product Hunt today) is a terminal coding agent for local and hosted models, designed around 8B to 35B models at Q2 to Q4 with 16K to 32K windows. Install it with npm i -g @alexwkleung/reika or Homebrew and point it at any OpenAI-compatible server, such as llama.cpp, MLX or vLLM. Old tool output collapses to one-line summaries. Requests stay append-only between shrink events, so the server's prompt cache survives. When the window fills, the model writes its own findings note before older turns are folded away. Blind edits are sent back for a read first, TypeScript edits are typechecked against a pre-edit baseline, and on macOS shell commands run in a kernel sandbox with network denied.

The findings page is the reason to read the repo even if you never run it. One mid-context rewrite reprocessed 8,453 tokens, 7.9 minutes of prefill, where an append in the same session cost 25 tokens and 3.5 seconds. A grep that said "0 matches" for a call it couldn't serve sent a model rewording a correct pattern for five rounds. A loop blamed on a 35B at Q2 turned out to be Reika feeding the model its own tool-call markup. The loop detector measures how similar each round's reasoning is to the last: 0.2 to 0.3 for healthy rounds, 1.00 for stuck loops. That's the small-model problem Ronacher flags as unsolved for Codemode. On his thread, one builder took Codemode back out because a failed inner call failed the whole script, and the small model kept rewriting it.

Reach for it if you run coding models on a laptop and have blamed every spiral on the quantization. Delete the "do not re-read files you have already read" line in your local agent's prompt. Tradeoffs: one author and 6 stars, pre-1.0, with commands that may still change; macOS first, Linux without the sandbox, Windows only maybe under WSL2; below 7B "rarely got far," and at the small end its own README promises "a better experience rather than frontier results"; and the measurements are the author's runs.

→ github.com/alexwkleung/reika

05

Jotbus — an encrypted drop box where Claude Code and Codex leave each other notes

Jotbus (closed source, Show HN on Tuesday) gives agents on different machines, or belonging to different people, a shared place to leave notes and files. npx jotbus creates a 60-minute end-to-end encrypted workspace with no signup, and registers it with the agents you pick: Claude Code, Codex, Cursor, Gemini CLI, Copilot CLI, opencode and seven others, or any MCP client. npx jotbus join jb1_... adds another machine or a colleague. Then you prompt normally: "Use Jotbus to ask Codex to review this branch." Messages are encrypted before they leave, file names included, and the key never reaches Jotbus, which also means "we can't recover a lost key." It's free for 60-minute workspaces and 2 MB files, or $7 a month for persistent ones (25 MB per file, 250 MB total). --no-install prints the setup instead of applying it.

It also installs a hook, so a message that @mentions your agent reaches it "between steps of a task." That is the useful part and the part to think about. A colleague's agent can now put text into your agent's context mid-run, and Jotbus says "the agent decides what to do with the message." In the thread, a commenter who already passes handoffs through a private git repo and a skill asked what Jotbus adds, and the author agreed that in that case it "probably wouldn't buy you much." An E2EE engineer asked how keys are rotated when a member is removed; there was no answer by press time.

Reach for it if you hand work between agents on two machines, or to a teammate's agent, and you have no shared repo set up for it. Delete the clipboard round trip, and the HANDOFF.md committed to a scratch branch. Tradeoffs: it's closed source, so the encryption claims rest on a docs page; key revocation is unanswered; the @mention hook is an input channel into a running agent; and there's no team plan.

→ jotbus.com/discussion ↗

06

Also on the desk: Mistral announced Mistral Large 4 (1,868 points on HN, 1,122 comments), a 1-trillion-parameter model with 49B active, in preview on Mistral's API at $1.36 per million input tokens and $4.18 per million output. The weights are promised "by the end of the month," after red-teaming with cybersecurity partners and state authorities. Like last week's Beam, it isn't installable until they ship.

→

07

Verification notes: star, commit, contributor, creation and release data are from the GitHub API on 2026-10-07; commit and contributor totals use the per_page=1 Link-header last-page count. HN points and comments are from the Algolia API. The Ronacher quotes and the GitHub-issues example are from his 2026-10-06 post; the small-model Codemode report is from HN item 49978333. The Decisions API's endpoint, question types, pricing, retention, image-input rule and beta status are from OpenAI's Decisions guide; the Jev price, eval, latency, procurement and Willison comments are from HN item 49984025. Strands Decider's architecture, CLI, JevBench table, run-to-run caveat, confidence figure and latency are from its README and the 2026-10-01 announcement; the v21 date is from Hugging Face; the CPU, GGUF and calibration comments are from HN item 49987076. EmbeddingGemma 2's parameters, dimensions, context, memory, MTEB Code figures and runtimes are from Google's 2026-10-06 post; the license argument, throughput, unchanged-text, MRL and decision-task comments are from HN item 49980487. Reika's design, install, findings and platform notes are from its README; versions are from GitHub releases and npm. Jotbus's setup, encryption, hook and pricing are from jotbus.com; the git-repo exchange and key-rotation question are from HN item 49978401. Mistral Large 4's figures are from Mistral's announcement. Pipeline health: today's pool held 93 rows, against the ~280 the compose prompt assumes. github:trending returned 9 rows, and Reddit returned zero again, 151 days since its last nonzero day on May 9.

→

One of these,
every weekday.

Free. One-click unsubscribe in every email. No tracking pixels in the email.

2026-10-07 — AI Hacker Daily