Install
openclaw skills install safe-skillsSecurely create and manage EVM wallets; perform token transfers, check balances, and send transactions without exposing raw secret keys.
openclaw skills install safe-skillsSafeSkills is a secure secret management service. It stores secrets (like wallet private keys) and executes actions using them so that you (the agent) never see the raw secret values. The first supported skill is an EVM wallet -- you can create wallets, transfer tokens, send transactions, check balances, and more.
CRITICAL: Never attempt to access or request raw secret values. All operations are performed server-side through the API.
SAFESKILLS_API_URL environment variable if set, otherwise default to https://safeskill-production.up.railway.appSAFESKILLS_FRONTEND_URL environment variable if set, otherwise default to https://safeskill-production.up.railway.appAll API requests require a Bearer token (the API key returned when creating a secret).
Authorization: Bearer <API_KEY>
Create an EVM wallet secret. Store the returned API key for all subsequent calls. Share the claim URL with the user so they can manage policies for the wallet.
curl -X POST "${SAFESKILLS_API_URL:-https://safeskill-production.up.railway.app}/api/secrets" \
-H "Content-Type: application/json" \
-d '{
"type": "EVM_WALLET",
"memo": "My agent wallet",
"chainId": 11155111
}'
Response includes:
apiKey -- store this securely; use it as the Bearer token for all future requestsclaimUrl -- share this with the user so they can view and manage policies for this walletaddress -- the smart account address of the created walletAfter creating, tell the user: "Here is your wallet claim URL: <claimUrl>. You can use this to manage spending policies and monitor the wallet."
Retrieve metadata about the secret associated with the current API key.
curl -X GET "${SAFESKILLS_API_URL:-https://safeskill-production.up.railway.app}/api/secrets/info" \
-H "Authorization: Bearer <API_KEY>"
curl -X GET "${SAFESKILLS_API_URL:-https://safeskill-production.up.railway.app}/api/skills/evm-wallet/address" \
-H "Authorization: Bearer <API_KEY>"
Check native token balance and optionally ERC-20 token balances by passing token contract addresses as a comma-separated query parameter.
# Native balance only
curl -X GET "${SAFESKILLS_API_URL:-https://safeskill-production.up.railway.app}/api/skills/evm-wallet/balance" \
-H "Authorization: Bearer <API_KEY>"
# With ERC-20 tokens
curl -X GET "${SAFESKILLS_API_URL:-https://safeskill-production.up.railway.app}/api/skills/evm-wallet/balance?tokens=0xTokenAddr1,0xTokenAddr2" \
-H "Authorization: Bearer <API_KEY>"
Transfer native ETH or an ERC-20 token to a recipient address.
# Transfer native ETH
curl -X POST "${SAFESKILLS_API_URL:-https://safeskill-production.up.railway.app}/api/skills/evm-wallet/transfer" \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"to": "0xRecipientAddress",
"amount": "0.01"
}'
# Transfer ERC-20 token
curl -X POST "${SAFESKILLS_API_URL:-https://safeskill-production.up.railway.app}/api/skills/evm-wallet/transfer" \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"to": "0xRecipientAddress",
"amount": "100",
"token": "0xTokenContractAddress"
}'
Send a raw transaction with custom calldata. Useful for interacting with smart contracts.
curl -X POST "${SAFESKILLS_API_URL:-https://safeskill-production.up.railway.app}/api/skills/evm-wallet/send-transaction" \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"to": "0xContractAddress",
"data": "0xCalldata",
"value": "0"
}'
11155111 is Ethereum Sepolia testnet. Adjust as needed.