Skip to main content

Agent and CLI for operating the Reachy Mini expressive robot — device setup, app management, and runtime ops.

Project description

reachy-mini-cli

Agent and CLI for operating the Reachy Mini expressive robot — device setup, app management, and live runtime ops.

# Real mode (local robot: daemon binary + SDK):
uv tool install 'reachy-mini-cli[daemon]'
reachy-mini-cli quickstart      # copy-paste install + bring-up sequence
reachy-mini-cli daemon start    # bring the daemon up (wakes the robot)
reachy-mini-cli listen run      # orient the head toward sound (Ctrl-C to stop)

The installed command is reachy-mini-cli (short alias: reachy). New here? Read the Operating Reachy Mini guide — it covers bring-up, verification, and the one model you must understand before running two behaviors at once.

What Reachy Mini can do

Reachy Mini is an expressive desk robot — a movable head, two antennas, a rotating body, a USB mic array (with direction-of-arrival), a camera, and a speaker. reachy-mini-cli exposes each capability as a noun you run from a shell or an agent loop: hold the hardware (daemon), feel alive when idle (demo-mode), orient to sound (listen) or sight (vision), speak (say), think out loud and move in step with its thoughts (think), feel a head pat (pat), and fall asleep when left alone (sleep). listen run --live folds every live sense into one loop, and service makes one presence mode survive a reboot.

Noun map

The complete robot surface. Every noun supports --json; run reachy-mini-cli explain <noun> for the full flag reference.

Noun What it does Transport
daemon Start/stop/status the local reachy-mini-daemon process none (manages the process)
device Daemon + live robot state (status, state) http (default)
app List / start / stop daemon apps http
move One-shot goto / wake / sleep animations http (default)
demo-mode Always-on "feel alive" idle loop (breathe, glances, sway) sdk/http
behavior 50 Hz engine that composes named behaviors per channel sdk/http
listen Two-tier sound orienting (antenna lean → head/body turn); --live folds every sense into one loop sdk default
vision Turn toward motion or light (pure pixel math, no ML) sdk default
say Dumb TTS pipe: text → speaker sdk default
think LLM cognition loop: speaks + expresses; --export JSONL feed sdk default
pat Feel a head pat and lean into it (no touch sensor) sdk only
sleep Decay to sleep when idle; wake on sound / wake-word / pat sdk default
service Boot-persist exactly one presence mode (demo or live) via systemd --user none (manages systemd)
whoami quickstart learn explain overview doctor cli Agent-first introspection — no robot needed

⚠️ Before you run two behaviors at once, read the single-SDK-owner model. The robot serves one in-process SDK client and one motion queue, each a single resource: listen, think, sleep, vision, and pat are mutually exclusive on the sdk transport. This trips up humans and agents repeatedly. The conflict matrix and the two ways to compose behaviors anyway are in the guide.

Install

Profile Install For
Real mode (recommended) uv tool install 'reachy-mini-cli[daemon]' A local robot — pulls reachy-mini, so the sdk transport and daemon start work out of the box.
HTTP remote pip install reachy-mini-cli No local robot — numpy-only; talk to a daemon elsewhere with --transport http + REACHY_BASE_URL.

reachy-mini is an extra, not a base dep (its pycairo/gstreamer/pyaudio stack needs system libraries a bare box lacks). Running the sdk transport on a bare install exits 2 with a hint to install [sdk] — never a traceback. See Install profiles for the full rationale. reachy-cli remains a transitional alias that pulls in reachy-mini-cli.

Operating Reachy live

The full operating guide is docs/operating-reachy.md:

Common commands

reachy-mini-cli daemon start                                   # bring the daemon up (wakes the robot)
reachy-mini-cli device status                                  # verify it answers
reachy-mini-cli move goto --z 10 --pitch -5 --duration 2       # one motion command
reachy-mini-cli demo-mode start                                # feel-alive idle loop (background)
reachy-mini-cli listen run                                     # orient to sound (sdk; Ctrl-C to stop)
reachy-mini-cli vision run                                     # orient to motion/light (sdk)
reachy-mini-cli say run "Hello from Reachy"                    # text-to-speech
reachy-mini-cli think run                                      # LLM cognition loop (speaks + moves)
reachy-mini-cli pat run                                        # feel a head pat and lean in
reachy-mini-cli sleep run                                      # fall asleep when idle, wake when addressed
reachy-mini-cli listen run --live                              # ALL senses in one loop (the "live presence" mode)
reachy-mini-cli daemon stop                                    # put it back down

The background nouns (demo-mode, listen, think, sleep) also expose start / stop / restart / status; the sense nouns also expose demo (no robot needed). See reachy-mini-cli explain <noun>.

The live loop and boot persistence

