rcli runs AI models on your own machine: text generation, speech to text, text to speech, and
image generation, all through the
RunAnywhere SDK.
It is a plain command-line tool with no full-screen interface. Results go to stdout, progress and errors go to stderr, so a redirect keeps the answer and leaves the progress bar on your terminal:
rcli run qwen3 "why is the sky blue" > answer.txtOn macOS and Linux:
curl -fsSL https://raw.githubusercontent.com/RunanywhereAI/RCLI/main/install.sh | bashThat installs Homebrew if you do not have it, adds the tap, and installs rcli. To do the same by hand, note that this repo is its own tap, so tapping it needs the explicit URL form:
brew tap RunanywhereAI/rcli https://github.com/RunanywhereAI/RCLI.git
brew install runanywhereai/rcli/rcliThe name is spelled out because runanywhereai/tap also provides a formula called rcli. If you
do not have that tap, plain brew install rcli works too.
That covers an Apple Silicon Mac on macOS 14.5 or later, and x86-64 Linux through Homebrew on
Linux. Nothing else to set up: models download when you first ask for one and are kept in
~/.local/share/runanywhere.
There is no Homebrew on Windows, so the installer downloads the release and unpacks it itself. In PowerShell:
irm https://raw.githubusercontent.com/RunanywhereAI/RCLI/main/install.ps1 | iexThat puts rcli in %LOCALAPPDATA%\Programs\rcli and adds the directory to your user PATH, so
open a new terminal before you run it. 64-bit x86 only, and models are kept in
%LOCALAPPDATA%\RunAnywhere.
rcli list --all # everything in the catalog
rcli pull qwen3-0.6b # download one
rcli run qwen3 "explain mmap" # ask once and exit
rcli run qwen3 # interactive prompt, /? for commands
rcli # same prompt, no model loaded yetModels are named by id (qwen3-0.6b) or by the shorter alias (qwen3). rcli run on a model you
have not downloaded pulls it first.
| Command | What it does |
|---|---|
rcli run [model] [prompt] |
Talk to a model. With a prompt it answers and exits; without one you get the interactive prompt. chat is the same command. |
rcli list [-a] |
Models on this machine. -a / --all lists the whole catalog and marks what is downloaded. |
rcli search <query> |
Match a query against catalog ids, aliases, and names. |
rcli pull <model> |
Download a model and wait for it to land. |
rcli rm <model> |
Delete a downloaded model and report the space freed. |
rcli show <model> |
Catalog details: engine, kind, format, size, context length, whether it reasons. |
rcli stt <file> |
Transcribe a 16-bit mono WAV. -m picks the speech model. |
rcli tts <text> |
Speak text through the speakers, or write a WAV with -o file. -m picks the voice. |
rcli imagine <prompt> |
Generate an image, draw a preview in the terminal, and print the path. -m picks the model, -q skips the preview. draw is the same command. |
rcli bench [model] |
Measure tokens per second and time to first token, over one model or every downloaded model that generates text. |
rcli engines |
Which engines came up and which primitives each one serves. Engines that were compiled in but did not start are listed with the reason. |
rcli config [setting] [value] |
List settings, read one, or change one. |
rcli where |
The directory models and generated images live in. |
Global flags: --version, -v / --verbose to let the engines log to stderr, and
--color auto|always|never.
rcli imagine prints the image path alone on the last line of stdout, so rcli imagine "a red apple" | xargs open works.
rcli run <model> with no prompt opens a readline prompt with history and tab completion. Anything
that does not start with / goes to the model.
/load <model> |
Load a model, downloading it first if needed |
/models |
What is on this machine |
/pull <model> |
Download from the catalog |
/rm <model> |
Delete a downloaded model |
/show |
Current settings |
/set <key> <value> |
Change a setting |
/image <path> |
Ask about a picture. Needs a vision model loaded, and the turn is single-turn |
/doc <path> |
Put a text file in the context. Text only, truncated at 32000 characters |
/imagine <text> |
Generate an image |
/mic |
Record until you press enter, transcribe, and send |
/say [text] |
Speak the text, or the last answer |
/run <cmd> |
Run a shell command after you confirm it |
/think |
Show or hide the model's reasoning |
/history |
The conversation so far |
/clear |
Forget the conversation |
/bye |
Quit |
Reasoning tokens go to stderr and the answer goes to stdout, which is why redirecting a one-shot
run captures the answer and nothing else.
rcli config with no arguments lists the settings and their current values:
| Setting | |
|---|---|
accelerator |
auto, cpu, gpu, or npu. Advisory; an engine may ignore it |
engine |
Pin one engine instead of letting priority decide. The allowed values are the engines that actually registered on this machine |
context-length |
Context window at load time. 0 leaves it to the engine |
reasoning |
auto, on, or off. auto follows the model |
temperature |
0 is greedy, 2 is as random as the sampler goes |
max-tokens |
Longest answer the model may produce, 4096 by default. A model that reasons spends this budget thinking before it answers, so lowering it much can leave no room for the answer itself |
Settings live for one process. rcli config temperature 0.2 changes it for that command and
nothing else, so to use a setting you either set it in the interactive prompt with /set or accept
the default. There is no config file.
Two environment variables: RUNANYWHERE_HOME moves the storage directory, and RCLI_LOG names a
file for the engine logs that --verbose would otherwise put on stderr.
A macOS build links six engines: mlx, llamacpp, neurt, sherpa, cloud, and onnx. Linux and Windows get llamacpp, sherpa, cloud, and onnx. MLX is Metal and NeuRT is the Apple Neural Engine, so neither has anything to link against elsewhere.
Which of those are usable also depends on the machine, so rcli engines is the honest answer for
any given install: it lists what registered, and names anything that was compiled in but could not
start, with the reason. A model's catalog entry names the engine that runs it, so pulling a model
is also how you choose an engine.
You need CMake 3.24 or later, Apple Clang for the C++ build, and Xcode for the MLX one. Point the build at a checkout of the SDK:
cmake -B build -DRCLI_SDK_DIR=/path/to/runanywhere-sdks
cmake --build buildWithout RCLI_SDK_DIR the SDK is fetched at the tag pinned in cmake/RunAnywhereSDK.cmake, which
means a long first build. A sibling checkout reuses what is already built there.
That build produces build/rcli-cxx, with five engines and no MLX. For the binary that ships:
scripts/build-mlx.shwhich produces build/rcli with all six.
The two steps are not interchangeable. MLX inference is Swift, and SwiftPM on the command line
cannot compile Metal shaders; mlx-swift documents this in its own README. Only xcodebuild can, so
xcodebuild has to own the final link. A binary built without the shaders still links MLX, registers
nothing, and reports MLX as unavailable at runtime. scripts/build-mlx.sh harvests the link line
CMake wrote and hands it to xcodebuild, which is why cmake --build has to run first.
One more thing that build produces: mlx-swift_Cmlx.bundle, next to the executable. mlx-swift keeps
its Metal shaders in a resource bundle rather than inside the binary, so moving rcli somewhere
without that directory beside it costs you MLX while the other five engines carry on as if nothing
happened. The Homebrew formula installs both into libexec and symlinks the binary for this reason.
This repo is MIT (see LICENSE), but it links the RunAnywhere SDK, which is not. The SDK is source-available under the RunAnywhere License: free for individuals, for organizations with both less than $1M in total funding and less than $1M in gross annual revenue, and for educational institutions, non-profits, government bodies, and projects under an OSI-approved open source licence. Anyone outside those categories needs a commercial licence, and the contact for that is san@runanywhere.ai.
Read the SDK's licence
before you build rcli into a commercial product. The summary above is not the terms.
Built by RunAnywhere, Inc.