Security and custody

Public routing stays unsigned. Self-hosted execution stays local, owner-gated, bounded, and receipt-verified. This is what each of those words means in practice.

Oracle in the terminal: you ask it to prepare a swap, and when it retries the identical prepare in the same turn, Oracle refuses the duplicate, so nothing is built twice.

What you approve

Review amounts, the route and exact addresses before signing. Your wallet or local signer enforces authorization. The illustration below previews a future approval-card design.

oracle chain base
   ORACLE  ·  LOCAL SIGNER READY  ·  latest  ·  Claude Opus 5.5

   you
   Swap 1,250 USDC to ETH on Base                                                                    

╭─ oracle ─────────────────────────────────────────────────────────────────────────────────────────────╮
│  Prepared. Review the approval below.                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────╯

╭─ Approval required ────────────────────────────────────────── expires in 3m 00s ─╮
│                                                                                  │
│  Swap         1,250.00 USDC                                                      │
│  Receive      0.4012 ETH                                                         │
│               min 0.3992 ETH  ·  impact 0.03%  ·  slippage 0.50%                 │
│  ──────────────────────────────────────────────────────────────────────────────  │
│  Risk         ▲ Medium risk                                                      │
│               Requested allowance: 1,250.00 USDC.                                │
│               • New spender approval for USDC                                    │
│                                                                                  │
│  Allowance    1,250.00 USDC                                                      │
│  Spender      Uniswap v3 SwapRouter02                                            │
│               0x2626 664c 2603 336E 57B2 71c5 C0b2 6F42 1741 e481                │
│                                                                                  │
│  Chain        Base  chain id 8453                                                │
│  To           Uniswap v3 SwapRouter02                                            │
│               0x2626 664c 2603 336E 57B2 71c5 C0b2 6F42 1741 e481                │
│                                                                                  │
│  Signer       0x8ba1 f109 551b D432 8030 1264 5Ac1 36dd d64D BA72                │
│  Preview id   0x9f3c 1a7e 5b2d 4c6f                                              │
│                                                                                  │
│  y approve     n reject     d details                                            │
│                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────╯

╭──────────────────────────────────────────────────────────────────────────────────────────────────────╮
│  ORACLE ›   Message Oracle.  / for commands, ? for shortcuts                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────╯
   ctx ━─────── 18K/1M  Claude Opus 5.5  chain base                                            ? more   
   you
   Swap 1,250 USDC to ETH on Base                

╭─ oracle ─────────────────────────────────────────╮
│  Prepared. Review the approval below.            │
╰──────────────────────────────────────────────────╯

╭─ Approval required ────────── expires in 3m 00s ─╮
│                                                  │
│  Swap       1,250.00 USDC                        │
│  Receive    0.4012 ETH                           │
│             min 0.3992 ETH  ·  impact 0.03%  ·   │
│             slippage 0.50%                       │
│  ──────────────────────────────────────────────  │
│  Risk       ▲ Medium risk                        │
│             Requested allowance: 1,250.00        │
│             USDC.                                │
│             • New spender approval for USDC      │
│                                                  │
│  Allowance  1,250.00 USDC                        │
│  Spender    Uniswap v3 SwapRouter02              │
│             0x2626 664c 2603 336E 57B2 71c5      │
│             C0b2 6F42 1741 e481                  │
│                                                  │
│  Chain      Base  chain id 8453                  │
│  To         Uniswap v3 SwapRouter02              │
│             0x2626 664c 2603 336E 57B2 71c5      │
│             C0b2 6F42 1741 e481                  │
│                                                  │
│  Signer     0x8ba1 f109 551b D432 8030 1264      │
│             5Ac1 36dd d64D BA72                  │
│  Preview id 0x9f3c 1a7e 5b2d 4c6f                │
│                                                  │
│  y approve     n reject     d details            │
│                                                  │
╰──────────────────────────────────────────────────╯

╭──────────────────────────────────────────────────╮
│  ORACLE ›   Message Oracle.  / for commands      │
╰──────────────────────────────────────────────────╯
   ━──── 18K/1M  Claude Opus 5.5           ? more   

Example session; quote values are illustrative. Approval card is a design illustration, not current TUI output.

Where keys live

  1. Oracle prepares

    Hosted and keyless Oracle prepares unsigned transactions.

  2. Your wallet signs

    Your wallet shows them to you and signs them.

  3. Local signer (optional)

    oracle sign init creates a key in a vault on your machine, which you unlock and lock. oracle signer serves it on localhost only, for short sessions.

Never paste a seed phrase, private key or passphrase into chat. Oracle never asks for one.

What the signer will sign

Only what its policy allows. A grant is authorization. A prompt is not.

ControlWhat it allows
CapsMaximum value per transaction, fee, gas, slippage, token approval size and time to live, plus a daily loss cap.
AllowlistsChains, destinations, function selectors and spenders. An empty allowlist refuses everything.
ConfirmationWith exact human confirmation on, you confirm each transaction's digest and the signer issues a one-time nonce for that transaction only.
Policy fileSet with oracle sign policy --policy-file; the file must be readable by you alone.

Defaults that fail closed

A fresh install signs nothing. Each step needs its own permission.

Disarmed

Execution starts disarmed. Prepare is not sign, and sign is not broadcast.

Stop

oracle kill stops execution. oracle resume lifts the stop and does not re-arm anything.

Receipts

A transaction counts as done only with a transaction hash and a successful receipt.

Unattended trading

Unattended trading is a separate opt-in, ORACLE_AUTONOMOUS_TRADING=1, off by default.

The full model, with grants and receipts: Security and execution docs.