Guide Python 3.10+

CenterOS CLI

Manage datasets, training jobs, models, and your robot fleet from the terminal. Also usable as a Python SDK.

Updated Apr 2026 pip install centeros-cli

Installation

shell
# From PyPI
$ pip install centeros-cli

# From source (development)
$ git clone https://github.com/JerryAlfred/fearless-platform.git
$ cd fearless-platform/centeros-cli
$ pip install -e .

Requires Python 3.10 or higher. The CLI installs as the centeros command.

Quick Start

The typical workflow: authenticate, list your datasets, create a training job, then deploy the model.

shell
# 1. Authenticate
$ centeros login --username jerry --password '***'
$ centeros whoami

# 2. Create a Personal Access Token for scripts
$ centeros pat create --name "my-agent" --scopes "*"

# 3. Browse your datasets
$ centeros datasets list

# 4. Create a training job
$ centeros training create --name "dp-v1" --model-type diffusion_policy --dataset-ids 1,2

# 5. Launch it
$ centeros training launch <job_id>

# 6. Register and deploy the resulting model
$ centeros models register --name "dp-v1" --artifact-uri gs://bucket/model.pt
$ centeros models promote 5 --to validated
$ centeros fleet deploy --robot arm-01 --model 5

Authentication

Login

shell
$ centeros login --username jerry --password '***'
# Logged in as jerry
# Token stored in ~/.centeros/config.json

$ centeros whoami
# Username: jerry  |  Email: jerry@...  |  Role: admin

$ centeros logout
# Credentials cleared.

Personal Access Tokens

PATs are long-lived tokens for CI/CD, scripts, and agents. They start with frl_.

shell
$ centeros pat create --name "ci-pipeline" --scopes "datasets:read,training:*" --expires-days 90
# PAT created: frl_abc123...
# Store this token securely -- it won't be shown again.

# Use the PAT in CI/CD
$ export CENTEROS_TOKEN=frl_abc123...
$ centeros datasets list

Datasets

CommandDescription
centeros datasets listList all datasets. Options: --project, --limit, --json
centeros datasets get <id>Get detailed info about a single dataset.
centeros datasets uploadRequest a signed upload URL. Options: --name, --format, --robot-type
shell
$ centeros datasets list --limit 10
# +----+--------------+------+-------+----------+
# | ID | Name         | Type | Robot | Size     |
# +----+--------------+------+-------+----------+
# | 42 | grasp-ep-001 | hdf5 | arm   | 52.3 MB  |
# +----+--------------+------+-------+----------+

$ centeros datasets get 42 # full JSON details
$ centeros datasets upload --name "grasp-ep-002" --format hdf5 --robot-type arm

Training

CommandDescription
centeros training listList training jobs. Options: --status, --limit, --json
centeros training createCreate a new job. Options: --name, --model-type, --dataset-ids, --mode, --base-model
centeros training status <id>Check progress of a training job.
centeros training launch <id>Launch a pending training job.
centeros training estimateEstimate cost for given datasets. --dataset-ids
centeros training catalogShow available fine-tune model providers.
shell
$ centeros training catalog
$ centeros training create --name "dp-v1" --model-type diffusion_policy --dataset-ids 1,2
$ centeros training status abc123def456
$ centeros training launch abc123def456
$ centeros training estimate --dataset-ids 1,2,3

Models

CommandDescription
centeros models listList registered models. Options: --status, --name, --limit, --json
centeros models registerRegister a new model. Options: --name, --artifact-uri, --version-tag, --training-job-id
centeros models promote <id>Promote model lifecycle. --to validated|deployed|retired
centeros models lineage <id>Show full lineage: training job, datasets, deployments, evals.
shell
$ centeros models register --name "dp-v1" --artifact-uri gs://bucket/model.pt --training-job-id abc123
$ centeros models list --status draft
$ centeros models promote 5 --to validated
$ centeros models lineage 5

Fleet

CommandDescription
centeros fleet summaryFleet overview: online/offline counts, alerts. --json
centeros fleet robotsList robots. Options: --status, --site-key, --search
centeros fleet deployDeploy a model to a robot. --robot, --model, --strategy
centeros fleet estop <id>Emergency stop a robot. Requires confirmation.
shell
$ centeros fleet summary
# +----------------+-------+
# | Metric         | Value |
# +----------------+-------+
# | Total Robots   | 12    |
# |   online       | 8     |
# |   offline      | 4     |
# | Open Alerts    | 2     |
# +----------------+-------+

$ centeros fleet robots --status online
$ centeros fleet deploy --robot arm-01 --model 5 --strategy immediate
$ centeros fleet estop arm-01

Action Layer (Raw API)

Access the Action Layer directly from the CLI for any action, including those without a dedicated subcommand.

shell
# List all actions, optionally filtered by category
$ centeros actions list
$ centeros actions list --category training

# Execute any action by name
$ centeros actions run list_datasets --params '{"limit": 10}'
$ centeros actions run get_platform_stats --params '{}'
$ centeros actions run create_annotation_task --params '{"title": "Label grasps", "dataset_id": 42}'

Stats & Health

shell
$ centeros stats
# +-------------------+--------+
# | Metric            | Value  |
# +-------------------+--------+
# | Total Datasets    | 247    |
# | Total Size        | 18.3 GB|
# | Total Annotations | 1,204  |
# +-------------------+--------+

$ centeros health --json

Configuration

Credentials are stored in ~/.centeros/config.json. You can override settings with environment variables:

VariableDescription
CENTEROS_API_URLAPI base URL. Overrides the value in config file. Default: production Cloud Run backend.
CENTEROS_TOKENAuth token (JWT or PAT). Overrides stored credentials. Set this for CI/CD pipelines.
CI/CD tip: Set CENTEROS_TOKEN=frl_... in your CI environment and the CLI will authenticate automatically without needing centeros login.

Python SDK

The same centeros-cli package includes a Python SDK for programmatic use in scripts, notebooks, and custom pipelines.

python
from centeros import CenterOSClient

client = CenterOSClient(api_url="https://...", token="frl_...")

# Datasets
datasets = client.datasets.list()

# Training
job = client.training.create(
    name="test-run",
    dataset_ids=[1, 2],
    model_type="diffusion_policy",
)
client.training.launch(job["job_key"])

# Models
models = client.models.list(status="validated")
client.models.promote(5, "deployed")
lineage = client.models.lineage(5)

# Fleet
summary = client.fleet.summary()
client.fleet.deploy("arm-01", model_version_id=5)

# Actions (raw)
result = client.actions.run("get_platform_stats")

The CenterOSClient reads ~/.centeros/config.json by default if no api_url or token are provided. You can also use the CENTEROS_API_URL and CENTEROS_TOKEN environment variables.

Next steps