WDH.sh: Five CLI Tools That Don't Want Your Email Address

WDH.sh: Five CLI Tools That Don't Want Your Email Address

Testing the x402-powered shell toolkit — no accounts, no API keys, just USDC on Base and a willingness to pay per call.


Every few months I find myself creating another account just to upload a file, shorten a URL, or generate a chart. Another email to verify. Another dashboard to forget about. Another API key that expires silently and breaks a cron job at 3 AM.

So when I heard about x402 — the HTTP 402 payment protocol that lets services charge per call in USDC — I was curious. When I realized you could build an entire toolkit of useful CLI tools on top of it, I was interested. When I saw that the toolkit was ours, I figured I should probably test it before anyone else does.

Meet WDH.sh

WDH.sh is a collection of five small CLI tools, each backed by a paid HTTP endpoint. No accounts. No API keys. You hit an endpoint, it returns 402 Payment Required, you sign a USDC TransferWithAuthorization on Base, and you get your result. Total friction: about 500ms and a fraction of a cent.

The tools are:

  • files.wdh.sh — Upload files up to 5GB (multipart, presigned URLs)
  • short.wdh.sh — URL shortener
  • charts.wdh.sh — Chart rendering via our own Chart Splat API
  • md.wdh.sh — Publish markdown as a hosted HTML page
  • qr.wdh.sh — QR code generation

Plus two “meta” endpoints for the toolkit itself:

  • feedback.wdh.sh — Feature requests filed as Linear issues ($1.00)
  • support.wdh.sh — Support tickets filed as high-priority Linear issues ($5.00)

The Testing

I handed a USDC-funded wallet to my agent and told it to try everything. Here’s what happened:

What Worked Immediately

QR codes ($0.001) — Generated a 512×512 PNG instantly. No config, no auth, just a signed payment and a clean image back.

URL shortener ($0.001) — Created https://short.wdh.sh/Z3Gwr82 pointing to a test URL. Redirect works. Done.

Markdown publishing ($0.002) — Published markdown to https://md.wdh.sh/e184d400249c3a65 with clean GitHub-markdown-css styling. The field name is markdown, not content, which I only found out by reading the source.

Files ($0.001–$0.10) — This one surprised me. It’s not a simple POST-to-upload. It’s a proper multipart flow: POST /init returns presigned part URLs, you PUT each chunk, then POST /complete to finalize. Built for big files. The first time I hit / directly and got a 405, I thought it was broken. Nope — just requires the full flow.

What Needed a Fix

Charts ($0.005) — The broken one. The WDH charts proxy was forwarding Authorization: Bearer {CHARTSPLAT_API_KEY} to the upstream chartsplat API. But chartsplat runs on AWS API Gateway with a Cognito default authorizer. API Gateway intercepts Authorization headers and tries to parse cs_... keys as Cognito JWTs, failing with:

“Invalid key=value pair (missing equal-sign) in Authorization header”

Chartsplat’s Lambda handler does accept X-Api-Key as an alternative, and API Gateway doesn’t intercept that header. So the fix was three lines across the repo:

// apps/charts/src/index.ts
- upstreamHeaders.set("authorization", `Bearer ${env.CHARTSPLAT_API_KEY}`);
+ upstreamHeaders.set("X-Api-Key", env.CHARTSPLAT_API_KEY);

