Reading the repo
Reading the repo
Assembly instructions
An on-device AI agent for Android that operates apps and the web to get things done for you.
Saved setup from 11 h ago
Will it work on my device?
.github/CONTRIBUTING.mdEnglish | 简体中文
Help make Mika better. The easiest way is to add usage knowledge for an app or website, which needs no code; bug reports and code are welcome too.
The easiest contribution: write an APP.md for an app or a SITE.md for a website, or improve an existing one. They are plain-text Markdown files with a header, under core/src/main/resources/knowledge/; general how-to skills for a few kinds of tasks live under core/src/main/resources/skills/. See docs/dev/knowledge-format.en.md for the format. Existing knowledge is in Chinese, but new files can be written in English.
Mika can get things done just by looking at the screen; for apps and websites with usage knowledge (where things are, common ways to do things, what to watch out for), it looks the knowledge up when needed and takes fewer wrong turns. The current list is in the collapsed section under "What it can do" in the README.
When opening an issue, please include your phone model, Android version and Mika version ("About Mika" (关于 Mika) in Settings), what you did, what you expected and what actually happened. Screenshots from "View steps" (查看过程) help a lot (hide anything private first). In the app, About › Send feedback can copy diagnostics for you to paste into the issue; results from Settings › Recovery & repair › Compatibility self-check can be filed as a device report.
PRs welcome. Start with docs/dev/architecture.md (written against the current code, with class names and file paths) and docs/dev/roadmap.md (done, next, known issues). Please include unit tests with your changes. The developer docs are in Chinese for now.
Requires JDK 17 and the Android SDK (sdk.dir in local.properties, or the ANDROID_HOME environment variable). CLI tests also require Python 3.10+; select an interpreter with -PmikaPython=/path/to/python3.
./gradlew :app:assembleDebug # debug build
./gradlew :app:assemblePerf # build for judging smoothness: precompiled and non-debuggable like release, debug-signed, installs over the debug build
./gradlew :core:test :core:cliTest :app:testDebugUnitTest # unit tests
python3 -m unittest discover -s tools/i18n -v # translation tool tests (no JDK/Android SDK)
python3 tools/i18n/translations.py check # lightweight translation resource checks
./gradlew updateReadme # regenerate the built-in knowledge and provider lists in the READMEs
The debug build is not precompiled and its UI is several times slower; use the perf build to judge smoothness.
:core is pure Kotlin and holds the main loop, tools, prompts and knowledge, and can be run on a computer with unit tests and a fake model; :app is the Android host.generated markers are produced by ./gradlew updateReadme; don't edit them by hand. Unit tests check that they are up to date.README.md at the repository root is the original; the translations are in docs/readme/. README.zh-CN.md (Simplified Chinese) has the same generated sections as README.md; in README.zh-Hant.md, README.ja.md, README.ko.md and README.es.md the generated sections are replaced by one sentence pointing to the English or Simplified Chinese README. README.en.md at the root only points to README.md, kept so old links still work. Each translation starts with <!-- translated-from: README.md @ <fingerprint> -->, where the fingerprint is the first 12 hex digits of the SHA-256 of the root README.md with the generated sections removed. After you change README.md, ReadmeTranslationsTest lists the stale translations and prints the new fingerprint: update the translations to match, then replace the fingerprint at the top. Translations must also keep the same number of ## sections and the same local images as README.md. Native speakers are welcome to improve a translation with a PR.tools/sandbox/README.md.tools/i18n/README.md. These lightweight checks cover all 10 current UI languages, including Arabic, but do not replace the JVM StringResourcesTest checks for exact placeholders, CLDR plural rules and language registration.eval/README.md.Pull requests and pushes to main run on GitHub Actions (ci.yml); no secrets are required:
core (JVM): ./gradlew :core:testcli (Python): ./gradlew :core:cliTest, plus tools/i18n unit tests and translation resource checks (Python 3.10+; CI uses 3.12)app (Android): ./gradlew :app:testDebugUnitTest :app:assembleDebugrelay (Go): ./gradlew :core:relayTestReproduce locally with the commands above. The repository pins text files to LF in .gitattributes: goldens, prompts and the README are compared byte-for-byte, so line endings that vary by platform (for example an old Windows checkout with core.autocrlf=true) make tests and goldens disagree. If your working tree is not LF, re-checkout or convert it back to LF before running the tests or -PupdateSnapshots.
The developer docs index and reading order are in docs/dev/README.en.md; the user docs index is docs/README.en.md.
docs/dev/architecture.md: overall structure.docs/dev/roadmap.md: done, next, known issues and deferred items.docs/dev/knowledge-format.en.md: format of app and website knowledge and skills.docs/dev/skill-scripts.md: sandbox scripts that come with knowledge and skills.vX.Y.Z, with the APK attached to the release.perf build type, which is signed with the project's release key. Each release carries two APKs with the same version and signature: ./gradlew :app:assemblePerf writes app-universal-perf.apk (all architectures) and app-arm64-v8a-perf.apk (arm64-v8a native libraries only, smaller) to app/build/outputs/apk/perf/. Upload app-universal-perf.apk first, renamed to Mika-vX.Y.Z.apk, then app-arm64-v8a-perf.apk renamed to Mika-vX.Y.Z-arm64.apk: older app versions take the first .apk asset. Current versions take -arm64.apk on devices that support arm64-v8a and the all-architecture APK elsewhere. Keep the all-architecture name unchanged; the install-by-computer guide and older app versions look for it.https://api.github.com/repos/wangzan101/Mika/releases/latest and no other address.Then run bash setup.sh. It stops at the first error and is safe to run again. Servers and tests aren't started; it lists them at the end. Read it first.
Needs Git: xcode-select --install
git clone https://github.com/wangzan101/Mika.git cd Mika
JDK
brew install openjdk@21
./gradlew build -x test
./gradlew run
Then try saying: "Set alarms for 9:40 and 10:00 tomorrow morning" or "Check the weather at 8 every morning and tell me only if it will rain".
💡 Have a computer handy? Send this to the AI agent on it and it will set everything up for you:<br/>
Follow https://github.com/wangzan101/Mika/blob/main/docs/install-with-agent.en.md to install Mika on the Android phone connected over USB.
No reports for macOS yet.
Claude reads the 5 key files and writes a step-by-step guide for macOS. Once written, it's saved for everyone.