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.1.tar.gz (610.0 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.1-py3-none-any.whl (249.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: microduck_cli-0.9.1.tar.gz
  • Upload date:
  • Size: 610.0 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.1.tar.gz
Algorithm Hash digest
SHA256 6c59190715ef29c5a6d6988caa17673b36b7a20f9446833734b1a35079ff56fb
MD5 c1be4bd868774b735b86f2da60f77571
BLAKE2b-256 987c248cc047f44a6cc5b5bafd89a67b43f2e88a4f0d1b98c73c0a921b3b40cd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: microduck_cli-0.9.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8821952ca1bfb991168745bd7b6e6f00ec9f8106495ae5656c8f0f4719b14954
MD5 5aad18e35d519361b426856ae1fb844e
BLAKE2b-256 e36dc5f937e74382bc1662fd3d1ac191855c35cbd751df91d8844474fff558f3

See more details on using hashes here.

Release history Release notifications | RSS feed

0.9.4

2 files

0.9.3

2 files

0.9.2

2 files

This release

0.9.1 This release

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