← AI Hacker Daily

Edition

06

picks

A check is only as good as the property you can write down.

A check is only as good as the property you can write down. Hillel Wayne makes that argument in "What TLA+ can and can't check" (223 points on Wednesday), written against the new idea that formal methods will make agent-written code safe: "to verify a property, we need to have a property to verify." His examples of what TLA+ cannot express include "pressing delete and then undo gives you back the original state" and "the 95%ile response time is 5ms". The same question works for tools far less formal than TLA+, so today's five picks are sorted by what each one checks and where it says the check stops. Perspica checks that a renamed function has no callers left behind. CodeDiff measures itself against 818 diffs a human marked byte by byte, and says it has not met its own goal. Wn's README says that in four controlled trials it did not make agents cheaper. Strata won't run a query that adds up a metric at the wrong grain. Magnitude's "2x faster than llama.cpp" comes from one benchmark task, and a commenter's own machine disagreed.

01

Perspica — reviews a diff by what changed, and finds the callers a rename missed

Perspica (MIT, Rust, 24 stars, 7 commits, one author, created Wednesday, v0.1.1 the same night) reads a diff the way a careful reviewer would. It parses both sides with tree-sitter, matches functions and methods across the two versions, and labels each change: rename, signature change, move, extraction, or a real logic change. Formatting, comment-only edits, rename-only lines, unchanged moves and generated files are folded away. Then it reports three things a line diff hides: a renamed or removed name that is still used somewhere in the repository, callers of a changed function that were not updated, and code the change left unused. It also gives a reading order, from entry points down to the changed functions they call, and shows which of them the changed tests actually reach. All of that runs locally without a model, in a few hundred milliseconds on a typical PR. cargo install perspica, then perspica on a branch or perspica --pr 123 --web.

The LLM pass is optional and kept apart from the rest. With Claude Code, an API key or Ollama, it groups changes by intent and rates risk, labeled in the viewer as less certain than what the parser found. If the change came from your own Claude Code or Codex session, it reads your prompts and marks each group as "asked" or "agent's call", and every "asked" quote is checked word for word against the prompts. In the Show HN thread, a commenter asked how often matching renamed-and-edited functions across files goes wrong. The author's reply was flagged dead, and another user reposted it. Within a file, two versions are paired when they are 75% the same code. Across files, they must be identical, or keep the same name and be at least 60% identical. A function that was renamed, edited and moved is never matched. Every label sits on top of the line diff rather than replacing it, so a wrong label cannot hide a change.

Reach for it if you merge large agent-written PRs and have caught yourself approving them without reading. Delete the grep -rn oldName you run after every rename. Tradeoffs: semantic analysis covers TypeScript, JavaScript, Python, Rust, Go, Java, Scala and C, and everything else is a plain line diff; the author calls the parser analysis "deliberately conservative" and admits the similarity thresholds "are a bit arbitrary"; the repo is one day old, from one author, with 14 HN points; and it reads ~/.claude/projects and ~/.codex/sessions by default for your own commits, which --no-sessions turns off.

→ github.com/sshah03/perspicadiscussion ↗

02

CodeDiff — a syntax-aware diff scored against 818 hand-marked changes, short of its own goal

CodeDiff (AGPL-3.0, Rust, 43 stars, 1,221 commits, one author, created October 2025, v0.1.1 on Sunday) is a diff tool that parses 24 languages with tree-sitter. It highlights only the part of a line that changed (sum(numbers), not the whole assignment), shows moved code as moved, and falls back to a modified Myers line diff for anything it cannot parse. It runs as an interactive TUI, as a git difftool backend (codediff git configure sets it up), through GIT_EXTERNAL_DIFF for plain git diff, under jj, and with --mode json for editors. There are prebuilt binaries, Homebrew, a signed apt repository, Nix, and extensions for VS Code and Neovim.

