> ## Documentation Index
> Fetch the complete documentation index at: https://jephalabs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Introduction

> Movement orchestration for safe cross-exchange and cross-chain asset transfers

> 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.

```mermaid theme={null}
flowchart LR
    A["Signal\n(HMAC)"] --> B["Compile\n(DAG plan + hash)"]
    B --> C["Approve\n(policy or manual)"]
    C --> D["Dispatch\n(per-venue executor)"]
    D --> E["Observe\n(poll + recover)"]
    E --> F["Callback\n(HMAC v3 + nonce)"]
```

## Three promises

QTG is organized around three orthogonal product promises. Everything else is in service of one of them.

<CardGroup cols={3}>
  <Card title="No funds without approval" icon="shield-halved">
    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.
  </Card>

  <Card title="Keys like a company" icon="key">
    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.
  </Card>

  <Card title="Agentic-safe by design" icon="robot">
    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.
  </Card>
</CardGroup>

### Operational discipline

<CardGroup cols={2}>
  <Card title="Exchange API drift" icon="arrows-rotate">
    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.
  </Card>

  <Card title="Audit by default" icon="clipboard-check">
    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.
  </Card>

  <Card title="Local-first" icon="server">
    No telemetry. No hosted control plane. Self-hosted: your KMS, your DB, your callbacks.
  </Card>

  <Card title="Quickstart that just works" icon="bolt">
    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`](/reference/rpc-defaults).
  </Card>
</CardGroup>

## Supported venues

### CEX Lane

3-node pipeline: `withdraw → withdraw_observe → deposit_observe` via exchange API.

| Venue    | Tier | Status  | Notes                                                                                                |
| -------- | ---- | ------- | ---------------------------------------------------------------------------------------------------- |
| Upbit    | Free | Live    | KR venue, beneficiary fields required                                                                |
| Binance  | Free | Live    | Master-signed sub balance + capital transfers                                                        |
| Coinbase | Free | Live    | Advanced Trade API, address-scoped deposit observe                                                   |
| Bybit    | Free | Live    | Unified Trading → Funding internal transfer required                                                 |
| OKX      | Free | Live    | KR travel-rule (`walletType=exchange` + `exchId`) + private wallet path, 2 mainnet drills 2026-05-28 |
| Bithumb  | Pro  | Live    | KR arb gate adapter                                                                                  |
| Backpack | Pro  | No-live | ED25519 auth; deposit + withdrawal                                                                   |

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.

| Transport      | Tier | Status    | Notes                                                                         |
| -------------- | ---- | --------- | ----------------------------------------------------------------------------- |
| CCTP           | Free | Live      | V2 mainnet Base↔Arb, KMS-signed burn + attestation + mint                     |
| CCIP           | Free | Available | Chainlink CCIP message lane; route-specific evidence is operator-controlled   |
| Circle Gateway | Free | Live      | Balance + movement tests                                                      |
| USDT0          | Free | No-live   | Native LayerZero V2 OFT lane (KMS-signed)                                     |
| Hyperliquid    | Free | Live      | CCTP-backed mainnet topup / drain via KMS                                     |
| Stargate       | Pro  | Available | Commercial bridge integration; route-specific evidence is operator-controlled |

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:

| Binary      | Surface                             | Where it fits                       |
| ----------- | ----------------------------------- | ----------------------------------- |
| `qtg`       | full role-aware CLI (agent + admin) | operator shell                      |
| `qtg-agent` | agent-only subset (admin hidden)    | LLM agent, CI, autopilot            |
| `qtg-mcp`   | stdio MCP server (8 tools)          | Claude Desktop / Cursor / Agent SDK |

```mermaid theme={null}
flowchart TD
    A["Agent\n(qtg-mcp / qtg-agent, RBAC role: agent)"] -->|"POST /v3/agent-authorities/{key}/template-proposals"| B[Proposal]
    B --> C{"Operator\n(RBAC role: operator)"}
    C -->|approve| D["Dispatch → on-chain / CEX submit"]
    C -->|reject| E[Rejected]
    D --> F[audit_events]
```

`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](/reference/cli). For delegated USDC spend by the agent's session, see [Agent Wallet Top-Up](/guide/agent-wallet).

## Quick start

<CardGroup cols={2}>
  <Card title="Local setup" icon="laptop" href="/quickstart/01-local-setup">
    Get QTG running locally with Docker Compose
  </Card>

  <Card title="First movement" icon="paper-plane" href="/quickstart/02-first-movement">
    Create and execute your first dry-run movement
  </Card>

  <Card title="Template cookbook" icon="book" href="/quickstart/03-template-cookbook">
    Design DAG templates for your transfer routes
  </Card>

  <Card title="Going live" icon="rocket" href="/quickstart/04-going-live">
    Production setup with real credentials and KMS
  </Card>
</CardGroup>

## 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](/security-tradeoffs) for where that line falls before you point it at real funds.

See [Where QTG fits](/concepts/overview#where-qtg-fits) for how this compares to Fireblocks, Turnkey, Coinbase, and raw KMS — and why "deep control, non-custodial" is its own quadrant.

## License

The OSS distribution is **AGPL-3.0-or-later**. The Pro adapters (Bithumb / Backpack / Lighter / Stargate) require the **private commercial implementation** under **LicenseRef-JephaLabs-Commercial** and are excluded from the OSS distribution.
