This Flutter app is the cross-platform UI shell for StudyOS Agent. The Android target keeps the existing Java native layer and exposes it to Flutter through platform channels.
flutter pub get
flutter run -d chromeOther common targets:
flutter run -d android
flutter run -d macosflutter build web --release
python3 -m http.server 8080 --directory build/webOpen http://127.0.0.1:8080. Serving the folder matters; opening
build/web/index.html directly is not supported by Flutter web.
Fresh installs seed the assistant with the repository's OpenRouter endpoint and
model preset. GitHub push protection blocks committing OpenRouter keys, so users
still need to paste an API key in Settings -> Assistant setup -> Custom unless
the app was built with the Dart define below. Users can switch back to
On device for local model mode.
Android local mode probes the AICore Gemini Nano configurations supported by the device and preselects an available one. Unsupported configurations are hidden, while custom LiteRT-LM URL downloads remain available in a collapsed section. iOS local mode continues to use Apple Foundation Models when supported.
For development builds, override the seeded preset with Dart defines:
flutter run -d chrome \
--dart-define=STUDYOS_DEMO_OPENROUTER_ENDPOINT=https://openrouter.ai/api/v1/chat/completions \
--dart-define=STUDYOS_DEMO_OPENROUTER_MODEL=nvidia/nemotron-3-ultra-550b-a55b:free \
--dart-define=STUDYOS_DEMO_OPENROUTER_API_KEY="$OPENROUTER_API_KEY"The current bridge initializes native Android managers, routes Android messages
into the copied JarvisController, and exposes capability/world-state data.
The iOS bridge exposes native location/device state, notification reminders,
speech availability, text-to-speech, and Apple Foundation Models responses
when the current SDK/device supports the FoundationModels framework.
Unsupported native features should return explicit platform errors rather than mock responses.
The shared Dart catalog exposes public Mensa and Tübingen location tools to
both local and cloud assistants. Authenticated get_tasks and get_deadlines
tools use ephemeral on-device ILIAS/Moodle sessions and are available to local
and cloud assistants. In cloud mode, sanitized tool results are returned to the
configured model provider. Passwords, cookies, SAML fields, Moodle session keys, and
raw portal HTML must never enter prompts, tool results, traces, or caches.