v0.3.0 · Python · JS/TS · Java

Sırlarını ajanlara değil, kasaya ver.

SealBox, projendeki parolaları, API anahtarlarını ve kişisel verileri bulur, dosyalardan çıkarıp şifreli bir kasaya kilitler. Claude Code, Copilot ya da Cursor dosyalarını okusa bile sır göremez. Programın çalışırken sırlar yalnızca senin onayınla verilir.

AES-256-GCM kasa GitHub SSH ile ekip Kurtarma kodu
kaydır
Hangi ajanla çalışırsan çalış: Claude CodeGitHub CopilotCursorWindsurf…ve dosya okuyan her araç
3dil: Python · JS/TS · Java
256bit AES-GCM kasa
3'te 2kurtarma parçası kasayı açar
0diskte kalan açık sır

SealBox'ı edin

Tek motor. Her editör.

Motor PyPI'dan, editör eklentisi VS Code Marketplace ya da Open VSX'ten gelir. İkisi de aynı GitHub reposundan derlenir ve aynı sürüm numarasını taşır: 0.3.0.

$ pipx install sealbox                            # motor
$ code --install-extension gokhanozdemir.sealbox  # VS Code
# Cursor / Windsurf / VSCodium: Eklentiler → "SealBox" ara (Open VSX'ten gelir)

Sorun

Yapay zekâ ajanı dosyalarını okur.
Şifrelerini de.

Bir ajana "şu hatayı düzelt" dediğinde projedeki dosyaları açar ve içeriğini modele gönderir. .env dosyasındaki ya da koda gömülü bir parola o anda senin bilgisayarından çıkmış olur. .gitignore bunu durdurmaz, çünkü ajan dosyayı diskten okur.

src/config.py SealBox'tan önce
import os

DB_HOST     = "db.internal"
DB_PASSWORD = "Pr0d-Sup3r-Gizli!"
ADMIN_EMAIL = "ayse.yilmaz@firma.com"
OWNER_TCKN  = "10000000146"
API_KEY     = "sk_live_51N…8x"

def connect():
    # parola: Pr0d-Sup3r-Gizli!
    return f"postgres://admin:{DB_PASSWORD}@…"

Ajan bu dosyayı okuduğunda 4 sır ve 1 kişisel veri modele gider.

src/config.py sealbox seal sonrası
import os

DB_HOST     = "db.internal"
DB_PASSWORD = os.environ["DB_PASSWORD"]
ADMIN_EMAIL = "__SECURE_EMAIL_8f2c…__"
OWNER_TCKN  = "__SECURE_TCKN_103d…__"
API_KEY     = os.environ["API_KEY"]

def connect():
    # parola: __SECURE_PASSWORD_2cea…__
    return f"postgres://admin:{DB_PASSWORD}@…"

Kod aynı şekilde çalışır, ama diskte sır yok. Değerler .sealbox/project.vault içinde şifreli duruyor.

Nasıl çalışır

Tara. Mühürle. Onayla çalıştır.

SealBox araya giren bir proxy değil. Sırları dosyalardan kalıcı olarak çıkarır. Hangi ajan, hangi editör ya da hangi dil olursa olsun diskte okunacak sır kalmaz.

  1. 01

    Tara

    Kurallar ve doğrulayıcılar parolaları, tokenları, API anahtarlarını, e-postaları, TCKN, IBAN ve telefonları bulur. sealbox seal --check hiçbir şeye dokunmadan rapor verir.

  2. 02

    Mühürle

    Sırlar AES-256-GCM kasaya taşınır. Kodda os.environ["X"] / process.env.X / System.getenv("X") kalır, kişisel veriler __SECURE_..__ etiketine dönüşür.

  3. 03

    Onayla çalıştır

    sealbox exec -- python app.py önce onay penceresi açar. Sırlar yalnızca o çalıştırmaya ortam değişkeni olarak verilir, çıktıdaki sırlar [GİZLİ:..] diye basılır.

  4. 04

    Paylaş

    Kasa şifreli olduğu için repoya girer. git push ile ekibe gider, onu yalnızca ekipteki GitHub hesapları açabilir.

