Claude a2150919ab docs: surface 4 Termux setup steps in the install error card
Live test on emulator-5554 (Pixel 10 Pro XL, Android 16)
with Termux 0.119.0-beta.3 confirmed that the local-install
path requires 4 user-side configuration steps before it can
proceed. The previous `Termux permission needed` card only
mentioned 2 of them (RUN_COMMAND permission, allow-external-apps
in Termux properties). The other 2 — installing Termux:API
and returning to Hermes to tap Retry — were implicit.

Update the v0.1.0 install-failure card to enumerate all 4
steps as a numbered list, and rename the card from
"Termux permission needed" to "Termux setup needed" (the
issue is broader than just one permission).

Strings touched (in `android-runner/app/src/main/res/values/strings.xml`
and the live mirror in `apps/mobile/android/app/src/main/res/values/strings.xml`,
both kept in sync by `setup-android.sh`):

- `termux_permission_needed_title`: "Termux permission needed" → "Termux setup needed"
- `termux_permission_needed_message`: rewrote as 4-step numbered list:
  1. Install Termux and (recommended) Termux:API from F-Droid
  2. Grant the "Run commands inside Termux environment" permission
  3. Enable allow-external-apps in Termux (long-press → Properties)
  4. Return to Hermes and tap Retry

CHANGELOG.md: added a "v0.1.0 live-test findings" subsection
under [0.1.0] with the 4 fixed bugs + a "Termux local-install
prerequisite" subsection explaining the 4 user-side steps.

Memory `hermes-mobile-workflow-smoke-status.md`: updated to
reflect the 4 fixed bugs, the placeholder DSN approach, the
4 user-side Termux setup steps, and the dead
port/hermes-api-plugin-capacitor-8 branch status.

Test plan `tidy-imagining-pnueli.md`: replaced the in-flight
test plan with a final summary of what was tested, what was
fixed, and what was deferred to v0.2.0.

Verified locally:
- ./gradlew :app:assembleDebug → BUILD SUCCESSFUL
- adb install -r app-x86_64-debug.apk → Success
- Fresh launch → Welcome → "Install locally (Termux)" → Continue
  → Install screen → 3/8 Clone failed → "Termux setup needed"
  card shows all 4 numbered steps clearly.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 21:50:47 -04:00

hermes-mobile

An Android port of hermes-desktop that runs hermes-agent on the device. The UI is a native Jetpack Compose port — no WebView, no Capacitor, no vendored React renderer. The Hermes Kotlin sources live in android-runner/; the live apps/mobile/android/ tree is regenerated by apps/mobile/scripts/setup-android.sh on every build. See docs/architecture.md for the full layout and design rationale.

The parity roadmap at ~/.claude/plans/groovy-fluttering-island.md has landed all 8 phases. v0.1.0 is the first public release — see CHANGELOG.md for the per-phase summary. The next iteration (v0.2.0) is in [Unreleased]; the v2 deferred items in the plan (iOS, Play Store, bundled uv, i18n, gateway auto-restart, Claw3D on mobile) are tracked there.

Layout

hermes-mobile/
├── android-runner/                          # canonical Kotlin sources
│   ├── README.md                            # edit conventions
│   └── app/src/main/
│       ├── kotlin/com/nousresearch/hermes/  # 33 .kt files: HermesApi, MainActivity,
│       │                                    #   GatewayClient, HermesInstaller, services,
│       │                                    #   Compose UI (chat, sessions, memory, ...)
│       ├── AndroidManifest.xml
│       └── res/values/strings.xml
├── apps/mobile/
│   ├── android/                             # generated Android project; Kotlin sources
│   │                                        #   synced from android-runner/ on every build
│   ├── package.json                         # minimal stub with android:assemble:* scripts
│   └── scripts/
│       └── setup-android.sh                 # rsync --delete runner → live; merge strings
│                                            #   and permissions
├── script/
│   ├── check-kotlin-drift.sh                # CI: fail if android-runner/ and live/ diverge
│   ├── sign-and-zipalign.sh
│   ├── write-update-manifest.sh
│   └── audit-a11y.sh
├── f-droid/                                 # F-Droid metadata + build script
├── keystore/                                # release.jks (RSA 4096, 25-year)
├── review/
│   ├── hermes-desktop/                      # upstream fathah/hermes-desktop (visual spec)
│   └── hermes-agent/                        # upstream NousResearch/hermes-agent (HTTP API)
├── docs/
│   └── architecture.md
└── .github/workflows/mobile-build.yml        # CI: sync, drift check, build, sign, release

Build

# One-time setup
pnpm install
bash apps/mobile/scripts/setup-android.sh   # rsync runner → live
bash script/check-kotlin-drift.sh          # verify in sync

# Build
cd apps/mobile/android
./gradlew :app:assembleDebug               # debug APK
./gradlew :app:assembleRelease             # release APK (needs keystore)
./gradlew test                             # unit tests
./gradlew connectedAndroidTest             # instrumented tests

Editing

Edit Kotlin sources in android-runner/, not in apps/mobile/android/. The live tree is regenerated by setup-android.sh on every build. CI's script/check-kotlin-drift.sh fails the build on any divergence.

See android-runner/README.md for the layout, edit conventions, and "how to add a new Hermes source" walkthrough.

Distribution

Channel Build Update mechanism
Sideload (GitHub Releases) assembleRelease (signed) In-app updater reads latest.json from the release
F-Droid f-droid/build.sh F-Droid client auto-update
Manual APK assembleDebug None

Parity status (v0.1.0)

Desktop Mobile (this repo)
Screens 20+ 13 implemented; 1 stub (Dashboard)
IPC methods ~188 152 implemented
Connection modes Local + remote + SSH All three implemented
Install Curl install.sh Termux + bundled Python (8 stages)
Gateway Python subprocess Python subprocess (same)
OAuth All providers All providers (deep-link via hermes://oauth-callback)
Updates electron-updater GitHub Releases (F-Droid: in-app disabled)
Crash reporting Optional Sentry Optional Sentry (8.43.1, opt-in via Settings)

See ~/.claude/plans/groovy-fluttering-island.md for the full roadmap and CHANGELOG.md for the per-phase delivery log.

S
Description
No description provided
Readme 8.1 MiB
Languages
Kotlin 97.5%
Shell 2.4%
Java 0.1%