6.1 KiB
Reyna CLI
On-demand CLI façade for Reyna family MCP services and LAN devices. The goal is to avoid keeping every MCP server/tool schema loaded in Hermes memory while still letting Hermes call capabilities through terminal when needed.
Phase 2 scope
- Devices parent command: All local devices are now under
reyna-cli devices.reyna-cli devices screen ...(ESP32 screen)reyna-cli devices laptop ...(personal laptop MCP screen)reyna-cli devices computer ...(this computer's desktop companion client)reyna-cli devices iphone ...(iPhone app)reyna-cli devices arm ...(Robot arm)
- Robot Arm: Dynamic tool resolution for
state,home,wave,battery. - Immich: On-demand MCP bridge at
http://127.0.0.1:8626/mcp. - MongoDB: On-demand MCP bridge at
http://127.0.0.1:8630/mcp. - Top-level aliases:
reyna-cli screen,reyna-cli laptop,reyna-cli iphone,reyna-cli armstill work for compatibility.
Install / run
uv sync
uv run reyna-cli doctor
Device discovery
uv run reyna-cli devices list --json
uv run reyna-cli devices ping esp32_screen --json
uv run reyna-cli devices tools esp32_screen --json
uv run reyna-cli devices describe esp32_screen --for-hermes
Generic MCP calls
uv run reyna-cli devices call esp32_screen draw_text --args '{"text":"Hello","x":10,"y":20,"size":2}' --json
Robot Arm
uv run reyna-cli devices arm state
uv run reyna-cli devices arm home
uv run reyna-cli devices arm wave
uv run reyna-cli devices arm battery --json
ESP32 screen, laptop screen, this computer & iPhone
uv run reyna-cli devices screen text "Dinner is ready"
uv run reyna-cli devices laptop text "Hermes is online" --json
uv run reyna-cli devices laptop battery --json
uv run reyna-cli devices laptop sensors --json
uv run reyna-cli devices computer service-status --json
uv run reyna-cli devices computer text "Hermes is online here" --json
uv run reyna-cli devices iphone battery --json
This computer desktop client service
The local desktop companion client runs /home/adolforeyna/Projects/Screen/desktop_client/client.py in the GUI session with WAYLAND_DISPLAY=wayland-0 and XDG_RUNTIME_DIR=/run/user/1000.
uv run reyna-cli computer service-install --json
uv run reyna-cli computer service-start --json
uv run reyna-cli computer service-status --json
uv run reyna-cli computer service-restart --json
uv run reyna-cli computer service-logs --lines 80
Immich
uv run reyna-cli immich stats
uv run reyna-cli immich albums
uv run reyna-cli immich search "sunset" --limit 5
uv run reyna-cli immich tools
MongoDB
uv run reyna-cli mongo dbs
uv run reyna-cli mongo collections my_db
uv run reyna-cli mongo count my_db my_coll --filter '{"status":"active"}'
uv run reyna-cli mongo find my_db my_coll --limit 5
uv run reyna-cli mongo aggregate my_db my_coll --pipeline '[{"$match":{}}]'
Local Thunderbird email (read-only)
The email command searches the locally synced Thunderbird MBOX files directly. It is read-only: it does not send, delete, move, label, or modify mail.
uv run reyna-cli email doctor --json
uv run reyna-cli email search "whirlpool fridge warranty" --limit 5 --json
uv run reyna-cli email find-receipts "Whirlpool" --json
uv run reyna-cli email latest --limit 10 --json
uv run reyna-cli email show <message-id> --body --json
By default it uses the local Thunderbird profile at ~/snap/thunderbird/common/.thunderbird/tjug9cp5.default and the Gmail INBOX MBOX. Override with REYNA_THUNDERBIRD_PROFILE or REYNA_THUNDERBIRD_INBOX when testing or using a different profile.
Mac mini
The macmini command reads the existing Hermes mcp_servers.macmini HTTP URL and Authorization header from ~/.hermes/config.yaml, so credentials stay in the Hermes profile config instead of being duplicated here.
uv run reyna-cli macmini ping --json
uv run reyna-cli macmini tools --json
uv run reyna-cli macmini call notes_list --args '{"limit":5}' --json
uv run reyna-cli macmini calendar calendars --json
uv run reyna-cli macmini calendar events 2026-06-11T00:00:00 2026-06-12T00:00:00 --json
uv run reyna-cli macmini calendar create "Dentist" 2026-06-15T09:00:00 2026-06-15T10:00:00 --notes "Bring insurance card"
uv run reyna-cli macmini contacts search Adolfo --json
uv run reyna-cli macmini notes list --query family --json
uv run reyna-cli macmini reminders lists --json
TP-Link Deco
The deco command talks directly to the router with tplinkrouterc6u; it does not use the Mac mini MCP server. Configure DECO_HOST, DECO_USERNAME, DECO_PASSWORD, DECO_VERIFY_SSL, and DECO_TIMEOUT in ~/.hermes/.env or the process environment. DECO_HOST defaults to the Linux default gateway when omitted.
uv run reyna-cli deco config --json
uv run reyna-cli deco overview --json
uv run reyna-cli deco clients --json
uv run reyna-cli deco firmware --json
uv run reyna-cli deco ipv4 --json
# Backward-compatible alias; also direct, not MCP:
uv run reyna-cli macmini deco clients --json
Browser web interface
reyna-cli web runs a FastAPI/uvicorn browser UI that can execute Reyna CLI commands from a browser. The web app uses Authentik OIDC by default against auth.reynafamily.com.
Create an Authentik OAuth2/OpenID provider/application for the web app and add a redirect URI that matches where you will browse to the server, for example:
https://reyna-cli.reynafamily.com/auth/callback
Configure the server with environment variables (for example in ~/.hermes/.env or your service manager):
REYNA_WEB_SESSION_SECRET='generate-a-long-random-string'
REYNA_WEB_AUTH_CLIENT_ID='authentik-client-id'
REYNA_WEB_AUTH_CLIENT_SECRET='authentik-client-secret'
REYNA_WEB_AUTH_ISSUER='https://auth.reynafamily.com/application/o/reyna-cli-web/'
REYNA_WEB_PUBLIC_URL='https://reyna-cli.reynafamily.com'
Run locally:
uv run reyna-cli web --host 127.0.0.1 --port 8765
For a trusted LAN-only development session, bypass OIDC with:
REYNA_WEB_DEV_AUTH=1 uv run reyna-cli web --host 127.0.0.1 --port 8765
Tests
uv run pytest -q