Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
f9ed56c
rename rcli to wally across the CLI, build, distribution, and docs
Siddhesh2377 Sep 4, 2026
7ba50d5
app: never let --help grouping crash the CLI on a missing subcommand
Siddhesh2377 Sep 4, 2026
356b5fb
fix(account): let a console URL carry a base path, so the dev console…
Siddhesh2377 Sep 6, 2026
62d4132
feat(account): let a dev build carry its console endpoints, from the …
Siddhesh2377 Sep 6, 2026
f742f3e
docs(whoami): describe whoami as identity-only and point usage at `wa…
Siddhesh2377 Sep 6, 2026
de64821
feat(net): capture response headers and honor Retry-After on a 429 ac…
Siddhesh2377 Sep 6, 2026
c8709ec
feat(proxy): require a per-session secret on the loopback coding-harn…
Siddhesh2377 Sep 6, 2026
fd73f38
docs(release): correct the asset contract to three wally-named archiv…
Siddhesh2377 Sep 6, 2026
02b9f8d
feat(console): generate the CLI's HTTP binding from a pinned contract…
Siddhesh2377 Sep 6, 2026
da53087
docs: rename the CLI to wally across the README and guides, add the m…
Siddhesh2377 Sep 6, 2026
48b686d
build(versions): make versions.toml the single source for the product…
Siddhesh2377 Sep 6, 2026
774c5c1
release: bump the product version to 0.5.3
Siddhesh2377 Sep 6, 2026
2c5af6d
release: default the Homebrew tap to the RCLI repo, where the formula…
Siddhesh2377 Sep 6, 2026
a0c5b96
Merge pull request #65 from RunanywhereAI/launch/wally-remaning-work
Siddhesh2377 Sep 7, 2026
32dc7c2
fix(ci): fetch-kit reads kit pins from versions.toml, not sdk-pin.cmake
Siddhesh2377 Sep 7, 2026
b63fb9c
fix(ci): mark the pinned CLI contract -text so Windows checkout can't…
Siddhesh2377 Sep 7, 2026
6995193
cli: quiet the expected 'no MLX runtime' note on the C++ host (verbos…
Siddhesh2377 Sep 7, 2026
73b4571
build: hide the C++-only wally-cxx binary behind WALLY_APPLE_CXX_BINARY
Siddhesh2377 Sep 7, 2026
9193898
build: consume the 0.20.37 desktop kit via cpp-desktop-v0.20.37 and a…
Siddhesh2377 Sep 7, 2026
6b5707f
build: fetch-private-pack skips linux-x64 (no NeuRT/QHexRT overlay)
Siddhesh2377 Sep 7, 2026
683dc23
build: wrap the kit's static archives in a linker group on linux (gnu…
Siddhesh2377 Sep 7, 2026
0242561
build: link the sherpa-onnx shared lib on linux (kit ships it as .so,…
Siddhesh2377 Sep 7, 2026
c436c3c
build: link commons inside the ld group and add openmp on linux
Siddhesh2377 Sep 7, 2026
bd952f4
build: make wally_core's httplib dep public so tests link it on linux
Siddhesh2377 Sep 7, 2026
c8fcba9
ci: build the wally product on linux (BUILD_TESTING=OFF); test exes s…
Siddhesh2377 Sep 7, 2026
96cd63f
cli: whoami --json emits JSON instead of the human table
Siddhesh2377 Sep 7, 2026
b7104c3
cli: null-guard NaN/Inf doubles in JsonWriter (stt --json emitted bar…
Siddhesh2377 Sep 7, 2026
1f44280
cli: refuse the REPL fallback under --json instead of silent empty ex…
Siddhesh2377 Sep 7, 2026
9549588
cli: reject --max-tokens <= 0 as a usage error instead of an uncapped…
Siddhesh2377 Sep 7, 2026
40fe823
cli: reject rerank --top-n <= 0 as a usage error instead of returning…
Siddhesh2377 Sep 7, 2026
670203b
cli: warn when --home names a directory that doesn't exist yet
Siddhesh2377 Sep 7, 2026
7c0d4d7
cli: fail bench's VLM row clearly when --vlm-image is missing, not wi…
Siddhesh2377 Sep 7, 2026
b2c998b
cli: point 'unknown model' and --help at the cloud path when nothing …
Siddhesh2377 Sep 7, 2026
a24c7f9
bundle-core: always re-harvest ninja link line so private overlay arc…
Siddhesh2377 Sep 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
---
name: rcli-architecture
description: Where RCLI logic belongs — command layering, proto as SOT, kit vs CLI ownership, Apple MLX host vs rcli-cxx. Use when adding a command, moving inference logic, or deciding whether a bug is SDK or CLI.
name: wally-architecture
description: Where Wally logic belongs — command layering, proto as SOT, kit vs CLI ownership, Apple MLX host vs wally-cxx. Use when adding a command, moving inference logic, or deciding whether a bug is SDK or CLI.
---

# RCLI architecture
# Wally architecture

Repo: `RunanywhereAI/RCLI`. Product CLI named `rcli`. It consumes a **packaged
Repo: `RunanywhereAI/RCLI`. Product CLI named `wally`. It consumes a **packaged
C++ desktop kit** via `find_package(RunAnywhere)`. It does not
`add_subdirectory` or FetchContent the SDK, and it does not compile llama.cpp /
Sherpa / ONNX / MLX from source.

Product version (`project(rcli VERSION …)` in `CMakeLists.txt`) is independent
Product version (`project(wally VERSION …)` in `CMakeLists.txt`) is independent
of the SDK kit pin in `cmake/sdk-pin.cmake`.

## Ownership
Expand All @@ -27,7 +27,7 @@ argv / flags / env
The kit owns truth: models, backends, proto contracts, download, inference.
The CLI renders and interacts. If a command is composing a multi-step bootstrap,
hardcoding an engine name, or post-processing model output, that is a bug in the
SDK — fix it there, then consume a new kit (**rcli-kit-pin**).
SDK — fix it there, then consume a new kit (**wally-kit-pin**).

## Layering rules

Expand Down Expand Up @@ -56,14 +56,14 @@ a retired MetalRT / hardcoded catalog.

## Apple MLX host

On Apple Silicon, `cmake --build` produces `build/rcli` (Swift host wrapping
`rcli_run_main`). Users never run `rcli-cxx`; that name exists only so CMake
cannot overwrite the product binary. Independent clones set `RCLI_SDK_SWIFT_PATH`
to a runanywhere-sdks checkout (CI does this). Nested `EXTERNAL/RCLI` finds
`../../Package.swift` automatically. Disable with `-DRCLI_APPLE_MLX_HOST=OFF`
On Apple Silicon, `cmake --build` produces `build/wally` (Swift host wrapping
`wally_run_main`). Users never run `wally-cxx`; that name exists only so CMake
cannot overwrite the product binary. Independent clones set `WALLY_SDK_SWIFT_PATH`
to a runanywhere-sdks checkout (CI does this). Nested `EXTERNAL/Wally` finds
`../../Package.swift` automatically. Disable with `-DWALLY_APPLE_MLX_HOST=OFF`
only for a C++-only compile loop.

NeuRT image gen is `#if RCLI_HAS_NEURT` in `src/commands/cmd_image.cpp`, which
NeuRT image gen is `#if WALLY_HAS_NEURT` in `src/commands/cmd_image.cpp`, which
is true only when the NeuRT overlay is applied. Public bottles stay OSS.
`--engine qhexrt` / `qnn` / `npu` / `hexagon` map to
`INFERENCE_FRAMEWORK_QHEXRT`. Local HNPU trees are inferred from `v75`/`v79`/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,36 +1,36 @@
---
name: rcli-device-e2e
description: Run engine-agnostic rcli modality e2e on Apple Neural Engine (NeuRT) and Snapdragon Hexagon NPU (QHexRT) devices. Use when adding overlay backends, proving LLM/STT/TTS/VLM/embed/diffusion on device, or when a PC only has one modality's bundles on disk.
name: wally-device-e2e
description: Run engine-agnostic wally modality e2e on Apple Neural Engine (NeuRT) and Snapdragon Hexagon NPU (QHexRT) devices. Use when adding overlay backends, proving LLM/STT/TTS/VLM/embed/diffusion on device, or when a PC only has one modality's bundles on disk.
---

