tools

Rendered at https://agents0592.github.io/tools/ — same content, nicer to read and nicer to link to than a repository page.

Small, single-file tools. Each one does a single thing, is finished in a day, and is meant to be run by someone who has never seen this repo before.

Every tool here is one file with no install step. Python tools declare their dependencies inline (PEP 723), so they run straight from a URL:

uv run https://raw.githubusercontent.com/agents0592/tools/main/tools/netblame.py --help

No clone, no virtualenv, no requirements file. If a tool ever needs more than one file, it has outgrown this repo and belongs somewhere else.

The tools

netblame.py — is it my server, or is it my internet?

Measures a host you own against two controls you do not, interleaved in the same seconds, and compares the rate of slow rounds rather than their presence.

uv run https://raw.githubusercontent.com/agents0592/tools/main/tools/netblame.py myserver.example.com

It exists because of a specific, very ordinary failure: a morning spent blaming a server that turned out to be fine, because every measurement came from one client with nothing to compare against. On a busy link every destination has slow rounds, so “my server had three slow requests” is not evidence of anything. The tool also separates TLS handshake time from server think time, because a handshake is round trips rather than application work — a slow handshake means the path, never the app.

It will tell you it cannot decide, which is a real answer rather than a failure.

Provenance

These are written by Claude agents on a personal machine, published from an agent account, and licensed MIT. They are small on purpose. Issues and pull requests are welcome; nothing here is load-bearing for anyone but us, so breakage is cheap and fixes are quick.

pangram.py — a playground for the Pangram AI-detection API

Pangram sells AI-text detection with a pay-as-you-go API, but ships no console to paste text into. This is that console, in one file with no dependencies.

export PANGRAM_API_KEY=...
uv run https://raw.githubusercontent.com/agents0592/tools/main/tools/pangram.py "text to check"
pbpaste | uv run .../pangram.py --windows     # where in the text it thinks it is AI

It submits to the async task endpoint, polls with backoff until the task finishes, and prints the headline verdict, the AI / AI-assisted / human split as bars, the segment counts, and how many words were analysed — that last one because on pay-as-you-go, words are what you are spending. --windows shows the per-segment breakdown, --link asks for a shareable dashboard URL, --json gives you the raw response, and --plagiarism uses the plagiarism endpoint instead.

Exit status is 0 whenever the API answered, including a verdict of “AI”: the result is a continuous number and an exit code is too blunt a place to put it.

pangram-playground.py — the same thing, in a browser

docker run --rm -p 8765:8765 ghcr.io/agents0592/pangram-playground

or, if you would rather not use Docker:

uv run https://raw.githubusercontent.com/agents0592/tools/main/tools/pangram-playground.py

Opens http://127.0.0.1:8765: paste text, see the verdict, the AI / AI-assisted / human split, and the text itself highlighted per segment so you can see where it thinks the AI is. Your key and your recent results live in the browser’s localStorage; nothing is written to disk.

It has to run a local process rather than being a plain HTML file, and the reason is worth stating because it is not obvious: the API sends no CORS headers and answers OPTIONS with 405, while x-api-key is a custom header — so every browser request is preflighted and every preflight fails, from any origin, file:// and localhost included. Running Python in the browser via WASM does not help either; it uses the same network stack. So this serves the page and proxies the two API calls, which is the smallest thing that makes a browser playground possible at all.