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:
| Backend | Plan flag | Submit auth | Best for |
|---|---|---|---|
| OWS (recommended) | --wallet <name-or-id> | DEFI_OWS_TOKEN env var | Agent automation, policy-controlled signing, encrypted key storage |
| Local signer | --from-address <0x...> | --private-key / env vars / keystore | Quick scripting, CI pipelines, environments without OWS |
--from-address and --signer tempo for submit. OWS does not cover Tempo-native execution yet.
OWS (recommended)
Open Wallet Standard keeps private keys encrypted at rest. The CLI shells out toows 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
--private-key, --signer, --key-source).
Local signer
Sign directly with a local private key. No external tooling required. Plan and submit:--key-source auto and --private-key is unset):
--private-keyflag (hex string, one-off override)DEFI_PRIVATE_KEYenv var (hex string)DEFI_PRIVATE_KEY_FILEenv var (path to key file)- Default key file:
~/.config/defi/key.hex(or$XDG_CONFIG_HOME/defi/key.hex) DEFI_KEYSTORE_PATH+ (DEFI_KEYSTORE_PASSWORDorDEFI_KEYSTORE_PASSWORD_FILE)
--key-source env|file|keystore.
Tempo exception
Tempo swap planning uses--from-address directly — not --wallet:
--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
Theexecution_backend field in the persisted action determines submit routing:
ows— wallet-backed submit via OWS CLI subprocesslegacy_local— local key signing via go-ethereumtempo— Tempo-native signer backend

