Use this skill when the user needs: SMS verification, virtual numbers (Uber, Telegram, WhatsApp, Instagram, etc.), balance, prices, countries, services, or account registration with a rented phone number.
Before running any Grizzly command, you MUST ask the user for the API key (unless they already gave it in this conversation):
Please provide your Grizzly SMS API key. Register on grizzlysms.com, then go to the API section (grizzlysms.com/docs) and copy the key.
When the user provides the key in chat — use it immediately. Pass it via exec env on every Grizzly call. Do NOT tell the user to set environment variables or edit config. The exec tool accepts env overrides; use them.
text
exec(command="node {baseDir}/scripts/grizzly-cli.mjs get_services", env={"GRIZZLY_SMS_API_KEY": "<exact_key_user_sent>"})
Example: user sends e069d36075b9b230fe1eb159b86536d1 → use env={"GRIZZLY_SMS_API_KEY": "e069d36075b9b230fe1eb159b86536d1"} in exec. Then proceed with get_services, request_number, etc.
If the key is already in config (skills.entries.grizzly_sms.env), omit env. Otherwise always ask and pass via env.
DO NOT ask the user to set GRIZZLY_SMS_API_KEY in environment variables or config files when they already provided the key in chat. Use it directly.
There is NO tool named grizzly_sms.get_services(). You MUST use the exec tool. Example:
text
exec(command="node {baseDir}/scripts/grizzly-cli.mjs get_services", env={"GRIZZLY_SMS_API_KEY": "<user_key>"})
Use host=gateway only if tools.exec.host is configured for gateway. OpenClaw replaces {baseDir} with the skill folder path.
What to doExec commandList services (find Uber)node {baseDir}/scripts/grizzly-cli.mjs get_servicesList countries (Brazil=73)node {baseDir}/scripts/grizzly-cli.mjs get_countriesCheck balancenode {baseDir}/scripts/grizzly-cli.mjs get_balanceGet crypto wallet for top-upnode {baseDir}/scripts/grizzly-cli.mjs get_walletRequest numbernode {baseDir}/scripts/grizzly-cli.mjs request_number ub 73Get SMS codenode {baseDir}/scripts/grizzly-cli.mjs get_status <activationId>Complete activationnode {baseDir}/scripts/grizzly-cli.mjs set_status <activationId> 6
When the user asks about balance, top-up, replenish, or gets NO_BALANCE:
wallet_address for USDT (TRC-20)Format the wallet address for easy copying (monospace on Telegram). Example:
text
Balance: `10.50` USD
Crypto wallet (USDT TRC-20): `TReiqL2AkD1euTgjXmrtKLnwDAbNPgTstU`
Min top-up: 50 USD. Funds credit automatically.
You are NOT handling crypto transactions — you only retrieve and display the wallet address from the Grizzly API so the user can send USDT from their own wallet.
When the user asks to "register an account for [service] in [country]" (e.g. Uber in Brazil, Instagram in Jamaica):
Ask for API key (if not in config)
Resolve service and country codes — exec get_services and get_countries with env, parse JSON to find the code for the requested service (e.g. Uber → ub, Instagram → ig) and country (e.g. Brazil → 73, Jamaica → lookup in get_countries output)
Request number — exec request_number with env, save activationId and phone number
Open browser and register — use the browser tool to:
Poll for SMS — exec get_status with env until SMS code arrives
Enter code in browser — use browser tool to fill the verification code field and submit
Complete activation — exec set_status 6 with env
ServiceRegistration URLUberhttps://riders.uber.com/Instagramhttps://www.instagram.com/accounts/emailsignup/Telegramhttps://web.telegram.org/WhatsApphttps://web.whatsapp.com/Facebookhttps://www.facebook.com/reg/Googlehttps://accounts.google.com/signup
Use browser.navigate, browser.fill, browser.click as needed. Set browser headless=false so the user can see the process on Mac.
When sending phone numbers, activation IDs, or SMS codes to the user, always format them for easy copying:
If the channel is Telegram — wrap each value in monospace using triple backticks. Example:
text
Phone: `+15551234567`
Activation ID: `12345678`
SMS code: `847291`
Or as a compact block:
text
`+15551234567` | actId: `12345678` | SMS: `847291`
If the channel is not Telegram — use plain labeled format with clear line breaks. Avoid extra punctuation around the values so the user can select and copy easily.