Reference

Troubleshooting

Common issues when running Keynobi on macOS, connecting AI clients, or building Keynobi from source. Start with Health Center (Cmd+Shift+H)—it checks the Android SDK, ADB, emulator, Android Studio CLI, JDK, and app data directory, and tells you what to fix.

Using the app

No devices appear

  • Confirm adb devices works in a terminal.
  • Check Android SDK Path in Settings (Cmd+,) and the ADB item in Health Center.
  • For USB devices, confirm USB debugging is enabled and the computer is trusted on the device.
  • Click Refresh in the Devices sidebar. Wireless devices appear after you pair them with adb pair and adb connect.

Build fails immediately or Run App is disabled

  • If the project shows a Safe Mode badge, trust it first: click the badge in the title bar, or right-click the project and choose Trust Project. Safe Mode never runs the project's build code.
  • Open Health Center and check Java / JDK and Android SDK. The JDK must be one your Android Gradle Plugin supports (17+ for AGP 8). org.gradle.java.home in gradle.properties takes precedence over JAVA_HOME in Settings.
  • Confirm the project has a gradlew wrapper, then try Clean Project from the Command Palette.

Logcat is empty or stopped

  • Select an online device and press Start. Logcat shows only logs written after you pressed Start, so trigger the behavior again.
  • Clear restrictive filters such as package, age, or crash-only with Clear in the filter bar.
  • Keynobi retries when the device connection drops. If you see Logcat stopped, check adb devices and press Start.

Stack-trace lines do not open in Android Studio

Put Android Studio's studio command on your PATH: in Android Studio, choose Tools → Create Command-line Launcher. Health Center shows the Android Studio CLI status.

Layout capture fails

Confirm the device is online and unlocked, open the screen you want to inspect, then click Refresh. Secure screens (FLAG_SECURE) and some OS states return partial or empty dumps.

MCP cannot connect

  • Copy the setup command again from Health Center.
  • Confirm the app path in the command exists. Keynobi must be in /Applications, not inside a mounted DMG.
  • In Claude Code, run claude mcp list from your project folder. If Keynobi is missing, re-add it with --scope user.
  • If you use --project, confirm the folder exists and contains the Android project.

MCP works on the wrong project

The MCP server picks its project when your AI client starts it. Ask the client to call get_project_info: selected_by says whether the project came from --project, the client's working folder, or the last project open in Keynobi. Restart the MCP server from your AI client, or add --project /path/to/project to the setup command.

MCP builds fail with "This project is not trusted"

Open the project in Keynobi and choose Trust, or right-click it in the Projects sidebar and choose Trust Project. Then ask the AI client to build again—the MCP server does not need a restart.

MCP refuses a Gradle task

Publish, upload, uninstall, and Play Store or Maven Central release tasks are blocked for AI clients by default. Run them yourself, or turn on Allow unrestricted Gradle tasks under Settings → Tools → MCP.

App can't be opened because it is from an unidentified developer

GitHub Release DMGs are signed and notarized. This warning usually comes from a local build from source. Right-click the app → Open once to satisfy Gatekeeper.

No update notice for a newer release

Keynobi checks the latest GitHub Release on each launch. Confirm you are online, or open the Releases page directly. After updating, restart your AI clients so MCP uses the new binary.

Building Keynobi from source

cargo: command not found when running npm run tauri dev

Add to your shell config (e.g. ~/.zshrc), then restart the terminal:

source "$HOME/.cargo/env"

Port 1420 is already in use

Dev server port conflict during Tauri dev:

lsof -ti:1420 | xargs kill -9

First tauri dev is very slow

Expected on first compile (often several minutes). Later incremental builds are usually seconds.