$npx -y skills add Senpi-ai/senpi-skills --skill senpi-deposit-withdraw-transferHandle ANY money-movement request — deposit, add funds, fund my account, withdraw, cash out, send, "send to my wallet / an exchange / a friend", transfer, "move my money", pay someone, bridge, get my private key. Two hard rails: money ENTERS Senpi only through the user's embedded
| 1 | # senpi-deposit-withdraw-transfer — money-movement rails |
| 2 | |
| 3 | Money on Senpi moves on fixed rails. Answer every deposit / withdraw / transfer / send request from the |
| 4 | map below. **Never improvise a route, never invent a tool, never guess an amount, and never send the user |
| 5 | to an external UI or a multi-step workaround.** When a request has no on-platform rail, the answer is the |
| 6 | Senpi app — full stop, not a clever path around it. |
| 7 | |
| 8 | ## The two iron rules |
| 9 | |
| 10 | 1. **Money ENTERS Senpi only through the embedded wallet.** One EVM address, valid on every supported |
| 11 | chain (Base, Arbitrum, Optimism, Ethereum, BNB, Polygon) and on Hyperliquid directly. **Never** a |
| 12 | strategy wallet. |
| 13 | 2. **Money LEAVES Senpi to an external address only through the app — never an agent tool.** This is a |
| 14 | deliberate **security** design, not a missing capability. For any withdraw / send / cash-out / pay / |
| 15 | transfer-out, say **exactly** this and stop: |
| 16 | |
| 17 | > **To protect your security, I can't send funds outside of Senpi for you. You can withdraw or transfer |
| 18 | > to external wallets — or get your private key — from your Balances / Wallet in the Senpi web or mobile app.** |
| 19 | |
| 20 | Everything the agent does with tools happens **strictly between the user's own Senpi wallets**. |
| 21 | |
| 22 | ## The map |
| 23 | |
| 24 | | User intent | Rail | |
| 25 | | --- | --- | |
| 26 | | Deposit / add money / fund my account | **Embedded wallet only** — send on any supported EVM chain, or on Hyperliquid, to the one embedded address (`user_get_me`). | |
| 27 | | Fund / top up a strategy | `strategy_top_up` **only** — never a direct send to a strategy wallet. | |
| 28 | | **Withdraw / cash out / send / pay / transfer to an external wallet, exchange, bank, or another person** | **App-only.** Say the security line above. No tool. | |
| 29 | | **Send to another Hyperliquid account** | App-only — same security line (no agent tool for HL↔HL transfers). | |
| 30 | | Get my private key / seed phrase | Self-serve in the Senpi app (Balances / Wallet) — point there; it exists, but it is NOT a withdrawal you perform for them. | |
| 31 | | Move a strategy's funds back to the main (embedded) wallet | `strategy_withdraw_funds` (ACTIVE) or **close the strategy** (`strategy_close`) to reclaim all of it. | |
| 32 | | Move funds between two strategies | Via the embedded wallet as the hub: `strategy_withdraw_funds` from A → embedded, then `strategy_top_up` B. | |
| 33 | | Move funds off Hyperliquid to "my wallet on Base/Arbitrum/…" | `strategy_bridge_funds_from_hyperliquid_to_evm` — lands in the user's OWN embedded wallet on that chain (cannot target a third party). | |
| 34 | | Hyperliquid Spot → Perps | `transfer_spot_to_perps` (instant, no fee, embedded wallet). | |
| 35 | |
| 36 | ## Deposits — embedded wallet only |
| 37 | |
| 38 | - The **embedded wallet is the only deposit destination.** It is **one EVM address valid on ALL |
| 39 | supported chains** (Base, Arbitrum, Optimism, Ethereum, BNB, Polygon) **and on Hyperliquid** — never |
| 40 | imply it works on only one chain. Get it from `user_get_me` (`walletType: "embedded"`). Name the |
| 41 | chains in plain words; don't quote chain IDs (easy to garble, and the address is the same everywhere). |
| 42 | - **NEVER present a strategy wallet address as a deposit target — on any chain, for any reason.** A |
| 43 | direct send to a `strategyWalletAddress` bypasses accounting, corrupts PnL, and may be unrecoverable. |
| 44 | `strategy_top_up` is the **only** way to add funds to a strategy. |
| 45 | - **Strategy funding is automatic.** Create / top-up pulls from Hyperliquid first (perps, then spot |
| 46 | USDC), then bridges EVM USDC as needed. Don't tell users to pre-bridge or pre-fund — only surface a |
| 47 | shortfall if the operation actually returns one (`SERR037`), then point them to the embedded wallet. |
| 48 | |
| 49 | ## Withdrawals & transfers OUT — app-only, by design |
| 50 | |
| 51 | - **No agent tool sends funds to an external address** (the send tool was removed for user security). |
| 52 | For any withdraw / cash-out / send / pay / transfer to an outside wallet, an exchange, a bank, a |
| 53 | friend, or another Hyperliquid account, give the **security line above** — once, cleanly — and stop. |
| 54 | - **Nev |