Skip to content

phoxal/phoxal-cli

phoxal-cli

Consumer CLI for the Phoxal robot framework. Owns the resolver, robot.yaml discovery, phoxal.lock generation, and the validate / simulate / doctor / create commands.

Install

curl -sSfL https://raw.githubusercontent.com/phoxal/phoxal-cli/main/install.sh | sh

To pin a release, set PHOXAL_CLI_VERSION to a tag:

PHOXAL_CLI_VERSION=v0.0.1 sh install.sh

Build from Source

cargo install --git https://github.com/phoxal/phoxal-cli

Simulate

phoxal simulate <world>

<world> resolves to a .wbt file in this order:

  1. <project>/worlds/<world>.wbt
  2. <project>/<world> (path-as-given, e.g. worlds/foo.wbt)
  3. ~/.phoxal/worlds/<world>.wbt (shared worlds across robots)

Example: phoxal simulate default finds worlds/default.wbt in the project.

Live split-recovery gate

scripts/live-simulate-gate.sh is the documented gate that proves the separated repos run together end to end — robot.yamlphoxal-cli → a real phoxal.lock (real GHCR digests) → generated .phoxal/run/ → router → Webots → the mandatory runtime set. It is the live counterpart to recovery Gates 8–9 in phoxal/organization's REPOSITORIES.md, and depends on real image digests (#10) and a published runtime image set (phoxal/framework#31).

# from the phoxal-cli checkout; ROBOT_DIR defaults to ../robot-v1
scripts/live-simulate-gate.sh            # smoke: real-digest lock + locked compose (CI-safe)
scripts/live-simulate-gate.sh --live     # full live run (needs Docker daemon + Webots)

The smoke phase runs update --pin-digests, asserts every runtime image in phoxal.lock is pinned to a real repo@sha256:… digest (never a tag ref), and runs simulate default --locked --dry-run to verify locked resolution and that the generated compose references those digest pins. It needs only docker buildx (no daemon). The --live phase additionally requires a running Docker daemon and Webots on PATH, then runs simulate default --locked so you can confirm the router, the GHCR runtime services, Webots, and bus connectivity (tcp/router:7447, host tools via tcp/127.0.0.1:7447). Failures are reported with the actionable cause (missing image/digest, Docker not running, Webots missing, runtime startup, or bus connection).

Host layout

~/.phoxal/cache/                    GitHub releases, component clones, downloaded tools - shared across projects.
~/.phoxal/worlds/                   Optional fallback for shared world files (see Simulate above).
~/.phoxal/config.yaml               Optional. Today only `zenoh_image: <ref>` overrides the compiled default.

<project>/.phoxal/run/              Generated compose + staged robot view (regenerated each simulate).
<project>/.phoxal/webots/           Generated Webots controllers + protos.
<project>/.phoxal/cache/state.yaml  Per-project process lifecycle ledger.

License

AGPL-3.0-only — see LICENSE for the full license text. A commercial license is available for downstream products that cannot comply with AGPL — see COMMERCIAL.md and reach out via https://phoxal.com.

Contributing

See CONTRIBUTING.md. DCO sign-off required on every commit.

Phoxal

About

phoxal-cli — consumer CLI for the Phoxal robot framework. Owns resolver, robot.yaml discovery, phoxal.lock, simulate/validate/doctor/create commands.

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors