Install
openclaw skills install zilliz-cloudManage Zilliz Cloud clusters and Milvus vector databases — cluster ops, collections, vector search, RBAC, backups, imports, and more via zilliz-cli.
openclaw skills install zilliz-cloudYour Zilliz Cloud console in the terminal. This skill enables you to operate the zilliz-cli, bringing the full power of Zilliz Cloud — cluster management, collection operations, vector search, RBAC, backups, and more — through natural language.
Use this skill when the user wants to:
| Area | What You Can Do |
|---|---|
| Clusters | Create, delete, suspend, resume, modify |
| Collections | Create with custom schema, load, release, rename, drop |
| Vectors | Search, query, insert, upsert, delete |
| Indexes | Create, list, describe, drop |
| Databases | Create, list, describe, drop |
| Users & Roles | RBAC setup, privilege management |
| Backups | Create, restore, export, policy management |
| Import | Bulk data import from cloud storage |
| Partitions | Create, load, release, manage |
| Monitoring | Cluster status, collection stats |
| Billing | Usage, invoices, payment methods |
| Projects | Project and region management |
Before running any zilliz-cli command, verify the following in order:
python3 -m pip install --upgrade zilliz-cli to ensure the latest version is installed.zilliz auth status. If not logged in, guide through login (see below).zilliz context current. If no context, guide through context setup.python3 -m pip install --upgrade zilliz-cli
Verify installation:
zilliz --version
IMPORTANT: Login commands (zilliz login, zilliz configure) require an interactive terminal and CANNOT run inside the AI agent. Always instruct the user to run these in their own terminal.
Check if already logged in:
zilliz auth status
If not logged in, tell the user to open their own terminal and run one of the following:
Option 1: Browser-based login (OAuth) — full feature access
zilliz login
--no-browser in headless environments (displays a URL to visit manually)Option 2a: API Key via login command
zilliz login --api-key
Option 2b: API Key via configure (legacy)
zilliz configure
Option 3: Environment variable
User can add to their shell profile (.zshrc / .bashrc):
export ZILLIZ_API_KEY=<your-api-key>
After the user completes authentication, verify by running:
zilliz auth status
zilliz configure # Interactive API key setup
zilliz configure list # Show all config values
zilliz configure set <key> <value> # Set a config value
zilliz configure get <key> # Get a config value
zilliz configure clear # Clear all credentials
These commands require an interactive terminal. Instruct the user to run in their own terminal:
# Interactive selection
zilliz auth switch
# Direct switch by org ID
zilliz auth switch <org-id>
zilliz logout
Data-plane commands (collection, vector, index, etc.) require an active cluster context.
# Set by cluster ID (endpoint auto-resolved)
zilliz context set --cluster-id <cluster-id>
# Set with explicit endpoint
zilliz context set --cluster-id <cluster-id> --endpoint <url>
# Change database (default: "default")
zilliz context set --database <db-name>
zilliz context current
All zilliz-cli commands support --output json for structured, machine-readable output:
zilliz cluster list --output json
zilliz collection describe --name <name> --output json
Available formats: json, table, text. Default is text.
| Feature | Free | Serverless | Dedicated |
|---|---|---|---|
| Collection CRUD | Yes | Yes | Yes |
| Vector search/query | Yes | Yes | Yes |
| Database create/drop | No | No | Yes |
| User/role management | No | Limited | Yes |
| Backup management | No | Yes | Yes |
| Cluster modify | No | No | Yes |
Guide the user through the complete Zilliz Cloud CLI setup:
python3 --version (need 3.10+)python3 -m pip install --upgrade zilliz-cli then zilliz --versionzilliz auth status; if not logged in, instruct user to run zilliz login in their own terminalzilliz cluster list; if none, offer to create onezilliz context set --cluster-id <id>zilliz context current and zilliz collection listzilliz cluster list
zilliz cluster list --page-size 10 --page 1
zilliz cluster list --all
zilliz cluster describe --cluster-id <cluster-id>
# Serverless (default)
zilliz cluster create --type serverless --name <name> --project-id <project-id> --region <region-id>
# Free tier
zilliz cluster create --type free --name <name> --project-id <project-id> --region <region-id>
# Dedicated
zilliz cluster create --type dedicated \
--name <name> \
--project-id <project-id> \
--region <region-id> \
--cu-type <cu-type> \
--cu-size <cu-size>
To find available project IDs, cloud providers, and regions:
zilliz project list
zilliz cluster providers
zilliz cluster regions
zilliz cluster regions --cloud-id <cloud-id>
zilliz cluster delete --cluster-id <cluster-id>
zilliz cluster suspend --cluster-id <cluster-id>
zilliz cluster resume --cluster-id <cluster-id>
zilliz cluster modify --cluster-id <cluster-id> --cu-size <new-size>
zilliz cluster modify --cluster-id <cluster-id> --replica <count>
zilliz cluster modify --cluster-id <cluster-id> --body '{"cuSize": 2, "replica": 2}'
zilliz cluster providers and zilliz cluster regions.cluster create, poll with zilliz cluster describe until status becomes RUNNING.zilliz context set --cluster-id <id>.All collection commands accept an optional --database <db-name> flag.
zilliz collection list
zilliz collection list --database <db-name>
zilliz collection describe --name <collection-name>
Quick create with auto schema:
zilliz collection create --name <name> --dimension <dim>
# Optional: --metric-type COSINE|L2|IP --id-type Int64|VarChar --auto-id true|false
Advanced create with custom schema:
zilliz collection create --name <name> --body '{
"schema": {
"fields": [
{"fieldName": "id", "dataType": "Int64", "isPrimary": true},
{"fieldName": "vector", "dataType": "FloatVector", "elementTypeParams": {"dim": "768"}},
{"fieldName": "text", "dataType": "VarChar", "elementTypeParams": {"max_length": "1024"}}
]
}
}'
zilliz collection drop --name <collection-name>
zilliz collection rename --name <old-name> --new-name <new-name>
zilliz collection rename --name <old-name> --new-name <new-name> --new-database <db-name>
zilliz collection has --name <collection-name>
zilliz collection load --name <collection-name>
zilliz collection release --name <collection-name>
zilliz collection get-stats --name <collection-name>
zilliz collection get-load-state --name <collection-name>
zilliz collection flush --name <collection-name>
zilliz collection compact --name <collection-name>
zilliz alias create --collection <collection-name> --alias <alias-name>
zilliz alias list --database <db-name>
zilliz alias list --database <db-name> --collection <collection-name>
zilliz alias describe --alias <alias-name>
zilliz alias alter --collection <new-collection-name> --alias <alias-name>
zilliz alias drop --alias <alias-name>
describe to inspect schema before vector operations.All vector commands accept an optional --database <db-name> flag. Target collection must exist and be loaded.
zilliz vector search \
--collection <collection-name> \
--data '[[0.1, 0.2, 0.3, ...]]' \
--limit 10
# Optional:
# --filter 'age > 20 and status == "active"'
# --output-fields '["field1", "field2"]'
# --anns-field <vector-field-name>
zilliz vector hybrid-search \
--collection <collection-name> \
--search '[
{"data": [[0.1, 0.2, ...]], "annsField": "dense_vector", "limit": 10},
{"data": [["search text"]], "annsField": "sparse_vector", "limit": 10}
]' \
--rerank '{"strategy": "rrf", "params": {"k": 60}}' \
--limit 10
# Optional: --output-fields '["field1", "field2"]'
zilliz vector query \
--collection <collection-name> \
--filter 'id in [1, 2, 3]' \
--limit 10
# Optional: --output-fields '["field1", "field2"]'
zilliz vector get \
--collection <collection-name> \
--id '[1, 2, 3]'
# Optional: --output-fields '["field1", "field2"]'
zilliz vector insert \
--collection <collection-name> \
--data '[
{"id": 1, "vector": [0.1, 0.2, ...], "text": "hello"},
{"id": 2, "vector": [0.3, 0.4, ...], "text": "world"}
]'
zilliz vector upsert \
--collection <collection-name> \
--data '[{"id": 1, "vector": [0.1, ...], "text": "updated"}]'
# Optional: --partition <partition-name>
For large datasets, read from file:
zilliz vector insert --collection <name> --data "$(cat data.json)"
zilliz vector delete \
--collection <collection-name> \
--filter 'id in [1, 2, 3]'
# Optional: --partition <partition-name>
| Expression | Example |
|---|---|
| Comparison | age > 20 |
| Equality | status == "active" |
| IN list | id in [1, 2, 3] |
| AND/OR | age > 20 and status == "active" |
| String match | text like "hello%" |
| Array contains | tags array_contains "ml" |
zilliz collection describe for field names and dimensions.--data value must match the collection's vector dimension exactly.All index commands accept an optional --database <db-name> flag.
zilliz index create --collection <collection-name> --body '{
"indexParams": [
{
"fieldName": "vector",
"indexName": "vector_index",
"metricType": "COSINE",
"indexType": "AUTOINDEX"
}
]
}'
Common index types: AUTOINDEX (recommended), IVF_FLAT, IVF_SQ8, HNSW.
Common metric types: COSINE, L2, IP.
zilliz index list --collection <collection-name>
zilliz index describe --collection <collection-name> --index-name <index-name>
zilliz index drop --collection <collection-name> --index-name <index-name>
AUTOINDEX is recommended for most use cases.zilliz database list
zilliz database create --name <db-name>
zilliz database create --name <db-name> --body '{"properties": {}}'
zilliz database describe --name <db-name>
zilliz database drop --name <db-name>
database list works on all cluster types.zilliz context set --database <db-name>.zilliz partition list --collection <collection-name>
zilliz partition create --collection <collection-name> --partition <partition-name>
zilliz partition has --collection <collection-name> --partition <partition-name>
zilliz partition get-stats --collection <collection-name> --partition <partition-name>
zilliz partition load --collection <collection-name> --names '["partition1", "partition2"]'
zilliz partition release --collection <collection-name> --names '["partition1", "partition2"]'
zilliz partition drop --collection <collection-name> --partition <partition-name>
_default partition.Only available on Dedicated clusters.
zilliz user list
zilliz user create --user <username> --password <password>
zilliz user describe --user <username>
zilliz user update-password --user <username> --password <old-password> --new-password <new-password>
zilliz user grant-role --user <username> --role <role-name>
zilliz user revoke-role --user <username> --role <role-name>
zilliz user drop --user <username>
zilliz role list
zilliz role create --role <role-name>
zilliz role describe --role <role-name>
zilliz role grant-privilege \
--role <role-name> \
--object-type <Collection|Global|Database> \
--object-name <name-or-*> \
--privilege <privilege-name>
zilliz role revoke-privilege \
--role <role-name> \
--object-type <Collection|Global|Database> \
--object-name <name-or-*> \
--privilege <privilege-name>
zilliz role drop --role <role-name>
Common privileges:
Search, Query, Insert, Delete, CreateIndex, DropCollectionCreateCollection, AllListCollectionsadmin (full access), public (no privileges by default).* as object-name to grant privilege on all objects of that type.No cluster context required — backup operations use --cluster-id directly.
# Full cluster backup
zilliz backup create --cluster-id in01-xxxxxxxxxxxx
# Collection-level backup
zilliz backup create --cluster-id in01-xxxxxxxxxxxx --database default --collection my_col
zilliz backup list
zilliz backup list --cluster-id <cluster-id>
zilliz backup list --creation-method manual # or: auto
zilliz backup list --backup-type CLUSTER # or: COLLECTION
zilliz backup describe --cluster-id <cluster-id> --backup-id <backup-id>
zilliz backup delete --cluster-id <cluster-id> --backup-id <backup-id>
zilliz backup export \
--cluster-id <cluster-id> \
--backup-id <backup-id> \
--integration-id <integration-id> \
--directory <path>
zilliz backup restore-cluster \
--cluster-id <source-cluster-id> \
--backup-id <backup-id> \
--project-id <project-id> \
--name <new-cluster-name> \
--cu-size <size> \
--collection-status LOADED
zilliz backup restore-collection \
--cluster-id <source-cluster-id> \
--backup-id <backup-id> \
--dest-cluster-id <destination-cluster-id> \
--body '{"collections": [{"source": "col1", "target": "col1_restored"}]}'
zilliz backup describe-policy --cluster-id <cluster-id>
# Enable daily backup
zilliz backup update-policy --cluster-id in01-xxxx --auto-backup true --frequency daily --start-time 02:00 --retention-days 7
# Enable backup on Mon/Wed/Fri
zilliz backup update-policy --cluster-id in01-xxxx --auto-backup true --frequency 1,3,5 --start-time 03:00-05:00 --retention-days 14
# Disable auto-backup
zilliz backup update-policy --cluster-id in01-xxxx --auto-backup false
Target collection must exist on the target cluster.
# Start import job
zilliz import start \
--cluster-id <cluster-id> \
--collection <collection-name> \
--body '{
"files": [["s3://bucket/path/to/file.parquet"]],
"options": {}
}'
# List import jobs
zilliz import list --cluster-id <cluster-id>
zilliz import list --cluster-id <cluster-id> --database <db-name>
# Check import status
zilliz import status --cluster-id <cluster-id> --job-id <job-id>
Supported file formats: Parquet, JSON, CSV.
import status to track progress.Requires OAuth login (not API Key mode).
# Usage
zilliz billing usage --last 7d
zilliz billing usage --month this
zilliz billing usage --month last
zilliz billing usage --month 2026-01
zilliz billing usage --start 2026-01-01 --end 2026-01-31
# Invoices
zilliz billing invoices
zilliz billing invoices --all
zilliz billing invoices --invoice-id inv-xxxxxxxxxxxx
# Bind credit card (instruct user to run in their own terminal)
zilliz billing bind-card --card-number <number> --exp-month <1-12> --exp-year <year> --cvc <code>
bind-card command handles sensitive card data — always instruct the user to run it in their own terminal.zilliz project list
zilliz project describe --project-id <project-id>
zilliz project create --name <project-name> --plan <Free|Serverless|Standard|Enterprise>
zilliz project upgrade --project-id <project-id> --plan <Serverless|Standard|Enterprise>
zilliz volume create --project-id <project-id> --region <region-id> --name <volume-name>
zilliz volume list --project-id <project-id>
zilliz volume delete --name <volume-name>
When the user asks for status, gather and present:
zilliz context current --output jsonzilliz cluster describe --cluster-id <id> --output jsonzilliz database list --output jsonzilliz collection list --output jsonzilliz collection get-stats --name <name> --output json and zilliz collection get-load-state --name <name> --output jsonPresent as:
Cluster: <name> (<cluster-id>) Status: RUNNING | Region: <region> | Plan: <plan> Database: <current-db>
Collections:
| Collection | Rows | Load State |
|---|---|---|
| my_collection | 10,000 | Loaded |
zilliz login, zilliz configure, or zilliz auth switch inside the AI agent — they require interactive input.--output json when parsing results programmatically, then format into readable summaries.