nessie

Buatan UE, dan di mana data Anda disimpan

Tempat Nessie dibangun, tempat data Anda disimpan, dan apa yang dapat Anda kendalikan saat menjalankannya sendiri.

Siapa yang membangunnya, dan di bawah hukum apa

Nessie dibangun oleh UnlikeOtherAI s.r.o., perusahaan yang terdaftar di Republik Ceko dan beroperasi berdasarkan hukum Ceko.

Halaman ini menjelaskan bagaimana perangkat lunak dibangun dan di mana perangkat lunak itu berjalan. Halaman ini bukan pernyataan kepatuhan: Nessie tidak memegang sertifikasi keamanan apa pun, dan tidak ada isi halaman ini yang boleh dibaca sebagai sertifikasi. Data pribadi apa yang diproses dan atas dasar apa dibahas dalam kebijakan privasi, yang merupakan halaman tersendiri.

Di mana produk hosting kami berjalan

Nessie Cloud berjalan di penyedia hosting Eropa — Scaleway, Hetzner, dan lainnya. Kami memilih layanan terbaik yang ditawarkan tiap penyedia, sehingga bagian produk yang berbeda dapat berjalan di penyedia yang berbeda, semuanya di Eropa.

Keterangan yang lebih rinci dari itu — lokasi, kota, atau pusat data tertentu — sengaja tidak dicantumkan di sini, karena keterangan semacam itu akan menjadi usang tanpa ada yang menyadarinya.

Hosting sendiri menyerahkan pilihan kepada Anda

Di mana instans hosting sendiri berjalan adalah pengaturan deployment, bukan pengaturan produk. Jalur mesin tunggal adalah stack Docker Compose yang Anda tempatkan di mesin pilihan Anda. Dalam struktur Terraform untuk cloud terkelola, wilayah adalah input yang sama sekali tidak memiliki nilai bawaan: tidak ada yang bisa ditebak di sana, jadi tidak ada nilai bawaan, dan basis data, bucket penyimpanan objek, serta layanan semuanya mengikuti wilayah yang Anda sebutkan.

Dua rincian struktural penting untuk pertanyaan yang sama. Antrean dan transpor realtime sama-sama berbasis PostgreSQL — tidak ada Redis dan tidak ada message broker dalam alurnya, sehingga tidak ada sistem ketiga yang harus ditempatkan. Penyimpanan objek kompatibel dengan S3 dan tidak terikat pada satu vendor; deployment referensi menjalankan MinIO dalam kontainer pada jaringan privat tanpa ingress sendiri. Bagian-bagian yang harus berada di suatu tempat adalah basis data, penyimpanan objek, dan dua layanan Node, dan semuanya berada di mana pun Anda menempatkannya. Cara menyiapkannya ada di halaman instalasi.

Apa yang disimpan Nessie — dan apa yang sengaja tidak disimpan

Identitas tidak disalin

Dengan masuk melalui UnlikeOtherAI, penyedia identitas mengelola dan menyimpan identitas manusia — faktor autentikasi, profil, keanggotaan organisasi dan tim, serta undangan. Nessie adalah relying party, bukan sistem identitas kedua. Ini keputusan data sekaligus keputusan arsitektur: identitas yang tidak pernah disimpan Nessie adalah identitas yang tidak bisa dibocorkan, hilang, atau gagal dihapus oleh Nessie.

Yang sebenarnya disimpan tabel users adalah pengenal pengguna yang stabil dari penyedia — kunci yang dipakai semua data lain untuk merujuk — alamat email, salinan nama tampilan dan avatar yang tidak otonom, serta kolom lokal produk (preferensi, kata ganti, dan versi token yang dipakai untuk mencabut sesi). Salinan itu ada hanya agar nama dan gambar bisa ditampilkan tanpa satu permintaan per baris, dan disinkronkan ulang dari klaim terverifikasi penyedia saat masuk, saat berpindah tim, dan saat menyegarkan sesi. Tidak ada nilai yang dikarang: orang yang belum diberi nama oleh penyedia akan tampil dengan alamat emailnya sampai nama itu ada. Hash kata sandi hanya ada untuk pemilik bootstrap pada instalasi yang sama sekali tidak memiliki penyedia identitas.

Hal yang sama berlaku untuk struktur. Satu organisasi di penyedia adalah satu organisasi di Nessie, terikat pada id organisasi dari penyedia; tim tanpa tautan ke hulu menjawab 404 TEAM_NOT_LINKED alih-alih mundur ke tebakan lokal, dan pembacaan daftar anggota secara langsung ditujukan ke penyedia identitas dan tidak menyimpan apa pun.

Dua salinan belum dihapus, dan tidak jujur bila kami memberi kesan sebaliknya. Nama organisasi dan tim masih disimpan secara lokal di samping id pengikatnya, dan baris keanggotaan lokal masih mengotorisasi permintaan biasa di antara dua sinkronisasi. Penghapusan keduanya adalah pekerjaan terbuka yang tercatat di repositori, bukan sesuatu yang sudah selesai.

