From 1cc5c72e2c195442d9a6e3de83fc4dbc8e5f7637 Mon Sep 17 00:00:00 2001 From: Omarchybot Date: Sun, 23 Aug 2026 11:44:23 +0200 Subject: [PATCH] Add Ori as a lazy-loaded agent and a default-agent choice (#7709) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ori is OpenRouter's harness: `ori claude`, `ori codex` and `ori opencode` start those agents against OpenRouter's model catalogue, and `ori code` is Ori's own agent. That last one is what the default-agent entry launches, bare — Ori has no approval prompt to skip, so there is no "don't stop to ask" flag to pass it the way the other agents get one. The package is `github:OpenRouterLabs/ori-releases`, because upstream ships prebuilt binaries as release assets and publishes nothing to npm. mise's `github` backend picks the right asset per platform and verifies GitHub's artifact attestations on the way in; `ubi` resolves the same release but is deprecated for removal in mise 2027.1. The menu glyph at U+E909 is OpenRouter's own mark. Ori publishes no logo of its own and its product page renders that one, so there was no Ori-specific mark to prefer over it. Co-authored-by: Codex XHigh --- bin/omarchy-agent | 7 ++++++- bin/omarchy-default-agent | 5 +++-- bin/omarchy-remove-preinstalls | 2 +- default/fonts/omarchy/README.md | 1 + default/fonts/omarchy/omarchy.ttf | Bin 4496 -> 4668 bytes default/omarchy/omarchy-menu.jsonc | 1 + install/user/mise.sh | 1 + manual/17-ai.md | 3 +++ migrations/1787342993.sh | 5 +++++ test/shell.d/default-agent-test.sh | 17 +++++++++++++++-- test/shell.d/menu-test.sh | 5 +++-- 11 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 migrations/1787342993.sh diff --git a/bin/omarchy-agent b/bin/omarchy-agent index 964254e8..3c009460 100755 --- a/bin/omarchy-agent +++ b/bin/omarchy-agent @@ -52,7 +52,7 @@ if omarchy-cmd-missing "$agent"; then fi # Agents launched from the keybinding or menu run unattended, so each one starts -# with its own spelling of "don't stop to ask". Pi has no approval prompts. +# with its own spelling of "don't stop to ask". Pi and Ori have none to skip. case "$agent" in opencode) command=(opencode --auto) @@ -90,6 +90,11 @@ omp) command=(omp --auto-approve) [[ -n ${prompt:-} ]] && command+=(-- "$prompt") ;; +ori) + # Ori is a harness launcher, and `ori code` is the agent it runs itself. + command=(ori code) + [[ -n ${prompt:-} ]] && command+=(--prompt "$prompt") + ;; pi) command=(pi) [[ -n ${prompt:-} ]] && command+=("$prompt") diff --git a/bin/omarchy-default-agent b/bin/omarchy-default-agent index 3ff91358..1f89b765 100755 --- a/bin/omarchy-default-agent +++ b/bin/omarchy-default-agent @@ -1,7 +1,7 @@ #!/bin/bash # omarchy:summary=Set and launch the default coding agent -# omarchy:args=[pi|omp|opencode|claude|codex|grok|agy|copilot|crush] +# omarchy:args=[pi|omp|opencode|ori|claude|codex|grok|agy|copilot|crush] # omarchy:examples=omarchy default agent | omarchy default agent codex | omarchy default agent claude installing=false @@ -27,6 +27,7 @@ case "$1" in pi) agent="pi"; name="Pi" ;; omp | oh-my-pi) agent="omp"; name="Oh My Pi"; agent_package="github:can1357/oh-my-pi" ;; opencode | open-code) agent="opencode"; name="OpenCode" ;; +ori | openrouter) agent="ori"; name="Ori"; agent_package="github:OpenRouterLabs/ori-releases" ;; claude | claude-code) agent="claude"; name="Claude Code" ;; codex) agent="codex"; name="Codex" ;; crush) agent="crush"; name="Crush" ;; @@ -34,7 +35,7 @@ grok) agent="grok"; name="Grok"; agent_package="npm:@xai-official/grok" ;; agy | antigravity | antigravity-cli | gemini | gemini-cli) agent="agy"; name="Antigravity"; agent_package="antigravity-cli" ;; copilot | github-copilot) agent="copilot"; name="GitHub Copilot" ;; *) - echo "Usage: omarchy-default-agent " + echo "Usage: omarchy-default-agent " exit 1 ;; esac diff --git a/bin/omarchy-remove-preinstalls b/bin/omarchy-remove-preinstalls index 6b2c6ed1..c096ca2e 100755 --- a/bin/omarchy-remove-preinstalls +++ b/bin/omarchy-remove-preinstalls @@ -15,7 +15,7 @@ if gum confirm "Are you sure you want to remove all preinstalled web apps, TUI w # Remove mise stubs rm -f ~/.local/bin/codex ~/.local/bin/claude ~/.local/bin/agy ~/.local/bin/copilot \ ~/.local/bin/gh ~/.local/bin/opencode ~/.local/bin/playwright ~/.local/bin/playwright-cli ~/.local/bin/pi \ - ~/.local/bin/omp ~/.local/bin/grok ~/.local/bin/crush ~/.local/bin/ghui ~/.local/bin/hunk + ~/.local/bin/omp ~/.local/bin/ori ~/.local/bin/grok ~/.local/bin/crush ~/.local/bin/ghui ~/.local/bin/hunk omarchy-pkg-drop \ aether \ diff --git a/default/fonts/omarchy/README.md b/default/fonts/omarchy/README.md index fe2e2f26..005fc874 100644 --- a/default/fonts/omarchy/README.md +++ b/default/fonts/omarchy/README.md @@ -11,6 +11,7 @@ The private-use glyphs in `omarchy.ttf` are: - `U+E906` — LM Studio, from - `U+E907` — Ollama, from - `U+E908` — T3 Code, traced from the app icon in , since upstream publishes no monochrome SVG +- `U+E909` — Ori, from , OpenRouter's own mark: Ori ships no separate logo and its product page uses this one The agent marks are monochrome so the menu can render them using the active theme's foreground and selection colors. diff --git a/default/fonts/omarchy/omarchy.ttf b/default/fonts/omarchy/omarchy.ttf index 2905c95b95c801718a002241b6526e0fa10eee64..fc47d0131ccb06e27d4a01e0014f5a22f393aea3 100644 GIT binary patch delta 388 zcmbQByhmk%aeX-h17imR0~23*PG#Ei!|E3q7?@`;FmR`3q$Z~5wekF5VBlu}0<#RD z00$$BFpzHnR^{O2Q@=@cA9 z00lT0S%iT6IY7QjMs7)k3Io$;ApZc6?~;?BoXAneWyHY1&jOOqO{^$jRA$@&7`HQWZ0=#Y&dm!{ v29#hlHg?uLd|)yUzdxhk [command-name]`. The stubs are kept current along with everything else mise manages when you run `omarchy update` (or the `mup` alias). diff --git a/migrations/1787342993.sh b/migrations/1787342993.sh new file mode 100644 index 00000000..0358b527 --- /dev/null +++ b/migrations/1787342993.sh @@ -0,0 +1,5 @@ +echo "Install ori (OpenRouter's agent harness) via mise wrapper" + +if [[ ! -f $HOME/.local/state/omarchy/preinstalls-removed ]]; then + omarchy-mise-install github:OpenRouterLabs/ori-releases ori +fi diff --git a/test/shell.d/default-agent-test.sh b/test/shell.d/default-agent-test.sh index 0445106d..5b4512f1 100644 --- a/test/shell.d/default-agent-test.sh +++ b/test/shell.d/default-agent-test.sh @@ -97,6 +97,7 @@ grok_package="npm:@xai-official/grok" omp_package="github:can1357/oh-my-pi" crush_package="crush" agy_package="antigravity-cli" +ori_package="github:OpenRouterLabs/ori-releases" assert_lazy_stub() { local package=$1 @@ -114,6 +115,7 @@ assert_lazy_stub() { assert_lazy_stub "$grok_package" grok assert_lazy_stub "$omp_package" omp assert_lazy_stub "$crush_package" crush +assert_lazy_stub "$ori_package" ori pass "custom agent lazy stubs preserve their mise packages" source "$ROOT/install/user/mise.sh" @@ -121,12 +123,17 @@ grep -Fx "$agy_package agy" "$stub_log" >/dev/null || fail "user setup creates t grep -Fx "$grok_package grok" "$stub_log" >/dev/null || fail "user setup creates the Grok lazy stub" grep -Fx "$omp_package omp" "$stub_log" >/dev/null || fail "user setup creates the Oh My Pi lazy stub" grep -Fx "$crush_package" "$stub_log" >/dev/null || fail "user setup creates the Crush lazy stub" +grep -Fx "$ori_package ori" "$stub_log" >/dev/null || fail "user setup creates the Ori lazy stub" pass "user setup creates the custom agent lazy stubs" : >"$stub_log" source "$ROOT/migrations/1785617047.sh" >/dev/null grep -Fx "$omp_package omp" "$stub_log" >/dev/null || fail "Oh My Pi migration creates a working lazy stub" +: >"$stub_log" +source "$ROOT/migrations/1787342993.sh" >/dev/null +grep -Fx "$ori_package ori" "$stub_log" >/dev/null || fail "Ori migration creates a working lazy stub" + : >"$stub_log" source "$ROOT/migrations/1785846769.sh" >/dev/null grep -Fx "$omp_package omp" "$stub_log" >/dev/null || fail "agent migration repairs the Oh My Pi lazy stub" @@ -208,6 +215,7 @@ touch "$test_home/.local/state/omarchy/preinstalls-removed" : >"$stub_log" source "$ROOT/migrations/1785617047.sh" >/dev/null source "$ROOT/migrations/1785846769.sh" >/dev/null +source "$ROOT/migrations/1787342993.sh" >/dev/null [[ ! -s $stub_log ]] || fail "agent migrations respect the preinstall opt-out" [[ ! -e $test_home/.local/bin/omp ]] || fail "agent migration removes the obsolete Oh My Pi wrapper after opt-out" @@ -232,9 +240,9 @@ rm "$test_home/.local/state/omarchy/preinstalls-removed" rm -f "$agent_file" pass "agent migrations install working wrappers without overriding the preinstall opt-out" -touch "$test_home/.local/bin/agy" +touch "$test_home/.local/bin/agy" "$test_home/.local/bin/ori" omarchy-remove-preinstalls >/dev/null -for command in agy omp grok crush; do +for command in agy omp ori grok crush; do [[ ! -e $test_home/.local/bin/$command ]] || fail "Remove Preinstalls deletes the $command lazy stub" done pass "Remove Preinstalls deletes every optional agent lazy stub" @@ -285,6 +293,8 @@ declare -A expected_agents=( [oh-my-pi]="omp" [opencode]="opencode" [open-code]="opencode" + [ori]="ori" + [openrouter]="ori" [claude]="claude" [claude-code]="claude" [codex]="codex" @@ -303,6 +313,7 @@ declare -A expected_packages=( [pi]="pi" [omp]="$omp_package" [opencode]="opencode" + [ori]="$ori_package" [claude]="claude" [codex]="codex" [crush]="$crush_package" @@ -446,6 +457,7 @@ assert_bypass() { assert_launch pi pi "Review this project" assert_launch omp omp --auto-approve -- "Review this project" assert_launch opencode opencode --auto --prompt "Review this project" +assert_launch ori ori code --prompt "Review this project" assert_launch claude claude --permission-mode auto -- "Review this project" assert_launch codex codex --approve-for-me -- "Review this project" assert_launch crush crush run "Review this project" @@ -457,6 +469,7 @@ pass "agent launcher adapts initial prompts for every supported agent" assert_bypass pi pi assert_bypass omp omp --auto-approve assert_bypass opencode opencode --auto +assert_bypass ori ori code assert_bypass claude claude --permission-mode auto assert_bypass codex codex --approve-for-me assert_bypass crush crush --yolo diff --git a/test/shell.d/menu-test.sh b/test/shell.d/menu-test.sh index 236831c3..b3394678 100644 --- a/test/shell.d/menu-test.sh +++ b/test/shell.d/menu-test.sh @@ -220,6 +220,7 @@ const expectedAgents = { pi: { icon: '\ue901', iconFont: 'omarchy', label: 'Pi' }, omp: { icon: '\ue903', iconFont: 'omarchy', label: 'omp' }, opencode: { icon: '\ue902', iconFont: 'omarchy', label: 'OpenCode' }, + ori: { icon: '\ue909', iconFont: 'omarchy', label: 'Ori' }, claude: { icon: '󰛄', label: 'Claude' }, codex: { icon: '\ue905', iconFont: 'omarchy', label: 'Codex' }, grok: { icon: '\ue904', iconFont: 'omarchy', label: 'Grok' }, @@ -243,7 +244,7 @@ assertDeepEqual( defaultItems .filter(item => item.parent === 'setup.default.agent') .map(item => item.label), - ['Antigravity', 'Claude', 'Codex', 'Copilot', 'Crush', 'Grok', 'omp', 'OpenCode', 'Pi'], + ['Antigravity', 'Claude', 'Codex', 'Copilot', 'Crush', 'Grok', 'omp', 'OpenCode', 'Ori', 'Pi'], 'menu sorts coding agents alphabetically' ) const expectedDefaults = { @@ -635,5 +636,5 @@ assert( JS font_charset=$(fc-query --format='%{charset}' "$ROOT/default/fonts/omarchy/omarchy.ttf") -[[ $font_charset == *"e900-e908"* ]] || fail "Omarchy icon font includes every custom menu glyph" +[[ $font_charset == *"e900-e909"* ]] || fail "Omarchy icon font includes every custom menu glyph" pass "Omarchy icon font includes the official agent marks"