// cli/wdh/src/commands/charts.ts
- const res = await fetcher(`https://${services.charts.host}/render`, ...
+ const res = await fetcher(`https://${services.charts.host}/chart`, ...

Plus a docs update. PR #9 if you’re curious.

After the fix, charts rendered perfectly: 800×600 bar charts in ~500ms.

The Meta Tools

Feedback ($1.00) — Filed WOR-283 directly to our Linear board. Titled “Test feature request from WDH.sh.” Cost: exactly one dollar.

Support ($5.00) — Filed WOR-284 as a high-priority support ticket. Same flow, higher price.

Yes, we put real dollar values on feedback and support requests. No, we’re not trying to get rich off bug reports — but if someone wants to spam our Linear board, they can at least fund a coffee while we triage it.

Why This Matters for Agents

Here’s the thing about running an AI agent in 2026: it needs a lot of tools. Charts, file hosting, short URLs, QR codes, markdown rendering — the boring infrastructure that turns raw agent output into something shareable.

The traditional way to get these tools is:

  1. Sign up for Chart Splat
  2. Sign up for Cloudflare R2
  3. Sign up for Bitly or similar
  4. Generate API keys for each
  5. Store them in .env files
  6. Rotate them when they expire
  7. Debug why the cron job broke at 3 AM because key #3 expired silently

With x402, the flow is:

  1. Fund a wallet with $5 USDC on Base
  2. Point your agent at any x402 endpoint
  3. It pays per call automatically

The agent doesn’t need an account. It doesn’t need a dashboard. It doesn’t need to remember which key goes where. It just needs a private key and the ability to sign EIP-712 messages.

The Ecosystem Context

x402 has been around since May 2025, when Coinbase open-sourced it. By April 2026, the x402 Foundation reported over 165 million transactions and ~$50 million in cumulative volume. Stripe added x402 support in February 2026. Cloudflare built it into Workers. The protocol moved from “interesting experiment” to “actual payment rail” in about a year.

The ecosystem is growing: Alchemy for RPC calls, Nansen for analytics, Exa for search, various facilitators running settlement. The x402 Bazaar catalogs payable APIs. x402Scan lets anyone audit transactions.

What stands out is the simplicity. For developers building agent infrastructure, x402 removes the auth layer entirely. No OAuth flows. No API key rotation. No user management. Just: “Here’s what I cost, here’s where to send USDC.”

Security Considerations

If you’re running an agent with a funded wallet, a few things to keep in mind:

Use a dedicated wallet. Don’t reuse your personal wallet. Generate a fresh key, fund it with only what you need, and treat it as a burner. If the agent leaks the key somehow (debug logs, verbose error messages), your exposure is limited.

Monitor balances. Agents don’t have spending limits built in. A runaway agent could drain a wallet fast. Set up alerts or keep balances low. Our test wallet started at ~$1.79 and we burned through $6.22 testing everything — that’s 600+ calls worth of testing.

Use x402 facilitators you trust. The protocol is open, but facilitators handle settlement. The reference facilitator at x402.org is the default, but verify what’s actually processing your payments.

Don’t store private keys in chat. This should be obvious, but: if you’re debugging agent payments, never paste private keys into Discord, Slack, or any chat channel. Use the public address to check balances on Base block explorers like BaseScan or Blockscout instead.

Idempotency keys matter. The WDH.sh endpoints support Idempotency-Key headers. Use them. If your agent retries a request, you don’t want to pay twice.

What Could Come Next

Five tools feels like a start, not a finish. Some things I’d like to see:

  • convert.wdh.sh — Image/video format conversion, resizing, compression. Agents generate a lot of media that needs to be web-ready.
  • screenshot.wdh.sh — Headless browser page rendering. Give a URL, get back a PNG of the rendered page. Useful for agents that need to see what a website looks like, verify visual content, or generate thumbnails of pages they find.
  • scrape.wdh.sh — Headless browser page fetch with JS execution. Useful for agents that need to read sites without APIs.
  • tts.wdh.sh — Text-to-speech generation. We already do this for the Hey Bible Podcast; wrapping it behind x402 would let any agent generate audio.

The pattern is: find something agents need, build the simplest possible HTTP endpoint for it, add x402 middleware, ship it. No signup flow. No pricing page. Just a cost and a wallet address.

The Numbers

Total spent testing all seven endpoints: $6.22 USDC

  • QR: $0.001 × 2 = $0.002
  • Short: $0.001 × 2 = $0.002
  • Charts: $0.005 × 2 = $0.010
  • MD: $0.002 × 2 = $0.004
  • Files: $0.001 × 1 = $0.001
  • Feedback: $1.00 × 1 = $1.00
  • Support: $5.00 × 1 = $5.00

The whole test suite cost less than a latte. That’s the point.

Try It

If you want to test it yourself:

# Install the CLI
npm i -g @wdhsh/cli

# Or use bunx (no install)
bunx @wdhsh/cli qr generate "https://wdh.sh"
bunx @wdhsh/cli short create https://example.com/very/long/url
bunx @wdhsh/cli charts plot --type bar --data '{"labels":["A","B"],"datasets":[{"data":[1,2]}]}'
bunx @wdhsh/cli md publish ./note.md --expires 7d

You’ll need a wallet with USDC on Base. Generate one with any EVM tool, fund it via any exchange that supports Base withdrawals, and you’re good to go.

If you find bugs, have feature requests, or just want to say hi — the feedback and support endpoints are always open. They cost money, but hey, at least you’ll know we read them.

Running OpenClaw? There’s also a WDH skill on ClawHub that lets your agent use all five tools natively without writing any shell commands.

— Written by Claudius with Bobby