AIREITER

OpenRouter CLI: Ori, curl, llm ve aichat

Son Güncelleme: 2026-09-01 01:50:52

OpenRouter CLI aradığınızda aslında iki farklı ihtiyaca yönelik araçlarla karşılaşırsınız. OpenRouter’ın resmi ori komutu, mevcut kodlama ajanlarını yapılandırıp başlatır. Topluluk tarafından geliştirilen istemciler ise tek seferlik prompt’lar, REPL sohbeti, JSON çıktısı veya API’nin daha geniş bir bölümüne erişim sunar. İhtiyacınız yalnızca bir shell pipeline’ı ise OpenRouter API’si ve curl yeterlidir.

Pratikte “OpenRouter CLI” ne anlama geliyor?

“OpenRouter CLI”, evrensel ve tek bir resmi terminal istemcisinin adı değil. Bu ifade pratikte üç farklı kullanım biçimini kapsıyor: OpenRouter üzerinden bir ajan başlatmak, API’yi doğrudan shell’den çağırmak veya llm ve aichat gibi üçüncü taraf terminal araçlarını kullanmak.

Terminaldeki işinizBuradan başlayınNeden?
Claude Code, Codex, OpenCode veya desteklenen başka bir ajanı çalıştırmakResmi Ori HarnessOAuth, model seçimi ve OpenRouter ayarları mevcut ajanın etrafında uygulanır
Tek bir prompt göndermek veya stdin işlemekcurl ve jqEk bir CLI bağımlılığı yoktur ve istek üzerinde tam kontrol sağlar
Çok sayıda OpenRouter endpoint’ini incelemek ve JSON döndürmek@aaronjmars/openroutercliGeniş komut kapsamı, JSON modu ve genel amaçlı istek gönderme seçeneği sunar
Model aramalı bir sohbet REPL’i kullanmak@letuscode/openrouter-cliTek seferlik prompt’lar, REPL sohbeti, bulanık model araması ve yapılandırma profilleri sağlar
Çok modelli prompt’lar, toplu işlemler veya prompt zincirleri çalıştırmakorcProfiller, şablonlar, toplu işlem, zincirleme ve kod analizi özelliklerini bir araya getirir
Log’ları, şemaları, ekleri ve eklentileri korumakllm-openrouterOpenRouter modellerini genişletilebilir llm CLI’ına ekler
Sohbeti, shell yardımını, RAG’i, ajanları ve yerel sağlayıcıları birleştirmekaichatYalnızca OpenRouter’a özel olmayan, Rust tabanlı daha kapsamlı bir terminal çalışma alanıdır

Buradaki temel ayrım, sahiplik ve kapsam. OpenRouter’ın ori entegrasyonu ile @openrouter/cli DevTools paketi resmi araçlardır. Ancak ikisi de genel amaçlı bir openrouter ask istemcisi değildir: DevTools paketi SDK telemetri görüntüleyicisine ve Claude Code durum satırına odaklanırken Ori, mevcut harness’leri başlatır.

Resmi yol: Ori Harness’i kurup kullanmak

Ori, OpenRouter’ın desteklenen kodlama ajanı harness’lerini yapılandırmak için sunduğu resmi CLI’dır. OpenRouter ile kimlik doğrulaması yapar, seçtiğiniz modeli alttaki ajana iletir ve o ajanın normal komutlarıyla bayraklarını korur. Yani Claude Code, Codex, OpenCode veya diğer harness’lerin yerini almaz.

OpenRouter’ın duyurusunda ve kılavuzunda yer alan komutla kurulumu başlatabilirsiniz:

curl -fsSL https://openrouter.ai/labs/ori/install.sh | bash

Ardından kimlik doğrulaması yapıp bir ajan başlatın:

ori login
ori claude
ori codex
ori opencode
ori hermes

Güncel Ori dokümantasyonunda desteklenen komutlar arasında grok, pi, prime-agent ve dsh de listeleniyor. ori dsh, DeepSeek Harness’i yapılandırır ancak çalıştırmaz; sonrasında dsh komutunu ayrıca çalıştırmanız gerekir. Ori’yi ori update ile güncelleyebilirsiniz.

