4 poin oleh GN⁺ 25 hari lalu | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 25 hari lalu
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 juga kenal orang-orang yang menjalankan agen OpenClaw semacam ini di Mac Mini, dan aneh rasanya melihat orang yang biasanya sangat ketat soal keamanan justru tidak peka terhadap risiko seperti ini
    • Kalau yang kamu bilang benar, ini seperti contoh yang menunjukkan bagaimana manusia bertindak dalam ‘lingkungan tanpa pengaman’
  • 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

    • Jika dijalankan secara publik di IRC, safety rails mungkin jadi pertimbangan penting
      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
    • Xiaomi Mimo v2-Flash sangat bagus. Di benchmark saya, ia 8% lebih cepat daripada Haiku dan biayanya 80 kali lebih murah. Gemini 3.1 Flash Lite Preview juga pilihan yang lumayan
    • MiniMax M2.7 juga cukup layak untuk coding, tapi Opus 4.6 masih satu tingkat di atas
    • Token Plan milik MiniMax lebih murah, dan penggunaan agen juga diizinkan secara eksplisit
    • Saya rasa kalau pakai Gemini Flash3 saja hasilnya lebih baik daripada Haiku
  • 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

    • Tapi IRC sudah punya bouncer sejak lama, jadi secara teknis implementasi at-least-once tetap memungkinkan
  • 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

    • Tapi kalau permintaan seperti “tolong analisis kerentanan di halaman pembayaran” atau “tolong cari secret key yang di-hardcode” dimungkinkan, maka ini berisiko dari sisi keamanan
  • 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

    • Ada cara yang lebih sederhana juga. Buat thread chat baru untuk tiap pengunjung dan tutup setelah jangka waktu tertentu.
      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

    • Saya penasaran apakah IRC masih punya batas panjang pesan
    • Saya juga memakainya dengan cara yang sama, jadi akan menarik kalau bisa saling membandingkan
  • 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

    • Saya memakai struktur yang menaikkan permintaan dari Haiku ke Opus saat permintaan menjadi lebih kompleks. Terinspirasi dari konsep “think hard” di Claude Code
    • Jika pesan “An error occurred” diganti menjadi “Saat ini pengguna sedang banyak. Silakan coba lagi nanti”, itu mungkin akan terlihat lebih menarik bagi perekrut
  • 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

    • Akan lebih bagus lagi kalau bot itu juga mengerjakan tugas take-home tanpa bayaran sebagai gantinya. Lalu bot HR menilai hasilnya untuk menentukan perekrutan
    • Dulu Triplebyte pernah mencoba hal serupa, dan rasanya sudah waktunya bangkit lagi
    • Namun UI rekrutmen tiap perusahaan berbeda-beda, jadi bot akan butuh banyak pembelajaran untuk bisa melamar otomatis ke semua situs
    • Kalau sistem seperti ini muncul, bisa saja dipenuhi pelamar spam atau akun palsu
    • Saya sebenarnya sudah mengerjakan proyek seperti ini