Files
elizaos--eliza/plugins/plugin-capacitor-bridge
wehub-resource-sync 426e9eeabd
Voice Workbench / headless workbench (mocked backends) (push) Has been cancelled
Voice Workbench / real acoustic lane (nightly, provisioned only) (push) Has been cancelled
ci / test (push) Has been cancelled
ci / lint-and-format (push) Has been cancelled
ci / build (push) Has been cancelled
ci / dev-startup (push) Has been cancelled
gitleaks / gitleaks (push) Has been cancelled
Markdown Links / Relative Markdown Links (push) Has been cancelled
Quality (Extended) / Homepage Build (PR smoke) (push) Has been cancelled
Quality (Extended) / Comment-only diff guard (push) Has been cancelled
Quality (Extended) / Format + Type Safety Ratchet (push) Has been cancelled
Quality (Extended) / Develop Gate (secret scan + UI determinism) (push) Has been cancelled
Quality (Extended) / Develop Gate (lint) (push) Has been cancelled
Chat shell gestures / Chat shell gesture + parity e2e (push) Has been cancelled
Cloud Gateway Discord / Test (push) Has been cancelled
Benchmark Bridge Tests / benchmark (bunx @biomejs/biome check packages/lifeops-bench/src, benchmark-lint) (push) Has been cancelled
Benchmark Bridge Tests / benchmark (bunx vitest run --config packages/lifeops-bench/vitest.config.ts --root packages/lifeops-bench --passWithNoTests, benchmark-tests) (push) Has been cancelled
Build Agent Image / build-and-push (push) Has been cancelled
Dev Smoke / bun run dev onboarding chat (push) Has been cancelled
Dev Smoke / Vite HMR dependency-level smoke (push) Has been cancelled
Electrobun Submodule Guard / electrobun gitlink is fetchable (push) Has been cancelled
Publish @elizaos/example-code / check_npm (push) Has been cancelled
Publish @elizaos/example-code / publish_npm (push) Has been cancelled
Publish @elizaos/plugin-elizacloud / verify_version (push) Has been cancelled
Publish @elizaos/plugin-elizacloud / publish_npm (push) Has been cancelled
Sandbox Live Smoke / Sandbox live smoke (push) Has been cancelled
Snap Build & Test / Build Snap (amd64) (push) Has been cancelled
Snap Build & Test / Build Snap (arm64) (push) Has been cancelled
Test Packaging / elizaos CLI global-install smoke (node + bun) (push) Has been cancelled
Cloud Gateway Webhook / Test (push) Has been cancelled
Cloud Tests / lint-and-types (push) Has been cancelled
Cloud Tests / unit-tests (push) Has been cancelled
Cloud Tests / integration-tests (push) Has been cancelled
Cloud Tests / e2e-tests (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Deploy Apps Worker (Product 2) / Determine environment (push) Has been cancelled
Deploy Apps Worker (Product 2) / Deploy apps worker to apps-control host (${{ needs.determine-env.outputs.environment }}) (push) Has been cancelled
Deploy Eliza Provisioning Worker / Determine environment (push) Has been cancelled
Deploy Eliza Provisioning Worker / Deploy worker to Hetzner host (${{ needs.determine-env.outputs.environment }} @ ${{ needs.determine-env.outputs.deployment_sha }}) (push) Has been cancelled
Dev Smoke / Classify changed paths (push) Has been cancelled
supply-chain / sbom (push) Has been cancelled
supply-chain / vulnerability-scan (push) Has been cancelled
Build, Push & Deploy to Phala Cloud / build-and-push (push) Has been cancelled
Test Packaging / Validate Packaging Configs (push) Has been cancelled
Test Packaging / Build & Test PyPI Package (push) Has been cancelled
Test Packaging / PyPI on Python ${{ matrix.python }} (push) Has been cancelled
Test Packaging / Pack & Test JS Tarballs (push) Has been cancelled
UI Fixture E2E / ui-fixture-e2e (push) Has been cancelled
UI Fixture E2E / fixture-e2e (push) Has been cancelled
UI Story Gate / story-gate (push) Has been cancelled
vault-ci / test (macos-latest) (push) Has been cancelled
vault-ci / test (ubuntu-latest) (push) Has been cancelled
vault-ci / test (windows-latest) (push) Has been cancelled
vault-ci / app-core wiring tests (push) Has been cancelled
verify-patches / verify patches/CHECKSUMS.sha256 (push) Has been cancelled
Voice Benchmark Smoke / voice-emotion fixture smoke (push) Has been cancelled
Voice Benchmark Smoke / voiceagentbench fixture smoke (push) Has been cancelled
Voice Benchmark Smoke / voicebench-quality unit smoke (push) Has been cancelled
Voice Benchmark Smoke / voicebench TypeScript unit (no audio) (push) Has been cancelled
Voice Benchmark Smoke / voice bench smoke summary (push) Has been cancelled
Windows CI / windows ([bun run --cwd packages/app-core test bun run --cwd packages/elizaos test bun run --cwd packages/cloud/shared test], app-and-cli) (push) Has been cancelled
Windows CI / windows ([bun run --cwd packages/scenario-runner test bun run --cwd packages/vault test bun run --cwd packages/security test bun run --cwd plugins/plugin-coding-tools test], framework-packages) (push) Has been cancelled
Windows CI / windows ([bun run --cwd plugins/plugin-elizacloud test bun run --cwd plugins/plugin-discord test bun run --cwd plugins/plugin-anthropic test bun run --cwd plugins/plugin-openai test bun run --cwd plugins/plugin-app-control test bun run --cwd plugins/pl… (push) Has been cancelled
Windows CI / windows ([node packages/scripts/run-turbo.mjs run build --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/agent --concurrency=4 node packages/scripts/run-bash-linux-only.mjs scripts/verify-riscv64-buildpaths.sh node packages/scripts/run… (push) Has been cancelled
Windows CI / windows ([node packages/scripts/run-turbo.mjs run typecheck --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/cloud-shared --concurrency=4 bun run --cwd packages/core test bun run --cwd packages/shared test], core-runtime, 75) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:43:05 +08:00
..

@elizaos/plugin-capacitor-bridge

Agent-side bridge that enables stock iOS and Android Eliza builds to run local GGUF inference through the device's native Capacitor llama.cpp plugin.

What it does

AOSP builds run llama.cpp directly inside the agent process via bun:ffi. Stock Capacitor builds (App Store iOS, standard Android APK) cannot do that — llama.cpp is exposed to the WebView through a native Capacitor plugin instead. This package is the agent-side half of that path:

  • Android: accepts a loopback WebSocket from the Capacitor WebView, delegates TEXT_SMALL, TEXT_LARGE, and TEXT_EMBEDDING model requests to the connected device, and lets the normal elizaOS model-handler system work unchanged.
  • iOS: runs the elizaOS runtime inside the Bun binary bundled into the iOS app and dispatches API calls in-process over native Bun host IPC (no HTTP loopback).

Both paths install a sandboxed virtual filesystem (installMobileFsShim) that confines all node:fs operations to the app's writable workspace directory, enforcing App Store and Play Store code-execution policies.

Capabilities added

  • TEXT_SMALL model handler — routes to the connected Capacitor device.
  • TEXT_LARGE model handler — routes to the connected Capacitor device.
  • TEXT_EMBEDDING model handler — routes to the connected Capacitor device.
  • Automatic GGUF model download from elizaos/eliza-1 on HuggingFace when no local model is found (unless ELIZA_DISABLE_MODEL_AUTO_DOWNLOAD=1).
  • WebSocket endpoint /api/local-inference/device-bridge for Capacitor WebView registration and inference RPC.

Installation

This package is used by the elizaOS agent bundle. It is not a standard elizaOS plugin and cannot be added to character.plugins. The agent bundle entry point imports and calls its bootstrap functions directly.

@elizaos/plugin-capacitor-bridge

Configuration

Android (WebSocket device bridge)

Env var Required Description
ELIZA_DEVICE_BRIDGE_ENABLED=1 Yes Enables the WebSocket bridge.
ELIZA_DEVICE_PAIRING_TOKEN Yes Shared secret — must match the token sent by the Capacitor WebView.
ELIZA_DEVICE_BRIDGE_TOKEN Alias Fallback for ELIZA_DEVICE_PAIRING_TOKEN.

Model path (both platforms)

Env var Description
ELIZA_LOCAL_CHAT_MODEL_PATH Absolute path to a GGUF for chat (TEXT_SMALL / TEXT_LARGE).
ELIZA_LOCAL_EMBEDDING_MODEL_PATH Absolute path to an embedding GGUF.
ELIZA_LOCAL_MODEL_PATH Fallback when neither slot-specific var is set.
ELIZA_DISABLE_MODEL_AUTO_DOWNLOAD=1 Disables auto-download from HuggingFace.

If no model path is set and auto-download is enabled, the bridge downloads recommended eliza-1 GGUFs from elizaos/eliza-1 on HuggingFace into $ELIZA_STATE_DIR/local-inference/models/.

Timeouts (all optional, default 600000 ms)

  • ELIZA_DEVICE_LOAD_TIMEOUT_MS
  • ELIZA_DEVICE_GENERATE_TIMEOUT_MS
  • ELIZA_DEVICE_EMBED_TIMEOUT_MS

Filesystem sandbox

Both platforms install a deny-by-default node:fs interceptor (installMobileFsShim) before booting the runtime:

  • All paths are resolved relative to the app's writable workspace root (MOBILE_WORKSPACE_ROOT on iOS, HOME on Android).
  • Path traversal outside the root throws EACCES.
  • System directories (/etc, /usr, /System, /proc, etc.) are blocked unconditionally.
  • Writes to native binary extensions (.so, .dylib, .node) are blocked.
  • require() of file paths is blocked — all code must be bundled.

WebSocket protocol (Android)

The Capacitor WebView connects to ws://127.0.0.1:<port>/api/local-inference/device-bridge?token=<ELIZA_DEVICE_PAIRING_TOKEN>.

Connection flow:

  1. WebView sends { type: "register", payload: { deviceId, pairingToken, capabilities, loadedPath } }.
  2. Agent sends { type: "load", correlationId, modelPath, ... } → device replies { type: "loadResult", correlationId, ok, loadedPath }.
  3. Agent sends { type: "generate", correlationId, prompt, ... } → device replies { type: "generateResult", correlationId, ok, text }.
  4. Agent sends { type: "embed", correlationId, input } → device replies { type: "embedResult", correlationId, ok, embedding }.
  5. Agent sends { type: "formatChat", correlationId, messages } → device replies { type: "formatChatResult", correlationId, ok, prompt } (invokes native Jinja chat template).
  6. Agent pings every 15 s; device replies { type: "pong" }.

Note: iOS connections are rejected with close code 4003. iOS uses native IPC, not this WebSocket path.

Slot Model ID HuggingFace path
TEXT_SMALL eliza-1-4b elizaos/eliza-1bundles/4b/text/eliza-1-4b-128k.gguf
TEXT_LARGE eliza-1-4b elizaos/eliza-1bundles/4b/text/eliza-1-4b-128k.gguf
TEXT_EMBEDDING eliza-1-embedding elizaos/eliza-1bundles/4b/embedding/eliza-1-embedding.gguf

The 4B tier is the shipped mobile default for both chat slots; eliza-1-2b is the smallest/entry tier (the small-phone floor) but is not a recommended default.