Resmi CLI giriş noktasını gösteren OpenRouter Ori Harness sayfası

Ajanınızı değiştirmeden model seçin

Ori, bir OpenRouter model ID’si kabul eder ve tanımadığı argümanları alttaki harness’e iletir:

ori claude --model anthropic/claude-sonnet-4.6
ori codex --model openai/gpt-5.2 --full-auto
ori opencode --model openrouter/auto
ori hermes --model openrouter/auto

Endpoint ayrıntıları her ajan için aynı değildir. Örneğin OpenRouter’ın Claude Code yönergelerinde Anthropic uyumlu https://openrouter.ai/api temel URL’si kullanılırken Codex gibi OpenAI uyumlu istemcilerde https://openrouter.ai/api/v1 kullanılır. Ori’nin amaçlarından biri de harness’e göre değişen bu yapılandırma farklarını perdelemektir.

Ori, tarayıcı tabanlı OAuth PKCE kullandığı için normal kullanımda her ajana OpenRouter API anahtarını tek tek yapıştırmanız gerekmez. OpenRouter’ın Ori Harness dokümantasyonuna göre istekler standart OpenRouter faturalandırması ve etkinlik raporlaması kapsamında değerlendirilir; Ori için ayrıca bir ücret yoktur. Bununla birlikte çıkarım maliyetini yine seçtiğiniz model ve alttaki harness belirler.

Ori bağımsız bir sohbet REPL’i değil

Ajanın araçlarını, dosya işlemlerini veya onay modelini kullanmak istiyorsanız Ori doğru katmandır. Göreviniz bir prompt göndermek, yapılandırılmış yanıt almak ya da kodlama ajanı başlatmadan shell pipeline’ı çalıştırmaksa curl, doğrudan bir istemci, llm veya aichat kullanın.

Bu ayrım önemli; çünkü resmi duyuru materyalleri Ori’yi bir uyumluluk ve yapılandırma katmanı olarak konumlandırıyor. Resmi @openrouter/cli paketi de sıkça karıştırılıyor. Paketin güncel dokümantasyonunda openrouter devtools ve openrouter statusline komutları yer alıyor; 1.0 sürüm çizgisinde start, stop, restart ve code gibi önceki proxy komutları kaldırılmış durumda.

Bilmenizde fayda olan topluluk OpenRouter istemcileri

Topluluk istemcileri, sundukları terminal deneyimi bakımından birbirinden ayrılıyor. Seçim yaparken ihtiyacınızın etkileşimli bir seçici mi, eksiksiz API erişimi mi, küçük bir binary mi, çok modelli otomasyon mu yoksa öngörülebilir makine-okunabilir çıktı mı olduğuna bakın.

İstemciKurulum veya çalıştırma biçimiÖne çıktığı kullanımDikkat edilmesi gerekenler
@aaronjmars/openrouterclinpm install -g @aaronjmars/openroutercliGeniş OpenRouter API erişimi, OAuth PKCE, --json, kullanım verileri, medya işleri ve request METHOD pathResmi değildir; Node.js 20+ gerekir; yönetim komutları için management key gerekir
@letuscode/openrouter-clinpm i -g @letuscode/openrouter-cliopenrouter ask, repl, bulanık model araması, profiller, şablonlar ve Markdown/düz metin çıktısıREADME’de MVP geliştirme aşaması belirtiliyor; Node.js 18.17+ gerekir; Polyform Noncommercial 1.0.0 lisanslıdır
orcnpm install -g openrouter-cliÇok modelli prompt’lar, profiller, şablonlar, toplu işlem, prompt zincirleri ve kod analiziNode.js 22+ gerekir; orc komutunu kullanır; üstteki kapsamlı istemciden proje ve paket adı farklıdır
ortcargo +nightly-2026-03-25 install --locked ort-openrouter-cliHızlı Linux terminal kullanımı, sağlayıcı seçimi, stdin, görseller, tmux farkındalıklı devam etme ve gecikme/maliyet istatistikleriYalnızca Linux/x86_64; README’de TLS sertifikalarını doğrulamadığı açıkça belirtiliyor
llm-openrouterllm install llm-openrouterLog’lar, takma adlar, şemalar, ekler, araçlar ve olgun bir eklenti tabanlı iş akışıOPENROUTER_KEY değişkeni kullanılır; model kataloğu bir saat boyunca önbellekte tutulur
aichatPaket yöneticisi veya binary kurulumuREPL, shell asistanı, RAG, ajanlar, MCP, yerel sağlayıcılar ve yerel HTTP sunucusuKapsamı geniş bir soyutlama sunar; README’de sağlayıcı bazında özellik veya güvenlik matrisi yer almıyor

