Skip to main content

Overview

Execution commands (plan, submit, status) require a signing backend. The backend is selected at plan time and persisted with the action — submit reads the stored backend and routes accordingly. Two backends are supported: Tempo swap planning is a separate path — it always uses --from-address and --signer tempo for submit. OWS does not cover Tempo-native execution yet. Open Wallet Standard keeps private keys encrypted at rest. The CLI shells out to ows sign send-tx when broadcasting. Why OWS:
  • Keys encrypted at rest, never exposed as plaintext env vars
  • Built-in policy engine (spend limits, asset allowlists, chain restrictions)
  • Multi-chain with a single wallet identity
  • Agent-friendly token access via DEFI_OWS_TOKEN
Setup:
Plan and submit:
OWS-backed submit does not accept local signer flags (--private-key, --signer, --key-source).

Local signer

Sign directly with a local private key. No external tooling required. Plan and submit:
Key input precedence (when --key-source auto and --private-key is unset):
  1. --private-key flag (hex string, one-off override)
  2. DEFI_PRIVATE_KEY env var (hex string)
  3. DEFI_PRIVATE_KEY_FILE env var (path to key file)
  4. Default key file: ~/.config/defi/key.hex (or $XDG_CONFIG_HOME/defi/key.hex)
  5. DEFI_KEYSTORE_PATH + (DEFI_KEYSTORE_PASSWORD or DEFI_KEYSTORE_PASSWORD_FILE)
Force source selection with --key-source env|file|keystore.

Tempo exception

Tempo swap planning uses --from-address directly — not --wallet:
Tempo uses type 0x76 transactions with its own signer backend. --signer tempo reads the agent wallet from tempo wallet -j whoami.

Structured input

Both backends work with --input-json / --input-file:

How it works internally

The execution_backend field in the persisted action determines submit routing:
  • ows — wallet-backed submit via OWS CLI subprocess
  • legacy_local — local key signing via go-ethereum
  • tempo — Tempo-native signer backend
Submit commands inspect this field and route to the matching backend. You cannot mix backends for the same action.