Metadata-Version: 2.5
Name: kiteml-cli
Version: 0.7.0
Summary: Kite CLI and MCP server: train robot policies with reinforcement learning in simulation, augment LeRobot datasets, and build MuJoCo digital twins, from your terminal or an AI agent.
Project-URL: Homepage, https://kiteml.com
Project-URL: Documentation, https://docs.kiteml.com/tools/cli-and-mcp
Project-URL: API reference, https://docs.kiteml.com/platform-api/overview
Project-URL: Dashboard, https://app.kiteml.com
Project-URL: MCP server, https://mcp.kiteml.com/mcp
Project-URL: Blog, https://kiteml.com/blog
Author-email: Kite ML <raul@kiteml.com>
License-Expression: Apache-2.0
Keywords: ai agents,claude,cli,cursor,data augmentation,dataset augmentation,digital twin,humanoid,imitation learning,kite,legged robots,lerobot,mcp,mcp-server,model context protocol,mujoco,onnx,policy evaluation,policy training,reinforcement learning,rl,robot learning,robot policy,robotics,sim-to-real,simulation,vla
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.10
Requires-Dist: httpx<1,>=0.25
Requires-Dist: rich>=13.0
Requires-Dist: typer>=0.15.4
Provides-Extra: all
Requires-Dist: mcp<2,>=1.0; extra == 'all'
Provides-Extra: dev
Requires-Dist: mcp<2,>=1.0; extra == 'dev'
Requires-Dist: pytest-asyncio; extra == 'dev'
Requires-Dist: pytest>=7.0; extra == 'dev'
Requires-Dist: ruff; extra == 'dev'
Provides-Extra: mcp
Requires-Dist: mcp<2,>=1.0; extra == 'mcp'
Description-Content-Type: text/markdown

# Kite CLI and MCP server

Robot learning on cloud GPUs, from your terminal or your AI agent. Kite trains robot policies with
reinforcement learning in simulation, evaluates policies on Kite SDK specs, augments LeRobot datasets, and rebuilds
robot episodes as MuJoCo digital twins. This package gives you the `kite` command line and the `kite-mcp` server for Claude, Cursor, and any
Model Context Protocol (MCP) client.

<!-- mcp-name: com.kiteml/kite -->

- **RL training in simulation.** Describe a behavior in plain English. Kite writes the task spec, checks its
  rewards for free, and trains the policy on a GPU. You get the policy as ONNX, the MuJoCo scene it trained in, and
  clips.
- **RL verdicts.** Every RL run ends with a report: a pass, needs_review or fail verdict from measured checks
  (falls per minute, survival, command tracking, gait, posture), plus a vision model's read of the clip.
- **Dataset augmentation.** Relight a LeRobot dataset on Hugging Face or in a public S3 bucket to match a deployment
  scene, or generate new variations of it with video augmentation. Output is a standard LeRobot dataset (Parquet +
  MP4), downloaded or pushed to Hugging Face.
- **Digital twins (beta).** Point Kite at one episode of a LeRobot dataset and get an interactable MuJoCo scene of the
  room, with the objects the robot handles built to size.
- **Evaluations (beta).** Evaluate a policy by running a Kite SDK spec on Kite's machines, on an NVIDIA L4 for a GPU
  policy: every episode traced, every evaluator scored. You get a scorecard and the run directory, which
  `kite verify` checks.

## Install

```bash
pip install "kiteml-cli[mcp]"
```

Python 3.10 or later. Drop `[mcp]` if you only want the CLI.

## Sign in

```bash
kite auth login     # opens the dashboard; stores a 90-day API key
kite doctor         # checks the API is reachable and your key works
```