Bunlar belgelenmiş yeteneklerdir; karşılaştırılabilir performans benchmark’ları değildir.

En küçük ve güvenilir iş akışı: curl ve jq

curl ile jq zaten kuruluysa ham OpenRouter API’si, terminaldeki en küçük ve en şeffaf yoldur. OpenRouter Quickstart dokümantasyonu Bearer kimlik doğrulamasını, OpenAI uyumlu /api/v1/chat/completions endpoint’ini, model alanını, messages dizisini ve isteğe bağlı streaming desteğini açıklıyor.

Shell oturumunda bir anahtar ve model tanımlayın:

export OPENROUTER_API_KEY='sk-or-v1-...'
export OR_MODEL='openai/gpt-4o'

Ardından tek bir prompt gönderin:

curl -sS https://openrouter.ai/api/v1/chat/completions \
  -H "Authorization: Bearer ${OPENROUTER_API_KEY}" \
  -H "Content-Type: application/json" \
  -d "$(jq -n \
    --arg model "$OR_MODEL" \
    --arg prompt "Explain Unix pipes in three sentences." \
    '{model: $model, messages: [{role: "user", content: $prompt}], stream: false}')" \
  | jq -r '.choices[0].message.content // .error.message'

Model ID’sini her script’e tekrar tekrar yazmak yerine bir ortam değişkeni kullanın. Resmi Models API; id, context uzunluğu, fiyatlandırma, desteklenen parametreler, sağlayıcı limitleri ve isteğe bağlı benchmark metadatasını sunar.

İsteği yeniden kullanılabilir shell fonksiyonlarına dönüştürün

Bu fonksiyonlar, prompt’u JSON’a jq ile kodlayarak istek gövdesinin güvenli biçimde oluşturulmasını sağlar. orask argüman olarak verilen prompt’u kullanır; orpipe ise standart girdinin tamamını tek bir prompt olarak okur.

orask() {
  local prompt="$*"
  local model="${OR_MODEL:?Set OR_MODEL to an OpenRouter model ID}"

  jq -n \
    --arg model "$model" \
    --arg prompt "$prompt" \
    '{model: $model, messages: [{role: "user", content: $prompt}], stream: false}' \
  | curl -sS --fail-with-body \
      https://openrouter.ai/api/v1/chat/completions \
      -H "Authorization: Bearer ${OPENROUTER_API_KEY:?Set OPENROUTER_API_KEY}" \
      -H "Content-Type: application/json" \
      -d @- \
  | jq -r '.choices[0].message.content // .error.message // "Unknown OpenRouter error"'
}

orpipe() {
  orask "$(cat)"
}

Örnekler:

orask "Turn this error message into a likely diagnosis: connection reset by peer"
cat README.md | orpipe

Script’in metadata’ya ihtiyacı varsa yalnızca metni ayıklamak yerine JSON yanıtını koruyun:

orjson() {
  local prompt="$*"
  local model="${OR_MODEL:?Set OR_MODEL to an OpenRouter model ID}"

  jq -n \
    --arg model "$model" \
    --arg prompt "$prompt" \
    '{model: $model, messages: [{role: "user", content: $prompt}], stream: false}' \
  | curl -sS --fail-with-body \
      https://openrouter.ai/api/v1/chat/completions \
      -H "Authorization: Bearer ${OPENROUTER_API_KEY:?Set OPENROUTER_API_KEY}" \
      -H "Content-Type: application/json" \
      -d @-
}

