FoodforThought CLI
GitHub-like CLI tool for the FoodforThought robotics repository platform.
Version: 0.2.1
PyPI: https://pypi.org/project/foodforthought-cli/
Naming guide (CLI vs SDK vs package)
FoodforThought ships two separate Python tools. They have different names on purpose:
| Name | What it is | Install / use |
|---|---|---|
foodforthought-cli |
The PyPI package that installs the CLI | pip install foodforthought-cli |
ate |
The command that package puts on your PATH | ate init my-project |
kindly |
The Python SDK — a separate package and import name, used inside training scripts | pip install kindly, from kindly import load_skill |
kindly-robotics |
The GitHub organization — not a package; never pip install kindly-robotics |
— |
Rule of thumb: use the ate CLI (foodforthought-cli) for the terminal
workflow (init, commit, push, generate, deploy); use the kindly SDK to
load skill data and check compatibility from Python. See the
Kindly SDK README for the SDK.
Installation
pip install foodforthought-cli
Or install from source:
cd foodforthought-cli
pip install -e .
Configuration
Set environment variables:
export ATE_API_URL="https://kindly.fyi/api"
export ATE_API_KEY="your-api-key-here"
Usage
Initialize a repository
ate init my-robot-skill -d "A skill for my robot" -v public
Clone a repository
ate clone <repository-id>
Create a commit
ate commit -m "Add new control algorithm"
Push to remote
ate push -b main
Deploy to robot
ate deploy unitree-r1
Commands
Repository Management
ate init <name>- Initialize a new repositoryate clone <repo-id>- Clone a repositoryate commit -m <message>- Create a commitate push [-b <branch>]- Push commits to remote
Skill Pipeline
ate pull <skill-id> [--robot <robot>] [--format json|rlds|lerobot] [--output ./data]- Pull skill data for trainingate upload <video-path> --robot <robot> --task <task> [--project <id>]- Upload demonstrations for labelingate check-transfer --from <source-robot> --to <target-robot> [--skill <id>]- Check skill transfer compatibilityate labeling-status <job-id>- Check labeling job status
Parts & Dependencies (New in v0.2.0)
ate parts list [--category gripper]- List available hardware partsate parts check <skill-id>- Check part compatibility for a skillate parts require <part-id> --skill <skill-id>- Add part dependency to a skillate deps audit- Verify all dependencies are compatible
Text-to-Skill Generation (New in v0.2.0)
ate generate "<description>" --robot <robot> --output ./skill/- Generate skill skeleton from natural language
Example:
ate generate "pick up box and place on pallet" --robot franka-panda --output ./new-skill/
Workflow Orchestration (New in v0.2.0)
ate workflow validate <pipeline.yaml>- Validate a workflow definitionate workflow run <pipeline.yaml> --sim- Run workflow in simulationate workflow export <pipeline.yaml> --format ros2- Export to ROS2 launch format
Team Collaboration (New in v0.2.0)
ate team create <name>- Create a new teamate team invite <email> --role member- Invite a memberate team list- List teams and membersate skill share <skill-id> --team <team-slug>- Share a skill with a team
Skill Compiler (New in v0.2.1)
Compile skill.yaml specifications into deployable packages. See docs/SKILL_COMPILER.md for full documentation.
# Validate a skill specification
ate validate-skill my_skill.skill.yaml
# Compile to Python package
ate compile my_skill.skill.yaml --target python --output ./dist
# Compile to ROS2 package
ate compile my_skill.skill.yaml --target ros2 --robot robots/ur5.urdf
# Test the compiled skill
ate test-skill ./dist --mode dry-run
# Check robot compatibility
ate check-compatibility my_skill.skill.yaml --robot-urdf robots/ur5.urdf
# Publish to registry
ate publish-skill ./dist --visibility public
Quick Start for AI Assistants:
ate_list_primitives- Discover available building blocksate_validate_skill_spec- Check skill.yaml for errorsate_check_skill_compatibility- Verify robot compatibilityate_compile_skill- Generate deployable codeate_test_compiled_skill- Test without a robot
Dataset Management (New in v0.2.0)
ate data upload ./sensor-logs/ --skill <id> --stage raw- Upload sensor dataate data list --skill <id> --stage annotated- List datasetsate data promote <dataset-id> --to skill-abstracted- Promote to next stageate data export <dataset-id> --format rlds- Export dataset
Deployment & Configuration (New in v0.2.0)
ate deploy --config deploy.yaml --target fleet-alpha- Deploy with configate deploy status <fleet-name>- Check deployment status
Deployment & Testing
ate deploy <robot-type>- Deploy to a robot (e.g., unitree-r1)ate test [-e gazebo|mujoco|pybullet|webots] [-r robot]- Test skills in simulationate benchmark [-t speed|accuracy|robustness|efficiency|all]- Run performance benchmarksate adapt <source-robot> <target-robot>- Adapt skills between robots
Safety & Validation
ate validate [-c collision|speed|workspace|force|all]- Validate safety and complianceate stream [start|stop|status] [-s sensors...]- Stream sensor data
Cursor IDE Integration (MCP)
FoodforThought CLI includes a full MCP (Model Context Protocol) server for integration with Cursor IDE.
Quick Install via Deep Link
Click this link to install in Cursor:
cursor://anysphere.cursor-deeplink/mcp/install?name=foodforthought&config=eyJtY3BTZXJ2ZXJzIjogeyJmb29kZm9ydGhvdWdodCI6IHsiY29tbWFuZCI6ICJweXRob24iLCAiYXJncyI6IFsiLW0iLCAiYXRlLm1jcF9zZXJ2ZXIiXSwgImVudiI6IHsiQVRFX0FQSV9VUkwiOiAiaHR0cHM6Ly9raW5kbHkuZnlpL2FwaSJ9fX19
Manual Installation
-
Install the CLI:
pip install foodforthought-cli
-
Install MCP SDK:
pip install mcp
-
Add to your Cursor MCP config (
~/.cursor/mcp.jsonor.cursor/mcp.json):{ "mcpServers": { "foodforthought": { "command": "python", "args": ["-m", "ate.mcp_server"], "env": { "ATE_API_URL": "https://kindly.fyi/api" } } } }
-
Restart Cursor
Available MCP Tools (37+)
| Category | Tools |
|---|---|
| Skill Compiler | ate_compile_skill, ate_validate_skill_spec, ate_test_compiled_skill, ate_publish_compiled_skill, ate_check_skill_compatibility |
| Primitives | ate_list_primitives, ate_get_primitive |
| Skills | ate_skills_list, ate_skills_create, ate_skills_get, ate_pull, ate_upload |
| Testing | ate_test, ate_simulate |
| Compatibility | ate_adapt, ate_compatibility_check |
| Parts | ate_parts_list, ate_parts_check, ate_parts_require, ate_deps_audit |
| Generation | ate_generate |
| Workflows | ate_workflow_validate, ate_workflow_run, ate_workflow_export |
| Teams | ate_team_create, ate_team_invite, ate_team_list, ate_team_share |
| Datasets | ate_data_upload, ate_data_list, ate_data_promote, ate_data_export |
| Deployment | ate_deploy, ate_deploy_status |
| Audit | ate_audit_trail |
MCP Resources
skill://{id}- Skill details and configurationpart://{id}- Hardware part specificationsworkflow://{id}- Workflow definitionteam://{id}- Team informationdeployment://{id}- Deployment statusaudit://{id}- Audit trail
MCP Prompts
setup_workflow- Guide for multi-skill workflowsdeploy_skill- Step-by-step deployment guidedebug_compatibility- Debug skill transfer issuesonboard_robot- Add a new robot to the platformaudit_deployment- Generate audit reports
See the MCP Server Guide for full documentation.
CI/CD Integration
GitHub Actions
Use the provided actions for CI/CD:
name: Skill CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: kindly-robotics/test-skill@v1
with:
skill-path: ./
robot-model: ur5
- uses: kindly-robotics/check-transfer@v1
with:
skill: .
min-score: 0.6
License
MIT License. Copyright © 2024-2025 Kindly Robotics. See LICENSE.
The FoodforThought CLI (including the bundled MCP server) is open source under MIT.
For Kindly's full open-source posture and per-component licensing, see
docs/OPEN_SOURCE.md.
Metadata
Release files for foodforthought-cli 0.6.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| foodforthought_cli-0.6.1.tar.gz | 752.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| foodforthought_cli-0.6.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.5 MB
Release files / foodforthought_cli-0.6.1.tar.gz
| Download URL | foodforthought_cli-0.6.1.tar.gz |
|---|---|
| Size | 752.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1a5b6cdd247860d19128aabd301c8552df51c2689372a1cf925bcd8cca644e3a
|
|
BLAKE2b-256 checksum How to use checksums |
751ca2ef964342aca6ca69b08d1cf9be164b7115817e9598e76be3c1c47ba21c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 16, 2026.
Transparency logRelease files / foodforthought_cli-0.6.1-py3-none-any.whl
| Download URL | foodforthought_cli-0.6.1-py3-none-any.whl |
|---|---|
| Size | 770.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cd2ef9f6ef320cdb34e29c52554e57f0c693bd41cca257eb1379c98c277989b4
|
|
BLAKE2b-256 checksum How to use checksums |
48799578de9a209d64465e2810dff47181e3b70cd8e98046bc1da2c2cd4ecbe8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 16, 2026.
Transparency log