JSON dosyasındaki e-posta, API anahtarı ve telefon kilitlenip kasaya taşınıyor, ardından kasa git push ile GitHub'a gönderiliyor
$ sealbox seal --check
.env → .env.sealed: 1 değer kasaya taşınacak (DB_PASSWORD)
3 dosya tarandı (0.0 sn).
Diskte karalanmamış sır var. 'sealbox seal' çalıştırın.

Özellikler

Sırları bulur, saklar, izler.

Tek bir komut satırı aracı ve onun editör eklentisi. Bulut hesabı, sunucu ya da abonelik gerekmez.

Otomatik tarama

Regex kuralları, Luhn, IBAN mod-97, TCKN algoritması ve entropi kontrolüyle yanlış alarmı azaltır.

Şifreli kasa

.sealbox/project.vault, AES-256-GCM. Anahtar diskte değil, işletim sisteminin kimlik deposunda.

.env desteği

Gizli satırlar kasaya taşınır, .env silinir. Yerine yalnızca yer tutucu içeren .env.sealed kalır.

Her çalıştırmada onay

Onayı atlatan bir bayrak bilerek yok. Program sırlara ancak sen pencerede "evet" dediğinde ulaşır.

Çıktı süzgeci

Programın çıktısında ya da loglarında bilinen bir sır geçerse [GİZLİ:..] olarak basılır.

Python · JS/TS · Java

Kod, dilin kendi ortam değişkeni okumasına çevrilir. JSON/YAML/TOML ayarları karalanır ve raporlanır.

GitHub ile ekip

Arkadaşının GitHub'daki SSH anahtarına kilitli bir kopya oluşur. Ayrı bir şifre paylaşmak gerekmez.

Kurtarma kodu

Bilgisayar sıfırlanırsa kasayı geri açar. İstersen 3 parçaya bölünür, herhangi 2'si yeter.

Ekip paylaşımı

Şifreyi Slack'ten atma.
Kasayı push'la.

Kasa repoda şifreli durur. sealbox team add arkadasim dediğinde SealBox github.com/arkadasim.keys adresinden arkadaşının SSH açık anahtarını alır ve kasa anahtarının ona özel kilitli bir kopyasını team.json'a yazar. Arkadaşın git pull yapınca kasa kendi SSH anahtarıyla açılır.

  • Sahip / üye rolleri. Sahipler kişi ekleyip çıkarabilir: --owner, team promote.
  • Çıkarınca anahtar yenilenir. team remove sonrası eski üye yeni kasayı açamaz, görmüş olabileceği değerler listelenir.
  • Sahte üye eklenemez. Her kayıt kasa anahtarından türetilen bir MAC ile imzalı.
  • Şifresiz SSH anahtarı reddedilir, çünkü ajan onu da okuyabilir.
Sen (sahip) team add arkadasim GitHub arkadasim.keys SSH açık anahtarı .sealbox/ (repoda) project.vault AES-256-GCM team.json kişi başı kilit git push Arkadaşın git pull → SSH ile açar

Değerler hiçbir zaman açık hâlde ağdan geçmez; repoya yalnızca şifreli dosyalar girer.

GitHub'da güvende

Kasayı push'la. Sırları asla.

Sırların GitHub'dan yalnızca şifreli dosya olarak geçer. Her ekip arkadaşının anahtar kopyası kendi GitHub SSH anahtarıyla kilitlidir. Repo sızsa bile elde kalan, kilitli bir kutudur.

  1. 01

    SSH anahtarı oluştur

    Kişi başı bir ed25519 anahtarı, şifreli. SealBox şifresiz anahtarı kabul etmez, çünkü bilgisayardaki her program (ajanlar dahil) onu okuyabilir.

  2. 02

    GitHub'a ekle

    Açık yarısını (id_ed25519.pub) GitHub → Settings → SSH keys altına yapıştır. Zaten herkese açık olması için yapılmıştır: github.com/sen.keys adresinde görünür.

  3. 03

    Her arkadaşa ayrı kilit

    team add o açık anahtarı çeker ve kasa anahtarının bir kopyasını onunla kilitleyip team.json'a yazar. Onu yalnızca eşleşen gizli anahtar açar; o da arkadaşının bilgisayarından hiç çıkmaz.

  4. 04

    Push ve pull

    git push yalnızca şifreli dosyaları gönderir. git pull sonrası ilk çalıştırmada arkadaşının SSH şifresi bir kez sorulur, sonra anahtar onun işletim sistemi deposunda saklanır.