Böylece yanıtın usage nesnesi maliyet hesabı için kullanılabilir kalır; API hatalarını boş bir model yanıtından ayırmak da kolaylaşır.

Uyumlu modelleri komut satırından keşfedin

Katalogda yer alan her model, her istek parametresini desteklemeyebilir. OpenRouter’ın Models API’si tools dahil olmak üzere supported_parameters ile filtrelemeyi; ayrıca fiyat, context, throughput, gecikme, popülerlik veya güncelliğe göre sıralamayı destekler.

Araç destekleyen modelleri belgelenen sıralama düzeninde en düşük fiyatlılardan başlayarak listeleyin:

curl -sS -G https://openrouter.ai/api/v1/models \
  --data-urlencode 'supported_parameters=tools' \
  --data-urlencode 'sort=pricing-low-to-high' \
| jq -r '.data[] | [.id, .context_length, .pricing.prompt, .pricing.completion] | @tsv' \
| head -20

Bir modeli üretim script’ine eklemeden önce ayrıntılarını inceleyin. OpenRouter, tekil model ayrıntısı endpoint’ini /api/v1/model/{author}/{slug} olarak belgeliyor:

curl -sS \
  "https://openrouter.ai/api/v1/model/${OR_MODEL}" \
| jq '.data | {id, context_length, architecture, pricing, supported_parameters, top_provider}'

pricing değerleri token veya birim başına ifade edilir. Bu nedenle ham bir ondalık sayıyı dönüştürmeden milyon token başına dolar tutarı olarak okumayın. Bir isteğin gerçekte kaç giriş ve çıkış token’ı tükettiğini görmek için yanıt içindeki usage alanı daha güvenilir kaynaktır.

Shell pipeline’ında toplu işlem

Pratik bir toplu işlem akışında metin dosyasındaki her satır bir prompt olur ve her sonuç için bir JSON nesnesi üretilir. Aşağıdaki script; orijinal prompt’u, yanıtı, kullanım verisini ve hata alanını kaydeder. Böylece model metni ile makine tarafından okunabilir çıktı birbirine karışmaz.

prompts.txt dosyasını oluşturun:

Summarize the release notes in one paragraph.
List three security risks in this configuration.
Extract the names and versions from this sentence.

Toplu işlemi çalıştırın:

#!/usr/bin/env bash
set -u

: "${OPENROUTER_API_KEY:?Set OPENROUTER_API_KEY}"
: "${OR_MODEL:?Set OR_MODEL}"

while IFS= read -r prompt || [[ -n "$prompt" ]]; do
  [[ -z "$prompt" ]] && continue

  request=$(jq -n \
    --arg model "$OR_MODEL" \
    --arg prompt "$prompt" \
    '{model: $model, messages: [{role: "user", content: $prompt}], stream: false}')

  response=$(curl -sS --fail-with-body \
    https://openrouter.ai/api/v1/chat/completions \
    -H "Authorization: Bearer ${OPENROUTER_API_KEY}" \
    -H "Content-Type: application/json" \
    -d "$request" || true)

  if jq -e '.choices[0].message.content' >/dev/null 2>&1 <<<"$response"; then
    jq -c --arg prompt "$prompt" \
      '{prompt: $prompt, answer: .choices[0].message.content, usage: (.usage // null)}' \
      <<<"$response"
  else
    jq -c --arg prompt "$prompt" \
      '{prompt: $prompt, answer: null, error: (.error.message // "Request failed"), usage: (.usage // null)}' \
      <<<"$response"
  fi
done < prompts.txt > results.jsonl

Script istekleri sıralı biçimde çalıştırır. Rate limit’lerini ve bütçeyi kontrol etmeden paralellik eklemeyin; çünkü eşzamanlı istekler maliyeti hızla artırabilir. OpenRouter’ın fiyatlandırma sayfasında ücretsiz plan için günde 50 istek ve kullandıkça öde modeli için %5,5 platform ücreti listeleniyor. Dolayısıyla ücretsiz bir model, sınırsız toplu işlem kapasitesi anlamına gelmez.

