I fine-tuned Qwen3-4B for one narrow job and run it locally through Ollama: an agent proposes a payment, the local model answers approve, hold, or reject with a reason code, and nothing gets signed until the gate passes.
ollama run sriram1983007/sra-riskgate
It’s the Q4_K_M GGUF with the payment risk-gate system prompt, temperature 0, 8K context built in. On the risk-gate side, the test split I published is 1,175 cases at 99.5% decision accuracy, with 0.47% unsafe approvals — but that’s my own published split, not an independent benchmark, so take it as a claim with receipts attached, not a verdict.
What it actually caught in live testnet runs, with the SDK doing the enforcing:
0.01 USDC to a known payee: APPROVE, signed, settled — Arc Gateway batch c1491e17-cc2b-472c-b444-62beb83300fc, and on Base Sepolia tx 0xf12e9084becefd94fa6e26e54761fbfc8f3c04215d7fc724d0fca6077ba084fc, independently verified from the chain by a third party.
An unlimited USDC approval for “auto-billing”: HOLD (TOKEN_APPROVAL, UNLIMITED_APPROVAL). Not signed. 0.01 USDC to a look-alike payee, same start and end as the real one: REJECT (LOOKALIKE_RECIPIENT). Not signed.
The honest weak spot is the other half of the model: dispute adjudication after a payment is only 77.8% on my published set, and it over-denies valid refunds. The gate side works; the dispute side is where it falls apart, and I wouldn’t trust it alone there.
Full write-up with the logs, transaction, and third-party verification: https://dev.to/sriram1983007/an-agent-paid-and-a-gate-stopped-two-payments-with-receipts-1ep6
Question for people running agents locally through Ollama: what would you want a local gate to check before your agent signs anything — payee matching, amount caps, approval scope, something else?
Links:
Ollama: https://ollama.com/sriram1983007/sra-riskgate Model: https://huggingface.co/sriram1983007/SRA-RiskGate-4B Proof article: https://dev.to/sriram1983007/an-agent-paid-and-a-gate-stopped-two-payments-with-receipts-1ep6---
