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 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.

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.

Download files

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

Source Distribution

reterminal_cli-0.13.0.tar.gz (542.3 kB view details)

Uploaded Source

Built Distribution

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

reterminal_cli-0.13.0-py3-none-any.whl (223.6 kB view details)

Uploaded Python 3

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

Hashes for reterminal_cli-0.13.0.tar.gz
Algorithm Hash digest
SHA256 6154f908db2df3a0826dd1f0e788e71ebb16785234a46e41cadf39816e7b6955
MD5 99c34bd1198965ad1ee28f669a615568
BLAKE2b-256 8a114fa1f368104d08b2ce71fd5b39b9c3d9926af4e38d4f7bd80e1b12e131ea

See more details on using hashes here.

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

Hashes for reterminal_cli-0.13.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4ea2a4adaeda34f80d1e05d22422bdb52f0e42495537b3275311d103b37337f5
MD5 7b221d1b0f49db5b37d531e1999157e5
BLAKE2b-256 6747b83f726846c439ce660a68bfc101ba89aa2caac8787c4d81bc8c6f8399b2

See more details on using hashes here.

Release history Release notifications | RSS feed

0.14.0

2 files

This release

0.13.0 This release

2 files

0.12.1

2 files

0.12.0

2 files

0.11.0

2 files

0.10.0

2 files

0.9.0

2 files

0.8.1

2 files

0.8.0

2 files

0.7.1

2 files

0.7.0

2 files

0.6.0

2 files

0.5.0

2 files

0.3.2

2 files

0.3.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