Vincent - A wallet for agents
Use this skill to safely create a wallet the agent can use for transfers, swaps, and any EVM chain transaction without ever exposing private keys to the agent. Create a wallet, set spending policies, and your agent can transfer tokens, do swaps, and interact with smart contracts within the boundaries you define.
The agent never sees the private key. All transactions are executed server-side through a ZeroDev smart account. The agent receives a scoped API key that can only perform actions permitted by the wallet owner's policies. The private key never leaves the Vincent server.
All commands use the @vincentai/cli package. API keys are stored and resolved automatically — you never handle raw keys or file paths.
Security Model
This skill is designed for autonomous agent operation with human oversight via server-side controls. Understanding this model is important:
No environment variables are required because this skill uses agent-first onboarding: the agent creates its own wallet at runtime by calling the Vincent API, which returns a scoped API key. There is no pre-existing credential to configure. The CLI stores the returned API key automatically during wallet creation. The config paths where the key is persisted (${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/credentials/agentwallet/ or ./agentwallet/) are declared in this skill's metadata.
The agent's API key is not a private key. It is a scoped Bearer token that can only execute transactions within the policies set by the wallet owner. The Vincent server enforces all policies server-side — the agent cannot bypass them regardless of what it sends. If a transaction violates a policy, the server rejects it. If a transaction requires approval, the server holds it and notifies the wallet owner via Telegram for out-of-band human approval.
Model invocation is intentionally enabled. The purpose of this skill is to give AI agents autonomous wallet capabilities. The agent is expected to invoke wallet actions (transfers, swaps, contract calls) on its own, within the boundaries the human operator defines. The human controls what the agent can do through policies (spending limits, address allowlists, token allowlists, function allowlists, approval thresholds) — not by gating individual invocations. The stored key is scoped and policy-constrained — even if another process reads it, it can only perform actions the wallet owner's policies allow, and the owner can revoke it instantly.
All API calls go exclusively to heyvincent.ai over HTTPS/TLS. No other endpoints, services, or external hosts are contacted. The agent does not read, collect, or transmit any data beyond what is needed for wallet operations.
Vincent is open source and audited. The server-side code that enforces policies, manages private keys, and executes transactions is publicly auditable at github.com/HeyVincent-ai/Vincent. The Vincent backend undergoes continuous security audits covering key management, policy enforcement, transaction signing, and API authentication. You can verify how policy enforcement works, how private keys are stored, how the scoped API key is validated, and how revocation is handled — nothing is opaque. If you want to self-host Vincent rather than trust the hosted service, the repository includes deployment instructions.
Key lifecycle:
- - Creation: The agent runs
secret create — the CLI stores the API key automatically and returns a keyId and claimUrl. - Claim: The human operator uses the claim URL to take ownership and configure policies.
- Revocation: The wallet owner can revoke the agent's API key at any time from
https://heyvincent.ai. Revoked keys are rejected immediately by the server. - Re-linking: If the agent loses its API key, the wallet owner generates a one-time re-link token and the agent exchanges it for a new key via
secret relink. - Rotation: The wallet owner can revoke the current key and issue a re-link token to rotate credentials at any time.
Which Secret Type to Use
| Type | Use Case | Network | Gas |
|---|
| INLINECODE9 | Transfers, swaps, DeFi, contract calls | Any EVM chain | Sponsored (free) |
| INLINECODE10 |
Raw message signing for special protocols | Any (Ethereum + Solana) | You pay |
Choose EVM_WALLET (default) for:
- - Sending ETH or tokens
- Swapping tokens on DEXs
- Interacting with smart contracts
- Any standard EVM transaction
Choose RAW_SIGNER only when you need:
- - Raw ECDSA/Ed25519 signatures for protocols that don't work with smart accounts
- To sign transaction hashes you'll broadcast yourself
- Solana signatures
Quick Start
1. Check for Existing Keys
Before creating a new wallet, check if one already exists:
CODEBLOCK0
If a key is returned, use its id as the --key-id for all subsequent commands. If no keys exist, create a new wallet.
2. Create a Wallet
CODEBLOCK1
Returns keyId (use for all future commands), claimUrl (share with the user), and address.
After creating, tell the user:
"Here is your wallet claim URL: <claimUrl>. Use this to claim ownership, set spending policies, and monitor your agent's wallet activity at https://heyvincent.ai."
3. Get Wallet Address
CODEBLOCK2
4. Check Balances
CODEBLOCK3
Returns all ERC-20 tokens and native balances with symbols, decimals, logos, and USD values.
5. Transfer ETH or Tokens
CODEBLOCK4
If the transaction violates a policy, the server returns an error explaining which policy was triggered. If the transaction requires human approval (based on the approval threshold policy), the server returns status: "pending_approval" and the wallet owner receives a Telegram notification to approve or deny.
6. Swap Tokens
Swap one token for another using DEX liquidity (powered by 0x).
CODEBLOCK5
- - Use
0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE for native ETH. - INLINECODE21 : Human-readable amount (e.g.
0.1 for 0.1 ETH). - INLINECODE23 : 1 = Ethereum, 137 = Polygon, 42161 = Arbitrum, 10 = Optimism, 8453 = Base, etc.
- INLINECODE24 : Slippage tolerance in basis points (100 = 1%). Defaults to 100. Execute only.
The preview returns expected buy amount, route info, and fees without executing. Execute performs the actual swap, handling ERC20 approvals automatically.
7. Send Arbitrary Transaction
Interact with any smart contract by sending custom calldata.
CODEBLOCK6
8. Transfer Between Your Secrets
Transfer funds between Vincent secrets you own (e.g., from one EVM wallet to another, or to a Polymarket wallet). Vincent verifies you own both secrets and handles any token conversion or cross-chain bridging automatically.
CODEBLOCK7
Behavior:
- - Same token + same chain: Executes as a direct transfer (gas sponsored).
- Different token or chain: Uses a relay service for atomic swap + bridge.
- The destination secret can be an
EVM_WALLET or POLYMARKET_WALLET. - The server verifies you own both the source and destination secrets — transfers to secrets you don't own are rejected.
- Transfers are subject to the same server-side policies as regular transfers (spending limits, approval thresholds, etc.).
Output Format
CLI commands return JSON to stdout. Successful responses include the relevant data:
CODEBLOCK8
Transaction commands return:
CODEBLOCK9
For transactions requiring human approval:
CODEBLOCK10
Error Handling
| Error | Cause | Resolution |
|---|
| INLINECODE27 | Invalid or missing API key | Check that the key-id is correct; re-link if needed |
| INLINECODE28 |
Transaction blocked by server-side policy | User must adjust policies at heyvincent.ai |
|
400 Insufficient Balance | Not enough tokens for the transfer | Check balances before transferring |
|
429 Rate Limited | Too many requests | Wait and retry with backoff |
|
pending_approval | Transaction exceeds approval threshold | User will receive Telegram notification to approve/deny |
|
Key not found | API key was revoked or never created | Re-link with a new token from the wallet owner |
If a transaction is rejected, inform the user to check their policy settings at https://heyvincent.ai.
Policies (Server-Side Enforcement)
The wallet owner controls what the agent can do by setting policies via the claim URL at https://heyvincent.ai. All policies are enforced server-side by the Vincent API — the agent cannot bypass or modify them. If a transaction violates a policy, the API rejects it. If a transaction triggers an approval threshold, the API holds it and sends the wallet owner a Telegram notification for out-of-band human approval. The policy enforcement logic is open source and auditable at github.com/HeyVincent-ai/Vincent.
| Policy | What it does |
|---|
| Address allowlist | Only allow transfers/calls to specific addresses |
| Token allowlist |
Only allow transfers of specific ERC-20 tokens |
|
Function allowlist | Only allow calling specific contract functions (by 4-byte selector) |
|
Spending limit (per tx) | Max USD value per transaction |
|
Spending limit (daily) | Max USD value per rolling 24 hours |
|
Spending limit (weekly) | Max USD value per rolling 7 days |
|
Require approval | Every transaction needs human approval via Telegram |
|
Approval threshold | Transactions above a USD amount need human approval via Telegram |
Before the wallet is claimed, the agent can operate without policy restrictions. This is by design: agent-first onboarding allows the agent to begin accumulating and managing funds immediately. Once the human operator claims the wallet via the claim URL, they can add any combination of policies to constrain the agent's behavior. The wallet owner can also revoke the agent's API key entirely at any time.
Re-linking (Recovering API Access)
If the agent loses its API key, the wallet owner can generate a re-link token from the frontend. The agent then exchanges this token for a new API key.
How it works:
- 1. The user generates a re-link token from the wallet detail page at INLINECODE35
- The user gives the token to the agent (e.g. by pasting it in chat)
- The agent runs the relink command:
CODEBLOCK11
The CLI exchanges the token for a new API key, stores it automatically, and returns the new keyId. Use this keyId for all subsequent commands.
Important: Re-link tokens are one-time use and expire after 10 minutes.
Important Notes
- - No gas needed. A paymaster is fully set up — all transaction gas fees are sponsored automatically. The wallet does not need ETH for gas.
- Never try to access raw secret values. The private key stays server-side — that's the whole point.
- Always share the claim URL with the user after creating a wallet.
- If a transaction is rejected, it may be blocked by a server-side policy. Tell the user to check their policy settings at
https://heyvincent.ai. - If a transaction requires approval, it will return
status: "pending_approval". The wallet owner will receive a Telegram notification to approve or deny.
Raw Signer (Advanced)
For raw ECDSA/Ed25519 signing when smart accounts won't work.
Create a Raw Signer
CODEBLOCK12
Response includes both Ethereum (secp256k1) and Solana (ed25519) addresses derived from the same seed.
Get Addresses
CODEBLOCK13
Returns ethAddress and solanaAddress.
Sign a Message
CODEBLOCK14
- -
--message: Hex-encoded bytes to sign (must start with 0x) - INLINECODE44 :
ethereum for secp256k1 ECDSA, solana for ed25519
Returns a hex-encoded signature. For Ethereum, this is r || s || v (65 bytes). For Solana, it's a 64-byte ed25519 signature.
Vincent - 代理钱包
使用此技能安全地创建一个代理可用的钱包,用于转账、兑换以及任何EVM链交易,且无需向代理暴露私钥。创建钱包、设置支出策略后,您的代理便可在您定义的范围内进行代币转账、兑换以及与智能合约交互。
代理永远不会看到私钥。 所有交易均通过ZeroDev智能账户在服务端执行。代理收到一个作用域API密钥,该密钥只能执行钱包所有者策略允许的操作。私钥永远不会离开Vincent服务器。
所有命令均使用@vincentai/cli包。API密钥会自动存储和解析——您无需处理原始密钥或文件路径。
安全模型
此技能专为通过服务端控制实现人工监督的自主代理操作而设计。理解此模型很重要:
无需环境变量,因为此技能采用代理优先的接入方式:代理在运行时通过调用Vincent API自行创建钱包,API会返回一个作用域API密钥。无需预先配置凭据。CLI在钱包创建过程中会自动存储返回的API密钥。密钥持久化的配置路径(${OPENCLAWSTATEDIR:-$HOME/.openclaw}/credentials/agentwallet/或./agentwallet/)已在此技能的元数据中声明。
代理的API密钥不是私钥。 它是一个作用域Bearer令牌,只能执行钱包所有者策略范围内的交易。Vincent服务器在服务端强制执行所有策略——无论代理发送什么,都无法绕过这些策略。如果交易违反策略,服务器会拒绝。如果交易需要审批,服务器会保留该交易并通过Telegram通知钱包所有者进行带外人工审批。
模型调用是故意启用的。 此技能的目的是赋予AI代理自主钱包能力。代理应在人工操作员定义的范围内自行调用钱包操作(转账、兑换、合约调用)。人工操作员通过策略(支出限额、地址白名单、代币白名单、函数白名单、审批阈值)控制代理能做什么——而不是通过限制单个调用来控制。存储的密钥是作用域且受策略约束的——即使其他进程读取了它,也只能执行钱包所有者策略允许的操作,且所有者可以立即撤销它。
所有API调用仅通过HTTPS/TLS发送至heyvincent.ai。 不会联系其他端点、服务或外部主机。代理不会读取、收集或传输钱包操作所需之外的任何数据。
Vincent是开源且经过审计的。 执行策略、管理私钥和执行交易的服务端代码可在github.com/HeyVincent-ai/Vincent公开审计。Vincent后端持续进行安全审计,涵盖密钥管理、策略执行、交易签名和API认证。您可以验证策略执行方式、私钥存储方式、作用域API密钥验证方式以及撤销处理方式——一切透明。如果您想自行托管Vincent而非信任托管服务,代码库中包含部署说明。
密钥生命周期:
- - 创建:代理运行secret create——CLI自动存储API密钥并返回keyId和claimUrl。
- 认领:人工操作员使用认领URL获取所有权并配置策略。
- 撤销:钱包所有者可随时从https://heyvincent.ai撤销代理的API密钥。被撤销的密钥会立即被服务器拒绝。
- 重新链接:如果代理丢失了API密钥,钱包所有者会生成一次性重新链接令牌,代理通过secret relink将其兑换为新密钥。
- 轮换:钱包所有者可随时撤销当前密钥并签发重新链接令牌以轮换凭据。
使用哪种密钥类型
| 类型 | 使用场景 | 网络 | Gas |
|---|
| EVMWALLET | 转账、兑换、DeFi、合约调用 | 任何EVM链 | 赞助(免费) |
| RAWSIGNER |
特殊协议的原始消息签名 | 任何(以太坊+Solana) | 您支付 |
选择EVM_WALLET(默认)用于:
- - 发送ETH或代币
- 在DEX上兑换代币
- 与智能合约交互
- 任何标准EVM交易
仅在需要以下功能时选择RAW_SIGNER:
- - 不适用于智能账户的协议所需的原始ECDSA/Ed25519签名
- 签署您将自行广播的交易哈希
- Solana签名
快速开始
1. 检查现有密钥
在创建新钱包前,先检查是否已存在:
bash
npx @vincentai/cli@latest secret list --type EVM_WALLET
如果返回了密钥,将其id作为所有后续命令的--key-id。如果没有密钥存在,则创建新钱包。
2. 创建钱包
bash
npx @vincentai/cli@latest secret create --type EVM_WALLET --memo 我的代理钱包 --chain-id 84532
返回keyId(用于所有后续命令)、claimUrl(与用户分享)和address。
创建后,告知用户:
这是您的钱包认领URL:。使用此URL认领所有权、设置支出策略,并在https://heyvincent.ai监控代理的钱包活动。
3. 获取钱包地址
bash
npx @vincentai/cli@latest wallet address --key-id
4. 检查余额
bash
所有支持链上的全部余额
npx @vincentai/cli@latest wallet balances --key-id
筛选特定链
npx @vincentai/cli@latest wallet balances --key-id --chain-ids 1,137,42161
返回所有ERC-20代币和原生币余额,包含符号、小数位数、图标和美元价值。
5. 转账ETH或代币
bash
转账原生ETH
npx @vincentai/cli@latest wallet transfer --key-id --to 0x接收地址 --amount 0.01
转账ERC-20代币
npx @vincentai/cli@latest wallet transfer --key-id --to 0x接收地址 --amount 100 --token 0x代币地址
如果交易违反策略,服务器会返回错误,说明触发了哪条策略。如果交易需要人工审批(基于审批阈值策略),服务器返回status: pending_approval,钱包所有者会收到Telegram通知以批准或拒绝。
6. 兑换代币
使用DEX流动性(由0x提供支持)将一种代币兑换为另一种。
bash
预览兑换(仅报价,不执行)
npx @vincentai/cli@latest wallet swap preview --key-id \
--sell-token 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE \
--buy-token 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 \
--sell-amount 0.1 --chain-id 1
执行兑换
npx @vincentai/cli@latest wallet swap execute --key-id \
--sell-token 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE \
--buy-token 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 \
--sell-amount 0.1 --chain-id 1 --slippage 100
- - 使用0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE表示原生ETH。
- --sell-amount:人类可读的金额(例如0.1表示0.1 ETH)。
- --chain-id:1=以太坊,137=Polygon,42161=Arbitrum,10=Optimism,8453=Base等。
- --slippage:滑点容忍度,以基点为单位(100=1%)。默认为100。仅执行时使用。
预览返回预期购买金额、路由信息和费用,不执行交易。执行则进行实际兑换,自动处理ERC20授权。
7. 发送任意交易
通过发送自定义calldata与任何智能合约交互。
bash
npx @vincentai/cli@latest wallet send-tx --key-id --to 0x合约地址 --data 0xCalldata --value 0
8. 在您的密钥之间转账
在您拥有的Vincent密钥之间转账资金(例如,从一个EVM钱包转到另一个,或转到Polymarket钱包)。Vincent会验证您拥有两个密钥,并自动处理任何代币转换或跨链桥接。
bash
预览(获取报价但不执行)
npx @vincentai/cli