$ ssh-keygen -t ed25519                # sorulunca şifre koy
$ gh ssh-key add ~/.ssh/id_ed25519.pub # ya da: GitHub ayarları
$ sealbox team init --github my-name
$ sealbox team add teammate
$ git add .sealbox && git commit -m "vault" && git push
project.vaultŞifreli kasa, AES-256-GCM GitHub'a gider
team.jsonKişi başı bir kilit, MAC ile korunur GitHub'a gider
.env.sealedDeğişken adları ve etiketler, değer yok GitHub'a gider
↓ bilgisayarından hiç çıkmaz ↓
~/.ssh/id_ed25519Gizli SSH anahtarın, şifre korumalı bilgisayarında kalır
Kasa anahtarı (DEK)İşletim sistemi deposunda, diskte asla bilgisayarında kalır
Kurtarma koduYalnızca pencerede gösterilir, proje dışında durur bilgisayarında kalır

Push yetkisi olup anahtarı olmayan biri ne bir değeri okuyabilir ne de team.json'a sahte üye ekleyebilir.

Git geçmişi kontrolü

Dosyayı temizlemek eski commit'leri temizlemez. sealbox history her commit'te kasadaki değerleri ve kodlanmış hallerini arar; değeri değil, yalnızca ad, commit ve dosyayı söyler. Push'lanmış olanları işaretler: onları yenile.

Commit kancası

sealbox hook install, kasadaki bir değeri içeren commit'i durdurur ve dosya:satır gösterir. Herkes kendi bilgisayarına kurar, repoya girmez.

Sürümler GitHub'da derlenir

Her sürüm GitHub Actions'ta test edilir, sonra PyPI'a güvenilir yayınlama (trusted publishing) ile gönderilir; GitHub'da hiçbir API anahtarı saklanmaz. Eklenti, ancak PyPI başarılı olunca Marketplace ve Open VSX'e çıkar.

Kurtarma

Anahtarı kaybetsen de kasa kaybolmaz.

Windows sıfırlandı, yeni bilgisayar aldın ya da profil bozuldu. Kasa anahtarı tek bir yerde dursaydı kasa sonsuza kadar kilitli kalırdı. SealBox'ta kasa anahtarının birden fazla kilidi var. Biri giderse ötekiyle açarsın.

  • recovery setup: 128 bitlik kurtarma kodu. Yalnızca pencerede gösterilir, terminale yazılmaz.
  • recovery shares: kodu 3 parçaya böler (Shamir). Herhangi 2 parça yeter.
  • recovery export: USB ya da bulut için kurtarma kiti. Kod olmadan açılmaz.
  • recovery restore: kod, 2 parça ya da kit ile anahtarı geri getirir.
Windows kimlik deposuGünlük kullanım, hızlı önbellek 1. sırada
GitHub SSH anahtarıed25519→X25519 ya da RSA-OAEP ekip varsa
Kurtarma koduArgon2id (64 MiB) → X25519 son çare
↓ herhangi biri açar ↓
DEK
kasa anahtarı
──►project.vault

Zarf şifreleme: tek bir kasa anahtarı (DEK), birden fazla kilitle saklanır.

VS Code eklentisi

Sırrı yazdığın anda görürsün.

Eklenti, sealbox komutunun editördeki kumandası. Açık sırları sarı çizer, ampulle kasaya taşır, üzerine gelince onaylı gösterir.

demo_project — Visual Studio Code
config.py
app.py
.env.sealed
1import os
2
3DB_HOST = "db.internal"
4DB_PASSWORD = os.environ["DB_PASSWORD"]
5API_TOKEN = "ghp_x7Kq…Wm2" 💡
6OWNER = "__SECURE_TCKN_103d…__"
7
8def connect():
9 return db.open(DB_PASSWORD)
10
11
12
__SECURE_TCKN_…__ · kasada karalanmış veri
Değer bu dosyada yok, şifreli kasada duruyor.
Değeri göster (onay ister) · Çalışırken ver
Bu dosyadaki sırları kasaya taşı
Projeyi tara (açık sır var mı?)
Programı kasayla çalıştır
🔒 3 sır kasada👥 2 kişiPython 3.13 · UTF-8

