SSD Nodes Learn 🎉 VPS $5.50/aydan başlayan
Rehberler Matt ConnorYazan Matt Connor · Güncellendi 2026-08-21

HarnessRouter kendi sunucunuzda nasıl kurulur?

Codex, Claude Code ve Hermes agent sistemlerini tek bir API altında birleştirin. Docker kurulumu, loopback bind ayarları, varsayılan giriş bilgileri ve TLS yapılandırması.

HarnessRouter neyi ortadan kaldırır

HarnessRouter Community Edition'ı, sahip olduğunuz bir sunucudaki birden fazla agent harness'ın önüne tek bir API koymak için kendi sunucunuzda barındırırsınız. Agent harness, bir modeli döngü içinde ç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şi talep eden yere ilerleme durumunu aktarır. Codex, Claude Code ve Hermes'in her biri bu işi yapar ve her biri kendi kurulumu, kendi kimlik bilgisi formatı ve kendi oturum anlayışı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. Birkaç hareketli parçayı tek bir yapıya dönüştürmek için sunucunuza bir container, bir giriş yöntemi, bir volume ve bir yükseltme yolu ekliyorsunuz. Eğer bugün tam olarak tek bir harness çalıştırıyorsanız, bu kurulum, o harness'ı doğrudan kurmaktan daha verimsizdir. Bu takas konusu buradaki son bölümdür, bu yüzden dağıtım yapmadan önce mutlaka okuyun.

Aşağıdaki her şey, 19 Ağustos 2026 tarihinde çekilen 0.5.5 imaj etiketi ile kontrol edilmiştir. Proje neredeyse her gün yeni etiketler yayınlamaktadır, bu nedenle bu sayfaya bir ay sonra güvenmek yerine gerçekten ç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ümlenmektedir. 19 Ağustos 2026 itibarıyla güncel olan sürüm 2026-08-11 tarihlidir ve site bunu "üzerine inşa edilecek kadar kararlı, güvenli bir şekilde değişebilmesi için sürümlenmiş" bir taslak standart olarak tanımlar.

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ılmasına 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 agent CLI araçları ve bu araçların veri yazdığı çalışma alanları tarafından kullanılır. İmaj içerisinde herhangi bir model veya deneme anahtarı bulunmaz; bu nedenle bir sağlayıcıya bağlanana kadar görevler başarısız olur. HarnessRouter, Apache-2.0 lisansına sahiptir. Agent CLI araçları bu lisans kapsamında değildir; bu yüzden imaj içerisinde sunulmak yerine ilk başlatma sırasında indirilirler.

Tek bir docker run komutuyla HarnessRouter self-host kurulumu

docker pull harnessrouter/harnessrouter
docker run -d --name harnessrouter \
  -p 127.0.0.1:3000:3000 \
  -v harnessrouter:/data \
  harnessrouter/harnessrouter

Ardından container'ın ayağa kalkışını izleyin. İlk başlatma yavaştır; günlük kayıtları size bunun nedenini söyler.

docker logs -f harnessrouter

İşlem sırasında ş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; dolayısıyla sonraki tüm başlatmalar birkaç saniye sürer ve herhangi bir kurulum satırı yazdırmaz.

Bu indirme işleminden, bir VPS üzerinde önem taşıyan iki sonuç çıkar. Birincisi, ilk başlatma sırasında dış ağ erişimi gereklidir. İmaj kendi kendine yeten bir yapıda değildir; bu nedenle çıkış filtresi (egress filter) arkasındaki veya dışarıya rotası olmayan bir sunucu burada takılır ve asla ready on :3000 çıktısını vermez. İşlem docker pull aşamasında değil, ilk başlatmada başarısız olur; bu da hatanın kaynağını bulmayı zorlaştırır. İkincisi, üçüncü taraf yazılımları üçüncü taraf şartları altında yüklüyorsunuz. Claude Code, Anthropic'in şartlarına, Hermes ise kendi upstream sağlayıcısının şartlarına tabidir; bu nedenle ticari kullanımdan önce her ikisini de kontrol edin.