The README defines "accurate" before it reports a number. The goal is to match a human's reading of a change, and the test is 818 fixtures in which every byte of both files was labeled by hand with what happened to it. The targets are 90% of fixtures with zero wrong bytes and 99% with at most 1% wrong, and the README says "Neither is met yet." The current results are 70.4% and 89.0% with --minimal highlighting, and 65.9% and 85.5% with --full. The README also says where the remaining error comes from: most of it is in the rules for what to highlight, not in matching code between versions. Robustness is measured separately. Over the last 50 commits of about 7,500 repositories from Gentoo's package list, 442,322 of 442,530 file pairs (99.95%) finished within 120 seconds and 6 GB. Most of the 112 that ran out of memory were generated or embedded files. The median diff takes 7.6 ms. In the Show HN thread (7 points), the only comment pointed out that Difftastic covers similar ground. The author's own post adds that the underlying tree diff is perfect 89% of the time, and that deciding what to highlight "is not an objective thing".

Reach for it if git diff marks a whole line red for a one-token rename and you have stopped trusting it on refactors. Delete --word-diff from your git aliases. Tradeoffs: AGPL-3.0, with a paid commercial license through GitHub Sponsors for companies that can't use AGPL; it diffs one file pair at a time, so moves across files are still a v1.0 goal; VS Code can't yet replace its built-in diff view with an extension; the first cargo install compiles every grammar and takes several minutes; outside contributions are not accepted for now; and the README says the project is built with substantial help from Claude Code.

→ github.com/ivankovic/codediff

03

Wn — names the three files a bug report probably touches, and reports that it didn't make agents cheaper

Wn (Apache-2.0 code, Rust, 4 stars, 194 commits, one author, created Tuesday, v0.3.0 on Wednesday) answers "where is X?" in plain English with the two or three files to open. wn init indexes a repository. wn ask "where are gitignore rules matched against paths" returns ranked files with scores, and says "no confident hint" when nothing clears a calibrated threshold. The model is EmbeddingGemma-300M fine-tuned on about 1.1 million pairs of a task and the files that its real fix changed. A per-repo adapter, fitted on your own commit history in seconds, adds a little more. wn setup adds hints to Claude Code, Codex and Cursor, and wn mcp serves other clients. wn bench replays your past commits to show how well it works on your code.

The README's numbers come in two kinds, and it keeps them apart. On ContextBench's 500-task subset, the fine-tuned model puts a file the real fix changed in the top three 76% of the time, or 81% with the adapter, against 37% for BM25 and 46% for the untrained base model. On 102 real closed issues, the title alone beat grepping the issue's identifiers, 49% to 31%, and with the full issue body grep came out ahead. The second kind of number is the one an agent user cares about. The agent trial gave the same agent the same tasks with and without hints, and set a pass mark in advance: 15% lower cost per resolved task without losing more than 2 points of success rate. It ran four controlled trials, and none showed lower cost or higher success. On the 50-task SWE-bench Pro pilot, the agent without hints solved 32 tasks at $0.133 per resolved task, and the agent with hints solved 31 or 32 at $0.139 to $0.149. Even giving the agent the files the real fix touched "barely helped". The README's advice is to "use it as navigation, not a cost-saver."

Reach for it if you join unfamiliar repositories often and the first hour is spent finding where things live. Delete the "where is the code that..." message to the teammate who wrote it. Tradeoffs: macOS on Apple silicon and Linux with glibc 2.35 or later only, with Windows and Intel Macs not supported yet; a 1.2 GB model download, distributed under Gemma's terms of use, not Apache-2.0; for exact names and strings, rg is still the right tool; the recommended install pipes a script into sh; and the Show HN post has 6 points and no comments, so there are no outside reports.

→ github.com/andreylukin/where-next

04

Strata — a semantic layer that refuses a query that would add up a metric at the wrong grain

Strata (closed source, free plan, early beta) is a semantic layer, dashboards, an API and an MCP server, run from one Docker image, built by an engineer who spent four years on self-service analytics at Netflix. The model is two kinds of YAML file plus a naming rule: only one thing called Revenue can exist in a project. Facts that share a conformed key, such as Date, can be combined automatically. Each fact is aggregated to the shared grain first, then joined, never fact to fact, so a blended result cannot double count. A query that crosses grains in a way the model can't support is refused before it runs. strata audit checks the YAML against the warehouse, and the project folder ships with an AGENTS.md so Claude Code or Codex can draft the model for you. Queries are routed to the fastest engine that holds the data, such as ClickHouse or Druid for recent partitions, and fall back to the warehouse otherwise.

