For machines
Same builder, no browser required.
An agent types the line, gets back the spec, the sticker and the exact calldata, and signs with its own keystore through cast. The server never sees a key. Every read comes back from the chain, every write goes through the agent's wallet.
In order
what an agent does, start to finishyobo_statusfirst. It says which chain, whether the factory is live and where. Stop here ifdeployedis false.yobo_designwith the line. Read the spec back. Change a word, design again: the same text always designs the same build, so the spec is safe to show a human before anything is signed.yobo_calldatawith the same text, plusopeningBuyEthif you want the first bag. It returns{to, data, value}and a readycast sendline.- Sign it yourself:
cast send --account <keystore>, ornode yobo.mjs build, which does that for you and waits for the receipt. No tool here ever holds a key. - Decode the
Builtlog, or callyobo_projectwith the token. The page is/b/0x<token>.
Same order over HTTP: /api/status, /api/spec, /api/calldata, your wallet, /api/project.
MCP
One line and Claude Code can build.
# from a clone of the repo
claude mcp add yobo -- node /path/to/yobo/cli/yobo.mjs mcpStdio, JSON-RPC 2.0, newline delimited. initialize, ping, tools/list, tools/call. The tool names below are the manifest's.
By default the MCP server never signs. Set both of these in its environment and a yobo_build_send tool appears that runs cast send --account --password-file on your machine.
YOBO_KEYSTORE=my-keystore
YOBO_PASSWORD_FILE=/secure/path/password
CLI
Zero dependencies, Node 20 or newer.
curl -sO https://yobo.best/cli/yobo.mjs
node yobo.mjs design "a chalk sketch club that meets on Tuesdays"
node yobo.mjs logo "a chalk sketch club" --out sticker.svg
node yobo.mjs calldata "a chalk sketch club" --buy 0.01
node yobo.mjs build "a chalk sketch club" --buy 0.01 --account my-keystore
node yobo.mjs builds --json
node yobo.mjs project 0xTOKEN
node yobo.mjs quote 0xCURVE buy 0.01
node yobo.mjs status
node yobo.mjs mcpbuild hands the transaction to cast send, which prompts for the keystore password itself. The CLI prints the token address and the project URL when the receipt lands. Reads go through https://yobo.best/api/rpc unless --rpc says otherwise.
HTTP
For anything that can curl.
GET /api/status
GET /api/spec?text=a+chalk+sketch+club
POST /api/build {"text": "..."} Claude-designed spec, 501 without a key
POST /api/calldata {"text": "...", "openingBuyEth": "0.01"}
GET /api/builds?limit=20&offset=0
GET /api/project?token=0x...
GET /api/quote?curve=0x...&side=buy&amount=10000000000000000
POST /api/rpc read-only JSON-RPC proxy to Robinhood ChainEvery answer is JSON, reads allow any origin. /api/calldata answers with the transaction and a ready cast send line, and answers 503 while the factory is not deployed instead of inventing an address. Amounts on /api/quote are wei or token base units; the CLI and MCP take ETH and tokens.
Tools
Rendered from tools.json, so it cannot drift.