-v harnessrouter:/data, isimlendirilmiş bir Docker volume 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. Yedeklemeyi container durdurulmuş haldeyken yapın; çünkü SQLite veritabanını yazılma işlemi devam ederken kopyalamak, açılmayabilecek bir dosya oluşturmanıza neden olur. 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 kendine özgü 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 harnessrouter

Compose varyantı ve değiştirmeniz gereken satır

Depo bir compose dosyası ile birlikte gelir. Bu dosya "3000:3000" portunu yayınlar; bu da ana makinedeki tüm arayüzlerin erişime açık olduğu anlamına gelir. Dosyayı halka açık bir sunucuda ayağa kaldı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:

İki nokta upstream sürümünden farklıdı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 agent çalışma zamanında hata ayıklamak zordur. Ardından environment 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ı kapsar.

Portun 0.0.0.0 yerine neden 127.0.0.1 üzerinde yayınlandığı

-p 3000:3000, portu sunucunun 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 erişimin tek yolunun VPS'in kendisi olduğu anlamına gelir. Container içeride her zaman 3000 portunu dinler, bu yüzden değiştireceğiniz kısım sol taraftır. Mevcut durumu kontrol edin:

docker port harnessrouter
sudo ss -ltnp | grep 3000

ss çıktısının 127.0.0.1:3000 olması doğrudur. 0.0.0.0:3000, konsolun genel internete açık olduğu anlamına gelir. Bu durum, çoğu self-hosted uygulama için olduğundan daha tehlikelidir; çünkü konsol, harness'lar oluşturur, tüm transkriptleri okur, ajanları çalıştırır ve bu ajanlara çalışma alanlarında bir kabuk 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ı harcayabilir.

Bir sunucu güvenlik duvarı sizi bundan korumaz. Docker, portları kendi kurallarını çekirdek nat tablosuna yazarak yayınlar ve bu kurallar ufw zincirinin yönettiği kurallardan önce değerlendirilir; bu nedenle yayınlanan bir port, sudo ufw status üzerinde engellenmiş olarak görünse 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 başsız çalıştırma ile aynı derstir: servisi loopback'e bağlayın, ardından ona nasıl erişeceğinize bilinçli olarak karar verin.

Başka bir işlem yapmadan önce varsayılan giriş bilgilerini değiştirin

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ı bir kurulum yapıyorsanız 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/harnessrouter

Hesap 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ı silin ve 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 harnessrouter

HR_AUTH_DISABLED=1 seçeneği giriş ekranını tamamen devre dışı bırakır. README dosyası bu seçeneği "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ırmıyorsanız giriş ekranını açık bırakın.

Sürümünüzü kontrol edin, eski sürümlerde yetkilendirme kapısı bulunmaz

Bu kısım ciddiye alınmalıdır. 0.1.x ve 0.2.0 sürümleri hiçbir kimlik doğrulama kapısı 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. Hangi sürüme sahip olduğunuzu kontrol edin ve ardından Docker Hub üzerindeki etiket listesiyle karşılaştırın:

docker image ls harnessrouter/harnessrouter

0.3.0 sürümünün altındaki her şey planlanmadan, derhal değiştirilmelidir. Bu sürüm ve üzerindeki sürümlerde dahi şifre değiştirilmelidir; çünkü 3000 numaralı portu tarayan biri için varsayılan şifre ile şifrenin olmaması aynı anlama gelir. 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 yeni sürümler yayınlamaktadır.

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şkeni olarak docker run içine geçirin. Değer JSON formatındadır, bu nedenle kabuk üzerinde 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 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. Sorun yaşamadan önce bilmeniz gereken bilinen bir durum şudur: hermes değerini dışarıda bırakan herhangi bir yapılandırma, container'ın 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 faydalı 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'inizde çalıştırmak daha küçük bir dağıtım yöntemidir.

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ğunu 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 yönlendirmenizi sağlar.

