- Menghubungkan agen AI berbasis IRC ke situs portofolio pribadi agar pengunjung bisa mendapatkan jawaban berdasarkan hasil analisis kode repositori GitHub yang sebenarnya
- Dirancang bukan sebagai chatbot ringkasan resume biasa, melainkan agen eksekusi yang melakukan kloning repositori, perhitungan pengujian, dan verifikasi kode
- Sistem dipisah menjadi dua agen, nullclaw untuk publik dan ironclaw untuk privat, yang berkomunikasi secara aman melalui jaringan Tailscale
- Mengadopsi protokol IRC sebagai lapisan transport untuk sekaligus mencapai self-hosting, standardisasi, dan biaya rendah, serta memisahkan peran model Haiku 4.5 dan Sonnet 4.6 agar biaya dibatasi hingga $2 per hari
- Seluruh sistem berjalan dengan biner di bawah 10MB dan memori di bawah 5MB, dan ditunjukkan sebagai contoh infrastruktur AI ringan yang menjaga keamanan, biaya, dan transparansi
Membangun doorman digital
- Struktur yang menempatkan agen AI di VPS $7/bulan, menggunakan server IRC pribadi sebagai lapisan transport, dan menghubungkannya ke repositori GitHub
- Pengunjung dapat mengajukan pertanyaan kepada AI di situs portofolio dan menerima jawaban yang benar-benar berbasis kode
- Bukan chatbot ringkasan resume biasa, tetapi memberikan respons konkret melalui analisis kode
Keterbatasan "chatbot yang ditanya soal resume"
- Kebanyakan chatbot portofolio hanya berhenti pada tingkat menyuntikkan isi resume ke model lalu menyusunnya ulang
- Pendekatan seperti ini tidak memberi informasi baru dan hanya menjadi percakapan formalitas
- Untuk pertanyaan seperti “bagaimana cara mengelola test coverage?”, diperlukan respons konkret seperti mengkloning repositori dan menghitung jumlah pengujian
- Untuk itu, dibangun infrastruktur yang memungkinkan akses dan analisis kode secara langsung
Arsitektur sistem
- Terdiri dari dua agen, dua server, dan dua batas keamanan
- nullclaw: doorman publik, biner Zig 678KB, memakai sekitar 1MB RAM
- Menyapa pengunjung, menjawab pertanyaan terkait proyek, serta melakukan kloning repositori GitHub dan verifikasi berbasis kode
- ironclaw: agen backend privat, berjalan di sistem terpisah
- Dapat mengakses email, jadwal, dan konteks pribadi
- Menerima permintaan kompleks dari nullclaw melalui kanal IRC #backoffice
- Kedua sistem terhubung melalui Tailscale, dan server publik tidak dapat mengakses data pribadi
Alasan memilih IRC
- Konsistensi estetika: karena situs portofolio berbasis UI terminal, klien IRC terasa alami
- Self-hosting sepenuhnya: server IRC Ergo, klien web gamja, dan nullclaw semuanya dijalankan di infrastruktur sendiri
- Protokol sederhana dan terstandar: IRC yang sudah berusia 30 tahun tidak memiliki vendor lock-in dan tidak berisiko perubahan API
- Agen yang sama bekerja identik bukan hanya di klien web, tetapi juga di klien terminal irssi
Pemilihan dan desain model
- Menggunakan model besar itu tidak efisien, sehingga model dibedakan berdasarkan peran
-
Haiku 4.5**: menangani percakapan dan kueri sederhana,** dengan respons berlatensi sangat rendah
- Sonnet 4.6: hanya digunakan untuk analisis kode dan penalaran kompleks
- Batas biaya: dibatasi hingga $2 per hari dan $30 per bulan
- Mencegah ledakan biaya akibat penyalahgunaan atau percakapan berlebihan
- Melalui struktur penalaran bertingkat, diperoleh kecepatan dan efisiensi biaya sekaligus
Desain keamanan
- SSH: login root dinonaktifkan, hanya autentikasi berbasis kunci yang diizinkan, menggunakan port nonstandar
- Firewall: hanya membuka SSH, IRC(TLS), dan HTTPS(WebSocket)
- Proxy Cloudflare: melakukan terminasi TLS, pembatasan laju, dan penyaringan bot
- Sandbox agen: hanya mengizinkan alat baca-saja, dibatasi 10 aksi per jam
- Kontrol biaya: hard cap $2 per hari, $30 per bulan
- Log audit dan pembaruan otomatis diaktifkan
- Permukaan serangan diminimalkan: hanya dua layanan, ergo dan nullclaw, yang berjalan, tanpa menyajikan konten web secara langsung
- Jika terjadi kompromi, cakupan dampaknya dibatasi pada bot IRC dengan batas $2/hari
Susunan stack komunikasi
- Semua komponen berbentuk kecil, self-hosted, dan dapat diganti
- Ergo: server IRC, biner Go tunggal, RAM 2.7MB
- gamja: klien web IRC, halaman statis 152KB, dilayani di belakang Cloudflare
- nullclaw: runtime agen AI, biner Zig 4MB, memakai sekitar 1MB memori
- Seluruh sistem berjalan dengan biner di bawah 10MB dan memori idle di bawah 5MB
- Cukup untuk dijalankan bahkan pada tier VPS termurah
Kemampuan nyata nully (agen publik)
- Mengidentifikasi bahasa pemrograman: memverifikasi lewat konteks yang sudah dimuat sebelumnya dan pemeriksaan repositori
- Menganalisis struktur pengujian: mengkloning repositori lalu membaca langsung file pengujian untuk melaporkan hasil
- Menjelaskan proyek: misalnya merespons detail proyek Fracture berdasarkan kode
- Memberi panduan kontak: hanya memberikan informasi kontak yang akurat, tanpa membuat informasi palsu
- Permintaan penjadwalan: diteruskan ke ironclaw melalui protokol Google A2A, lalu hasilnya dikembalikan dalam bentuk terstruktur
- Pengunjung tidak menyadari proses perpindahan ke backend
Implementasi A2A
- Mendukung protokol Google A2A (v0.3.0) dan melakukan manajemen status tugas berbasis JSON-RPC
- Alat
a2a_call mengirim pesan ke agen jarak jauh dan mengurai status tugas (selesai/gagal/sedang berjalan)
- HTTPS diwajibkan, tetapi HTTP diizinkan di jaringan internal Tailscale untuk kemudahan debugging
-
Struktur di sisi ironclaw
- Instans nullclaw menggunakan gateway LLM milik ironclaw sebagai proksi tanpa memiliki API key sendiri
- Hanya mempertahankan satu API key dan satu hubungan penagihan
- ironclaw menangani semua permintaan inferensi dan menanggung biayanya
Keamanan handoff
- Endpoint A2A memiliki risiko prompt injection, sehingga diterapkan pembatasan ketat
- Permintaan yang dapat diteruskan ke ironclaw dibatasi pada hal terkait jadwal, kontak, dan ketersediaan
- Penyampaian perintah arbitrer ditolak
- Endpoint A2A ironclaw dilindungi dengan firewall khusus Tailscale
- Kedua agen dijalankan dalam mode pemantauan dan daftar izin perintah yang terbatas
- nully yang menentukan apakah permintaan perlu dieskalasikan, untuk mencegah eksekusi perintah secara serampangan
Pelajaran yang diperoleh selama membangun
- Pemilihan model adalah bagian dari desain sistem dan secara langsung memengaruhi biaya, latensi, dan pengalaman
- Lebih banyak waktu dihabiskan untuk komunikasi, keamanan, dan konfigurasi infrastruktur dibanding agen itu sendiri
- Kesederhanaan dan keterbukaan IRC menjadikannya ideal sebagai lapisan transport agen AI
- Struktur pemisahan nullclaw–ironclaw adalah inti dari model keamanan
- Protokol A2A dan kanal log IRC yang berjalan berdampingan memberikan komunikasi terstruktur dan visibilitas real-time
- Mencegah duplikasi kredensial: memakai gateway ironclaw sebagai proksi untuk mempertahankan satu API key dan satu hubungan penagihan
Cara mencoba
- Kunjungi georgelarson.me/chat atau ketik
irc di terminal halaman utama
- Jika menggunakan klien IRC:
irc.georgelarson.me, port 6697(TLS), kanal #lobby
- nully sedang siaga dan dapat berbicara dengan pengunjung secara real-time
1 komentar
Komentar Hacker News
Jika agen OpenClaw yang bisa mengakses email dan data pribadi sampai disusupi, cakupan dampaknya bisa sangat besar
Ini bukan sekadar bot IRC biasa; penyerang bisa mereset kata sandi untuk melepas batas API, atau bahkan menyalahgunakannya sebagai hub berbagi konten ilegal
Saya penasaran kenapa memilih Haiku/Sonnet. Di OpenRouter ada banyak model yang jauh lebih murah
Misalnya Haiku 4.5 biayanya $1 per 1 juta token input dan $5 untuk output, sedangkan MiniMax M2.7 ada di $0.30 untuk input, $1.20 untuk output, dan Kimi K2.5 sekitar $0.45 untuk input, $2.20 untuk output
Dari pengalaman saya, M2.7 dan K2.5 juga menunjukkan performa yang mirip atau lebih baik daripada Haiku
Saya juga belakangan memakai model Anthropic saat membuat agen karena alasan itu. Haiku cukup baik mengendalikan pengguna yang melempar permintaan aneh, dan juga stabil dalam menangani percakapan emosional
IRC bagus sebagai lapisan transport, tapi tidak punya delivery guarantee. Kalau koneksi putus, pesan di tengah-tengah akan hilang
Untuk chat real-time ini tidak masalah, tapi kalau agennya menangani pekerjaan nyata, perlu pengiriman at-least-once
SSE(Server-Sent Events) bisa jadi titik tengah yang bagus. Koneksi persisten dimungkinkan, dan logika retransmisi bisa ditambahkan
Saya pernah membuat bot dengan ide serupa di kereta dari Tokyo ke Osaka
web-support-claw.oncanine.run — proyek untuk membuat bot interkom untuk website dengan membaca repo GitHub
Bot itu menjawab pertanyaan pengunjung sehingga tidak perlu membuat knowledge base terpisah
Ke depannya saya sarankan menaruh satu instance Haiku khusus untuk pemantauan. Notifikasi juga bisa diterima lewat ntfy
Saat ini ruang chat-nya benar-benar sudah di luar kendali
Kalau tujuannya untuk “resume interaktif”, interaksi dari publik tak terbatas sebenarnya tidak diperlukan
Tim kami juga memakai struktur yang mirip. Empat agen (sales, social, finance, strategy) berkomunikasi lewat message board berbasis FastAPI + SQLite
Alih-alih batas anggaran harian, kami mengelola batas biaya di lapisan governance
Struktur pub/sub milik IRC memang cocok untuk komunikasi multi-agent, tapi kami memakai HTTP polling + deduplikasi. Kurang elegan, tapi lebih mudah dipulihkan saat agen sering crash
Saya juga memakai IRC sebagai interface pada agen coding
Dengan berpindah room, saya mengganti prompt dan mengendalikan proyek dari jarak jauh
Ada yang bilang “kotak publik tidak mengakses data pribadi”, dan menurut saya akan menarik jika itu diubah menjadi tantangan CTF
Sembunyikan flag di kotak privat, lalu beri hadiah 50 dolar kepada siapa pun yang berhasil mengakses dan mengambilnya
Sikap nully memang agak kasar, tapi secara keseluruhan saya suka arsitektur sistem-nya
Saya juga memakai struktur berlapis, dan level paling bawah adalah bot lokal Qwen
Saya penasaran dengan logika eskalasi dari Haiku ke Opus
Ide ini sangat menarik. Jadi ingin membuat bot yang mengotomatiskan proses rekrutmen
Bot itu mewawancarai kandidat untuk memahami kecenderungan mereka, lalu mencari lowongan yang cocok dan otomatis melamar
Jika bot di pihak perusahaan juga menilai kandidat dengan cara yang sama, pencocokan bisa dilakukan berdasarkan preferensi kedua belah pihak
Ini bisa diwujudkan sepenuhnya secara open source self-hosted, dan bisa memberi sinyal yang jauh lebih baik daripada CV