On a server or in CI, set an API key from [app.kiteml.com](https://app.kiteml.com) instead:

```bash
export KITE_API_KEY=kite_...
```

## Use it from an AI agent

Kite hosts the MCP server, so there's nothing to run:

```bash
claude mcp add --transport http kite https://mcp.kiteml.com/mcp
```

Or run it locally over stdio with this package:

```bash
claude mcp add kite -e KITE_API_KEY=$KITE_API_KEY -- kite-mcp
```

For Cursor and other clients, add `{"mcpServers": {"kite": {"url": "https://mcp.kiteml.com/mcp"}}}` to the MCP
config. Then ask, for example: "train the Open Duck Mini to walk forward and tell me when it passes", or "relight
lerobot/pusht to look like this photo".

| Tools | What they do |
| --- | --- |
| `kite_rl_catalog`, `kite_rl_plan`, `kite_rl_validate` | See which robots and objectives RL runs support, and plan and check a training spec for free |
| `kite_rl_train`, `kite_rl_fork`, `kite_rl_cancel` | Start, branch from, and stop RL runs |
| `kite_rl_status`, `kite_rl_metrics`, `kite_rl_report`, `kite_rl_list` | Follow training and read each run's verdict |
| `kite_augment_create`, `kite_augment_status`, `kite_augment_list`, `kite_augment_cancel` | Augment LeRobot datasets |
| `kite_twin_validate`, `kite_twin_create`, `kite_twin_status`, `kite_twin_list`, `kite_twin_cancel`, `kite_twin_resume` | Build MuJoCo digital twins (beta) |
| `kite_eval_validate`, `kite_eval_run`, `kite_eval_status`, `kite_eval_list`, `kite_eval_report`, `kite_eval_logs`, `kite_eval_cancel`, `kite_eval_resume` | Evaluate a policy on a Kite SDK spec on Kite's machines and read the scorecard (beta) |
| `kite_doctor` | Check connectivity and authentication |

## Use it from the terminal

Train a walking policy for the Open Duck Mini v2:

```bash
kite rl plan open_duck_mini_v2 "walk forward at a steady pace" -o walk.json
kite rl validate walk.json                 # free: what each reward term pays canned policies
kite rl train walk.json --budget probe --wait
kite rl report rlr_...                     # the verdict and each check behind it
kite rl download rlr_...                   # -> kiteml_rlr_.../policy/policy.onnx
```

Augment a dataset:

```bash
kite augment create --repo-id lerobot/pusht \
  -i "change the table surface to white marble, vary the lighting" -n 20 --wait
kite augment download aug_... -o ./pusht-marble
```

`--repo-id` takes a Hugging Face id (`lerobot/pusht`), its `huggingface.co/datasets/` URL, or an S3 link to the
dataset's folder in a public bucket (`s3://bucket/dataset/`).

Build a digital twin (beta, enabled per account):

```bash
kite twin create lerobot/svla_so101_pickplace --robot so101 --out ./twins   # -> ./twins/twin_.../scene.xml
```

Evaluate a policy on a Kite SDK spec, on Kite's machines (beta):

```bash
kite eval validate specs/smoke.yaml            # free: the plan and what a run reserves
kite eval run specs/smoke.yaml --out ./runs    # -> ./runs/eval_.../scorecard.json
```

A file too big to send, such as a checkpoint's weights, can come from the Hugging Face Hub or a public S3 bucket:
`--hf PATH=OWNER/NAME@COMMIT:FILE` or `--hf PATH=<the file's huggingface.co URL>`, and `--s3 PATH=s3://BUCKET/KEY`,
PATH being the path the spec names. A checkpoint of one of your Kite training runs goes as
`--training-run PATH=trn_...[@STEP]` (its latest without `@STEP`), PATH being the checkpoint folder the spec names:
Kite reads it from its own storage and publishes nothing.

Every command prints JSON (`{"ok": true, "data": ...}`) so scripts and agents can parse it. Run `kite --help` for
the full list.

## Links

- Docs: [CLI and MCP](https://docs.kiteml.com/tools/cli-and-mcp) ·
  [RL runs](https://docs.kiteml.com/platform-api/rl-runs) ·
  [Augmentations](https://docs.kiteml.com/platform-api/augmentation) ·
  [Twins](https://docs.kiteml.com/platform-api/twins) ·
  [Evaluations](https://docs.kiteml.com/platform-api/evaluations)
- Dashboard: [app.kiteml.com](https://app.kiteml.com)
- Website: [kiteml.com](https://kiteml.com)
- Support: [raul@kiteml.com](mailto:raul@kiteml.com)
