Skip to content

Hendrik Kühnel

I build tools for working with coding agents: what a session costs, what the model reads, and what it is handed to fix. And hardware, when nobody has written down how the hardware works.

Every number below links to the page that shows how it was measured.

Agent tools

UsageFoundry

A self-hosted dashboard and headless run orchestrator for Claude Code.

runs

Claude Code headlessly against a budget that stops it, each run in its own git worktree and branch, so several agents work one repository at once.

how runs stay out of each other's way

Runs on your machine, in one Docker container. No account, no telemetry, no third-party service. Source-available.

winnow

An instrument for deciding whether pruning a Claude Code session is worth what it costs.

measured

Cache reads bill at 0.1× and writes at 1.25× or 2×, and matching is prefix-ordered — so a prune invalidates everything after the cut. Break-even is T* = 19·(S/D) − 20 further turns.

the break-even formula

Stdlib only. No model call, no network, no MCP server. Three of milestone 2's acceptance criteria are still open.

DaiVELOPER

An MCP server that gives a coding model a code-structure-aware view of a repository instead of a generic filesystem.

measured

Twelve structural questions answered on 3,486 approximate tokens against a scripted native-tool agent's 16,495 — 78.9% fewer, every answer still derivable.

the whole table

A five-run proof of concept, not a product. stdio only, no network at runtime. 95.2% of its margin over the cheapest native sequence is one scenario.

openrepository not published

VisualEdit

Point at what is wrong on a running page; it writes a handoff folder a coding agent can act on.

anchors

React 19 removed _debugSource and Next maps stack frames rather than DOM nodes, so nothing in the browser knows which file rendered an element. A comment it cannot place is reported unlocated rather than aimed at a guess.

what it does

A Chrome extension, version 1.0.0. The Chrome Web Store is the only way it is distributed.

openrepository private

orient

A Claude Code session-start hook that hands a fresh session what git knows and the session is not told.

measured

Read out of the shipped CLI, a session's git context is three commands — status --short, log --oneline -n 5, config user.name — and two branch names. Nothing in it says a merge is in progress or where the branch sits against its fork point, and a detached HEAD arrives as a branch named HEAD.

what the prompt already carries

Version 0.1.0, one POSIX shell script. Nothing was A/B tested: the claim is latency and cost variance, not correctness.

Hardware

picoleaf

Drives Nanoleaf Canvas light squares from a Raspberry Pi Pico W, with no control square attached.

decoded

The Canvas panel bus had no public capture, decode or replacement controller, and no control square on the bench to record one from. It is single-wire half-duplex UART, 8N1 at 1 Mbaud; the trailer is CRC-16/ARC, poly 0x8005 reflected; a session drops unpolled — 476 ms held it, 497 ms did not.

the decode

A prototype instrument, not a product, and not affiliated with Nanoleaf. The bytes nobody has explained are tagged in the repository as unexplained.

Work in progress

Dockrac

A container runtime for Apple silicon Macs that gives memory back to macOS when a container stops using it.

patched

Upstream libkrun hears which pages a guest frees and returns none of them on macOS: it advises MADV_FREE, which does not move the host footprint. Dockrac's patch advises MADV_FREE_REUSABLE, tears the guest's stage-2 mapping down around it, and trims 4 KiB guest ranges to 16 KiB host pages — 3.15 GB back in 7 s, container still running.

the patch and what it returned

Version 0.1. No Docker Engine API, by design. Idle it measures 2.3× Docker Desktop's footprint on the same Mac, which fires a kill criterion its own plan set in advance.

openrepository not published

Contact