Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
137 commits
Select commit Hold shift + click to select a range
c62ccf5
Add ChatGPT Web model transport
adybag14-cyber Apr 9, 2026
95b96c8
Polish ChatGPT Web CLI and status support
adybag14-cyber Apr 9, 2026
5b68f53
Add ChatGPT Web auth flow support
adybag14-cyber Apr 9, 2026
f6fa173
fix: add explicit chatgpt-web auth paths
adybag14-cyber Apr 9, 2026
4ecbb96
feat: add termux browser bootstrap for chatgpt-web auth
adybag14-cyber Apr 9, 2026
c62f442
fix: add browser bootstrap to chatgpt-web auth menu
adybag14-cyber Apr 9, 2026
c1e5dd3
fix: restore chatgpt-web streaming responses
adybag14-cyber Apr 9, 2026
045d412
fix: parse chatgpt-web patch-only stream events
adybag14-cyber Apr 9, 2026
bcefc11
fix: harden chatgpt-web tool loop reliability
adybag14-cyber Apr 9, 2026
eac047d
fix: stabilize termux branch test suite
adybag14-cyber Apr 10, 2026
0cfbe16
fix: harden chatgpt-web tool calling on termux
adybag14-cyber Apr 10, 2026
037a1db
fix: harden chatgpt-web edge-case tool routing
adybag14-cyber Apr 10, 2026
30db484
fix: resolve chatgpt-web instant image outputs
adybag14-cyber Apr 10, 2026
a772d85
fix: harden chatgpt-web advanced tool routing
adybag14-cyber Apr 10, 2026
4f2221f
fix: restore full suite stability after rebase
adybag14-cyber Apr 10, 2026
f29ce55
fix: harden chatgpt-web local tool loop
adybag14-cyber Apr 10, 2026
9bfda12
docs: add Android APK CI port plan
adybag14-cyber Apr 10, 2026
61f49e7
feat: add Android app scaffold and CI release lane
adybag14-cyber Apr 10, 2026
aaa6ad0
fix: harden chatgpt-web subagent delegation
adybag14-cyber Apr 11, 2026
318e6ef
fix: improve chatgpt-web delegated file prompts
adybag14-cyber Apr 11, 2026
5bce469
fix: refine delegated chatgpt-web file prompts
adybag14-cyber Apr 11, 2026
e5e6d84
feat(android): add nous portal app section
adybag14-cyber Apr 11, 2026
59d3d58
fix(android): make chaquopy packaging wheel-safe
adybag14-cyber Apr 11, 2026
1fac7e7
fix(chatgpt-web): force follow-up tool calls after truncation
adybag14-cyber Apr 11, 2026
203128f
fix: restore full-suite stability
adybag14-cyber Apr 11, 2026
1518d58
fix(android): track app stores for kotlin build
adybag14-cyber Apr 11, 2026
db51baf
fix(android): use real org.json in unit tests
adybag14-cyber Apr 11, 2026
239e780
test: make modal setup direct-mode test hermetic
adybag14-cyber Apr 11, 2026
8ce7883
feat(android): add corr3xt auth hub and alpha release plumbing
adybag14-cyber Apr 11, 2026
70c3d45
feat(android): harden corr3xt auth callback flow
adybag14-cyber Apr 11, 2026
700802b
fix(android): import ActivityNotFoundException from content
adybag14-cyber Apr 11, 2026
ad11f0f
test(android): run auth callback unit tests with Robolectric
adybag14-cyber Apr 11, 2026
5be9cc4
fix(android): use available Robolectric release
adybag14-cyber Apr 11, 2026
9c43b91
fix(android): package iteration limits and refresh branding
adybag14-cyber Apr 11, 2026
318a45e
fix(android): use framework parent for custom app theme
adybag14-cyber Apr 11, 2026
df3069c
fix(android): rely on RowScope weight without import
adybag14-cyber Apr 11, 2026
2403c4e
feat(android): add onboarding and portal fallback guidance
adybag14-cyber Apr 11, 2026
b9d7ba9
feat(android): add workspace tools and accessibility controls
adybag14-cyber Apr 11, 2026
1f140e8
fix(android): track device capability store
adybag14-cyber Apr 11, 2026
9a0ffe3
feat(android): add direct shared-folder and UI targeting tools
adybag14-cyber Apr 11, 2026
c141cf3
ci(android): move workflows to node24-ready actions
adybag14-cyber Apr 11, 2026
75f3918
docs(android): add linux command subsystem plans
adybag14-cyber Apr 11, 2026
0c20a8c
feat(android): add local linux command suite
adybag14-cyber Apr 11, 2026
ba58977
fix(android): make linux asset prep repo-root aware
adybag14-cyber Apr 11, 2026
3e1d942
fix(execute-code): mirror terminal watch patterns stub
adybag14-cyber Apr 11, 2026
a98b454
fix: stabilize post-rebase gateway and runtime regressions
adybag14-cyber Apr 11, 2026
2c9246a
feat(android): revamp mobile shell and chat ui
adybag14-cyber Apr 12, 2026
97c0a65
fix(android): restore ci kotlin imports for chat shell
adybag14-cyber Apr 12, 2026
cc283e0
feat(android): add dark shell and device control center
adybag14-cyber Apr 12, 2026
e60681d
feat(android): add portal fullscreen and model downloads
adybag14-cyber Apr 12, 2026
192c27c
feat(android): add local backend switches and app languages
adybag14-cyber Apr 12, 2026
bb11d38
fix(android): polish localized ui and model downloads
adybag14-cyber Apr 12, 2026
7896541
fix(android): sync gemma4 local runtime selection
adybag14-cyber Apr 12, 2026
0417c91
feat(android): add qwen auth and mobile download overrides
adybag14-cyber Apr 12, 2026
64ea585
fix(android): refresh locale state and relax model gating
adybag14-cyber Apr 12, 2026
4389bef
fix: harden android local inference and chatgpt-web delegation
adybag14-cyber Apr 13, 2026
2f42884
fix(android): harden local inference startup
adybag14-cyber Apr 13, 2026
66379d4
fix: relax managed modal terminal test patching
adybag14-cyber Apr 14, 2026
2b9094b
fix: restore copilot runtime base URLs
adybag14-cyber Apr 14, 2026
a811b69
Add ChatGPT Web browser auth support for Windows and WSL
adybag14-cyber Apr 15, 2026
173191e
fix: restore interrupt cleanup after rebase
adybag14-cyber Apr 18, 2026
5826579
fix: remove stale nous setup import
adybag14-cyber Apr 18, 2026
9822234
feat: add remote ChatGPT Web browser auth helper
adybag14-cyber Apr 18, 2026
96c380a
fix: reset stale chatgpt web threads after 404
adybag14-cyber Apr 18, 2026
85b807a
feat: expand chatgpt web auxiliary and prompt harness
adybag14-cyber Apr 19, 2026
7ac4c8b
feat: harden chatgpt-web continuation loop
adybag14-cyber Apr 19, 2026
842b4ca
feat: strengthen chatgpt-web browser tool harness
adybag14-cyber Apr 19, 2026
4834fde
feat: harden chatgpt-web multimodal tool routing
adybag14-cyber Apr 19, 2026
1a5be80
fix: harden chatgpt-web live browser soak paths
adybag14-cyber Apr 19, 2026
4a4461f
feat: harden chatgpt-web live soak routing
adybag14-cyber Apr 20, 2026
b7444b1
fix: resolve rebase indentation issues in run_agent.py
Apr 26, 2026
f9dc7a8
fix: harden chatgpt-web subagent delegation
adybag14-cyber Apr 11, 2026
0a657c3
fix: improve chatgpt-web delegated file prompts
adybag14-cyber Apr 11, 2026
6ac29d6
fix: restore full-suite stability
adybag14-cyber Apr 11, 2026
95fa783
fix: stabilize post-rebase gateway and runtime regressions
adybag14-cyber Apr 11, 2026
b84b942
fix: harden android local inference and chatgpt-web delegation
adybag14-cyber Apr 13, 2026
61567e4
fix: restore interrupt cleanup after rebase
adybag14-cyber Apr 18, 2026
80c4585
fix: reset stale chatgpt web threads after 404
adybag14-cyber Apr 18, 2026
96f4ccf
feat: expand chatgpt web auxiliary and prompt harness
adybag14-cyber Apr 19, 2026
4ad431e
feat: harden chatgpt-web continuation loop
adybag14-cyber Apr 19, 2026
d7ab073
feat: strengthen chatgpt-web browser tool harness
adybag14-cyber Apr 19, 2026
a459003
feat: harden chatgpt-web multimodal tool routing
adybag14-cyber Apr 19, 2026
70ce3ac
fix: harden chatgpt-web live browser soak paths
adybag14-cyber Apr 19, 2026
3c98af3
feat: harden chatgpt-web live soak routing
adybag14-cyber Apr 20, 2026
9186868
fix(android): harden Gradle task caching for Chaquopy wheel and asset…
Apr 26, 2026
fa4bb78
fix: resolve MenuAnchorType deprecation in SettingsScreen
Apr 26, 2026
e1aa46f
feat(android): add ModelManagerViewModel and ModelCatalogEntry for Ed…
Apr 26, 2026
81ba577
Enable native Android Gemma agent runtime
adybag14-cyber May 2, 2026
863e312
Fix post-rebase ChatGPT Web validation
adybag14-cyber May 2, 2026
a2add01
Fix Android Termux release workflow
adybag14-cyber May 2, 2026
40d4ee4
Fix Android native shell fallback for LiteRT tools
adybag14-cyber May 2, 2026
6566412
Update Android shell fallback smoke assertion
adybag14-cyber May 2, 2026
b96adfc
Expand Android native model and tool validation
adybag14-cyber May 3, 2026
28d56ce
feat(android): ship native Gemma agent release
adybag14-cyber May 3, 2026
0e5f610
ci: skip missing Vercel deploy hook
adybag14-cyber May 3, 2026
ee168ab
fix(android): reject web task LiteRT artifacts
adybag14-cyber May 3, 2026
c1b8066
fix(android): publish real universal release apk
adybag14-cyber May 3, 2026
7ba7a6a
fix(android): import existing local model files
adybag14-cyber May 3, 2026
3c02219
fix(android): bound LiteRT LM proxy generation
adybag14-cyber May 3, 2026
1b7fe49
fix(android): avoid async LiteRT LM proxy crash
adybag14-cyber May 3, 2026
1661c84
fix(android): use CPU when OpenCL is not app-loadable
adybag14-cyber May 3, 2026
623a4f8
test(android): accept OpenCL-aware vision backend
adybag14-cyber May 3, 2026
1917e7d
fix(android): enable Adreno OpenCL native tools
adybag14-cyber May 3, 2026
7313400
fix(android): add structured native file write tool
adybag14-cyber May 3, 2026
d8254f5
fix(android): run gguf tools through native app launchers
adybag14-cyber May 3, 2026
0c8b503
test(android): cover qwen gguf chat viewmodel path
adybag14-cyber May 4, 2026
e7b5790
feat(android): simplify local model setup
adybag14-cyber May 4, 2026
9b92770
feat(android): add signed model catalog worker
adybag14-cyber May 4, 2026
b76e25a
Fix Android validation after upstream rebase
May 4, 2026
b10cb64
fix(android): align release APK with fdroid reproducible builds
adybag14-cyber May 5, 2026
fcf5dbc
fix(android): canonicalize chaquopy release metadata
adybag14-cyber May 5, 2026
63211de
fix(android): make chaquopy apk assets reproducible
adybag14-cyber May 5, 2026
b42bb6a
test(android): expect sorted linux manifest links
adybag14-cyber May 5, 2026
fb55535
fix(android): canonicalize chaquopy requirements archive
adybag14-cyber May 5, 2026
8d44d01
fix(fdroid): make autoupdate version checks future-proof
adybag14-cyber May 5, 2026
ffb5e83
test: harden termux validation on windows
adybag14-cyber May 6, 2026
33d84bf
feat(android): harden native agent release
adybag14-cyber May 5, 2026
149edbb
test(android): preserve system shell fallback state
adybag14-cyber May 5, 2026
2376b17
feat(android): add accessibility UI tool
adybag14-cyber May 5, 2026
67f4367
test(android): derive fdroid version expectations
adybag14-cyber May 5, 2026
2242ead
feat(android): add Shizuku privileged shell tool
adybag14-cyber May 6, 2026
78cba6d
docs(android): map Tasker automation parity
adybag14-cyber May 6, 2026
4b4af22
feat(android): add tasker style automations
adybag14-cyber May 6, 2026
6a259ba
feat(android): add automation variables and triggers
adybag14-cyber May 6, 2026
7abbce5
feat(android): add saved file and system automations
adybag14-cyber May 6, 2026
2c50d5a
feat(android): add saved ui automations
adybag14-cyber May 6, 2026
ced1dfb
feat(android): add saved app launch automations
adybag14-cyber May 6, 2026
1e719c9
feat(android): add app foreground automation triggers
adybag14-cyber May 6, 2026
f90eb7a
feat(android): add notification automation triggers
adybag14-cyber May 6, 2026
eca8061
feat(android): add time automation triggers
adybag14-cyber May 6, 2026
87c3a6c
fix(android): mirror termux assets without symlink extraction
adybag14-cyber May 6, 2026
1b19e00
test: mark Kimi async auxiliary test
adybag14-cyber May 6, 2026
7cfc1e2
feat(android): add shizuku app actions
adybag14-cyber May 6, 2026
2c4bcaa
feat(android): save shizuku automation actions
adybag14-cyber May 6, 2026
fb3cb8c
feat(android): add saved intent automations
adybag14-cyber May 6, 2026
c3d3ba4
feat(android): add shizuku state automations
adybag14-cyber May 6, 2026
0db526b
feat(android): add calendar event automations
adybag14-cyber May 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
82 changes: 82 additions & 0 deletions .github/workflows/android-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
name: Android Release

