The Private Provider app is: a plain-Java, no-AndroidX/Compose Android app that runs a bundled ARM64 Debian PRoot rootfs on-device (routstrd daemon + Pi coding agent + ngit + git-remote-nostr), wrapped in a five-tab UI: Chat · Pi Agent · Files · Wallet · Monitor.
1. Chat — private AI chat
- Multi-turn chat sessions, one JSON per chat; New / Switch / Rename / Delete (bulk multi-select + delete-all).
- Model picker with a default private model; route/attestation status line. - Attested tinfoil-* (TEE) inference via privateprovider.xyz; selecting a non-private model requires explicit "Not private" approval.
- Live privacy strip: ✓ TEE response only when the daemon actually verified it. - Markdown rendering (fenced/inline code, code blocks, preview). - Send to Pi (π) — hands the exchange to a fresh private Pi session, optionally writing a chat artifact into /workspace.
- Wallet-balance gate before sending (insufficient-balance dialog; pre-send check). - Prompt/response routed to Monitor logs.
2. Pi Agent — on-device coding agent
- Long-lived pi --mode rpc session with cwd /workspace; streaming thinking/answer/tool steps; ▷ toggles to □ to abort.
- Session management: New, Switch, Rename, Delete (bulk), Fork from message, Clone session, View session tree, Session stats, Compact context.
- New project… (/new-project) — creates a workspace folder + README and stops. - On-device APK builds: Enable on-device builds… (install toolchain) and Build APK… (/build-apk).
- android-on-device skill teaching Pi the toolchain limits (plain Java, no Kotlin/Gradle/deps) and the desktop fallback.
- Pi's extension-UI requests render as native approval dialogs; transcript reloads from session JSONL.
- "Project ready — review and publish?" hint after a session creates a new folder.
3. Files — workspace, Nostr git, releases, builds
- Workspace masthead with counts (projects · on Nostr · local); project tiles + "+ New project".
- File/folder browsing; Delete (bulk); Back walks up.
- Project page (per-repo ngit hub): state (public/local), repo URL + Copy, primary action (Publish / Commit & push / Retry sync / Sync now), Activity
(commits, open PRs/issues, releases).
- Publish to Nostr / Commit & push / Sync / Clone from ngit; Signer tools (Who am I?, Compare public identities, Amber/bunker connect, forget signer).
- Pull requests: list with filter by status/label, open PR, checkout, comment, add label, merge, close, diff view.
- Issues: list with filter, create, view with comment threads, comment, add label, resolve/close/reopen.
- Releases: list, publish (version + notes + asset), APK-aware publishing, verify (hash/size), view, edit notes, copy version, publish from
.ngit/release.yaml.
- nsite (static site) and container (OCI) publishing. - Repository settings: info, CI status, accept maintainer invite, add/remove relays, set title/description.
- Run ngit… console (guarded against secret-printing commands). - On-device build tools: install/remove, self-test; Build APK; Export signing key…. - Blossom servers: view/add/remove individually, clear, test reachability. - Advanced: GRASP server, Zapstore toggle, "How to ngit" guide.
4. Wallet — Lightning + Cashu
- Balance tile (total, mint/API-key details), Reload, API-key balances. - Receive (bolt11 invoice with Copy / open-in-wallet) and Send (bolt11 or guarded Cashu token with a "saved or redeemed" checkbox).
- Latest transactions + Full transaction history. - Mints: list, add, info, set default. - NPC: claim username, sync/claim pending. - Maintenance: Refund (reclaim), Wallet doctor, clean stuck operations. - Recovery: required recovery-phrase backup gate (WalletBackupActivity) — honest that restore-from-phrase isn't supported yet; wallet unlock.
5. Monitor — usage, providers, logs, privacy
- Segmented dashboard from /usage/summary: Overview · Today · Models · Providers · Tokens · Clients · Recent · Attestation.
- Attestation screen: human TEE status hero, the per-request verified record, and a no-spend "Verified now" probe with fingerprints + How-to-verify.
- Providers admin: routstrd's review-based defaults, privateprovider.xyz forced on, "Other providers".
- Logs (timestamped, copyable/clearable) and Diagnostics (status, model catalog refresh, daemon probe, runtime validation, Pi RPC probe, wire Pi agent).
- Privacy & data: clear chats & sessions, clear workspace, clear logs, clear attestation record.
Cross-cutting
- Privacy/attestation: attested TEE inference is the point; green reserved for verified evidence; no telemetry/analytics.
- Sandbox least-privilege: PRoot guests get only workspace/Pi home; Pi never receives the operator key or the ngit signer; app-owned ngit/Blossom commands are app-mediated.
- Amber (NIP-46) signer for Nostr; app-owned Android signing keystore for APKs (never given to Pi) with backup export.
- On-device toolchain (optional pinned download): JDK 17, aapt, apksigner, R8/D8, android.jar (API 30), bound at /opt/toolchain only when installed.
- Runtime management: bundled rootfs bootstrap/extraction, daemon supervision, DNS from the device's active network, wallet/ngit state kept outside the versioned rootfs.
Known limitations (from the code/docs)
- On-device builds are plain-Java only (no Kotlin/Gradle/deps/Compose); heavier apps → push to Nostr and build on desktop.
- Wallet cannot restore from recovery phrase yet.
- ngit cannot delete published applications/releases; no authenticated Blossom delete.
