Getting Started
This chapter gets orangu running against a local orangu-server, from nothing installed to a working prompt. After installing, it is five commands in this order:
orangu-server -i
orangu-server download unsloth/gemma-4-E2B-it-GGUF
orangu-server --all unsloth/gemma-4-E2B-it-GGUF
orangu -i
oranguThe order matters: steps 2 and 3 both read the models directory from the configuration step 1 writes, and step 4 asks step 3’s running server which model it is serving.
Install orangu
The quickest way to install the latest release is the one-liner
installer. It installs the whole stack — orangu,
orangu-coordinator, orangu-server, the
benchmarking tool orangu-bench, and the model builder
orangu-gguf.
Linux / macOS:
curl -fsSL https://mnemosyne-systems.github.io/orangu/install.sh | shWindows (Command Prompt):
curl -fsSL https://mnemosyne-systems.github.io/orangu/install.cmd -o install.cmd && install.cmdWindows (PowerShell alternative):
Invoke-WebRequest -Uri https://mnemosyne-systems.github.io/orangu/install.cmd -OutFile install.cmd; .\install.cmdThe script installs to ~/.local/bin (Linux/macOS) or
%USERPROFILE%\.local\bin (Windows) and warns if the
directory is not in your PATH. See BUILDING.md
for instructions on building from source.
Configure orangu-server
orangu-server -i (long form --init) writes
~/.orangu/orangu-server.conf. Run it before anything else:
downloading and serving both read the models directory from that file,
and with no configuration present they stop with
Missing config file; pass --config or add ./orangu-server.conf or ~/.orangu/orangu-server.conf (see --init).
orangu-server -iEach prompt shows its default in brackets; Enter accepts it.
| Prompt | Default | Notes |
|---|---|---|
models |
~/.cache/huggingface/hub |
Where GGUF files live. Tab-completes paths, and is created if it
does not exist. Defaulting to the Hugging Face hub cache means models
already fetched by huggingface-cli or
llama.cpp are found without moving anything. |
model |
(none) | Which model to serve when the command line names none. Nothing is installed yet at this point, so press Enter; the prompt is skipped altogether when exactly one model is already present. |
role |
all |
One of all, code, review,
explorer, embedding. |
host |
all |
all for every interface, or a literal address such as
127.0.0.1. Tab-completes the machine’s own interfaces. |
port |
8100 |
The HTTP API port. |
Add web console |
Y |
n writes no [web] section and serves no
console. Accepting asks four more: the console’s host
(defaulting to the API’s), port (8101),
reexec (may it load a different model), and
delete (may it delete models). |
The wizard prints the file before writing it and asks
Write this configuration? [Y/n]; anything but
Enter/y/yes aborts with nothing written. Only
non-defaults are written, so a minimal run yields:
[orangu-server]
models = /home/you/.cache/huggingface/hub
host = all
port = 8100
[web]
host = all
port = 8101-i always targets
~/.orangu/orangu-server.conf and ignores
-c/--config. See the Inference server
chapter for the full configuration reference.
Download a model
orangu-server download unsloth/gemma-4-E2B-it-GGUFThe argument is a Hugging Face repo,
<user>/<model>[:quant]. With no
:quant, Q4_K_M is preferred, then
Q8_0, then the first GGUF file in the repo; append one to
pin it, e.g. unsloth/gemma-4-E2B-it-GGUF:Q8_0. Every shard
of a multi-part model is fetched, plus the matching
mmproj-* sidecar when the repo has one.
Before anything is fetched, the repo is planned against this machine:
each shard’s GGUF header is read over the network — a few hundred
kilobytes rather than the model — and the result reports how much of the
model has to stay resident and how much can stream from disk. A model
that cannot run here at all stops to confirm first; -y
skips that. orangu-server plan gives the same report for a
model already downloaded.
Files land under the models directory from step 1 in
Hugging Face hub-cache layout. Free space is checked up front, an
interrupted transfer resumes where it stopped, and progress is redrawn
in place — one line per file plus a total — ending with:
Downloaded to /home/you/.cache/huggingface/hub/models--unsloth--gemma-4-E2B-it-GGUF/snapshots/<commit>/gemma-4-E2B-it-Q4_K_M.gguf
Gated or private repos need HF_TOKEN set in the
environment. orangu-server list shows what is installed,
delete removes a model, and refresh re-fetches
it at a newer revision; see the Inference server chapter.
Start orangu-server
orangu-server --all unsloth/gemma-4-E2B-it-GGUFThe model is the same spec that was downloaded, and now resolves to
the local copy — nothing is fetched a second time. A local
.gguf path or an NR/MODEL label
from orangu-server list works just as well, and omitting
the argument prints the installed models and asks which one to
serve.
--all picks the role, not a set of models: it
is the general-purpose one, and the default. The alternatives are
--code, --review (suppresses reasoning),
--explorer (broader, more varied output), and
--embedding (embeddings only, with the chat and completion
endpoints disabled). They are mutually exclusive.
The server binds the host and port from step 1 and serves an OpenAI-compatible endpoint, which is what orangu connects to and what step 4 asks for:
http://localhost:8100/v1
-d/--daemon detaches it from the terminal;
that needs [orangu-server].model set in the configuration,
because there is no terminal left to prompt on. See the Inference
server chapter for GPU backend selection and the rest of the
operational detail.
To move a working server to another machine without repeating steps 1–3, bundle it and its model into one executable:
orangu-server bundle unsloth/gemma-4-E2B-it-GGUF:Q4_K_M --all -yCopy the resulting orangu-server-bundle-<arch>
over, chmod +x it, and run it: no models directory, no
download, and no orangu-server.conf — the API comes up on
127.0.0.1:8100 and the web console on
127.0.0.1:8200. See Bundling in the Inference
server chapter.
Configure orangu
With the server from step 3 running:
orangu -iThe first prompt is LLM URL: enter
http://localhost:8100/v1 (a bare
http://localhost:8100 is accepted too). The wizard queries
that server’s /v1/models and offers the first model it
advertises as the default for the Model prompt — if the
server cannot be reached it says so and asks for the name manually,
which is why it is worth starting the server first.
It then walks every remaining option showing its default, so a full
run is a row of Enters, and omits from the file anything left at its
default. It finishes by reporting which optional tools it detected
(git lg, delta, bat,
gh, glab), printing the configuration, and
asking Write this configuration? (Yes/No) [Yes]. On
confirmation it writes ~/.orangu/orangu.conf — ignoring
-c/--config, like the server wizard — and
installs any bundled skills into ~/.orangu/skills/ that are
not already present:
[orangu]
server = main-server
model = unsloth/gemma-4-E2B-it-GGUF
[main-server]
endpoint = http://localhost:8100/v1See Configuration for every key the wizard can set.
Or copy the sample instead:
cp doc/etc/orangu.conf ./orangu.confDefault configuration lookup order is:
./orangu.conf~/.orangu/orangu.conf
Run orangu
~/.orangu/orangu.conf is one of the lookup locations, so
there is nothing left to pass:
oranguOr point at a specific file:
orangu --config ./orangu.confThen start with:
/help
/skills
/server
/disconnect
/reload
/tools
/model
/session <UUID>
/list_files
/open_file README.md
/show_file README.md
/debugging reproduce the failing request path
/build
/shell ls -la
/create_file README.md
/auto_review
/create_patch
/amend "[#42] My feature"
/branch main
/branch -b feature/new
/branch -m new-name
/branch -d feature/old
/cherry_pick abc1234
/comment 51 "My comment"
/close -i 51
/issue reviewer 114 jesperpedersen
/get_comments -i 51
/commit "[#42] My feature"
/restore README.md
/diff
/init_repo
/log
/log 5
/show
/show aafd1cb
/merge feature/foo
/move_file old.rs new.rs
/pull 42
/push
/push --force
/rebase
/delete_file README.md
/review
/squash
/status
/usage
/clear
/copy
/quit
Most of these are thin wrappers around the matching
git/gh commands. Two open full-screen views
instead: /review walks you through the branch’s diff file
by file for a manual review, and /auto_review has the
connected model review the branch’s changes by itself — per file and per
category (Code, Security, Memory, Performance, Test Suite,
Documentation) — lets you override its verdicts afterwards (approve a
file, or reject it with your own categorized comments), and copies the
resulting report to the clipboard on exit.
/auto_review <file> (Tab-completes on the file name)
reviews a single file — the whole file on main/master, or just its
changes on a branch — and /auto_review all reviews every
Git-tracked file in the project. Both are described in detail in the
Core tools chapter.
orangu also supports Agent Skills: reusable directories containing a
SKILL.md. Skills are discovered from
~/.orangu/skills/, ~/.agents/skills/,
<workspace>/.orangu/skills/, and
<workspace>/.agents/skills/. Use /skills
to list them. Invoke one directly with /skill-name, for
example:
/debugging reproduce the failing request path and identify the root cause
Review your first branch
The review workflow is orangu’s standout feature, so it is worth trying right away. From a feature branch with some changes (committed or just edited in the working tree):
review
This opens the interactive reviewer: a two-pane view with your
changed files on the right and the selected file’s diff on the left. Use
Alt+j/Alt+k to move between files,
Alt+a/Alt+r to approve or reject one, and
Alt+c to leave a categorized comment on a line. Type a
question such as is this thread-safe? and press
Enter to ask the model about the selected file. Press
Alt+x to leave; the report is copied to your clipboard.
To have the model do the work, run:
auto review
orangu reviews the whole change and each file across the Overall,
Code, Security, Memory, Performance, Test Suite, and Documentation
categories, marks every file with a green or red dot, and ends with an
orangu approves/rejects this patch verdict. When the run
finishes you can override any verdict and remove findings before the
report lands on the clipboard.
The branch must be rebased up to date first — if it is behind, orangu points you at
/rebase. If you review with a thinking model and the answers look truncated, raisereview_max_tokensin[orangu](e.g.2048); see the Configuration chapter.
Neither reviewer touches your code. To act on what it found, run:
create patch
The model gets the findings of whichever review ran last, checks each
one against the current code, fixes the valid ones, and reports anything
it deliberately left alone. It edits the working tree and never commits,
so /diff shows you exactly what it did. The same command
resolves the conflicts of an in-progress merge, rebase, or cherry-pick,
with or without a review to go with them.
Share the result without leaving the terminal:
export review # write the report to a PDF in the workspace root
comment on 42 with auto review # post it on GitHub/GitLab issue/PR #42
By default the tools operate on the current directory. Use
--workspace /path/to/project to point
orangu at another tree.
Every startup flag has a short form: -c for
--config, -t for --theme,
-w for --workspace, -r for
--resume, -a for --all (reopen
the tabs from the previous run), -l for --list
(print every stored session as a table and exit), -i for
--init, -p for --prompt (run one
prompt or command and exit), -q for --quiet
(print nothing on success), and -s for
--shell-completions. -h/--help
and -V/--version are available on all four
binaries. orangu --help lists them all.
orangu automatically resumes an existing session when you return to the same workspace and Git branch. When a previous session is found, the status bar shows:
Resuming session 550e8400-e29b-41d4-a716-446655440000
for five seconds or until the first command is run.
On exit, the resume command is printed so you can return to the session from a different branch or machine:
orangu --resume 550e8400-e29b-41d4-a716-446655440000
Sessions that had no LLM interaction on main,
master, or outside a Git repository are deleted
automatically on exit. Feature branch sessions are always kept.
Use /session to list all sessions and their branches.
Use /session <uuid> (Tab completion cycles UUIDs and
workspace paths) to switch to a specific session; passing a workspace
switches straight to it when it matches exactly one session, otherwise
it lists the matches. Passing a directory path that no session uses yet
opens it as a new workspace — Tab falls back to filesystem completion
(with ~ expansion) so you can navigate there,
e.g. /session ~/Po<Tab>/pga<Tab>/of<Tab>.
Lines whose first non-whitespace character is # stay
local and are not sent to the model. Lines whose first non-whitespace
character is \ are ignored.