Tag: claude-code

  • Troubleshoot Zimbra Level 1: MTA yang Berhenti

    Troubleshoot Zimbra Level 1: MTA yang Berhenti

    Tulisan saya kali ini yaitu, catatan satu ronde latihan drill troubleshooting di lab Zimbra. Aturannya saya susun sendiri bersama Claude Code, Claude yang menyuntikkan fault ke server lab tanpa memberi tahu apa yang dirusak, saya yang mendiagnosis dan memperbaiki. Level 1 ini pemanasan, satu masalah dengan error yang seharusnya cukup terang kalau saya cek di tempat yang benar. Ada baiknya baca dulu Latihan Troubleshooting dengan Claude Code di tulisan saya sebelumnya agar paham konsep dan aturan main drill-nya.

    Tiket

    Sesi dimulai seperti biasa, saya pilih platform Zimbra dan level 1, Claude memastikan SSH ke node lab jalan dan snapshot sudah ada, lalu menyuntikkan fault-nya secara diam-diam. Yang saya terima cuma ini:

    Tiket: «User lapor email keluar dan masuk berhenti total sejak beberapa menit lalu. Webmail masih bisa login, tapi kirim email nyangkut.»

    Aturan mainnya disebutkan di awal: saya kerja sendiri, boleh minta hint kalau perlu, dan tiap hint mengurangi skor.

    Investigasi

    Tidak ada informasi lain selain tiket di atas. Karena webmail masih bisa diakses tapi pengiriman macet, langkah pertama saya selalu sama, lihat status zimbra dulu:

    Via CLI

    su - zimbra
    zmcontrol status

    Ketemu. Komponen mta dan yang berhubungan dengan mta stopped, komponen yang menjalankan Postfix. Ini sesuai dengan tanda-tanda nya, webmail (mailbox) jalan, tapi pengiriman (mta) mati.

    Tips: Sebelum menyalakan apa pun, cek dulu antrian mail untuk pastikan email cuma tertahan, bukan hilang:

    su - zimbra -c 'mailq'

    Coba Fitur Hint

    Karena ada fitur hint di drill ini, saya sengaja minta supaya tahu seperti apa bentuk hint nya.

    Claude kasih Hint 1 (dari 3 hint) sesuai urutan bertingkat yang sudah dia siapkan: «Ini bukan masalah mailbox/store, gejalanya di layer pengiriman (MTA).» Isinya memang sudah ketemu lewat zmcontrol status, jadi saya lanjut ke fix tanpa minta hint kedua.

    Fix

    Tinggal nyalakan lagi komponen MTA-nya:

    su - zimbra 
    zmmtactl start

    Setelah zmcontrol status saya cek ulang dan semua komponen kembali «Running», saya bilang ke Claude Code kalau saya sudah selesai.

    Verifikasi

    Claude tidak langsung percaya status «Running» saja. Dia jalankan verifikasi fungsional lewat SSH ke node lab: cek ulang zmcontrol status, cek mailq untuk pastikan antrian yang tadi tertahan mulai jalan, lalu kirim email uji dan bandingkan hasilnya ke baseline yang direkam sebelum fault disuntikkan. Semua cocok, gejalanya hilang karena root cause-nya memang sudah benar diperbaiki, bukan cuma ditutupi.

    Debrief dan skor

    Baru di titik ini Claude membuka kartunya. Root cause-nya persis seperti dugaan saya, service MTA (Postfix) dihentikan manual lalu dinyalakan kembali. Claude jelaskan kenapa fault ini realistis, di dunia nyata ini sering kejadian waktu ada maintenance atau restart manual yang lupa dinyalakan lagi setelahnya.

    Skor saya 8.5 dari 10, dipotong karena pakai satu hint meski sebenarnya lebih untuk coba-coba daripada kebutuhan. Hasil ini dicatat ke progress.md di project drill saya, jadi kelihatan riwayatnya kalau saya naik level nanti.

    Penutup

    Ronde ini singkat, cek status dulu secara menyeluruh sebelum menyentuh apa pun yang kelihatan mati. Level 1 memang dirancang begitu, satu masalah, error yang cukup terang asal dicek di tempat yang benar. Sampai jumpa di Level 2.

  • Latihan Troubleshooting dengan Claude Code

    Latihan Troubleshooting dengan Claude Code

    Jadi hari ini saya mencoba mengasah kemampuan troubleshooting, khususnya pada aplikasi yang dapat diimplementasikan secara on-premise seperti mail server (Zimbra dan Carbonio), platform virtualisasi (Proxmox VE), serta file management (Nextcloud). Menurut saya, kemampuan troubleshooting adalah salah satu keterampilan yang harus terus diasah karena sangat dibutuhkan saat mengelola infrastruktur. Namun, ada satu hal yang sampai sekarang masih sering membuat saya bingung ketika ingin belajar troubleshooting, diantara lain:

    • Saya gonta-ganti konfigurasinya sendiri (oprek)
    • Menunggu ada update/patch/bug terbaru
    • atau, menunggu aplikasi failure/error dengan sendirinya

    Kalau oprek sendiri dengan skill teknis minim seperti saya malah-malah merembet kemana-mana, kalau menunggu update bisa berbulan-bulan, dan apalagi kalau nunggu aplikasi failure nanti malah tidak latihan.

    Masalahnya, menunggu insiden itu tidak efisien. Jadi saya balik logikanya. Saya menjadikan Claude Code untuk merusak lab saya sendiri dengan pola yang realistis, lalu saya yang mendiagnosis dan memperbaiki. Anggap saja latihan tanding, tapi lawannya adalah AI yang paham error apa saja yang biasa terjadi di Proxmox, Nextcloud, Zimbra, atau Carbonio.

    Konsepnya

    Aturannya cuma satu yang penting: Claude berperan sebagai fasilitator, bukan tukang benerin. Tugas dia merusak, memberi gejala, dan memberi petunjuk kalau saya mentok. Yang mendiagnosis dan memperbaiki tetap saya.

    Alurnya kira-kira begini:

    1. Saya pilih platform dan level kesulitan.
    2. Claude menyuntikkan satu fault via SSH, tanpa memberi tahu apa yang dia rusak. (sebenernya mau pake MCP tapi belum paham)
    3. Saya cuma dikasih gejala, seperti tiket dari user. Misalnya “email keluar nyangkut sejak pagi”.
    4. Saya investigasi sendiri. Kalau mentok, boleh minta hint, tapi skornya berkurang.
    5. Setelah saya bilang selesai, Claude verifikasi dan kasih skor.

    Kuncinya ada di poin ketiga. Saya tidak dikasih tahu root cause-nya. Persis seperti simulasi production, saya cuma pegang gejala dan harus menelusuri sendiri sampai ke akar.

    Level 1 sampai 5

    Biar latihannya naik kelas, saya bagi lima level. Makin tinggi, makin dekat ke insiden produksi yang sebenarnya.

    LevelKarakter faultContoh
    1Satu masalah jelas, error terang di logService ke-stop, typo di config
    2Satu masalah, gejala kurang gamblangPort diblok firewall, cert expired
    3Gejala tak langsung lewat dependensiLDAP mati bikin semua auth gagal
    4Cascading, satu akar banyak gejalaDisk penuh, quorum cluster hilang
    5Beberapa masalah sekaligus, butuh metodeFault kombinasi lintas layer

    Level 1 itu pemanasan. Level 5 memaksa saya berpikir sistematis, memisahkan gejala satu per satu, dan menahan diri dari asumsi buru-buru.

    Penutup: Backup, backup, backup

    Sengaja merusak sistem tetap butuh rem. Ada dua aturan yang dibutuhkan

    • Pertama, backup atau snapshot dulu sebelum apa pun.
    • Kedua, kunci jawaban terpisah di folder sementara. Kalau saya baca duluan, latihan jadi percuma. Biar disiplin aja.

    Latihan ini akan dijalankan besok. Stay tune!

  • Menulis Blog di WordPress dengan Claude Code

    Menulis Blog di WordPress dengan Claude Code

    Halo kembali lagi dengan Rafi. Kali ini saya ingin berbagi pengalaman yang cukup menarik tentang dua hal: WordPress MCP Abilities dan Claude Code dengan Nvidia NIM. Keduanya sebenarnya berbeda, namun saya mencoba menggabungkannya karena bisa menjadi solusi yang lengkap.

    Tulisan ini terinspirasi dari Mas Afatyo dan Mentor saya Pak Nugi di Excellent. Jadi, Mas Afatyo ini menulis di github tentang integrasi wordpress dengan claude code. Namun disini harus menggunakan claude code yang berbayar (pro plan). Namun, ternyata Pak Nugi punya solusi untuk mengakali hal ini (meskipun terasa ilegal) pada tulisan di artikelnya.

    Sebelumnya, saya sudah terbiasa menggunakan Claude versi web untuk kegiatan dan pekerjaan sehari-hari. Namun, untuk mencoba claude code memang memerlukan subscription dari Antrhopic.

    Latar Belakang

    Saya biasa menulis blog sehari-hari mengenai segala hal tentang IT dan untuk menulis biasanya dibantu dengan AI (ChatGPT atau Claude). Lalu dari inspirasi diatas saya bertanya, “Kenapa nulis blog masih harus pindah konteks ke browser lagi?” padahal urusan di terminal atau CLI sudah jadi kebiasaan. Idealnya, dari terminal yang sama saya pakai dan ngurus server, saya bisa bilang ke AI “bikin draft post tentang X, simpan di WordPress”, lalu tinggal review di dashboard admin wordpress.

    Komponennya sebenarnya sudah ada semua, hanya butuh dirangkai:

    • Claude Code — CLI agentic dari Anthropic yang bisa manggil tools via MCP (Model Context Protocol).
    • WordPress 6.8+ — yang sudah punya REST API dan, lewat plugin tertentu, bisa di-bridge ke MCP.
    • Sebuah plugin penghubung yang menerjemahkan “buat post” jadi panggilan REST API yang aman.

    Bahan-Bahan

    1. Tutorial Claude Code Gratis dari Pak Nugi

    Pak Nugi Abdiansyah menulis panduan lengkap berbahasa Indonesia: Cara Menjalankan Claude Code Gratis dengan NVIDIA NIM (Mac & Linux). Inti dari tutorial ini: pakai proyek open-source free-claude-code sebagai proxy lokal yang membuat Claude Code mengira sedang ngomong ke API Anthropic, padahal request-nya dialihkan ke NVIDIA NIM yang punya tier gratis sampai 40 request/menit.

    Saya tidak akan ulang langkah per langkahnya di sini — silakan baca langsung di artikel asli Pak Nugi karena penjelasannya sudah sangat lengkap, dari install uv, ambil API key NVIDIA, sampai bikin alias fcc-claude.

    2. Plugin wp-blog-abilities dari Mas Afatyo

    Plugin ini dibuat oleh Mas Afatyo dan source-nya ada di github.com/afatyoo/wp-blog-abilities. Fungsinya untuk mendaftarkan empat abilities untuk post WordPress:

    • blog/create-post
    • blog/update-post
    • blog/list-posts
    • blog/delete-post

    Secara otomatis ditemukan oleh WordPress MCP Adapter. Hasilnya, tool-tool ini bisa dipanggil oleh client MCP manapun, termasuk Claude Code.

    Bagusnya, semua akses tetap melalui autentikasi WordPress standar (Application Password + capability check), jadi tidak ada endpoint publik yang bocor.

    Catatan Penting

    Meskipun judulnya “Claude Code gratis”, namun artikel yang ditulis Pak Nugi yang jalan di balik layar itu bukan model Claude. Proxy free-claude-code meneruskan request ke model lain (default-nya stepfun-ai/step-3.5-flash, bisa juga Kimi, DeepSeek, dst) lalu membungkus respon-nya supaya terlihat seperti Claude.

    Implikasinya untuk percobaan ini:

    • Privasi: isi draft yang dibikin akan transit ke server NVIDIA NIM. Untuk blog publik tidak masalah, tapi kalau mau bikin draft yang sensitif (laporan internal, dll) perlu dipertimbangkan lagi.

    Kalau kalian tetap mau lanjut, berikut langkah-langkahnya.

    Langkah 1 — Setup Claude Code + NVIDIA NIM

    Ikuti tutorial dari blog Pak Nugi sampai selesai (langkah 1 sampai 6). Pastikan di akhir, Anda bisa menjalankan fcc-claude dan banner Claude Code muncul tanpa diminta login.

    Tweak kecil yang saya pakai berbeda dari tutorial:

    • Saya jalankan proxy-nya di dalam tmux sesuai saran “Pro Tip” Pak Nugi, jadi terminal utama tetap bersih.

    Tes cepat sebelum lanjut:

    fcc-claude
    # di prompt Claude Code, ketik:
    > apa yang bisa kamu lakukan?

    Output:

    Kalau jawabannya keluar lancar, fondasinya sudah siap.

    Langkah 2 — Install Plugin di WordPress

    Ada dua plugin yang harus saya install (sesuai instruksi di README afatyo):

    1. mcp-adapter — bridge resmi dari WordPress.org yang mengubah ability jadi MCP server.
    2. wp-blog-abilities — plugin afatyo yang mendaftarkan abilities khusus untuk blog post.

    Karena saya pegang akses SSH ke VPS WordPress, saya pilih jalur git clone:

    cd /var/www/html/wp-content/plugins
    sudo -u www-data git clone https://github.com/WordPress/mcp-adapter.git
    sudo -u www-data git clone https://github.com/afatyoo/wp-blog-abilities.git

    Lalu ke WP Admin → Plugins, aktifkan keduanya. Penting: aktifkan mcp-adapter dulu, baru wp-blog-abilities, supaya hook registrasi ability tidak gagal.

    Buat yang nggak punya akses SSH, Mas Afatyo juga sudah menyediakan ZIP yang bisa di-upload via Plugins → Add New → Upload Plugin.

    Langkah 3 — Application Password

    WordPress butuh kredensial khusus untuk dipakai aplikasi luar. Jangan pakai password login Anda — itu bahaya dan juga tidak akan jalan.

    1. Buka WP Admin → Users → Profile.
    2. Scroll ke bagian Application Passwords.
    3. Isi nama (saya pakai Claude MCP via NIM) dan klik Add New Application Password.
    4. Salin password yang muncul — formatnya xxxx xxxx xxxx xxxx xxxx xxxx dengan spasi. Password ini hanya tampil sekali.

    Simpan di password manager karena kalau hilang harus generate ulang.

    Langkah 4 — Konfigurasi .mcp.json

    Di laptop saya, saya buat file .mcp.json sesuai template di README afatyo:

    {
      "mcpServers": {
        "wordpress-blog": {
          "command": "npx",
          "args": ["-y", "@automattic/mcp-wordpress-remote@latest"],
          "env": {
            "WP_API_URL": "https://domain-blog-anda.com/wp-json/mcp/mcp-adapter-default-server",
            "WP_API_USERNAME": "username-kalian",
            "WP_API_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx"
          }
        }
      }
    }

    Ganti tiga baris di dalam env dengan nilai milik Anda sendiri. Spasi pada WP_API_PASSWORD tidak perlu dihapus, biarkan apa adanya seperti yang WordPress kasih.

    Langkah 5 — Restart Claude Code

    Bagian ini saya sempat trouble. /exit di Claude Code tidak cukup, perubahan .mcp.json hanya ke-detect kalau prosesnya dimatikan (kill) lalu start lagi. Di terminal saya:

    # keluar dulu dari sesi sebelumnya
    # pastikan tidak ada proses claude yang nyangkut:
    pgrep -a claude
    
    # kalau ada, kill
    pkill -f "claude"
    
    # baru jalankan ulang
    fcc-claude

    Setelah Claude Code jalan lagi, saya tes konektivitas MCP:

    > List all published posts on my blog

    Output:

    Dan voila — daftar published post saya muncul, lengkap dengan ID, judul, dan tanggal modifikasi.

    Langkah 6 — Buat Blog

    Blog ini ditulis dengan AI, namun saya sendiri yang mengedit dan mereview, jadi mohon maaf kalau ada kesalahan atau kata-kata yang kaku.

    Membuat blog dari dua sumber:

    Kalian juga bisa minta AI untuk mengedit tulisan sesuai dengan yang kalian mau:

    Catatan Setelah Pemakaian

    Supaya post ini tidak cuma jadi hype, ini hal-hal yang saya rasakan setelah beberapa hari:

    Yang jalan dengan baik:

    • List, create, update, delete post — semuanya solid. Application Password jalan, capability check WordPress jalan, tidak ada endpoint yang nyeleneh.
    • Workflow AI buat draft post → Review dan Publish Mandiri sangat cocok dengan setup ini. Jangan biarkan AI langsung publish.

    Perlu diakali:

    • Karena modelnya bukan Claude beneran, saya merasakan output yang kadang kaku atau struktur paragrafnya kurang natural. Cantumkan di /memory agar AI agent paham output yang diinginkan.
    • Limit 40 request/menit dari NVIDIA NIM aman buat satu sesi penulisan, tapi kalau dipakai eksplorasi panjang (banyak tool call baca-tulis post), bisa kena rate limit.
    • Untuk post yang SEO-optimized dengan struktur heading kompleks, perlu dilakukan review mandiri.

    Penutup & Kredit

    Eksperimen ini sebenarnya hanya nyambungin dua kerjaan orang lain dengan kabel pendek. Tanpa dua artikel/proyek di bawah ini, saya tidak akan bisa mencobanya. Terima kasih kepada:

    • 🙏 Pak Nugi (nugi.biz) — untuk panduan lengkap setup Claude Code gratis pakai NVIDIA NIM. Tutorialnya rapi, ada troubleshooting, dan langsung saya pakai tanpa perlu nyari ke sumber lain.
    • 🙏 Mas Afatyo (github.com/afatyoo) — untuk plugin wp-blog-abilities yang membungkus operasi blog jadi MCP abilities yang bersih dan aman. Permission callback-nya ketat, sanitasi input lengkap, dan README-nya termasuk dokumentasi yang rapi.
    • 🙏WordPress –  MCP Adapter  — untuk plugin MCP Adapter

    Kalau Anda merasa terbantu seperti saya, bisa mampir ke blog Pak Nugi dan bintangi repo Mas Afatyo di GitHub, kontribusi seperti ini yang membuat dunia per-IT-an menjadi lebih hidup.

    Selamat ngeblog dari terminal!


    Disclaimer percobaan: Saya jalankan setup ini hanya di lingkungan pribadi untuk eksperimen. Untuk pemakaian produksi atau yang melibatkan data sensitif, pertimbangkan pakai API Anthropic resmi (atau LLM lain yang Anda host sendiri) supaya privasi data dan kualitas output bisa dikontrol penuh.

    Tulisan ini dibuat oleh AI