The command-line toolkit for Robinhood Chain (chain ID 4663).
Instant reads with zero config, guarded writes with an encrypted local wallet. Prices,
portfolios, launches, swaps, transfers, transaction decoding — the gh/vercel of Robinhood
Chain. Built on hoodchain and
viem.
Who it's for: anyone tracking Stock Tokens (tokenized equities on Robinhood Chain), watching
NOXA/Odyssey memecoin launches, or scripting swaps and transfers from a terminal or CI job.
Read commands (price, stocks, coins, launches, tx, token, portfolio, watch)
work immediately with no wallet or API key. Write commands (swap, transfer,
deploy-token) need a wallet and always stop for an explicit confirmation before signing.
Docs + a live animated terminal demo (a REAL captured session, not invented output):
https://nirholas.github.io/robinhood-chain-cli/ · full flag-by-flag command reference:
https://nirholas.github.io/robinhood-chain-cli/commands.html (generated straight from hood <command> --help — never hand-written, never drifts from the shipped binary).
npm install -g hood-cliThis installs two equivalent binaries: hood and hoodc.
Run without installing:
npx hood-cli price AAPLFrom a checkout:
git clone https://github.com/nirholas/robinhood-chain-cli.git
cd robinhood-chain-cli
npm install
npm run build
node dist/cli.js price AAPLRequires Node ≥ 20.
$ hood price AAPL
◈ AAPL · Robinhood Chain mainnet
Oracle $315.50
Updated 1d 18h ago
DEX no pool
Premium —
Token 0xaF3D…93f9
$ hood stocks --sort premium --dex --limit 6
◈ Stock Tokens · mainnet · 6 shown · 6 priced
SYMBOL PRICE DEX PREMIUM AGE NAME ADDRESS
────────────────────────────────────────────────────────────────────────────────
CLSK $12.86 $15.51 +20.58% 1d 17h CleanSpark 0xcBB9…Cee3
IONQ $43.08 $49.44 +14.76% 1d 18h IonQ 0x5583…0EfE
NBIS $219.24 $248.41 +13.31% 1d 17h Nebius Group 0x9D9c…7931
$ hood portfolio 0x9701fb0aDe1E269c8f64Ec0C7b3cfADB31A13A52
◈ Portfolio · 0x9701…3A52 · mainnet
ETH 0.003784
USDG $0.0550
Stocks $0.00
Total $0.0550
No Stock Token positions. Fund with `hood swap --sell USDG --buy <ticker>`.
$ hood swap --sell USDG --buy WETH --amount 250
◈ Swap quote · mainnet · add --execute to send
Sell 250 USDG
Buy ~0.138501866807990729 WETH
Min. received 0.137809357473950775 WETH (0.50% slippage)
Rate 1 USDG ≈ 0.000554 WETH
Route direct poolEvery command supports --json for machine-readable output — pipe it into jq or a script.
These apply to every command and must come before the subcommand name (hood --json price AAPL):
| Flag | Description |
|---|---|
-v, --version |
print the CLI version |
--json |
machine-readable JSON output instead of the human-formatted view |
--network <net> |
mainnet (default) or testnet |
--rpc <url> |
override the RPC endpoint for this invocation |
--verbose |
show the raw underlying error cause on failure |
--yes |
skip the interactive yes/no confirmation on writes (still requires --execute) |
--acknowledge-eligibility |
affirm Stock Token acquisition eligibility (you are not a US/CA/UK/CH person) |
--no-color |
disable ANSI colour in human output |
-h, --help |
show help for the command |
| Command | Description |
|---|---|
price <symbol> |
Chainlink oracle price + DEX price + premium for a Stock Token |
stocks |
The full Stock Token board with live Chainlink prices |
coins |
Memecoin screener — newest or trending launches |
launches |
Recent memecoin launches from NOXA and The Odyssey |
portfolio <address> |
Multiplier-correct Stock Token positions + USD totals for an address |
tx <hash> |
Decode a transaction: status, transfers, gas, method |
token <address> |
Inspect a token: metadata, supply, multiplier, price |
watch <addrOrToken> |
Live activity stream for an address or a token (ERC-20 transfers + native ETH) |
swap |
Quote (default) or execute a Uniswap v3 swap between two tokens |
transfer |
Send ETH or an ERC-20 token to an address |
faucet |
Print testnet faucet instructions + current testnet balances |
deploy-token |
Deploy a fixed-supply ERC-20 from a JSON config (direct-rail, no launchpad) |
config |
Manage hood-cli settings (rpc, wallet, network) |
Every argument below is a real, implemented flag — run hood <command> --help at any time to
see it straight from the CLI.
Chainlink oracle price, DEX price, and the premium/discount between them for one Stock Token.
| Flag | Description |
|---|---|
symbol (arg) |
ticker (AAPL) or token address |
--watch |
live-updating view that repaints in place |
--interval <ms> |
refresh interval for --watch (default 4000) |
--max-age <seconds> |
max acceptable Chainlink answer age |
--no-dex |
skip the Uniswap price probe (oracle only) |
hood price AAPL
hood price 0xaF3D... --no-dex
hood price TSLA --watch --interval 2000The full Stock Token board — every canonical, verified Stock Token with a live Chainlink feed.
| Flag | Description |
|---|---|
--sort <key> |
symbol | price | premium (premium implies --dex); default symbol |
--dex |
also probe Uniswap for DEX price + premium (slower) |
--priced |
only show tokens with a live Chainlink feed |
--limit <n> |
show at most n rows |
hood stocks
hood stocks --sort premium --dex --limit 10
hood stocks --priced --jsonScreener over the NOXA/Odyssey bonding-curve launchpads: newest launches, or ranked by trade activity.
| Flag | Description |
|---|---|
--new |
newest launches (default) |
--trending |
rank by bonding-curve trade activity |
--lookback <blocks> |
blocks to scan (default 50000) |
--limit <n> |
rows to show (default 20) |
--names |
resolve token symbols on-chain |
Mainnet only — the launchpads don't exist on testnet.
hood coins --names
hood coins --trending --lookback 100000 --limit 10The raw launch feed for NOXA and The Odyssey, or a live stream of new ones.
| Flag | Description |
|---|---|
--follow |
stream new launches live instead of a snapshot |
--launchpad <name> |
noxa | odyssey (default: both) |
--lookback <blocks> |
blocks to scan for the snapshot (default 30000) |
--limit <n> |
max rows in the snapshot (default 25) |
--names |
resolve each token symbol on-chain |
hood launches --lookback 2000000 --limit 5 --names
hood launches --follow --launchpad odysseyMultiplier-correct Stock Token positions (share-equivalents, not raw balances) plus ETH, USDG, and a USD grand total.
| Flag | Description |
|---|---|
address (arg) |
wallet address to inspect |
--max-age <seconds> |
max acceptable Chainlink answer age |
hood portfolio 0x9701fb0aDe1E269c8f64Ec0C7b3cfADB31A13A52Decodes a transaction: status, from/to, value, method selector, gas, fee, block time, and
every ERC-20 Transfer log inside it (symbols resolved for known Stock Tokens and read
on-chain for anything else).
hood tx 0x870a3bee3070f10e3c4f34271cfde70fd5aa0dc2eade6f07d01ae6c9a00285bdToken metadata: name, decimals, total supply, holder count, the uiMultiplier for Stock
Tokens, Chainlink oracle price (if it has a feed), and DEX price.
| Flag | Description |
|---|---|
address (arg) |
token address or ticker |
hood token AAPL
hood token 0xcBB9...Streams live activity until Ctrl-C. Without --token, a wallet address streams native ETH
in/out plus every USDG transfer touching it (mainnet only — it needs the Stock Token
registry). With --token, or when the argument isn't a valid address, it streams every
transfer of that token.
| Flag | Description |
|---|---|
addrOrToken (arg) |
wallet address, token address, or ticker to watch |
--token |
treat the argument as a token (stream ALL transfers of it) |
hood watch 0x9701fb0aDe1E269c8f64Ec0C7b3cfADB31A13A52
hood watch AAPL --tokenQuotes a Uniswap v3 swap by default; add --execute to sign and send it. Recognizes USDG,
WETH/ETH, any Stock Token ticker, or a raw 0x address for both --sell and --buy.
| Flag | Description |
|---|---|
--sell <token> |
ticker or address to sell (e.g. USDG) — required |
--buy <token> |
ticker or address to buy — required |
--amount <amount> |
amount of --sell to spend, in whole tokens — required |
--slippage <bps> |
slippage tolerance in basis points (default 50 = 0.5%) |
--execute |
sign and send (default: quote only) |
hood swap --sell USDG --buy WETH --amount 250
hood swap --sell USDG --buy AAPL --amount 500 --slippage 100 --execute--execute prints a confirmation table and stops for an explicit y/N unless --yes is
passed. It also checks the configured maxSpendUsd cap (see Configuration below) and
Stock Token acquisition eligibility — a swap that mints/acquires a Stock Token for a
non-affirmed operator fails with a guard error until you pass
--acknowledge-eligibility.
Sends native ETH or an ERC-20 token to an address.
| Flag | Description |
|---|---|
--to <address> |
recipient address — required |
--amount <amount> |
amount to send, in whole tokens — required |
--token <token> |
ticker or address to send (default: native ETH) |
hood transfer --to 0x9701fb0aDe1E269c8f64Ec0C7b3cfADB31A13A52 --amount 0.01
hood transfer --to 0x9701... --amount 100 --token USDGSame confirmation gate and maxSpendUsd cap as swap.
Prints the testnet faucet URL and instructions, plus your current testnet balances if a
wallet is configured. Testnet-only (--network testnet); each claim (browser-only — it
requires Cloudflare Turnstile + Google Sign-In and can't be automated) drips testnet ETH plus
5 each of TSLA, AMZN, PLTR, NFLX, AMD.
hood faucet --network testnetDeploys a fixed-supply ERC-20 (not a Stock Token, not launchpad-listed — a plain direct-rail token) from a JSON config.
| Flag | Description |
|---|---|
--config <path> |
path to a JSON file: { name, symbol, decimals?, initialSupply } — required |
--execute |
sign and send (default: print the deploy plan only) |
Config file example:
{
"name": "My Token",
"symbol": "MTK",
"decimals": 18,
"initialSupply": 1000000
}hood deploy-token --config ./mytoken.json
hood deploy-token --config ./mytoken.json --executeManages the persistent CLI config at ~/.config/hood/config.json (or $HOOD_CONFIG_DIR).
| Subcommand | Description |
|---|---|
config set <key> [value] |
set a config value: network, rpc, testnetRpc, alchemyKey, maxSpendUsd, or wallet |
config get <key> |
print one config value |
config list |
print the full config (secrets masked) |
hood config set network testnet
hood config set rpc https://your-rpc.example.com
hood config set alchemyKey <your-alchemy-key>
hood config set maxSpendUsd 500
hood config set wallet
hood config get walletAddress
hood config listconfig set wallet with no value generates a new private key (or, if
ROBINHOOD_CHAIN_IMPORT_KEY is set, imports it), prompts twice for a password, and writes an
AES-256-GCM keystore (scrypt KDF, Node's built-in crypto — the same primitive set as the
Web3 Secret Storage spec) to ~/.config/hood/keystore.json. The private key never touches the
config file or plaintext disk.
The one-command onboarding wizard for the whole trading stack: this CLI's wallet, the
hood-traders llm-strategist (bring your own key —
Claude, OpenAI, Groq, or OpenRouter), and the hood-alerts
Telegram bot / Discord bot / X (Twitter) auto-posting. Every step is optional — skip anything you
don't need with n or Enter.
hood initIt writes hood-traders.env and hood-alerts.env into the current directory (--out <dir> to
choose another). Copy each into the matching package as .env and run it:
cp hood-traders.env hood-traders/.env && cd hood-traders && npx hood-traders
cp hood-alerts.env hood-alerts/.env && cd hood-alerts && npx hood-alertsNeeds an interactive terminal (secrets are typed, not passed as flags) — in CI or a non-interactive
shell, copy hood-traders/.env.example and hood-alerts/.env.example by hand instead.
Every write command (swap --execute, transfer, deploy-token --execute, config set wallet) needs a signer. Precedence:
ROBINHOOD_CHAIN_PRIVATE_KEYenv var — a hex private key (with or without0xprefix). Best for CI or power users; bypasses the keystore entirely.- The encrypted keystore created by
hood config set wallet, unlocked by a password prompt (or theHOOD_WALLET_PASSWORDenv var, so scripts never need an interactive TTY).
No wallet is required for any read command (price, stocks, coins, launches, tx,
token, portfolio, watch).
| Variable | Purpose |
|---|---|
HOOD_CONFIG_DIR |
overrides the config/keystore directory (default ~/.config/hood) |
HOOD_WALLET_PASSWORD |
wallet keystore password, read non-interactively (for scripts/CI) |
ROBINHOOD_CHAIN_PRIVATE_KEY |
sign with this private key directly, skipping the keystore |
ROBINHOOD_CHAIN_IMPORT_KEY |
private key to import when running hood config set wallet (instead of generating a new one) |
Persistent config keys (hood config set <key> <value>):
| Key | Purpose |
|---|---|
network |
default network for every command: mainnet or testnet |
rpc |
custom mainnet RPC URL |
testnetRpc |
custom testnet RPC URL |
alchemyKey |
Alchemy API key — builds https://robinhood-mainnet.g.alchemy.com/v2/{key} automatically |
maxSpendUsd |
hard USD ceiling on a single swap/transfer; the write is refused if the estimated spend exceeds it (unpriceable tokens are never blocked, only warned about) |
wallet |
special: runs the interactive wallet setup flow described above |
Resolution order for RPC URL: --rpc flag → alchemyKey (mainnet) / testnetRpc → rpc →
the SDK's public default.
| Network | Chain ID | Notes |
|---|---|---|
mainnet (default) |
4663 | Stock Tokens, Chainlink feeds, NOXA/Odyssey launchpads, Uniswap v3 pools all live here |
testnet |
46630 | TSLA, AMZN, PLTR, NFLX, AMD faucet tokens; no launchpads, no Chainlink feeds |
Pass --network testnet on any command, or set it once with hood config set network testnet.
| Code | Meaning |
|---|---|
0 |
success |
1 |
generic runtime failure |
2 |
bad usage / invalid arguments |
3 |
network / RPC unreachable or timed out |
4 |
a guard rail refused the action (eligibility, spend cap, unconfirmed prompt) |
5 |
requested resource not found (unknown symbol, missing transaction) |
6 |
wallet required but not configured, or wrong password |
Every error also prints a human hint on how to fix it; add --verbose to see the raw
underlying cause, or --json to get { error, hint, exitCode } for scripting.
- Stock Token eligibility. Stock Tokens are tokenized securities and may not be acquired
by US/CA/UK/CH persons. Any write that would acquire one refuses to run unless you pass
--acknowledge-eligibility, affirming you are not a person from a restricted jurisdiction. - Confirmation gate.
swap --execute,transfer, anddeploy-token --executealways print a confirmation table and require an explicitybefore signing, unless--yesis passed. On a non-interactive stdin without--yes, the command fails closed rather than hanging or silently proceeding. - Spend cap. Set
maxSpendUsdonce (hood config set maxSpendUsd 500) to have every swap and transfer checked against it before signing.
npm install
npm run build # tsup → dist/cli.js (single self-contained ESM file)
npm run typecheck
npm test # vitest run tests/unit — parsing, formatting, guard rails (offline)
npm run e2e # scripts/e2e.mjs — exercises the BUILT binary against live chain datanpm run compile-erc20 regenerates src/generated/erc20.ts from contracts/ERC20.sol
(the fixed-supply token deploy-token deploys) — only needed if you change the contract.
The docs/ folder is a static site (GitHub Pages, deploy-from-branch, no build step on
Pages itself) whose content is generated, never hand-written:
npm run capture # drives the built binary against live mainnet, saves docs/session.json
npm run docs:commands # generates docs/commands-data.json from the CLI's own --help output
npm run docs:build # stitches both into docs/index.html + docs/commands.html
npm run docs # runs all three in orderdocs/index.template.html and docs/commands.template.html are the editable sources;
docs/index.html and docs/commands.html are the generated, real-data-inlined output that
Pages actually serves — re-run npm run docs after any command change to keep them in sync.
Where it's hosted: GitHub Pages is the default (Settings → Pages → Deploy from a branch → main → /docs) → https://nirholas.github.io/robinhood-chain-cli/. The Deploy to Cloudflare
and Deploy with Vercel buttons at the top of this README are one-click alternatives —
wrangler.json/vercel.json at the repo root both point at docs/ as a plain static folder, no
build command needed. There's no server component to this tool (it's a local CLI), so only the
docs site is deployable — npm install -g hood-cli is how you get the tool itself.
npm run build
npm test
npm pack # verify the tarball installs clean: npm i -g ./hood-cli-*.tgz
npm publish --access publicAll rights reserved. See LICENSE.