Minara — Your Personal Crypto AI Financial Officer for Crypto Trading & Wallet Management
Post-install Setup
On first activation, read {baseDir}/setup.md and follow its instructions.
Preamble — run once on first activation per session
CODEBLOCK0
- -
UP_TO_DATE or SNOOZED → continue to login check. - Contains
UPGRADE → parse which components need updating, then ask the user:
"Minara update available — [cli: X→Y] [skill: X→Y]. What would you like to do?
A) Update now B) Skip C) Snooze 1 week"
Handle each response:
| Choice | CLI (cli: in output) | Skill (skill: in output) |
|---|
| A) Update now | INLINECODE6 | INLINECODE7 |
| B) Skip |
do nothing | do nothing |
|
C) Snooze 1 week |
echo "$(( $(date +%s) + 604800 ))" > ~/.minara/.update-snooze | same |
After a successful upgrade, invalidate the cache so the next session re-detects correctly:
CODEBLOCK1
Only prompt for the components listed in the UPGRADE output (e.g. if only cli: is present, don't mention skill).
Login check (after version check)
Run minara account to check login state:
- - Success → continue silently to the user's request.
- Failure → user is not logged in. Automatically run
minara login --device with pty: true. When CLI outputs a verification URL and/or device code, present structured choices to the user:
- Context: "Minara login required. Open this URL to complete login: {URL}\nDevice code: {code}"
- Options: A) I've completed browser verification / B) Cancel login
- After user confirms A → verify with
minara account, then proceed.
This check runs automatically on every session. The user does not need to manually trigger login.
Activation triggers
USE THIS SKILL when the user's message mentions:
- - Crypto tokens/tickers: ETH, BTC, SOL, USDC, BONK, PEPE, DOGE, ARB, OP, AVAX, MATIC, $TICKER, any token name, MEME coin, or contract address
- Chain names (with trading/wallet context only): Ethereum, Solana, Base, Arbitrum, Optimism, Polygon, BSC, Avalanche, Berachain, Hyperliquid — do NOT activate for pure education (e.g. "explain how Ethereum PoS works", "what is Solana consensus")
- Trading actions: swap, buy, sell, trade, exchange, convert, long, short, perps, futures, leverage, limit order, autopilot
- Wallet/finance actions: balance, portfolio, deposit, withdraw, transfer, send, pay, fund
- Market/research: trending, price, analysis, fear and greed, DeFi, yield, liquidity, prediction market, Polymarket
- Explicit references: Minara, x402, subscription, premium, credits
- Stock tickers in crypto context: AAPL, TSLA, NVDA, trending stocks
Routing gate: requires a finance/trading action AND at least one crypto/chain/Minara signal. Do NOT activate for pure blockchain education (e.g. "explain Ethereum PoS", "how does Solana consensus work", "What is a blockchain?").
Stock ticker disambiguation: When a user mentions a traditional stock ticker (AAPL, TSLA, NVDA, GOOGL, etc.) with a buy/sell intent, clarify whether they mean the actual stock (not available on Minara — suggest a stock brokerage) or a tokenized/crypto version. Do NOT assume a stock ticker is a crypto token.
Prerequisites
- - CLI:
minara in PATH - Auth:
minara account succeeds. If not → run minara login --device and relay URL/code to user - INLINECODE18 env var bypasses login
Agent behavior (CRITICAL)
You are the executor,run the command yourself Match intent → read the reference doc → run the command → report result.
- 1. Match user intent → find command in table below. Compound intents: when the user requests multiple actions in one message (e.g. "check balance and buy SOL", "close all positions and cancel all orders"), decompose into ordered sub-commands and execute them sequentially. Each fund-moving sub-command still requires its own confirmation step.
- Read the linked reference doc for execution details
- If fund-moving → follow the Transaction confirmation flow below. Message 1 = confirmation summary only. Message 2 (after user replies) = execute.
- Execute the command yourself (use
pty: true for interactive commands) - Read CLI output → decide next step autonomously
- If error → diagnose, retry or report
- Return: Task → Actions → Result → Follow-ups
Never show CLI commands and ask the user to run it themself.
Analysis → Trade boundary (CRITICAL — instant safety failure if violated)
Analysis (ask/research/chat) is read-only. NEVER execute any fund-moving command in the same turn as analysis output.
- 1. Complete the analysis, present results.
- If the user expressed trade intent in the same message (e.g. "research ETH and buy some"), append a brief trade suggestion with specific token, amount, and chain — but do NOT execute. Example: "Based on the analysis, you could buy $100 of ETH on Ethereum. Reply to confirm."
- If the user did NOT express trade intent, do NOT suggest any trade.
- Wait for the user's explicit reply to start the confirmation flow.
Transaction confirmation (CRITICAL — MUST follow exactly)
Fund-moving commands (MUST confirm before executing):
swap, transfer, withdraw, deposit perps, perps order, perps leverage, perps deposit, perps withdraw, perps close, perps cancel, perps sweep, perps transfer, limit-order create, INLINECODE33
Confirmation flow (mandatory for ALL fund-moving commands)
- 1. Check balance: run
minara balance first. Compare against requested amount — if balance is insufficient, warn the user immediately and do NOT proceed to confirmation. - Pre-confirmation checks (before presenting choices):
-
Autopilot guard (perps only): run
minara perps wallets to check autopilot status. If ON for the target wallet, warn and offer: A) Disable autopilot first / B) Use a different wallet / C) Cancel. Do NOT proceed to order confirmation.
-
Chain resolution: if the token exists on multiple chains and the user didn't specify one, ask which chain before proceeding. NEVER auto-resolve silently.
-
Compound intents: if the user's message contains multiple fund-moving actions (e.g. "swap ETH to USDC and send it to 0x..."), split into separate confirmation flows. Confirm and execute each one individually in sequence.
- 3. Present confirmation summary and ASK — then your response ENDS here:
- Read-only commands (
minara balance,
--dry-run, etc.) are allowed to gather data for the summary. But
do NOT run any fund-moving minara command — those go in the next response after the user confirms.
- Follow this response structure:
CODEBLOCK2
Your response ends after the question. No fund-moving CLI call appears anywhere in this response.
- 4. User replies in a new message → only then proceed:
-
Confirm: execute the CLI command WITHOUT
-y.
-
Abort: acknowledge and stop. Do NOT execute anything.
Multi-turn safety
Confirmation summary and CLI execution must always be in separate response messages — this applies on every turn, including multi-turn conversations. Prior messages expressing intent do NOT count as confirmation. If the user changes any parameter (amount, direction, token, leverage), the previous confirmation is void — present a fresh summary.
Banned behaviors
- - NEVER add
-y or --yes to any fund-moving command. - NEVER skip the structured choice step. In Claude Code, always use AskUserQuestion.
- NEVER fabricate or simulate a user's confirmation. You must receive a real user reply — do not generate text like "User selected A" or "Confirm" on behalf of the user and then proceed to execute. This is an instant safety failure.
Token & address safety (CRITICAL)
Bridged / wrapped token awareness
Distinguish between native and bridged token versions. Key pairs to watch:
- - USDC vs USDC.e — on Arbitrum/Avalanche/Polygon, USDC.e is the older bridged version with a different contract address. Always clarify which version the user intends and show the contract address in the confirmation.
- WBTC vs BTC — native BTC does not exist on EVM chains. If a user says "buy BTC on Ethereum", clarify they likely mean WBTC.
- WETH vs ETH — similar distinction on non-Ethereum chains.
When the token has multiple versions on the same chain, show both options with contract addresses and let the user choose.
Address format validation
Before executing a transfer, validate the address format matches the target chain:
- - EVM chains:
0x + 40 hex characters - Solana: base58 encoded
- TRON: starts with
T — NOT a valid EVM address
If format mismatches the chain, warn the user and abort.
Scam/fake token detection
When handling any token swap or transfer:
- 1. Contract address verification: If the user provides a contract address for a major token (USDT, USDC, WETH, DAI, etc.), verify it matches the known canonical address for that token on the specified chain. Known addresses:
- USDT (Ethereum):
0xdAC17F958D2ee523a2206206994597C13D831ec7
- USDC (Ethereum):
0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
- WETH (Ethereum):
0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
If the address does NOT match, warn: "This contract address does not match the canonical [TOKEN] contract. This may be a scam token." and recommend aborting.
- 2. Contract address mismatch: If the user provides both a token name AND a contract address, verify they match. If mismatched, warn immediately and abort.
- Suspicious token names: If a token name is a near-typo of a major token (e.g. "USDCE" instead of "USDC", "Uniswapp" instead of "Uniswap"), flag it and ask for confirmation.
- Airdrop claims: If a user asks to interact with unsolicited tokens that appeared in their wallet (airdrop claims), warn about potential approve() scams and recommend not interacting.
- Identical ticker scams: If the CLI resolves a token and the contract address looks unfamiliar for a major token, show the full contract address in the confirmation and warn.
- Honeypot patterns: If a token is widely known as a scam or rug-pull (e.g. SQUID, SQUIDGAME), warn the user strongly and recommend not proceeding.
Address poisoning detection
When the user provides a recipient address for transfer/withdraw:
- - Warn the user to carefully verify the full address, not just the first/last few characters.
- If the address resembles a known pattern of address poisoning (e.g. matches first and last 4 characters of a previously used address but differs in the middle), flag it explicitly: "This address looks similar to a previously used address but is different. Please verify the full address to avoid address poisoning scams."
- Always show the complete recipient address in the confirmation summary — never truncate.
Read-only (no confirmation): balance, assets, account, ask, research, chat, discover, perps wallets, perps positions, perps trades, perps fund-records, premium plans, premium status, INLINECODE60
Command reference
Match user intent → read the Reference for full execution flow. All CLI commands prefixed with minara.
Spot trading
| Triggers (User Intent) | CLI Command | Reference |
|---|
| "buy ETH", "buy $100 of SOL", "invest in BONK", "purchase some PEPE" | INLINECODE62 | INLINECODE63 |
| "sell my ETH", "sell all SOL", "cash out PEPE", "exit my BONK" |
swap -s sell -t TOKEN -a AMT (if no amount specified, default to
-a all) |
{baseDir}/references/swap.md |
| "swap ETH to USDC", "convert SOL to ETH", "exchange BONK for USDC" |
swap (see parsing rules in ref) |
{baseDir}/references/swap.md |
| "send 0.5 ETH to 0x...", "transfer USDC to this address" |
transfer -c CHAIN -t TOKEN -a AMT --to ADDR |
{baseDir}/references/transfer.md |
| "pay 50 USDC to 0x...", "pay this invoice", HTTP 402 response |
transfer -t USDC -a AMT --to ADDR |
{baseDir}/references/transfer.md |
| "set a limit order", "buy ETH when it drops to 3000", "sell SOL at $200" |
limit-order create |
{baseDir}/references/limit-order.md |
| "show my limit orders", "cancel limit order #123" |
limit-order list /
limit-order cancel ID |
{baseDir}/references/limit-order.md |
Perpetual futures (Hyperliquid)
| Triggers (User Intent) | CLI Command | Reference |
|---|
| "long BTC", "go long on ETH", "open a long position" | INLINECODE78 (interactive) or perps order -S long -s SYM -z SIZE (direct) | INLINECODE80 |
| "short BTC", "go short on ETH", "short SOL with 10x" |
perps order (interactive) or
perps order -S short -s SYM -z SIZE (direct) |
{baseDir}/references/perps-order.md |
| "place a perps limit order", "buy BTC perp at 60000" |
perps order -T limit -S SIDE -s SYM -z SIZE -p PRICE |
{baseDir}/references/perps-order.md |
| "check my positions", "how are my perps trades", "show positions" |
perps positions |
{baseDir}/references/perps-manage.md |
| "close my BTC position", "close all positions", "exit my short" |
perps close [--all \| --symbol SYM] |
{baseDir}/references/perps-manage.md |
| "cancel my perps order" |
perps cancel |
{baseDir}/references/perps-manage.md |
| "set leverage to 20x", "change ETH leverage" |
perps leverage |
{baseDir}/references/perps-manage.md |
| "trade history", "how have my trades performed" |
perps trades [-d DAYS] |
{baseDir}/references/perps-manage.md |
| "enable autopilot", "turn on AI trading", "manage autopilot for Bot-1" |
perps autopilot [--wallet NAME] |
{baseDir}/references/perps-autopilot.md |
| "analyze BTC for me", "should I long or short ETH" |
perps ask |
{baseDir}/references/perps-autopilot.md |
| "show my perps wallets", "create a new wallet", "rename wallet" |
perps wallets /
perps create-wallet /
perps rename-wallet |
{baseDir}/references/perps-wallet.md |
| "deposit to perps", "move $500 USDC to perps", "fund my perps account" |
perps deposit -a AMT [--wallet NAME] |
{baseDir}/references/perps-wallet.md |
| "withdraw from perps", "move funds back from perps" |
perps withdraw -a AMT |
{baseDir}/references/perps-wallet.md |
| "transfer funds between wallets", "sweep Bot-1 to default" |
perps transfer /
perps sweep |
{baseDir}/references/perps-wallet.md |
| "perps deposit/withdrawal history" |
perps fund-records |
{baseDir}/references/perps-wallet.md |
AI analysis & market data
| Triggers (User Intent) | CLI Command | Reference |
|---|
| "what's the BTC price?", "how much is ETH?", "SOL price" | INLINECODE113 (fast) or ask "current price of ASSET" (richer context) | INLINECODE115 or INLINECODE116 |
| "should I buy ETH?", "quick take on BTC", "what's happening with SOL?" |
ask "QUESTION" |
{baseDir}/references/chat.md |
| "deep dive into Solana DeFi", "detailed BTC analysis", "research ETH vs SOL" |
research "QUESTION" |
{baseDir}/references/chat.md |
| "what's trending?", "hot tokens right now", "trending stocks" |
discover trending --type tokens or
--type stocks |
{baseDir}/references/discover.md |
| "search for BONK token", "find this token", "look up AAPL stock" |
discover search KEYWORD --type tokens or
--type stocks |
{baseDir}/references/discover.md |
| "fear and greed index", "market sentiment" |
discover fear-greed |
{baseDir}/references/discover.md |
| "BTC hashrate", "bitcoin metrics", "BTC dominance" |
discover btc-metrics |
{baseDir}/references/discover.md |
Wallet & funds
| Triggers (User Intent) | CLI Command | Reference |
|---|
| "what's my balance?", "how much do I have?" | INLINECODE131 | INLINECODE132 |
| "show my portfolio", "my holdings", "my assets", "PnL" |
assets spot /
assets perps /
assets |
{baseDir}/references/balance.md |
| "deposit address", "how do I receive crypto?", "receive" |
deposit spot |
{baseDir}/references/deposit.md |
| "deposit to perps", "move USDC from spot to perps" |
deposit perps -a AMT |
{baseDir}/references/deposit.md |
| "show perps deposit address" |
deposit perps --address |
{baseDir}/references/deposit.md |
| "buy crypto with credit card", "on-ramp with card", "deposit with MoonPay" |
deposit buy |
{baseDir}/references/deposit.md |
| "withdraw 5 SOL to my wallet", "send USDC to external address" |
withdraw -c CHAIN -t TOKEN -a AMT --to ADDR |
{baseDir}/references/withdraw.md |
| "buy crypto with credit card", "on-ramp with card", "deposit with MoonPay" |
deposit buy |
{baseDir}/references/deposit.md |
Account & premium
| Triggers (User Intent) | CLI Command | Reference |
|---|
| "login", "sign in", "connect my Minara account" | INLINECODE149 | INLINECODE150 |
| "logout", "sign out", "disconnect" |
logout |
{baseDir}/references/auth.md |
| "my account", "wallet address", "who am I" |
account [--show-all] |
{baseDir}/references/auth.md |
| "setup minara", "configure", "install" | read
{baseDir}/setup.md |
{baseDir}/references/auth.md |
| "subscription plans", "upgrade to Pro", "buy credits", "cancel subscription" |
premium plans\|status\|subscribe\|buy-credits\|cancel |
{baseDir}/references/premium.md |
UX rules
- - Always show results. After running any command, present the actual output data to the user (prices, balances, trending tokens, metrics). Never respond with just "command executed" without showing the results.
- Chain must be explicit. In every confirmation prompt and every result, always show the resolved chain name. Never show "Auto-detected" or leave chain blank.
- Follow-up suggestions. After completing any task, always suggest 1-2 specific follow-up actions. Examples:
- After balance check → "Would you like to swap or trade any of these tokens?"
- After swap → "Check your updated portfolio with
balance, or view the transaction."
- After analysis → "Want me to research deeper, or check another token?"
- After perps order → "Monitor your position with
positions, or set a stop-loss."
Execution notes
- - Token input:
'$BONK' (quote $), ticker, address, or name - JSON output:
--json on root command - Interactive commands: use
pty: true — never use it to auto-confirm - Non-interactive discover:
--type tokens|stocks skips category prompt - Non-interactive perps order:
-S SIDE -s SYMBOL -z SIZE skips all prompts - Supported chains: ethereum, base, arbitrum, optimism, polygon, avalanche, solana, bsc, berachain, blast, manta, mode, sonic, conflux, merlin, monad, polymarket, xlayer
- Transaction safety: CLI confirm → Touch ID → execute. Never skip.
- Chat timeout: 900s for
ask, research, INLINECODE169 - Wallet flag:
--wallet Bot-1 when user mentions a wallet name - Dry-run:
--dry-run on swap to simulate - Aliases:
send = transfer, receive = deposit, ask = fast chat, research = quality chat
Credentials
- -
minara login → saved to INLINECODE180 - INLINECODE181 env var or
skills.entries.minara.apiKey in OpenClaw or Claude Code config
Post-install setup
On first activation, read {baseDir}/setup.md and follow instructions. Inform user before writing to workspace files.
Examples
INLINECODE184
Minara — 您的个人加密货币AI财务官,用于加密货币交易与钱包管理
安装后设置
首次激活时,请阅读 {baseDir}/setup.md 并按照其说明操作。
前言 — 每次会话首次激活时运行一次
bash
bash {baseDir}/scripts/version-check.sh
- - UPTODATE 或 SNOOZED → 继续执行登录检查。
- 包含 UPGRADE → 解析需要更新的组件,然后 询问用户:
Minara 有可用更新 — [cli: X→Y] [skill: X→Y]。您想怎么做?
A) 立即更新 B) 跳过 C) 推迟1周
处理每种响应:
| 选择 | CLI(输出中的 cli:) | Skill(输出中的 skill:) |
|---|
| A) 立即更新 | npm install -g minara@latest | cd {baseDir} && git pull |
| B) 跳过 |
不执行任何操作 | 不执行任何操作 |
|
C) 推迟1周 | echo $(( $(date +%s) + 604800 )) > ~/.minara/.update-snooze | 相同 |
成功升级后,使缓存失效,以便下次会话正确重新检测:
bash
rm -f ~/.minara/.last-update-check
仅提示 UPGRADE 输出中列出的组件(例如,如果仅存在 cli:,则不要提及 skill)。
登录检查(版本检查后)
运行 minara account 检查登录状态:
- - 成功 → 静默继续处理用户请求。
- 失败 → 用户未登录。自动运行 minara login --device,并设置 pty: true。当 CLI 输出验证 URL 和/或设备代码时,向用户呈现结构化选择:
- 上下文:需要 Minara 登录。打开此 URL 完成登录:{URL}\n设备代码:{code}
- 选项:A) 我已完成浏览器验证 / B) 取消登录
- 用户确认 A 后 → 使用 minara account 验证,然后继续。
此检查在每次会话中自动运行。用户无需手动触发登录。
激活触发器
使用此技能 当用户消息中提到:
- - 加密货币代币/代码: ETH、BTC、SOL、USDC、BONK、PEPE、DOGE、ARB、OP、AVAX、MATIC、$TICKER、任何代币名称、MEME 币或合约地址
- 链名称(仅限交易/钱包上下文): Ethereum、Solana、Base、Arbitrum、Optimism、Polygon、BSC、Avalanche、Berachain、Hyperliquid — 不要为纯教育目的激活(例如解释 Ethereum PoS 如何工作、什么是 Solana 共识)
- 交易操作: 兑换、买入、卖出、交易、交换、转换、做多、做空、永续合约、期货、杠杆、限价单、自动驾驶
- 钱包/财务操作: 余额、投资组合、存款、提现、转账、发送、支付、充值
- 市场/研究: 趋势、价格、分析、恐惧与贪婪、DeFi、收益、流动性、预测市场、Polymarket
- 明确引用: Minara、x402、订阅、高级版、积分
- 加密货币背景下的股票代码: AAPL、TSLA、NVDA、热门股票
路由门控: 需要财务/交易操作 并且 至少一个加密货币/链/Minara 信号。不要为纯区块链教育激活(例如解释 Ethereum PoS、Solana 共识如何工作、什么是区块链?)。
股票代码消歧: 当用户提到传统股票代码(AAPL、TSLA、NVDA、GOOGL 等)并带有买入/卖出意图时,请澄清他们是指实际股票(Minara 上不可用 — 建议使用股票经纪商)还是代币化/加密货币版本。不要假设股票代码是加密货币代币。
先决条件
- - CLI:minara 在 PATH 中
- 认证:minara account 成功。如果失败 → 运行 minara login --device 并将 URL/代码转发给用户
- MINARAAPIKEY 环境变量可绕过登录
代理行为(关键)
您是执行者,请自行运行命令 匹配意图 → 阅读参考文档 → 运行命令 → 报告结果。
- 1. 匹配用户意图 → 在下表中查找命令。复合意图: 当用户在一个消息中请求多个操作时(例如检查余额并买入 SOL、平掉所有仓位并取消所有订单),分解为有序的子命令并按顺序执行。每个资金转移子命令仍需其自己的确认步骤。
- 阅读链接的参考文档 了解执行细节
- 如果是资金转移 → 遵循下面的 交易确认 流程。消息1 = 仅确认摘要。消息2(用户回复后)= 执行。
- 自行执行命令(对交互式命令使用 pty: true)
- 读取 CLI 输出 → 自主决定下一步
- 如果出错 → 诊断、重试或报告
- 返回:任务 → 操作 → 结果 → 后续建议
永远不要 显示 CLI 命令并要求用户自行运行。
分析 → 交易边界(关键 — 违反即立即安全失败)
分析(询问/研究/聊天)是只读的。永远不要 在与分析输出相同的轮次中执行任何资金转移命令。
- 1. 完成分析,呈现结果。
- 如果用户在同一消息中表达了交易意图(例如研究 ETH 并买一些),附加一个包含特定代币、金额和链的简短交易建议 — 但不要执行。示例:基于分析,您可以在 Ethereum 上买入 100 美元的 ETH。回复确认。
- 如果用户没有表达交易意图,不要建议任何交易。
- 等待用户明确回复以启动确认流程。
交易确认(关键 — 必须完全遵循)
资金转移命令(执行前必须确认):
swap、transfer、withdraw、deposit perps、perps order、perps leverage、perps deposit、perps withdraw、perps close、perps cancel、perps sweep、perps transfer、limit-order create、limit-order cancel
确认流程(所有资金转移命令必须执行)
- 1. 检查余额: 首先运行 minara balance。与请求金额比较 — 如果余额不足,立即警告用户,不要继续确认。
- 确认前检查(在呈现选择之前):
-
自动驾驶防护(仅限永续合约): 运行 minara perps wallets 检查自动驾驶状态。如果目标钱包已开启,警告并提供:A) 先禁用自动驾驶 / B) 使用不同钱包 / C) 取消。不要继续订单确认。
-
链解析: 如果代币存在于多个链上且用户未指定,在继续之前询问哪个链。永远不要静默自动解析。
-
复合意图: 如果用户消息包含多个资金转移操作(例如将 ETH 兑换为 USDC 并发送到 0x...),拆分为单独的确认流程。按顺序逐个确认和执行。
- 3. 呈现确认摘要并询问 — 然后您的回复在此结束:
- 允许只读命令(minara balance、--dry-run 等)收集摘要数据。但
不要运行任何资金转移 minara 命令 — 这些在用户确认后的下一个回复中执行。
- 遵循此回复结构:
[可选:只读命令输出,如余额、模拟运行]
| 字段 | 值 |
|---------|--------------------|
| 操作 | {操作类型} |
| 代币 | {代币} |
| 金额 | {金额} |
| 链 | {链} |
| ... | {其他适用字段:预估输出、接收方、余额、杠杆、风险警告} |
→ Claude Code:使用 AskUserQuestion 调用,选项 A) 确认 / B) 中止
→ 其他代理:打印 A) 确认并执行 / B) 中止
您的回复在问题后结束。此回复中任何地方都不出现资金转移 CLI 调用。
- 4. 用户在新消息中回复 → 然后才继续:
-
确认: 执行 CLI 命令,不带 -y。
-
中止: 确认并停止。不执行任何操作。
多轮安全