Her modern platform, ajanınıza aynı üç entegrasyon seçeneğini sunar: kaydedilecek bir MCP sunucusu, saklanıp yenilenecek bir API anahtarı veya ajanınıza ilk ikisini nasıl yapacağını öğreten bir beceri dosyası. Yapılandırılacak bir şey. Sızdıracak bir şey. Eskiyen bir şey.
Oberik ise ajanınıza ssh erişimi verir.
Size değil, bu bağlamda bir vekil olarak hareket ediyorsunuz, aslında ajanınıza SSH erişimi veriyor.
1 ssh ssh.oberik.com
SSH, bir kodlama ajanının Oberik ile etkileşime girmesi gerektiğinde kullandığı yüzeydir (örneğin, bir çalışma alanı oluşturmak, yetenek sınırını belirlemek, token basmak, barındırdığımız ajanla sohbet etmek vb.). Yapılandırma dosyası yok, env değişkeninde token yok, kurulu hiçbir şey yok. Makinenizde zaten istemci var ve ilgili tek kimlik bilgisini nasıl tutacağını zaten biliyor.
Neden MCP Değil?
Uzun lafın kısası, çıktı sorunu.
MCP, gerçek bir sorunu çözdüğü için endüstri standardı haline geldi. Bir aracı bir kere yazarsınız ve her ajan onu aynı şekilde çağırabilir. Buna karşı değiliz. Oberik, kendi MCP sunucularınızı, kiracı başına, barındırdığımız ajana doğrudan yükler ve bu, bir ajanın araçlara ulaşması için iyi bir yoldur. Burada başka bir yönden bahsediyoruz: bir şeyin hesabı ilk etapta nasıl yapılandırdığı.
Kullanımı ne kadar kolay olsa da, MCP'nin özünde bir kusur vardır: bir araç çalıştığında, tüm çıktı modelin bağlamına itilir. Modelin hepsini okuması gerekir. Metin geldiğinde filtreleme zaten başarısız olduğu için "Sadece üçüncü alanı istiyorum" diyemez.
MCP, prensipte filtreleme ve sayfalandırmayı destekler. Pratikte birinin bunu her araca inşa etmesi gerekir ve vibe coding sayesinde oldukça sık olabilen bu özellik eksik olduğunda, model ham yükü yutar ve tokenlar ve dikkat ile bunun bedelini öder.
SSH ile ajan, bir aracın kendisine verdiği görünümü kabul etmek yerine kendi görünümünü oluşturur.
1$ ssh ssh.oberik.com 'documents --json' | jq -r '.data[].name'2$ ssh ssh.oberik.com 'audit --limit 20 --json' | jq -r '.data[] | "\(.at) \(.command)"'
Filtre, makinede bir boru hattında çalışır. Anında, ücretsiz, ajanın istediği kadar dar. Model on sayfa yerine tek bir satır okur.
Bunu işe yaratan iki şey var. İlk olarak, her yanıt {"ok":…, "command":…, "message":…, "data":…} gibi tek satırlık bir format kullanır. Bu, jq'yi çıktıyı okumanın amaçlanan yolu yapar, bir geçici çözüm değil.
JSON modu ayrıca etkileşimin akışınızı kesmesini engeller. Bir komut gerekli bir alanı kaçırıyorsa, bir form açmak yerine neyin eksik olduğunu söyler. Bir komut yıkıcı olabilirse, onay istemek için durmak yerine --yes ile yeniden çalıştırmanızı söyler.
Birkaç komut içeren bir satır için başına format json; koyun. Bu, formatı bir kere ayarlar, böylece bayrağı tekrarlamanız gerekmez.
Bilmeniz gereken bir detay var. Bayrak tırnak işaretlerinin içinde olmalıdır. ssh ssh.oberik.com --json 'documents' çalışmaz çünkü ssh, hedeften sonraki seçenekleri kendine ait olarak kabul eder. Bayrağı yok sayar ve istemci kendi kullanım çıktısıyla yanıt verir. Bu çıktı ne Oberik'ten ne de bayraktan bahsettiği için, sunucuyu bozuk gösterebilir.
Burada söylemeye çalıştığımız şey, bu modelleri bilgisayarı kullanmaları için eğittik, bilgisayarı kullanmalarına izin verin.

