zeon new
Scaffold a project or a typed item: skill, workflow, world, object, canvas.
zeon new is the one verb you use to create anything in Zeon. Six subcommands:
| Subcommand | What it creates |
|---|---|
zeon new project | A new cloud project + local working tree |
zeon new skill | skills/<name>/metadata.yaml + robotic_code.py |
zeon new workflow | workflows/<name>.json (minimal start → end graph) |
zeon new world | worlds/<name>/world_state.json (empty scene) |
zeon new object | objects/<name>/<name>.urdf + <name>.object_model.yaml (materialized from the mesh database) |
zeon new canvas | canvas/<workflow>_screen.tsx + patches the workflow JSON |
All item-creating subcommands (skill, workflow, world, object, canvas) operate on the project you're inside. The CLI walks up from cwd looking for a .zeon/ directory.
Naming rules
Names must match ^[a-z_][a-z0-9_-]{0,63}$:
- Lowercase letters, digits, underscores, and hyphens.
- Must start with a letter or underscore.
- 1–64 characters.
Spaces, uppercase, and other punctuation are rejected. (Skill function names get hyphens converted to underscores in the Python code, so my-skill → def my_skill():.)
zeon new project
zeon new projectCreates a new cloud project and bootstraps a local working tree.
zeon new project my-project # creates ./my-project/
zeon new project my-project ~/path/to/elsewhere # creates the working tree there
zeon new project my-project --description "Lab plate workflow"The cloud project is created first; if anything fails after that, you can recover with zeon clone my-project.
The target directory must be empty, or not exist. A fresh project is not empty: it is seeded with a small runnable example, so skills/, workflows/, worlds/, objects/ and canvas/ all arrive populated. See Your first project.
zeon new skill <name>
zeon new skill <name>zeon new skill my_skillCreates:
skills/my_skill/metadata.yaml: skill metadata template.skills/my_skill/robotic_code.py: Python function stub.
Fails if either file already exists. See Authoring a Skill.
zeon new workflow <name>
zeon new workflow <name>zeon new workflow my_workflowCreates workflows/my_workflow.json with a minimal start → end graph. Fails if the file already exists. See Authoring a Workflow.
zeon new world <name>
zeon new world <name>zeon new world my_worldCreates worlds/my_world/world_state.json (empty scene). Fails if the folder already exists. See Building a World.
zeon new object <name>
zeon new object <name>zeon new object coldblock_holderMaterializes a project-bound object from the shared mesh database: fetches <name>.urdf and <name>.object_model.yaml from the catalog into objects/<name>/.
Hard-fails if the name isn't in the mesh database. Use zeon mesh-database list to find available names.
After running, the files exist locally but aren't yet committed. Push to the cloud with:
zeon commit -m "Add coldblock_holder"
zeon pushSee Adding an Object.
zeon new canvas <workflow>
zeon new canvas <workflow>zeon new canvas my_workflowCreates canvas/my_workflow_screen.tsx (React component template) and patches workflows/my_workflow.json's canvas_ui block to point at it.
Fails if:
- The workflow doesn't exist.
- The workflow already has a
canvas_uiblock. - The TSX file already exists on disk.
This is the only zeon new subcommand that modifies an existing file. Both writes (new TSX, patched workflow JSON) happen as a single atomic operation. If either would fail, nothing is written.
See Creating a Canvas.
Collision behaviour
All zeon new <kind> commands check for file collisions before writing anything. If even one target file already exists, the command aborts with a clear error and your project is left untouched.
This means you can't accidentally "half-create" an item.
What you get back
Successful runs print:
- The kind and name of what was created.
- The file(s) that were written, relative to the project root.
- A hint pointing to the primary file you'll want to edit:
created skill my_skill
- skills/my_skill/metadata.yaml
- skills/my_skill/robotic_code.py
Edit skills/my_skill/robotic_code.py to get started.
Where to go next
Updated 3 days ago