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 runreterminal 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 acloudflaredtunnel theboard tunnelverbs wrap. Seedocs/esphome-reterminal-sticky.mdanddocs/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.mdforbackend: claude). - The canonical guildmaster skill kit (11 skills) under
.claude/skills/, vendored cite-don't-import. Seedocs/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:
- Rename the package
reterminal/and thereterminalCLI/dist name throughoutpyproject.toml, the package,tests/,sonar-project.properties, and thisREADME.md. The name is hard-coded in ~100 places, so list every occurrence first — see thegit grepdiscovery command inCLAUDE.md, the authoritative rename procedure. - Edit
culture.yamlwith yoursuffixandbackend. - Rewrite
CLAUDE.mdfor your agent and run/init. - 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.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file reterminal_cli-0.13.0.tar.gz.
File metadata
- Download URL: reterminal_cli-0.13.0.tar.gz
- Upload date:
- Size: 542.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6154f908db2df3a0826dd1f0e788e71ebb16785234a46e41cadf39816e7b6955
|
|
| MD5 |
99c34bd1198965ad1ee28f669a615568
|
|
| BLAKE2b-256 |
8a114fa1f368104d08b2ce71fd5b39b9c3d9926af4e38d4f7bd80e1b12e131ea
|
File details
Details for the file reterminal_cli-0.13.0-py3-none-any.whl.
File metadata
- Download URL: reterminal_cli-0.13.0-py3-none-any.whl
- Upload date:
- Size: 223.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4ea2a4adaeda34f80d1e05d22422bdb52f0e42495537b3275311d103b37337f5
|
|
| MD5 |
7b221d1b0f49db5b37d531e1999157e5
|
|
| BLAKE2b-256 |
6747b83f726846c439ce660a68bfc101ba89aa2caac8787c4d81bc8c6f8399b2
|