circuit wallet namespace manages an encrypted local keystore that holds
the local keys the embedded circuit run uses to sign. The keystore lives at ~/.circuit/local/keystore by default,
sealed with AES-256-GCM under a key derived (HKDF-SHA256) from a local
identity the CLI generates on first use - there is no keystore password.
Override the location with --keystore <path>.
The keystore is for embedded
circuit run and circuit unwind. Hosted runs (--hosted engine) select wallets from your Circuit account through the API and do not use this keystore.List Wallets
ADDRESS\tTYPE) so the output is
pipe-friendly. Use --json for a structured response.
If no keystore exists yet, this exits 0 with an empty list.
Add Wallet
- Import: prompts for a private key in a masked password field
(never echoes to the terminal, scrollback, or
script(1)capture). - Generate: creates a fresh EVM secp256k1 or Solana ed25519 keypair from OS entropy.
circuit wallet add creates the local identity and keystore
automatically - no password, no login, no account. Subsequent adds seal into
the same keystore.
Non-interactive use: --generate <ethereum|solana> creates a fresh keypair
without prompts (the import flow stays terminal-only so a private key never
appears in argv).
Delete Wallet
y/N confirmation (pass
--yes to skip it). For local wallets this permanently loses the key bytes -
they aren’t stored anywhere else.
Export Wallet
> redirect doesn’t accidentally capture it; use 2> if
you genuinely want to file it). Requires the user to type
yes I understand before printing (pass --yes to skip the prompt).
Keystore file location
circuit wallet honors two paths to override the default
~/.circuit/local/keystore:
The keystore file is always written with
0600 permissions (owner read/write
only); circuit wallet refuses to read a keystore that has been chmod’d
looser than that.