From zerion-agent
Signs off-chain messages via Zerion CLI: EIP-191 personal_sign for EVM, ed25519 for Solana, EIP-712 typed data. For SIWE logins, EIP-2612/Permit2 approvals, Seaport orders, DAO voting without broadcasting transactions.
npx claudepluginhub zeriontech/zerion-ai --plugin zerion-agentThis skill is limited to using the following tools:
Produce signatures **without broadcasting a transaction**. Used for login flows, permits, and signed orders. The signature is the output — you hand it to the verifying party (a dapp, relayer, exchange, etc.).
Signs messages (personal_sign), EIP-712 typed data (eth_signTypedData_v4), transactions (eth_signTransaction); submits raw transactions to chains like Ethereum/Base/Polygon via synchronous /agent/sign and /agent/submit endpoints.
Signs messages (personal_sign), EIP-712 typed data, transactions via Bankr API /agent/sign endpoint and submits raw transactions via /agent/submit using TypeScript fetch patterns.
Installs Zerion CLI via npm, authenticates via API key or pay-per-call, and routes to specialized skills for crypto wallet analysis, trading, signing, and management across EVM chains and Solana.
Share bugs, ideas, or general feedback.
Produce signatures without broadcasting a transaction. Used for login flows, permits, and signed orders. The signature is the output — you hand it to the verifying party (a dapp, relayer, exchange, etc.).
If a zerion command fails with command not found, install once:
npm install -g zerion-cli
Requires Node.js ≥ 20. For auth see the zerion umbrella skill. Signing requires an agent token (used as the wallet passphrase). For setup → zerion-agent-management.
permit — gasless ERC-20 approvalsFor on-chain transactions (swap/bridge/send) → zerion-trading.
# EIP-191 personal_sign (EVM)
zerion sign-message "hello" --chain ethereum
zerion sign-message "hello" --chain base --wallet <name>
zerion sign-message "gmonad" --chain monad
# Raw hex bytes (no prefix, used by some wallets)
zerion sign-message 0xdeadbeef --encoding hex --chain ethereum
# Raw ed25519 (Solana)
zerion sign-message "hello" --chain solana
# Explicit flags
zerion sign-message --message "text" --wallet <name> --chain <chain>
<chain> determines the signing scheme: EVM chains use EIP-191 personal_sign; Solana uses raw ed25519.
EIP-712 typed data requires a JSON object with { domain, types, primaryType, message }. Include EIP712Domain in types when the verifier expects it.
# Inline JSON
zerion sign-typed-data --data '{"domain":{...},"types":{...},"primaryType":"Permit","message":{...}}' --chain base
# From file
zerion sign-typed-data --file permit.json --chain ethereum
# From stdin
cat permit.json | zerion sign-typed-data --chain ethereum
Output is a JSON object with the signature (r, s, v for EVM) on stdout.
If no agent token is configured and stderr is a TTY, the CLI offers:
Want to setup an agent token for "<wallet>"? [Y/n]
…and runs agent create-token inline. After that completes, the original sign-* command continues with the fresh token. In non-TTY contexts (CI, piped) the command fails fast with no_agent_token — see zerion-agent-management.
Signing arbitrary messages or typed data can authorize unlimited token allowances (e.g. a malicious permit). Before signing:
Permit, OrderComponents, etc.).permit-style payloads, check the spender, value, and deadline explicitly.The CLI doesn't enforce semantic checks — it signs whatever is passed. Apply policies (zerion-agent-management) to restrict which contracts can be signed for if needed.
| Code | Cause | Fix |
|---|---|---|
no_agent_token | No agent token | zerion-agent-management skill |
invalid_typed_data | Missing domain/types/primaryType/message | Validate the JSON shape |
unsupported_chain | Invalid --chain | zerion chains |
wallet_not_found | Wallet not in vault | zerion wallet list |