needhelp
← Back to blog

DeepSeek Harness: Tam Olarak Her Şeyin Eklenti Olduğu Açık Kaynak Bir Ajan Frameworkü

by needhelp
DeepSeek
AI Agents
Open Source
Cordis
Plugin Architecture

GitHub’da Açıklanan Tam Bir Ajan Yığını

DeepSeek, 13 Ağustos 2026’da DeepSeek Harness (dsh) geliştirici önizlemesini yayınladı. Depo deepseek-ai/deepseek-harness adresinde bulunuyor. Gün sonunda 1.6k yıldız, 12.293 taahhüt ve 19 katılımcı rakamlarına ulaştı — bu sayılar bunun bir hafta sonu projesi olmadığını söylüyor. Kod tabanı %97.1 TypeScript, %1.6 CSS ve %0.7 Python’dan oluşuyor. Yayınlandığı andaki paket sürümü: 0.1.0-rc.5.

Tanıtım sayfası deepseek.com/harness adresinde, geliştirici belgeleri ise deepseek-harness.github.io/deepseek-harness adresinde yer alıyor.

Lisansı MIT.

Tek Satırlık Tanıtım

README’den: “Ajan = Model + Harness.”

Model ruhtur. Bir harness, ajanın çevresini anlamasını, araçları kullanmasını ve gerçek dünya ortamlarında çalışmaya devam etmesini sağlar. DeepSeek’ın yaklaşımı: modeller, araçlar, beceriler, oturumlar, sanal alanlar, depolama, döngüler, zamanlama ve UI dahil her yetenek değiştirilebilir bir eklentidir.

Bu bir slogan değil. Mimari tarafından zorunlu kılınan bir kural.

Cordis: Her Şeyin Altındaki Çekirdek

DeepSeek Harness, vendored bir eklenti framework’ü olan Cordis üzerine inşa edilmiştir. Cordis’ın tasarımı A Programming Paradigm for Spatiotemporal Composability başlıklı bir makalede açıklanmıştır.

Tüm framework beş fikre indirgenir:

  1. Bir eklenti, Service’i uygulayan bir nesnedir. inject ve apply(ctx) içeren bir fonksiyon veya Service alt sınıfı olabilir.
  2. Bir bağlam, hizmetlerin bir deposudur. Bir eklenti ctx.tools, ctx.llm veya ctx.sessions gibi kararlı bir anahtar talep eder. Diğer eklentiler, somut uygulamaları içe aktarmak yerine anahtara göre hizmetleri bulur.
  3. inject ile hizmet bağımlılığını bildirin. Gerekli hizmetleri adlandıran bir eklenti, bu hizmetler var olana kadar bekler. Manuel önyükleme sıralaması yok.
  4. İletişim için Türlendirilmiş Olaylar. Dört dağıtım modu: emit (ateşle ve unut), waterfall (next() ile middleware tarzı), parallel (tüm dinleyiciler eş zamanlı çalışır) ve serial (dinleyiciler dönüş değerleriyle sırayla çalışır).
  5. Kayıtlar tersine çevrilebilir efektlerdir. İstem bölümleri, araç şemaları, adaptörler, dinleyiciler — her şey ctx.effect() aracılığıyla kurulur, böylece yeniden yükleme ve kapatma bunları öngörülebilir şekilde geri alır.

Cordis waterfall modeli bir around middleware’dir. Bir dinleyici (...args, next) alır. Bir sonraki hizmete devretmek için next() çağırın; kısa devre yapmak için next() olmadan dönün. Tek kararlı olaylar için kısa devre tasarımdır — bir politika dinleyicisi bir kararı tamamen sahiplenebilir.

Her Şey Bir Eklenti (Cidden)

deepseek.com/harness adresindeki eklenti listesi tam yetenek yüzeyini net olarak ortaya koyuyor:

  • Models — LLM arka uçları (DeepSeek, OpenAI, Anthropic, Bedrock, Vertex, Azure, Codex, artı herhangi bir OpenAI uyumlu uç nokta)
  • Tools — modelin çağırabildiği şeyler
  • Skills — yeniden kullanılabilir istem ve araç paketleri
  • Sessions — konuşma durumu yönetimi
  • Sandboxes — kodun çalıştığı yer (PTY bash, danger-full-access yerel arka uç, landlock tabanlı yerel sanal alan)
  • Storage — oturum kalıcılığı
  • Loops — ajan dönüş mantığı
  • Scheduling — alt ajan ve görev dağıtımı
  • UI — varsayılan olarak 3080 numaralı bağlantı noktasında sunulan Web UI

