plugins/plugin-computeruse/docs/MOBILE_ASSISTANT_ROUTING.md
Assistant entry surfaces are launch and capture surfaces. They are not a second task engine.
Siri/App Shortcuts, Android App Actions, Android assistant-role intents, and
desktop shortcut surfaces should route the user's utterance or tap into the
Eliza app/runtime. If the user asks for a reminder, check-in, follow-up,
watcher, recap, or approval, the runtime must create or update a LifeOps
ScheduledTask. Native mobile code may deliver notifications for tasks that
already exist, but it must not create native-only reminder state that bypasses
LifeOps.
ScheduledTask through the app/runtime.| Platform | Entry surface | Required routing contract |
|---|---|---|
| Mac | Shortcuts/deep link/menu-bar voice entry | Opens the app/runtime; LifeOps mutations are persisted as ScheduledTask records. |
| iOS | Siri/App Shortcuts/App Intents | Uses App Intents or app deep links to hand off to the app/runtime. No cross-app UI driving, and no native-only reminder store. |
| Android consumer | Static shortcuts + App Actions | shortcuts.xml and assistant intents open the app custom scheme; LifeOps scheduling happens after runtime routing. |
| Android AOSP | ROLE_ASSISTANT + privileged system app | Assistant role may wake Eliza more directly; AOSP-only accessibility/notification-listener services are available, but scheduled behavior still goes through the same ScheduledTask runner. |
Android consumer App Actions coverage:
| Flow | BII/static shortcut |
|---|---|
| Ask/chat | actions.intent.CREATE_MESSAGE, actions.intent.GET_THING, eliza_app_action_chat |
| Voice chat | actions.intent.OPEN_APP_FEATURE inline inventory, eliza_app_action_voice |
| LifeOps daily brief | actions.intent.OPEN_APP_FEATURE inline inventory, eliza_app_action_daily_brief |
| LifeOps task creation | actions.intent.OPEN_APP_FEATURE inline inventory, eliza_app_action_new_task |
| LifeOps task list | actions.intent.OPEN_APP_FEATURE inline inventory, eliza_app_action_tasks |
Each Android App Actions capability keeps a fallback fulfillment without a
required parameter. Feature-specific requests route through
eliza://feature/open?...; vague requests fall back to the chat route so
the runtime can disambiguate instead of executing native-only behavior.
The Play/Pixel build does not request ROLE_ASSISTANT,
ACTION_ASSIST, VOICE_COMMAND, or BIND_VOICE_INTERACTION; those are
reserved for AOSP/system validation builds. It also avoids unsupported BIIs
such as actions.intent.CREATE_THING; task creation is modeled as opening
the LifeOps task feature and letting the app/runtime confirm any mutation.
Checked 2026-05-14 against primary vendor docs:
shortcuts.xml.
Assistant matches a built-in intent declared there and launches the app to
the requested screen. See
https://developer.android.com/develop/devices/assistant/action-schema.ScheduledTask record is
created with kind: "reminder".ScheduledTask.trigger/relationship edge, not in a platform notification.appIntentList only reports local app/donated intents and does
not claim cross-app enumeration.ScheduledTask through the runtime.UNUserNotificationCenter entries, if any, reference an
existing task or deep link back into the app.AndroidManifest.xml registers @xml/shortcuts on MainActivity.eliza_app_action_chat static shortcut opens the app chat
route.ScheduledTask; no Java/Kotlin-only reminder table or notification-only
schedule is created.ROLE_ASSISTANT resolves to Eliza.android.intent.action.ASSIST and VOICE_COMMAND; both should
reach Eliza's app/runtime.ElizaAccessibilityService and
ElizaNotificationListenerService are present only on the AOSP/system APK,
not the Play/Pixel cloud APK.ScheduledTask.AOSP_SYSTEM_APP.md.ios-bridge.test.ts checks that the TypeScript iOS AppIntent registry stays
aligned with the native x-callback switch.android-bridge.test.ts checks that Android assistant/App Actions source
files route into app deep links rather than native notification creation.Implemented static/build coverage:
shortcuts.xml, is registered on
MainActivity, and is rewritten by run-mobile-build.mjs to the configured
package and URL scheme.ElizaAccessibilityService and
ElizaNotificationListenerService; android-cloud strips those services,
their Java sources, and the accessibility-service XML resource.ScheduledTask
creation remains owned by the LifeOps runtime.Still waiting on live device validation:
ElizaAppShortcuts.swift.Known remaining product test:
ScheduledTask. The remaining product test
is live end-to-end validation: speak or invoke a LifeOps reminder/check-in,
confirm the assistant launch payload sends through chat/planner, and verify a
LifeOps ScheduledTask record exists.