HarnessRouter Self-Host Kurulumu ve API Yapılandırması
Codex, Claude Code ve Hermes agent yazılımlarını tek bir API üzerinden yönetin. Docker deploy adımları, loopback bind ayarları, varsayılan giriş bilgileri ve TLS erişimi detayları.
HarnessRouter neyi ortadan kaldırır
HarnessRouter Community Edition yazılımını, kendi sunucunuzdaki birden fazla agent harness'ın önüne tek bir API koymak için self-host edersiniz. Agent harness, bir modeli döngü içerisinde çalıştıran komut satırı programıdır; bir oturumu sürdürür, dosyaları düzenler, komutlar çalıştırır ve işin ilerleyişini talep eden tarafa aktarır. Codex, Claude Code ve Hermes'in her biri bu işi yapar; ancak her biri kendi kurulumu, kendi kimlik bilgisi formatı ve kendi oturum tanımıyla gelir. HarnessRouter bunların hepsini tek bir container içinde çalıştırır ve önüne tek bir HTTP uç noktası, tek bir giriş yöntemi ve tek bir gizli veri deposu koyar.
Tüm fikir bundan ibarettir ve maliyetini açıkça belirtmek gerekir. Sunucunuza bir container, bir giriş yöntemi, bir volume ve bir yükseltme yolu ekleyerek, hareketli parçaların tek bir yapıya dönüşmesini sağlarsınız. Eğer bugün sadece tek bir harness çalıştırıyorsanız, bu kurulum, ilgili harness'ı doğrudan kurmaktan daha verimsizdir. Bu takasın detayları son bölümde yer almaktadır, bu yüzden deploy etmeden önce mutlaka okuyun.
Aşağıdaki her şey, 19 Ağustos 2026 tarihinde çekilen 0.5.5 image etiketi ile kontrol edilmiştir. Proje neredeyse her gün yeni etiketler yayınlamaktadır, bu nedenle bir ay sonra bu sayfaya güvenmek yerine fiilen çalıştırdığınız etiketi kontrol edin. Komutlar, github.com/HarnessRouter/harnessrouter adresindeki proje README dosyasından alınmıştır.
Unified Harness Protocol nedir
HarnessRouter, unifiedharnessprotocol.org adresinde yayımlanan Unified Harness Protocol (UHP) standardını uygular. UHP; bir ürünün bir harness üzerinde görevi nasıl başlattığını, görev çalışırken süreci nasıl takip ettiğini, oturum ve dosyaları nasıl yönettiğini ve hataları nasıl raporladığını tanımlar. Spesifikasyon tarih bazlı sürümlenir. 19 Ağustos 2026 itibarıyla geçerli olan sürüm 2026-08-11 tarihlidir ve site bunu taslak standart olarak tanımlar: "üzerine inşa edilebilecek kadar kararlı, güvenli bir şekilde değişebilmesi için sürümlenmiş".
Buradaki "açık standart" ifadesini dikkatli okuyun. Spesifikasyonu, referans uygulamasını ve kimin uyumlu olduğuna karar veren 52 kontrollü uygunluk paketini aynı şirket yazmaktadır. Bu kadar yeni bir protokol için bu durum olağandır ve Apache-2.0 lisansı, herhangi bir parçayı çatallayabileceğiniz (fork) anlamına gelir. Bu aynı zamanda UHP'nin henüz çok satıcılı bir standart olmadığı anlamına da gelir. Bunu gelişmekte olan bir protokol olarak değerlendirin: kullanışlı, hareketli ve kendi kodunuzun yeniden yazılmaya gerek kalmadan kullanmayı bırakabileceği bir yapı olarak görün.
Başlamadan önce gerekenler
Docker ve yaklaşık 4 GB boş disk alanı. Ayrıca halihazırda ödeme yaptığınız bir model sağlayıcısından alınmış bir API anahtarına ihtiyacınız vardır. İmaj boyutu yaklaşık 700 MB'tır; disk alanının geri kalanı ise ajan CLI araçları ve bu araçların veri yazdığı çalışma alanları için kullanılır. İmaj içerisinde paketlenmiş bir model veya deneme anahtarı bulunmaz; bu nedenle bir sağlayıcıya bağlanana kadar görevler başarısız olur. HarnessRouter yazılımı Apache-2.0 lisansına sahiptir. Ajan CLI araçları bu lisans kapsamında değildir; bu nedenle imaj içerisinde sunulmak yerine ilk başlatma sırasında indirilirler.
Tek bir docker run komutu ile HarnessRouter kurulumu
docker pull harnessrouter/harnessrouter
docker run -d --name harnessrouter \
-p 127.0.0.1:3000:3000 \
-v harnessrouter:/data \
harnessrouter/harnessrouterArdından container'ın ayağa kalkmasını izleyin. İlk başlatma yavaştır ve günlük kayıtları size nedenini açıklar.
docker logs -f harnessrouterİşlem devam ederken şuna benzer satırlar göreceksiniz:
installing Claude Code (Anthropic's terms apply)…
installing Codex (Apache-2.0)…
installing Hermes (check its upstream license before use)…ready on :3000 ifadesini bekleyin. Bu kurulum her volume için bir kez gerçekleşir, bu nedenle sonraki tüm başlatmalar birkaç saniye sürer ve herhangi bir kurulum satırı yazdırmaz.
Bu indirme işleminden iki sonuç çıkar ve her ikisi de bir VPS üzerinde önemlidir. İlk olarak, ilk açılışta dış ağ erişimi gerekir. İmaj kendi kendine yeten bir yapıda değildir; bu nedenle çıkış filtresi olan veya dışarıya rotası bulunmayan bir sunucu burada takılır ve asla ready on :3000 çıktısını vermez. İlk başlatmada başarısız olur, docker pull aşamasında değil; bu da sorunun kaynağını bulmayı kafa karıştırıcı hale getirir. İkinci olarak, üçüncü taraf yazılımları üçüncü taraf şartları altında kuruyorsunuz. Claude Code, Anthropic'in şartlarına tabidir; Hermes ise kendi upstream kaynağının belirttiği şartlara tabidir, bu nedenle ticari kullanımdan önce her ikisini de kontrol edin.
-v harnessrouter:/data, isimlendirilmiş bir Docker volume'u oluşturur. Kalıcı olan her şey /data içinde yaşar: SQLite veritabanları, depolanan dosyalar, gizli anahtar deposu ve agent çalışma alanları. Bu volume'u silerseniz, sağlayıcı anahtarları ve tüm transkriptler dahil olmak üzere instance'ı silmiş olursunuz. Container durdurulmuş haldeyken yedekleyin; çünkü bir SQLite veritabanını yazılma işlemi devam ederken kopyalamak, açılamayacak bir dosya ile sonuçlanabilir. Aynı durdur-ve-kopyala disiplini sunucudaki tüm durum bilgisi tutan (stateful) container'lar için geçerlidir; ancak PhotoPrism ve Immich gibi servislerin her biri kendi yedekleme komutlarına ihtiyaç duyduğundan detaylar servise göre değişir.
docker stop harnessrouter
docker run --rm -v harnessrouter:/data -v "$PWD":/backup alpine \
tar czf /backup/harnessrouter-data.tgz -C / data
docker start harnessrouterCompose varyantı ve değiştirmeniz gereken satır
Depo bir compose dosyası ile birlikte gelir. Bu dosya "3000:3000" portunu dışarıya açar; bu da ana makinedeki tüm arayüzlerin erişilebilir olduğu anlamına gelir. Dosyayı halka açık bir sunucuda çalıştırmadan önce bu satırı değiştirin.
services:
harnessrouter:
image: harnessrouter/harnessrouter:0.5.5
ports:
- "127.0.0.1:3000:3000"
env_file:
- .env
volumes:
- harnessrouter-data:/data
restart: unless-stopped
volumes:
harnessrouter-data:Yukarı akıştan (upstream) iki farklılık vardır: bind adresi ve latest yerine sabitlenmiş bir sürüm etiketi. Sürüm sabitleme önemlidir çünkü 9 ile 18 Ağustos 2026 tarihleri arasında on altı sürüm etiketi yayınlanmıştır; sürekli değişen bir aracı çalışma zamanının (agent runtime) hata ayıklaması zordur. Ardından ortam dosyasını kopyalayın, izinlerini kilitleyin ve başlatın.
cp .env.example .env
chmod 600 .env
docker compose up -d
docker compose logs -f.env sağlayıcı anahtarınızı düz metin olarak tutar, bu nedenle 600 modu minimum gerekliliktir. Eğer docker compose alt komutuna aşina değilseniz, Docker Compose komut kopya kağıdı günlük kullanılan komutları kapsamaktadır.
Port neden 0.0.0.0 yerine 127.0.0.1 üzerinde yayınlanıyor
-p 3000:3000, portu ana makinenin sahip olduğu tüm arayüzlerde yayınlar. -p 127.0.0.1:3000:3000 ise yalnızca loopback üzerinde yayınlar; bu da içeriye girmenin tek yolunun doğrudan VPS'in kendisi olduğu anlamına gelir. Container içeride her zaman 3000 portunu dinler, bu nedenle değiştirmeniz gereken kısım sol taraftır. Mevcut durumu kontrol edin:
docker port harnessrouter
sudo ss -ltnp | grep 3000ss çıktısının 127.0.0.1:3000 olması doğrudur. 0.0.0.0:3000, konsolun herkese açık internete açık olduğu anlamına gelir. Bu durum, çoğu self-hosted uygulama için olduğundan daha risklidir; çünkü konsol, harness'lar oluşturur, tüm transkriptleri okur, ajanları çalıştırır ve bu ajanlara çalışma alanlarında bir kabuk (shell) ile gerçek bir dosya sistemi sağlar. Ayrıca bağladığınız sağlayıcı anahtarını da tutar. Korumasız bir konsola ulaşan herkes çalışmalarınızı okuyabilir, komutlar çalıştırabilir ve anahtarınızı kullanabilir.
Bir ana makine güvenlik duvarı (firewall) sizi bu durumdan kurtarmaz. Docker, portları kendi kurallarını çekirdek nat tablosuna yazarak yayınlar ve bu kurallar, ufw tarafından yönetilen zincirden önce değerlendirilir; bu nedenle yayınlanan bir port, sudo ufw status tarafından reddedildi olarak listelense bile erişilebilir kalır. Testi VPS üzerinden değil, başka bir makineden yapın; aksi takdirde hiçbir şeyi test etmemiş olursunuz. Bu, dsh'ı 3080 portunda headless çalıştırma ile aynı derstir: servisi loopback'e bağlayın, ardından ona nasıl erişeceğinize bilinçli bir şekilde karar verin.
Varsayılan giriş bilgilerini değiştirmek
http://localhost:3000 adresine harnessrouter kullanıcı adı ve harnessrouter parolası ile giriş yapın. Bu kimlik bilgileri yer tutucu oldukları ve gizli veri içermedikleri için README dosyasında belirtilmiştir; siz onları değiştirene kadar container her başlatıldığında sizi uyaracaktır:
using the DEFAULT password. Set HR_AUTH_PASSWORD, or change it from the profile page, before exposing this instance.Parolayı Profil sayfasından değiştirin veya betik tabanlı kurulumlar için başlatma sırasında ayarlayın. HR_AUTH_USER ve HR_AUTH_PASSWORD değişkenleri varsayılan değerleri geçersiz kılar.
docker run -d --name harnessrouter \
-p 127.0.0.1:3000:3000 \
-v harnessrouter:/data \
-e HR_AUTH_USER='you' \
-e HR_AUTH_PASSWORD='the-password-you-chose' \
harnessrouter/harnessrouterHesap sistemi ve posta sunucusu bulunmadığı için parola sıfırlama e-postası gönderilemez. Parolayı kaybederseniz, volume içindeki kimlik doğrulama dosyasını silip servisi yeniden başlatın, ardından varsayılan bilgilerle tekrar giriş yapın.
docker stop harnessrouter
docker run --rm -v harnessrouter:/data alpine rm -f /data/selfhost-auth.json
docker start harnessrouterHR_AUTH_DISABLED=1 değişkeni giriş ekranını tamamen devre dışı bırakır. README dosyası bunu "başkalarının erişemeyeceği bir kutu" ile sınırlandırır. Genel IP adresine sahip bir VPS bu tanıma uymadığı için, bu uygulamayı bir dizüstü bilgisayarda çalıştırmadığınız sürece giriş ekranını açık bırakın.
Sürümünüzü kontrol edin, çünkü eski sürümlerde geçiş kontrolü bulunmuyor
Bu kısım ciddiye alınmalıdır. 0.1.x ve 0.2.0 sürümleri, hiçbir kimlik doğrulama geçişi olmadan piyasaya sürülmüştür: 3000 numaralı porta erişebilen herkes doğrudan konsolun içindeydi. 0.3.0, giriş özelliği içeren ilk sürümdür. Bu eski etiketler hala yayınlanmakta ve çekilebilmektedir; bu nedenle sabitlenmiş eski bir etiket veya bir iş arkadaşından kopyalanan bir compose dosyası, bugün halka açık bir portta korumasız bir konsolun çalışmasına neden olabilir.
19 Ağustos 2026 itibarıyla yayınlanan en yeni etiket 18 Ağustos 2026 tarihli 0.5.5 sürümüdür ve latest bu sürümü işaret etmektedir. Mevcut sürümünüzü kontrol edin ve ardından Docker Hub üzerindeki etiket listesiyle karşılaştırın:
docker image ls harnessrouter/harnessrouter0.3.0 altındaki tüm sürümler hemen değiştirilmelidir, bu işlem ertelenmemelidir. Bu sürüm veya üzerindeki sürümlerde ise parola mutlaka değiştirilmelidir; çünkü 3000 numaralı portu tarayan biri için varsayılan bir parola ile parolasız bir sistem arasında fark yoktur. Bu sayfadaki sürüm numaralarını güncel olarak kabul etmeyin. Bu numaralar en üstte belirtilen tarihte doğruydu ve bu proje hızlı bir şekilde güncellenmektedir.
Bir sağlayıcı bağlayın
Bir model sağlayıcısı bağlanana kadar hiçbir şey çalışmaz. Konsoldaki Integrations sayfasından bir sağlayıcı ekleyin veya ortam değişkenlerinde docker run parametresine iletin. Değer JSON formatındadır, bu nedenle kabukta tırnak içine alın:
-e HR_SECRET_GLOBAL_HARNESS_CONN_ANTHROPIC='{"name":"anthropic","provider":"anthropic","api_key":"sk-ant-…"}'.env.example, sağlayıcı ailesi başına bir bağlantı değişkeni tanımlar: claude-code arka ucu için HR_SECRET_GLOBAL_HARNESS_CONN_ANTHROPIC, codex arka ucu için HR_SECRET_GLOBAL_HARNESS_CONN_OPENAI ve bir toplayıcının veya kendi çıkarım sunucunuzun bulunduğu, OpenAI uyumlu tüm uç noktalar için HR_SECRET_GLOBAL_HARNESS_CONN_CUSTOM kullanılır. Eşleşen HR_SECRET_GLOBAL_HARNESS_POLICY_CLAUDE, HR_SECRET_GLOBAL_HARNESS_POLICY_CODEX ve HR_SECRET_GLOBAL_HARNESS_POLICY_HERMES değişkenleri, her arka ucun varsayılan olarak hangi bağlantıyı kullanacağını belirtir. HR_SECRET_KEY ayrı bir konudur ve yalnızca bir veritabanını bir aracıya bağladığınızda gereklidir.
HR_BACKENDS, HR_BACKENDS=claude,codex,hermes örneğinde olduğu gibi hangi arka uçların yükleneceğini seçer. Sizi etkilemeden önce bilmeniz gereken bir sorun vardır: hermes değerini dışarıda bırakan herhangi bir yapılandırma, container'ın hiçbir hata mesajı vermeden 1 durumuyla hemen kapanmasına neden olur. Başlattıktan bir saniye sonra docker ps -a içinde Exited (1) görürsünüz ve docker logs yararlı hiçbir şey göstermez. Yukarı akış (upstream) düzeltilene kadar hermes öğesini listede tutun. Eğer istediğiniz tek donanım Hermes ise, Hermes aracısını kendi VPS'inde çalıştırmak daha küçük bir dağıtımdır.
API'yi konsol olmadan çağırma
Konsol kullanımı isteğe bağlıdır. Aynı API her iki yöntem için de hizmet verir ve Responses tarzı bir sözleşme ile çalışır. Oturum çerezi almak için önce giriş yapın:
curl -c hr.cookies http://localhost:3000/api/selfhost/login \
-H 'content-type: application/json' \
-d '{"username":"harnessrouter","password":"your-password"}'Ardından, metadata.harness_id içinde harness'ı ve bağlı sağlayıcınızın gerçekten sunduğu bir modeli belirterek bir görev gönderin:
curl -s -b hr.cookies http://localhost:3000/api/harness/v1/responses \
-H 'content-type: application/json' \
-d '{"input":"Reply with exactly this and nothing else: it works.",
"metadata":{"harness_id":"codex"},
"model":"gpt-5.4-mini",
"stream":false}'Çıktı bloğu ve token sayısını içeren bir JSON nesnesi, harness'ın çalıştığı anlamına gelir. harness_id değerini codex yerine claude olarak değiştirmek, aynı isteği farklı bir harness'a gönderir; bu yazılımın varlık sebebi tamamen bu değişim imkanıdır. Yukarıdaki özel bağlantı yöntemi, bir harness'ı halihazırda barındırdığınız OpenAI uyumlu bir uç noktaya, bir VPS üzerinde kendi kendine barındırılan DeepSeek harness'ı örneğinde olduğu gibi bağlamanızı sağlar.
Port yayınlamadan dizüstü bilgisayarınızdan erişim
Bunun iki yolu vardır ve ikisi de 0.0.0.0 üzerinde ham bir port açmayı gerektirmez.
SSH tüneli en düşük maliyetli yöntemdir ve sunucuda herhangi bir kurulum gerektirmez. Kendi makinenizdeki yerel bir portu, VPS üzerindeki loopback arayüzüne yönlendirir.
ssh -N -L 3000:127.0.0.1:3000 you@your-vpsBu komutu çalışır durumda bırakın ve tarayıcınızda http://localhost:3000 adresini açın. Eğer SSH bind: Address already in use hatası verirse, dizüstü bilgisayarınızda 3000 numaralı portu kullanan başka bir uygulama vardır; bu durumda -L 3100:127.0.0.1:3000 ile farklı bir yerel port seçin ve 3100 numaralı porta gidin.
Sonlandırıcı bir reverse proxy, diğer insanların erişimine ihtiyaç duyduğunuzda kullanılması gereken çözümdür. Proxy, TLS (taşıma katmanı güvenliği) sertifikasını tutar ve trafiği loopback arayüzüne iletir. README dosyasında bir Caddy yapılandırması yer almaktadır:
console.example.com {
encode zstd gzip
reverse_proxy 127.0.0.1:3000 {
flush_interval -1 # agent turns stream for minutes; never buffer them
}
}flush_interval -1, kullanıcıların gözden kaçırdığı satırdır. Agent, stream token'larını dakikalarca döndürür; yanıtı tamponlayan bir proxy ise bu token'ları işlem bitene kadar tutar. Bu durum konsolun donmuş gibi görünmesine ve ardından tüm verinin tek seferde ekrana basılmasına neden olur. Nginx'teki karşılığı, location bloğu içindeki proxy_buffering off; ifadesidir. Hangi yöntemi seçerseniz seçin, DNS adını proxy'ye yönlendirin ve container'ı loopback üzerinde tutun. Reverse proxy olarak Nginx, Caddy ve Traefik karşılaştırması başlıklı bölüm, sunucunuz için hangisinin uygun olduğunu açıklar.
Uygulamayı root yerine kendi kullanıcısı ile çalıştırın
Docker daemon root yetkileriyle çalışır ve docker grubuna üyelik, root yetkisine eşdeğerdir; çünkü bir üye, ana makinenin dosya sistemini bağlayan bir container başlatabilir. Bu nedenle "ekibi docker grubuna eklemek", sağlayıcı anahtarınızı barındıran sunucuda root erişimi vermek anlamına gelir.
Basit sürüm: Compose dosyasının ve .env dosyasının sahibi olan bir servis hesabı oluşturun ve bu dosyaları paylaşılan herhangi bir ev dizininin dışında tutun.
sudo adduser --disabled-password --gecos "" harness
sudo install -d -o harness -g harness -m 750 /srv/harnessrouterDaha güçlü sürüm, daemon'ın bizzat yetkisiz kullanıcı olarak çalıştığı rootless Docker yapısıdır. Bu yapı, newuidmap ve newgidmap için uidmap paketine ve kullanıcı için /etc/subuid ile /etc/subgid dosyalarında en az 65536 adet alt UID değerine ihtiyaç duyar. uidmap, Ubuntu arşivinde bulunur ancak docker-ce-rootless-extras bulunmaz; bu paket, Docker motoru kurulumunun eklediği download.docker.com adresindeki Docker apt deposundan sağlanır. Eğer motoru bu depodan kurmadıysanız, grep -rl download.docker.com /etc/apt/sources.list.d/ hiçbir çıktı vermez ve aşağıdaki kurulum paketi bulamaz.
sudo apt install -y uidmap docker-ce-rootless-extras
sudo loginctl enable-linger harness
sudo -iu harness
dockerd-rootless-setuptool.sh install
export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock
systemctl --user enable --now dockerloginctl enable-linger burada isteğe bağlı değildir. Bu ayar olmadan, kullanıcının systemd örneği son oturum kapandığında durur; dolayısıyla siz çıkış yaptığınızda container da kapanır. Sonucu, Security Options altında rootless değerini listeleyen docker info komutu ile doğrulayın. Rootless mod, ek yapılandırma olmaksızın 1024 altındaki portlara bağlanamaz; ancak 3000 numaralı port bu sınırın üzerinde olduğu için bu durum burada bir sorun teşkil etmez. Hesabın oluşturulması, VPS üzerinde en düşük yetkili kullanıcı oluşturma rehberinde ele alınmıştır.
Neler bozulur ve ne görürsünüz
Container başladıktan bir saniye sonra kapanıyor ve loglar boş. docker ps -a, Exited (1) değerini gösteriyor. Bu, yukarıda bahsedilen HR_BACKENDS sorunudur: değeriniz hermes ifadesini dışarıda bırakmış. Bunu geri ekleyin.
İlk başlatma asla tamamlanmıyor. Log bir installing satırından sonra duruyor ve ready on :3000 asla görünmüyor. Sunucu, agent CLI'larını çekmek için ağa erişemiyor çünkü bunlar imajın içinde yer almıyor. Dışa giden rotayı veya proxy ayarlarını düzeltin, ardından yeniden başlatın.
Konsol yükleniyor ancak her görev başarısız oluyor. Hiçbir sağlayıcı bağlı değil. İmajın içinde paketlenmiş bir model veya ücretsiz katman bulunmuyor; bu nedenle yeni bir instance sizi giriş yaptırsa bile hiçbir şey çalıştıramaz.
Konsol, bir proxy arkasında yanıt sırasında donuyor. Çıktı, sıra bittiğinde tek bir blok halinde görünüyor. Bu, yanıt tamponlamasıdır (response buffering). Caddy içinde flush_interval -1 ayarını veya Nginx içinde proxy_buffering off; ayarını yapılandırın.
Tünel aktif olmasına rağmen dizüstü bilgisayarınızdan erişemiyorsunuz. Sunucu üzerinde docker port harnessrouter komutunu çalıştırın. Eğer hiçbir çıktı vermiyorsa, container hiçbir port yayınlamıyor demektir; yani -p olmadan başlatılmıştır.
Bunu çalıştırmaya değer mi?
Eğer gerçekten birden fazla harness kullanıyorsanız ve her biri için ayrı ayrı üçer tane yerine tek bir uç nokta ve tek bir kimlik bilgisi deposu istiyorsanız, bunu çalıştırmaya değer. Ayrıca, üzerine bir ürün inşa ediyorsanız ve harness'ın kodun yeniden yazılması yerine bir yapılandırma değeri olmasını istiyorsanız da çalıştırmaya değerdir. Protokolün ne kadar yeni olduğuyla ilgili yukarıdaki uyarı saklı kalmak kaydıyla, UHP size bunu sağlar.
Eğer tek bir harness kullanıyorsanız, bunu çalıştırmaya değmez. Sunucuya ilgili CLI aracını kurmak daha az hareketli parça anlamına gelir ve sizinle araç arasında herhangi bir oturum açma katmanı bulunmaz. Ayrıca, birkaç harness'ın önünde tek bir API yerine tek bir görev üzerinde iş birliği yapan birkaç aracı istiyorsanız bu yapı yanlış bir tercihtir; bu model için Omnigent gibi çoklu aracı (multi-agent) bir harness yapısına bakınız. Her iki durumda da dağıtım kuralları değişmez. Loopback bind, değiştirilmiş parola, 0.3.0 veya üzeri bir sabitlenmiş etiket (pinned tag) ve kendine ait bir kullanıcı hesabı kullanılmalıdır.
FAQ
HarnessRouter'ı 3000 numaralı portta yayınlamak güvenli midir?
Hayır. Konsol; harness'lar oluşturur, tüm transkriptleri okur, shell ve dosya sistemi erişimine sahip ajanları çalıştırır ve bağladığınız sağlayıcı anahtarını tutar; bu nedenle açık bir port tüm bunları ifşa eder. Uygulamayı -p 127.0.0.1:3000:3000 ile loopback üzerinde yayınlayın ve bir SSH tüneli veya TLS sonlandırması yapan bir reverse proxy üzerinden erişin. Bir host güvenlik duvarı tek başına yeterli değildir: Docker, kendi kurallarını çekirdek nat tablosuna yazar, bu nedenle ufw üzerinde engellenmiş görünse bile yayınlanan bir port internetten gelen isteklere yanıt verir. sudo ss -ltnp | grep 3000 ile doğrulama yapın; bu komut 127.0.0.1:3000 çıktısını vermelidir.
Giriş kapısı (login gate) hangi HarnessRouter sürümüyle eklendi?
0.3.0. 0.1.x ve 0.2.0 sürümleri hiçbir kimlik doğrulama olmadan yayınlanmıştır ve her iki etiket de hala yayındadır ve çekilebilir durumdadır; bu nedenle bu sürümleri çalıştıran herkes, portun kimse tarafından bulunmamasına güvenmektedir. 19 Ağustos 2026 itibarıyla en yeni etiket, 18 Ağustos 2026 tarihli 0.5.5 sürümüdür. Hangi sürüme sahip olduğunuzu görmek için docker image ls harnessrouter/harnessrouter komutunu çalıştırın, bunu bu sayfadan ziyade Docker Hub üzerindeki etiket listesiyle karşılaştırın ve güncel bir sürümde olsanız dahi varsayılan parolayı değiştirin.
HR_BACKENDS ayarını yaptıktan sonra container neden hemen kapanıyor?
hermes değerini içermeyen herhangi bir HR_BACKENDS değeri, container'ın hata mesajı vermeden 1 durum koduyla hemen kapanmasına neden olur; bu, projenin README dosyasında bilinen bir sorundur. Belirti, docker ps -a içerisinde bir veya iki saniye içinde Exited (1) görülmesi ve docker logs içerisinde yararlı hiçbir bilginin yer almamasıdır. Upstream tarafında düzeltilene kadar, HR_BACKENDS=claude,codex,hermes örneğinde olduğu gibi hermes değerini listede tutun.
HarnessRouter ilk başlatmada internet erişimine ihtiyaç duyar mı?
Evet. Ajan CLI'ları imajın içinde gelmek yerine ilk başlatmada indirilir, çünkü her biri kendi lisansını taşır. Dışa doğru yönlendirmesi olmayan bir sunucu installing satırlarını yazdırır ve ardından asla ready on :3000 aşamasına ulaşamaz. İndirme işlemi her volume için bir kez gerçekleşir, bu nedenle sonraki başlatmalar birkaç saniye sürer ve bağladığınız model sağlayıcısı dışında bir ağ bağlantısı gerektirmez.
Konsol parolasını kaybettim. Nasıl tekrar giriş yapabilirim?
Hesap sistemi ve posta sunucusu bulunmadığından parola sıfırlama e-postası özelliği yoktur. Container'ı durdurun, volume içerisinden /data/selfhost-auth.json dosyasını silin, container'ı tekrar başlatın, ardından varsayılan kimlik bilgileriyle giriş yapın ve Profil sayfasından yeni bir parola belirleyin. Container ve volume isimlerinin her ikisinin de harnessrouter olduğu varsayıldığında; önce docker stop harnessrouter, ardından docker run --rm -v harnessrouter:/data alpine rm -f /data/selfhost-auth.json ve son olarak docker start harnessrouter komutlarını uygulayın.