listen run --live folds think + vision + sleep into listen's single loop (alongside the head-pat hook), so every live sense rides one SDK media session and one motion queue in one process — arbitrated by the sleep > pat > think priority flags. It is the supported way to run all the senses at once (one media owner; see the single-SDK-owner model below).

service makes one presence boot-persistent via systemd --user. Exactly one mode is enabled at a time — enabling one disables the sibling — and it auto-restarts on crash. The daemon is a boot dependency of both presence units.

reachy-mini-cli service install                                # write the systemd units (enable nothing)
reachy-mini-cli service enable live                            # boot-persist listen run --live (disables demo)
reachy-mini-cli service enable demo                            # switch to the idle demo loop (disables live)
reachy-mini-cli service status --json                          # which mode is enabled + daemon health
reachy-mini-cli service disable                                # stop the presence (daemon stays up)

A true machine-reboot check is manual: a systemctl --user service starts at boot only when the user has linger enabled (loginctl enable-linger $USER). See Boot persistence.

Export feed

think run --export - streams a live newline-delimited JSON (NDJSON) feed of what the robot is thinking / saying / feeling — one object per line. The renderer stays out of this repo by design (the export decoupling boundary): reachy-mini-cli emits a documented contract, a separate consumer renders it.

reachy-mini-cli think run --export -                              # all block types
reachy-mini-cli think run --export - --export-blocks message,emotion
reachy-mini-cli think run --export - | <your renderer>

Wire format: docs/export-schema.md. For the renderer boundary and the reference reterminal consumer, see Export feed & the external renderer.

What you get

  • An agent-first CLI cited from teken (afi-cli).
  • A mesh identityculture.yaml (suffix + backend) and the matching prompt file (CLAUDE.md for backend: claude).
  • The canonical guildmaster skill kit (11 skills) under .claude/skills/, vendored 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.

Developer quickstart

For working on the repo itself (an editable checkout, not an end-user install):

uv sync --extra daemon                # recommended — SDK + the reachy-mini-daemon binary
uv sync                               # bare — numpy only; HTTP remote profile (--transport http)
uv run pytest -n auto                 # run the test suite
uv run reachy whoami                  # identity from culture.yaml
uv run reachy learn                   # self-teaching prompt (add --json)
uv run teken cli doctor . --strict    # the agent-first rubric gate CI runs

CLI (introspection)

The agent-first verbs that work with no robot attached:

Verb What it does
whoami Report this agent's nick, version, backend, model from culture.yaml.
quickstart Print the copy-paste install + bring-up sequence.
learn Print a structured self-teaching prompt.
explain <path> Markdown docs for any noun/verb path.
overview Read-only descriptive snapshot of the agent.
doctor Check the agent-identity invariants (prompt-file-present, backend-consistency).
cli overview Describe the CLI surface itself.

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.

Make it your own

  1. Rename the package reachy/ and the reachy-mini-cli CLI/dist name throughout pyproject.toml, the package, tests/, and sonar-project.properties.
  2. Edit culture.yaml with your suffix and backend.
  3. Rewrite CLAUDE.md for your agent and run /init.
  4. Re-vendor only the skills you need from guildmaster (see docs/skill-sources.md).

See CLAUDE.md for the full conventions (version-bump-every-PR, the cicd PR lane, deploy setup).

License

MIT — see LICENSE.

Project details


Download files

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

Source Distribution

reachy_mini_cli-0.24.0.tar.gz (749.8 kB view details)

Uploaded Source

Built Distribution

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

reachy_mini_cli-0.24.0-py3-none-any.whl (306.3 kB view details)

Uploaded Python 3

File details

Details for the file reachy_mini_cli-0.24.0.tar.gz.

File metadata

  • Download URL: reachy_mini_cli-0.24.0.tar.gz
  • Upload date:
  • Size: 749.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","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 reachy_mini_cli-0.24.0.tar.gz
Algorithm Hash digest
SHA256 383232fe9e0e041c857dc2f455af8a9d5637186f1fa8a9dcd2ffeebf568a964f
MD5 cb0f8917348a1087dddfd604c7f07db7
BLAKE2b-256 6ffdd4cd75874bd762fd27a8b1095a66ce157122490a56c3ba9691d945025cf8

See more details on using hashes here.

File details

Details for the file reachy_mini_cli-0.24.0-py3-none-any.whl.

File metadata

  • Download URL: reachy_mini_cli-0.24.0-py3-none-any.whl
  • Upload date:
  • Size: 306.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","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 reachy_mini_cli-0.24.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2fdeb21bff41635d2bbf0194930261490133282eb7dc7430b0fce87cabb4f6e0
MD5 6df710c9baa0eb557d1159aeb6d3bb9a
BLAKE2b-256 55ac971c0b60a1ccfc37cb69d429debea2b8cf68e8402e5b0587cd2ad3080bf7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page