Skip to main content

reterminal

Agent and CLI for operating Seeed Studio reTerminal edge devices — the reTerminal E (LAN, ESPHome push) and the reTerminal Sticky (ESPHome, an always-on board service on the reterminal domain, enrolled-service push, PDF pagination, and a touch dashboard that drives an AC through Sensibo) — provisioning, display, and I/O for both.

What you get

  • Device operation — map devices to serial ports, query and flash SenseCraft firmware, render to the e-paper display, and sound the buzzer, all from the CLI.
  • The Sticky as a first-class device — flash it via firmware, then run reterminal board serve: enrolled services push content over HTTP, PDFs page-turn by touch, and a touch dashboard drives an air conditioner through Sensibo, all authenticated end to end and reachable off-LAN through a cloudflared tunnel the board tunnel verbs wrap. See docs/esphome-reterminal-sticky.md and docs/delivery-map.md.
  • An agent-first CLI cited from teken (afi-cli) — every command also speaks --json, and the runtime package has no third-party dependencies.
  • A mesh identity — culture.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.

Quickstart

uv sync
uv run reterminal learn               # what the tool does + the command map (add --json)
uv run reterminal devices list        # local: device→serial-port mappings on this machine
uv run reterminal display set "hello" # needs a reachable reTerminal E (ESPHome firmware)
uv run reterminal whoami              # identity from culture.yaml
uv run pytest -n auto                 # run the test suite

# the board service (reTerminal Sticky, or E1001 enrolled as a panel):
uv run reterminal board serve --port 0     # foreground; --state-dir for a fixed home
uv run reterminal board token issue myservice --kind service
uv run reterminal board panel add sticky-1 --panel-profile sticky
uv run reterminal board push card --title "hello" --panels sticky-1

# the three demos (self-hosted by default — no hardware needed to run them):
bash scripts/demos/demo-1-service-push.sh
bash scripts/demos/demo-2-pdf-reader.sh
bash scripts/demos/demo-3-ac-dashboard.sh

devices is local; firmware, display, and speaker act on a connected reTerminal E over LAN (USB-serial for firmware flash, the ESPHome HTTP API for display / speaker). board is the Sticky/E1001 delivery service: it runs independently of a connected device and talks to enrolled panels over HTTP, device-initiated (the panel polls the board, not the reverse) — see docs/esphome-reterminal-sticky.md for the full delivery contract and docs/esphome-reterminal-e1001.md for the E1001's LAN-push config.

CLI

Operate a reTerminal E over LAN:

Command What it does
devices: record / list Record and list device→serial-port mappings (per-machine).
firmware: list / flash / backup Query the SenseCraft firmware catalog, flash a reTerminal E or a Sticky (catalog image, or a local full image at --offset 0x0 behind a mandatory verified-backup gate), and dump the whole 32 MB flash to a verified stock backup.
display: set / show / image / card / cloud / svg Render text or graphics to the e-paper display (partial refresh — in place, no clear-flash; full clear every Nth update).
speaker: beep Sound the buzzer.

Run the board service (Sticky and/or E1001 as enrolled panels):

Command What it does
board serve Run the board service in the foreground (stdlib http.server, no runtime dependency).
board token: issue / list / revoke Bearer tokens every board endpoint requires — one exchange enrolls a service or a panel.
board panel: add / list / remove Enroll panels: profile (e1001/sticky) and wake interval.
board push: card / cloud / text / png Render and push content to enrolled panels — the CLI mirror of POST /v1/push.
board pdf: load / status / clear / turn Load a PDF, rasterized host-side; touch/button page-turns it.
board dashboard: apply / show A rendered tap dashboard, hit-tested server-side, driving an AC through Sensibo.
board audit The recent dashboard command attempts and their outcomes.
board reassert Force a panel to re-fetch the board's content, no new bytes.
board actions: list / set / remove Map a reported event type (touch/wake/button) to a local command (host-only config, no HTTP write route).
board tunnel: open / close / status Expose the board off-LAN by wrapping cloudflared.
board ui-url Print the packaged web UI's ready-to-open entry URL for a token.

Every board endpoint requires a bearer token, /health included — see reterminal explain board. Demo scripts + fixtures live under scripts/demos/: demo-1-service-push.sh, demo-2-pdf-reader.sh, demo-3-ac-dashboard.sh each self-host a board and print MEASURED: timings against the spec's battery-first targets, or (with BOARD_URL/PANEL_ID/PANEL_TOKEN/SERVICE_TOKEN set) run the same script against real hardware.

Introspection and identity:

Command What it does
whoami Report this agent's nick, version, backend, and model from culture.yaml.
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. Each noun group has its own overview (reterminal display overview). Results go to stdout, errors/diagnostics to stderr (never mixed). Exit codes: 0 success, 1 user error, 2 environment error, 3+ reserved.

Fork it for another agent

reterminal began as the culture-agent-template scaffold, so it doubles as a starting point for a new AgentCulture mesh agent. To repurpose it:

  1. Rename the package reterminal/ and the reterminal CLI/dist name throughout pyproject.toml, the package, tests/, sonar-project.properties, and this README.md. The name is hard-coded in ~100 places, so list every occurrence first — see the git grep discovery command in CLAUDE.md, the authoritative rename procedure.
  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.

Metadata

Release files for reterminal-cli 0.14.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for reterminal-cli 0.14.0
File Size Uploaded Provenance
reterminal_cli-0.14.0.tar.gz 552.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for reterminal-cli 0.14.0
File Interpreter ABI Platform
reterminal_cli-0.14.0-py3-none-any.whl Python 3 none any Details

Total release size: 776.1 kB

Release files / reterminal_cli-0.14.0.tar.gz

Download URL reterminal_cli-0.14.0.tar.gz
Size 552.4 kB
Tags Source
SHA-256 checksum
How to use checksums
31d22df9c9dd5bb2ae352a6772b0c20cc20c2fa64c794152e959386d9615752c
BLAKE2b-256 checksum
How to use checksums
990ccdabdf7b1ad71f4d7eac5d964cf2af5d863761736ee3c17cde006b17a75d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","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}

Release files / reterminal_cli-0.14.0-py3-none-any.whl

Download URL reterminal_cli-0.14.0-py3-none-any.whl
Size 223.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
037a0e4b26c4cdbb81bfd450250d96c23e1aa99c60428824b849e9469a912613
BLAKE2b-256 checksum
How to use checksums
dc5032c5e03266121ccf481c51f76eb553f0ee40144a77464a6ad0d0cf95316b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","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}

Security for reterminal-cli 0.14.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

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