Açık sır uyarısı

Dosya açılınca ya da kaydedilince taranır, sır olan yer sarı çizilir.

Hızlı düzeltme

Ampul → "Bu dosyadaki sırları kasaya taşı".

Üzerine gel, gör

__SECURE_..__ veya os.environ["X"] üzerinde onaylı "Değeri göster".

Durum çubuğu

🔒 3 sır kasada · 👥 2 kişi. Kurtarma yoksa ⚠ yedeksiz der.

Kasayla çalıştır

Programı terminalde sealbox exec ile başlatır. Düz çalıştırma KeyError verirse bunu önerir.

Ekip ve kurtarma

Menüden ekip kur, @kullanıcı ekle, kurtarma kodu üret, kitle geri aç.

Neden SealBox?

Alışkanlıklar, ajan çağına göre değil.

Sırları .env'de tutup .gitignore'a eklemek, git'e karşı korur. Ama bugün dosyaları okuyan bir de yapay zekâ ajanı var.

Koda gömülü sır.env + .gitignoreSealBox
Ajan dosyayı okuyunca sırrı görür mü?EvetEvet, dosya diskte açıkHayır, diskte sır yok
Sırları kendisi bulur mu?HayırHayırEvet, kod, ayar dosyası ve .env
Unutulan açık sırrı haber verir mi?HayırHayırEvet, seal --check, CI ve editör uyarısı
Ekiple paylaşımRepoda açıkElle, mesajla ya da e-postaylagit push, GitHub SSH anahtarlarıyla
Anahtar kaybolursa—Dosya gittiyse gittiKurtarma kodu, 2-of-3 parça, kit
Program çıktısında sır sızarsaGörünürGörünür[GİZLİ:..] diye basılır
Kişisel veriler (TCKN, e-posta, IBAN)AçıkAçıkKaralanır, gerekirse çalışırken verilir
Daha önce commit edilmiş sırGeçmişte kalırGeçmişte kalırsealbox history bulur; commit kancası bir sonrakini durdurur

Dürüst sınırlar: regex her sırrı bulamaz, kasıtlı kötü niyetli bir yerel program kimlik deposunu okumaya uğraşabilir. Ayrıntılar dokümantasyonda.

Kaynaklar

Öğren, sonra derine in.

Adım adım rehberler yeni başlayanlar için. Dokümantasyonda her komutun tüm seçenekleri var.

Başlarken

Dört komutla hazırsın.

Bunları proje klasöründe çalıştır. Her adım sıradakini söyler; takılırsan sealbox status her zaman yanında.

01

Kur ve kontrol et

Aracı kur, sonra init projene baksın. Hiçbir dosyayı değiştirmez, sıradaki adımları listeler.

5 dakikada başla →
$ pip install sealbox
$ cd projem
$ sealbox init
02

Sırlarını mühürle

Parolalar ve anahtarlar şifreli kasaya taşınır; kodun onları ortam değişkeninden okur.

İlk projeni mühürle →
$ sealbox seal --check   # önce bak
$ sealbox seal
03

Kurtarma kodu oluştur

Windows sıfırlandığı gün için yedek anahtar. Bir kez, pencerede gösterilir; terminale asla yazılmaz.

Anahtarı kaybedersen →
$ sealbox recovery setup
$ sealbox recovery shares   # isteğe bağlı
04

Onayla çalıştır

Programın sırları yalnızca bu çalıştırmada, sen İzin ver deyince alır. Kasayı commit edip ekibine push'la.

Kasayla çalıştır →
$ sealbox exec -- python app.py
$ git add .sealbox && git commit -m "kasa"

Bugün ilk projeni mühürle.

Python 3.12+ yeterli. Windows, macOS ve Linux; mesajlar Türkçe ya da İngilizce.