Files
roro9stack/site/content/guide/shell.md
T
twislaandClaude Opus 5.5 3863d28593
CI / build (pull_request) Successful in 1m48s
Site / build (pull_request) Successful in 9s
Shell: the console's commands on the device's own screen and keyboard (#67)
An App in the Launcher that runs the same commands as USB serial and the
Debug Console, trusted like the first. It shows what the console prints
while it is open, through a second ring of the console's that exists only
meanwhile; Ctrl+b keeps only what follows your own commands. Tab completes
a command's name from the firmware's help text, Fn with up and down recalls
earlier lines, Alt with up and down scrolls back. `rm` asks first in the
Shell, `rm -f` doesn't. Nothing is kept once the App is left.

`screenshot [seconds]` saves the screen as a PNG in /screenshots on the
card, now or after a pause: written a row at a time, indexed colour with
RGB332 as the palette, in one stored deflate block.

487 host tests (11 new: the PNG writer, the Shell's log filter, Tab).
Checked on the device over the Debug Console: commands, Tab, history, a
screenshot fetched and decoded on the PC, rm with and without the question,
a delayed screenshot of another screen. 12 KB of flash; 7 KB of heap while
open. Decisions Q204 to Q212 in docs/milestones/S1.md. Safe Mode: #77.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT
2026-10-07 10:53:31 +02:00

3.1 KiB

+++ title = "Shell" description = "The firmware's own commands, typed on the device: look at its state, the SD card, the radio and the network with no PC and no cable." weight = 9 [extra] tag = "Shell" +++

The firmware has a set of commands, made for working on it from a PC. The Shell runs them on the device itself: no computer, no cable, no Wi-Fi. It is the tool for the day something is wrong and you are nowhere near a desk.

It can do real damage: rm deletes, reboot restarts, debug on opens the device to the network. It is the same trust as holding the device, and nothing more.

Using it

Type a command and press Enter. help lists them all; the command reference says what each does. A few to start with:

Command Shows
info The firmware's version, uptime, memory, Wi-Fi, the SD card and both firmware slots
wifi status The network, the address, and where the DNS and time servers came from
ls /notes A folder of the SD card, with sizes and dates
crash The last crash, if there was one
update check Whether a newer release exists
lora status What the radio is set to and what it has heard
  • Tab completes the command's name. If several fit, it lists them.
  • Fn with up and down brings back lines you typed before.
  • Alt with up and down scrolls back through what was printed.
  • clear empties the screen, and quit (or Back) leaves.

What you see

The Shell shows everything the firmware prints while it is open: the answers to your commands, and whatever the rest of the system says meanwhile (IRC connecting, a packet received). On a ten-line screen that can be a lot.

Ctrl + b hides the background: then only what is printed in the ten seconds after each of your commands is kept, and mine shows in the corner. It is ten seconds and not "the answer" because some commands answer a moment later, from another part of the firmware, and nothing marks their lines as theirs.

Deleting asks first

rm <path> asks before it deletes, here where a slip of the finger is one key away. rm -f <path> does not ask.

Screenshots

screenshot        the screen, now
screenshot 5      the screen in 5 seconds: time to go to another App

The picture is saved as a PNG in /screenshots on the SD card, named by date and time, and a Toast says so once it is written (so the Toast is never in the picture). From the Shell, "now" is always a picture of the Shell: use the pause to get to the screen you want. The Storage App shows the files; to look at them, take the card to a computer.

What it costs

Nothing while it is closed. Open, about 7 KB of memory, given back when you leave: with IRC connected and a Gemini page open, that can be the difference (see the memory limit).

The keys, as the device lists them

What Fn + h shows on this screen. This table is generated from the firmware's own lists, so it is always the current one.

{{ keys(scopes=["shell"]) }}