How to Use RoboNeo CLI
RoboNeo command line tool: chat with AI Agents, create rooms, dispatch tasks, poll results, reply to follow-ups, upload attachments, and download artifacts.
Prerequisites
- Node.js >= 18
- npm
Installation
After global installation, you can use the roboneo command in any directory:
npm install -g @meitu/roboneo-cli@alpha --registry http://npm.meitu-int.com
The package name remains @meitu/roboneo-cli; only the executable command is changed to roboneo.
For local development, execute npm run build:pre from the repository root, then use npm start or node bin/roboneo-cli.js.
Configuration
Required
After loggin in, click on your profile, and select 'API Key' to get your access token:

Access token (consistent with login state). Priority: Environment variables > credentials.json.
export ROBONEO_ACCESS_KEY="Your access token"
Alternatively, write to the local credentials file (~/.roboneo/credentials.json):
roboneo config access_token "<Your access token>"
Commands requiring a token will fail if neither the environment variable nor the local credentials file is configured.
Global Options
roboneo --help
| Option | Description |
|---|---|
| -V, --version | Version number |
| -h, --help | Help |
Command Summary
| Command | Description |
|---|---|
| config list | View current CLI configuration (e.g., access_token with masking) |
| config access_token <token> | Save access_token to the local credentials.json file |
| user-info | Fetch user info using the current token; outputs JSON to stdout |
| create-room | Create a new room; writes to local state and outputs JSON upon success |
| chat | Send a message to a room and return immediately after dispatching; auto-creates a room if none exists; supports single and team modes |
| reply | Reply to AI follow-ups (request) or select options (option_request); returns immediately after dispatching |
| history | Fetch room history list; outputs JSON |
| history-detail | Fetch history details by room ID; supports incremental fetching |
| download | Download room-generated artifacts (images/videos) to local files |
Usage Instructions
- First, use chat to submit questions or tasks
- Next, use history-detail to check progress and results
- If next_action.action is recharge, display next_action.extra.recharge.content and redirect to next_action.extra.recharge.url; after recharging, continue polling history-detail
- If next_action.action is reply, use reply to continue
- Artifacts can be directly fetched from artifacts and saved locally using download
Common Examples
View configuration (token is masked):
roboneo config list
Verify token (optional):
roboneo user-info
Create a room and chat:
roboneo create-room roboneo chat -p "Hello, introduce yourself."
Direct chat (automatically creates a room if none exists):
roboneo chat -p "Help me generate a milk tea poster."
Create a team room and chat:
roboneo create-room --mode team roboneo chat -p "Help me generate an image and a video" --mode team
Chat in a specific room:
roboneo chat -p "Continue our last topic" --room-id "<room_id>"
Poll task results:
# Full fetch (auto-detects single/team mode) roboneo history-detail -r "<room_id>" # Incremental fetch (returns only new messages where seq > N) roboneo history-detail -r "<room_id>" --after-seq 3
Reply to AI follow-ups (used with history-detail polling):
# Reply to request type roboneo reply -r "<room_id>" --last-request-id BLOCK_xxx -p "Reply content" # Reply to request type with attachments roboneo reply -r "<room_id>" --last-request-id BLOCK_xxx -p "Use this image" --image-file ./photo.png # Reply to option_request type (select an option) roboneo reply -r "<room_id>" --last-request-id BLOCK_xxx -p "" --select-option-ids '[["opt_1"]]' # Reply in team mode roboneo reply -r "<room_id>" --mode team --task-id TASK_ID --sub-task-id SUB_TASK_ID --last-request-id BLOCK_xxx -p "Reply content"
Download artifacts:
# Download all artifacts in the room to the current directory roboneo download -r "<room_id>" # Specify output directory roboneo download -r "<room_id>" -o ./output
Subcommand Details
create-room
| Option | Description |
|---|---|
| --mode <mode> | single or team; default is single |
chat
| Option | Required | Description |
|---|---|---|
| -p, --prompt <prompt> | ✅ | Prompt to send |
| --mode <mode> | single or team; default is single | |
| --lang <lang> | Language code; default is zh-Hans. Supported: zh-Hans, zh-Hant, en, pt, ja, es, kor, vi, th, de | |
| --room-id <roomId> | Specify room ID; uses most recently created room by default; auto-creates if none exists | |
| --image-url <url...> | Image URL (jpg, jpeg, png); up to 10 images, or up to 2 if a video is also provided | |
| --image-file <path...> | Local image path (jpg, jpeg, png); single file must not exceed 20 MB; uploads automatically before sending | |
| --video-url <url...> | Video URL (mp4, mov); up to 1 video | |
| --video-file <path...> | Local video path (mp4, mov); single file must not exceed 500 MB; uploads automatically before sending | |
| --file-url <url...> | File URL (xls, xlsx, doc, docx, txt, pdf, mp3, wav, csv, md); up to 1 file | |
| --file <path...> | Local file path (xls, xlsx, doc, docx, txt, pdf, mp3, wav, csv, md); docs must not exceed 10 MB, audio 500 MB; uploads automatically before sending |
reply
| Option | Required | Description |
|---|---|---|
| -r, --room-id <roomId> | ✅ | Room ID |
| --last-request-id <id> | ✅ | Last request ID (BLOCK_xxx, retrieved from history-detail) |
| -p, --prompt <prompt> | ✅ | Reply content (can pass an empty string if only selecting an option for option_request) |
| --mode <mode> | single or team; default is single | |
| --task-id <taskId> | Task ID (required for team mode) | |
| --sub-task-id <subTaskId> | Sub-task ID (team mode) | |
| --select-option-ids <json> | Selected option IDs in JSON 2D array format (e.g., '[["opt_1"]]' or '[["opt_1"],["opt_2"]]') | |
| --lang <lang> | Language code; default is zh-Hans | |
| --image-url <url...> | Image URL (jpg, jpeg, png) | |
| --image-file <path...> | Local image path (jpg, jpeg, png) | |
| --video-url <url...> | Video URL (mp4, mov) | |
| --video-file <path...> | Local video path (mp4, mov) | |
| --file-url <url...> | File URL (xls, xlsx, doc, docx, txt, pdf, mp3, wav, csv, md) | |
| --file <path...> | Local file path |
history-detail
| Option | Required | Description |
|---|---|---|
| -r, --room-id <roomId> | ✅ | Room ID |
| --after-seq <n> | Returns only messages where seq > n (incremental fetching) |
Common history-detail fields:
- next_action: The next step to take
- poll: Task incomplete; continue polling
- recharge: Triggers top-up prompt, asking user to recharge first (extra.recharge.url = WEB_URL + /home?modal=purchase, extra.recharge.content displays copy)
- reply: Requires user to reply to follow-ups or select an option
- done: Process complete
- artifacts: Generated artifacts list
- items: Dialogue and process messages
- max_seq: Used for the next incremental fetch (--after-seq)
recharge response example:
{
"next_action": {
"action": "recharge",
"items": [{ "type": "guide_purchase", "content": "Insufficient credits. Upgrade to a premium membership to continue." }],
"extra": {
"recharge": {
"url": "https://pre.roboneo.com/home?modal=purchase",
"content": "Insufficient credits. Upgrade to a premium membership to continue."
}
}
}
}
The actual value of extra.recharge.url varies by environment (concatenated from WEB_URL).
download
| Option | Required | Description |
|---|---|---|
| -r, --room-id <roomId> | ✅ | Room ID for downloading artifacts |
| -o, --output-dir <dir> | Output directory; default is current directory |
Attachment Rules
- Images and videos can be combined, supporting a maximum of 2 images and 1 video
- If no video is included, up to 10 images are supported
- Up to 1 file is supported
- Files cannot be combined with images/videos
- URLs and local paths can be mixed for the same file type
- File type is determined by extension for both URLs and local paths
- Local file size limits: Images ≤ 20 MB, Videos ≤ 500 MB, Audio ≤ 500 MB, Other files ≤ 10 MB
Attachment examples:
roboneo chat -p "Analyze these images" \\ --image-url https://example.com/a.jpg https://example.com/b.png
roboneo chat -p "Analyze these inputs" \\ --image-url https://example.com/a.jpg \\ --image-file ./local.png
roboneo chat -p "Analyze this video with two images" \\ --video-file ./demo.mp4 \\ --image-file ./a.png ./b.jpg
roboneo chat -p "Summarize this document" \\ --file ./spec.pdf
Recommended Workflow
- Set up ROBONEO_ACCESS_KEY
- (Optional) Verify your token using user-info or config list
- Chat using chat -p "Your prompt" (auto-creates a room if none exists, or use create-room manually)
- Poll for results using history-detail -r ROOM_ID
- If next_action is recharge, prompt the user to top up; continue polling after successful top-up
- If next_action is reply, use reply to respond to follow-ups or select options
- Continue polling history-detail until next_action is done
- Download generated artifacts to a local directory using download -r ROOM_ID -o ./output
- View history records when needed using history / history-detail
Local State
Commands like create-room or chat (during auto-creation) will save room details in the user's directory (default path: ~/.roboneo/storage.json). The chat command relies on the most recently created room by default and auto-creates one if none exists. You can also manually specify an ID with --room-id.
License
ISC