tulebank
npx skills add https://github.com/p2p-lanes/tulebank-skill --skill tulebank
Agent 安装分布
Skill 文档
You can send Argentine pesos (ARS) to any bank account via CVU or ALIAS using the tulebank CLI, which talks to a proxy that handles Ripio Ramps API credentials.
CVU vs ALIAS
- ALIAS: a text string (e.g.,
franv98,pilarcastilloz,tulezao). If the user provides a word or short text, it’s an alias. - CVU: a 22-digit numeric string (e.g.,
0000003100099123456789). If the user provides a long number, it’s a CVU. - Both are valid destinations for
--toinbeneficiaries addandsend.
Important rules
- ALWAYS confirm the destination and action with the user before executing
tulebank send. Use question format (e.g., “Should I send 3,000 ARS to Pilar Castillo (pilarcastilloz)?”). - CLI only: run TuleBank through CLI commands. Do not import files under
lib/or run ad-hoc JavaScript to bypass the CLI. - Use the installed
tulebankbinary for all commands in this skill. - If
tulebankis not available, ask the user to install it or fix PATH before continuing. - When the user refers to someone by name or description (e.g., “la verdulerÃa”, “mi hermano”), search beneficiaries first.
- If multiple matches are found, ask the user to clarify.
- If no match is found and the user provides an alias or CVU, run
beneficiaries add --to <alias_or_cvu>to register it. Ripio will return the holder’s name, CUIT, and bank â show this to the user and ask for confirmation before sending. Thesendcommand requires an existing beneficiary; it will NOT auto-create one. - Output from the CLI is JSON. Parse it and present it in a human-friendly way.
- The user must sign up before adding beneficiaries or sending. If not configured, run
tulebank signupfirst. - OTP flow: For existing Ripio users,
check-kycsends an OTP to their phone. You must ask the human for the 6-digit code and useotp --code <code>to validate. - The
sendcommand creates an off-ramp session and returns deposit addresses. The user deposits USDC or wARS to that address, and Ripio converts to ARS and sends to the bank. - If the user has a wallet configured (
tulebank wallet setup),sendcan auto-send tokens with--amount. Omit--tokenfor smart send (auto-picks wARS or swaps USDCâwARS). --toaccepts beneficiary names (e.g.,--to Pilimatches “Pilar Castillo”). Word-prefix matching is supported.- Auto-send shows a confirmation prompt with beneficiary, amount, and destination. The human must confirm before funds are sent. Use
--yesto skip the prompt only after the human has already confirmed to you directly. - Fiat account activation: Ripio only allows one enabled fiat account per customer. The
sendcommand automatically activates the target beneficiary’s fiat account before sending. This may take a few extra seconds if the account was suspended. - After auto-sending, show the transaction hash and run
tulebank historyto confirm the record. - Swaps: Use
tulebank swapto convert between USDC and wARS on Base. wARS converts 1:1 to ARS via off-ramp, so swapping USDC to wARS before sending can lock in the rate. - ARS amounts â just use
--amount, no--token: When the user specifies an amount in ARS/pesos, ALWAYS use--amount <n>WITHOUT--token. The--amountvalue is in ARS. The CLI handles everything (picks wARS if available, or auto-swaps USDCâwARS). Never manually calculate USDC equivalents â it introduces rounding errors and the result won’t be exact. Only use--token USDCwhen the user explicitly says they want to send USDC (not ARS). - History: After every send or swap, call
tulebank historyto confirm the transaction was recorded.
Available commands
Run these via the exec tool using the tulebank CLI binary.
Wallet setup
tulebank wallet setup
Creates a CDP smart wallet on Base via the proxy (no local credentials needed).
Wallet info
tulebank wallet info
Shows the wallet address.
Wallet balance
tulebank wallet balance
Shows USDC, wARS, and ETH balances on Base.
Sign up (prerequisite)
tulebank signup --email <email> --phone <phone>
Creates a TuleBank account, generates a per-user API key, and saves it to config. Only needed once. Use tulebank setup --api-key <key> to log in on another device.
KYC flow (existing Ripio users)
tulebank check-kyc
tulebank otp --code <123456>
check-kyc triggers an OTP to the user’s phone. Ask the human for the code, then validate with otp.
Check KYC status
tulebank kyc-status
Search beneficiaries
tulebank beneficiaries search "<query>"
Searches name, description, and CVU/ALIAS. Use this when the user refers to someone by name or description.
List all beneficiaries
tulebank beneficiaries list
Add a beneficiary
tulebank beneficiaries add --to <CVU_OR_ALIAS> [--name "<name>"] [--description "<desc>"]
Creates a fiat account via the proxy (creates + confirms + polls until enabled), then saves locally. If --name is omitted, the holder’s name is auto-detected from Ripio (metadata includes name, CUIT, and bank). The response includes a holder field with the detected info â use this to confirm with the user.
Send (off-ramp)
tulebank send --to <name/CVU_OR_ALIAS>
Sends to an existing beneficiary. The --to value is resolved via exact alias/CVU match or fuzzy name search. If the beneficiary is not found, the command errors and asks you to add them first with tulebank beneficiaries add.
Send (off-ramp) â auto-send from wallet
tulebank send --to <CVU_OR_ALIAS> --amount <n> --token <USDC|wARS>
Creates off-ramp session and automatically sends tokens from the configured wallet to the Ripio deposit address on Base. Shows a confirmation prompt before sending. Add --yes to skip the prompt (only after human has confirmed to you). Use --manual to skip auto-send entirely.
Swap tokens on Base
tulebank swap --from USDC --to wARS --amount 10
Swaps tokens via DEX on Base. Default slippage is 100 bps (1%). Use --slippage <bps> to change. Add --yes to skip confirmation (only after human has confirmed to you).
Check off-ramp session status
tulebank send-status --session <session-id>
Shows deposit addresses and transactions for an off-ramp session.
Get a quote
tulebank quote --from USDC --to ARS --amount 10 [--chain BASE]
Check transaction limits
tulebank limits
Check fiat account status
tulebank fiat-account --id <fiat-account-id>
Transaction history
tulebank history
tulebank history --beneficiary "<name>"
tulebank history --type send
tulebank history --from 2026-01-01 --to-date 2026-01-31
Shows local transaction history. Supports filtering by beneficiary (fuzzy), type (send/swap), and date range. Default: last 30 days.
Smart send rules
--amountis always in ARS (= wARS, 1:1). Do NOT convert to USDC manually.- When
--tokenis omitted and--amountis given, the CLI auto-picks wARS (if balance sufficient) or swaps USDCâwARS first. - When
--tokenis specified, sends that token directly (no auto-swap). - Example: user says “2300 pesos” â
--amount 2300(NOT--amount 1.57 --token USDC). --toaccepts beneficiary names (e.g.,--to Pili). If one match is found, it auto-resolves. If multiple, it errors with a list.- After every send, the transaction is recorded in
~/.tulebank/history.json.
Example flows
User says: “mandale 10k a Pili”
- Search beneficiaries â finds “Pilar Castillo (pilarcastilloz)”
- Ask: “Pilar Castillo (pilarcastilloz) â le mando 10,000 ARS?”
- On confirmation: run
send --to Pili --amount 10000 --yes - Show transaction hash
- Run
history --beneficiary Pilito confirm the record
User says: “mandale plata a la verdulerÃa”
- Run
beneficiaries search "verdulerÃa" - If found: ask “La Amistad (la verdulerÃa cerca de casa) â le envÃo plata?”
- On confirmation: run
send --to <their_alias> - Show deposit address and instructions
User says: “manda 2000 a franv98”
- Run
beneficiaries search "franv98"â not found - “franv98” is a text string â it’s an alias. Run
beneficiaries add --to franv98â Ripio returns holder info - Ask: “franv98 pertenece a FRANCISCO VARELA (CUIT 20385…, Banco Galicia). Le mando 2,000 ARS?”
- On confirmation: run
send --to franv98 --amount 2000 --yes - Show transaction hash
- Run
historyto confirm the record
User says: “send to 0000003100099123456789”
- Run
beneficiaries search "0000003100099123456789"â not found - 22-digit number â it’s a CVU. Run
beneficiaries add --to 0000003100099123456789â Ripio returns holder info - Ask: “Ese CVU pertenece a MARÃA GARCÃA (CUIT 27…, Banco Nación). Confirmo el envÃo?”
- On confirmation: run
send --to 0000003100099123456789 - Show deposit address and instructions
User says: “send to tulezao”
- Run
beneficiaries search "tulezao"â not found - “tulezao” is a text string â it’s an alias. Run
beneficiaries add --to tulezaoâ Ripio returns holder info - Ask: “El alias tulezao pertenece a JUAN PÃREZ (CUIT 20…, Banco Nación). Lo agrego y le envÃo?”
- On confirmation: proceed with send
Onboarding a new user (existing Ripio account)
- Ask for their email and phone number
- Run
signup --email <email> --phone <phone> - Run
check-kyc(sends OTP) - Ask human for the 6-digit code
- Run
otp --code <code> - Run
kyc-statusto verify COMPLETED
Autonomous send (wallet configured)
- Ask: “Le mando 10,000 ARS a Pilar Castillo (pilarcastilloz)?”
- On confirmation: run
send --to pilarcastilloz --amount 10000 --yes--amountis ARS-denominated (10000 = 10,000 ARS). Do NOT convert to USDC.- The CLI handles token selection: uses wARS if available, otherwise auto-swaps USDCâwARS.
- Show transaction hash from the response
- Run
historyto confirm the record
Swap USDC to wARS before sending
- Run
wallet balanceto check USDC balance - Run
swap --from USDC --to wARS --amount 10 - Show swap result: “Swapped 10 USDC to ~14,380 wARS”
- Run
send --to pilarcastilloz --amount 14380 --token wARS - wARS converts 1:1 to ARS via off-ramp
Checking a rate before sending
- Run
quote --from USDC --to ARS --amount 10 - Tell user: “10 USDC = ~14,300 ARS at current rate”