Oracle is a handwriting-first AI experience for Android E Ink devices. Write a question directly on the page and finish with a five-point star. The page clears the original ink and writes the AI-generated answer one stroke at a time.
The app does not present its responses as prophecy and does not make real-world decisions for the user.
- Write naturally with a stylus and erase complete strokes.
- Submit automatically by drawing a five-point star. No submit button is required.
- Generate a new answer for each question with OpenAI, Anthropic, Gemini, or OpenRouter.
- Render Chinese and English answers as animated handwriting instead of displaying a handwriting font.
- Preserve visible spaces between English words and use language-appropriate punctuation.
- Keep the page blank while waiting for the AI response. No loading indicator or progress message is shown.
- Rewrite, cancel, ask again, and automatically clear an inactive session after 10 minutes.
- Switch the complete interface between Chinese and English.
- Configure the AI provider and API key from an in-app settings page.
- Show saved and APK-provided keys only as masked previews.
- Support BOOX raw ink, active-stylus Android devices, and touch-only fallback devices.
- Adapt the page to compact, medium, and large screens in portrait or landscape.
- Provide accessible actions and descriptions without placing extra guidance at the bottom of the writing page.
- Store no question, answer, or conversation history on the device.
- JDK 17
- Android SDK 35
- The included Gradle Wrapper
- Node.js, only for proxy and validation tools
- ADB, recommended for installation and device testing
- Minimum Android version: Android 8.0, API 26
- Target Android version: Android 15, API 35
- BOOX build: Onyx raw-ink integration
- Generic E Ink build: configurable E Ink refresh profile
- Generic Android build: standard Android drawing fallback
BOOX Go 10.3 is the primary verified physical device. A Pixel Tablet API 35 emulator has also been used to verify layout, touch fallback, and the complete question-and-answer flow. Other Android E Ink devices use the generic build and should be verified on their target hardware before release.
Users can configure the following providers inside the app:
- OpenAI
- Anthropic
- Gemini
- OpenRouter
Provider keys entered in the settings page are encrypted with Android Keystore and stored in the app's private storage. The UI displays only a masked preview.
For an internal build, add a Gemini key to local.properties. This file is
excluded by .gitignore.
gemini.apiKey=replace-with-a-new-restricted-key
gemini.model=gemini-3.5-flashThe preset lets the app use Gemini without requiring the user to enter a key on first launch.
A key embedded in an APK can be extracted. Use this option only for controlled internal distribution. Revoke any key that has appeared in chat, logs, or a repository.
For external distribution, keep the provider key on a server and configure the Gemini proxy:
export GEMINI_PROXY_URL=https://example.com/v1/oracleAlternatively, pass the URL directly to Gradle:
./gradlew :app:assembleBooxDebug \
-PgeminiProxyUrl=https://example.com/v1/oracleThe repository includes a reference proxy at server/gemini-proxy.mjs.
Build every supported debug variant:
./gradlew :app:assembleGenericDebug \
:app:assembleGenericEinkDebug \
:app:assembleBooxDebugBuild outputs:
- Generic Android:
app/build/outputs/apk/generic/debug/app-generic-debug.apk - Generic E Ink:
app/build/outputs/apk/genericEink/debug/app-genericEink-debug.apk - BOOX raw ink:
app/build/outputs/apk/boox/debug/app-boox-debug.apk
The generic E Ink build defaults to the balanced profile. An explicit profile can be selected at build time:
./gradlew :app:assembleGenericEinkDebug -PeinkProfile=slowAvailable values:
autofastbalancedslowstandard
An unsupported value stops the build.
Install the BOOX build:
adb install -r app/build/outputs/apk/boox/debug/app-boox-debug.apkLaunch the app:
adb shell am start -n com.magicboox.oracle/.MainActivityDeterministic screenshot states are available only in debug builds:
./gradlew :app:assembleBooxDebug -PscreenshotQa=true
adb install -r app/build/outputs/apk/boox/debug/app-boox-debug.apk
adb shell am start -n com.magicboox.oracle/.MainActivity \
--es demo answer-0 --el qa_seed 1001Release tasks reject -PscreenshotQa=true. Normal builds still allow
AndroMeld previews, ADB screenshots, and screen recording without exposing
deterministic QA states.
- The app requests network permission only.
- It does not request storage, camera, microphone, or location permission.
- Questions, answers, and conversation history are not written to local storage.
- The current question is uploaded as a cropped handwriting image only when an AI provider is used.
- Trigger-star strokes are excluded from the uploaded question image.
- Saved provider keys are encrypted with Android Keystore.
- Keys, questions, and answers are excluded from application logs.
- Android backup and device transfer are disabled for stored credentials.
- If an AI request fails, the app shows a retry state and never substitutes a prepared answer.
Additional implementation, handwriting, integration, and verification details are maintained in:
PRODUCT.mdDESIGN.mddocs/GEMINI_INTEGRATION.mddocs/HANDWRITING_SYSTEM.mddocs/HANDWRITING_BLIND_REVIEW.mddocs/VERIFICATION.md