An AI agent that pays its own way — introducing llmops-agent

The reference agent for the LLMOps.Pro substrate: a local-first Python agent that pays for paywalled MCP tools in sats under budget caps it can't exceed. Ollama-first, API-pluggable, pydantic-ai, MIT.
An AI agent that pays its own way — introducing llmops-agent

For the last two weeks I shipped five MCP servers: a Lightning wallet, a NOSTR client, a marketplace publisher, a hub admin, and a paywall sidecar. That was the plumbing. This is the thing it was plumbing for.

llmops-agent is a local-first Python agent that consumes all five and closes the loop I actually care about: an autonomous agent that spends sats — under caps it can’t exceed.

What it does

Ask it a question. It has 37 tools across the five servers and picks what it needs:

  • read your Lightning balance, list transactions, decode invoices (nwc-mcp)
  • query and publish NOSTR events, resolve profiles, NIP-05 (nostr-ops-mcp)
  • create stalls and products on a Shopstr storefront (marketplace-mcp)
  • pay paywalled MCP tools over NWC, then redeem the result (paywall-mcp)

Then it answers — with a ## Receipts section naming every paid tool it called. No black box.

Sovereign by default, capable on demand

It’s Ollama-first: point LLMOPS_MODEL at a local model and nothing phones home, nothing needs a phone number. Want more capability for a hard task? The same env var switches to anthropic:… or openai:…. The agent code doesn’t change; only the inference location does. That’s the whole sovereignty-vs-capability dial in one variable — you choose per task.

(Honest note: a 37-tool agent loop on a CPU-only box and a small local model is slow. Sovereign local inference wants a GPU. On modest hardware, run a hosted model for the loop and keep the wallet + keys local — which is exactly where the real trust boundary belongs anyway.)

Budget caps it can’t argue with

An agent with a pay_invoice tool is a liability without limits. Three caps sit on top of nwc-mcp’s own wallet caps:

  • per-task — one ask can spend at most N sats
  • per-day — rolling 24h ceiling across all tasks
  • per-tool price — refuse any single paid tool over a threshold, regardless of remaining budget

Every tool call routes through agent-layer middleware: allowlist → read-only refusal of priced tools → forward → on payment_required, enforce price-cap + budget-cap → on payment, record the spend → audit at every step. A paywalled tool that asks more than your cap gets refused, not paid. AGENT_READ_ONLY=true disables all spend in one flag.

Auditable

Every tool call, LLM call, and budget block is one NDJSON line — same shape as the servers’ logs. llmops-agent audit prints it. You verify what happened from the log, not from the model’s summary.

Try it

pipx install llmops-agent
llmops-agent doctor
llmops-agent ask "What's my Lightning wallet balance?"

CLI: ask · doctor · budget · audit · config-print · version. Built on pydantic-ai (no LangChain). 71 tests, ruff + mypy –strict clean. MIT.

Where to get it

Free on PyPI: https://pypi.org/project/llmops-agent/. The Shopstr listing (100k sats) bundles the full setup walkthrough — wiring all five servers + your NWC sub-wallet + model backend — plus a direct support DM with me: https://shopstr.store/marketplace/SOVEREIGN_CITIZENS. The five MCP servers it drives are 50k each on the same storefront, or npx -y on npm.

Built for people who want their AI sovereign, capped, and audited. Zap if you ship something with it.

— LLMOps.Pro · @SOVEREIGN_CITIZENS · sovereigncitizens@getalby.com


Write a comment
No comments yet.