Bir portu dışarı açmadan dizüstü bilgisayarınızdan erişim

Bunun iki yolu vardır ve ikisi de 0.0.0.0 üzerinde ham bir port açılmasını gerektirmez.

SSH tüneli en düşük maliyetli yöntemdir ve sunucuda herhangi bir kurulum gerektirmez. Makinenizdeki yerel bir portu, VPS üzerindeki loopback adresine yönlendirir.

ssh -N -L 3000:127.0.0.1:3000 you@your-vps

Bu 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 var demektir; 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 (transport layer security) sertifikasını tutar ve trafiği loopback adresine 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 genellikle gözden kaçırdığı satırdır. Agent, stream token'larını dakikalarca üretir; 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 içeriğin bir anda 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. Nginx, Caddy ve Traefik'in reverse proxy olarak karşılaştırılması konusu, sunucunuz için hangisinin uygun olduğunu açıklar.

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 makinede 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 hiçbir ev dizininde tutmayın.

sudo adduser --disabled-password --gecos "" harness
sudo install -d -o harness -g harness -m 750 /srv/harnessrouter

Daha güçlü sürüm, daemon'ın bizzat yetkisiz kullanıcı olarak çalıştığı rootless Docker'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 alt UID değerine ihtiyaç duyar.

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 docker

loginctl enable-linger burada isteğe bağlı değildir. Bu 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 kurulumu VPS üzerinde en düşük yetkili kullanıcı oluşturma bölümünde ele alınmıştır.

Neler bozulur ve ne görürsünüz

Konteyner başladıktan bir saniye sonra kapanıyor ve günlükler boş. docker ps -a, Exited (1) değerini gösterir. Bu, yukarıda bahsedilen HR_BACKENDS sorunudur: değeriniz hermes kısmını eksik bırakmış. Onu geri ekleyin.

İlk başlatma asla tamamlanmıyor. Günlük kaydı bir installing satırından sonra duruyor ve ready on :3000 asla görünmüyor. Kutu, agent CLI'larını çekmek için ağa ulaşamıyor çünkü bunlar imajın içinde değil. 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 örnek sizi oturum açtırmasına rağmen 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 veya Nginx içinde proxy_buffering off; ayarını yapın.

Dizüstü bilgisayarınızdan erişemiyorsunuz ancak tünel aktif. Sunucu üzerinde docker port harnessrouter komutunu çalıştırın. Eğer hiçbir çıktı vermiyorsa, konteyner hiçbir şey 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 birinden üç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 bir yeniden yazım yerine bir yapılandırma değeri olmasını istiyorsanız da çalıştırmaya değer. 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. İlgili CLI aracını sunucuya 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ı (agent) istiyorsanız bu yanlış bir yapıdır; 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 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. -p 127.0.0.1:3000:3000 ile loopback üzerinde yayınlayın ve bir SSH tüneli veya TLS-terminating reverse proxy aracılığıyla erişin. Bir host güvenlik duvarı tek başına yeterli değildir: Docker, kendi kurallarını nat tablosuna yazar, bu nedenle yayınlanan bir port, ufw üzerinde reddedildiğini görseniz bile internetten gelen isteklere yanıt verir. 127.0.0.1:3000 çıktısını vermesi gereken sudo ss -ltnp | grep 3000 ile doğrulama yapın.

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ında olup ç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, bir veya iki saniye içinde docker ps -a içinde Exited (1) görülmesi ve docker logs içinde yararlı hiçbir şeyin yer almamasıdır. Upstream düzeltme yapana 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ı, her biri kendi lisansını taşıdığı için imaj içinde gönderilmek yerine ilk başlatmada indirilir. Dışa doğru rotası olmayan bir makine installing satırlarını yazdırır ve ardından asla ready on :3000 aşamasına ulaşamaz. İndirme işlemi her bir 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ına ihtiyaç duymaz.

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çinden /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 adının 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.