Tidak ada data komersial

Layanan penagihan pusat mengelola pembayaran. Nessie tidak menyimpan pelanggan, langganan, faktur, harga, saldo kredit, kebijakan isi ulang, persetujuan pembayaran, laporan tagihan, maupun status pembatalan dari penyedia pembayaran, dan Nessie tidak menghitung tarif. Nessie membaca nilai yang siap ditampilkan dan menampilkannya.

Rahasia

Vault yang terkonfigurasi diperlukan untuk menyimpan rahasia sama sekali. Sengaja tidak ada cadangan di basis data dan tidak ada jalur teks biasa: tanpa vault, menyimpan, merotasi, dan mencabut rahasia mengembalikan kesalahan, bukan beralih ke cara yang kurang aman. Catatan Nessie sendiri tentang sebuah rahasia tidak memuat nilai, ciphertext, kunci, maupun token vault — hanya referensi buram beserta metadatanya — dan path vault dibangun hanya dari pengenal struktural, tidak pernah dari nama organisasi, tim, proyek, atau orang.

Kredensial yang harus dipegang sendiri oleh Nessie untuk bertindak sebagai klien OAuth — kredensial konektor dan kotak surat, rahasia webhook, materi penyegaran sesi, payload eksekutor — disegel dalam amplop AES-256-GCM yang terikat pada tujuan, di bawah key ring berversi yang merupakan akar terpisah dari rahasia penandatanganan sesi, dengan prosedur rotasi yang terdokumentasi.

Ada juga aturan tentang model: rahasia boleh diketahui keberadaannya dan boleh diberi izin untuk dipakai, tetapi materi rahasia tidak boleh masuk ke konteks model, prompt, argumen alat, hasil alat, memori, embedding, pencarian, log, atau pesan. Agen dapat diberi kemampuan untuk memakai rahasia. Agen tidak pernah dapat diberi kemampuan untuk mengungkapkannya.

Apakah disk di bawahnya dienkripsi adalah properti dari mesin tempat deployment berjalan. Repositori tidak menetapkan enkripsi tingkat volume untuk volume basis data dan penyimpanan objek, sehingga halaman ini tidak mengklaimnya.

Isolasi tenant

Nessie dirancang multi-tenant: satu basis data, tempat setiap baris dimiliki tepat satu organisasi dan setiap tabel turunan memuat kolom organization_id. Isolasi ditegakkan di dua tempat — klausa cakupan yang dibawa setiap kueri, dan foreign key sungguhan pada kolom itu, yang ditambahkan melalui empat puluh dua constraint setelah audit internal menemukan kolom tersebut ada tetapi tanpa constraint pada puluhan tabel.

Sebuah suite uji kesesuaian menjaga invarian itu di batas HTTP. Suite ini menyiapkan penyerang dengan hak istimewa maksimal — pemilik penuh organisasinya sendiri — dan memastikan bahwa setiap pembacaan kanonis atas sumber daya organisasi lain dijawab 403, 404, atau kosong, dan setiap mutasi kanonis ditolak tanpa menyentuh baris milik organisasi lain. Cakupannya meliputi kanal, persetujuan, log audit, pemicu, agen beserta pengikatannya, eksekusi, proyek, tugas, utas, koneksi, instalasi alur kerja, instans MCP, basis pengetahuan, dan peringatan.

Untuk lebih tepat soal mekanismenya: ini penegakan di tingkat aplikasi ditambah foreign key, bukan row-level security PostgreSQL. Tidak ada kebijakan RLS dan tidak ada pengaman di sisi basis data, dan suite kesesuaian dijalankan terhadap penyimpanan in-memory yang setia, bukan basis data sungguhan, sehingga suite itu membuktikan klausa cakupan yang ditulis oleh kode, bukan SQL yang dijalankan server. Repositori menyatakan hal ini dalam dokumentasi suite itu sendiri, dan halaman ini pun demikian.

Jejak audit

Setiap tindakan yang berdampak dicatat: siapa yang bertindak dan sebagai apa — orang, agen, atau layanan — apa yang dilakukan, terhadap sumber daya yang mana, di organisasi, proyek, tim, atau kanal yang mana, berhasil atau ditolak, mengapa, serta id permintaan, alamat, dan user agent yang menyertainya.

Log ini bersifat append-only sejak dirancang dan tidak ada cara menulis ke dalamnya dari luar: POST /api/audit-log tidak ada, dan itu disengaja. Entri-entrinya dirantai — setiap entri membawa digest SHA-256 dari kolom kanonisnya sendiri ditambah digest entri sebelumnya untuk organisasi itu — sehingga baris yang diubah atau dihapus memutus rantai dan dapat dideteksi. Pemilik atau admin organisasi dapat menelusuri rantai itu kapan saja dan diberi tahu di mana rantai itu pertama kali putus, jika memang putus.

