Mobile Router#
The mobile tRPC router is a dedicated tRPC entrypoint (/trpc/mobile) for the LobeHub React Native app. It is defined in apps/server/src/routers/mobile/index.ts and, per its file header, only includes routers that are actually used by the mobile client. Rather than sharing the full lambdaRouter used by web/desktop clients, mobileRouter mounts a manually maintained, curated subset of the same lambda/ router implementations.
Routers Present on Mobile#
The mobileRouter currently exposes 28 procedures:
agent, agentSkills, aiAgent, aiChat, brief, aiModel, aiProvider, chunk, composio, config, device, document, file, healthcheck, home, knowledgeBase, market, message, plugin, pushToken, session, sessionGroup, subscription (mobile-specific), task, taskTemplate, topic, upload, user
Routers Missing from Mobile (Lambda-only)#
The lambdaRouter exposes ~65 procedures. Notable ones absent from mobile include:
| Lambda Router | Impact |
|---|---|
userMemories, userMemory | Memory tools unavailable to agents on mobile |
search, webBrowsing | Search and web-crawl tool backends not routed |
generation, generationBatch, generationTopic | Image/media generation not available |
asr | Automatic speech recognition not available |
workspace, workspace* | Workspace management APIs absent |
share, exporter, importer | Export/import flows not exposed |
agentEval, ragEval | Evaluation pipelines not available |
notebook, thread, recent | Additional content types not exposed |
Critical Gap: Memory Tools#
The userMemories and userMemory routers — which back all memory tool procedures (toolSearchMemory, toolAddActivityMemory, getPersona, etc.) — are present in lambdaRouter but absent from mobileRouter. This causes memory tools to be completely filtered out of the agent tool list on mobile, even when memory is enabled in an agent's profile. The issue is confirmed in #16366: the agent reports having no memory tools and falls back to only plugin-provided tools (e.g., lobe-web-browsing).
How Routers Are Added to Mobile#
Adding a router to mobile is a two-line change: import the router from ../lambda/<name> and register it in the mobileRouter object. Recent examples following this pattern:
- PR #16360 (merged 2026-06-27): exposed
pluginRouterto mobile, enabling the Skill Store install flow - PR #14103 (merged 2026-04-23): exposed
aiAgentRouterto mobile, enabling Agent Gateway mode
The memory fix would follow the same pattern — adding userMemoriesRouter and userMemoryRouter to apps/server/src/routers/mobile/index.ts .
Execution Plan: A Second Layer of Restriction#
Router availability is a server-side gate. Separately, PR #15669 introduced a centralized resolveExecutionPlan() function that controls device tool availability (e.g., local execution, remote-device proxy) based on an executionTarget value. An executionTarget of 'none' or 'sandbox' blocks device tools regardless of which routers are mounted. This applies uniformly across all clients; it is orthogonal to the mobile router restriction but can further limit what capabilities an agent uses on mobile.