DEV Community

rambo
rambo

Posted on

pip install zambo: the official Python client for agents that show their work

Part 18 of the Verifiable Receipts for AI-Agent Work series. Previous part: Catch Your Agent Inventing Tool Results (Before Your Users Do).

You don't need another API key. You don't need another SDK that takes an afternoon to wire up.

pip install zambo
Enter fullscreen mode Exit fullscreen mode

That's it. That's the whole install. As of this morning, the official Zambo Python client is live on PyPI — pypi.org/project/zambo — version 1.0.0, CLI plus library, mirroring the npm client. One command and your Python agent gets hands: 100+ tools behind one endpoint, and a verifiable receipt for every call it makes.

I know because I installed it ten minutes before writing this sentence. No venv drama, no missing wheels, no "works on my machine" — just this:

python3 -m venv /tmp/zambo-venv
/tmp/zambo-venv/bin/pip install zambo
Enter fullscreen mode Exit fullscreen mode
Successfully installed zambo-1.0.0 requests-2.32.5
Enter fullscreen mode Exit fullscreen mode

Fresh environment, first try, no config. The only dependency is requests.

The first call

Forget the catalog for a second. The whole point of the client is that you don't have to know which tool fits — you describe the goal and it routes:

zambo "what's the price of BTC right now?"
Enter fullscreen mode Exit fullscreen mode

Here's the actual output from my terminal, timestamped this morning:

BTC · $81,260.00 USD
▲ 4.21% (24h) · Market cap: $1632.23B

Live price via CoinGecko · Sat, 19 Sep 2026 11:50:48 GMT

🔗 receipt cdfb9e06-bb92-4026-a5e9-63fb99ebc2e3 · audit: https://zambo.dev/run/cdfb9e06-bb92-4026-a5e9-63fb99ebc2e3
   verify: zambo verify cdfb9e06-bb92-4026-a5e9-63fb99ebc2e3
Enter fullscreen mode Exit fullscreen mode

Look at the shape of that. The answer is on top — a live number, with its source and timestamp right there. And below it, the thing this whole series is about: a receipt. A UUID, an audit URL, and a command to verify it yourself.

Reading the receipt

If you've been following this series, you know the drill by now: the receipt is the interesting part. It proves that this specific execution happened and binds the result bytes to it. It doesn't prove the price was "correct" — it proves Zambo executed the call, returned these exact bytes, and stamped them. Receipts prove execution integrity, not correctness. That's the honest scope line, and it's the whole reason these things are worth anything: a binding claim you can check, not a marketing claim you have to believe.

So check it. I did:

zambo verify cdfb9e06-bb92-4026-a5e9-63fb99ebc2e3
Enter fullscreen mode Exit fullscreen mode
✓ receipt verified on zambo.dev
  id:      cdfb9e06-bb92-4026-a5e9-63fb99ebc2e3
  source:  CoinGecko
  sha256:  34fcd01569c2299e90c252a4d432c4bb5d54f0fe0f768b547723350a9c3209d8
  checked: 2026-09-19T11:50:51.396Z
  audit:   https://zambo.dev/run/cdfb9e06-bb92-4026-a5e9-63fb99ebc2e3
Enter fullscreen mode Exit fullscreen mode

That's the loop: execute, get a receipt, verify the receipt independently of the thing that executed. The sha256 binds the result — if anyone alters a single byte of the claimed result, the hash won't match and the receipt fails. That's not a trust-me, that's a check-me.

The full command set

The goal-routing (zambo "<goal>") is the headline, but the client exposes the whole surface:

# Call a specific tool directly
zambo call live_price '{"symbol":"BTC"}'

# Search the 100+ tool catalog
zambo search 'generate QR code'

# List exposed tools
zambo list

# Verify any receipt
zambo verify <receipt-uuid>

# Teach your agents about Zambo (writes the Zambo section
# into your AGENTS.md / CLAUDE.md / .muserules)
zambo init
Enter fullscreen mode Exit fullscreen mode

zambo init is the one that compounds: it teaches your project's agent instruction file about Zambo, so any agent working in that repo discovers the receipt workflow on its own. That one's aimed at autopilot setups — your agents find the tools and the receipts without you narrating.

The library path

CLI is for humans. The library is for your agents:

import zambo

out = zambo.call_tool("live_price", {"symbol": "BTC"})
print(out["text"], out["receipt"]["id"])

v = zambo.verify_receipt(out["receipt"]["id"])
print(v["verified"], v["sha256"])
Enter fullscreen mode Exit fullscreen mode

I ran exactly this against the live endpoint this morning and got the same shape back — text, receipt id, audit URL — receipt c3839251-bc33-403a-8d9d-d8bf3c7d441e. Drop this into an agent loop and every tool call your agent makes now comes home with proof attached. Your agent can't invent a tool result (Part 17's whole subject) because every result arrives with a receipt you can verify without trusting the agent.

Where it fits

If you're running Node, the same surface ships as zambo-mcp@1.0.1 on npm — npmjs.com/package/zambo-mcp. Same commands, same receipts, same verify flow. The Python client closes the gap for the other half of the agent world: the LangChain crowd, the CrewAI crowd, the plain-Python-script crowd. The receipts are identical across both — a receipt from the Python client verifies the same way on the same endpoint.

The deal, honestly

Free: 20 calls per tool per day. No account, no API key, no card. The first call above cost me exactly nothing. When you need more, there's a $1.49 Day Pass on zambo.dev — but it's never required to start, and the receipts are identical either way.

If you want to feel the whole loop in your browser before you install anything, take the Receipt Test: run a free call, get a receipt, verify it yourself. Then come back and pip install zambo and put receipts in your agent's loop where they'll actually do some good.

This was Part 18 of Verifiable Receipts for AI-Agent Work. Part 16 built a receipt gateway in 28 lines of Python; Part 17 taught you to catch your agent inventing tool results. Part 18 is the official client — the gateway, pre-built, on PyPI.

Top comments (0)