In the Show HN thread (21 points, 14 comments), a commenter questioned whether semantic layers help agents at all, noting that Snowflake's analyst agent sends over 90% of queries to plain SQL rather than its own semantic dialect. The author's answer is the case for the product: the semantic layer's value for agents is that it "rejects plausible queries that are invalid," because an agent writing SQL is inventive in ways a business user won't notice. The author also conceded that it is "definitely not useful for developers/data engineers anymore," and the pricing page agrees: "If all you want is another query tool for SQL-fluent analysts, Strata is not it."

Reach for it if business users or agents ask your warehouse questions directly, and you have shipped a dashboard where two joined facts quietly doubled a total. Delete the Slack message explaining why the Revenue tile disagrees with finance. Tradeoffs: not open source, and the free plan allows one developer, 25 users and two data sources per project; the CLI needs Ruby 3.4.4 or later; it can only refuse what the model encodes, so a measure defined wrong is still served with confidence; a commenter found many 404s in the docs; and the author is considering a hosted semantic-layer API, so the product's shape may change.

→ strata.do/discussion ↗

05

Magnitude — a local inference engine that tunes its kernels on your device, with a speed claim from one task

Magnitude (Apache-2.0, Rust, 6,010 stars, 1,061 commits, 10 contributors, YC S25, CLI 0.2.3 today) is a desktop app and CLI that runs open-weight models locally and connects them to Pi, OpenCode, Codex, Claude Code, Cline and others, or to anything else through an OpenAI-compatible API. Its kernels are written with tunable parameters, and a one-time tuning pass of about a minute fits them to your hardware when you download a model. Memory is reserved only for the weights up front and grows with your sessions, then is freed when agents stop. Concurrent sessions share prefix caches. The README claims 27% less memory per agent, and the founders say the KV cache is stored as 8-bit keys and 4-bit values. It runs on Apple Silicon, NVIDIA, AMD, or CPU only, for the model families in its catalog.

The headline number is "up to 2x faster than llama.cpp", which the README breaks down as 92% faster decode on Metal and 19% on CUDA. In the Launch HN thread (180 points, 88 comments), a commenter asked for the method. The answer was one task: Qwen 3.6 35B A3B is given Moby Dick, up to 64k tokens of context, and asked to repeat the last section, with llama.cpp at similar settings and no speculative decoding. Another commenter tried it on a 5070 Ti with Gemma 4 12B and found llama.cpp 20–30% faster at decode. Magnitude also detected their two GPUs as four, and multi-GPU support is not there yet. A third commenter noted that beating llama.cpp "is a low bar" on a Mac, where engines such as oMLX and ds4 are already faster. The founders say MLX comparisons are coming.

Reach for it if you run local models behind a coding agent on a Mac and want one app to manage downloads, tuning and connections. Delete the llama-server command line you copied from a forum and never understood. Tradeoffs: the 2x is decode on Metal for one model on one task, so benchmark your own model on your own hardware before you switch; no multi-GPU; only the families in its catalog get the tuned kernels; the founders plan to make money from a paid inference cloud for hybrid local and hosted work, so expect the app to steer you toward it eventually.

→ github.com/magnitudedev/magnitudediscussion ↗

06

Verification notes: star, commit, contributor and release data are from the GitHub API on 2026-10-01; commit totals use the per_page=1 Link-header last-page count, and Magnitude's contributor count excludes one bot. The Wayne quotes are from his newsletter post of 2026-09-30. Perspica's features, languages and privacy behavior are from its README; the matching thresholds are the author's reply, reposted by another user, in HN item 49914005. CodeDiff's accuracy, robustness and speed figures are from its README, measured by the author; the 89% tree-diff figure and the Difftastic comment are from HN item 49891989. Wn's retrieval and agent-trial results are from its README and benchmarks/agent-trial.md, all run by the author; its README still says v0.1.0, and the release list shows v0.3.0. Strata's model, refusal behavior and plan limits are from strata.do, its try page and its pricing page; the Snowflake objection, the author's replies and the 404 report are from HN item 49909913. Magnitude's features and benchmark chart are from its README; the benchmark method, the 5070 Ti report, the multi-GPU status, tuning time and business model are from HN item 49911995. HN points are from the Algolia API (items 49909056, 49914005, 49891989, 49908132, 49909913, 49911995). Pipeline health: today's pool held 96 rows, against the ~280 the compose prompt assumes. github:trending returned 13 rows after zero yesterday, and Reddit returned zero again, 145 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.