on:
release:
types:
- published

concurrency:
group: android-release-${{ github.event.release.tag_name }}
cancel-in-progress: false

jobs:
build-release:
runs-on: ubuntu-latest
timeout-minutes: 45
permissions:
contents: write

steps:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Java 21
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: '21'
cache: gradle

- name: Set up Python 3.13 for Chaquopy
uses: actions/setup-python@v6
with:
python-version: '3.13'

- name: Set up Android SDK
uses: android-actions/setup-android@v4

- name: Restore signing material
env:
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
run: |
test -n "$ANDROID_KEYSTORE_BASE64"
test -n "$ANDROID_KEYSTORE_PASSWORD"
test -n "$ANDROID_KEY_ALIAS"
test -n "$ANDROID_KEY_PASSWORD"
echo "$ANDROID_KEYSTORE_BASE64" | base64 --decode > android/release.keystore
cat > android/keystore.properties <<EOF
storeFile=release.keystore
storePassword=$ANDROID_KEYSTORE_PASSWORD
keyAlias=$ANDROID_KEY_ALIAS
keyPassword=$ANDROID_KEY_PASSWORD
EOF

- name: Ensure Gradle wrapper is executable
run: chmod +x android/gradlew

- name: Build signed Android artifacts
working-directory: android
env:
HERMES_RELEASE_TAG: ${{ github.event.release.tag_name }}
SOURCE_DATE_EPOCH: "315532800"
run: |
rm -rf ../build
export PYTHON_FOR_BUILD="$(command -v python3.13 || command -v python3 || command -v python)"
./gradlew :app:assembleRelease :app:bundleRelease