Bir geliştirici yapılandırma yoluyla bunlardan herhangi birini seçebilir, değiştirebilir veya genişletebilir — DeepSeek Harness’ın kendisinde kaynak kodu değişikliği yapmadan. Eklenti Yapılandırma Kataloğu kaynaktan (scripts/gen-config-catalog.ts) otomatik olarak üretilir ve CI tarafından taze olarak doğrulanır, böylece bir cordis.yml config: bloğundaki her alan bir eklentinin bildirilen yapılandırma türüyle tam olarak eşleşir.

Dört Çalışma Zamanı Modu

Belgeler dört ön ayar sunar. Her biri farklı bir kullanım durumunu hedefler.

Standard Mode — Tam kodlama ajanı: dosya düzenleme, kabuk, dosya ve web arama, beceriler, planlama, hedefler, alt ajanlar ve iş akışları. Bu varsayılan Web UI deneyimidir.

Code Mode — Standard’daki her şey, ancak araçlar Code Mode SDK aracılığıyla sunulur, böylece model çok adımlı işlemleri tek bir TypeScript programında birleştirebilir. Model tarafından üretilen bir program, birkaç tur araç çağrısının yerini alır.

Minimal Mode — Sadece iki araç: kalıcı bir bash kabuğu ve str_replace_editor. Bu, modelleri sadeleştirilmiş bir ortamda kıyaslamak içindir. Beceri yok, planlama yok, alt ajan yok — gerçek bir kod tabanına karşı saf model yeteneği.

Creator Mode — Özel ajan ön ayarları yazmak için oluşturuldu. Tüm Standard modu yeteneklerine artı çalışma zamanı denetimi, bellek içi Cordis eklenti deneyleri ve ön ayar yazma kılavuzu dahil. Beşinci, altıncı, yedinci modu bu şekilde oluşturursunuz.

Her Çalıştırma İzlenebilir

Harness’in çoğu ajan aracından farklılaştığı yer burasıdır. Modelin gördüğü her şey salt ekleme oturum günlüğüne kaydedilir:

  • Sistem istemleri
  • Akıl yürütme çıktısı
  • Araç çağrıları ve sonuçları
  • Alt ajan zamanlama kararları
  • Her bağlam enjeksiyonu

Web UI, kaynağa göre filtrelenmiş bu kayıtları denetleyebileceğiniz bir Trajectory görünümüne sahiptir. Sürdürme, çatal oluşturma, arama ve yeniden yürütme — dört işlem de aynı olay akışına karşı çalışır. Ayrı bir izleme veritabanı yok, dışa aktarma adımı yok. Oturum JSONL’si asıl kaynaktır.

Python SDK’sı için oturum dizini, birleştirilmiş model isteklerini ve araç çağrılarını içeren sıkıştırılmamış JSONL depolar. examples/jsonrpc-agent/minimal.py içindeki örnek bunu uçtan uca gösterir.

Model Yapılandırması: DeepSeek + Her Şey

Model yapılandırma sayfası (Modelleri yapılandır) üç katmana sahiptir.

DeepSeek Resmi. Ayarlar → Modeller’i aç, DeepSeek API anahtarını yapıştır, kaydet. Anahtar sadece yazılabilir. Kaydettikten sonra UI, düz metin yerine düzenlenmiş bir tanımlayıcı alır. Anahtarlar \$DSH_HOME/.credentials.yaml içinde bulunur; ayarlar sayfası sadece bir kimlik bilgisi başvurusu tutar.

Katalog sağlayıcıları. “Sağlayıcı ekle”yi tıkla, Anthropic veya OpenAI’yi seç, anahtarı yapıştır. Yerel kimlik doğrulama kullanan sağlayıcılar (AWS kimlik bilgileri + bölge üzerinden Bedrock, ADC projesi üzerinden Vertex, api-version üzerinden Azure, OAuth üzerinden Codex) sadece bir API anahtar alanıyla çalışmaz — her birinin kendi kimlik doğrulama yolu gerekir.

Özel sağlayıcılar. Bir şirket ağ geçidi, kendi kendine barındırılan sunucu veya katalogda olmayan herhangi bir sağlayıcı için. Küçük harfli bir Sağlayıcı Kimliği (kalıcı — istekler, kaydedilen oturumlar, model varsayılanları ve kimlik bilgisi başvuruları bunu kullanır), temel URL, API protokolü, kimlik bilgileri ve en az bir model ayarlayın.

