Skip to main content

microduck-cli

Agent-agnostic CLI for controlling the MicroDuck robot. Any agent, any human, one CLI. Built on the neurosymbolic-system runtime and following the reachy-mini-cli architecture.

What ships today

The agent-first introspection CLI (whoami, learn, explain, overview, doctor, cli overview) plus four domain nouns with real action verbs, all exercised against pollen-robotics/microduck's own simulator and fake daemon:

Noun Verbs
env overview, doctor, up, down, status, hosts — bring up / doctor / tear down the simulator (duck-body + robotd --sim) or a fake robotd --fake stand-in.
duck overview, health, version, monitor, init, relax, enable, do, mode, look, stop, move, quack, configure, record — operate one duck directly, in robotctl's own words.
policy overview, list, load, reset, add, remove, search, check, update, pad bindings/bind/reset, smoke, train, play, export, publish, infer, install — the policy lifecycle plus the microduck_rl train/smoke/export/publish/infer lane.
rules overview, list, check, engine overview/run/start/stop/status, intent — the data-only rules layer and the one 50 Hz tick engine that evaluates it.

Sim-first, and it stays that way until t23 verifies on real hardware: no physical MicroDuck has been driven from this CLI yet. Every verb above is built and tested against robotd --fake/--sim and the in-process fake daemon (tests/fake_robotd.py) — see docs/operating-the-duck.md for the six-command walkthrough and docs/upstream-pins.md for the exact upstream commits this CLI is validated against.

Approved deviation d1policy's robot.policies / robot.loadPolicy / robot.setSkill channel needs a daemon reporting API >= 18 (pollen-robotics/microduck main); the pinned sim-remote-io build answers API 16 and has no policy channel at all, so those verbs report that plainly and fall back to robot.subscribe where they can (see policy module docstring for the full d1 note).

The neurosymbolic-system runtime this CLI is meant to import (senses, rules, arbitration and motion composed onto one 50 Hz tick) is itself still a bare scaffold, so it is not a dependency of this package yet — the tick engine lives in microduck_cli/behavior/ in the meantime, written behind the seams the eventual extraction needs (see CLAUDE.md).

What you get

  • An agent-first CLI cited from teken (afi-cli) — the runtime package has zero third-party runtime dependencies (dependencies = []); teken, pytest and the lint stack are dev-only.
  • A mesh identityculture.yaml (suffix + backend) and the matching prompt file (AGENTS.colleague.md for this agent's backend: colleague).
  • The vendored guildmaster skill kit under .claude/skills/, cite-don't-import. See docs/skill-sources.md.
  • A build + deploy baseline — pytest, lint, the agent-first rubric gate, and PyPI Trusted Publishing wired into GitHub Actions.

Quickstart

Both console scripts install — microduck (short) and microduck-cli (the distribution name, and the prog name the CLI prints in its own output). They are the same entry point, so either works everywhere below:

uv sync
uv run pytest -n auto                 # run the test suite
uv run microduck whoami               # identity from culture.yaml
uv run microduck learn                # self-teaching prompt (add --json)
uv run teken cli doctor . --strict    # the agent-first rubric gate CI runs

Try it in simulation

No physical duck required — this brings up robotd --fake and walks it through a rules-engine tick. See docs/operating-the-duck.md for the full walkthrough (each command's exact output, and what to do when a check fails).

uv run microduck env doctor            # is this box ready? (clones, cargo, port, venv)
uv run microduck env up --fake         # bring up robotd --fake and wait for healthy
uv run microduck duck health           # ask the fake robot's own verdict on itself
uv run microduck rules engine run --max-ticks 50 --apply  # run the tick engine briefly
uv run microduck rules intent stop     # inject one intent through the ONE registry
uv run microduck env down              # tear the stack back down

Every command supports --json. Results go to stdout, errors/diagnostics to stderr (never mixed). Exit codes: 0 success, 1 user error, 2 environment error, 3+ reserved.

Sibling projects

microduck-cli is built by composing three siblings rather than inventing a fourth architecture:

Repo Role here
neurosymbolic-system The robot runtime to import once it ships — never re-implement the tick loop in this repo.
reachy-mini-cli The architecture to follow: noun groups, one tick seam for all senses, the single-SDK-owner model.
arm101-cli The hardware-safety patterns: gated motion (--apply / dry-run / TTY confirm), release-on-abnormal-exit, hardware deps behind an extra.

Contributing

See CLAUDE.md for the full conventions: the CLI contracts, what to take from each sibling, version-bump-every-PR, the cicd PR lane, worktree layout, and memory discipline.

License

Apache 2.0 — see LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

microduck_cli-0.9.2.tar.gz (632.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

microduck_cli-0.9.2-py3-none-any.whl (249.6 kB view details)

Uploaded Python 3

File details

Details for the file microduck_cli-0.9.2.tar.gz.

File metadata

  • Download URL: microduck_cli-0.9.2.tar.gz
  • Upload date:
  • Size: 632.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for microduck_cli-0.9.2.tar.gz
Algorithm Hash digest
SHA256 75661fa21ac065782aefb0502b0c4f83c92d8c2c1f8235c5e45ddfd163a136ed
MD5 9812234b13d3054966e7538216b331b3
BLAKE2b-256 4304dea1da7d29c0c71c07bdcd353f6314c102b899701aae8d654d481e72c67c

See more details on using hashes here.

File details

Details for the file microduck_cli-0.9.2-py3-none-any.whl.

File metadata

  • Download URL: microduck_cli-0.9.2-py3-none-any.whl
  • Upload date:
  • Size: 249.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for microduck_cli-0.9.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b8d4341e70a9fb0659d5f2604c7bacb0d2cc6badd2df7f42ae52ac23386b45bf
MD5 5c8062e0bfe8098cecc6979a9c9ede80
BLAKE2b-256 bf24a586e2478fcf86485928b8ce555bed3ec98b16cf4445001bbbd48fc8bf28

See more details on using hashes here.

Release history Release notifications | RSS feed

0.9.4

2 files

0.9.3

2 files

This release

0.9.2 This release

2 files

0.9.1

2 files

0.9.0

2 files

0.8.0

2 files

0.7.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page