# RCLI device modality e2e
# Wally device modality e2e

Do not write per-engine tests. The harness is `scripts/e2e-modalities.sh`,
called from `scripts/e2e.sh`. Keys are **primitives** (`llm`, `stt`, `tts`,
`vlm`, `embed`, `image`, `vad`, `rerank`, `segment`). rcli picks the engine
`vlm`, `embed`, `image`, `vad`, `rerank`, `segment`). wally picks the engine
from catalog framework, local path, or plugin priority. `--engine` is an
override (`RCLI_E2E_ENGINE`), never a required test input.
override (`WALLY_E2E_ENGINE`), never a required test input.

## Run

```bash
# Public CI (modelless): skip every modality
bash scripts/e2e.sh /path/to/rcli
bash scripts/e2e.sh /path/to/wally

# Device: discover whatever is already on disk, then run each primitive
export RUNANYWHERE_HOME=/path/to/home # already-pulled OSS models
export RCLI_E2E_MODEL_ROOTS=/path/to/hnpu:/path/to/coreml
bash scripts/e2e-modalities.sh /path/to/rcli
export WALLY_E2E_MODEL_ROOTS=/path/to/hnpu:/path/to/coreml
bash scripts/e2e-modalities.sh /path/to/wally

# Or pin one primitive (path or catalog id)
RCLI_E2E_LLM=/path/to/lfm2_5_230m_HNPU \
RCLI_E2E_STT=/path/to/whisper_base_HNPU \
RCLI_E2E_TTS=/path/to/kitten_micro_0_8_HNPU \
RCLI_E2E_EMBED=/path/to/embeddinggemma_300m_HNPU \
bash scripts/e2e-modalities.sh /path/to/rcli
WALLY_E2E_LLM=/path/to/lfm2_5_230m_HNPU \
WALLY_E2E_STT=/path/to/whisper_base_HNPU \
WALLY_E2E_TTS=/path/to/kitten_micro_0_8_HNPU \
WALLY_E2E_EMBED=/path/to/embeddinggemma_300m_HNPU \
bash scripts/e2e-modalities.sh /path/to/wally
```