Görsel modellerin bir adımı daha olur. Özel bir uç noktanın desteklediği modaliteleri duyurmasının bir yolu olmadığından, form görme desteğini otomatik olarak algılayamaz. \$DSH_HOME/settings.yaml içindeki modele input: [text, image] ekleyin. Tüm özel modelleriniz görüntüleri kabul ediyorsa, model başına yerine sağlayıcı düzeyinde bir kez defaultInput: [text, image] ayarlayın. input alanı bir doğrulama değil, bir iddiadır — eğer bir modelin görme yaptığını iddia edersiniz ama uç nokta aslında yapmıyorsa, Harness yerine sağlayıcı isteği reddeder.

Sorun giderme belgelerde doğrudan yazılmıştır:

  • MISSING_CREDENTIAL → sağlayıcı anahtarını Modeller sayfası aracılığıyla saklayın veya başvurulan ortam değişkenini export edin
  • UNKNOWN_MODEL → yapılandırılmış bir model seçin veya eksik modeli özel sağlayıcıya ekleyin
  • “Kullanılabilir modelleri al 401 döndürüyor” → anahtarı kontrol edin. Model keşfi OpenAI uyumlu GET /models uç noktasını çağırır. Hizmetiniz bunu sunmuyorsa modelleri elle girin.
  • “Görüntü gönderilmeden önce reddedildi” → model image modalitesini bildirmedi. input: [text, image] ekleyin.
  • “Sağlayıcı görüntülü bir isteği reddediyor” → model, uç noktasının gerçekte sahip olmadığı bir görme yeteneğini iddia etti. Listeden image’yı kaldırın ve yeni bir oturum başlatın (eski görüntü oturum günlüğünde kalır ve aynı isteği tekrar etmeye devam eder).

Başlarken: Üç Yol

Yol 1: npx @deepseek-ai/dsh web

Node.js’yi kurun, tek bir komut çalıştırın. Web UI http://127.0.0.1:3080’da başlar. İşte bu kadar. Klon yok, derleme yok, pnpm yok.

Terminal window
npx @deepseek-ai/dsh web

Sonra: Ayarlar → Modeller → DeepSeek API anahtarını yapıştırın. Çalışma alanı seçin (dsh’in çağrıldığı dizin çalışır). Bir oturum başlatın:

Bu depoyu özetle ve ana paketlerini belirle.

Ajan çalışma alanı dosyalarını okur ve düzenler, komutları çalıştırır, işleri devreder ve bir planı korur. Etkin izin politikası kapsamında onay gerektiren her işlem, yürütmeden önce Web UI’da bir diyalog açar.

Yol 2: Kaynaktan Klonla ve Derle

Terminal window
git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web

Yol 3: Python SDK

Gereksinimler: Python 3.10+, Linux x64 / Linux arm64 / macOS 14+ arm64, DeepSeek uyumlu bir uç nokta.

Terminal window
git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
python -m venv .venv
. .venv/bin/activate
python -m pip install deepseek-harness-sdk

Kimlik bilgilerini ayarlayın:

8000/v1
export DEEPSEEK_API_KEY=sk-your-key-here
# İsteğe bağlı:
# export DSH_MODEL=deepseek-v4-flash
# export DSH_SYSTEM_PROMPT='You are a helpful software engineer assistant.'

Yalıtılmış bir çalışma alanına karşı bir görev çalıştırın:

Terminal window
python examples/jsonrpc-agent/minimal.py \
--workspace /absolute/path/to/workspace \
--session-root /absolute/path/to/sessions \
--session-id example-001 \
"Inspect the repository and fix the failing tests."

Kendi kodunuz için SDK giriş noktası, bir bağlam yöneticisi olarak DeepSeekHarness’dır:

from pathlib import Path
from deepseek_harness import DeepSeekHarness
config = Path("examples/jsonrpc-agent/minimal.cordis.yml").resolve()
workspace = Path("/absolute/path/to/workspace").resolve()
sessions = Path("/absolute/path/to/sessions").resolve()
with DeepSeekHarness(
provider="deepseek-official",
model="deepseek-v4-flash",
max_tokens=49_152,
cwd=str(workspace),
session_root=str(sessions),
cordis=str(config),
) as harness:
result = harness.run(
"Inspect the repository and fix the failing tests.",
session_id="example-001",
)
print(result.final_response)

