If an LLM agent is going to move your USDC, give it something that can say no.quant-transfer-guard (QTG) is an open-source control plane that sits between your trading strategy — or your agent — and an actual wire transfer. It compiles signed transfer requests into approval-gated, audit-logged execution graphs across CEX accounts and EVM chains. Self-hosted. Your KMS, your DB, your callbacks. No hosted control plane in the path.
Three promises
QTG is organized around three orthogonal product promises. Everything else is in service of one of them.No funds without approval
Every transfer compiles to a typed DAG. Movements stop at
PENDING_APPROVAL unless an explicit, template-scoped auto-approve policy matches. The destination address is re-checked against the allowlist at dispatch time — revoking an address actually stops the next withdrawal.Keys like a company
Default EVM signer is AWS KMS in your account — QTG holds only a key ID, never plaintext private keys. Signer rotation is a first-class flow with audit table + multi-signer bootstrap (lifecycle administration is a Pro surface). 1Password-backed local signer for dev.
Agentic-safe by design
3-role RBAC (admin / operator / agent). Agent keys are bound to a scoped agent authority — they can propose templates inside that binding, but cannot approve, rotate signers, or change allowlists. MCP server + agent CLI make this usable from Claude Desktop / Cursor / Agent SDK.
Operational discipline
Exchange API drift
Upbit, Bybit, OKX return undocumented state strings. Every adapter is fixture-first and case-insensitive — parser changes ship with a real-response fixture or they don’t ship.
Audit by default
Every state transition is appended to
audit_events. Every outbound callback is HMAC v3 signed with nonce replay defense and dispatched from a durable outbox.Local-first
No telemetry. No hosted control plane. Self-hosted: your KMS, your DB, your callbacks.
Quickstart that just works
EVM RPC endpoints for ~24 chains pre-populated via PublicNode defaults.
cp .env.example .env and the dev quickstart works without hunting for RPC URLs. See reference/rpc-defaults.Supported venues
CEX Lane
3-node pipeline:withdraw → withdraw_observe → deposit_observe via exchange API.
Pro adds Bithumb and Backpack (CEX) plus Lighter (DEX, on-chain lane) under the commercial license.
Bridge Lane
On-chain KMS-signed execution via smart contract or protocol API.
The table describes product availability, not a claim of route-specific live proof.
CCIP is a Free lane; Stargate requires the private commercial implementation and
its configured-route evidence before operation.
Using QTG from an LLM agent
QTG ships three entry points so an LLM agent can drive the control plane without shell access:qtg-mcp does a boot-time whoami check and refuses to start if the key role isn’t agent or the env namespace doesn’t match the server-reported namespace — so a misconfigured key won’t quietly land in Claude Desktop.
Full reference: CLI & MCP. For delegated USDC spend by the agent’s session, see Agent Wallet Top-Up.
Quick start
Local setup
Get QTG running locally with Docker Compose
First movement
Create and execute your first dry-run movement
Template cookbook
Design DAG templates for your transfer routes
Going live
Production setup with real credentials and KMS
What this is not
- Not a custody solution. Hold the keys yourself; QTG signs through your KMS.
- Not a trading engine. Hummingbot, NautilusTrader, your own bot — they decide what to send. QTG decides whether to let it.
- Not a hosted SaaS. There is no JephaLabs control plane on the runtime path.
- Not a defense against a compromised host. QTG’s guards run inside its own process. Read Security Tradeoffs for where that line falls before you point it at real funds.