praisonai-mobile is a Tauri 2 shell around a webview that runs the agent loop in-process. The whole conversation happens on the device.
Assistant messages and tool results render as plain text by construction β every rowβs content is set through
textContent, never innerHTML. Model output, tool results, and summarised web pages cannot inject markup into the transcript. An untrusted string can appear on screen; it cannot become a script.Quick Start
1
Clone and install
2
Open a conversation
Tap a chat and the app dispatches the
chat route to a live screen β the transcript streams the agentβs reply token by token.3
Move around, then come back
Open Settings, scroll, tap About, then return. The chat screen is retained, so you land back where you were β same scroll position, same in-flight streaming.
4
Verify everything passes
check runs typecheck, boundaries, and test β the three gates that keep the two seams honest.The app ships on iOS 16+ and Android API 26+ via Tauri. The native shell handles safe-area insets, keyboard height, lifecycle, and the back gesture β see Native Shell.
Navigation
The app dispatches four screens. Only the chat screen survives navigation; the rest rebuild fresh on return.When you scroll up in a conversation, open Settings, and come back, you land where you left off β the transcript keeps its scroll position and any in-flight streaming.
Why It Matters
Every selling point is one line.How It Works
The app is six layers with two enforced seams: one for the agent framework, one for the UI shell.Best Practices
Your conversation is preserved
Your conversation is preserved
The chat screen is the only screen kept in the DOM when you navigate away. Its nodes stay, so scroll position and any streaming reply survive a trip to Settings and back.
Conversations are saved on this device
Conversations are saved on this device
When the on-device engine answers, the completed turn is written to the same session the chat list reads β so a conversation you had is there the next time you open the app.
Pick the engine that reports what your UI renders
Pick the engine that reports what your UI renders
The in-process
praisonai-ts engine executes tools but does not announce them, so capabilities.tools is false. Use remote-http when you need tool rows, approvals, or reasoning in the UI.Treat every stream event as typed
Treat every stream event as typed
Read events through the 11-event protocol rather than parsing prose. A tool call that silently failed still looks like a normal answer if you infer from text.
Never derive message indices client-side
Never derive message indices client-side
end.userIndex comes from the engine. A cancelled or errored turn is never persisted, so any index you compute from screen position drifts.Related
Architecture
How routes become screens, and where the session join lives.
Engines
The in-process engine, and how it persists a turn.
Native Shell
The Tauri shell β safe-area, keyboard, lifecycle, and back-gesture arbitration.
Getting Started
Clone, run in the webview, and swap engines.
Protocol
The 11 events every engine speaks.

