Small native terminal tools with one job each:
appsreads text, explores CSV/TSV, presents Markdown, paints text canvases, and runs timers.fetchshows a fast system and CPU overview with styled, plain, or JSON output.gamesis a native clean-room terminal arcade with eleven complete game modes.lazyboxis one direct dashboard for Docker containers, Apple containers, and Slurm jobs.scienceexplores planetary orbits, VCD waveforms, and PLY or.splatpoint clouds offline.screensaveranimates six owned terminal scenes, including local Git history and GIF files.
The binaries never download or install software. games and lazybox use
Crossterm for raw keyboard input and terminal restoration; no upstream TUI,
game code, or assets are bundled.
After the first release is published, install all commands from its native PyPI wheel:
uv tool install keys-toolsThe release workflow builds wheels for Linux x86_64, macOS ARM64 and x86_64, and Windows x86_64. It attaches the same verified files and checksums to the corresponding GitHub release.
Rust 1.97.1 is pinned for builds.
cargo build --release --locked
./target/release/apps
./target/release/fetch
./target/release/games
./target/release/lazybox
./target/release/science
./target/release/screensaverUseful non-interactive forms:
apps snapshot read notes.md --find TODO --json
apps snapshot table data.csv --limit 25 --plain
apps snapshot slides talk.md --page 2
apps snapshot timer --seconds 1500 --elapsed 60 --json
fetch --plain
fetch --json
games list --json
games info merge
games run merge --seed 1
lazybox snapshot --backend auto --json
lazybox open --backend docker
science snapshot orbit --json
science open wave capture.vcd
science open cloud scan.ply
screensaver snapshot rain --seed 1 --json
screensaver open git .
screensaver open gif animation.gifNO_COLOR=1 disables decoration. Interactive play needs a real terminal and
restores raw mode, cursor state, wrapping, and the main screen when it exits.
games contains eleven clean-room modes: delve, orbit, serpent,
merge, vector, cards, seedling, sprint, keybed, glyphs, and
scout. They use an original implementation, maps, words, prose, and ASCII art
informed only by the high-level behavior of the research projects. Sessions
are finite and seeded; v1 has no network, audio, persistence, plugins, external
executables, or copied assets.
lazybox auto-detects a responding Docker, Apple Container, or Slurm backend,
then renders its own consistent dashboard. It calls only the installed native
CLI for inventory, details, bounded container logs, and confirmed start, stop,
restart, or cancellation actions. It never invokes Lazydocker, Lazyslurm, or
Lazycontainer. Plain and JSON snapshots make the same inventory usable in
scripts without entering raw terminal mode. Backend calls stop after 30 seconds
and capture at most 8 MiB of combined output.
science calculates approximate heliocentric planet positions locally from the
JPL Solar System Dynamics 1800-2050 model.
Its event-driven views also parse bounded VCD logic traces and stream ASCII or
little-endian binary PLY and 32-byte .splat point records in one pass.
Consecutive repeated logic states are discarded during parsing while distinct
multi-bit values are preserved, and
large clouds use a deterministic sample of at most 60,000 points for drawing
without weakening full-file bounds and centroid statistics. No source asset,
network service, serial driver, subprocess, or upstream executable is bundled.
screensaver owns four generated scenes—digital rain, wrapping pipes, a frog
pond, and offline weather—plus a bounded Git-history view and local GIF87a/89a
playback. Generated snapshots are deterministic by seed. Git mode reads one
64-commit batch through the installed git command with the same timeout and
output limits as lazybox; GIF mode contains a bounded block parser and
fixed-table LZW decoder capped at 64 MiB input, 512 frames, and 16 million
retained terminal-render pixels, with at most 128 million decoded source
pixels. It does not use Pillow, ffmpeg, a browser, a weather API, a
media cache, or copied upstream art.
Interactive output updates only changed terminal rows, supports resize and
NO_COLOR, and can be slowed to one frame per second with --fps 1. Plain and
JSON snapshots provide a non-animated alternative.
apps owns five local workflows in one binary: bounded UTF-8 reading and
search, quoted CSV/TSV parsing, Markdown slide navigation, text-canvas painting,
and a monotonic countdown timer. Every file input is opened once and capped at
32 MiB. Tables are additionally capped at 100,000 rows, 256 columns, and two
million cells. Paint output uses a completed temporary file and an atomic
no-overwrite hard link, so it cannot replace an existing file.
The binary does not bundle or launch MuPDF, Firefox, a browser engine, a
Wayland compositor, a PTY server, TLS, weather/speed services, plugins, or
copied upstream code and assets. Pipe already-fetched text through - when a
local snapshot is enough.
fetch has detailed native collection on macOS and Linux and a smaller
environment-backed view on Windows. It is intentionally not a configurable
replacement for every Fastfetch module. See research and
fetch benchmarks for the measured comparison and limits.
The games benchmark measures the native arcade's owned
non-interactive path and binary size. The lazybox benchmark
measures native CLI startup and package size without pretending backend latency
belongs to the dashboard.
The science benchmark measures an offline orbit snapshot
and binary size; file parsing latency remains input-dependent.
The screensaver benchmark measures one deterministic
generated snapshot and binary size; Git and GIF latency remains input-dependent.
The apps benchmark measures one deterministic timer snapshot
and binary size; file parsing and interactive latency remain input-dependent.