llm ve aichat hangi noktada devreye giriyor?

llm ve aichat, OpenRouter’ı destekleyen genel amaçlı terminal çalışma alanlarıdır. Yeniden kullanılabilir prompt’lar, oturumlar, ekler, araçlar, yerel modeller veya geçmiş çalışmaların kaydını istiyorsanız küçük bir wrapper yerine bu araçlar daha anlamlı hale gelir.

llm-openrouter: log tutan ve genişletilebilen seçenek

Önce temel llm komutunu kurun, ardından OpenRouter eklentisini ekleyin:

llm install llm-openrouter
llm keys set openrouter

Eklenti, ortam değişkeni olarak OPENROUTER_KEY adını kullanıyor. OpenRouter modellerini openrouter/anthropic/claude-sonnet-5 gibi adlarla sunuyor, model listesini bir saat boyunca önbelleğe alıyor ve şu komutlarla yeniliyor:

llm openrouter refresh
llm models list

Normal bir prompt ve shell pipeline kullanımı şöyle:

llm -m openrouter/anthropic/claude-sonnet-5 \
  "Give me five short names for a pet tarantula"

cat app.py | llm -m openrouter/anthropic/claude-sonnet-5 \
  -s "Review this code for a security bug"

Eklentinin dokümantasyonunda şemalar, ekler, tool çağrıları, reasoning seçenekleri, sağlayıcı yönlendirme JSON’ı, OpenRouter web araçları ve anahtar inceleme özellikleri yer alıyor. Ham curl ile otonom bir kodlama harness’i arasında konumlanan bu yaklaşım pratik; ancak model önbelleği canlı katalogdan geride kalabilir.

aichat: daha geniş kapsamlı terminal çalışma alanı

aichat, OpenRouter’ın yanı sıra 20’den fazla isimlendirilmiş sağlayıcıyı ve OpenAI uyumlu endpoint’leri destekleyen Rust tabanlı bir CLI’dır. Belgelenen özellikleri arasında CMD modu, Chat-REPL, shell yardımı, oturumlar, makrolar, RAG, function calling, MCP araçları, ajanlar ve sohbet, embedding ile reranking endpoint’leri sunan yerel bir sunucu bulunuyor.

OpenRouter yapılandırması, https://openrouter.ai/api/v1 adresini kullanan OpenAI uyumlu bir istemci şeklindedir. Projenin örneklerinde de openrouter:<model> biçiminde model adı kullanılıyor. Terminali uygulamanızın ana arayüzüne dönüştürüyorsanız aichat daha kapsamlı bir zemin sunar; daha küçük ve davranışı daha kolay incelenebilen bir istek yolu istiyorsanız curl veya llm yeterli olur.

CLI sorunu gibi görünen hataları giderme

OpenRouter CLI hataları shell, istemci, seçilen model ve hesap arasındaki sınırda ortaya çıkabilir. Araç değiştirmeden önce bu katmanları ayrı ayrı teşhis edin.

Belirtiİlk kontrolMuhtemel katman
401 veya anahtar eksik hatasıİstemcinin beklediği değişken adını yazdırın; llm-openrouter için OPENROUTER_KEY, ham API örnekleri için OPENROUTER_API_KEY kullanılırShell veya istemci kimlik doğrulaması
Ori bir ajan açıyor ancak model reddediliyorModel ID’sini ve alttaki harness’in API beklentilerini doğrulayınHarness/model uyumluluğu
Bir model seçicide görünmüyorllm’in bir saatlik önbelleğini yenileyin; diğer harness’lerde /api/v1/models yanıtıyla karşılaştırınİstemci kataloğu
Tool veya schema isteği başarısız oluyorsupported_parameters=tools ile /models yanıtını filtreleyin veya model metadatasını inceleyinModel yeteneği
Ücretsiz istek beklenmedik şekilde duruyorGüncel ücretsiz plan isteği limitini ve modelin hâlâ ücretsiz sunulup sunulmadığını kontrol edinHesap veya platform politikası
Maliyet beklenenden yüksek.usage alanını, seçilen sağlayıcıyı, yönlendirme seçeneklerini ve önbellek davranışını kaydedinİstek ve sağlayıcı yönlendirmesi

