AI

Install Orca IDE on Linux and Run AI Agents in Git Worktrees

Orca IDE gives every coding agent its own git worktree, so you can hand one prompt to two agents and keep the better branch. On Linux it ships as a .deb, an .rpm and an AppImage, and the .deb installs cleanly but won’t start on a fresh Ubuntu server image until you add one audio library it forgot to depend on.

Original content from computingforgeeks.com - post 177210

This guide gets you from a bare box to two OpenCode agents racing in separate worktrees, then merges the winner. You’ll install the package, fix that missing library, launch agents from the app and from the orca-ide CLI, and run the headless server. It was built and run in October 2026 with Orca 1.4.239 on an Ubuntu 26.04 VM, then checked on Ubuntu 24.04 and Fedora 45, and every error below came from those boxes.

Check what Orca needs before you install

Orca is an Electron desktop app (MIT licensed) that launches CLI agents you already have. It does not host models and you don’t need an Orca account to run agents, so each agent still uses its own login or API key. That matters for planning: if no agent on the machine is logged in, Orca opens a terminal that can’t do anything useful. Have these ready:

  • An x86_64 or arm64 Linux desktop session
  • About 600 MB of free disk for /opt/Orca
  • git and a repository agents may edit
  • At least one agent CLI, such as OpenCode, Claude Code or Codex

Pick the package by how you want updates to arrive. The table sums up what each format did on the lab VMs:

FormatTested onUpdatesWhat happened
.debUbuntu 26.04, Ubuntu 24.04Orca tells you, apt installsInstalls, then fails on libasound.so.2 until libasound2t64 is added
.rpmFedora 45 (SELinux enforcing)Orca tells you, dnf installsPulls alsa-lib itself and starts first time; the package is unsigned
AppImageUbuntu 26.04, Ubuntu 24.04Self-updatesMounted without libfuse2, but still needs the desktop GTK and ALSA libraries

On a normal desktop install the .deb is the quickest path, so that’s the one this guide follows. Updates for the .deb and .rpm show up inside Orca with the package-manager command to run, and Orca’s install docs say to quit the app before you run it. Arch users can grab stably-orca-bin from the AUR, which the project README points to.

Install Orca IDE on Ubuntu

Orca ships a new tag almost daily (two tags landed within hours of each other while this guide was being tested), so let the GitHub API tell you the current one instead of copying a version from a page. Install jq and read the latest tag:

sudo apt update
sudo apt install -y curl jq
ORCA_VER=$(curl -s https://api.github.com/repos/stablyai/orca/releases/latest | jq -r .tag_name)
echo "$ORCA_VER"

You should get a tag with a leading v. The download URL keeps that prefix and the file name drops it, which is what ${ORCA_VER#v} handles below:

v1.4.239

If you want exactly the build this guide was tested with, pin the tag instead. A fast-moving app is the one place a pin earns its keep, because a broken release can land between your laptop and your colleague’s:

ORCA_VER=v1.4.239 # pin: tested release, newer tags at https://github.com/stablyai/orca/releases

Download the amd64 package (swap amd64 for arm64 on ARM boards; the release also carries orca-ide-*.aarch64.rpm and orca-linux-arm64.AppImage) and install it with apt so the dependencies come along. The 174 MB download took 16 seconds here:

cd /tmp
curl -sLO "https://github.com/stablyai/orca/releases/download/${ORCA_VER}/orca-ide_${ORCA_VER#v}_amd64.deb"
sudo apt install -y ./orca-ide_${ORCA_VER#v}_amd64.deb

The package installs the app to /opt/Orca, a menu entry called Orca, and an orca-ide command. It is not called orca on Linux because GNOME’s Orca screen reader already owns that name. Run the version check before anything else, because this is where a server or minimal image falls over:

orca-ide --version

On both Ubuntu VMs the first run failed. The message names the missing library file, not the package that provides it:

/opt/Orca/orca-ide: error while loading shared libraries: libasound.so.2: cannot open shared object file: No such file or directory

The package installed correctly and dpkg -l orca-ide shows it as ii, so reinstalling won’t help. The dynamic loader just can’t find one library the binary links against.

Error: “libasound.so.2: cannot open shared object file”

The .deb’s dependency list covers GTK, NSS, xdotool, xclip and even Xvfb, but not the ALSA sound library that Electron links against. The Ubuntu 26.04 and 24.04 server images in the lab didn’t have it, and installing it is harmless where it’s already present, so add it either way:

sudo apt install -y libasound2t64

Then orca-ide --version prints the version you installed. The whole sequence, error included, looked like this on the 26.04 box:

orca-ide --version failing with libasound.so.2 missing on Ubuntu 26.04, fixed by installing libasound2t64

Ubuntu 24.04 uses the same libasound2t64 package name, so the fix is identical on both LTS releases.

Install the Orca rpm on Fedora

Fedora does not need the library fix, because the rpm pulls alsa-lib and about 238 other packages on a minimal Cloud image. The base image there had no jq, so read the tag with grep and cut instead, then hand the URL straight to dnf:

ORCA_VER=$(curl -s https://api.github.com/repos/stablyai/orca/releases/latest | grep -m1 '"tag_name"' | cut -d '"' -f 4)
sudo dnf install -y "https://github.com/stablyai/orca/releases/download/${ORCA_VER}/orca-ide-${ORCA_VER#v}.x86_64.rpm"
orca-ide --version

dnf finishes with a warning you should read rather than skip past, since it means nothing verified who built the file:

Warning: skipped OpenPGP checks for 1 package from repository: @commandline
Complete!

The release assets are not signed, so you’re trusting GitHub’s TLS and the stablyai account. SELinux stayed in enforcing mode on that VM and the binary started without any policy change.

Run the AppImage instead

The AppImage is the only format that updates itself, which makes it the better pick if you do not want to re-run apt every other day. Download it from the stable latest link and mark it executable:

mkdir -p ~/Applications && cd ~/Applications
curl -sLo Orca.AppImage https://github.com/stablyai/orca/releases/latest/download/orca-linux.AppImage
chmod +x Orca.AppImage
./Orca.AppImage --version

Older guides tell you to install libfuse2 for every AppImage. This one mounted without it on both Ubuntu releases. What it does need is the desktop libraries, so on a clean 24.04 server image it stopped one library earlier than the .deb did:

/tmp/.mount_Orca.AeBKPcm/orca-ide: error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file: No such file or directory

On a desktop session those GTK libraries are already present. If you hit this on a stripped image, installing the .deb once and adding libasound2t64 brings in the whole set, after which the AppImage printed its version too.

Install the agents Orca will launch

Orca only finds agents that are already on your PATH, so install them before the first launch. OpenCode is the one to start with if you don’t have a paid plan, because it ships free models that work without signing in. These three were installed for this guide, each with its own official installer (on Fedora, install nodejs and npm with dnf instead of apt):

curl -fsSL https://opencode.ai/install | bash
curl -fsSL https://claude.ai/install.sh | bash
sudo apt install -y nodejs npm
sudo npm install -g @openai/codex

The OpenCode installer adds ~/.opencode/bin to ~/.bashrc and Claude Code lands in ~/.local/bin. The lab exported both directories in the current shell rather than opening a new one, which is the quickest way to confirm each agent answers:

export PATH="$HOME/.opencode/bin:$HOME/.local/bin:$PATH"

Then check the versions:

opencode --version
claude --version
codex --version

Each one prints a version. A command not found here usually means the installer’s PATH line hasn’t been loaded into this shell yet:

1.19.4
2.1.310 (Claude Code)
codex-cli 0.164.0

Claude Code and Codex still need you to log in (claude and codex login) before they’ll do work inside Orca. If OpenCode is new to you, the OpenCode install walkthrough covers its first run. The OpenCode CLI cheat sheet lists the free models and the /connect flow for adding a paid provider later, while the Claude Code cheat sheet and Codex CLI reference cover their logins and flags.

Error: “this CPU is missing SSE4.2 support, which Bun requires”

OpenCode and the Claude Code installer are both built on Bun, and Bun won’t start on a CPU without SSE4.2. You’ll only see this inside a VM whose virtual CPU hides host features, such as the kvm64 type Proxmox uses when a VM has no CPU type set. VMs created in the Proxmox web UI default to x86-64-v2-AES, which includes SSE4.2, so you’re most likely to hit this on clones of older templates. Orca itself ran fine on that CPU, so the failure looks unrelated until you read it closely.

error: this CPU is missing SSE4.2 support, which Bun requires.
  If this is a VM, enable host CPU passthrough (e.g. -cpu host for QEMU/KVM).
Installation was killed before it could finish (exit code 134).

Shut the VM down, set its CPU type to host (on Proxmox: qm set <vmid> --cpu host), start it again and re-run the installers. grep -m1 -o sse4_2 /proc/cpuinfo should print sse4_2 once the flag is passed through.

Pick a default agent and add a project

Start Orca from a terminal where your agents resolve, which is how the lab launched it: /opt/Orca/orca-ide &. The app menu entry works too, but it only finds agents that are on your desktop session’s PATH, and an installer that edited ~/.bashrc isn’t on it until you log in again. If an agent is missing, Settings, Agents lets you set its binary path. The four-step onboarding opens on the agent picker, and it found all three CLIs plus Claude Agent Teams, Orca’s own launcher for Claude Code teams:

Orca IDE onboarding screen on Ubuntu 26.04 with Claude, Codex and OpenCode detected and Yolo mode on

Look at the Yolo mode switch before you click Continue, because it is on by default. With it on, Orca launches Claude with --dangerously-skip-permissions and Codex with --dangerously-bypass-approvals-and-sandbox, so agents edit files and run commands without asking. The argument for it is that each worktree is a throwaway copy. That holds for files, not for anything an agent can reach from a shell, so turn it off for repositories with deploy keys or production credentials nearby. To change it later, open Settings, Agents and pick Ask for approval under Agent Permissions; Full access is the Yolo setting.

The onboarding is four screens long, and only the first one changes how agents behave:

  1. Pick the default agent and set Yolo mode.
  2. Choose a theme.
  3. Install or skip the GitHub CLI for issue and PR tasks.
  4. Test a notification, then click Add your first project.

Add a project offers Browse folder, which opens the system file picker. Before you point it anywhere, create the small demo repo this guide uses so every later command works as written. It needs git and pytest, and the repo-local identity is there because git commit refuses to run without one (use your own name and email). On Fedora, install the same two packages with sudo dnf install -y git python3-pytest; the lab only ran the Ubuntu line:

sudo apt install -y git python3-pytest
mkdir -p ~/projects/slugkit && cd ~/projects/slugkit
git init -b main
git config user.name "Joshua"
git config user.email "[email protected]"

Write the three files and make the first commit, which is the base ref every Orca worktree branches from:

printf '%s\n' 'import re' '' '' 'def slugify(text):' '    text = text.strip().lower()' '    text = re.sub(r"[^a-z0-9]+", "-", text)' '    return text.strip("-")' > slugkit.py
printf '%s\n' '# slugkit' '' 'Tiny slug helper used to try Orca worktrees.' > README.md
printf '%s\n' '__pycache__/' '.pytest_cache/' > .gitignore
git add . && git commit -m "Initial slugify helper"

Now register it. The CLI does the same job as Browse folder from a terminal, and it’s the quicker route when the path is already in your clipboard:

orca-ide repo add --path ~/projects/slugkit

The CLI talks to the running app, so the project appears in the sidebar straight away. Orca records it as a git project and leaves worktrees made outside Orca hidden (trimmed to the useful fields):

id: e749680e-c062-4464-b41a-51a4469664c0
path: /home/joshua/projects/slugkit
displayName: slugkit
kind: git
externalWorktreeVisibility: hide

The demo repo is a one-function Python file, slugify(), with no tests and no handling for accented characters on purpose. That’s small enough for free models to finish in under a minute, yet real enough that two agents can solve it differently, so any difference you see later comes from the agent rather than the setup. Use a repo of your own if you prefer, because nothing below depends on Python.

Check Orca’s startup log for one more line. On the lab VM it said it couldn’t tell which keyring service the desktop uses, so secrets are stored unencrypted even if a secret service is running, and suggested naming one with --password-store=gnome-libsecret (kwallet6 on KDE). The flag goes on the launch command, /opt/Orca/orca-ide --password-store=gnome-libsecret, or on the Exec= line of /usr/share/applications/orca-ide.desktop for menu launches. It only matters once you add provider accounts in Orca, but it’s easier to set before you do.

Run two coding agents side by side in worktrees

Each Orca workspace is a real git worktree with its own branch and folder, so two agents never write to the same files. In the app, click Create worktree (or press Ctrl+N), type a name and leave your default agent selected:

Orca Create worktree dialog naming the add-tests worktree with the OpenCode agent selected

Orca creates the checkout under ~/orca/workspaces/<project>/<name> and names the branch after your git user.name, so the lab user Joshua got Joshua/add-tests. Name yours add-tests too, because the commands below select it by that name. Its OpenCode tab opens at an empty prompt. You can paste the prompt there, or leave it idle and let the CLI open a second OpenCode tab with the prompt already sent, which is what the lab did. Set the prompt once in your shell:

PROMPT="Add pytest tests for slugify() in tests/test_slugkit.py covering spaces, punctuation and accented input like Café Déjà Vu, run python3 -m pytest -q, and fix slugify if a test fails."

Then follow these steps from any terminal on the same machine:

  1. Start OpenCode in the add-tests worktree with its default free model, Big Pickle.
  2. Create a second worktree, add-tests-deepseek, without an agent.
  3. Open a terminal tab in it that runs OpenCode on the free DeepSeek model.
orca-ide agent launch --agent opencode --worktree name:add-tests --surface terminal --prompt "$PROMPT"
orca-ide worktree create --repo name:slugkit --name add-tests-deepseek
orca-ide terminal create --worktree name:add-tests-deepseek --title "OpenCode DeepSeek" --command "opencode -m opencode/deepseek-v4.1-flash-free --prompt \"$PROMPT\""

Step 3 looks roundabout because Orca’s own --model flag didn’t work for OpenCode in this release, as the next two errors show. Passing -m to OpenCode directly gets you the same result.

Error: “The execution host cannot verify this OpenCode model launch.”

That’s what orca-ide agent launch --agent opencode --model opencode/big-pickle returned on an existing worktree, and nothing started. The same flag on worktree create was refused before the checkout was made:

OpenCode model selection requires an existing worktree. Use --worktree current or an existing worktree selector, or omit --model.

Drop --model and let OpenCode use its default, or start it through terminal create with -m as shown above. Orca’s help shows --model examples for Codex, so this looks specific to OpenCode.

Both agents finished in under a minute. The DeepSeek run added 7 tests, changed two lines of slugify() and finished in 16.1 seconds with all 7 tests passing:

OpenCode with DeepSeek V4.1 Flash Free in an Orca worktree, 7 pytest tests passed in 16.1s

Big Pickle took 39.8 seconds and wrote 9 tests, one of them for Über Straße. That test failed on its first fix, so it moved the ß replacement ahead of normalization, re-ran pytest and got 9 passed. The Source Control panel on the right shows the two changed files waiting for a commit:

OpenCode Big Pickle agent fixing slugify in an Orca worktree with the Source Control panel showing 2 changes

Both green runs are each agent grading its own homework, though. An agent writes the tests it expects to pass, so a passing suite tells you the code matches the agent’s idea of the task, which is the whole reason to run two of them and compare.

Compare the worktrees and merge the winner

The quickest check is one awkward input run against both branches, picked from something neither agent was told about. The worktrees are plain folders, which means ordinary git and Python work on them:

cd ~/orca/workspaces/slugkit
git -C add-tests diff --stat
git -C add-tests-deepseek diff --stat
python3 -c "import sys; sys.path.insert(0,\"add-tests-deepseek\"); import slugkit; print(repr(slugkit.slugify(\"Über Straße\")))"
python3 -c "import sys; sys.path.insert(0,\"add-tests\"); import slugkit; print(repr(slugkit.slugify(\"Über Straße\")))"

Both diffs touch only slugkit.py (the new test files are untracked), and the two one-liners print different slugs:

git diff stat and slugify output comparing the two Orca agent worktrees on Ubuntu 26.04

The faster agent’s version turns Über Straße into uber-stra-e, because stripping combining marks does nothing for ß, which isn’t an accented letter. Its tests never tried one. Big Pickle’s branch gives uber-strasse, so that’s the one to keep. Commit it inside its worktree and fast-forward main. BRANCH picks up whatever name Orca derived from your user.name:

cd ~/orca/workspaces/slugkit/add-tests
git add -A
git commit -m "Add slugify tests and transliterate accents"
BRANCH=$(git branch --show-current)
cd ~/projects/slugkit
git merge --ff-only "$BRANCH"
python3 -m pytest -q

The merge brings in both files and the suite passes on main. Nothing from the DeepSeek branch came along, since only one branch was merged:

Updating a291083..67a3e77
Fast-forward
 slugkit.py            |  4 ++++
 tests/test_slugkit.py | 39 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 43 insertions(+)
 create mode 100644 tests/test_slugkit.py
9 passed in 0.02s

Now remove both worktrees. Removal deletes the folder, and --force lets it go ahead when the checkout has uncommitted changes, which is what you want for the losing agent and nothing else. Orca also deletes the branch when it can tell nothing would be lost, and keeps it otherwise:

orca-ide worktree rm --worktree name:add-tests-deepseek --force
orca-ide worktree rm --worktree name:add-tests
git -C ~/projects/slugkit worktree list

Each removal returns removed: true and finishes in the background. A few seconds later only the main checkout is left and git branch lists just main, so both branches went: one was merged and the DeepSeek branch never had a commit, which means its uncommitted edits are gone for good. Copy anything you want from a losing worktree before you remove it.

Worktree isolation covers files, not the machine. Both agents shared one shell environment, one ~/.config and the same network, so a worktree is not a sandbox. If you want two agents on separate kernels, Orca’s SSH targets and per-workspace cloud VMs are the next step, and the OpenCode vs Claude Code vs Cursor comparison helps decide which agent deserves the bigger box.

Run Orca headless with orca-ide serve

On a server with no desktop, orca-ide serve runs the same runtime without a window, so agents keep working after your laptop sleeps and the desktop or phone app pairs to it over a private network. It refuses to start while the desktop app owns the same profile, and in the lab it exited with code 78 and OrcadInstanceLockError until the app was closed. With the app closed, run it once with pairing off, which is a safe way to check that the server starts before you hand out a pairing link:

orca-ide serve --no-pairing

The capture below is trimmed to the lines that matter; the full log also prints [secrets], [daemon] and telemetry lines. Read the [orcad] line first, since it decides how you expose the port.

orca-ide serve running headless on Ubuntu 26.04, bound to 0.0.0.0 port 6768

The server binds 0.0.0.0:6768, and Orca says so itself: anything that can reach the port can attempt pairing. Orca’s own remote server docs say not to forward that port to the public internet, and pair over Tailscale instead with orca-ide serve --pairing-address <tailscale-ip>, which prints the link a client pastes under Settings, Remote Orca Servers. The same docs cover running it as a systemd user service, which stops at logout unless you enable lingering with loginctl enable-linger.

Orca CLI quick reference

These are the commands this guide ran, all through the orca-ide name that Linux installs use. Apart from serve itself, each one needs the desktop app or orca-ide serve already running:

TaskCommand
Check the runtime is uporca-ide status
List terminal handlesorca-ide terminal list
Register a repoorca-ide repo add --path ~/projects/app
New worktreeorca-ide worktree create --repo name:app --name task
Agent in a worktreeorca-ide agent launch --agent opencode --worktree name:task --prompt "..."
Run any command in a taborca-ide terminal create --worktree name:task --command "npm test"
See every worktree at onceorca-ide worktree ps
Read an agent’s screenorca-ide terminal read --terminal <handle> --screen
Delete a worktreeorca-ide worktree rm --worktree name:task
Headless runtimeorca-ide serve

Telemetry is on in packaged builds and anonymous; set ORCA_TELEMETRY_DISABLED=1 (or the generic DO_NOT_TRACK=1) or switch it off under Settings, Privacy if you’d rather it didn’t phone home. For the full flag list, orca-ide <command> --help is current with whatever tag you installed, which beats any reference written against an older one, and the Orca releases page shows what changed since the release tested here.

Keep reading

Ollama Models Cheat Sheet: Best Models by VRAM, Tested (PDF) AI Ollama Models Cheat Sheet: Best Models by VRAM, Tested (PDF) Open Source LLM Comparison Table (2026) AI Open Source LLM Comparison Table (2026) OpenCode CLI Cheat Sheet: Commands, Sessions and Fixes (PDF) AI OpenCode CLI Cheat Sheet: Commands, Sessions and Fixes (PDF) Best Laptops for Local LLMs: RTX 50 vs 128GB Unified Memory AI Best Laptops for Local LLMs: RTX 50 vs 128GB Unified Memory Black Friday Mini PC Deals: Proxmox, Local AI and Home Assistant AI Black Friday Mini PC Deals: Proxmox, Local AI and Home Assistant Kimi K3.1 Pro for Coding: What Changed vs K3 and API Setup AI Kimi K3.1 Pro for Coding: What Changed vs K3 and API Setup

Leave a Comment

Press ESC to close