CenterOS CLI
Manage datasets, training jobs, models, and your robot fleet from the terminal. Also usable as a Python SDK.
Installation
# 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.
# 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
$ 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_.
$ 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
| Command | Description |
|---|---|
centeros datasets list | List all datasets. Options: --project, --limit, --json |
centeros datasets get <id> | Get detailed info about a single dataset. |
centeros datasets upload | Request a signed upload URL. Options: --name, --format, --robot-type |
$ 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
| Command | Description |
|---|---|
centeros training list | List training jobs. Options: --status, --limit, --json |
centeros training create | Create 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 estimate | Estimate cost for given datasets. --dataset-ids |
centeros training catalog | Show available fine-tune model providers. |
$ 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
| Command | Description |
|---|---|
centeros models list | List registered models. Options: --status, --name, --limit, --json |
centeros models register | Register 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. |
$ 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
| Command | Description |
|---|---|
centeros fleet summary | Fleet overview: online/offline counts, alerts. --json |
centeros fleet robots | List robots. Options: --status, --site-key, --search |
centeros fleet deploy | Deploy a model to a robot. --robot, --model, --strategy |
centeros fleet estop <id> | Emergency stop a robot. Requires confirmation. |
$ 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.
# 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
$ 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:
| Variable | Description |
|---|---|
CENTEROS_API_URL | API base URL. Overrides the value in config file. Default: production Cloud Run backend. |
CENTEROS_TOKEN | Auth token (JWT or PAT). Overrides stored credentials. Set this for CI/CD pipelines. |
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.
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.