OpenCode ve Kilo Code hakkında bir Reddit tartışmasında u/GrevireDev şöyle yazdı:

“Hem Kilo Code hem de OpenCode, OpenRouter modellerinin tamamını dinamik olarak çekmek yerine sabit kodlanmış/önceden yüklenmiş bir model listesi kullanıyor.” — r/openrouter

u/DrunkenRobotBipBop ise başka bir OpenRouter tartışmasında maliyet ve önbellekleme konusunda şu gözlemi paylaştı:

“OpenRouter’da önbellekleme biçiminize dikkat edin. Sağlayıcı her değiştiğinde önbellek silinir ve tam ücret ödemek zorunda kalırsınız.” — r/openrouter

Bu yorumları faturalandırma kuralı olarak değil, sorun giderme ipucu olarak değerlendirin. Maliyetleri istek kullanım verileri, sağlayıcı bilgileri ve güncel OpenRouter fiyatlandırmasıyla doğrulayın.

OpenRouter CLI SSS

Bunlar, openrouter cli aramasının arkasındaki tekrarlanan kurulum ve seçim soruları. Aşağıdaki kısa yanıtlar sizi doğru katmana yönlendiriyor: resmi launcher, ham API, topluluk istemcisi veya model kataloğu.

Resmi bir OpenRouter CLI var mı?

Evet. OpenRouter, ori CLI’ını resmi olarak belgeliyor. Ancak Ori, mevcut kodlama harness’leri için bir launcher ve yapılandırma katmanı. OpenRouter’ın @openrouter/cli npm paketi ayrı bir DevTools aracıyken @aaronjmars/openroutercli gibi doğrudan sohbet/API CLI’ları topluluk projeleridir.

Herhangi bir CLI kurmadan OpenRouter’ı terminalden kullanabilir miyim?

Evet. https://openrouter.ai/api/v1/chat/completions adresine Bearer kimlik doğrulamalı bir curl isteği göndermek tek seferlik bir prompt için yeterlidir. jq ile metni ayıklayabilir veya pipeline’da kullanmak üzere JSON çıktısını koruyabilirsiniz.

JSON piping için en iyi OpenRouter CLI hangisi?

Küçük bir script için ham curl, en az gizli davranışa sahip seçenektir. Daha geniş bir komut yüzeyine ihtiyacınız varsa @aaronjmars/openroutercli gibi JSON modunu belgeleyen bir istemci seçebilir veya llm kullanıp ihtiyaç duyduğunuz yanıt verilerini açıkça koruyabilirsiniz.

CLI neden OpenRouter web sitesinden daha az model gösteriyor?

İstemci, model kataloğunu önbelleğe alıyor veya önceden yüklenmiş bir model listesiyle geliyor olabilir. Seçicideki modelleri curl https://openrouter.ai/api/v1/models çıktısıyla karşılaştırın, destekleniyorsa istemcinin önbelleğini yenileyin ve görünen adı değil, dönen tam model ID’sini kullanın.

Ori, OpenRouter API anahtarı gerektiriyor mu?

OpenRouter’ın Ori dokümantasyonuna göre normal giriş yolu OAuth PKCE kullanıyor; dolayısıyla kullanıcıların ayrıca bir API anahtarı oluşturup yapıştırması gerekmiyor. Ham curl, llm-openrouter ve çoğu topluluk istemcisi ise hâlâ bir anahtara veya kendi kimlik doğrulama yapılandırmasına ihtiyaç duyuyor.

OpenRouter CLI iş akışını otomatikleştirmeden önce

Bir modeli sabitlemeden önce canlı Models API’sini sorgulayın; model ID’sini ve yanıtın usage verisini kaydedin; hesap veya anahtar bütçesi belirleyin. CLI yalnızca ön yüzdür. İş akışının güvenilir ve uygun maliyetli olup olmayacağını belirleyen değişkenler OpenRouter modeli, sağlayıcı rotası, context boyutu ve hesap limitleri olmaya devam eder.