DeepSeekHarness, paketli çalışma zamanını tembelce başlatır ve with bloğundan çıkana kadar yeniden kullanır. Bash sürecini (çalışma dizini, env değişkenleri, kabuk fonksiyonları) korumak için aynı oturum kimliğini yeniden kullanın. Bağımsız bir görev için yeni bir oturum kimliği kullanın.

jsonrpc-agent minimal bileşimi kasıtlı olarak seyrektir: modelin karşılaştığı araçlar olarak sadece kalıcı bash ve str_replace_editor. Bash zaman aşımı 300 saniye. Editör çıktı sınırı 16.000 karakter. Bağlam sıkıştırması devre dışı. Dosya sistemi çıplak yerel arka ucu kullanır — editör yolları, çalışma zamanı sürecinin görebildiği her şeyi adresleyebilir. Belgeler açıkça uyarır: “Sadece tek kullanımlık bir çekirdeğin veya konteynerin içinde çalıştırın.” Kalıcı PTY arka ucu ayrıca bir POSIX terminal tabanı gerektirir — bu bileşim için Windows desteği yok.

İlk Eklentinizi Yazın

Öğretici: İlk eklentiniz. Bir eklenti, apply fonksiyonunu dışa aktaran bir TypeScript modülüdür:

import type { Context } from '@deepseek-ai/cordis'
export const name = 'hello-plugin'
export function apply(ctx: Context) {
console.log('[hello-plugin] plugin loaded!')
}

Bir cordis.yml yamasında kaydedin:

- insert:
- id: hello
name: '/absolute/path/to/deepseek-harness/scratch-plugin/src/my-plugin.ts'

Kaplama ile önyükleyin:

Terminal window
pnpm dsh web --patch ./scratch-plugin/cordis.yml

Otomatik temizleme öldürücü özelliktir. ctx aracılığıyla kaydedilen her şey — olay dinleyicileri, araçlar, zamanlayıcılar — eklenti kaldırıldığında temizlenir. Manuel removeListener veya clearInterval yok. Açık temizleme (ağ bağlantıları) için ctx.effect()’den bir atıcı döndürün.

Bağımlılıklar inject ile bildirilir:

export const name = 'my-tool-plugin'
export const inject = ['tools']
export function apply(ctx: Context) {
// ctx.tools is ready here
}

Cordis, eklentiyi yüklemeden önce her gerekli hizmetin hazır olmasını bekler.

Üç eklenti formu mevcuttur: fonksiyon (yukarıda), apply içeren nesne ve Service’yi genişleten sınıf. Eklentinin kendisi diğer eklentilerin tüketeceği bir hizmet sağladığında sınıf formunu kullanın.

İlk Aracınızı Yazın

Öğretici: Bir araç oluştur. @deepseek-ai/dsh-tools paketinden defineTool kullanın:

import type { Context } from '@deepseek-ai/cordis'
import { defineTool } from '@deepseek-ai/dsh-tools'
export const name = 'greet-tool'
export const inject = ['tools']
export function apply(ctx: Context) {
ctx.tools.register(defineTool({
name: 'greet',
description: 'Greet someone by name.',
parameters: {
name: {
type: 'string',
required: true,
description: 'The name to greet',
},
},
output: {
schema: { type: 'string' },
render: (_args, value) => [{ type: 'text', text: value }],
},
async execute(args) {
return `Hello, ${args.name}!`
},
}))
}

defineTool, parameters’dan args’ı çıkarır ve doğrular. execute, output.schema tarafından bildirilen kanonik değeri döndürür. output.render, o kanonik değeri modelin karşılaşacağı içeriğe dönüştürür. Yamayı uygula ve yeniden başlattıktan sonra Web UI’ye sorun: “Ada’yı selamlamak için greet aracını kullan.” Model greet’i çağırır ve Hello, Ada! yanıtını alır.

Öğreticideki sonraki adımlar eklenti yapılandırması, araç yazma başvurusu (iç içe şemalar, kanonik değerler, arka plan çalışması, politika kancaları, Code Mode, UI kartları) ve yetenek katmanlaştırması (Hizmet Tanımı → Hizmet Sağlayıcı → Tüketici paketi bölme)dır.

CLI Giriş Modları

@deepseek-ai/dsh komutu ürün başlatıcıdır. Dört giriş noktası:

Komut Amaç
dsh --profile <name> \$DSH_HOME/profiles/<name> altındaki adlandırılmış profili önyükle
dsh --profile headless "job" Bir taze kalıcı oturum çalıştır, nihai yanıtı yazdır, çık
dsh web --profile web’in takma adı
dsh plugin --profile <name> <pnpm args> pnpm’e ileterek bir profilin eklentilerini yönet

