- gateway-plugin/: android platform plugin (plugin.yaml + adapter.py register(ctx) + no-op AndroidAdapter) + stub modules for M1-M5 - app/: Compose Multiplatform project (shared KMP + androidApp + desktopApp) with Gradle wrapper; builds :androidApp:assembleDebug and :desktopApp:compileKotlin - scripts/guard_hermes_agent.sh + pre-commit hook: fail if hermes-agent/ is staged (read-only reference, never committed) - .gitignore excludes hermes-agent/; docs/ reference library
67 lines
3.5 KiB
Markdown
67 lines
3.5 KiB
Markdown
# Iris × Hermes — Implementation Reference Library
|
||
|
||
A coder-facing reference library for building a **native Android + Desktop
|
||
experience** for [hermes-agent](https://github.com/NousResearch/hermes-agent),
|
||
connected through a **gateway platform plugin**.
|
||
|
||
This folder is the single source of truth for *what to build and why*. Read it
|
||
top-to-bottom once, then use the numbered docs as a lookup while implementing.
|
||
|
||
> ⚠️ **READ FIRST — two hard rules**
|
||
> 1. **`hermes-agent/` (sibling of this folder) is a read-only research
|
||
> reference. It must NEVER be committed, pushed, or shipped.** It is
|
||
> git-ignored at the repo root. We only *install* our plugin into a live
|
||
> hermes install (`~/.hermes/plugins/`); we never modify hermes core.
|
||
> 2. **ADB is installed and a device is connected** (`a5ca2a4b`, Xiaomi MIX 2S,
|
||
> Android 10 / API 29). Use it to install/launch/debug the app on-device.
|
||
|
||
---
|
||
|
||
## Reading order
|
||
|
||
| # | File | When to read |
|
||
|---|------|--------------|
|
||
| 0 | [`00-overview.md`](00-overview.md) | Always first. Vision, scope, disclaimers, locked decisions. |
|
||
| 1 | [`01-architecture.md`](01-architecture.md) | Before touching code. System shape + rationale. |
|
||
| 2 | [`02-monorepo.md`](02-monorepo.md) | When scaffolding the repo. |
|
||
| 3 | [`03-gateway-plugin.md`](03-gateway-plugin.md) | When building the Python plugin. |
|
||
| 4 | [`04-wire-protocol.md`](04-wire-protocol.md) | When implementing either side of the WS. |
|
||
| 5 | [`05-streaming.md`](05-streaming.md) | Streaming / reasoning / tools / intermediate. |
|
||
| 6 | [`06-channels-cron-search.md`](06-channels-cron-search.md) | Channels, threads, cron delivery, search. |
|
||
| 7 | [`07-media.md`](07-media.md) | Media upload/download + playback. |
|
||
| 8 | [`08-push.md`](08-push.md) | Push (FCM + ntfy), outbox, sync. |
|
||
| 9 | [`09-pairing-security.md`](09-pairing-security.md) | Pairing, auth, security model. |
|
||
| 10 | [`10-android-app.md`](10-android-app.md) | When building the Android app. |
|
||
| 11 | [`11-desktop-app.md`](11-desktop-app.md) | When building the Desktop app. |
|
||
| 12 | [`12-toolchain.md`](12-toolchain.md) | First time on a machine (JDK/SDK/uv/Firebase). |
|
||
| 13 | [`13-testing.md`](13-testing.md) | Writing tests + on-device ADB workflow. |
|
||
| 14 | [`14-milestones.md`](14-milestones.md) | Planning work / tracking progress. |
|
||
| 15 | [`15-hermes-reference.md`](15-hermes-reference.md) | **Cheat-sheet** of hermes-agent source to read. |
|
||
| 16 | [`16-open-questions.md`](16-open-questions.md) | Decisions made + open items. |
|
||
|
||
Machine-readable / diagrams:
|
||
- [`protocol/frames.schema.json`](protocol/frames.schema.json) — wire-frame schema.
|
||
- [`diagrams/architecture.mmd`](diagrams/architecture.mmd) — mermaid architecture.
|
||
|
||
---
|
||
|
||
## The three deliverables (one monorepo)
|
||
|
||
1. **`gateway-plugin/`** — a Python hermes **platform plugin** named `android`.
|
||
Runs inside the `hermes gateway` process. Opens a WebSocket server the apps
|
||
connect to. Implements the full `BasePlatformAdapter` contract. **Zero new
|
||
Python dependencies, zero hermes-core changes.**
|
||
2. **`app/androidApp`** — native Kotlin + Jetpack Compose client.
|
||
3. **`app/desktopApp`** — Kotlin + Compose Multiplatform client that *shares*
|
||
the Android app's code and is "tweaked" for a big screen.
|
||
|
||
The Android and Desktop clients live in **one Compose Multiplatform Gradle
|
||
project** (`app/`) with a shared KMP module (`app/shared`).
|
||
|
||
---
|
||
|
||
## Status
|
||
|
||
- **Phase:** Planning complete → ready to implement (Milestone M0).
|
||
- **Owner decisions locked:** see [`16-open-questions.md`](16-open-questions.md).
|
||
- **Last updated:** 2026-08-19. |