Neden Bir API Değil?
Uzun lafın kısası, kimlik bilgisi sorunu.
Yanlış anlaşılmasın, Oberik'te bir API'miz var ve iyi. Ürününüzün üretimde çağırdığı şey bu ve SSH ağ geçidinin perde arkasında çağırdığı şey de bu.
Ama arayandan ne istediğine bakarsanız:
- bir token al
- onu sakla
- onu yenile
- onu günlüklerden ve modelin bağlamından uzak tut.
Bu adımların her biri ajanın sorumluluğu haline gelir ve bir ajanın bağlamı bir sır için güvenli bir yer değildir. Bir modelin kendi ortam değişkenlerini yankıladığını izleyen herkes bunu bilir. Yani dikkat ederseniz, en sevdiğiniz kodlama ajanınızın, hassas bir anahtarı fark ettiğinde varsayılan olarak görmezden geldiğini fark edersiniz. Ancak, bir ajana yapıştırılan bir anahtar sadece kabuk geçmişinde durmaz; aynı zamanda bir model sağlayıcısına, günlüklere, koşum takımının tuttuğu her türlü transkripte gider.
API orada, ancak ajanların kendilerini kurmaları için tasarladığımız ana yol bu değil. SSH üzerinden, ajan, işletim sisteminizin zaten korumak için inşa edildiği tek kimlik bilgisi türünü, bir SSH anahtarını tutar ve özel yarısı asla iletilmez. Oberik'e kimlik doğrulaması yapmak, modelin bağlamına gizli hiçbir şey koymaz, çünkü oraya koyacak bir şey yoktur.
Neden Bir CLI Değil?
Uzun lafın kısası, bayatlık sorunu.
Bir CLI kurmak, her entegratörün koşum takımından istenecek bir taahhüttür ve ilk adımlarımızı attığımız için bu kadar cesur olmak istemedik. Dürüst olmak gerekirse, bir CLI hiç istemedik çünkü bu temelde ürünün donmuş bir kopyasıdır. Oberik'in kontrol düzlemi, daha fazla geri bildirim aldıkça bir özellik kazanacaktır, bu da bir CLI ile gitseydik, sürekli yeni bir sürüm yayınlamamız ve kullanıcıdan güncellemesini istememiz gerekeceği anlamına geliyordu.
Bunu temelde çözdük çünkü SSH yüzeyimiz yazılmaz, üretilir. Kontrol düzlemimizdeki her rota, açıklamasıyla birlikte kaydedilir ve bu açıklama SSH komutudur. Panoya eklenen bir rota, SSH üzerinden anında görünür, bu nedenle bir ağ geçidi değişikliği konusunda endişelenmemize gerek kalmaz.
Güncellenecek bir şey yok, çünkü hiçbir şey kurulu değil.
Neden Bir Beceri Değil?
Uzun lafın kısası, talimatlar sorunu.
Herhangi bir ajana yönelik bir ürünle birlikte gönderilmek üzere trend olan yaklaşım becerilerdir. Ajanınızın kurduğu, ürünü nasıl çağıracağını anlatan yazılı bir prosedür. Beceriler gerçekten kullanışlıdır, ancak temelde süslü bir README dosyasıdır. Bir beceri dokümantasyondur, bir yetenek değildir. Ajanınıza hareket etmesi için bir yol vermez; herhangi bir şey yapmak için hala MCP veya bir API'ye ihtiyaç duyar ve siz de bu sorunu devralırsınız.
Bunun da ötesinde, bir beceri, hareketli bir ürünün nasıl kullanılacağına dair donmuş bir kopyadır. Bir CLI ile aynı bayatlık. Ajan henüz hiçbir şey yapmadan önce bağlamında oturur ve yüzeyin sorulduğunda yazdırabileceği talimatlara dikkat ve token harcar.
"Ajan Oberik'in ne yapabileceğini nasıl bilir" sorusuna cevabımız, kurduğu bir dosya değildir. Bu, ajan için keşfetmeye yönelik bir çağrıdır:
1$ ssh ssh.oberik.com 'discover' # her komut, parametreleri ve türleri2$ ssh ssh.oberik.com 'docs' # her sayfa, kapsadığı konularla3$ ssh ssh.oberik.com 'docs search capability' # bir şeyden bahseden satırlar
Yüzey, bağlantı anında, canlı üründen kendini tanımlar. Ve dokümanlar, doküman sitesiyle aynı metindir, bu nedenle hiçbir şey başka bir şeyin özeti değildir. Talimatlar asla bayatlayamaz, çünkü onlar ürünün ta kendisidir.
Neden SSH?
Uzun lafın kısası, beş sorunu da aynı anda çözer.
- Anahtarlar, ajanların gerçekten tutabileceği kimlik bilgileridir. SSH anahtar kimlik doğrulaması onlarca yıllıktır, milyarlarca kez savaşta kanıtlanmıştır ve protokol, bir parmak izine bakmadan önce imzayı doğrular. Burada tekerleği yeniden icat etme ihtiyacı hissetmedik. Sadece modelden bir sırrı bebek gibi korumasını istemeyi bıraktık ve makinenin her zaman inşa edildiği tek işi yapmasına izin verdik.
- Bir şifre paylaşmadan döngüde kalırsınız. Ajanın henüz bir anahtarı olmadığında, örneğin Oberik'e ilk bağlantısı sırasında, bir cihaz giriş akışı başlatır. Ajan, hemen bir URL ve bir kodla dönen ve ikisini de size gösteren login link komutunu çalıştırır. URL'yi kendi tarayıcınızda açarsınız. Sayfa, eklenecek tam anahtar parmak izini tanımlar, size onaylama veya reddetme seçenekleri sunar ve ajan tarafından yazdırılan kodla karşılaştırabileceğiniz bir kod gösterir. Bu arada ajan, login wait komutunu çalıştırır ve kararınızı bekler. Bunlar tasarım gereği ayrı komutlardır. Eğer bir komut hem bağlantıyı oluşturup hem beklerse, ajan size bağlantıyı ancak istek süresi dolduktan sonra gösterirdi. Onayladığınızda, anahtar kaydedilir ve sonraki tüm bağlantılar otomatik olarak oturum açar. Başka bir bağlantıya ihtiyacınız olmayacak. Süreç bir tane kullanmadığı için ajanın sohbet geçmişine asla hiçbir sır yazılmaz.
- Çıktı, boru hatları için tasarlanmıştır. Bir komutta --json ile JSON isteyin veya bir satırın başında bir kere format json; kullanın ve her yanıt tek satırlık bir zarf olarak geri gelir. Bu, jq '.data[0].name' komutunu çıktıyı okumanın amaçlanan yolu yapar, bir geçici çözüm değil. Filtre makinede çalışır, bu nedenle model yalnızca filtrelemeden sonra kalanı görür. Hatalar aynı zarfı kullanır ve temel HTTP durumunu içerir. Bu, bir yeniden denemenin bir 429'u bir 400'den ayırt etmesini sağlar. Boru hatları her iki yönde de çalışır. Ağ geçidi diskinizi okuyamaz, bu nedenle dosya kabul eden komutlar, dosya adını bir argüman olarak alır ve dosyanın içeriğini bağlantıdan okur. Örneğin, ssh ssh.oberik.com 'document upload handbook.pdf' < handbook.pdf dosyayı yükler.
- Sıfır kurulum. Kaydedilecek, saklanacak, bağlamda tutulacak hiçbir şey yok. Ajanınızın yapılandırmasında MCP sunucusu yok, env değişkeninde token yok, PATH'te CLI yok, beceri dosyası yok. Bir geliştirici ürünü inşa ediyoruz, bu yüzden zaten orada olan ve her ajanın nasıl kullanılacağını bildiği aracı kullandık: SSH.
- Kendini tanımlayan ve tasarım gereği dikkatli. discover, tam komut kataloğunu yazdırır. Her komutu, parametrelerini ve türlerini ve herhangi bir onay gereksinimini içerir. Katalog, üründen canlı olarak oluşturulur. Ayrıca istemciye hangi alanların bir dize yerine dosya baytları beklediğini söyler, böylece yüklemeler yanlış tahmin edilemez. İzin vermediği şey, bir satırı numarasına göre hedeflemektir. Yıkıcı komutlar bir ad gerektirir ve sunucu bu adı bağlantı tarafından seçilen projeye göre kontrol eder. Support Bot seçiliyken Staging istenirse, sunucu bir 400 döndürür ve çalışma alanına dokunulmaz.
Öğretecek bir şey yok, çünkü yüzey kendini öğretiyor.
Oberik giriş akışı şöyle görünür:

Oberik Giriş Akışı
Ürününüze açılan bir SSH kapısı bir risk değil mi?
Bu adil bir soru, ancak gerçek neredeyse tam tersi.
Ağ geçidinin kendine ait bir durumu veya ayrıcalığı yoktur. Her komut, tıpkı React uygulamasında olduğu gibi bir HTTP kontrol düzlemi oturumu aracılığıyla çalışır. Bu nedenle bir SSH istemcisi, aynı hesabın bir tarayıcıda yapabileceğinden daha fazlasını yapamaz. Oturumu kapatırsanız, anahtarı iptal ederseniz veya hesabı silerseniz, iptal edilecek başka bir şey olmadığı için değişiklik anında geçerli olur.
Bu terminal, herkesin anonim olarak bağlanabilmesi için genel internete açıktır. Her komut, bağlantı kimliği, IP adresi, anahtar ve sonuç dahil olmak üzere günlüğe kaydedilir. Kimlik bilgileri asla saklanmaz. login ile girilen bir şifre veya --values aracılığıyla iletilen bir sağlayıcı anahtarı, kayıt yazılmadan önce <redacted> ile değiştirilir. Sistem ayrıca, kimlik bilgisini kurtarılamaz hale getirirken tekrarlanan komutların ilişkilendirilebilmesi için orijinal komutun bir karmasını saklar. Kayıtlar, hangisi önce gelirse, 30 gün veya 100.000 komut boyunca saklanır.
Tekrarlanan başarısız girişler, bir kilitlenmeyi tetiklemek yerine yavaşlar. Hangi şifreyi kullandığını unutan biri, çok fazla sürtünme olmadan denemeye devam edebilirken, yanlış şifreyi kullanan otomatik bir yeniden deneme döngüsü giderek daha az kullanışlı hale gelir. Amaçlanan takas budur.
ÖZET
Herkes ajanınıza bir API, bir MCP sunucusu veya bir beceri dosyası verir. Biz ona bir terminal verdik. Görünüşe göre istediği de buydu.





