v0.6.0 — probe-research on PyPI, and the client can reach the API again
First release published to PyPI — and the first that can actually reach most of the API.
Install
uv tool install --force probe-researchUpgrading from a build installed before 2026-07-16? Read this first. Older installs shipped under a different distribution name and own the same probe executable. uv keeps both tools registered, so a plain install leaves the old build still answering probe — silently, while uv tool list shows the new version sitting right there. Clear it out first (the order matters — doing it afterwards deletes the shared binary out from under the new install):
uv tool uninstall probe-agent 2>/dev/null || true # no-op if you never had it
uv tool install --force probe-research
probe --version # expect 0.6.0The distribution name changed
The package is probe-research on PyPI. It previously declared itself probe-agent and was only ever installed from a git URL — but probe-agent on PyPI is an unrelated project by another author, so pip install probe-agent fetches a stranger's package. That name was never ours; this release claims one that is.
import probe and the probe CLI binary are unchanged. Only the distribution name moved.
Installs are also no longer pinned to a moving branch — @main meant two people running the same command got different builds and neither could say which, which is a poor look for a tool whose pitch is reproducibility.
New — the client can reach the API
42 → 60 of 103 backend operations are now reachable (the rest are deliberately not client surface, or tracked as pending). Previously the SDK/CLI had drifted: codegen tracked the backend while the hand-written client stayed blind, and nothing failed to signal it.
probe token list | create | revoke— minting goes through the browser device flow, because a token that could mint more tokens would defeat the point.probe group create | list | get | set, andprobe run start --group— closes a dead end where a run could accept a group id no client could obtain.probe experiment archive | restore | edgesprobe run delete | restore | gc | series | metricsprobe span list | getprobe artifact delete | gc-uploads
Fixed
- Every CLI usage error printed a traceback instead of returning an exit code. typer vendored click into
typer._click, so theexcept click.ClickExceptionhandler silently stopped matching anything typer raises — an unpinned dependency bump was enough, with no test to catch it. research_trace_filecalled an endpoint that never existed, 404ing into a fallback on every call. It now reports its missing capability honestly without the round trip.
Under the hood
A parity test now diffs the OpenAPI schema against the client's real call sites (resolved from the AST, not grepped) and fails when a backend route has no way to be called. Wired into make regen and CI — which this repo did not have before, and which is precisely why the drift went unnoticed.