@rubytech/create-maxy-lite
v0.1.39
Published
Install maxy-lite on an Android phone: orchestrates proot-distro Ubuntu, glibc Node, claude, the web-chat relay, the vault and its bind-mount — run via npx in bare Termux.
Downloads
4,944
Maintainers
Readme
@rubytech/create-maxy-lite
The maxy-lite installer: one command that puts the claude code binary on an Android phone, controlled from the phone browser. Run it in bare Termux; it orchestrates the whole on-device stack.
Install
# In Termux (from F-Droid):
pkg install -y nodejs
npx @rubytech/create-maxy-liteThe single npx does everything, idempotently:
termux-deps— Termux packages (proot-distro) for the glibc layerproot— verify the proot-distro framework is operationalubuntu— install the glibc Ubuntu rootfs under prootnode— pinned glibc Node inside Ubuntu (the bionic Node cannot runclaude)toolchain—python3/make/g++sonode-ptycompilesvault-bind— the shared-storage vault plus the proot bind so Obsidian andclaudeshare one foldernpm-app— pinned@anthropic-ai/claude-codeandttyd, the app (validator + web-chat relay), and themaxy-litelauncher
Re-running reconciles to the same state without duplicating anything. --dry-run prints the plan and pinned versions without touching the device.
Why a Node-only installer works in bare Termux
claude ships a glibc-only native binary, so the agent must run inside a proot-distro Ubuntu layer. But the installer is plain Node and runs fine on Termux's bionic Node, so there is no hosted shell script to maintain. A curl … | bash bootstrap exists only as a documented alternative (it just installs the Node prerequisite and calls this same package).
Layout
| Path | What |
|---|---|
| index.mjs | Entry: wires the real subprocess/fs/probe primitives and runs the orchestrator. |
| lib/orchestrate.mjs | The guarded, idempotent step sequence. |
| lib/healthcheck.mjs | The four post-install probes (claude, webchat, validator, vault). |
| lib/pins.mjs, versions.json | Pinned Node major, claude-code and ttyd versions. |
| lib/paths.mjs | On-device paths and the maxy-lite launcher. |
| payload/ | Bundled app components (schema, validator, webchat), generated by npm run bundle. |
The payload/ directory is gitignored and rebuilt at publish time from the sibling maxy-lite component tree; edit the sources there, never the payload.
Observability
Every step emits one structured line so a failed install is diagnosable from its log:
[lite-install] op=step name=<…> ok=<bool> ms=<…>
[lite-install] op=versions node=<v> claude=<v> ttyd=<v>
[lite-install] op=healthcheck claude=<bool> webchat=<bool> validator=<bool> vault=<bool>
[lite-install] op=done ok=<bool> ranMs=<…>A healthy run ends op=done ok=true. The first ok=false step is the failure point. Full operator instructions: maxy-code/.docs/maxy-lite-install.md.
Tests
npm test # node --test over lib (log, pins, paths, healthcheck, orchestrate, bundle)The validator probe runs the real bundled validator against an empty vault; the orchestrator tests assert the step order, the idempotency guards, and the structured-line output against a recording context.