Çağrılan dizin varsayılan çalışma alanı köküdür. web ve headless profilleri ilk kullanımda sevk edilen şablonlardan otomatik olarak başlatılır. Diğer herhangi bir profil dsh plugin aracılığıyla oluşturulmalıdır.

Başlatıcı bayrakları önce gelir. Başlatıcının tanımadığı ilk belirteç uygulamanın bağımsız değişkenleri olur. Örnek: dsh --profile web --port 8080, --port 8080’i başlatıcıya değil web uygulamasına teslim eder.

Bir profil dizini bir package.json (ağaç dışı eklenti bağımlılıkları, artı sıralı bundles listesine sahip profil bildirimi dsh.profile) ve bir cordis.patch.yml (kullanıcının kendi yama katmanı) içerir. Boş bir kök üzerindeki bileşim sırası: dsh.profile.bundles sırasındaki her paketin yaması → profilin cordis.patch.yml’si → ev düzeyi \$DSH_HOME/cordis.patch.yml--patch kaplamaları. Oluşturulan ağacı önyüklemeden denetlemek için --dump-default-config ve --dump-config kullanın.

Topluluk Eklentileri ve Ekosistem

Bulunabilirliği artırmak için eklenti deponuzu GitHub’da dsh-plugin etiketiyle etiketleyin. Resmi site doğrudan o konu sayfasına bağlanır. Tartışmalar için bir DeepSeek Harness Discord topluluğu da vardır.

Proje geri bildirim ve hata raporları için GitHub Tartışmalarını kullanır. Belgeler, geliştirme iş akışı için CONTRIBUTING.md’ye, sistem tasarımı için architecture.md’ye ve ajanlara özgü kodlama kuralları için AGENTS.md’ye bağlantı verir.

Geliştirici Önizlemesi — Evet, Bozulacak

README bunu TÜM BÜYÜK HARFLERLE yazar: “UYUMLULUĞU BOZAN DEĞİŞİKLİKLER OLACAKTIR.”

Çekirdek eklentiler ve API’ler hala gelişiyor. Tanıtım sayfası bunu doğrudan söylüyor: “DeepSeek Harness geliştirici önizlemesinde kalır ve hala ajanlar için harness oluşturan geliştiriciler tarafından test ediliyor.”

Bunun üzerine inşa ediyorsanız, bir taahhüt karmasını sabitleyin, eklentilerinizi yapılandırma kataloğuna göre ince tutun ve her rc yükseltmesinde yeniden test etmeyi bekleyin. Eklenti otomatik temizleme ve bağımlılık enjeksiyonu, yeniden test etmeyi tek parçalı framework’lerden daha az acı verici kılar, ancak “geliştirici önizlemesi” dediği şey demektir.

Bunu Farklı Kılan Nedir

Bugün çoğu ajan framework’ü bir dönüş döngüsüyle başlar ve genişletilebilirliği sonradan düşünülmüş olarak ekler. Harness bunu tersine çevirir: genişletilebilirlik kendisi framework’tür ve dönüş döngüsü sadece başka bir eklentidir. Gözlemlenebilir sonuç, tek bir pakette genellikle elde edemeyeceğiniz üç şeydir:

  • Çatalsız her şeyi değiştir. Yerleşik araç sistemini sevmiyor musunuz? Değiştirin. Farklı bir LLM yönlendirme katmanı mı istiyorsunuz? Sağlayıcıyı değiştirin. Her şey Cordis hizmet anahtarları aracılığıyla çözülür.
  • Varsayılan olarak izlenebilirlik. Salt ekleme günlüğü bir gözlemlenebilirlik eklentisi değildir. Oturumların çalışma şekli budur. Sürdürme, çatal, arama ve yeniden yürütme aynı akışı kullanır.
  • Özellik bayrakları değil, birleştirilebilir ön ayarlar. Dört mod (Standard / Code / Minimal / Creator) sadece sıralı eklenti-bir demeti yama katmanlarıdır. Kendi ön ayarlarınızı kod yerine YAML ile üstüne katmanlayabilirsiniz.

Bu yaklaşımın tek parçalı SDK’lara karşı kazanıp kazanmayacağı, eklenti ekosisteminin değiştirme/yeniden birleştirme hikayesini gerçekleştirmek için yeterince üçüncü taraf araç ve sağlayıcı üretip üretmeyeceğine bağlı. İlk günde 1.6k yıldız ve 12k taahhütle, ivme açıkça orada.

Kaynaklar

Share this page