Sorun: Ajan senin kullanıcınla çalışıyor
Bir kodlama ajanını kendi bilgisayarında çalıştırdığında, ajan senin yetkilerinle çalışıyor. Projen dışındaki klasörleri, ~/.ssh anahtarlarını, tarayıcı çerezlerini, başka projelerin .env dosyalarını okuyabiliyor. Kurduğu bir npm paketinin içinden zararlı bir script çıkarsa o da aynı yetkiye sahip oluyor. Bir de istem enjeksiyonu var: Ajanın okuduğu bir dosya ona gizlice başka bir iş yaptırabilir.
Çözümlerden biri ajanı ayrı bir makinede çalıştırmak (konteyner ile sanal makine farkını kodu izole etmenin yolları yazısında anlattık). Syntax’ın yeni videosunda CJ, bunu her proje için kolaylaştırmak üzere yazdığı devvm’i gösteriyor.
Nasıl çalışıyor?
Bir proje klasörüne girip devvm yazıyorsun. Araç o klasöre özel bir Linux sanal makinesi açıyor ya da varsa eskisine bağlanıyor. Makine yalnızca proje klasörünü görüyor, hem de bilgisayarındaki yoluyla aynı yerde. Ev dizininin geri kalanı içeride yok.
Arkada Lima çalışıyor: macOS’te Apple’ın Virtualization çatısı, Linux’ta QEMU ile sanal makine açan açık kaynak bir araç. İlk seferde bir temel imaj (varsayılan Ubuntu) bir kez derleniyor. Sonraki makineler bu imajın kopyası, birkaç saniyede açılıyor. devvm package.json ya da pyproject.toml gibi dosyalara bakıp Node, Python, Go, Rust gibi araçları seçiyor. Her sürüm bir kez kuruluyor ve makineler arasında salt okunur paylaşılıyor.
Gündelik işler için birkaç kolaylık var:
- Port yönlendirme otomatik. İçeride
:5173’te açılan geliştirme sunucusu, bilgisayarındalocalhost:5173’te görünüyor. - Katmanlar. Docker, Nix ya da masaüstü gibi ek kurulumlar katman olarak ekleniyor. Kendi kurulum script’ini de katman yapabiliyorsun.
- devcontainer.json desteği. Projende zaten bir dev container tanımı varsa devvm makineyi onun imajı, portları ve komutlarıyla kuruyor.
--from node:24gibi bir konteyner imajından da başlayabiliyorsun. - Ajanlar ve editör. Claude Code, Codex ve opencode içeride çalışıyor.
devvm codemakineyi VS Code’da Remote-SSH ile açıyor.
Güvenlik tarafı
Asıl fark ağda. Yeni bir makine varsayılan olarak izin listesi (allowlist) modunda açılıyor: Sadece izin verdiğin adreslere, senin bilgisayarındaki bir vekil sunucu (proxy) üzerinden çıkabiliyor. Daha sıkı bir “hiç ağ yok” modu, daha gevşek “internet” ve “açık” modları da var. Videoda engellenen istekleri ağ kaydında (devvm network log) görmek de gösteriliyor.
GitHub token’ın, Claude Code’un oturumu, MCP şifreleri gibi sırlar makineye hiç girmiyor. Vekil sunucu bunları yolda isteğe ekliyor. Bu fikri daha önce NVIDIA OpenShell yazımızda da görmüştük.
--clone seçeneği bir adım daha ileri gidiyor: Makine senin klasörün yerine reponun kendi kopyasıyla çalışıyor. Çalışma ağacına ve .git’ine dokunamıyor. Ajanın yaptıklarını sen git fetch ile çekip inceledikten sonra birleştiriyorsun.
Sınırları
devvm’in belgeleri “hiçbir kum havuzu her açığı kapatmaz” diye açıkça yazıyor ve iki önemli noktanın altını çiziyor:
- Proje klasöründeki her şey içeriden görünüyor,
.envdosyan dahil. Makinenin yazdığı bir dosyayı sonra kendi bilgisayarında çalıştırırsan, o kod senin yetkinle çalışır. - Ajan şifreyi görmese de şifrenin izin verdiği her şeyi yapabilir. Bu yüzden belgeler dar yetkili (fine-grained) bir GitHub token’ı ve makineye sadece gereken sırları bağlamayı öneriyor.
Araç MIT lisanslı, macOS 13+ ve Linux’ta çalışıyor. Belgelere göre Intel Mac’lerde henüz test edilmemiş.
Düşün
- Bugün bilgisayarında çalışan bir ajan,
~/.sshklasörünü okumak istese onu ne durdurur? - “İzin listesi” mi, “her yer açık ama kayıt tut” mu? Gündelik işte hangisine katlanırdın?
Videoyu izle
Kaynaklar (6, İngilizce)
Kendi cümlelerimizle yazılmış bir özettir, çeviri değildir. Tüm kaynaklar yukarıda.