- name: Rename artifacts and write checksums
run: |
python scripts/android_release_manifest.py --tag "${{ github.event.release.tag_name }}"

- name: Upload release assets
env:
GH_TOKEN: ${{ github.token }}
run: |
gh release upload "${{ github.event.release.tag_name }}" \
dist/android-release/*.apk \
dist/android-release/*.aab \
dist/android-release/*.sha256 \
--clobber
73 changes: 73 additions & 0 deletions .github/workflows/android.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
name: Android

on:
push:
branches:
- feat/termux-install-path
pull_request:
workflow_dispatch:

concurrency:
group: android-${{ github.ref }}
cancel-in-progress: true

jobs:
smoke:
runs-on: ubuntu-latest
timeout-minutes: 20

steps:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Java 21
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: '21'
cache: gradle

- name: Set up Python 3.13 for Chaquopy
uses: actions/setup-python@v6
with:
python-version: '3.13'

- name: Set up Android SDK
uses: android-actions/setup-android@v4

- name: Install Python test dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -e '.[android,dev]' -c constraints-android.txt

- name: Run Android-related Python tests
run: |
python -m pytest \
tests/hermes_android \
tests/hermes_android/test_android_packaging.py \
tests/gateway/test_api_server_toolset.py \
tests/gateway/test_api_server_android_toolset.py \
tests/tools/test_skills_sync.py \
tests/tools/test_web_tools_firecrawl_fallback.py \
tests/run_agent/test_run_agent_chatgpt_web.py \
-q

- name: Ensure Gradle wrapper is executable
run: chmod +x android/gradlew

- name: Build Android debug APK and run unit tests
working-directory: android
env:
SOURCE_DATE_EPOCH: "315532800"
run: |
rm -rf ../build
export PYTHON_FOR_BUILD="$(command -v python3.13 || command -v python3 || command -v python)"
./gradlew :app:testDebugUnitTest -PskipHermesAndroidLinuxAssets=true
./gradlew :app:assembleDebug

- name: Upload debug APK artifact
uses: actions/upload-artifact@v7
with:
name: hermes-agent-android-debug-apk
path: android/app/build/outputs/apk/debug/*.apk
if-no-files-found: error
9 changes: 8 additions & 1 deletion .github/workflows/deploy-site.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,14 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Trigger Vercel Deploy
run: curl -X POST "${{ secrets.VERCEL_DEPLOY_HOOK }}"
env:
VERCEL_DEPLOY_HOOK: ${{ secrets.VERCEL_DEPLOY_HOOK }}
run: |
if [ -z "$VERCEL_DEPLOY_HOOK" ]; then
echo "VERCEL_DEPLOY_HOOK is not configured; skipping Vercel deploy."
exit 0
fi
curl -fsS -X POST "$VERCEL_DEPLOY_HOOK"

deploy-docs:
if: github.repository == 'NousResearch/hermes-agent'
Expand Down
10 changes: 10 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ run_datagen_sonnet.sh
source-data/*
run_datagen_megascience_glm4-6.sh
data/*
!android/app/src/main/java/com/nousresearch/hermesagent/data/
!android/app/src/main/java/com/nousresearch/hermesagent/data/*.kt
node_modules/
browser-use/
agent-browser/
Expand Down Expand Up @@ -70,3 +72,11 @@ mini-swe-agent/
result
website/static/api/skills-index.json
models-dev-upstream/

# Android local build / signing state
android/.gradle/
android/build/
android/app/build/
android/local.properties
android/keystore.properties
android/release.keystore
2 changes: 2 additions & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
include constraints-termux.txt
include constraints-android.txt
graft skills
graft optional-skills
global-exclude __pycache__
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ Works on Linux, macOS, WSL2, and Android via Termux. The installer handles the p

> **Android / Termux:** The tested manual path is documented in the [Termux guide](https://hermes-agent.nousresearch.com/docs/getting-started/termux). On Termux, Hermes installs a curated `.[termux]` extra because the full `.[all]` extra currently pulls Android-incompatible voice dependencies.
>
> **Android app:** Hermes also has an in-repo Android APK workstream under `android/`, with GitHub Actions workflows for debug and release artifact builds. This app path is separate from the Termux CLI path.
>
> **Windows:** Native Windows is not supported. Please install [WSL2](https://learn.microsoft.com/en-us/windows/wsl/install) and run the command above.

After installation:
Expand Down
25 changes: 25 additions & 0 deletions RELEASE_v0.13.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Hermes Agent v0.13.0 (v2026.5.3)

**Release Date:** May 3, 2026

> Native Android Gemma release. Hermes can now run the Android APK as a local Gemma-powered agent path with first-class Gemma 4/Gemma 3 model selection, image attachment plumbing, Python 3.12 Chaquopy builds, and validated native tool access on the emulator.

## Highlights

- **Gemma 4 local Android agent path** - Gemma 4 E2B and E4B LiteRT-LM artifacts load and answer locally through the in-app OpenAI-compatible proxy. Gemma 4 E2B also powers native chat/tool-call flows that create, delete, and inspect files through the embedded Android Linux command suite.
- **First-class Gemma model selection** - Settings now has a real model-selection dropdown card with provider suggestions plus local Gemma 4, Gemma 3, Gemma 3 vision, and Gemma 3n vision entries.
- **Multimodal request plumbing** - Chat can attach images, preserve image attachments in state, encode them as OpenAI-style `image_url` content parts, and pass multimodal payloads through API, SSE, and native tool-calling clients.
- **Vision-safe LiteRT-LM behavior** - Gemma 3/Gemma 3n vision models are represented as first-class local options. Text-only models now reject image requests with a clear 400 instead of silently ignoring images. The image-description instrumentation test runs automatically when a Gemma 3/Gemma 3n vision artifact is provisioned.
- **Python 3.12 Android runtime** - Chaquopy and GitHub Actions now build with Python 3.12, and Android CI/release jobs use JDK 21 for LiteRT-LM compatibility.
- **Deep UI visual coverage** - Added an emulator UI flow that captures chat typing, Settings selection, the model dropdown, and translated Spanish pages across Settings, Accounts, Device, and Portal.
- **Native Android tool coverage** - Added emulator tests for terminal tool file creation/deletion, Android system status, cron lifecycle, and background runtime start/stop.
- **Branding refresh** - Android launcher/topbar branding now uses the Nous/Hermes thumbnail asset.

## Validation

- `python -m pytest tests/hermes_android -q`
- `./gradlew :app:testDebugUnitTest -PskipHermesAndroidLinuxAssets=true`
- `./gradlew :app:installDebug :app:installDebugAndroidTest`
- `adb shell am instrument ... DeepAppUiVisualInstrumentedTest`
- `adb shell am instrument ... Gemma4LocalInferenceInstrumentedTest,NativeAppChatAndToolInstrumentedTest,NativeAppUiChatInstrumentedTest,NativeAgentToolAccessInstrumentedTest,LiteRtLmModelMatrixInstrumentedTest`
- Additional model matrix checks passed for Gemma 4 E4B, Qwen3 0.6B, and Qwen2.5 1.5B. Phi-4-mini was attempted under the 5 GB artifact ceiling but the emulator aborted inside the native LiteRT loader during initialization, so it is not marked supported in this release.
20 changes: 20 additions & 0 deletions RELEASE_v0.13.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Hermes Agent v0.13.1

**Release Date:** May 3, 2026

Patch release for the native Android Gemma agent after live-device ADB validation on an arm64 phone.

## Fixes

- Rebased `feat/termux-install-path` on current upstream `NousResearch/hermes-agent/main`.
- Fixed LiteRT-LM artifact selection so Gemma 4 downloads prefer Android `.litertlm` bundles instead of `*-web.task` browser FlatBuffers.
- Added runtime preflight for stale or exact `.task` files that contain `TFL3` FlatBuffer headers, returning a clear message to remove the web task and download the `.litertlm` artifact.
- Updated Android backend compatibility checks so existing preferred `*-web.task` downloads are rejected before engine startup instead of surfacing `Unable to open zip archive`.
- Updated the Hermes Android debugging skill with the live-phone ADB diagnosis flow.

## Validation

- `python -m pytest tests/hermes_android/test_android_model_downloads.py tests/hermes_android/test_android_multimodal_model_selection.py -q`
- `./gradlew :app:testDebugUnitTest -PskipHermesAndroidLinuxAssets=true`
- `./gradlew :app:assembleDebug`
- Live phone ADB confirmed the failing `gemma-4-e2b-it-web.task` artifact starts with `TFL3` bytes and is not a LiteRT-LM bundle.
16 changes: 16 additions & 0 deletions RELEASE_v0.13.10.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Hermes Agent v0.13.10

This release adds a signed Cloudflare-backed model catalog for Android local inference and makes tested model setup a single dropdown flow in Settings.

- Adds a Cloudflare Worker model index with D1 storage, KV-published signed JSON, Hugging Face webhook ingestion, scheduled scans, and an authenticated HTTP GET scan fallback for cron-only environments.
- Discovers small mobile-friendly model files under 5 GiB, including Unsloth GGUF quantizations and LiteRT-LM Gemma builds.
- Adds Android signature verification for the catalog before any detected model is shown.
- Adds one Settings dropdown for detected downloadable models and a single action to download, mark preferred, and start the local runtime.
- Keeps Gemma 4 LiteRT-LM and Qwen3.5 0.8B GGUF ranked as first-class Android choices.
- Updates the F-Droid metadata template for the v0.13.10 release tag and Android version code.

Validation:

- Worker TypeScript check passed with `npm run check`.
- Android Kotlin compile, debug unit tests, and debug APK assembly passed with JDK 21, Android SDK 35, and Python 3.12.
- Emulator smoke test loaded the signed catalog in Settings and showed 62 downloadable model choices from the deployed worker.
14 changes: 14 additions & 0 deletions RELEASE_v0.13.11.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Hermes Agent v0.13.11

Android/F-Droid reproducibility release.

## Android

- Builds the embedded Chaquopy runtime with Python 3.13 so GitHub release APKs match Debian 13/F-Droid builds.
- Emits a single universal release APK and disables Android dependency metadata for F-Droid scanner compatibility.
- Sorts generated Android Linux assets and native-library packaging inputs for deterministic release artifacts.

## Packaging

- Bumps the package version to 0.13.11.
- Updates the F-Droid metadata template for Android version code 131190.
14 changes: 14 additions & 0 deletions RELEASE_v0.13.12.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Hermes Agent v0.13.12

Android/F-Droid reproducibility follow-up.

## Android

- Cleans the tracked `build/` directory before GitHub Android release builds so release APKs match F-Droid's clean source build.
- Canonicalizes Chaquopy `build.json` ordering before APK packaging.
- Keeps the Python 3.13 Android runtime, single universal APK output, and disabled Android dependency metadata from v0.13.11.

## Packaging

- Bumps the package version to 0.13.12.
- Updates the F-Droid metadata template for Android version code 131290.
16 changes: 16 additions & 0 deletions RELEASE_v0.13.13.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Hermes Agent v0.13.13

This release fixes the remaining F-Droid reproducible-build differences in the
Android APK.

## Android

- Forces GitHub Android release builds to use hash-based Python bytecode by
setting `SOURCE_DATE_EPOCH`.
- Canonicalizes Chaquopy's generated `build.json` before Android asset merging.
- Keeps the universal signed APK layout introduced for F-Droid verification.

## F-Droid

- Bumps the package version to 0.13.13.
- Updates the F-Droid metadata template for Android version code 131390.
16 changes: 16 additions & 0 deletions RELEASE_v0.13.14.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Hermes Agent v0.13.14

This release completes the Android reproducible-build fixes needed by the
F-Droid inclusion review.

## Android

- Canonicalizes Chaquopy `requirements-common.imy` before APK packaging.
- Removes local pip `direct_url.json` install paths from embedded Python assets.
- Rewrites embedded pyc bodies with a stable marshal format while preserving
hash-based pyc headers.

## F-Droid

- Bumps the package version to 0.13.14.
- Updates the F-Droid metadata template for Android version code 131490.
11 changes: 11 additions & 0 deletions RELEASE_v0.13.15.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Hermes Agent v0.13.15

This release adds the metadata needed for F-Droid autoupdate checks to track
future semver tags without being limited to the 0.13 release line.

## F-Droid

- Adds a tracked `fdroid/com.nousresearch.hermesagent.version` file containing
the literal Android `versionName` and `versionCode` for each release tag.
- Updates the draft fdroiddata metadata template to use `AI Chat` and
unrestricted tag checks.
31 changes: 31 additions & 0 deletions RELEASE_v0.13.16.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Hermes Agent v0.13.16

This release hardens native Android agent startup and adds first-class setup
surfaces for Shizuku/Sui-assisted privileged Android actions.

## Android Agent

- Adds Shizuku/Sui status reporting and setup actions for developer options,
wireless debugging, Shizuku launch/download, and Shizuku permission requests.
- Keeps background runtime service startup responsive by promoting foreground
notification immediately and moving heavy runtime boot work off the service
main thread.
- Delays automatic persisted-runtime restart during app process startup so the
first activity and instrumentation launch do not collide with Python/native
asset extraction.
- Fixes native tool-call chat loops so Hermes sends the post-tool follow-up
request instead of returning the last raw tool result as the assistant reply.

## Native Android Runtime

- Fixes embedded Android Linux subprocess library resolution by adding the
packaged native executable directory to `LD_LIBRARY_PATH`.
- Keeps Python subprocesses on `/system/bin/sh` while preserving Hermes Android
shell metadata for native tools.

## Validation

- Adds emulator visual-harness commands for screenshots, taps, swipes, text,
key events, launch, and viewport sizing.
- Adds Android instrumentation coverage for privileged-access status, native
tool status JSON, and full connected startup stability.
Loading
Loading