Platform / HANDBOOK
Clients and runtimes
Follow the shared teaching system across browser, desktop, mobile, and terminal—and understand where their capabilities differ.
One teaching system, several hosts
Keating separates deterministic pedagogy, agent execution, learner interaction, and account authority. A client renders an explanation and collects learner actions; the teaching engine creates plans, assessments, and artifacts; a runtime supplies model and workspace capabilities. Changing a host should not require inventing a different meaning for a completed quiz or saved study plan.
The repository contains a browser app, an Electron desktop host, an Expo/React Native mobile client, the Pi shell, and an OpenTUI host. Shared contracts support portability, but a shared type or renderer is not evidence that every released client supports the same complete workflow.
Browser execution is a capability choice
Browser-compatible work can stay on the learner's device. The runtime contract distinguishes browser-local execution from configured remote execution. Agents inspect capabilities before requesting work that needs native binaries, durable compute, server-held secrets, inbound networking, or stronger isolation.
The Flue integration documents an official runtime hosted inside NodePod with a browser-safe SDK transport and locally persisted checkpoints. Account-hosted conversation storage is a separate integration boundary. A signed-out local session must not silently become a server-hosted session.
Desktop adds a native workspace
Electron starts a local workspace service alongside the app. Its Runtime panel and model workspace tools operate on the same persistent files. Installed programs run with the current user's operating-system permissions; this is native execution, not an isolated sandbox.
The service binds to an ephemeral loopback port. A restricted preload bridge exposes specific operations to the trusted app frame; the public website cannot use that bridge. Filesystem operations check workspace boundaries, while command output, concurrency, duration, and file sizes are bounded. The command panel uses pipes rather than a full terminal emulator.
Mobile is a native client
The Expo app uses React Native rather than embedding the website. Its portable pedagogy adapter supports local plans, maps, and quizzes. Native streaming adapters handle supported provider protocols, and provider keys use SecureStore. Sessions and study notes are stored on-device.
The mobile README explicitly keeps its storage local-only: it does not join the Electron P2P mesh or promise cross-device session synchronization. Account login and remote evolution have separate integration and device-verification requirements. Browser recording activities use a capable-surface handoff where native recording is not implemented.
OpenUI carries meaning across surfaces
Learning interactions use typed semantic documents and host actions. OpenUI is the presentation protocol; it does not replace grading, learner state, persistence, or policy safeguards. Ephemeral documents belong to the current interaction, resumable documents represent unfinished work, and workspace documents are longer-lived learner artifacts.
The terminal host connects to Pi through RPC and adapts supported semantic nodes into terminal-safe controls. The classic shell remains available for Pi workflows outside the shared learner contract. When adding a component, update the contract, source mapper, parity fixtures, renderer actions, storage behavior, and web/mobile/terminal consumers together.