Dua catatan jujur. Rantai itu membuat log terlihat bila dirusak, bukan kebal terhadap perusakan: tidak ada pencabutan hak tulis di tingkat basis data atau penyimpanan write-once di baliknya, sehingga jaminannya adalah deteksi, bukan pencegahan. Dan entri disimpan tanpa batas waktu secara bawaan — retensi yang dapat dikonfigurasi dengan ekspor sebelum penghapusan sudah dirancang, belum dibangun. Entri juga dilarang memuat rahasia atau isi permintaan lengkap, dan sekumpulan nama kolom metadata sensitif yang tetap disamarkan saat masuk.

Buku besar biaya

Setiap pemanggilan model dicatat terhadap organisasi, dan terhadap pengguna, tim, proyek, kanal, agen, dan eksekusi asalnya, beserta token yang dipakai, dengan biaya yang dilaporkan penyedia dan estimasi Nessie sendiri disimpan berdampingan. Metrik yang tidak dilaporkan penyedia disimpan sebagai null, bukan ditebak. Laporan dapat dibaca oleh pemilik atau admin organisasi.

Buku besar ini adalah telemetri operasional — berapa yang dibelanjakan sebuah organisasi dan atas nama siapa. Ini bukan faktur dan bukan otoritas penagihan.

Pihak ketiga, bila Anda memakai produk hosting

Deployment hosting berkomunikasi dengan sekumpulan kecil layanan yang tetap. Lalu lintas model dan pencarian web tidak langsung menuju penyedia: keduanya keluar melalui satu gateway yang dioperasikan UnlikeOtherAI, tempat penyedia model dan pencarian di hulu berada. Masuk dan penagihan menuju authenticator UnlikeOtherAI. Vault rahasia di-hosting sendiri bersama aplikasi. Tautan panggilan video yang dibuat server secara bawaan memakai layanan publik Jitsi.

Hampir semua yang lain nonaktif sampai operator mengonfigurasinya, dan menyatakannya secara terbuka alih-alih gagal diam-diam: akun Google, Microsoft, dan Slack yang terhubung; email agen melalui Amazon SES, yang dijalankan deployment dalam akunnya sendiri tanpa perantara; push seluler dan browser; konektor riset dan sumber papan; browser cloud. Dua rincian perlu disebutkan karena mengubah ke mana data pergi:

  • Kotak surat yang terhubung tetap bersama penyedia Anda. Surat dibaca langsung dari penyedia Anda, melalui IMAP dan SMTP atau proses masuk milik penyedia itu sendiri; Nessie menyimpan kredensial yang tersegel dan tidak ada hal lain tentang akun itu. Kotak surat yang Anda hubungkan ke kotak masuk Clients adalah pengecualian: Anda meminta agar percakapannya disimpan bersama setiap pelanggan, sehingga percakapan itu disalin masuk.
  • Panggilan suara di dalam aplikasi tidak melewati Nessie. API hanya menjadi perantara kredensial dan klien membuka sambungan audio sendiri. Dikte dan panggilan telepon berbeda: audionya melewati Nessie menuju penyedia ucapan dan model yang memprosesnya.

Satu rincian inferensi mengikuti prinsip yang sama: header identitas pemanggil yang bertanda tangan hanya dikirim ke host chat yang dikonfigurasi, sehingga mengarahkan embedding ke endpoint lain tidak pernah menyerahkan kepada endpoint itu pernyataan delegasi tentang orang yang teksnya sedang di-embed.

Produk hosting memakai beberapa penyedia inferensi dan memilih di antaranya demi biaya dan kualitas. Organisasi nantinya dapat memilih di Admin penyedia mana yang boleh dipakai agennya: hanya Barat, hanya Eropa, hanya Tiongkok, atau tanpa preferensi — penyedia paling efisien untuk setiap pekerjaan. Instans yang di-host sendiri memilihnya sendiri.

Menjalankannya sendiri mengubah semua ini

Setiap pihak ketiga di atas adalah pilihan konfigurasi pada instans hosting sendiri. Inferensi dapat diarahkan ke endpoint apa pun yang kompatibel dengan OpenAI, termasuk yang ada di perangkat keras Anda sendiri. Konektor nonaktif kecuali Anda mengaktifkannya. Masuk melalui UnlikeOtherAI adalah jalur yang didukung, dan deployment tanpa penyedia identitas sama sekali berjalan sebagai satu organisasi tanpa ikatan dengan pemilik bootstrap.

Itulah inti dari pengaturan ini: perangkat lunaknya sama, dan keputusan tentang di mana perangkat lunak itu berjalan serta apa yang boleh dijangkaunya ada di tangan siapa pun yang menjalankannya. Halaman instalasi menjelaskan caranya.