Overview
Privyx berawal dari percakapan dengan AI tentang informasi pribadi dalam sebuah file teks. Dari percobaan itu, idenya berkembang menjadi proxy privasi untuk API LLM: menyamarkan data sensitif sebelum request mencapai provider, lalu mengembalikan nilai aslinya pada respons yang diterima client.
Saya membangun project ini bersama Claude Code CLI menggunakan model Opus 4.8. Percakapannya dimulai dari riset tool yang sudah ada, berlanjut ke penentuan konsep dan identitas, lalu menjadi spesifikasi yang dipakai untuk membangun workspace awal. Kini Privyx tersedia sebagai project open source berbasis Python dengan lisensi MIT.
Background & Goals
Dimulai dari satu file teks
Saya memberikan sebuah file
txt berisi paragraf yang mengandung informasi pribadi kepada Claude Code, lalu mengajukan pertanyaan:Berapa banyak info pribadi yang bisa kamu baca? Dan riset tool-tool open source yang bisa melakukan redact atau filtering dari info-info pribadi itu.
Dari situ muncul daftar tool yang bisa dipertimbangkan. Namun, belum ada yang sesuai dengan gambaran yang saya inginkan. Percakapan pun berlanjut: apa yang sebenarnya perlu dilindungi, bagaimana data itu melewati layanan AI, dan bagaimana hasilnya tetap bisa dipakai setelah informasi sensitif disamarkan.
Konsep yang terbentuk adalah lapisan di antara tool dan provider LLM. Provider bekerja dengan placeholder, sementara pemetaan ke nilai asli tetap berada di sisi Privyx. Client tetap bisa menerima jawaban dengan nilai yang sudah dipulihkan. Integrasinya diarahkan agar cukup melalui perubahan base URL, tanpa menulis ulang aplikasi pengguna.
Dari percakapan menjadi identitas
Nama Privyx dan konsep logonya juga terbentuk selama diskusi tersebut. Gambar penjelasan lengkap tersedia di Logo Concept. Identitas visualnya menggambarkan cara kerja produk:
- Kapsul tegak melambangkan gerbang Privyx di sisi pengguna.
- Kapsul mendatar menggambarkan perjalanan request menuju provider dan respons yang kembali.
- Empat persilangan mewakili nilai asli yang masuk, placeholder yang keluar, balasan bertoken yang masuk, dan pemulihan nilai asli sebelum kembali ke client.
- Ruang di tengah melambangkan vault sesi yang menyimpan hubungan antara placeholder dan nilai aslinya.
Kedua kapsul memakai bentuk yang sama, dengan salah satunya diputar 90 derajat. Anyamannya melambangkan keterikatan token dengan nilai asli. Indigo menjadi warna ruang privat, putih untuk gerbang, dan lavender untuk placeholder. Ini adalah bahasa visual produk; cakupan perlindungan teknisnya tetap mengikuti jalur request dan detektor yang dikonfigurasi.
Role & Contribution
Saya membawa kebutuhan awal, mencoba pendekatan lewat file teks, dan menilai apakah alternatif yang ditemukan sudah sesuai dengan konsep yang saya cari.
Claude Code menjadi rekan diskusi dan alat pengembangan dalam proses tersebut: membantu riset, mengembangkan gagasan, merumuskan spesifikasi, serta membangun workspace awal. Arah produk, nama, dan konsep logo tumbuh melalui percakapan berulang. Setelah fondasinya terbentuk, Claude Code dan AI agent lain masih menjadi teman untuk fitur baru dan pemeliharaan.
Process & Decisions
Merumuskan prompt pembangunan
Percakapan tidak langsung dimulai dengan instruksi membuat aplikasi. Diskusi berlanjut sampai kebutuhan tersebut cukup jelas untuk dituangkan menjadi prompt pembangunan Privyx.
Prompt akhirnya menetapkan Python 3.12, library dan CLI sebagai bentuk awal, serta mesin privasi yang terpisah dari FastAPI maupun SDK provider. Alur utamanya dibuat eksplisit:
detect → decide → pseudonymize → save mapping → forward → restoreSpesifikasi itu mencakup deteksi pola dan istilah kustom, kebijakan penyamaran, operator token, pilihan vault memory/SQLite/Redis, mode proxy transparent dan gateway, serta sesi bersama untuk request dan respons. Request yang gagal disamarkan tidak boleh diteruskan.
Batas awalnya juga ditulis: tidak menambahkan autentikasi, pemindaian gambar, atau schema native Gemini, dan proxy listen pada
127.0.0.1. Prompt inilah yang menjadi dasar pembangunan workspace awal. Teks lengkap tersedia di Initial Build Prompt.Menjaga respons streaming tetap utuh
Salah satu syarat sejak awal adalah pemulihan placeholder yang terpotong di antara beberapa chunk SSE. Mengganti teks pada setiap chunk secara terpisah tidak cukup, karena satu token bisa dimulai pada chunk pertama dan baru selesai pada chunk berikutnya.
Privyx memakai buffer untuk menahan potongan yang masih mungkin menjadi awal token. Hasil pemulihan streaming ditargetkan sama dengan pemulihan teks secara utuh. Pengujiannya mencakup property-based test dengan Hypothesis untuk berbagai pembagian chunk, selain unit test, lint dengan Ruff, dan pemeriksaan tipe strict dengan mypy. Penjelasan teknis tersedia pada Streaming architecture dan Testing.
Berkembang setelah fondasi awal
Project kemudian berkembang melampaui spesifikasi awal. Beberapa kemampuan yang kini tersedia antara lain:
- Deteksi lebih fleksibel. Selain pola dan daftar istilah, tersedia detektor Presidio berbasis NLP, detektor LLM, dan kombinasi beberapa detektor. Lihat Detection.
- Pilihan transformasi tambahan. Operator
encryptdanfakermelengkapi pseudonym, hash, dan redact untuk kebutuhan penanganan data yang berbeda. Lihat Masking.
- Audit dan metrik. Audit merekam jenis kejadian dan jumlah entitas tanpa menulis nilai sensitifnya. CLI menyediakan ringkasan audit, dan metrik tersedia dalam format Prometheus. Lihat Audit events.
- Profil peluncuran agent. Profil bernama dan pewarisan konfigurasi memungkinkan pengaturan beberapa tool atau endpoint. Mode
--dry-runmemperlihatkan rencana peluncuran tanpa menjalankan tool atau proxy.
- Pemeriksaan jalur request. Diagnostik memeriksa aturan penyamaran; audit membedakan request yang diteruskan tanpa penyamaran dan yang ditolak. Preset strict menolak jalur yang tidak dikenali.
- Pengujian integrasi coding agent. Payload sintetis menguji penyamaran dan pemulihan teks, argumen tool, serta metadata pada protokol Messages, Responses, dan Chat Completions.
Perkembangan profil agent, diagnostik, dan pengujian tersebut dicatat dalam changelog.
Outcome & Learnings
Hasil dari proses ini adalah project open source yang menghubungkan mesin privasi, proxy, dan CLI dalam satu alur. Privyx dapat dipakai untuk menyaring request LLM maupun memproses teks dan JSON tanpa proxy. Dokumentasinya mencakup penggunaan awal, integrasi, konfigurasi, dan batas perlindungannya.
Perjalanan dari satu pertanyaan tentang file teks menuju spesifikasi pembangunan memperlihatkan peran AI di luar penulisan kode: sebagai rekan eksplorasi untuk memperjelas kebutuhan dan membentuk konsep produk. Workspace awal menjadi titik mulai, lalu project berkembang melalui penambahan kemampuan, pengujian, dan perbaikan yang tercatat di repository.
Ada batas yang tetap penting: Privyx hanya menyamarkan nilai yang berhasil dideteksi pada bagian request yang ditangani. Nama dan istilah internal memerlukan konfigurasi tambahan; konten biner tidak diperiksa. Jalur API yang tidak dikenali bisa diteruskan tanpa penyamaran jika tidak dikonfigurasi untuk ditolak. Rincian tersedia pada Limitations.
Preview
Gambaran alur Privyx:
Client → Privyx → request dengan placeholder → Provider LLM
Client ← Privyx ← respons dengan placeholder ← Provider LLM
↕
Pemetaan sesiflowchart LR
C["Client"] -->|Request| P["Privyx"]
P -->|Request dengan placeholder| L["Provider LLM"]
L -->|Respons dengan placeholder| P
P -->|Respons asli| C
P <--> S[("Pemetaan Sesi")]
style P fill:#4F46E5,color:#fff,stroke:#818CF8
style S fill:#1E293B,color:#fff,stroke:#14B8A6Behind the Project
Dua bahan dari proses awal Privyx: gambar konsep logo dan prompt pembangunan lengkap. Buka halaman di bawah untuk melihat masing-masing.
Logo ConceptInitial Build Prompt