mmx-cli Skill
使用 mmx 通过 MiniMax AI 平台生成文本、图像、视频和语音,并转录音频。当用户想创建媒体内容、与 MiniMax 模型对话、将音频转录为文本、进行网页搜索,或在终端管理 MiniMax API 资源时使用。
安装方式:把技能目录放入 ~/.claude/skills/(Claude Code)或在 claude.ai 设置中启用;也可复制右侧安装命令一键添加。
技能指令原文(SKILL.md)
MiniMax CLI — Agent Skill Guide
Use mmx to generate text, images, video, speech, transcribe audio, and perform web search via the MiniMax AI platform.
Prerequisites
# Install
npm install -g mmx-cli
# Auth (OAuth persists to ~/.mmx/credentials.json, API key persists to ~/.mmx/config.json)
mmx auth login --api-key sk-xxxxx
# Verify active auth source
mmx auth status
# Or pass per-call
mmx text chat --api-key sk-xxxxx --message "Hello"
Region is auto-detected. Override with --region global or --region cn.
Agent Flags
Always use these flags in non-interactive (agent/CI) contexts:
| Flag | Purpose |
|---|---|
| --non-interactive | Fail fast on missing args instead of prompting |
| --quiet | Suppress spinners/progress; stdout is pure data |
| --output json | Machine-readable JSON output |
| --async | Return task ID immediately (video generation) |
| --dry-run | Preview the API request without executing |
| --yes | Skip confirmation prompts |
Commands
text chat
Chat completion. Default model: MiniMax-M3.
mmx text chat --message <text> [flags]
| Flag | Type | Description |
|---|---|---|
| --message | string, required, repeatable | Message text. Prefix with role: to set role (e.g. "system:You are helpful", "user:Hello") |
| --messages-file | string | JSON file with messages array. Use - for stdin |
| --system | string | System prompt |
| --model | string | Model ID (default: MiniMax-M3) |
| --max-tokens | number | Max tokens (default: 4096) |
| --temperature | number | Sampling temperature (0.0, 1.0] |
| --top-p | number | Nucleus sampling threshold |
| --stream | boolean | Stream tokens (default: on in TTY) |
| --tool | string, repeatable | Tool definition JSON or file path |
# Single message
mmx text chat --message "user:What is MiniMax?" --output json --quiet
# Multi-turn
mmx text chat \
--system "You are a coding assistant." \
--message "user:Write fizzbuzz in Python" \
--output json
# From file
cat conversation.json | mmx text chat --messages-file - --output json
stdout: response text (text mode) or full response object (json mode).
image generate
Generate images. Model: image-01.
mmx image generate --prompt <text> [flags]
| Flag | Type | Description |
|---|---|---|
| --prompt | string, required | Image description |
| --aspect-ratio | string | e.g. 16:9, 1:1. Ignored if --width and --height are both set |
| --n | number | Number of images (default: 1) |
| --seed | number | Random seed for reproducible generation |
| --width | number | Width in pixels (512–2048, multiple of 8). Requires --height |
| --height | number | Height in pixels (512–2048, multiple of 8). Requires --width |
| --prompt-optimizer | boolean | Optimize prompt before generation |
| --aigc-watermark | boolean | Embed AI-generated content watermark |
| --subject-ref | string | Subject reference: type=character,image=path-or-url |
| --response-format | string | url (default) or base64. Base64 bypasses CDN download |
| --out-dir
|
--out-prefix | string | Filename prefix (default: image) |
mmx image generate --prompt "A cat in a spacesuit" --output json --quiet
# stdout: image URLs (one per line in quiet mode)
mmx image generate --prompt "Logo" --n 3 --out-dir ./gen/ --quiet
# stdout: saved file paths (one per line)
video generate
Generate video. Default model: MiniMax-Hailuo-2.3 (or MiniMax-Hailuo-2.3-Fast for fast mode with --image). This is an async task — by default it polls until completion.
For MiniMax-H3 — text-to-video, first/last-frame, multimodal reference image/video/audio generation, prompt construction, and failure handling — use the dedicated mmx-h3-video skill instead.
mmx video generate --prompt <text> [flags]
| Flag | Type | Description |
|---|---|---|
| --prompt | string, required | Video description |
| --model | string | MiniMax-Hailuo-2.3 (default) or MiniMax-Hailuo-2.3-Fast |
| --image | string | Input image for image-to-video |
| --last-frame | string | Optional ending image for frame interpolation (used with --image) |
| --callback-url | string | Webhook URL for completion |
| --download | string | Save video to specific file |
| --async | boolean | Return task ID immediately |
| --no-wait | boolean | Same as --async |
| --poll-interval | number | Polling interval (default: 5) |
# Non-blocking: get task ID
mmx video generate --prompt "A robot." --async --quiet
# stdout: {"taskId":"..."}
# Blocking: wait and get file path
mmx video generate --prompt "Ocean waves." --download ocean.mp4 --quiet
# stdout: ocean.mp4
video task get
Query status of a video generation task.
mmx video task get --task-id <id> [--output json]
video download
Download a completed video by task ID.
mmx video download --file-id <id> [--out <path>]
speech synthesize
Text-to-speech. Default model: speech-2.8-hd. Max 10k chars.
mmx speech synthesize --text <text> [flags]
| Flag | Type | Description |
|---|---|---|
| --text | string | Text to synthesize |
| --text-file | string | Read text from file. Use - for stdin |
| --model | string | speech-2.8-hd (default), speech-2.6, speech-02 |
| --voice | string | Voice ID (default: English_expressive_narrator) |
| --speed | number | Speed multiplier |
| --volume | number | Volume level |
| --pitch | number | Pitch adjustment |
| --format | string | Audio format (default: mp3) |
| --sample-rate | number | Sample rate (default: 32000) |
| --bitrate | number | Bitrate (default: 128000) |
| --channels | number | Audio channels (default: 1) |
| --language | string | Language boost |
| --subtitles | boolean | Download and save subtitles as .srt file (alongside --out audio file). API must support subtitles for the selected model.
| --pronunciation | string, repeatable | Custom pronunciation |
| --sound-effect | string | Add sound effect |
| --out | string | Save audio to file |
| --stream | boolean | Stream raw audio to stdout |
mmx speech synthesize --text "Hello world" --out hello.mp3 --quiet
# stdout: hello.mp3
mmx speech synthesize --text "Hello" --subtitles --out hello.mp3
# saves hello.mp3 + hello.srt (SRT subtitle file)
echo "Breaking news." | mmx speech synthesize --text-file - --out news.mp3
speech transcribe
Speech-to-text. Default model: asr-1.0. Accepts wav, aiff, flac, m4a, mp3, aac, opus, and
ogg files up to 50 MB and 500 seconds.
mmx speech transcribe --file <path> [flags]
| Flag | Type | Description |
|---|---|---|
| --file | string | Audio file to transcribe (required; also accepted as a positional argument) |
| --model | string | asr-1.0 (default) |
| --response-format | string | json (default), verbose_json, srt, vtt |
| --language | string | BCP-47 language hint (zh, en, ja, ...). Omit for automatic/mixed-language detection |
| --timestamp-level | string | sentence (default) or word; applies to verbose_json / srt / vtt |
| --stream | boolean | Stream incremental text to stdout. Requires --response-format json |
| --out | string | Write the result to a file instead of stdout |
mmx speech transcribe --file meeting.mp3
# stdout: transcript text
mmx speech transcribe --file call.mp3 --language zh --output json
# stdout: {"text":"...","duration":12.3,"trace_id":"..."}
mmx speech transcribe --file talk.mp3 --response-format verbose_json --timestamp-level word --output json
# stdout: adds n_speakers and word-level segments
mmx speech transcribe --file talk.mp3 --response-format srt --out talk.srt
# saves talk.srt; stdout: {"saved":".../talk.srt"}
mmx speech transcribe --file long.mp3 --stream
# stdout: text as it is recognized (add --output text when piping)
Notes:
mmx speech recognize is an alias for mmx speech transcribe.
--stream cannot be combined with --out; redirect stdout instead.
--stream prints deltas only in text output mode. stdout that is not a terminal defaults to
json (as everywhere else in this CLI), which accumulates the streamed text into one JSON
result — pass --output text to pipe streamed text, e.g.
mmx speech transcribe --file long.mp3 --stream --output text > transcript.txt.
srt / vtt results are subtitle documents and are printed or saved verbatim.
- Without
--out, --output json prints the full API response for json / verbose_json.
Plain-text output prints the transcript only, so add --output json to read n_speakers
and segments.
- A stream that ends without the API's final event raises a warning on stderr, since the
transcript may be truncated.
- Input validation (missing file, unsupported format, over 50 MB,
--stream with a non-json
format) fails before anything is uploaded; the API stays the authority for the 500 s duration
limit and codec support.
vision describe
Image understanding via VLM. Provide either --image or --file-id, not both.
mmx vision describe (--image <path-or-url> | --file-id <id>) [flags]
| Flag | Type | Description |
|---|---|---|
| --image | string | Local path or URL (auto base64-encoded) |
| --file-id | string | Pre-uploaded file ID (skips base64) |
| --prompt | string | Question about the image (default: "Describe the image.") |
mmx vision describe --image photo.jpg --prompt "What breed?" --output json
stdout: description text (text mode) or full response (json mode).
search query
Web search via MiniMax.
mmx search query --q <query>
| Flag | Type | Description |
|---|---|---|
| --q | string, required | Search query |
mmx search query --q "MiniMax AI" --output json --quiet
quota show
Display Token Plan usage and remaining quotas.
mmx quota show [--output json]
Tool Schema Export
Export all commands as Anthropic/OpenAI-compatible JSON tool schemas:
# All tool-worthy commands (excludes auth/config/update)
mmx config export-schema
# Single command
mmx config export-schema --command "video generate"
Use this to dynamically register mmx commands as tools in your agent framework.
Exit Codes
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | General error |
| 2 | Usage error (bad flags, missing args) |
| 3 | Authentication error |
| 4 | Quota exceeded |
| 5 | Timeout |
| 10 | Content filter triggered |
Piping Patterns
# stdout is always clean data — safe to pipe
mmx text chat --message "Hi" --output json | jq '.content'
# stderr has progress/spinners — discard if needed
mmx video generate --prompt "Waves" 2>/dev/null
# Chain: generate image → describe it
URL=$(mmx image generate --prompt "A sunset" --quiet)
mmx vision describe --image "$URL" --quiet
# Async video workflow
TASK=$(mmx video generate --prompt "A robot" --async --quiet | jq -r '.taskId')
mmx video task get --task-id "$TASK" --output json
mmx video download --task-id "$TASK" --out robot.mp4
Configuration Precedence
CLI flags → environment variables → ~/.mmx/config.json → defaults.
# Persistent config
mmx config set --key region --value cn
mmx config show
# Environment
export MINIMAX_API_KEY=sk-xxxxx
export MINIMAX_REGION=cn
Default Model Configuration
Set per-modality defaults so you don't need --model every time:
# Set defaults
mmx config set --key default-text-model --value MiniMax-M3
mmx config set --key default-speech-model --value speech-2.8-hd
mmx config set --key default-video-model --value MiniMax-Hailuo-2.3
# Use without --model
mmx text chat --message "Hello"
mmx speech synthesize --text "Hello" --out hello.mp3
mmx video generate --prompt "Ocean waves"
# --model still overrides per-call
mmx text chat --model MiniMax-M3 --message "Hello"
Resolution priority: --model flag > config default > hardcoded fallback.