`RCLI_E2E_AUTO=1` pulls small OSS catalog defaults the **registered** backends
`WALLY_E2E_AUTO=1` pulls small OSS catalog defaults the **registered** backends
can run (`smollm2`, `whisper-tiny`, `piper`, `minilm`, `silero`, `mlx-qwen3`,
…). Never enable AUTO in public CI.

Expand All @@ -49,20 +49,20 @@ copied for LLM smoke — not because the engine is LLM-only. Catalog ids:
| VLM | `internvl3_5_1b` (~10 GB) | — |
| Image | `cosmos3_edge_diffusion` | `sd15` |

`rcli pull` of a Hugging Face **repo page** is HTML. Pass the expanded
`wally pull` of a Hugging Face **repo page** is HTML. Pass the expanded
directory to `-m`. Download `v81/*` only on Hexagon v81.

Skip with a clear "no bundle" when the tree is missing. Fail only when a
model was selected and the command failed.

## Overlay gotchas

- Public bottles never list `neurt` / `qhexrt`. Rebuild product `rcli` against
an overlay kit (`RCLI_SDK_KIT` pointing at that prefix).
- Public bottles never list `neurt` / `qhexrt`. Rebuild product `wally` against
an overlay kit (`WALLY_SDK_KIT` pointing at that prefix).
- **QHexRT:** QAIRT **2.48** on Snapdragon X2 Elite / Hexagon v81.
`ADSP_LIBRARY_PATH` must be the fully expanded
`...\lib\hexagon-v81\unsigned` path. Nested `%QNN_SDK_ROOT%` in `cmd /c set`
does not expand. Copy `QnnHtp*.dll` next to `rcli.exe`. FastRPC ~90s then
does not expand. Copy `QnnHtp*.dll` next to `wally.exe`. FastRPC ~90s then
user-driver fallback is normal. Use a `.bat`, not nested `cmd /c`.
- **NeuRT image:** `--prompt` and `--out` required; `--steps 4` for smoke.
Compiled zip, not the HF repo HTML. Tree needs `TextEncoder.mlmodelc` /
Expand All @@ -71,8 +71,8 @@ model was selected and the command failed.
SDK inserts `mtmd_default_marker()`. An extra `<image>` makes
`mtmd_tokenize` see 0 media markers. A tiny PNG can `bad_alloc` in
SmolVLM2 after the 512×512 warmup; skip or pass a real photo via
`RCLI_E2E_VLM`.
`WALLY_E2E_VLM`.
- **segment:** binary P6 PPM, not PNG.
- STT has no `--engine` flag; put `-m` before the wav.

See `rcli-e2e` for bottle/backends assertions and Apple MLX host link flags.
See `wally-e2e` for bottle/backends assertions and Apple MLX host link flags.
Loading
Loading