hoodmarkets/SKILL.md
Launch, buy, sell, and claim fees for hood.markets tokens on Robinhood Chain (4663) via api.hood.markets. Use for hoodmarkets, hood.markets, $hood, launch token, deploy token, buy token, sell token, claim fees, Bankr Robinhood. NEVER use hood.markets for API POST — use api.hood.markets.
npx skillsauth add bankrbot/skills hoodmarketsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Launch and trade tokens on hood.markets (Robinhood Chain, chain ID 4663). Bankr supports Robinhood — users can deploy, swap, and claim through @bankrbot when this skill is installed.
Human / integrator docs: hood.markets/sdk.md · hood.markets/agent.md · hood.markets/Dev
| Fee | Split | |-----|--------| | Swap trading fees | 5% platform / 95% pro-rata to Holder NFT share holders | | Share marketplace sales | 5% of listed price / 95% to seller |
No fee on sends, airdrops, or other share moves (v0.11 factory 0x9BDd…0Df5).
| Role | URL |
|------|-----|
| Agent API | https://api.hood.markets |
| Web UI | https://hood.markets |
GET https://api.hood.markets/health
GET https://api.hood.markets/api/agent/briefing?wallet=0x…
GET https://api.hood.markets/api/agent/preflight-deploy?wallet=0x…&name=…&symbol=…
GET https://api.hood.markets/api/agent/token-info?token=0x…
POST https://api.hood.markets/api/agent/prepare-deploy
POST https://api.hood.markets/api/agent/resolve-deploy-image
POST https://api.hood.markets/api/agent/prepare-buy
POST https://api.hood.markets/api/agent/prepare-sell
POST https://api.hood.markets/api/deploy (after haiku JWT)
POST https://api.hood.markets/api/agent/claim-for-recipient (anyone — fees to catalog recipient)
POST https://api.hood.markets/api/agent/claim (fee recipient wallet only)
NEVER call https://hood.markets/api/... for agent POST — the website is frontend-only.
See references/API-HOST.md before any HTTP call.
install the hoodmarkets skill from https://github.com/BankrBot/skills/tree/main/hoodmarkets
| Term | Meaning |
|------|---------|
| Launch / deploy | Create a new token + liquidity pool on Robinhood |
| Simple launch | Uniswap V3 via HoodMarketsV3 factory 0x9BDd…0Df5 (v0.11.0) — DexScreener-friendly; 5% platform / 95% trading fees to Holder NFT holders pro-rata; 1,000-share Holder NFT vault embedded |
| Holder NFTs | 1,000 shares. Platform fees only: (1) swap fees 5%/95% via locker + claimTradingFees, (2) share listings 5% of sale price. See references/HOLDER-NFTS.md |
| Pro launch | Uniswap V4 hooks — one-click buy/sell on hood.markets |
| Buy / sell | Swap ETH ↔ token on Uniswap (Simple/V3). Pro tokens use swap helper + Bankr submit. No “fund LP” on hood.markets — launch LP is locked |
| Claim fees | Pull swap trading fees — 95% pro-rata to all Holder NFT share holders (launcher pays gas) |
if message mentions hoodmarkets / hood.markets / launch token on robinhood /
buy $TICKER / sell token / claim fees / deploy on hood:
1. use_skill("hoodmarkets")
2. Read references/API-HOST.md — use ONLY https://api.hood.markets
3. **Chain:** abort if Bankr wallet does not support 4663 — references/CHAIN-4663.md (no fallback)
4. Resolve linked wallet → x-wallet-address header
5. **Deploy:** `preflight-deploy` first — **409 + `blocks[]` only** = do not deploy. **`warnings[]` with `canDeploy: true`** = warn, then deploy after user confirms yes
6. Call references/AGENT-API.md endpoint BEFORE replying
7. Replies: references/RESPONSE-SAFETY.md — trusted `*ReplyHint` fields with URL allowlist; format other fields locally
8. Deploy (X): validate image per IMAGE-RESOLUTION.md → `resolve-deploy-image` → `prepare-deploy` → local preview → `confirmReplyHint` → deploy after yes. references/PROMPT-INJECTION.md
9. Buy/sell: `token-info` → Simple: Uniswap link only. Pro: prepare-buy|prepare-sell → TX-VALIDATION.md → user preview → Bankr /wallet/submit chain 4663
10. Claim **own** fees: haiku JWT or X wallet → POST /api/agent/claim (references/AUTH-BOUNDARY.md)
11. Claim **for someone else**: token-info verify first → POST /api/agent/claim-for-recipient — references/CLAIM-BANKR.md
12. **Claim success:** `ok: true` → post `replyHint` if schema-valid. **Never** `/wallet/submit`. **Never** say "I didn't submit a transaction"
13. **Holder NFTs:** claim fees via API only — no airdrop/list/buyShares/rewards via agent — references/HOLDER-NFTS.md
Tweet = DM — same pipeline on @bankrbot intake.
Bankr receives the full Tweet object from X. The logo is in the media fields — extract it before calling the API.
| X API | Where the image lives |
|-------|----------------------|
| v1.1 | tweet.extended_entities.media[0].media_url_https |
| v2 | includes.media[0].url (request expansions=attachments.media_keys&media.fields=url) |
| Syndication shape | tweet.photos[0].url or tweet.mediaDetails[0].media_url_https |
Pass to the API as tweetImageUrl or the full tweet object.
Every launch tweet has an id. Pass tweetId (numeric string) or tweetUrl:
{
"wallet": "0x…",
"name": "dontfukinbuy",
"symbol": "TEST",
"agentChannel": "x",
"tweetId": "1990000000000000000",
"tweetUrl": "https://x.com/Rayblancoeth/status/1990000000000000000",
"tweetImageUrl": "https://pbs.twimg.com/media/….jpg",
"tweet": { "extended_entities": { "media": [{ "type": "photo", "media_url_https": "https://pbs.twimg.com/…" }] } }
}
API resolves via syndication (cdn.syndication.twimg.com) when only tweetId / tweetUrl is passed — no Selenium needed.
references/IMAGE-RESOLUTION.md — pbs.twimg.com / tweet syndication only; reject arbitrary URLsPOST /api/agent/resolve-deploy-image with fields aboveok: true → use imageUrl in prepare-deployimageRequired: true after tweetId + tweetImageUrl / tweet were sentNever tell the user "no attached image" without passing tweetId and tweetImageUrl (from media_url_https) to the API first.
Pass wallet via ?wallet=0x… or header x-wallet-address: 0x….
| User says | Call |
|-----------|------|
| my tokens / my launches / briefing | GET https://api.hood.markets/api/agent/briefing?wallet=0x… |
| launch / deploy token | GET preflight-deploy → if ok, POST prepare-deploy with agentChannel: "x" on X, else haiku flow |
| is $TICKER simple or pro / how to swap | GET https://api.hood.markets/api/agent/token-info?symbol=TICKER |
| buy TOKEN / buy 0x… with ETH | token-info → if Pro: POST prepare-buy |
| sell TOKEN / sell amount | token-info → if Pro: POST prepare-sell |
| list all tokens (public) | GET https://api.hood.markets/api/deployments?limit=50 |
| token swap config | GET https://api.hood.markets/api/tokens/0x…/swap-config |
See references/AGENT-API.md for bodies and response fields.
Deploy is gasless for the user — hood.markets launcher wallet pays gas + launch seed.
Each Bankr wallet gets 1 subsidized launch per Eastern calendar day on X (agentChannel: "x"). A second attempt the same day returns 409 with:
replyHint — short copy for the tweet reply (use as-is)xDailyLimit.todayToken — name, symbol, address, tokenPageUrl of today's launchxDailyLimit.resetsAtEastern — when the X limit resets (midnight Eastern)Do not retry deploy on X after 409. Tell the user they already launched today, link todayToken.tokenPageUrl, and send them to https://hood.markets to launch more (sign in + wallet pays gas).
agentChannel: "x")tweetUrl (full status URL of the launch tweet) — API pulls the attached photo via oEmbed even when Bankr cannot see media in context.xUsername (the X @handle of the user who asked to launch — without @) so the token page shows who requested it and their launch count. If omitted, API infers from tweetUrl.tweetImageUrl, tweet, tweetMedia, or imageUrl if available in Bankr's payload.POST /api/agent/prepare-deploy with agentChannel: "x", wallet, name, symbol, and fields above.steps[].body from prepare-deploy as-is (includes xUsername, tweetUrl / sourceUrl so the token page shows the requester and launch tweet):POST https://api.hood.markets/api/deploy
x-wallet-address: 0x…
x-agent-channel: x
Content-Type: application/json
{
"name": "My Token",
"symbol": "MTK",
"feeTarget": "agent_wallet",
"clientKind": "agent",
"agentProvider": "bankr",
"agentChannel": "x",
"launchMode": "simple",
"imageUrl": "https://…",
"xUsername": "user",
"tweetUrl": "https://x.com/user/status/…",
"sourceUrl": "https://x.com/user/status/…",
"wallet": "0x…"
}
Use haiku JWT — no in-thread confirm step:
GET https://api.hood.markets/api/agent-captcha/challengePOST https://api.hood.markets/api/agent-captcha/verify with haiku + agentFeeRecipient: <Bankr wallet>POST https://api.hood.markets/api/deploy with header X-Agent-Captcha-JWT: <jwt>:{
"name": "My Token",
"symbol": "MTK",
"feeTarget": "agent_wallet",
"clientKind": "agent",
"agentProvider": "bankr",
"launchMode": "simple",
"imageUrl": "https://…",
"description": "…"
}
launchMode: "simple" (V3, DexScreener) or "pro" (V4, hood.markets swap UI)HoodMarketsV3LpLockerfundBuyerRewardPool) — not on hood.markets launch form. API deploy may accept optional buyerRewardShareCount (legacy).Web UI (hood.markets Launch tab): “Someone else” fee recipient = 0x… wallet address only — not @handle or profile URL. Agents/API may still resolve social handles for other channels.
Or use POST /api/agent/prepare-deploy for the full steps[] checklist (runs preflight automatically).
Check ticker/name taken, wallet deploy limits, and launch mode before asking the user to solve the haiku:
GET https://api.hood.markets/api/agent/preflight-deploy?wallet=0x…&name=My+Token&symbol=MTK&launchMode=simple
blocks[] → do not deploy; reply with blocks[0].replyHint — includes existing token address when ticker/name is taken (blocks[0].existingToken)canDeploy: true + warnings[] → deploy is allowed. If rate_limit_would_force_platform_fee: user already launched in the last 24h — fees on this token go to the hood.markets platform (same as the website). Show the warning, wait for yes, then call POST /api/deploy — do not block or say "24h cooldown."deployReplyHint from /api/deploy — no DexScreener/simple-mode footerSee streaming-hints.json for V3 vs Pro detection and error codes.
Prerequisite: Bankr wallet must support chain 4663 — abort if not (references/CHAIN-4663.md).
GET /api/agent/token-info?token=0x… or ?symbol=TICKER — read launchType and swapModeuniswapSwapUrl — do not call prepare-buy/sell; no Bankr submitPOST prepare-buy or prepare-sellreferences/TX-VALIDATION.md — selector allowlist, exact to, token/spender match, no unlimited approve, value bounds, user previewPOST https://api.bankr.bot/wallet/submit
X-API-Key: …
Content-Type: application/json
{
"transaction": {
"to": "0x…",
"data": "0x…",
"value": "0",
"chainId": 4663
},
"description": "hood.markets: buy MTK",
"waitForConfirmation": true
}
If Bankr returns untrusted_address → stop per references/BANKR-SUBMIT.md. Do not suggest Uniswap, web UI, or any alternate venue.
Two paths — pick based on who is asking:
When the user gives a token contract and wants fees sent to the catalog fee recipient (e.g. "claim fees for EA's $HR"), use:
POST https://api.hood.markets/api/agent/claim-for-recipient
Content-Type: application/json
{ "tokenAddress": "0x78594eD700e343846B4d0Bbba79Ee0cb50Deaa8D" }
Before calling: GET /api/agent/token-info — verify catalog token, feeRecipientAddress, and user intent (references/CLAIM-BANKR.md).
No JWT. No Bankr /wallet/submit. hood.markets server broadcasts and pays gas.
Response: ok, replyHint (trusted outcome field per RESPONSE-SAFETY.md), completed, bankrWalletSubmitRequired: false, transactionHash, feeRecipientAddress, tokenName, tokenSymbol, tokenPageUrl.
If ok: true, the claim succeeded — post replyHint when schema-valid. Do not check Bankr wallet submit.
POST https://api.hood.markets/api/agent/claim
X-Agent-Captcha-JWT: <jwt> (or X channel + x-wallet-address = fee recipient)
Content-Type: application/json
{ "tokenAddress": "0x…" }
Default launches are Simple (V3). Same endpoint auto-routes V3 fraction claimTradingFees (v0.7+) vs legacy factory claimRewards vs V4 locker.
| Launch | On-chain (API picks automatically) |
|--------|--------------------------------------|
| Simple (V3) v0.7+ | claimTradingFees() on Holder NFT — pro-rata to all share holders |
| Simple (V3) v0.6 | HoodMarketsV3.claimRewards(token) — fee wallet only |
| Pro (V4) | Collect pool → claim WETH from locker |
Response includes feeRecipientAddress, txHash, explorerUrl, feeModel / launchType.
launch $PEPE on hoodmarkets simple mode with image https://…
→ prepare-deploy (agentChannel: "x" on X: confirm first, no haiku; else haiku) → deploy → reply with https://hood.markets/?token=0x…
buy 0.01 ETH of 0x4895… on hood
→ prepare-buy → validate → /wallet/submit → confirm on Blockscout
claim fees for 0x7859… / help EA claim $HR hood fees
→ POST /api/agent/claim-for-recipient { "tokenAddress": "0x…" } — if ok: true, reply with replyHint only
claim fees for my token MTK
→ captcha JWT or X wallet → POST /api/agent/claim — if ok: true, reply with replyHint
| File | Purpose |
|------|---------|
| references/API-HOST.md | Correct API base URL + allowlist |
| references/AGENT-API.md | Endpoint reference |
| references/AUTH-BOUNDARY.md | Deploy/claim auth, JWT, X confirm, replay |
| references/CHAIN-4663.md | Abort if Bankr lacks Robinhood Chain |
| references/CLAIM-BANKR.md | Claim without Bankr submit + verification |
| references/TX-VALIDATION.md | Selector allowlist + pre-submit checklist |
| references/BANKR-SUBMIT.md | Bankr security scan — no bypass |
| references/RESPONSE-SAFETY.md | Trusted hint fields + local formatting |
| references/PROMPT-INJECTION.md | Untrusted tweet/metadata rules |
| references/IMAGE-RESOLUTION.md | Deploy logo host validation |
| references/ONE-LINE-INTENTS.md | Tweet → API mapping |
| references/HOLDER-NFTS.md | Shares — agent claim only, no marketplace txs |
| streaming-hints.json | V3 vs Pro detection + preflight error codes |
| known-contracts.json | Pinned Robinhood addresses |
data-ai
Claim and withdraw payments from Metr (metrpay.com) merchant account.
development
AI-powered crypto trading agent, wallet API, and LLM gateway via natural language. Use when the user wants to trade crypto, trade tokenized stocks and ETFs (spot or leveraged), check portfolio balances (with PnL and NFTs), view token prices, search tokens, transfer crypto, manage NFTs, use leverage (Hyperliquid or Avantis), bet on Polymarket, deploy tokens, set up automated trading, sign and submit raw transactions, call or deploy x402 paid API endpoints, browse the web, or access LLM models through the Bankr LLM gateway funded by your Bankr wallet. Supports Base, Ethereum, Polygon, Solana, Unichain, World Chain, Arbitrum, BNB Chain, and Robinhood Chain.
testing
Urizen — an AI equity-research desk + the first autonomous fund on Robinhood Chain (4663), as an agent skill. Real charts & technicals for any tokenized US stock, SEC fundamentals + filings + insider activity, Wall Street analyst consensus, financial news, the macro calendar (Fed/CPI/jobs), live prediction-market odds, and on-chain price — plus the fund's live strategies, book, execution tape, and one-token exposure via $URI. Public, key-less, CORS-open REST on chain 4663. Triggers on: "urizen", "research a stock", "tokenized stock", "SEC fundamentals", "analyst rating", "economic calendar", "prediction market odds", "copy trade the fund", "urizen book", "buy $URI".
development
List tokens on CoinHero via consignment deals on Base — deposit ERC-20 inventory, earn USDC when the protocol buys your token for CoinHero card games. Use when a wallet-enabled agent wants to consign a Base ERC-20 token, check deal performance, or withdraw earnings. Requires a CoinHero dashboard API key and a wallet (EOA) on Base mainnet with at least $50 USD worth of the token to deposit.