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şiniz | Buradan başlayın | Neden? |
|---|---|---|
| Claude Code, Codex, OpenCode veya desteklenen başka bir ajanı çalıştırmak | Resmi Ori Harness | OAuth, model seçimi ve OpenRouter ayarları mevcut ajanın etrafında uygulanır |
| Tek bir prompt göndermek veya stdin işlemek | curl ve jq | Ek 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/openroutercli | Geniş komut kapsamı, JSON modu ve genel amaçlı istek gönderme seçeneği sunar |
| Model aramalı bir sohbet REPL’i kullanmak | @letuscode/openrouter-cli | Tek 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ırmak | orc | Profiller, şablonlar, toplu işlem, zincirleme ve kod analizi özelliklerini bir araya getirir |
| Log’ları, şemaları, ekleri ve eklentileri korumak | llm-openrouter | OpenRouter modellerini genişletilebilir llm CLI’ına ekler |
| Sohbeti, shell yardımını, RAG’i, ajanları ve yerel sağlayıcıları birleştirmek | aichat | Yalnı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.
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.
| İstemci | Kurulum veya çalıştırma biçimi | Öne çıktığı kullanım | Dikkat edilmesi gerekenler |
|---|---|---|---|
@aaronjmars/openroutercli | npm install -g @aaronjmars/openroutercli | Geniş OpenRouter API erişimi, OAuth PKCE, --json, kullanım verileri, medya işleri ve request METHOD path | Resmi değildir; Node.js 20+ gerekir; yönetim komutları için management key gerekir |
@letuscode/openrouter-cli | npm i -g @letuscode/openrouter-cli | openrouter 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 |
orc | npm install -g openrouter-cli | Çok modelli prompt’lar, profiller, şablonlar, toplu işlem, prompt zincirleri ve kod analizi | Node.js 22+ gerekir; orc komutunu kullanır; üstteki kapsamlı istemciden proje ve paket adı farklıdır |
ort | cargo +nightly-2026-03-25 install --locked ort-openrouter-cli | Hızlı Linux terminal kullanımı, sağlayıcı seçimi, stdin, görseller, tmux farkındalıklı devam etme ve gecikme/maliyet istatistikleri | Yalnızca Linux/x86_64; README’de TLS sertifikalarını doğrulamadığı açıkça belirtiliyor |
llm-openrouter | llm install llm-openrouter | Log’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 |
aichat | Paket yöneticisi veya binary kurulumu | REPL, shell asistanı, RAG, ajanlar, MCP, yerel sağlayıcılar ve yerel HTTP sunucusu | Kapsamı 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 kontrol | Muhtemel 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ır | Shell veya istemci kimlik doğrulaması |
| Ori bir ajan açıyor ancak model reddediliyor | Model ID’sini ve alttaki harness’in API beklentilerini doğrulayın | Harness/model uyumluluğu |
| Bir model seçicide görünmüyor | llm’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 oluyor | supported_parameters=tools ile /models yanıtını filtreleyin veya model metadatasını inceleyin | Model yeteneği |
| Ücretsiz istek beklenmedik şekilde duruyor | Güncel ücretsiz plan isteği limitini ve modelin hâlâ ücretsiz sunulup sunulmadığını kontrol edin | Hesap 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.