[{"data":1,"prerenderedAt":4165},["ShallowReactive",2],{"tech-setup-scraping-instagram-tiktok-threads-hermes-browser-tailscale":3,"tech-summaries":3308},{"id":4,"title":5,"author":6,"body":7,"category":3291,"date":3292,"description":3293,"extension":2138,"image":3294,"meta":3295,"navigation":139,"path":3296,"readingTime":3297,"seo":3298,"stem":3299,"tags":3300,"__hash__":3307},"tech\u002Ftech\u002Fsetup-scraping-instagram-tiktok-threads-hermes-browser-tailscale.md","Tutorial: Scraping Instagram, TikTok, Threads dengan OpenClaw, Hermes + Browser + Tailscale","Zainul Fanani",{"type":8,"value":9,"toc":3238},"minimark",[10,30,34,40,43,46,69,72,77,80,269,272,276,279,301,304,324,327,331,334,351,360,365,380,383,387,390,413,416,420,423,447,450,461,465,468,476,479,485,488,494,498,503,547,553,557,604,607,634,638,641,657,660,676,679,685,688,699,702,764,771,775,779,782,804,807,861,864,910,921,924,941,944,948,951,991,994,998,1004,1007,1011,1018,1021,1187,1198,1201,1237,1244,1277,1280,1284,1288,1291,1295,1301,1304,1317,1321,1327,1412,1418,1421,1487,1490,1570,1573,1577,1583,1792,1795,1799,1802,1907,1910,1962,1965,2012,2016,2019,2058,2061,2067,2251,2254,2277,2281,2284,2416,2423,2439,2442,2446,2449,2452,2463,2466,2485,2488,2492,2496,2499,2520,2523,2535,2540,2564,2568,2571,2588,2591,2608,2612,2615,2644,2647,2677,2683,2687,2690,2726,2733,2737,2740,2761,2765,2768,2772,2850,2855,2897,2901,2905,2925,2929,2943,2947,2951,3005,3009,3042,3046,3049,3118,3122,3126,3129,3134,3137,3158,3162,3164,3169,3171,3192,3196,3199,3202,3206,3234],[11,12,13],"blockquote",{},[14,15,16,17,21,22,29],"p",{},"📎 ",[18,19,20],"strong",{},"Source:"," ",[23,24,28],"a",{"href":25,"rel":26},"https:\u002F\u002Fgithub.com\u002Ffanani-radian\u002Fopenclaw-sumopod",[27],"nofollow","openclaw-sumopod"," — view on GitHub & star ⭐",[31,32,5],"h1",{"id":33},"tutorial-scraping-instagram-tiktok-threads-dengan-openclaw-hermes-browser-tailscale",[14,35,36],{},[37,38,39],"em",{},"24 menit baca - Beginner sampai Intermediate",[41,42],"hr",{},[14,44,45],{},"Pernah kepikiran scraping data dari Instagram, TikTok, atau Threads tapi bingung mulai dari mana? API resmi terbatas, unofficial API sering ban, dan headless browser gampang ke-detect.",[14,47,48,49,52,53,56,57,60,61,64,65,68],{},"Ada pendekatan yang lebih waras: ",[18,50,51],{},"pakai browser yang sudah login",", jalan dari ",[18,54,55],{},"jaringan rumah sendiri",", dan akses remote-nya lewat ",[18,58,59],{},"Tailscale",". Sebagai operator browser-nya, kamu bisa pakai ",[18,62,63],{},"OpenClaw"," atau ",[18,66,67],{},"Hermes Agent"," — setup browser-nya sama.",[14,70,71],{},"Tutorial ini cover setup end-to-end: instalasi kedua tool, browser profile khusus, Tailscale tunnel, scraping policy yang etis, plus troubleshooting.",[73,74,76],"h2",{"id":75},"ringkasan-operasional","Ringkasan operasional",[14,78,79],{},"Kita akan membuat arsitektur seperti ini:",[81,82,87],"pre",{"className":83,"code":84,"language":85,"meta":86,"style":86},"language-mermaid shiki shiki-themes github-light github-dark","flowchart TB\n    U[Operator atau Hermes Chat] --> H[Hermes Agent]\n    H --> BT[Browser Tool Layer]\n    BT --> C[Local Chrome atau Camofox]\n    C --> S1[Instagram]\n    C --> S2[TikTok]\n    C --> S3[Threads]\n\n    subgraph Home[Mesin Rumah]\n        H\n        BT\n        C\n        P[Persistent Browser Profile]\n        E[Export JSON atau CSV]\n        C --> P\n        H --> E\n    end\n\n    subgraph Tailnet[Tailscale Tailnet]\n        R[Remote Laptop atau VPS]\n        TS[Tailscale IP Rumah 100.x.y.z]\n        R --> TS\n        TS --> H\n    end\n\n    E --> D[Downstream: Sheets, Database, atau Markdown Report]\n\n    style Home fill:#e3f2fd,stroke:#1565c0\n    style Tailnet fill:#fff3e0,stroke:#e65100\n    style E fill:#e8f5e9,stroke:#2e7d32\n","mermaid","",[88,89,90,98,104,110,116,122,128,134,141,147,153,159,165,171,177,183,189,195,200,206,212,218,224,230,235,240,246,251,257,263],"code",{"__ignoreMap":86},[91,92,95],"span",{"class":93,"line":94},"line",1,[91,96,97],{},"flowchart TB\n",[91,99,101],{"class":93,"line":100},2,[91,102,103],{},"    U[Operator atau Hermes Chat] --> H[Hermes Agent]\n",[91,105,107],{"class":93,"line":106},3,[91,108,109],{},"    H --> BT[Browser Tool Layer]\n",[91,111,113],{"class":93,"line":112},4,[91,114,115],{},"    BT --> C[Local Chrome atau Camofox]\n",[91,117,119],{"class":93,"line":118},5,[91,120,121],{},"    C --> S1[Instagram]\n",[91,123,125],{"class":93,"line":124},6,[91,126,127],{},"    C --> S2[TikTok]\n",[91,129,131],{"class":93,"line":130},7,[91,132,133],{},"    C --> S3[Threads]\n",[91,135,137],{"class":93,"line":136},8,[91,138,140],{"emptyLinePlaceholder":139},true,"\n",[91,142,144],{"class":93,"line":143},9,[91,145,146],{},"    subgraph Home[Mesin Rumah]\n",[91,148,150],{"class":93,"line":149},10,[91,151,152],{},"        H\n",[91,154,156],{"class":93,"line":155},11,[91,157,158],{},"        BT\n",[91,160,162],{"class":93,"line":161},12,[91,163,164],{},"        C\n",[91,166,168],{"class":93,"line":167},13,[91,169,170],{},"        P[Persistent Browser Profile]\n",[91,172,174],{"class":93,"line":173},14,[91,175,176],{},"        E[Export JSON atau CSV]\n",[91,178,180],{"class":93,"line":179},15,[91,181,182],{},"        C --> P\n",[91,184,186],{"class":93,"line":185},16,[91,187,188],{},"        H --> E\n",[91,190,192],{"class":93,"line":191},17,[91,193,194],{},"    end\n",[91,196,198],{"class":93,"line":197},18,[91,199,140],{"emptyLinePlaceholder":139},[91,201,203],{"class":93,"line":202},19,[91,204,205],{},"    subgraph Tailnet[Tailscale Tailnet]\n",[91,207,209],{"class":93,"line":208},20,[91,210,211],{},"        R[Remote Laptop atau VPS]\n",[91,213,215],{"class":93,"line":214},21,[91,216,217],{},"        TS[Tailscale IP Rumah 100.x.y.z]\n",[91,219,221],{"class":93,"line":220},22,[91,222,223],{},"        R --> TS\n",[91,225,227],{"class":93,"line":226},23,[91,228,229],{},"        TS --> H\n",[91,231,233],{"class":93,"line":232},24,[91,234,194],{},[91,236,238],{"class":93,"line":237},25,[91,239,140],{"emptyLinePlaceholder":139},[91,241,243],{"class":93,"line":242},26,[91,244,245],{},"    E --> D[Downstream: Sheets, Database, atau Markdown Report]\n",[91,247,249],{"class":93,"line":248},27,[91,250,140],{"emptyLinePlaceholder":139},[91,252,254],{"class":93,"line":253},28,[91,255,256],{},"    style Home fill:#e3f2fd,stroke:#1565c0\n",[91,258,260],{"class":93,"line":259},29,[91,261,262],{},"    style Tailnet fill:#fff3e0,stroke:#e65100\n",[91,264,266],{"class":93,"line":265},30,[91,267,268],{},"    style E fill:#e8f5e9,stroke:#2e7d32\n",[14,270,271],{},"Yang penting bukan sekadar bisa membuka halaman. Yang penting adalah session login tidak hilang, akses Hermes tidak dipublikasikan ke internet, dan scraping dilakukan dengan batas yang jelas.",[73,273,275],{"id":274},"kapan-pendekatan-ini-masuk-akal","Kapan pendekatan ini masuk akal",[14,277,278],{},"Saya pakai framing ini untuk pekerjaan yang butuh observasi UI, bukan untuk mengambil data massal secara agresif. Contoh yang relatif masuk akal:",[280,281,282,286,289,292,295,298],"ul",{},[283,284,285],"li",{},"monitoring postingan dari akun milik sendiri atau akun brand yang dikelola;",[283,287,288],{},"membuat report engagement untuk campaign internal;",[283,290,291],{},"membaca komentar publik untuk kebutuhan customer support;",[283,293,294],{},"mengambil screenshot bukti perubahan UI atau konten;",[283,296,297],{},"membuat daftar URL postingan untuk dianalisis manual;",[283,299,300],{},"research kompetitor dalam volume kecil dan wajar.",[14,302,303],{},"Yang tidak saya rekomendasikan:",[280,305,306,309,312,315,318,321],{},[283,307,308],{},"mengambil data personal skala besar;",[283,310,311],{},"menghindari login challenge, CAPTCHA, atau paywall;",[283,313,314],{},"membuat bot engagement palsu;",[283,316,317],{},"memanen profil, nomor, email, atau identitas orang;",[283,319,320],{},"menjalankan scraping paralel agresif yang mengganggu layanan;",[283,322,323],{},"melanggar Terms of Service platform.",[14,325,326],{},"Bagian etika ini bukan formalitas. Untuk sosial media, batas teknis dan batas legal sering terlihat mirip, tapi konsekuensinya berbeda.",[73,328,330],{"id":329},"kenapa-browser-login-lebih-stabil-daripada-api-unofficial","Kenapa browser login lebih stabil daripada API unofficial",[14,332,333],{},"Instagram, TikTok, dan Threads punya permukaan web yang sering berubah. Unofficial API bisa cepat rusak karena endpoint internal berubah, token berubah, atau request pattern dianggap tidak normal. Browser automation punya tradeoff yang berbeda:",[280,335,336,339,342,345,348],{},[283,337,338],{},"lebih lambat daripada API;",[283,340,341],{},"lebih mahal secara resource;",[283,343,344],{},"lebih mudah diaudit karena alurnya terlihat;",[283,346,347],{},"lebih dekat dengan perilaku user normal;",[283,349,350],{},"lebih cocok untuk data yang memang terlihat di UI setelah login.",[14,352,353,355,356,359],{},[18,354,63],{}," punya ",[88,357,358],{},"browser"," tool bawaan yang bisa connect ke CDP browser — snapshot halaman, klik, type, navigate, screenshot. Jadi kamu bisa kasih instruction ke OpenClaw via Telegram, dan dia langsung operasikan browser yang sudah login.",[14,361,362,364],{},[18,363,67],{}," juga mendukung browser automation dengan beberapa backend: Browserbase, Browser Use, Firecrawl, Camofox local mode, local Chromium-family via CDP, dan local browser mode. Untuk browser login + IP rumah, dua opsi paling relevan:",[366,367,368,374],"ol",{},[283,369,370,373],{},[18,371,372],{},"Local Chromium-family CDP",": Hermes menempel ke Chrome, Brave, Chromium, atau Edge yang kita jalankan sendiri.",[283,375,376,379],{},[18,377,378],{},"Camofox local mode dengan persistence",": Hermes memakai browser lokal berbasis Firefox\u002FCamoufox dengan profil persisten.",[14,381,382],{},"Cloud browser masih berguna untuk crawling publik, tetapi untuk sosial media yang sudah login, saya lebih suka profil lokal di mesin rumah.",[73,384,386],{"id":385},"desain-final-yang-saya-rekomendasikan","Desain final yang saya rekomendasikan",[14,388,389],{},"Baseline yang paling praktis:",[280,391,392,395,398,401,404,407,410],{},[283,393,394],{},"satu mesin rumah selalu online, misalnya mini PC, laptop lama, atau desktop;",[283,396,397],{},"Tailscale aktif di mesin rumah dan device operator;",[283,399,400],{},"Hermes berjalan di mesin rumah;",[283,402,403],{},"browser berjalan di mesin rumah dengan profile khusus scraping;",[283,405,406],{},"akun sosial login manual di browser tersebut;",[283,408,409],{},"hasil scraping disimpan lokal sebagai JSON\u002FCSV\u002FMarkdown;",[283,411,412],{},"akses remote hanya lewat Tailscale IP, bukan port publik.",[14,414,415],{},"Jangan pakai browser utama pribadi. Buat profil khusus. Tujuannya supaya cookie kerja, tab, extension, dan data pribadi tidak tercampur.",[73,417,419],{"id":418},"prasyarat","Prasyarat",[14,421,422],{},"Di mesin rumah:",[280,424,425,428,435,438,441,444],{},[283,426,427],{},"Linux, macOS, atau WSL2 yang stabil untuk menjalankan Hermes;",[283,429,430,431,434],{},"Python dan ",[88,432,433],{},"uv"," atau installer Hermes sesuai dokumentasi resmi;",[283,436,437],{},"Chrome\u002FChromium\u002FBrave\u002FEdge untuk mode CDP, atau Docker untuk Camofox;",[283,439,440],{},"Tailscale sudah login ke tailnet yang sama dengan device operator;",[283,442,443],{},"akun Instagram, TikTok, dan Threads yang boleh dipakai untuk pekerjaan ini;",[283,445,446],{},"storage lokal untuk output scraping.",[14,448,449],{},"Di device remote:",[280,451,452,455,458],{},[283,453,454],{},"Tailscale login ke tailnet yang sama;",[283,456,457],{},"browser atau terminal untuk mengakses Hermes;",[283,459,460],{},"permission tailnet yang hanya memberi akses ke port yang diperlukan.",[73,462,464],{"id":463},"struktur-repo-lokal-yang-disarankan","Struktur repo lokal yang disarankan",[14,466,467],{},"Saya sarankan memisahkan konfigurasi, prompt, output, dan log. Contoh struktur:",[81,469,474],{"className":470,"code":472,"language":473,"meta":86},[471],"language-text","social-browser-scraper\u002F\n|-- README.md\n|-- .env.example\n|-- config\u002F\n|   |-- targets.instagram.json\n|   |-- targets.tiktok.json\n|   |-- targets.threads.json\n|   |-- scraping-policy.yaml\n|-- prompts\u002F\n|   |-- instagram-post-extract.md\n|   |-- tiktok-profile-check.md\n|   |-- threads-replies-summary.md\n|-- scripts\u002F\n|   |-- run-hermes-task.sh\n|   |-- validate-output.py\n|   |-- export-to-csv.py\n|-- output\u002F\n|   |-- raw\u002F\n|   |-- normalized\u002F\n|   |-- screenshots\u002F\n|-- logs\u002F\n","text",[88,475,472],{"__ignoreMap":86},[14,477,478],{},"Untuk repo GitHub, tutorial ini bisa masuk ke:",[81,480,483],{"className":481,"code":482,"language":473,"meta":86},[471],"openclaw-sumopod\u002Ftutorials\u002Fhermes-browser-social-scraping.md\n",[88,484,482],{"__ignoreMap":86},[14,486,487],{},"Untuk blog.fanani.co, format Nuxt Content yang konsisten dengan blueprint bisa masuk ke:",[81,489,492],{"className":490,"code":491,"language":473,"meta":86},[471],"content\u002Ftech\u002Fsetup-scraping-instagram-tiktok-threads-hermes-browser-tailscale.md\n",[88,493,491],{"__ignoreMap":86},[73,495,497],{"id":496},"langkah-1-install-ai-agent-di-mesin-rumah","Langkah 1: install AI Agent di mesin rumah",[499,500,502],"h3",{"id":501},"opsi-a-openclaw","Opsi A: OpenClaw",[81,504,508],{"className":505,"code":506,"language":507,"meta":86,"style":86},"language-bash shiki shiki-themes github-light github-dark","npm i -g openclaw\nopenclaw gateway init\nopenclaw gateway start\n","bash",[88,509,510,527,538],{"__ignoreMap":86},[91,511,512,516,520,524],{"class":93,"line":94},[91,513,515],{"class":514},"sScJk","npm",[91,517,519],{"class":518},"sZZnC"," i",[91,521,523],{"class":522},"sj4cs"," -g",[91,525,526],{"class":518}," openclaw\n",[91,528,529,532,535],{"class":93,"line":100},[91,530,531],{"class":514},"openclaw",[91,533,534],{"class":518}," gateway",[91,536,537],{"class":518}," init\n",[91,539,540,542,544],{"class":93,"line":106},[91,541,531],{"class":514},[91,543,534],{"class":518},[91,545,546],{"class":518}," start\n",[14,548,549,550,552],{},"OpenClaw punya ",[88,551,358],{}," tool bawaan — nggak perlu setup tambahan. Tinggal connect ke CDP endpoint Chrome.",[499,554,556],{"id":555},"opsi-b-hermes-agent","Opsi B: Hermes Agent",[81,558,560],{"className":505,"code":559,"language":507,"meta":86,"style":86},"curl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002FNousResearch\u002Fhermes-agent\u002Fmain\u002Fscripts\u002Finstall.sh | bash\nhermes setup\nhermes setup tools\n# Pilih browser automation → Local Chromium (CDP)\n",[88,561,562,580,588,598],{"__ignoreMap":86},[91,563,564,567,570,573,577],{"class":93,"line":94},[91,565,566],{"class":514},"curl",[91,568,569],{"class":522}," -fsSL",[91,571,572],{"class":518}," https:\u002F\u002Fraw.githubusercontent.com\u002FNousResearch\u002Fhermes-agent\u002Fmain\u002Fscripts\u002Finstall.sh",[91,574,576],{"class":575},"szBVR"," |",[91,578,579],{"class":514}," bash\n",[91,581,582,585],{"class":93,"line":100},[91,583,584],{"class":514},"hermes",[91,586,587],{"class":518}," setup\n",[91,589,590,592,595],{"class":93,"line":106},[91,591,584],{"class":514},[91,593,594],{"class":518}," setup",[91,596,597],{"class":518}," tools\n",[91,599,600],{"class":93,"line":112},[91,601,603],{"class":602},"sJ8bj","# Pilih browser automation → Local Chromium (CDP)\n",[14,605,606],{},"Verifikasi keduanya bisa jalan dan connect ke browser:",[81,608,610],{"className":505,"code":609,"language":507,"meta":86,"style":86},"# OpenClaw: browser tool langsung bisa dipakai di session\n# Hermes:\nhermes --version\nhermes\n",[88,611,612,617,622,629],{"__ignoreMap":86},[91,613,614],{"class":93,"line":94},[91,615,616],{"class":602},"# OpenClaw: browser tool langsung bisa dipakai di session\n",[91,618,619],{"class":93,"line":100},[91,620,621],{"class":602},"# Hermes:\n",[91,623,624,626],{"class":93,"line":106},[91,625,584],{"class":514},[91,627,628],{"class":522}," --version\n",[91,630,631],{"class":93,"line":112},[91,632,633],{"class":514},"hermes\n",[73,635,637],{"id":636},"langkah-2-setup-tailscale-di-mesin-rumah","Langkah 2: setup Tailscale di mesin rumah",[14,639,640],{},"Install Tailscale dari dokumentasi resmi untuk OS yang dipakai, lalu login:",[81,642,644],{"className":505,"code":643,"language":507,"meta":86,"style":86},"sudo tailscale up\n",[88,645,646],{"__ignoreMap":86},[91,647,648,651,654],{"class":93,"line":94},[91,649,650],{"class":514},"sudo",[91,652,653],{"class":518}," tailscale",[91,655,656],{"class":518}," up\n",[14,658,659],{},"Cek IP tailnet mesin rumah:",[81,661,663],{"className":505,"code":662,"language":507,"meta":86,"style":86},"tailscale ip -4\n",[88,664,665],{"__ignoreMap":86},[91,666,667,670,673],{"class":93,"line":94},[91,668,669],{"class":514},"tailscale",[91,671,672],{"class":518}," ip",[91,674,675],{"class":522}," -4\n",[14,677,678],{},"Output akan terlihat seperti:",[81,680,683],{"className":681,"code":682,"language":473,"meta":86},[471],"100.88.12.34\n",[88,684,682],{"__ignoreMap":86},[14,686,687],{},"IP inilah yang nanti dipakai dari device remote. Selama device remote ada di tailnet yang sama dan ACL mengizinkan, kita bisa mengakses service di mesin rumah tanpa membuka port ke internet.",[14,689,690,691,694,695,698],{},"Jika yang dibutuhkan hanya akses ke Hermes di mesin rumah, ",[18,692,693],{},"tidak perlu subnet router",". Subnet router dipakai kalau kita ingin device lain di tailnet bisa mengakses subnet LAN di belakang mesin rumah, misalnya ",[88,696,697],{},"192.168.1.0\u002F24",". Untuk kasus ini, opsi yang lebih sempit dan aman adalah akses langsung ke Tailscale IP mesin Hermes.",[14,700,701],{},"Kalau memang butuh subnet router, alurnya:",[81,703,705],{"className":505,"code":704,"language":507,"meta":86,"style":86},"# Aktifkan IP forwarding di Linux. Simpan sesuai distro masing-masing.\necho 'net.ipv4.ip_forward = 1' | sudo tee \u002Fetc\u002Fsysctl.d\u002F99-tailscale.conf\nsudo sysctl -p \u002Fetc\u002Fsysctl.d\u002F99-tailscale.conf\n\n# Advertise subnet LAN rumah. Ganti CIDR sesuai jaringan rumah.\nsudo tailscale set --advertise-routes=192.168.1.0\u002F24\n",[88,706,707,712,731,743,747,752],{"__ignoreMap":86},[91,708,709],{"class":93,"line":94},[91,710,711],{"class":602},"# Aktifkan IP forwarding di Linux. Simpan sesuai distro masing-masing.\n",[91,713,714,717,720,722,725,728],{"class":93,"line":100},[91,715,716],{"class":522},"echo",[91,718,719],{"class":518}," 'net.ipv4.ip_forward = 1'",[91,721,576],{"class":575},[91,723,724],{"class":514}," sudo",[91,726,727],{"class":518}," tee",[91,729,730],{"class":518}," \u002Fetc\u002Fsysctl.d\u002F99-tailscale.conf\n",[91,732,733,735,738,741],{"class":93,"line":106},[91,734,650],{"class":514},[91,736,737],{"class":518}," sysctl",[91,739,740],{"class":522}," -p",[91,742,730],{"class":518},[91,744,745],{"class":93,"line":112},[91,746,140],{"emptyLinePlaceholder":139},[91,748,749],{"class":93,"line":118},[91,750,751],{"class":602},"# Advertise subnet LAN rumah. Ganti CIDR sesuai jaringan rumah.\n",[91,753,754,756,758,761],{"class":93,"line":124},[91,755,650],{"class":514},[91,757,653],{"class":518},[91,759,760],{"class":518}," set",[91,762,763],{"class":522}," --advertise-routes=192.168.1.0\u002F24\n",[14,765,766,767,770],{},"Lalu approve route dari Tailscale admin console dan batasi ACL. Jangan advertise ",[88,768,769],{},"0.0.0.0\u002F0"," untuk use case ini; itu pola exit node, bukan kebutuhan scraping browser login.",[73,772,774],{"id":773},"langkah-3-jalankan-browser-dengan-profil-khusus","Langkah 3: jalankan browser dengan profil khusus",[499,776,778],{"id":777},"opsi-a-chromechromium-dengan-cdp","Opsi A: Chrome\u002FChromium dengan CDP",[14,780,781],{},"Buat direktori profil baru:",[81,783,785],{"className":505,"code":784,"language":507,"meta":86,"style":86},"mkdir -p \"$HOME\u002F.browser-profiles\u002Fsocial-scraper\"\n",[88,786,787],{"__ignoreMap":86},[91,788,789,792,794,797,801],{"class":93,"line":94},[91,790,791],{"class":514},"mkdir",[91,793,740],{"class":522},[91,795,796],{"class":518}," \"",[91,798,800],{"class":799},"sVt8B","$HOME",[91,802,803],{"class":518},"\u002F.browser-profiles\u002Fsocial-scraper\"\n",[14,805,806],{},"Jalankan Chrome atau Chromium dengan remote debugging di localhost saja:",[81,808,810],{"className":505,"code":809,"language":507,"meta":86,"style":86},"google-chrome \\\n  --user-data-dir=\"$HOME\u002F.browser-profiles\u002Fsocial-scraper\" \\\n  --remote-debugging-address=127.0.0.1 \\\n  --remote-debugging-port=9222 \\\n  --no-first-run \\\n  --no-default-browser-check\n",[88,811,812,820,835,842,849,856],{"__ignoreMap":86},[91,813,814,817],{"class":93,"line":94},[91,815,816],{"class":514},"google-chrome",[91,818,819],{"class":522}," \\\n",[91,821,822,825,828,830,833],{"class":93,"line":100},[91,823,824],{"class":522},"  --user-data-dir=",[91,826,827],{"class":518},"\"",[91,829,800],{"class":799},[91,831,832],{"class":518},"\u002F.browser-profiles\u002Fsocial-scraper\"",[91,834,819],{"class":522},[91,836,837,840],{"class":93,"line":106},[91,838,839],{"class":522},"  --remote-debugging-address=127.0.0.1",[91,841,819],{"class":522},[91,843,844,847],{"class":93,"line":112},[91,845,846],{"class":522},"  --remote-debugging-port=9222",[91,848,819],{"class":522},[91,850,851,854],{"class":93,"line":118},[91,852,853],{"class":522},"  --no-first-run",[91,855,819],{"class":522},[91,857,858],{"class":93,"line":124},[91,859,860],{"class":522},"  --no-default-browser-check\n",[14,862,863],{},"Jika memakai Chromium:",[81,865,867],{"className":505,"code":866,"language":507,"meta":86,"style":86},"chromium \\\n  --user-data-dir=\"$HOME\u002F.browser-profiles\u002Fsocial-scraper\" \\\n  --remote-debugging-address=127.0.0.1 \\\n  --remote-debugging-port=9222 \\\n  --no-first-run \\\n  --no-default-browser-check\n",[88,868,869,876,888,894,900,906],{"__ignoreMap":86},[91,870,871,874],{"class":93,"line":94},[91,872,873],{"class":514},"chromium",[91,875,819],{"class":522},[91,877,878,880,882,884,886],{"class":93,"line":100},[91,879,824],{"class":522},[91,881,827],{"class":518},[91,883,800],{"class":799},[91,885,832],{"class":518},[91,887,819],{"class":522},[91,889,890,892],{"class":93,"line":106},[91,891,839],{"class":522},[91,893,819],{"class":522},[91,895,896,898],{"class":93,"line":112},[91,897,846],{"class":522},[91,899,819],{"class":522},[91,901,902,904],{"class":93,"line":118},[91,903,853],{"class":522},[91,905,819],{"class":522},[91,907,908],{"class":93,"line":124},[91,909,860],{"class":522},[14,911,912,913,916,917,920],{},"Kenapa bind ke ",[88,914,915],{},"127.0.0.1","? Karena CDP adalah kontrol penuh browser. Jangan expose ",[88,918,919],{},"9222"," ke LAN atau internet. Hermes yang berjalan di mesin yang sama bisa menempel ke endpoint itu tanpa membuat port publik.",[14,922,923],{},"Buka manual:",[280,925,926,931,936],{},[283,927,928],{},[88,929,930],{},"https:\u002F\u002Fwww.instagram.com\u002F",[283,932,933],{},[88,934,935],{},"https:\u002F\u002Fwww.tiktok.com\u002F",[283,937,938],{},[88,939,940],{},"https:\u002F\u002Fwww.threads.net\u002F",[14,942,943],{},"Login seperti biasa. Selesaikan 2FA atau challenge secara manual. Setelah login selesai, tutup tab yang tidak perlu, tapi jangan hapus profile directory.",[499,945,947],{"id":946},"connect-openclaw-ke-browser","Connect OpenClaw ke Browser",[14,949,950],{},"OpenClaw bisa connect ke CDP browser di mesin yang sama atau via Tailscale:",[81,952,954],{"className":505,"code":953,"language":507,"meta":86,"style":86},"# Jika OpenClaw berjalan di mesin yang sama dengan Chrome\n# Browser tool otomatis detect CDP di localhost:9222\n\n# Jika OpenClaw berjalan di VPS, arahkan ke Tailscale IP rumah\n# Configure di gateway config:\ncdpEndpoint: \"http:\u002F\u002F100.88.x.x:9222\"  # ganti dengan Tailscale IP mesin rumah\n",[88,955,956,961,966,970,975,980],{"__ignoreMap":86},[91,957,958],{"class":93,"line":94},[91,959,960],{"class":602},"# Jika OpenClaw berjalan di mesin yang sama dengan Chrome\n",[91,962,963],{"class":93,"line":100},[91,964,965],{"class":602},"# Browser tool otomatis detect CDP di localhost:9222\n",[91,967,968],{"class":93,"line":106},[91,969,140],{"emptyLinePlaceholder":139},[91,971,972],{"class":93,"line":112},[91,973,974],{"class":602},"# Jika OpenClaw berjalan di VPS, arahkan ke Tailscale IP rumah\n",[91,976,977],{"class":93,"line":118},[91,978,979],{"class":602},"# Configure di gateway config:\n",[91,981,982,985,988],{"class":93,"line":124},[91,983,984],{"class":514},"cdpEndpoint:",[91,986,987],{"class":518}," \"http:\u002F\u002F100.88.x.x:9222\"",[91,989,990],{"class":602},"  # ganti dengan Tailscale IP mesin rumah\n",[14,992,993],{},"Dari Telegram, tinggal kirim message ke OpenClaw: \"Buka Instagram dan ambil 10 post terakhir dari @brand\" — dia akan operasikan browser dan balas hasilnya.",[499,995,997],{"id":996},"connect-hermes-ke-browser","Connect Hermes ke Browser",[81,999,1002],{"className":1000,"code":1001,"language":473,"meta":86},[471],"\u002Fbrowser connect http:\u002F\u002F127.0.0.1:9222\n",[88,1003,1001],{"__ignoreMap":86},[14,1005,1006],{},"Hermes menempel ke browser yang sudah login dan bisa langsung menerima task scraping.",[499,1008,1010],{"id":1009},"opsi-b-camofox-dengan-profil-persisten","Opsi B: Camofox dengan profil persisten",[14,1012,1013,1014,1017],{},"Camofox berguna kalau ingin local anti-detection browsing dan session yang lebih terisolasi. Dari dokumentasi Hermes, konfigurasi persistence harus berada di path nested ",[88,1015,1016],{},"browser.camofox.managed_persistence",", bukan top-level.",[14,1019,1020],{},"Contoh menjalankan Camofox server dengan Docker:",[81,1022,1024],{"className":505,"code":1023,"language":507,"meta":86,"style":86},"git clone https:\u002F\u002Fgithub.com\u002Fjo-inc\u002Fcamofox-browser\ncd camofox-browser\nmake build\n\nmkdir -p \"$HOME\u002F.camofox-docker\"\ndocker run -d \\\n  --name camofox-browser \\\n  --restart unless-stopped \\\n  -p 127.0.0.1:9377:9377 \\\n  -p 127.0.0.1:6080:6080 \\\n  -e CAMOFOX_PORT=9377 \\\n  -e ENABLE_VNC=1 \\\n  -e VNC_BIND=0.0.0.0 \\\n  -e VNC_RESOLUTION=1920x1080 \\\n  -v \"$HOME\u002F.camofox-docker:\u002Froot\u002F.camofox\" \\\n  camofox-browser:latest\n",[88,1025,1026,1037,1045,1053,1057,1070,1083,1093,1103,1113,1122,1135,1147,1159,1168,1182],{"__ignoreMap":86},[91,1027,1028,1031,1034],{"class":93,"line":94},[91,1029,1030],{"class":514},"git",[91,1032,1033],{"class":518}," clone",[91,1035,1036],{"class":518}," https:\u002F\u002Fgithub.com\u002Fjo-inc\u002Fcamofox-browser\n",[91,1038,1039,1042],{"class":93,"line":100},[91,1040,1041],{"class":522},"cd",[91,1043,1044],{"class":518}," camofox-browser\n",[91,1046,1047,1050],{"class":93,"line":106},[91,1048,1049],{"class":514},"make",[91,1051,1052],{"class":518}," build\n",[91,1054,1055],{"class":93,"line":112},[91,1056,140],{"emptyLinePlaceholder":139},[91,1058,1059,1061,1063,1065,1067],{"class":93,"line":118},[91,1060,791],{"class":514},[91,1062,740],{"class":522},[91,1064,796],{"class":518},[91,1066,800],{"class":799},[91,1068,1069],{"class":518},"\u002F.camofox-docker\"\n",[91,1071,1072,1075,1078,1081],{"class":93,"line":124},[91,1073,1074],{"class":514},"docker",[91,1076,1077],{"class":518}," run",[91,1079,1080],{"class":522}," -d",[91,1082,819],{"class":522},[91,1084,1085,1088,1091],{"class":93,"line":130},[91,1086,1087],{"class":522},"  --name",[91,1089,1090],{"class":518}," camofox-browser",[91,1092,819],{"class":522},[91,1094,1095,1098,1101],{"class":93,"line":136},[91,1096,1097],{"class":522},"  --restart",[91,1099,1100],{"class":518}," unless-stopped",[91,1102,819],{"class":522},[91,1104,1105,1108,1111],{"class":93,"line":143},[91,1106,1107],{"class":522},"  -p",[91,1109,1110],{"class":518}," 127.0.0.1:9377:9377",[91,1112,819],{"class":522},[91,1114,1115,1117,1120],{"class":93,"line":149},[91,1116,1107],{"class":522},[91,1118,1119],{"class":518}," 127.0.0.1:6080:6080",[91,1121,819],{"class":522},[91,1123,1124,1127,1130,1133],{"class":93,"line":155},[91,1125,1126],{"class":522},"  -e",[91,1128,1129],{"class":518}," CAMOFOX_PORT=",[91,1131,1132],{"class":522},"9377",[91,1134,819],{"class":522},[91,1136,1137,1139,1142,1145],{"class":93,"line":161},[91,1138,1126],{"class":522},[91,1140,1141],{"class":518}," ENABLE_VNC=",[91,1143,1144],{"class":522},"1",[91,1146,819],{"class":522},[91,1148,1149,1151,1154,1157],{"class":93,"line":167},[91,1150,1126],{"class":522},[91,1152,1153],{"class":518}," VNC_BIND=",[91,1155,1156],{"class":522},"0.0.0.0",[91,1158,819],{"class":522},[91,1160,1161,1163,1166],{"class":93,"line":173},[91,1162,1126],{"class":522},[91,1164,1165],{"class":518}," VNC_RESOLUTION=1920x1080",[91,1167,819],{"class":522},[91,1169,1170,1173,1175,1177,1180],{"class":93,"line":179},[91,1171,1172],{"class":522},"  -v",[91,1174,796],{"class":518},[91,1176,800],{"class":799},[91,1178,1179],{"class":518},"\u002F.camofox-docker:\u002Froot\u002F.camofox\"",[91,1181,819],{"class":522},[91,1183,1184],{"class":93,"line":185},[91,1185,1186],{"class":518},"  camofox-browser:latest\n",[14,1188,1189,1190,1193,1194,1197],{},"Catatan: nama image bisa berbeda tergantung build Camofox yang dipakai. Cek ",[88,1191,1192],{},"docker images"," setelah ",[88,1195,1196],{},"make build",".",[14,1199,1200],{},"Konfigurasi Hermes:",[81,1202,1204],{"className":505,"code":1203,"language":507,"meta":86,"style":86},"cat >> \"$HOME\u002F.hermes\u002F.env\" \u003C\u003C'ENV'\nCAMOFOX_URL=http:\u002F\u002F127.0.0.1:9377\nENV\n",[88,1205,1206,1227,1232],{"__ignoreMap":86},[91,1207,1208,1211,1214,1216,1218,1221,1224],{"class":93,"line":94},[91,1209,1210],{"class":514},"cat",[91,1212,1213],{"class":575}," >>",[91,1215,796],{"class":518},[91,1217,800],{"class":799},[91,1219,1220],{"class":518},"\u002F.hermes\u002F.env\"",[91,1222,1223],{"class":575}," \u003C\u003C",[91,1225,1226],{"class":518},"'ENV'\n",[91,1228,1229],{"class":93,"line":100},[91,1230,1231],{"class":518},"CAMOFOX_URL=http:\u002F\u002F127.0.0.1:9377\n",[91,1233,1234],{"class":93,"line":106},[91,1235,1236],{"class":518},"ENV\n",[14,1238,1239,1240,1243],{},"Tambahkan ke ",[88,1241,1242],{},"~\u002F.hermes\u002Fconfig.yaml",":",[81,1245,1249],{"className":1246,"code":1247,"language":1248,"meta":86,"style":86},"language-yaml shiki shiki-themes github-light github-dark","browser:\n  camofox:\n    managed_persistence: true\n","yaml",[88,1250,1251,1259,1266],{"__ignoreMap":86},[91,1252,1253,1256],{"class":93,"line":94},[91,1254,358],{"class":1255},"s9eBZ",[91,1257,1258],{"class":799},":\n",[91,1260,1261,1264],{"class":93,"line":100},[91,1262,1263],{"class":1255},"  camofox",[91,1265,1258],{"class":799},[91,1267,1268,1271,1274],{"class":93,"line":106},[91,1269,1270],{"class":1255},"    managed_persistence",[91,1272,1273],{"class":799},": ",[91,1275,1276],{"class":522},"true\n",[14,1278,1279],{},"Restart Hermes setelah mengubah config. Lalu buka situs sosial melalui browser task, login manual, dan cek apakah login bertahan setelah task baru. Kalau setelah restart masih logout, berarti server Camofox belum menghormati profile persisten atau path config salah.",[73,1281,1283],{"id":1282},"langkah-4-akses-remote-lewat-tailscale","Langkah 4: akses remote lewat Tailscale",[499,1285,1287],{"id":1286},"openclaw-langsung-dari-telegram","OpenClaw: langsung dari Telegram",[14,1289,1290],{},"Kalau OpenClaw berjalan di mesin rumah, kamu bisa kirim scraping request dari Telegram. Nggak perlu SSH. OpenClaw nanti operasikan browser dan balas hasil scraping ke Telegram.",[499,1292,1294],{"id":1293},"hermes-gateway-mode-atau-ssh","Hermes: gateway mode atau SSH",[81,1296,1299],{"className":1297,"code":1298,"language":473},[471],"hermes gateway  # mulai Telegram\u002FDiscord bridge\n",[88,1300,1298],{"__ignoreMap":86},[14,1302,1303],{},"Atau SSH ke mesin rumah via Tailscale IP:",[81,1305,1307],{"className":505,"code":1306,"language":507,"meta":86,"style":86},"ssh user@100.88.x.x\n",[88,1308,1309],{"__ignoreMap":86},[91,1310,1311,1314],{"class":93,"line":94},[91,1312,1313],{"class":514},"ssh",[91,1315,1316],{"class":518}," user@100.88.x.x\n",[499,1318,1320],{"id":1319},"security","Security",[14,1322,1323,1324,1243],{},"Contoh pola aman dengan service lokal di port ",[88,1325,1326],{},"8765",[81,1328,1330],{"className":505,"code":1329,"language":507,"meta":86,"style":86},"# Cek IP Tailscale\nTAILSCALE_IP=$(tailscale ip -4 | head -n 1)\necho \"$TAILSCALE_IP\"\n\n# Contoh menjalankan service hanya di Tailscale IP, jika aplikasinya mendukung bind host.\nhermes api --host \"$TAILSCALE_IP\" --port 8765\n",[88,1331,1332,1337,1369,1381,1385,1390],{"__ignoreMap":86},[91,1333,1334],{"class":93,"line":94},[91,1335,1336],{"class":602},"# Cek IP Tailscale\n",[91,1338,1339,1342,1345,1348,1350,1352,1355,1357,1360,1363,1366],{"class":93,"line":100},[91,1340,1341],{"class":799},"TAILSCALE_IP",[91,1343,1344],{"class":575},"=",[91,1346,1347],{"class":799},"$(",[91,1349,669],{"class":514},[91,1351,672],{"class":518},[91,1353,1354],{"class":522}," -4",[91,1356,576],{"class":575},[91,1358,1359],{"class":514}," head",[91,1361,1362],{"class":522}," -n",[91,1364,1365],{"class":522}," 1",[91,1367,1368],{"class":799},")\n",[91,1370,1371,1373,1375,1378],{"class":93,"line":106},[91,1372,716],{"class":522},[91,1374,796],{"class":518},[91,1376,1377],{"class":799},"$TAILSCALE_IP",[91,1379,1380],{"class":518},"\"\n",[91,1382,1383],{"class":93,"line":112},[91,1384,140],{"emptyLinePlaceholder":139},[91,1386,1387],{"class":93,"line":118},[91,1388,1389],{"class":602},"# Contoh menjalankan service hanya di Tailscale IP, jika aplikasinya mendukung bind host.\n",[91,1391,1392,1394,1397,1400,1402,1404,1406,1409],{"class":93,"line":124},[91,1393,584],{"class":514},[91,1395,1396],{"class":518}," api",[91,1398,1399],{"class":522}," --host",[91,1401,796],{"class":518},[91,1403,1377],{"class":799},[91,1405,827],{"class":518},[91,1407,1408],{"class":522}," --port",[91,1410,1411],{"class":522}," 8765\n",[14,1413,1414,1415,1417],{},"Jika Hermes API command di versi Anda berbeda, ambil prinsipnya: bind ke Tailscale IP atau localhost, lalu akses via tailnet. Jangan membuka ",[88,1416,1326],{}," di router rumah.",[14,1419,1420],{},"Tambahkan firewall lokal:",[81,1422,1424],{"className":505,"code":1423,"language":507,"meta":86,"style":86},"sudo ufw allow in on tailscale0 to any port 8765 proto tcp\nsudo ufw deny 8765\u002Ftcp\nsudo ufw status verbose\n",[88,1425,1426,1463,1475],{"__ignoreMap":86},[91,1427,1428,1430,1433,1436,1439,1442,1445,1448,1451,1454,1457,1460],{"class":93,"line":94},[91,1429,650],{"class":514},[91,1431,1432],{"class":518}," ufw",[91,1434,1435],{"class":518}," allow",[91,1437,1438],{"class":518}," in",[91,1440,1441],{"class":518}," on",[91,1443,1444],{"class":518}," tailscale0",[91,1446,1447],{"class":518}," to",[91,1449,1450],{"class":518}," any",[91,1452,1453],{"class":518}," port",[91,1455,1456],{"class":522}," 8765",[91,1458,1459],{"class":518}," proto",[91,1461,1462],{"class":518}," tcp\n",[91,1464,1465,1467,1469,1472],{"class":93,"line":100},[91,1466,650],{"class":514},[91,1468,1432],{"class":518},[91,1470,1471],{"class":518}," deny",[91,1473,1474],{"class":518}," 8765\u002Ftcp\n",[91,1476,1477,1479,1481,1484],{"class":93,"line":106},[91,1478,650],{"class":514},[91,1480,1432],{"class":518},[91,1482,1483],{"class":518}," status",[91,1485,1486],{"class":518}," verbose\n",[14,1488,1489],{},"Untuk ACL Tailscale, buat rule minimum. Contoh konseptual:",[81,1491,1495],{"className":1492,"code":1493,"language":1494,"meta":86,"style":86},"language-json shiki shiki-themes github-light github-dark","{\n  \"acls\": [\n    {\n      \"action\": \"accept\",\n      \"src\": [\"user:operator@example.com\"],\n      \"dst\": [\"home-hermes:8765\"]\n    }\n  ]\n}\n","json",[88,1496,1497,1502,1510,1515,1528,1542,1555,1560,1565],{"__ignoreMap":86},[91,1498,1499],{"class":93,"line":94},[91,1500,1501],{"class":799},"{\n",[91,1503,1504,1507],{"class":93,"line":100},[91,1505,1506],{"class":522},"  \"acls\"",[91,1508,1509],{"class":799},": [\n",[91,1511,1512],{"class":93,"line":106},[91,1513,1514],{"class":799},"    {\n",[91,1516,1517,1520,1522,1525],{"class":93,"line":112},[91,1518,1519],{"class":522},"      \"action\"",[91,1521,1273],{"class":799},[91,1523,1524],{"class":518},"\"accept\"",[91,1526,1527],{"class":799},",\n",[91,1529,1530,1533,1536,1539],{"class":93,"line":118},[91,1531,1532],{"class":522},"      \"src\"",[91,1534,1535],{"class":799},": [",[91,1537,1538],{"class":518},"\"user:operator@example.com\"",[91,1540,1541],{"class":799},"],\n",[91,1543,1544,1547,1549,1552],{"class":93,"line":124},[91,1545,1546],{"class":522},"      \"dst\"",[91,1548,1535],{"class":799},[91,1550,1551],{"class":518},"\"home-hermes:8765\"",[91,1553,1554],{"class":799},"]\n",[91,1556,1557],{"class":93,"line":130},[91,1558,1559],{"class":799},"    }\n",[91,1561,1562],{"class":93,"line":136},[91,1563,1564],{"class":799},"  ]\n",[91,1566,1567],{"class":93,"line":143},[91,1568,1569],{"class":799},"}\n",[14,1571,1572],{},"Sesuaikan tag dan identity di admin console. Jangan beri akses tailnet global kalau yang dibutuhkan hanya satu port Hermes.",[73,1574,1576],{"id":1575},"langkah-5-definisikan-policy-scraping","Langkah 5: definisikan policy scraping",[14,1578,1579,1580,1243],{},"Sebelum membuat task, buat policy yang eksplisit. Contoh ",[88,1581,1582],{},"config\u002Fscraping-policy.yaml",[81,1584,1586],{"className":1246,"code":1585,"language":1248,"meta":86,"style":86},"scope:\n  allowed_accounts:\n    - \"brand-sendiri\"\n    - \"akun-klien-yang-memberi-izin\"\n  allowed_content:\n    - \"post public\"\n    - \"komentar di post milik sendiri\"\n    - \"metric yang terlihat setelah login akun sendiri\"\n  forbidden_content:\n    - \"data pribadi non-publik\"\n    - \"DM atau inbox tanpa alasan operasional sah\"\n    - \"bypass paywall atau privacy setting\"\n    - \"mass profile harvesting\"\n\nrate_limits:\n  max_profiles_per_run: 20\n  max_posts_per_profile: 30\n  min_delay_seconds: 5\n  max_parallel_browsers: 1\n\nretention:\n  raw_html: \"disabled\"\n  screenshots: \"30 days\"\n  normalized_json: \"90 days\"\n\nreview:\n  require_manual_review_before_external_publish: true\n",[88,1587,1588,1595,1602,1610,1617,1624,1631,1638,1645,1652,1659,1666,1673,1680,1684,1691,1701,1711,1721,1731,1735,1742,1752,1762,1772,1776,1783],{"__ignoreMap":86},[91,1589,1590,1593],{"class":93,"line":94},[91,1591,1592],{"class":1255},"scope",[91,1594,1258],{"class":799},[91,1596,1597,1600],{"class":93,"line":100},[91,1598,1599],{"class":1255},"  allowed_accounts",[91,1601,1258],{"class":799},[91,1603,1604,1607],{"class":93,"line":106},[91,1605,1606],{"class":799},"    - ",[91,1608,1609],{"class":518},"\"brand-sendiri\"\n",[91,1611,1612,1614],{"class":93,"line":112},[91,1613,1606],{"class":799},[91,1615,1616],{"class":518},"\"akun-klien-yang-memberi-izin\"\n",[91,1618,1619,1622],{"class":93,"line":118},[91,1620,1621],{"class":1255},"  allowed_content",[91,1623,1258],{"class":799},[91,1625,1626,1628],{"class":93,"line":124},[91,1627,1606],{"class":799},[91,1629,1630],{"class":518},"\"post public\"\n",[91,1632,1633,1635],{"class":93,"line":130},[91,1634,1606],{"class":799},[91,1636,1637],{"class":518},"\"komentar di post milik sendiri\"\n",[91,1639,1640,1642],{"class":93,"line":136},[91,1641,1606],{"class":799},[91,1643,1644],{"class":518},"\"metric yang terlihat setelah login akun sendiri\"\n",[91,1646,1647,1650],{"class":93,"line":143},[91,1648,1649],{"class":1255},"  forbidden_content",[91,1651,1258],{"class":799},[91,1653,1654,1656],{"class":93,"line":149},[91,1655,1606],{"class":799},[91,1657,1658],{"class":518},"\"data pribadi non-publik\"\n",[91,1660,1661,1663],{"class":93,"line":155},[91,1662,1606],{"class":799},[91,1664,1665],{"class":518},"\"DM atau inbox tanpa alasan operasional sah\"\n",[91,1667,1668,1670],{"class":93,"line":161},[91,1669,1606],{"class":799},[91,1671,1672],{"class":518},"\"bypass paywall atau privacy setting\"\n",[91,1674,1675,1677],{"class":93,"line":167},[91,1676,1606],{"class":799},[91,1678,1679],{"class":518},"\"mass profile harvesting\"\n",[91,1681,1682],{"class":93,"line":173},[91,1683,140],{"emptyLinePlaceholder":139},[91,1685,1686,1689],{"class":93,"line":179},[91,1687,1688],{"class":1255},"rate_limits",[91,1690,1258],{"class":799},[91,1692,1693,1696,1698],{"class":93,"line":185},[91,1694,1695],{"class":1255},"  max_profiles_per_run",[91,1697,1273],{"class":799},[91,1699,1700],{"class":522},"20\n",[91,1702,1703,1706,1708],{"class":93,"line":191},[91,1704,1705],{"class":1255},"  max_posts_per_profile",[91,1707,1273],{"class":799},[91,1709,1710],{"class":522},"30\n",[91,1712,1713,1716,1718],{"class":93,"line":197},[91,1714,1715],{"class":1255},"  min_delay_seconds",[91,1717,1273],{"class":799},[91,1719,1720],{"class":522},"5\n",[91,1722,1723,1726,1728],{"class":93,"line":202},[91,1724,1725],{"class":1255},"  max_parallel_browsers",[91,1727,1273],{"class":799},[91,1729,1730],{"class":522},"1\n",[91,1732,1733],{"class":93,"line":208},[91,1734,140],{"emptyLinePlaceholder":139},[91,1736,1737,1740],{"class":93,"line":214},[91,1738,1739],{"class":1255},"retention",[91,1741,1258],{"class":799},[91,1743,1744,1747,1749],{"class":93,"line":220},[91,1745,1746],{"class":1255},"  raw_html",[91,1748,1273],{"class":799},[91,1750,1751],{"class":518},"\"disabled\"\n",[91,1753,1754,1757,1759],{"class":93,"line":226},[91,1755,1756],{"class":1255},"  screenshots",[91,1758,1273],{"class":799},[91,1760,1761],{"class":518},"\"30 days\"\n",[91,1763,1764,1767,1769],{"class":93,"line":232},[91,1765,1766],{"class":1255},"  normalized_json",[91,1768,1273],{"class":799},[91,1770,1771],{"class":518},"\"90 days\"\n",[91,1773,1774],{"class":93,"line":237},[91,1775,140],{"emptyLinePlaceholder":139},[91,1777,1778,1781],{"class":93,"line":242},[91,1779,1780],{"class":1255},"review",[91,1782,1258],{"class":799},[91,1784,1785,1788,1790],{"class":93,"line":248},[91,1786,1787],{"class":1255},"  require_manual_review_before_external_publish",[91,1789,1273],{"class":799},[91,1791,1276],{"class":522},[14,1793,1794],{},"Policy seperti ini membantu Hermes tetap bekerja di pagar yang sama. Jangan hanya memberi prompt \"scrape sebanyak mungkin\" karena itu hampir pasti menghasilkan workflow yang buruk.",[73,1796,1798],{"id":1797},"langkah-6-buat-prompt-kerja-hermes","Langkah 6: buat prompt kerja Hermes",[14,1800,1801],{},"Contoh prompt untuk Instagram post milik sendiri:",[81,1803,1807],{"className":1804,"code":1805,"language":1806,"meta":86,"style":86},"language-markdown shiki shiki-themes github-light github-dark","Task: Ambil ringkasan 10 post terakhir dari akun Instagram @nama_brand yang sudah login di browser saat ini.\n\nBatasan:\n- Jangan buka DM.\n- Jangan ambil data personal selain username publik yang tampil di post\u002Fcomment.\n- Jangan scroll tanpa batas. Maksimal 10 post.\n- Tunggu 5 sampai 8 detik antar navigasi besar.\n- Kalau muncul login challenge, berhenti dan laporkan.\n- Simpan output ke output\u002Fnormalized\u002Finstagram-latest-posts.json.\n\nField output:\n- platform\n- account\n- post_url\n- caption_excerpt maksimal 280 karakter\n- visible_like_count jika tampil\n- visible_comment_count jika tampil\n- posted_at jika tampil\n- screenshot_path jika screenshot diambil\n- notes\n","markdown",[88,1808,1809,1814,1818,1823,1828,1833,1838,1843,1848,1853,1857,1862,1867,1872,1877,1882,1887,1892,1897,1902],{"__ignoreMap":86},[91,1810,1811],{"class":93,"line":94},[91,1812,1813],{},"Task: Ambil ringkasan 10 post terakhir dari akun Instagram @nama_brand yang sudah login di browser saat ini.\n",[91,1815,1816],{"class":93,"line":100},[91,1817,140],{"emptyLinePlaceholder":139},[91,1819,1820],{"class":93,"line":106},[91,1821,1822],{},"Batasan:\n",[91,1824,1825],{"class":93,"line":112},[91,1826,1827],{},"- Jangan buka DM.\n",[91,1829,1830],{"class":93,"line":118},[91,1831,1832],{},"- Jangan ambil data personal selain username publik yang tampil di post\u002Fcomment.\n",[91,1834,1835],{"class":93,"line":124},[91,1836,1837],{},"- Jangan scroll tanpa batas. Maksimal 10 post.\n",[91,1839,1840],{"class":93,"line":130},[91,1841,1842],{},"- Tunggu 5 sampai 8 detik antar navigasi besar.\n",[91,1844,1845],{"class":93,"line":136},[91,1846,1847],{},"- Kalau muncul login challenge, berhenti dan laporkan.\n",[91,1849,1850],{"class":93,"line":143},[91,1851,1852],{},"- Simpan output ke output\u002Fnormalized\u002Finstagram-latest-posts.json.\n",[91,1854,1855],{"class":93,"line":149},[91,1856,140],{"emptyLinePlaceholder":139},[91,1858,1859],{"class":93,"line":155},[91,1860,1861],{},"Field output:\n",[91,1863,1864],{"class":93,"line":161},[91,1865,1866],{},"- platform\n",[91,1868,1869],{"class":93,"line":167},[91,1870,1871],{},"- account\n",[91,1873,1874],{"class":93,"line":173},[91,1875,1876],{},"- post_url\n",[91,1878,1879],{"class":93,"line":179},[91,1880,1881],{},"- caption_excerpt maksimal 280 karakter\n",[91,1883,1884],{"class":93,"line":185},[91,1885,1886],{},"- visible_like_count jika tampil\n",[91,1888,1889],{"class":93,"line":191},[91,1890,1891],{},"- visible_comment_count jika tampil\n",[91,1893,1894],{"class":93,"line":197},[91,1895,1896],{},"- posted_at jika tampil\n",[91,1898,1899],{"class":93,"line":202},[91,1900,1901],{},"- screenshot_path jika screenshot diambil\n",[91,1903,1904],{"class":93,"line":208},[91,1905,1906],{},"- notes\n",[14,1908,1909],{},"Contoh prompt untuk TikTok profile check:",[81,1911,1913],{"className":1804,"code":1912,"language":1806,"meta":86,"style":86},"Task: Buka profil TikTok @nama_brand dan buat snapshot ringkas 12 video terbaru.\n\nBatasan:\n- Hanya baca data yang terlihat di UI.\n- Jangan mencoba endpoint internal.\n- Jangan download video.\n- Jangan follow, like, comment, atau mengubah state akun.\n- Jika layout berubah atau data tidak terlihat, tulis unknown, jangan menebak.\n\nOutput: output\u002Fnormalized\u002Ftiktok-profile-snapshot.json\n",[88,1914,1915,1920,1924,1928,1933,1938,1943,1948,1953,1957],{"__ignoreMap":86},[91,1916,1917],{"class":93,"line":94},[91,1918,1919],{},"Task: Buka profil TikTok @nama_brand dan buat snapshot ringkas 12 video terbaru.\n",[91,1921,1922],{"class":93,"line":100},[91,1923,140],{"emptyLinePlaceholder":139},[91,1925,1926],{"class":93,"line":106},[91,1927,1822],{},[91,1929,1930],{"class":93,"line":112},[91,1931,1932],{},"- Hanya baca data yang terlihat di UI.\n",[91,1934,1935],{"class":93,"line":118},[91,1936,1937],{},"- Jangan mencoba endpoint internal.\n",[91,1939,1940],{"class":93,"line":124},[91,1941,1942],{},"- Jangan download video.\n",[91,1944,1945],{"class":93,"line":130},[91,1946,1947],{},"- Jangan follow, like, comment, atau mengubah state akun.\n",[91,1949,1950],{"class":93,"line":136},[91,1951,1952],{},"- Jika layout berubah atau data tidak terlihat, tulis unknown, jangan menebak.\n",[91,1954,1955],{"class":93,"line":143},[91,1956,140],{"emptyLinePlaceholder":139},[91,1958,1959],{"class":93,"line":149},[91,1960,1961],{},"Output: output\u002Fnormalized\u002Ftiktok-profile-snapshot.json\n",[14,1963,1964],{},"Contoh prompt untuk Threads:",[81,1966,1968],{"className":1804,"code":1967,"language":1806,"meta":86,"style":86},"Task: Ringkas 15 thread terbaru dari akun Threads @nama_brand untuk kebutuhan editorial monitoring.\n\nBatasan:\n- Read-only.\n- Jangan buka reply yang tidak relevan lebih dari 2 level.\n- Jangan ambil email, nomor telepon, atau data sensitif yang muncul di bio atau komentar.\n- Beri jeda minimal 5 detik antar halaman.\n\nOutput: output\u002Fnormalized\u002Fthreads-editorial-monitoring.json\n",[88,1969,1970,1975,1979,1983,1988,1993,1998,2003,2007],{"__ignoreMap":86},[91,1971,1972],{"class":93,"line":94},[91,1973,1974],{},"Task: Ringkas 15 thread terbaru dari akun Threads @nama_brand untuk kebutuhan editorial monitoring.\n",[91,1976,1977],{"class":93,"line":100},[91,1978,140],{"emptyLinePlaceholder":139},[91,1980,1981],{"class":93,"line":106},[91,1982,1822],{},[91,1984,1985],{"class":93,"line":112},[91,1986,1987],{},"- Read-only.\n",[91,1989,1990],{"class":93,"line":118},[91,1991,1992],{},"- Jangan buka reply yang tidak relevan lebih dari 2 level.\n",[91,1994,1995],{"class":93,"line":124},[91,1996,1997],{},"- Jangan ambil email, nomor telepon, atau data sensitif yang muncul di bio atau komentar.\n",[91,1999,2000],{"class":93,"line":130},[91,2001,2002],{},"- Beri jeda minimal 5 detik antar halaman.\n",[91,2004,2005],{"class":93,"line":136},[91,2006,140],{"emptyLinePlaceholder":139},[91,2008,2009],{"class":93,"line":143},[91,2010,2011],{},"Output: output\u002Fnormalized\u002Fthreads-editorial-monitoring.json\n",[73,2013,2015],{"id":2014},"langkah-7-jalankan-task-dari-terminal","Langkah 7: jalankan task dari terminal",[14,2017,2018],{},"Kalau Hermes CLI menerima prompt langsung dari stdin di environment Anda, gunakan wrapper seperti ini:",[81,2020,2022],{"className":505,"code":2021,"language":507,"meta":86,"style":86},"mkdir -p output\u002Fraw output\u002Fnormalized output\u002Fscreenshots logs\n\ncat prompts\u002Finstagram-post-extract.md | hermes\n",[88,2023,2024,2042,2046],{"__ignoreMap":86},[91,2025,2026,2028,2030,2033,2036,2039],{"class":93,"line":94},[91,2027,791],{"class":514},[91,2029,740],{"class":522},[91,2031,2032],{"class":518}," output\u002Fraw",[91,2034,2035],{"class":518}," output\u002Fnormalized",[91,2037,2038],{"class":518}," output\u002Fscreenshots",[91,2040,2041],{"class":518}," logs\n",[91,2043,2044],{"class":93,"line":100},[91,2045,140],{"emptyLinePlaceholder":139},[91,2047,2048,2050,2053,2055],{"class":93,"line":106},[91,2049,1210],{"class":514},[91,2051,2052],{"class":518}," prompts\u002Finstagram-post-extract.md",[91,2054,576],{"class":575},[91,2056,2057],{"class":514}," hermes\n",[14,2059,2060],{},"Kalau Hermes dipakai lewat chat\u002Fgateway, kirim prompt yang sama dari channel Hermes dan pastikan working directory diarahkan ke repo scraping.",[14,2062,2063,2064,1243],{},"Wrapper sederhana ",[88,2065,2066],{},"scripts\u002Frun-hermes-task.sh",[81,2068,2070],{"className":505,"code":2069,"language":507,"meta":86,"style":86},"#!\u002Fusr\u002Fbin\u002Fenv bash\nset -euo pipefail\n\nTASK_FILE=\"${1:?Usage: scripts\u002Frun-hermes-task.sh prompts\u002Ftask.md}\"\nRUN_ID=\"$(date +%Y%m%d-%H%M%S)\"\nLOG_FILE=\"logs\u002F${RUN_ID}.log\"\n\nmkdir -p output\u002Fraw output\u002Fnormalized output\u002Fscreenshots logs\n\necho \"Running $TASK_FILE\" | tee \"$LOG_FILE\"\ncat \"$TASK_FILE\" | hermes 2>&1 | tee -a \"$LOG_FILE\"\n",[88,2071,2072,2077,2088,2092,2144,2160,2175,2179,2193,2197,2220],{"__ignoreMap":86},[91,2073,2074],{"class":93,"line":94},[91,2075,2076],{"class":602},"#!\u002Fusr\u002Fbin\u002Fenv bash\n",[91,2078,2079,2082,2085],{"class":93,"line":100},[91,2080,2081],{"class":522},"set",[91,2083,2084],{"class":522}," -euo",[91,2086,2087],{"class":518}," pipefail\n",[91,2089,2090],{"class":93,"line":106},[91,2091,140],{"emptyLinePlaceholder":139},[91,2093,2094,2097,2099,2101,2104,2107,2110,2112,2115,2118,2121,2123,2126,2129,2131,2134,2136,2139,2142],{"class":93,"line":112},[91,2095,2096],{"class":799},"TASK_FILE",[91,2098,1344],{"class":575},[91,2100,827],{"class":518},[91,2102,2103],{"class":522},"${1",[91,2105,2106],{"class":575},":?",[91,2108,2109],{"class":799},"Usage",[91,2111,1243],{"class":575},[91,2113,2114],{"class":799}," scripts",[91,2116,2117],{"class":575},"\u002F",[91,2119,2120],{"class":799},"run-hermes-task",[91,2122,1197],{"class":518},[91,2124,2125],{"class":799},"sh",[91,2127,2128],{"class":799}," prompts",[91,2130,2117],{"class":575},[91,2132,2133],{"class":799},"task",[91,2135,1197],{"class":518},[91,2137,2138],{"class":799},"md",[91,2140,2141],{"class":522},"}",[91,2143,1380],{"class":518},[91,2145,2146,2149,2151,2154,2157],{"class":93,"line":118},[91,2147,2148],{"class":799},"RUN_ID",[91,2150,1344],{"class":575},[91,2152,2153],{"class":518},"\"$(",[91,2155,2156],{"class":514},"date",[91,2158,2159],{"class":518}," +%Y%m%d-%H%M%S)\"\n",[91,2161,2162,2165,2167,2170,2172],{"class":93,"line":124},[91,2163,2164],{"class":799},"LOG_FILE",[91,2166,1344],{"class":575},[91,2168,2169],{"class":518},"\"logs\u002F${",[91,2171,2148],{"class":799},[91,2173,2174],{"class":518},"}.log\"\n",[91,2176,2177],{"class":93,"line":130},[91,2178,140],{"emptyLinePlaceholder":139},[91,2180,2181,2183,2185,2187,2189,2191],{"class":93,"line":136},[91,2182,791],{"class":514},[91,2184,740],{"class":522},[91,2186,2032],{"class":518},[91,2188,2035],{"class":518},[91,2190,2038],{"class":518},[91,2192,2041],{"class":518},[91,2194,2195],{"class":93,"line":143},[91,2196,140],{"emptyLinePlaceholder":139},[91,2198,2199,2201,2204,2207,2209,2211,2213,2215,2218],{"class":93,"line":149},[91,2200,716],{"class":522},[91,2202,2203],{"class":518}," \"Running ",[91,2205,2206],{"class":799},"$TASK_FILE",[91,2208,827],{"class":518},[91,2210,576],{"class":575},[91,2212,727],{"class":514},[91,2214,796],{"class":518},[91,2216,2217],{"class":799},"$LOG_FILE",[91,2219,1380],{"class":518},[91,2221,2222,2224,2226,2228,2230,2232,2235,2238,2240,2242,2245,2247,2249],{"class":93,"line":155},[91,2223,1210],{"class":514},[91,2225,796],{"class":518},[91,2227,2206],{"class":799},[91,2229,827],{"class":518},[91,2231,576],{"class":575},[91,2233,2234],{"class":514}," hermes",[91,2236,2237],{"class":575}," 2>&1",[91,2239,576],{"class":575},[91,2241,727],{"class":514},[91,2243,2244],{"class":522}," -a",[91,2246,796],{"class":518},[91,2248,2217],{"class":799},[91,2250,1380],{"class":518},[14,2252,2253],{},"Jalankan:",[81,2255,2257],{"className":505,"code":2256,"language":507,"meta":86,"style":86},"chmod +x scripts\u002Frun-hermes-task.sh\nscripts\u002Frun-hermes-task.sh prompts\u002Finstagram-post-extract.md\n",[88,2258,2259,2270],{"__ignoreMap":86},[91,2260,2261,2264,2267],{"class":93,"line":94},[91,2262,2263],{"class":514},"chmod",[91,2265,2266],{"class":518}," +x",[91,2268,2269],{"class":518}," scripts\u002Frun-hermes-task.sh\n",[91,2271,2272,2274],{"class":93,"line":100},[91,2273,2066],{"class":514},[91,2275,2276],{"class":518}," prompts\u002Finstagram-post-extract.md\n",[73,2278,2280],{"id":2279},"langkah-8-validasi-output-sebelum-dipakai","Langkah 8: validasi output sebelum dipakai",[14,2282,2283],{},"Jangan langsung memasukkan hasil scraping ke report final. Minimal validasi JSON:",[81,2285,2289],{"className":2286,"code":2287,"language":2288,"meta":86,"style":86},"language-python shiki shiki-themes github-light github-dark","#!\u002Fusr\u002Fbin\u002Fenv python3\nimport json\nimport sys\nfrom pathlib import Path\n\nrequired = {\"platform\", \"account\", \"post_url\", \"notes\"}\n\npath = Path(sys.argv[1])\ndata = json.loads(path.read_text())\nitems = data if isinstance(data, list) else data.get(\"items\", [])\n\nerrors = []\nfor idx, item in enumerate(items):\n    missing = required - set(item.keys())\n    if missing:\n        errors.append(f\"item {idx} missing {sorted(missing)}\")\n    if item.get(\"post_url\") and not item[\"post_url\"].startswith(\"https:\u002F\u002F\"):\n        errors.append(f\"item {idx} has invalid url\")\n\nif errors:\n    print(\"Validation failed:\")\n    for err in errors:\n        print(\"-\", err)\n    sys.exit(1)\n\nprint(f\"OK: {len(items)} items validated from {path}\")\n","python",[88,2290,2291,2296,2301,2306,2311,2315,2320,2324,2329,2334,2339,2343,2348,2353,2358,2363,2368,2373,2378,2382,2387,2392,2397,2402,2407,2411],{"__ignoreMap":86},[91,2292,2293],{"class":93,"line":94},[91,2294,2295],{},"#!\u002Fusr\u002Fbin\u002Fenv python3\n",[91,2297,2298],{"class":93,"line":100},[91,2299,2300],{},"import json\n",[91,2302,2303],{"class":93,"line":106},[91,2304,2305],{},"import sys\n",[91,2307,2308],{"class":93,"line":112},[91,2309,2310],{},"from pathlib import Path\n",[91,2312,2313],{"class":93,"line":118},[91,2314,140],{"emptyLinePlaceholder":139},[91,2316,2317],{"class":93,"line":124},[91,2318,2319],{},"required = {\"platform\", \"account\", \"post_url\", \"notes\"}\n",[91,2321,2322],{"class":93,"line":130},[91,2323,140],{"emptyLinePlaceholder":139},[91,2325,2326],{"class":93,"line":136},[91,2327,2328],{},"path = Path(sys.argv[1])\n",[91,2330,2331],{"class":93,"line":143},[91,2332,2333],{},"data = json.loads(path.read_text())\n",[91,2335,2336],{"class":93,"line":149},[91,2337,2338],{},"items = data if isinstance(data, list) else data.get(\"items\", [])\n",[91,2340,2341],{"class":93,"line":155},[91,2342,140],{"emptyLinePlaceholder":139},[91,2344,2345],{"class":93,"line":161},[91,2346,2347],{},"errors = []\n",[91,2349,2350],{"class":93,"line":167},[91,2351,2352],{},"for idx, item in enumerate(items):\n",[91,2354,2355],{"class":93,"line":173},[91,2356,2357],{},"    missing = required - set(item.keys())\n",[91,2359,2360],{"class":93,"line":179},[91,2361,2362],{},"    if missing:\n",[91,2364,2365],{"class":93,"line":185},[91,2366,2367],{},"        errors.append(f\"item {idx} missing {sorted(missing)}\")\n",[91,2369,2370],{"class":93,"line":191},[91,2371,2372],{},"    if item.get(\"post_url\") and not item[\"post_url\"].startswith(\"https:\u002F\u002F\"):\n",[91,2374,2375],{"class":93,"line":197},[91,2376,2377],{},"        errors.append(f\"item {idx} has invalid url\")\n",[91,2379,2380],{"class":93,"line":202},[91,2381,140],{"emptyLinePlaceholder":139},[91,2383,2384],{"class":93,"line":208},[91,2385,2386],{},"if errors:\n",[91,2388,2389],{"class":93,"line":214},[91,2390,2391],{},"    print(\"Validation failed:\")\n",[91,2393,2394],{"class":93,"line":220},[91,2395,2396],{},"    for err in errors:\n",[91,2398,2399],{"class":93,"line":226},[91,2400,2401],{},"        print(\"-\", err)\n",[91,2403,2404],{"class":93,"line":232},[91,2405,2406],{},"    sys.exit(1)\n",[91,2408,2409],{"class":93,"line":237},[91,2410,140],{"emptyLinePlaceholder":139},[91,2412,2413],{"class":93,"line":242},[91,2414,2415],{},"print(f\"OK: {len(items)} items validated from {path}\")\n",[14,2417,2418,2419,2422],{},"Simpan sebagai ",[88,2420,2421],{},"scripts\u002Fvalidate-output.py",", lalu:",[81,2424,2426],{"className":505,"code":2425,"language":507,"meta":86,"style":86},"python3 scripts\u002Fvalidate-output.py output\u002Fnormalized\u002Finstagram-latest-posts.json\n",[88,2427,2428],{"__ignoreMap":86},[91,2429,2430,2433,2436],{"class":93,"line":94},[91,2431,2432],{"class":514},"python3",[91,2434,2435],{"class":518}," scripts\u002Fvalidate-output.py",[91,2437,2438],{"class":518}," output\u002Fnormalized\u002Finstagram-latest-posts.json\n",[14,2440,2441],{},"Validasi ini sengaja sederhana. Untuk produksi, tambahkan schema JSON, dedup URL, timestamp run, dan redaction untuk data sensitif.",[73,2443,2445],{"id":2444},"langkah-9-jadwalkan-dengan-aman","Langkah 9: jadwalkan dengan aman",[14,2447,2448],{},"Untuk sosial media, saya tidak suka interval terlalu rapat. Mulai dari manual run. Kalau sudah stabil, gunakan systemd timer atau cron dengan frekuensi rendah.",[14,2450,2451],{},"Contoh cron harian:",[81,2453,2457],{"className":2454,"code":2455,"language":2456,"meta":86,"style":86},"language-cron shiki shiki-themes github-light github-dark","15 8 * * * cd \u002Fhome\u002FUSER\u002Fsocial-browser-scraper && scripts\u002Frun-hermes-task.sh prompts\u002Finstagram-post-extract.md >> logs\u002Fcron.log 2>&1\n","cron",[88,2458,2459],{"__ignoreMap":86},[91,2460,2461],{"class":93,"line":94},[91,2462,2455],{},[14,2464,2465],{},"Untuk beberapa platform, pisahkan jadwal:",[81,2467,2469],{"className":2454,"code":2468,"language":2456,"meta":86,"style":86},"15 8 * * * cd \u002Fhome\u002FUSER\u002Fsocial-browser-scraper && scripts\u002Frun-hermes-task.sh prompts\u002Finstagram-post-extract.md >> logs\u002Fcron.log 2>&1\n45 8 * * * cd \u002Fhome\u002FUSER\u002Fsocial-browser-scraper && scripts\u002Frun-hermes-task.sh prompts\u002Ftiktok-profile-check.md >> logs\u002Fcron.log 2>&1\n15 9 * * * cd \u002Fhome\u002FUSER\u002Fsocial-browser-scraper && scripts\u002Frun-hermes-task.sh prompts\u002Fthreads-replies-summary.md >> logs\u002Fcron.log 2>&1\n",[88,2470,2471,2475,2480],{"__ignoreMap":86},[91,2472,2473],{"class":93,"line":94},[91,2474,2455],{},[91,2476,2477],{"class":93,"line":100},[91,2478,2479],{},"45 8 * * * cd \u002Fhome\u002FUSER\u002Fsocial-browser-scraper && scripts\u002Frun-hermes-task.sh prompts\u002Ftiktok-profile-check.md >> logs\u002Fcron.log 2>&1\n",[91,2481,2482],{"class":93,"line":106},[91,2483,2484],{},"15 9 * * * cd \u002Fhome\u002FUSER\u002Fsocial-browser-scraper && scripts\u002Frun-hermes-task.sh prompts\u002Fthreads-replies-summary.md >> logs\u002Fcron.log 2>&1\n",[14,2486,2487],{},"Tetap gunakan satu browser aktif, jeda cukup, dan volume kecil. Kalau butuh data volume besar, cari API resmi, export resmi platform, atau vendor data yang punya izin.",[73,2489,2491],{"id":2490},"troubleshooting","Troubleshooting",[499,2493,2495],{"id":2494},"hermes-membuka-browser-baru-yang-belum-login","Hermes membuka browser baru yang belum login",[14,2497,2498],{},"Penyebab umum:",[280,2500,2501,2504,2507,2510,2517],{},[283,2502,2503],{},"Hermes memakai provider cloud, bukan local CDP\u002FCamofox;",[283,2505,2506],{},"browser profile berbeda dari profile yang dipakai login;",[283,2508,2509],{},"Camofox persistence belum aktif;",[283,2511,2512,2513,2516],{},"config ",[88,2514,2515],{},"managed_persistence"," salah path;",[283,2518,2519],{},"Hermes belum direstart setelah perubahan config.",[14,2521,2522],{},"Solusi:",[81,2524,2526],{"className":505,"code":2525,"language":507,"meta":86,"style":86},"curl http:\u002F\u002F127.0.0.1:9222\u002Fjson\u002Fversion\n",[88,2527,2528],{"__ignoreMap":86},[91,2529,2530,2532],{"class":93,"line":94},[91,2531,566],{"class":514},[91,2533,2534],{"class":518}," http:\u002F\u002F127.0.0.1:9222\u002Fjson\u002Fversion\n",[14,2536,2537,2538,1243],{},"Pastikan endpoint mengarah ke browser yang benar. Untuk Camofox, cek ",[88,2539,1242],{},[81,2541,2542],{"className":1246,"code":1247,"language":1248,"meta":86,"style":86},[88,2543,2544,2550,2556],{"__ignoreMap":86},[91,2545,2546,2548],{"class":93,"line":94},[91,2547,358],{"class":1255},[91,2549,1258],{"class":799},[91,2551,2552,2554],{"class":93,"line":100},[91,2553,1263],{"class":1255},[91,2555,1258],{"class":799},[91,2557,2558,2560,2562],{"class":93,"line":106},[91,2559,1270],{"class":1255},[91,2561,1273],{"class":799},[91,2563,1276],{"class":522},[499,2565,2567],{"id":2566},"login-instagram-tiktok-atau-threads-sering-challenge","Login Instagram, TikTok, atau Threads sering challenge",[14,2569,2570],{},"Kemungkinan:",[280,2572,2573,2576,2579,2582,2585],{},[283,2574,2575],{},"login terlalu sering dari IP berbeda;",[283,2577,2578],{},"browser profile sering dihapus;",[283,2580,2581],{},"terlalu banyak navigasi otomatis;",[283,2583,2584],{},"user-agent atau fingerprint berubah drastis;",[283,2586,2587],{},"akun baru atau reputasi akun rendah.",[14,2589,2590],{},"Solusi operasional:",[280,2592,2593,2596,2599,2602,2605],{},[283,2594,2595],{},"gunakan satu mesin rumah dan satu profile tetap;",[283,2597,2598],{},"login manual dan tunggu beberapa jam sebelum automation pertama;",[283,2600,2601],{},"kurangi frekuensi scraping;",[283,2603,2604],{},"jangan parallel browser;",[283,2606,2607],{},"berhenti saat challenge muncul, jangan coba bypass.",[499,2609,2611],{"id":2610},"remote-dari-luar-rumah-tidak-bisa-akses-hermes","Remote dari luar rumah tidak bisa akses Hermes",[14,2613,2614],{},"Cek dari device remote:",[81,2616,2618],{"className":505,"code":2617,"language":507,"meta":86,"style":86},"tailscale status\ntailscale ping 100.88.12.34\ncurl http:\u002F\u002F100.88.12.34:8765\u002Fhealth\n",[88,2619,2620,2627,2637],{"__ignoreMap":86},[91,2621,2622,2624],{"class":93,"line":94},[91,2623,669],{"class":514},[91,2625,2626],{"class":518}," status\n",[91,2628,2629,2631,2634],{"class":93,"line":100},[91,2630,669],{"class":514},[91,2632,2633],{"class":518}," ping",[91,2635,2636],{"class":522}," 100.88.12.34\n",[91,2638,2639,2641],{"class":93,"line":106},[91,2640,566],{"class":514},[91,2642,2643],{"class":518}," http:\u002F\u002F100.88.12.34:8765\u002Fhealth\n",[14,2645,2646],{},"Cek di mesin rumah:",[81,2648,2650],{"className":505,"code":2649,"language":507,"meta":86,"style":86},"ss -lntp | grep 8765\nsudo ufw status verbose\n",[88,2651,2652,2667],{"__ignoreMap":86},[91,2653,2654,2657,2660,2662,2665],{"class":93,"line":94},[91,2655,2656],{"class":514},"ss",[91,2658,2659],{"class":522}," -lntp",[91,2661,576],{"class":575},[91,2663,2664],{"class":514}," grep",[91,2666,1411],{"class":522},[91,2668,2669,2671,2673,2675],{"class":93,"line":100},[91,2670,650],{"class":514},[91,2672,1432],{"class":518},[91,2674,1483],{"class":518},[91,2676,1486],{"class":518},[14,2678,2679,2680,1197],{},"Pastikan service listen di Tailscale IP atau interface yang benar, ACL mengizinkan, dan firewall tidak memblokir ",[88,2681,2682],{},"tailscale0",[499,2684,2686],{"id":2685},"cdp-port-9222-tidak-bisa-diakses-hermes","CDP port 9222 tidak bisa diakses Hermes",[14,2688,2689],{},"Cek apakah Chrome berjalan dengan flag remote debugging:",[81,2691,2693],{"className":505,"code":2692,"language":507,"meta":86,"style":86},"ps aux | grep -E 'chrome|chromium' | grep remote-debugging\ncurl http:\u002F\u002F127.0.0.1:9222\u002Fjson\u002Fversion\n",[88,2694,2695,2720],{"__ignoreMap":86},[91,2696,2697,2700,2703,2705,2707,2710,2713,2715,2717],{"class":93,"line":94},[91,2698,2699],{"class":514},"ps",[91,2701,2702],{"class":518}," aux",[91,2704,576],{"class":575},[91,2706,2664],{"class":514},[91,2708,2709],{"class":522}," -E",[91,2711,2712],{"class":518}," 'chrome|chromium'",[91,2714,576],{"class":575},[91,2716,2664],{"class":514},[91,2718,2719],{"class":518}," remote-debugging\n",[91,2721,2722,2724],{"class":93,"line":100},[91,2723,566],{"class":514},[91,2725,2534],{"class":518},[14,2727,2728,2729,2732],{},"Jika port kosong, tutup semua Chrome instance lalu jalankan ulang dengan ",[88,2730,2731],{},"--user-data-dir"," khusus. Chrome kadang menolak flag kalau instance utama sudah berjalan dengan profile lain.",[499,2734,2736],{"id":2735},"output-json-sering-berisi-hallucination","Output JSON sering berisi hallucination",[14,2738,2739],{},"Penyebabnya biasanya prompt terlalu bebas. Perbaiki dengan aturan:",[280,2741,2742,2749,2752,2755,2758],{},[283,2743,2744,2745,2748],{},"tulis ",[88,2746,2747],{},"unknown"," kalau data tidak terlihat;",[283,2750,2751],{},"minta Hermes menyertakan URL sumber dan screenshot path;",[283,2753,2754],{},"batasi field output;",[283,2756,2757],{},"jalankan validator;",[283,2759,2760],{},"jangan minta analisis dan extraction dalam langkah yang sama untuk data penting.",[499,2762,2764],{"id":2763},"layout-sosial-media-berubah","Layout sosial media berubah",[14,2766,2767],{},"Ini normal. UI sosial media memang sering berubah. Buat prompt yang berbasis tujuan, bukan selector rapuh. Kalau butuh stabilitas lebih tinggi, simpan screenshot tiap run dan tambahkan review manual saat extraction turun kualitasnya.",[73,2769,2771],{"id":2770},"security-hardening-checklist","Security hardening checklist",[280,2773,2776,2790,2796,2802,2808,2814,2820,2832,2838,2844],{"className":2774},[2775],"contains-task-list",[283,2777,2780,2784,2785,2787,2788,1197],{"className":2778},[2779],"task-list-item",[2781,2782],"input",{"disabled":139,"type":2783},"checkbox"," CDP bind ke ",[88,2786,915],{},", bukan ",[88,2789,1156],{},[283,2791,2793,2795],{"className":2792},[2779],[2781,2794],{"disabled":139,"type":2783}," Hermes API tidak terbuka ke internet publik.",[283,2797,2799,2801],{"className":2798},[2779],[2781,2800],{"disabled":139,"type":2783}," Akses remote lewat Tailscale IP atau Tailscale Serve dengan ACL ketat.",[283,2803,2805,2807],{"className":2804},[2779],[2781,2806],{"disabled":139,"type":2783}," Browser profile khusus scraping, bukan profile pribadi utama.",[283,2809,2811,2813],{"className":2810},[2779],[2781,2812],{"disabled":139,"type":2783}," 2FA aktif di akun sosial.",[283,2815,2817,2819],{"className":2816},[2779],[2781,2818],{"disabled":139,"type":2783}," Password tidak disimpan di repo.",[283,2821,2823,21,2825,2828,2829,1197],{"className":2822},[2779],[2781,2824],{"disabled":139,"type":2783},[88,2826,2827],{},".env",", output raw, dan screenshots sensitif masuk ",[88,2830,2831],{},".gitignore",[283,2833,2835,2837],{"className":2834},[2779],[2781,2836],{"disabled":139,"type":2783}," Log tidak menyimpan cookie, token, atau HTML mentah berisi data personal.",[283,2839,2841,2843],{"className":2840},[2779],[2781,2842],{"disabled":139,"type":2783}," Volume scraping kecil dan punya rate limit eksplisit.",[283,2845,2847,2849],{"className":2846},[2779],[2781,2848],{"disabled":139,"type":2783}," Ada stop rule saat login challenge, CAPTCHA, atau warning platform muncul.",[14,2851,2852,2853,1243],{},"Contoh ",[88,2854,2831],{},[81,2856,2860],{"className":2857,"code":2858,"language":2859,"meta":86,"style":86},"language-gitignore shiki shiki-themes github-light github-dark",".env\noutput\u002Fraw\u002F\noutput\u002Fscreenshots\u002F\nlogs\u002F*.log\n.browser-profiles\u002F\n*.sqlite\n*.har\n","gitignore",[88,2861,2862,2867,2872,2877,2882,2887,2892],{"__ignoreMap":86},[91,2863,2864],{"class":93,"line":94},[91,2865,2866],{},".env\n",[91,2868,2869],{"class":93,"line":100},[91,2870,2871],{},"output\u002Fraw\u002F\n",[91,2873,2874],{"class":93,"line":106},[91,2875,2876],{},"output\u002Fscreenshots\u002F\n",[91,2878,2879],{"class":93,"line":112},[91,2880,2881],{},"logs\u002F*.log\n",[91,2883,2884],{"class":93,"line":118},[91,2885,2886],{},".browser-profiles\u002F\n",[91,2888,2889],{"class":93,"line":124},[91,2890,2891],{},"*.sqlite\n",[91,2893,2894],{"class":93,"line":130},[91,2895,2896],{},"*.har\n",[73,2898,2900],{"id":2899},"fakta-resmi-vs-inference-operasional","Fakta resmi vs inference operasional",[499,2902,2904],{"id":2903},"fakta-resmi-yang-dipakai","Fakta resmi yang dipakai",[280,2906,2907,2910,2913,2919,2922],{},[283,2908,2909],{},"Hermes Agent menyediakan browser automation dengan beberapa backend, termasuk cloud providers, Camofox local mode, local Chromium-family CDP, dan local browser mode via agent-browser CLI.",[283,2911,2912],{},"Dokumentasi Hermes menyebut browser tools bisa menavigasi website, berinteraksi dengan elemen, mengisi form, dan mengekstrak informasi.",[283,2914,2915,2916,2918],{},"Dokumentasi Hermes untuk Camofox menekankan ",[88,2917,1016],{}," sebagai path konfigurasi untuk session persisten.",[283,2920,2921],{},"Tailscale subnet router dipakai untuk memperluas akses tailnet ke subnet yang tidak menjalankan Tailscale client.",[283,2923,2924],{},"Tailscale merekomendasikan instalasi client langsung pada device jika memungkinkan; subnet router dipakai saat direct install tidak feasible.",[499,2926,2928],{"id":2927},"inference-dan-keputusan-operasional-saya","Inference dan keputusan operasional saya",[280,2930,2931,2934,2937,2940],{},[283,2932,2933],{},"Untuk scraping sosial media yang sudah login, local browser profile di mesin rumah lebih stabil daripada cloud browser yang berganti environment.",[283,2935,2936],{},"Untuk akses remote Hermes, Tailscale IP langsung lebih sempit dan aman daripada subnet router jika hanya satu host yang perlu diakses.",[283,2938,2939],{},"Untuk Instagram, TikTok, dan Threads, workflow read-only volume kecil lebih realistis dan lebih rendah risiko daripada scraping massal.",[283,2941,2942],{},"Untuk report bisnis, output browser automation harus divalidasi sebelum dipakai karena UI extraction bisa salah membaca angka atau konteks.",[73,2944,2946],{"id":2945},"link-checklist-untuk-publish","Link checklist untuk publish",[499,2948,2950],{"id":2949},"link-wajib-untuk-github-tutorial","Link wajib untuk GitHub tutorial",[280,2952,2954,2963,2972,2981,2990,2999],{"className":2953},[2775],[283,2955,2957,2959,2960],{"className":2956},[2779],[2781,2958],{"disabled":139,"type":2783}," Link ke repository Hermes Agent: ",[88,2961,2962],{},"https:\u002F\u002Fgithub.com\u002FNousResearch\u002Fhermes-agent",[283,2964,2966,2968,2969],{"className":2965},[2779],[2781,2967],{"disabled":139,"type":2783}," Link ke dokumentasi browser Hermes: ",[88,2970,2971],{},"https:\u002F\u002Fgithub.com\u002FNousResearch\u002Fhermes-agent\u002Fblob\u002Fmain\u002Fwebsite\u002Fdocs\u002Fuser-guide\u002Ffeatures\u002Fbrowser.md",[283,2973,2975,2977,2978],{"className":2974},[2779],[2781,2976],{"disabled":139,"type":2783}," Link ke integrasi Hermes: ",[88,2979,2980],{},"https:\u002F\u002Fgithub.com\u002FNousResearch\u002Fhermes-agent\u002Fblob\u002Fmain\u002Fwebsite\u002Fdocs\u002Fintegrations\u002Findex.md",[283,2982,2984,2986,2987],{"className":2983},[2779],[2781,2985],{"disabled":139,"type":2783}," Link ke Tailscale subnet routers: ",[88,2988,2989],{},"https:\u002F\u002Ftailscale.com\u002Fdocs\u002Ffeatures\u002Fsubnet-routers",[283,2991,2993,2995,2996],{"className":2992},[2779],[2781,2994],{"disabled":139,"type":2783}," Link internal ke tutorial Tailscale di repo jika tersedia: ",[88,2997,2998],{},"tutorials\u002Ftailscale-vpn-exit-node.md",[283,3000,3002,3004],{"className":3001},[2779],[2781,3003],{"disabled":139,"type":2783}," Link internal ke tutorial browser automation terkait jika tersedia.",[499,3006,3008],{"id":3007},"link-wajib-untuk-blogfananico","Link wajib untuk blog.fanani.co",[280,3010,3012,3018,3024,3030,3036],{"className":3011},[2775],[283,3013,3015,3017],{"className":3014},[2779],[2781,3016],{"disabled":139,"type":2783}," Canonical ke slug final.",[283,3019,3021,3023],{"className":3020},[2779],[2781,3022],{"disabled":139,"type":2783}," Link ke GitHub tutorial companion setelah file GitHub dipublish.",[283,3025,3027,3029],{"className":3026},[2779],[2781,3028],{"disabled":139,"type":2783}," Link ke artikel OpenClaw vs Hermes jika relevan.",[283,3031,3033,3035],{"className":3032},[2779],[2781,3034],{"disabled":139,"type":2783}," Link ke Sumopod atau halaman layanan hanya di closing, bukan mid-article.",[283,3037,3039,3041],{"className":3038},[2779],[2781,3040],{"disabled":139,"type":2783}," Semua external link pakai konteks naratif, bukan daftar mentah saja.",[73,3043,3045],{"id":3044},"seo-package","SEO package",[14,3047,3048],{},"Rekomendasi SEO:",[280,3050,3051,3059,3067,3075,3083,3091,3112],{},[283,3052,3053,21,3056],{},[18,3054,3055],{},"Slug:",[88,3057,3058],{},"setup-scraping-instagram-tiktok-threads-hermes-browser-tailscale",[283,3060,3061,21,3064],{},[18,3062,3063],{},"SEO title:",[88,3065,3066],{},"Scraping Instagram TikTok Threads dengan Hermes Browser Login dan Tailscale",[283,3068,3069,21,3072],{},[18,3070,3071],{},"Meta description:",[88,3073,3074],{},"Setup Hermes untuk scraping sosial berbasis browser login, akses aman via Tailscale IP rumah, plus etika dan troubleshooting.",[283,3076,3077,21,3080],{},[18,3078,3079],{},"H1:",[88,3081,3082],{},"Setup Scraping Instagram, TikTok, dan Threads dengan Browser Login, Hermes, dan Tailscale",[283,3084,3085,21,3088],{},[18,3086,3087],{},"Primary keyword:",[88,3089,3090],{},"scraping Instagram TikTok Threads Hermes",[283,3092,3093,21,3096,3099,3100,3099,3103,3099,3106,3099,3109],{},[18,3094,3095],{},"Secondary keywords:",[88,3097,3098],{},"Hermes browser automation",", ",[88,3101,3102],{},"browser login scraping",[88,3104,3105],{},"Tailscale IP rumah",[88,3107,3108],{},"social media scraping ethical",[88,3110,3111],{},"Camofox Hermes persistence",[283,3113,3114,3117],{},[18,3115,3116],{},"OG image spec:"," 1200x630, dark navy gradient, title 2 lines, small Fanani logo, simple diagram motif: Hermes, Browser, Tailscale, Social Platforms.",[73,3119,3121],{"id":3120},"publishing-notes-untuk-dua-target","Publishing notes untuk dua target",[499,3123,3125],{"id":3124},"github-tutorial","GitHub tutorial",[14,3127,3128],{},"Target file:",[81,3130,3132],{"className":3131,"code":482,"language":473,"meta":86},[471],[88,3133,482],{"__ignoreMap":86},[14,3135,3136],{},"Adaptasi yang disarankan:",[280,3138,3139,3142,3145,3148,3155],{},[283,3140,3141],{},"pertahankan semua command;",[283,3143,3144],{},"tambahkan badge difficulty dan estimated time di awal;",[283,3146,3147],{},"jangan terlalu editorial;",[283,3149,3150,3151,3154],{},"taruh companion blog link di bagian ",[88,3152,3153],{},"Before We Start"," setelah blog publish;",[283,3156,3157],{},"tambahkan entry README di section Integrations atau Networking & Security.",[499,3159,3161],{"id":3160},"blogfananico","blog.fanani.co",[14,3163,3128],{},[81,3165,3167],{"className":3166,"code":491,"language":473,"meta":86},[471],[88,3168,491],{"__ignoreMap":86},[14,3170,3136],{},[280,3172,3173,3180,3183,3186,3189],{},[283,3174,3175,3176,3179],{},"pertahankan first-person singular ",[88,3177,3178],{},"saya",";",[283,3181,3182],{},"gunakan frontmatter Nuxt Content yang sesuai schema blog;",[283,3184,3185],{},"tambahkan OG image lokal;",[283,3187,3188],{},"jangan pakai hero stock photo;",[283,3190,3191],{},"sisipkan CTA halus ke Sumopod hanya di closing.",[73,3193,3195],{"id":3194},"kesimpulan-operasional","Kesimpulan operasional",[14,3197,3198],{},"Jadi keputusan paling waras saat ini: jangan mulai dari scraper agresif. Mulai dari browser login yang persisten, akses remote lewat Tailscale, prompt read-only yang sempit, dan validator output yang sederhana. Kalau workflow kecil ini stabil selama beberapa minggu, baru naikkan struktur data, dashboard, atau integrasi database.",[14,3200,3201],{},"Untuk Instagram, TikTok, dan Threads, stabilitas bukan cuma soal tool. Stabilitas datang dari kombinasi IP yang konsisten, session yang tidak sering berubah, volume yang wajar, dan batas etika yang jelas. Hermes membantu mengoperasikan browser; tanggung jawab desain tetap di kita.",[73,3203,3205],{"id":3204},"references","References",[280,3207,3208,3213,3218,3223,3229],{},[283,3209,3210,3211],{},"NousResearch Hermes Agent: ",[88,3212,2962],{},[283,3214,3215,3216],{},"Hermes Browser Automation docs: ",[88,3217,2971],{},[283,3219,3220,3221],{},"Hermes Integrations overview: ",[88,3222,2980],{},[283,3224,3225,3226],{},"Browser Use Hermes integration: ",[88,3227,3228],{},"https:\u002F\u002Fdocs.browser-use.com\u002Fcloud\u002Ftutorials\u002Fintegrations\u002Fhermes-agent",[283,3230,3231,3232],{},"Tailscale subnet routers: ",[88,3233,2989],{},[3235,3236,3237],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":86,"searchDepth":100,"depth":100,"links":3239},[3240,3241,3242,3243,3244,3245,3246,3250,3251,3257,3262,3263,3264,3265,3266,3267,3275,3276,3280,3284,3285,3289,3290],{"id":75,"depth":100,"text":76},{"id":274,"depth":100,"text":275},{"id":329,"depth":100,"text":330},{"id":385,"depth":100,"text":386},{"id":418,"depth":100,"text":419},{"id":463,"depth":100,"text":464},{"id":496,"depth":100,"text":497,"children":3247},[3248,3249],{"id":501,"depth":106,"text":502},{"id":555,"depth":106,"text":556},{"id":636,"depth":100,"text":637},{"id":773,"depth":100,"text":774,"children":3252},[3253,3254,3255,3256],{"id":777,"depth":106,"text":778},{"id":946,"depth":106,"text":947},{"id":996,"depth":106,"text":997},{"id":1009,"depth":106,"text":1010},{"id":1282,"depth":100,"text":1283,"children":3258},[3259,3260,3261],{"id":1286,"depth":106,"text":1287},{"id":1293,"depth":106,"text":1294},{"id":1319,"depth":106,"text":1320},{"id":1575,"depth":100,"text":1576},{"id":1797,"depth":100,"text":1798},{"id":2014,"depth":100,"text":2015},{"id":2279,"depth":100,"text":2280},{"id":2444,"depth":100,"text":2445},{"id":2490,"depth":100,"text":2491,"children":3268},[3269,3270,3271,3272,3273,3274],{"id":2494,"depth":106,"text":2495},{"id":2566,"depth":106,"text":2567},{"id":2610,"depth":106,"text":2611},{"id":2685,"depth":106,"text":2686},{"id":2735,"depth":106,"text":2736},{"id":2763,"depth":106,"text":2764},{"id":2770,"depth":100,"text":2771},{"id":2899,"depth":100,"text":2900,"children":3277},[3278,3279],{"id":2903,"depth":106,"text":2904},{"id":2927,"depth":106,"text":2928},{"id":2945,"depth":100,"text":2946,"children":3281},[3282,3283],{"id":2949,"depth":106,"text":2950},{"id":3007,"depth":106,"text":3008},{"id":3044,"depth":100,"text":3045},{"id":3120,"depth":100,"text":3121,"children":3286},[3287,3288],{"id":3124,"depth":106,"text":3125},{"id":3160,"depth":106,"text":3161},{"id":3194,"depth":100,"text":3195},{"id":3204,"depth":100,"text":3205},"tech","2026-05-30","Panduan lengkap scraping sosial media dengan browser login persisten via CDP. Bisa pakai OpenClaw atau Hermes Agent sebagai operator browser. Akses aman lewat Tailscale.","\u002Fimages\u002Fposts\u002Fsetup-scraping-instagram-tiktok-threads-hermes-browser-tailscale-xiaohei.webp",{},"\u002Ftech\u002Fsetup-scraping-instagram-tiktok-threads-hermes-browser-tailscale","15",{"title":5,"description":3293},"tech\u002Fsetup-scraping-instagram-tiktok-threads-hermes-browser-tailscale",[531,3301,3302,669,3303,3304,3305,3306],"hermes-agent","browser-automation","scraping","instagram","tiktok","threads","MAUFr6o1YiEuHkSO1v61XRy6mehdXxqVnJn4jmSB_fE",[3309,3322,3332,3345,3355,3363,3372,3381,3393,3402,3413,3415,3426,3438,3451,3462,3473,3485,3495,3508,3518,3529,3542,3554,3566,3579,3589,3600,3610,3618,3629,3639,3648,3655,3667,3677,3686,3696,3705,3715,3726,3734,3743,3752,3764,3774,3782,3791,3803,3814,3822,3833,3842,3850,3860,3868,3876,3885,3893,3901,3909,3920,3929,3936,3944,3953,3961,3969,3977,3985,3993,4002,4011,4018,4027,4035,4042,4050,4058,4065,4074,4081,4088,4095,4104,4110,4119,4125,4132,4141,4148,4157],{"path":3310,"title":3311,"description":3312,"date":3313,"category":3291,"tags":3314,"image":3320,"readingTime":3321},"\u002Ftech\u002Fopenclaw-hermes-daily-work-harness","AI Agent Buat Daily Work Harus Punya Repair Harness","Email, meeting, dokumen, task, report — AI agent bukan cuma harus bisa kerja. Dia harus bisa dites, diperbaiki, dan diaudit.","2026-06-08T08:00:00+08:00",[531,584,3315,3316,3317,3318,3319],"ai-agents","business-workflow","automation","daily-work","harness","\u002Fimages\u002Fposts\u002Fopenclaw-hermes-daily-work-harness-xiaohei.webp","6",{"path":3323,"title":3324,"description":3325,"date":3326,"category":3291,"tags":3327,"image":3330,"readingTime":3331},"\u002Ftech\u002Fai-content-pipeline","AI Content Pipeline: Dari Scraping Ide sampai Publishing Bot","Cara membangun pipeline discovery dan curation konten berbasis AI agents, mulai dari scraping multi-source, scoring, morning briefing, human curation, sampai delegasi produksi konten otomatis.","2026-06-08",[3328,3317,3329,2288,531],"ai","content-strategy","\u002Fimages\u002Fposts\u002Fai-content-pipeline-hero.jpg",null,{"path":3333,"title":3334,"description":3335,"date":3336,"category":3291,"tags":3337,"image":3343,"readingTime":3344},"\u002Ftech\u002Fsubscription-hunter-ai","Personal AI Use Case: Subscription Hunter","Lo subscribe Netflix 3 platform, Spotify, iCloud, VPN, SaaS — berapa yang beneran lo pake? Agent audit + rekomendasi cancel.","2026-06-07T12:00:00+08:00",[531,3338,3339,3317,3340,3341,3342],"personal-ai","subscription","finance","gmail","agent","\u002Fimages\u002Fposts\u002Fsubscription-hunter-ai-xiaohei.webp","3",{"path":3346,"title":3347,"description":3348,"date":3349,"category":3291,"tags":3350,"image":3353,"readingTime":3354},"\u002Ftech\u002Fidea-catcher-ai","Personal AI Use Case: Idea Catcher","Rekam voice note 30 detik, AI transcribe, auto-tag, jadi knowledge base. Nggak ada ide ilang.","2026-06-07T11:30:00+08:00",[531,584,3351,3338,3352],"voice-notes","idea-capture","\u002Fimages\u002Fposts\u002Fidea-catcher-ai-xiaohei.webp","4",{"path":3356,"title":3357,"description":3358,"date":3359,"category":3291,"tags":3360,"image":3362,"readingTime":3354},"\u002Ftech\u002Fexpense-tracker-ai","Personal AI Use Case: Expense Tracker via Chat","Nggak perlu app ribet. Kirim foto struk ke Telegram bot, AI auto-catet, categorize, laporan bulanan.","2026-06-07T11:00:00+08:00",[531,584,3361,3338,3317],"expense-tracker","\u002Fimages\u002Fposts\u002Fexpense-tracker-ai-xiaohei.webp",{"path":3364,"title":3365,"description":3366,"date":3367,"category":3291,"tags":3368,"image":3371,"readingTime":3344},"\u002Ftech\u002Fwa-chat-summarizer","Personal AI Use Case: WhatsApp Chat Summarizer","Group chat penuh drama dan stiker? Biarin AI aja yang baca.","2026-06-07T10:30:00+08:00",[531,3369,3338,3317,3370],"whatsapp","chat-summary","\u002Fimages\u002Fposts\u002Fwa-chat-summarizer-xiaohei.webp",{"path":3373,"title":3374,"description":3375,"date":3376,"category":3291,"tags":3377,"image":3379,"readingTime":3380},"\u002Ftech\u002Fai-agent-self-maintaining","AI yang Bisa Mengurus Dirinya Sendiri","Use case OpenClaw yang agak aneh tapi powerful — agent yang bisa menjaga memory, healthcheck, skills, git sync, dan reminder-nya sendiri tanpa nunggu manusia panik duluan.","2026-06-07T07:30:00+08:00",[531,584,3338,3378,3317],"private-ai","\u002Fimages\u002Fposts\u002Fai-agent-self-maintaining-xiaohei.webp","7",{"path":3382,"title":3383,"description":3384,"date":3385,"category":3291,"tags":3386,"image":3391,"readingTime":3392},"\u002Ftech\u002Ffinance-tracker-mutasi-gmail-openclaw-hermes","Finance Tracker dari Mutasi Gmail — Workaround Banking API Pakai OpenClaw dan Hermes","Cara membangun finance tracker pribadi dari email mutasi bank seperti BCA, tanpa upload data ke aplikasi budgeting, memakai OpenClaw\u002FHermes sebagai agent lokal untuk recap, kategorisasi, dan insight pengeluaran.","2026-06-06 18:45:00+08:00",[531,584,3387,3388,3341,3317,3389,3390],"finance-tracker","personal-finance","ai-agent","privacy","\u002Fimages\u002Fposts\u002Ffinance-tracker-mutasi-gmail-openclaw-hermes-xiaohei.webp","11",{"path":3394,"title":3395,"description":3396,"date":3397,"category":3291,"tags":3398,"image":3401,"readingTime":3380},"\u002Ftech\u002Fai-pribadi-agent-bisa-diaudit","AI Pribadi Jangan Jadi Black Box — Agent Harus Bisa Diaudit","Kenapa workflow AI pribadi butuh agent yang punya jejak kerja, sumber jelas, dan bisa diperiksa — bukan cuma chatbot yang pintar menjawab.","2026-06-06 05:30:00+08:00",[3328,3338,3399,3400,3389,3317],"agentic-workflow","audit-trail","\u002Fimages\u002Fposts\u002Fai-pribadi-agent-bisa-diaudit-xiaohei.webp",{"path":3403,"title":3404,"description":3405,"date":3406,"category":3291,"tags":3407,"image":3411,"readingTime":3412},"\u002Ftech\u002Fbookmarks-operating-system-decisions","Bookmark Bukan Reading List — Tapi Operating System untuk Keputusan","Saya berhenti memperlakukan bookmark sebagai daftar bacaan. Sekarang bookmark jadi sinyal untuk morning brief, build radar, dan ide konten.","2026-06-03 22:10:00+08:00",[3408,3409,3301,531,3317,3410,669,3389],"bookmarks","decision-system","sqlite","\u002Fimages\u002Fposts\u002Fbookmarks-operating-system-decisions-xiaohei.webp","10",{"path":3296,"title":5,"description":3293,"date":3292,"category":3291,"tags":3414,"image":3294,"readingTime":3297},[531,3301,3302,669,3303,3304,3305,3306],{"path":3416,"title":3417,"description":3418,"date":3419,"category":3291,"tags":3420,"image":3425,"readingTime":3354},"\u002Ftech\u002Fbalikpapan-openclaw-meetup-ai-automation","AI Automation Mulai Dilirik Bisnis Balikpapan","Pelaku usaha Balikpapan mulai melihat AI agent dan workflow automation sebagai cara mempercepat kerja, merapikan proses, dan menambah kapasitas operasional.","2026-05-22",[531,3421,3389,3422,3423,3424],"ai-automation","balikpapan","growthcircle","radian-group","\u002Fimages\u002Fposts\u002Fbalikpapan-openclaw-meetup-ai-automation-image1.png",{"path":3427,"title":3428,"description":3429,"date":3430,"category":3291,"tags":3431,"image":3436,"readingTime":3437},"\u002Ftech\u002Fagentic-ai-strategic-thinking-owner","Agentic AI untuk Strategic Thinking Owner — Bukan Chatbot, Tapi Partner Mikir","Cara owner bisnis memakai agentic AI seperti OpenClaw sebagai strategic thinking assistant yang bisa diakses dari web app, WhatsApp, Telegram, dan dashboard.","2026-05-13 13:30:00+08:00",[531,3432,3433,3434,3435,3317,3389],"agentic-ai","strategic-thinking","owner","whatsapp-bot","\u002Fimages\u002Fposts\u002Fagentic-ai-strategic-thinking-owner.webp","12",{"path":3439,"title":3440,"description":3441,"date":3442,"category":3291,"tags":3443,"image":3449,"readingTime":3450},"\u002Ftech\u002Fopenclaw-apartment-maintenance","OpenClaw untuk Apartment Maintenance: Dari Komplain WhatsApp Jadi Ticket yang Rapi","Tutorial campur Indonesia dan English buat bikin workflow apartment maintenance dengan OpenClaw: intake WhatsApp, ticket routing, SLA reminder, technician.","2026-05-11 17:35:00+08:00",[531,3444,3369,3445,3446,3447,3448],"apartment-maintenance","property-management","facility-management","ticketing","sumopod","\u002Fimages\u002Fposts\u002Fopenclaw-apartment-maintenance-day.webp","13",{"path":3452,"title":3453,"description":3454,"date":3455,"category":3291,"tags":3456,"image":3461,"readingTime":3450},"\u002Ftech\u002Fopenclaw-water-tank-monitoring","OpenClaw untuk Monitoring Tandon Air dan Pompa: Alert WhatsApp yang Beneran Kepakai","Tutorial campur Indonesia dan English buat pakai OpenClaw sebagai operational layer untuk monitoring tandon air, pompa, level sensor, low-level alert,.","2026-05-11 17:30:00+08:00",[531,3457,3458,3369,3459,3446,3460,3448],"water-tank","pump-monitoring","iot","apartment","\u002Fimages\u002Fposts\u002Fopenclaw-water-tank-day.webp",{"path":3463,"title":3464,"description":3465,"date":3466,"category":3291,"tags":3467,"image":3472,"readingTime":3450},"\u002Ftech\u002Fopenclaw-genset-ats-monitoring","OpenClaw untuk Monitoring Genset dan ATS? Ini Salah Satu Use Case Paling Masuk Akal","Tutorial campur Indonesia dan English buat pakai OpenClaw untuk monitoring genset dan ATS, alarm via WhatsApp, cloud logging, role access, dan.","2026-05-11 17:25:00+08:00",[531,3468,3469,3369,3470,3471,3448],"genset","ats","industrial-monitoring","building-operations","\u002Fimages\u002Fposts\u002Fopenclaw-genset-ats-day.webp",{"path":3474,"title":3475,"description":3476,"date":3477,"category":3291,"tags":3478,"image":3484,"readingTime":3412},"\u002Ftech\u002Fopenclaw-kost-whatsapp-billing","OpenClaw Buat Sistem Kos-Kosan via WhatsApp? Dari Tanya Harga sampai Tagihan dan QRIS Bisa Jalan","Tutorial campur Indonesia dan English untuk bikin sistem kos-kosan dengan backend OpenClaw. Satu bot WhatsApp untuk tanya harga, fasilitas, reminder jatuh.","2026-05-11 15:25:00+08:00",[531,3479,3369,3480,3481,3482,3483,3448],"kos-kosan","billing","qris","payment-gateway","property-automation","\u002Fimages\u002Fposts\u002Fopenclaw-kost-whatsapp-day.webp",{"path":3486,"title":3487,"description":3488,"date":3489,"category":3291,"tags":3490,"image":3494,"readingTime":3392},"\u002Ftech\u002Fopenclaw-iot-port-lighting-whatsapp","OpenClaw Buat Backbone IoT Lampu Pelabuhan? Bisa Banget. Monitor, Kontrol, dan Alert via WhatsApp","Tutorial campur Indonesia dan English buat pakai OpenClaw sebagai backbone IoT sederhana untuk monitor lampu pelabuhan, power usage, kontrol ON\u002FOFF via.","2026-05-11 13:20:00+08:00",[531,3459,3369,3491,3492,3493,3448],"port-lighting","energy-monitoring","industrial-automation","\u002Fimages\u002Fposts\u002Fopenclaw-iot-port-lighting-day.webp",{"path":3496,"title":3497,"description":3498,"date":3499,"category":3291,"tags":3500,"image":3506,"readingTime":3507},"\u002Ftech\u002Fopenclaw-backup-reset-restore","OpenClaw VM Berantakan? Cara Backup ke GitHub, Reset VPS, lalu Restore Rapi Tanpa Kehilangan History","Guide campur Indonesia dan English buat backup file penting OpenClaw ke GitHub, reset VPS, dan restore lagi ke satu workspace yang rapi tanpa kehilangan.","2026-05-11 10:55:00+08:00",[531,3501,3502,3503,3504,3505,3448],"vps","github-backup","restore","workspace","self-hosted-ai","\u002Fimages\u002Fposts\u002Fopenclaw-vm-backup-restore-day.webp","9",{"path":3509,"title":3510,"description":3511,"date":3512,"category":3291,"tags":3513,"image":3517,"readingTime":3321},"\u002Ftech\u002Fssh-terminal-dalam-dashboard","SSH Terminal di Browser dengan AI Chat? Radit Dashboard Punya.","Gak perlu PuTTY lagi. SSH langsung dari browser, dan kalau outputnya gak ngerti, AI-nya siap bantu jelasin. VPS recommendation via SUMOPOD.","2026-04-29",[1313,3514,3501,358,3328,3515,3516],"terminal","radit-dashboard","devops","\u002Fimages\u002Fposts\u002Fssh-terminal-dalam-dashboard.png",{"path":3519,"title":3520,"description":3521,"date":3522,"category":3291,"tags":3523,"image":3528,"readingTime":3392},"\u002Ftech\u002Fopenclaw-2026-4-24-broken-downgrade","OpenClaw v2026.4.24 Broken — Downgrade Sekarang","Rilis OpenClaw terbaru v2026.4.24 malah jadi bencana. Gateway crash loop, semua channel mati, dan yang bikin frustrasi: status bilang 'healthy' padahal bot.","2026-04-26 09:30:00+08:00",[531,3524,2490,3525,3526,3527,3501,3317],"ai-assistant","downgrade","gateway","telegram-bot","\u002Fimages\u002Fposts\u002Fopenclaw-2026-4-24-broken-hero-og.jpg",{"path":3530,"title":3531,"description":3532,"date":3533,"category":3291,"tags":3534,"image":3541,"readingTime":3507},"\u002Ftech\u002Fgoogle-skills-openclaw","google\u002Fskills buat OpenClaw, emang nyambung? Nyambung, kalau kamu manage-nya waras","Tutorial praktis pakai repo google\u002Fskills sebagai bahan baku skill library untuk OpenClaw. Bukan copy-paste buta, tapi review, adapt, manage, dan publish.","2026-04-25 13:55:00+08:00",[3535,531,3536,3537,3538,3539,3540],"google-skills","google-cloud","gemini","cloud-run","bigquery","skill-management","\u002Fimages\u002Fposts\u002Fgoogle-skills-openclaw-cover-day.webp",{"path":3543,"title":3544,"description":3545,"date":3546,"category":3291,"tags":3547,"image":3553,"readingTime":3297},"\u002Ftech\u002Fgmail-ai-draft-real-voice","Cara Bikin AI Draft Email yang Nulis Pakai Gaya Kita, Bukan Gaya Robot","Tutorial practical untuk bikin workflow draft email AI yang bisa filter inbox, baca tone thread, pakai gaya email kita sendiri, bikin draft di Gmail, lalu.","2026-04-24 20:55:00+08:00",[3341,3548,3549,3550,531,3551,3552],"ai-draft","email-automation","gog-cli","telegram","workflow","\u002Fimages\u002Fposts\u002Fgmail-ai-draft-real-voice-cover-gpt-image-2.webp",{"path":3555,"title":3556,"description":3557,"date":3558,"category":3291,"tags":3559,"image":3564,"readingTime":3565},"\u002Ftech\u002Fqwenpaw-sumopod-growth-circle","QwenPaw di Sumopod + Custom Provider Growth Circle, Cara Paling Cepat Punya AI Assistant yang Beneran Kepake","Tutorial lengkap pakai QwenPaw di Sumopod, masukin custom provider Growth Circle, tambah model gratis, sambungin Telegram, dan paham setup-nya tanpa ribet.","2026-04-24 08:45:00+08:00",[3560,3448,3561,3524,3551,3562,3563],"qwenpaw","growth-circle","custom-provider","openai-compatible","\u002Fimages\u002Fposts\u002Fqwenpaw-sumopod-growth-circle-cover-day.webp","20",{"path":3567,"title":3568,"description":3569,"date":3570,"category":3291,"tags":3571,"image":3578,"readingTime":3437},"\u002Ftech\u002Fthe-private-knowledge-os-second-brain-rag-hybrid-retrieval","I Built a Second Brain That Actually Remembers Everything","How to build a private RAG system with hybrid retrieval (vector + BM25), cross-encoder reranking, and production-grade security. Step-by-step guide.","2026-04-19",[3572,3573,3574,3575,3576,2288,3577],"second-brain","rag","llm","knowledge-management","openai","retrieval","\u002Fimages\u002Fposts\u002Fbuild-blog.webp",{"path":3580,"title":3581,"description":3582,"date":3583,"category":3291,"tags":3584,"image":3588,"readingTime":3412},"\u002Ftech\u002Fwhatsapp-ai-agent-school-business","WhatsApp AI Agent untuk Sekolah dan Bisnis: Automasi yang Nggak Bikin Pusing","Begini caranya sekolah dan bisnis di Indonesia bisa automasi komunikasi lewat WhatsApp pakai AI agent. Tanpa app tambahan, tanpa login dashboard yang ribet.","2026-04-17",[3369,3389,3585,3586,3587,531],"sekolah","bisnis","automasi","\u002Fimages\u002Fposts\u002Fwhatsapp-ai-agent-school-business.jpg",{"path":3590,"title":3591,"description":3592,"date":3593,"category":3291,"tags":3594,"image":3598,"readingTime":3599},"\u002Ftech\u002Ftoken-efficient-ai-agent","Hemat 70% Token AI Agent: Context Tiering & Lean Loading","Gimana cara cut token usage AI agent dari $2,130 jadi $732 per bulan tanpa lost functionality. Real benchmark data inside.","2026-04-15T16:35:00",[531,3389,3595,3596,3597],"token-optimization","cost-saving","context-management","\u002Fimages\u002Fposts\u002Ftoken-efficient-ai-agent.webp","5",{"path":3601,"title":3602,"description":3603,"date":3604,"category":3291,"tags":3605,"image":3609,"readingTime":3380},"\u002Ftech\u002Fopenclaw-multi-account-routing","Tutorial: Multi-Account Routing dengan OpenClaw","Panduan lengkap OpenClaw Multi-Account Routing. Jalankan multiple AI persona dengan multiple akun subscription tanpa bayar lebih. Bahasa Indonesia dan English.","2026-04-15T10:30:00+08:00",[531,3606,3607,3608,3315],"multi-account","routing","multi-agent","\u002Fimages\u002Fposts\u002Fopenclaw-multi-account-routing.webp",{"path":3611,"title":3612,"description":3613,"date":3614,"category":3291,"tags":3615,"image":3617,"readingTime":3437},"\u002Ftech\u002Fopenclaw-cron-job-automation","Tutorial: Cron Job Automation dengan OpenClaw","Panduan lengkap OpenClaw Cron Jobs. Schedule tasks, reports, dan alerts yang jalan otomatis. Campuran Bahasa Indonesia dan English.","2026-04-15T10:15:00+08:00",[531,2456,3317,3616,3389],"scheduled-tasks","\u002Fimages\u002Fposts\u002Fopenclaw-cron-job-automation.jpg",{"path":3619,"title":3620,"description":3621,"date":3622,"category":3291,"tags":3623,"image":3628,"readingTime":3412},"\u002Ftech\u002Fopenclaw-channel-integration","Tutorial: Konekin Telegram, WhatsApp, dan Discord ke AI Assistant Kamu","Panduan lengkap connect tiga chat platform ke OpenClaw Gateway sekaligus. Telegram, WhatsApp, dan Discord dalam satu panduan, Bahasa Indonesia campur English.","2026-04-15T10:00:00+08:00",[531,3551,3369,3624,3625,3626,3627],"discord","channel","integration","chatbot","\u002Fimages\u002Fposts\u002Fopenclaw-channel-integration.webp",{"path":3630,"title":3631,"description":3632,"date":3633,"category":3291,"tags":3634,"image":3637,"readingTime":3638},"\u002Ftech\u002Fopenclaw-gateway-setup","Tutorial: Install OpenClaw Gateway dari Nol dalam 10 Menit","Panduan lengkap install dan setup OpenClaw Gateway dari awal. Dari instalasi sampai bisa chat via Telegram. Bahasa Indonesia campur English, easy to follow.","2026-04-15T09:00:00+08:00",[531,3526,3635,3636,3551,3501,3317],"installation","setup","\u002Fimages\u002Fposts\u002Fopenclaw-gateway-setup.jpg","8",{"path":3640,"title":3641,"description":3642,"date":3643,"category":3291,"tags":3644,"image":3647,"readingTime":3450},"\u002Ftech\u002Fopenclaw-troubleshooting-guide","Tutorial: OpenClaw Troubleshooting Guide Lengkap","Panduan troubleshooting OpenClaw dari A sampai Z. Gateway crash, channel error, model rate limit, memory overflow, Docker issue, dan masih banyak lagi..","2026-04-15 11:00:00+08:00",[531,2490,3526,3625,3645,3646],"error","fix","\u002Fimages\u002Fposts\u002Fopenclaw-troubleshooting-guide.webp",{"path":3649,"title":3650,"description":3651,"date":3652,"category":3291,"tags":3653,"image":3654,"readingTime":3392},"\u002Ftech\u002Fopenclaw-browser-automation","Tutorial: Browser Control Automation dengan OpenClaw","Panduan lengkap OpenClaw Browser Control. AI assistant bisa buka website, klik tombol, isi form, screenshot, dan extract data. Campuran Bahasa Indonesia dan.","2026-04-15 10:45:00+08:00",[531,358,3317,3303,3389],"\u002Fimages\u002Fposts\u002Fopenclaw-browser-automation.webp",{"path":3656,"title":3657,"description":3658,"date":3659,"category":3291,"tags":3660,"image":3666,"readingTime":3392},"\u002Ftech\u002Fopenclaw-mcp-server-setup","Tutorial: Konekin AI Assistant ke Google Workspace, Notion, GitHub, dan 100+ Tools Lainnya","Panduan lengkap setup MCP Server di OpenClaw. Connect Gmail, Google Calendar, Notion, GitHub, Slack dan tools lain ke AI assistant kamu. Bahasa Indonesia.","2026-04-15 09:30:00+08:00",[531,3661,3626,3662,3663,3664,3665],"mcp","google-workspace","notion","github","tools","\u002Fimages\u002Fposts\u002Fopenclaw-mcp-server-setup.jpg",{"path":3668,"title":3669,"description":3670,"date":3671,"category":3291,"tags":3672,"image":3676,"readingTime":3380},"\u002Ftech\u002Fopenclaw-session-maintenance","Tutorial Lengkap: Cara Bersihkan Session OpenClaw yang Berantakan","Panduan lengkap maintenance session OpenClaw. Cleanup, compaction, pruning, orphan sessions, semuanya dibahas lengkap. Bahasa Indonesia campur English.","2026-04-14T08:00:00+08:00",[531,3673,3674,3675,3317],"session","maintenance","cleanup","\u002Fimages\u002Fposts\u002Fopenclaw-session-maintenance.jpg",{"path":3678,"title":3679,"description":3680,"date":3681,"category":3291,"tags":3682,"image":3685,"readingTime":3507},"\u002Ftech\u002Fopenclaw-security-hardening","Tutorial Lengkap: Amankan OpenClaw Kamu dengan Security Hardening Checklist","Panduan lengkap security hardening untuk OpenClaw Gateway. Lindungi bot kamu dari akses tidak sah dengan checklist 15 langkah. Bahasa Indonesia campur English.","2026-04-14 09:00:00+08:00",[531,1319,3683,3684,3501,3317],"hardening","checklist","\u002Fimages\u002Fposts\u002Fopenclaw-security-hardening.jpg",{"path":3687,"title":3688,"description":3689,"date":3690,"category":3291,"tags":3691,"image":3695,"readingTime":3599},"\u002Ftech\u002Fwhatsapp-customer-care-umkm","WhatsApp Jadi Customer Care 24\u002F7 — Solusi Cerdas untuk UMKM Indonesia","Tutorial lengkap bikin bot WhatsApp otomatis untuk usaha kecil menengah. Catalog, harga, order, semua otomatis. Bahasa Indonesiacampuran English.","2026-04-14",[3369,3692,3317,3693,3694],"customer-care","umkm","whatsapp-business","\u002Fimages\u002Fposts\u002Fwhatsapp-customer-care-umkm.jpg",{"path":3697,"title":3698,"description":3699,"date":3690,"category":3291,"tags":3700,"image":3704,"readingTime":3354},"\u002Ftech\u002Fwordpress-security-scanner","WordPress Security Scanner — Auto Deteksi & Bersihkan Malware","Tutorial bikin scanner otomatis untuk WordPress. Deteksi backdoor, redirect ke judol\u002Fslot, SEO spam injection, dan cleanup otomatis dengan satu command.",[3701,1319,3702,3703,3317,531],"wordpress","malware","scanner","\u002Fimages\u002Fposts\u002Fwordpress-security-scanner.jpg",{"path":3706,"title":3707,"description":3708,"date":3709,"category":3291,"tags":3710,"image":3714,"readingTime":3354},"\u002Ftech\u002Ffile-search-knowledge-base-karpathy","Bangun Knowledge Base dari Dokumen Legal — Cara Karpathy","Tutorial lengkap bikin file search knowledge base dari PDF dokumen legal. Regex extraction + RAG scoring + LLM. Ala Andrej Karpathy.","2026-04-09",[531,3711,3573,3712,3524,3713],"knowledge-base","karpathy","legal","\u002Fimages\u002Fposts\u002Ffile-search-kb-karpathy.webp",{"path":3716,"title":3717,"description":3718,"date":3719,"category":3291,"tags":3720,"image":3725,"readingTime":3599},"\u002Ftech\u002Fsimpen-bookmark-manager","Self-Hosted Bookmark Manager dengan Custom Branding via Nginx","Tutorial setup Karakeep bookmark manager self-hosted dengan Docker, nginx reverse proxy, dan custom branding tanpa edit source code","2026-04-07",[3721,1074,3722,3723,3724],"self-hosted","nginx","bookmark","karakeep","\u002Fimages\u002Fposts\u002Fsimpen-bookmark-manager.webp",{"path":3727,"title":3728,"description":3729,"date":3730,"category":3291,"tags":3731,"image":3733,"readingTime":3380},"\u002Ftech\u002Ftailscale-vpn-exit-node","Tailscale VPN di VPS — Bypass Blokiran Internet dengan Mudah","Tutorial setup Tailscale sebagai exit node di VPS. Akses Reddit, situs yang diblokir, dan tingkatkan keamanan internet kamu.","2026-04-06",[3732,669,3501,1319,3448],"vpn","\u002Fimages\u002Fposts\u002Ftailscale-vpn-exit-node.jpg",{"path":3735,"title":3736,"description":3737,"date":3738,"category":3291,"tags":3739,"image":3742,"readingTime":3380},"\u002Ftech\u002Fsistem-komunikasi-perumahan-bot-whatsapp","Sistem Komunikasi Cluster Perumahan dengan Bot WhatsApp — Otomatis, 24 Jam, Tanpa Drama","Bayangkan perumahan tanpa drama. Bot WhatsApp yang handle tamu, paket, komplain, iuran, dan pengumuman — 24\u002F7 tanpa manusia. Ini bukan mimpi, ini sudah bisa.","2026-04-05T16:00:00+08:00",[531,3369,3740,3317,3741],"smart-home","perumahan","\u002Fimages\u002Fposts\u002Fhousing-header.webp",{"path":3744,"title":3745,"description":3746,"date":3747,"category":3291,"tags":3748,"image":3751,"readingTime":3412},"\u002Ftech\u002Fopenclaw-advance-marketing-system","OpenClaw Advance Marketing System: Bangun Mesin Iklan & Closing Otomatis 24 Jam","Review lengkap kelas OpenClaw Advance Marketing System oleh Ari Eko Prasethio & Rama Aditya. Pelajari cara membangun sistem marketing otomatis — dari.","2026-04-05T11:00:00+08:00",[531,3328,3749,3317,3750],"marketing","kursus","\u002Fimages\u002Fposts\u002Fopenclaw-advance-marketing.jpg",{"path":3753,"title":3754,"description":3755,"date":3756,"category":3291,"tags":3757,"image":3762,"readingTime":3763},"\u002Ftech\u002Fcircutor-scout-iot-monitoring","Monitoring Energi Industri dengan IoT: Panduan Lengkap Circutor Scout + OpenClaw Dashboard","Panduan lengkap implementasi monitoring energi industri pakai Circutor Scout Platform + IoT system. Dari install CVM energy meter sampai custom dashboard.","2026-04-05 15:30:00",[3758,3459,3492,3759,3760,531,3761,3317],"circutor","industrial","modbus","dashboard","\u002Fimages\u002Fposts\u002Fcircutor-header.jpg","22",{"path":3765,"title":3766,"description":3767,"date":3768,"category":3291,"tags":3769,"image":3773,"readingTime":3321},"\u002Ftech\u002Fattendance-story-driven-tracking","Story-Driven Attendance Tracking: How I Built a Smart System for My Engineering Team","Dari absensi manual ke sistem GPS otomatis — bagaimana saya mengubah cara tim engineering saya mencatat kehadiran dengan OpenClaw dan Android app.","2026-04-04 19:18:00",[531,3770,3771,3317,3772],"hr-tech","engineering","android","\u002Fimages\u002Fposts\u002Fattendance-story-hero.jpg",{"path":3775,"title":3776,"description":3777,"date":3778,"category":3291,"tags":3779,"image":3781,"readingTime":3450},"\u002Ftech\u002Fopenclaw-cs-whatsapp-gateway","OpenClaw sebagai CS Otomatis — Arsitektur WhatsApp Gateway, Invoice & Database Strict","Bikin customer service bot WhatsApp dengan OpenClaw sebagai otak, gateway sebagai jembatan, dan database strict yang nggak bocor. Panduan lengkap dari.","2026-04-04 14:30:00",[531,3369,3780,3317,3526,3573,1319],"customer-service","\u002Fimages\u002Fposts\u002Fcs-wa-architecture.jpg",{"path":3783,"title":3784,"description":3785,"date":3786,"category":3291,"tags":3787,"image":3790,"readingTime":3437},"\u002Ftech\u002Findustrial-energy-monitoring","Monitoring Listrik Industri: Cara Hemat Jutaan dari Motor, HVAC & PLC","Harga bahan bakar industri naik terus. Motor listrik menghabiskan 60-70% energi pabrik. Ini panduan lengkap monitoring sistem listrik industri — dari CT.","2026-04-04 14:14:00",[3759,3788,3789,3317,531,3459],"monitoring","energy","\u002Fimages\u002Fposts\u002Findustrial-monitoring-header-og.jpg",{"path":3792,"title":3793,"description":3794,"date":3795,"category":3291,"tags":3796,"image":3801,"readingTime":3802},"\u002Ftech\u002Fopenclaw-smart-hotel","OpenClaw × Smart Hotel — Integrasi BAS, AI Concierge, dan Green Rewards","Tutorial lengkap implementasi OpenClaw sebagai smart hotel assistant: integrasi BAS (Building Automation System), AI concierge via WhatsApp, WiFi login.","2026-04-04 14:13:00",[531,3797,3798,3459,3799,3800],"smart-hotel","bas","ai-concierge","building-automation","\u002Fimages\u002Fposts\u002Fsmart-hotel-header-og.jpg","21",{"path":3804,"title":3805,"description":3806,"date":3807,"category":3291,"tags":3808,"image":3812,"readingTime":3813},"\u002Ftech\u002Fopenclaw-llm-provider-guide","Panduan Lengkap Pilih LLM Provider untuk OpenClaw — Dari Personal Sampai 1 Juta User","Perbandingan lengkap LLM provider 2026: OpenAI, Anthropic, Google, DeepSeek, lokal. Rate limit, harga, Mac Mini vs VPS, multi-provider setup di OpenClaw,.","2026-04-04 14:12:00",[531,3574,3328,3809,3501,3810,3317,3811],"provider","cost","local-llm","\u002Fimages\u002Fposts\u002Fopenclaw-llm-provider-guide.jpg","16",{"path":3815,"title":3816,"description":3817,"date":3818,"category":3291,"tags":3819,"image":3821,"readingTime":3763},"\u002Ftech\u002Fopenclaw-skill-ecosystem","Membangun Ekosistem AI Agent Skill dari 15+ GitHub Repos — 324 Skill dalam Satu Hari","Bagaimana gue menganalisis 15+ repository dengan total 500K+ stars, menyeleksi yang terbaik, dan mengintegrasikannya jadi satu ekosistem skill buat AI agent.","2026-04-04 14:11:00",[531,3389,3820,3664,3317,3771,3608],"skills","\u002Fimages\u002Fposts\u002Fopenclaw-skill-ecosystem.webp",{"path":3823,"title":3824,"description":3825,"date":3826,"category":3291,"tags":3827,"image":3832,"readingTime":3392},"\u002Ftech\u002Fopenclaw-2026-4-2","OpenClaw 2026.4.2 — Task Flow Kembali, YOLO Mode Default, dan 2 Breaking Changes yang Wajib Lo Tahu","Review lengkap OpenClaw 2026.4.2: Task Flow restoration dengan managed\u002Fmirrored sync, YOLO mode jadi default, breaking changes xAI & Firecrawl, plus.","2026-04-04 14:10:00",[531,3828,3829,3389,1319,3317,3830,3831],"update","task-flow","yolo-mode","breaking-changes","\u002Fimages\u002Fposts\u002Fopenclaw-2026-4-2.jpg",{"path":3834,"title":3835,"description":3836,"date":3837,"category":3291,"tags":3838,"image":3841,"readingTime":3599},"\u002Ftech\u002Fopenclaw-ops-self-healing","OpenClaw Ops — Bikin Gateway Kamu Self-Healing Setelah Update","OpenClaw tiap update suka break sesuatu. Auth ke-reset, exec approval nge-blok, cron job di-disable otomatis. Ini layer ops yang bikin gateway kamu fix diri.","2026-04-03 08:00:00+08:00",[531,3839,3840,1319,3317],"ops","self-healing","\u002Fimages\u002Fposts\u002Fopenclaw-ops-self-healing-og.jpg",{"path":3843,"title":3844,"description":3845,"date":3846,"category":3291,"tags":3847,"image":3849,"readingTime":3638},"\u002Ftech\u002Fai-agent-dashboard-openclaw-sumopod-vps","Build AI Agent Dashboard dengan OpenClaw + Sumopod VPS","Tutorial lengkap bikin AI agent yang jalan 24\u002F7, terhubung ke Telegram, email, calendar, dan bikin dashboard real-time pakai Next.js.","2026-04-03",[3389,531,3448,3527,3761,3848,3317],"n8n","\u002Fimages\u002Fposts\u002Fai-agent-dashboard-og.jpg",{"path":3851,"title":3852,"description":3853,"date":3846,"category":3291,"tags":3854,"image":3859,"readingTime":3344},"\u002Ftech\u002Fbuild-blog-nuxt-content-tailwind","Bikin Blog Statis dengan Nuxt Content — Dari Nol Sampai Live","Tired of Medium dan WordPress? Bikin blog sendiri dengan Nuxt Content + Tailwind CSS. Markdown-based, dark mode, search, RSS — semuanya gratis dan kamu yang.",[3855,3856,3857,3858],"nuxt","blog","tailwind","tutorial","\u002Fimages\u002Fposts\u002Fbuild-blog-og.jpg",{"path":3861,"title":3862,"description":3863,"date":3846,"category":3291,"tags":3864,"image":3867,"readingTime":3344},"\u002Ftech\u002Fdark-mode-search-nuxt-github-libraries","Dark Mode & Search di Nuxt 3? Nggak Perlu Ribet — Cukup Tambah 2 Script","Mau pasang dark mode dan search di blog Nuxt 3 kamu? Tanpa npm install, tanpa plugin ribet. Cukup tambah 2 library dari CDN — Darkmode.js dan Fuse.js.",[3865,3855,3866,3858],"dark-mode","javascript","\u002Fimages\u002Fposts\u002Fdark-mode-search-og.jpg",{"path":3869,"title":3870,"description":3871,"date":3846,"category":3291,"tags":3872,"image":3875,"readingTime":3344},"\u002Ftech\u002Femail-setup-namecheap-google-workspace","Punya Email Domain Sendiri? Cuma 15 Menit, Gratis!","Punya Email Domain Sendiri? Cuma 15 Menit, Gratis Bayangin punya email inquiry@yourdomain.com yang langsung masuk ke inbox kamu. Profesional, keren, dan —…",[3873,3662,3874,3858],"email","namecheap","\u002Fimages\u002Fposts\u002Femail-setup-og.jpg",{"path":3877,"title":3878,"description":3879,"date":3880,"category":3291,"tags":3881,"image":3884,"readingTime":3380},"\u002Ftech\u002Fopenclaw-exec-approvals-fix","Fix Exec Approvals OpenClaw 2026.4.1 — Command Gagal Approve?","Update ke 2026.4.1 tapi exec approvals error? Ini penyebabnya dan cara fix-nya. Dibahas praktis dengan konteks Radian Group, engineering, automation, dan pene","2026-04-02 09:00:00+08:00",[531,3646,3882,3883],"exec","approvals","\u002Fimages\u002Fposts\u002Fopenclaw-exec-approvals-fix.jpg",{"path":3886,"title":3887,"description":3888,"date":3889,"category":3291,"tags":3890,"image":3891,"readingTime":3892},"\u002Ftech\u002Fopenclaw-dasar-pemula-guide","OpenClaw untuk Pemula: Panduan Setup dari Nol","Panduan lengkap setup OpenClaw dari nol — AI assistant yang bisa jalan 24\u002F7 di VPS kamu. Dibahas praktis dengan konteks Radian Group, engineering, automation,","2026-04-02 08:00:00+08:00",[531,3858,3328],"\u002Fimages\u002Fposts\u002Fopenclaw-dasar-pemula-guide.jpg","2",{"path":3894,"title":3895,"description":3896,"date":3897,"category":3291,"tags":3898,"image":3900,"readingTime":3321},"\u002Ftech\u002Ftrae-agent-automation","Trae Agent: Satu AI untuk Semua Automasi — Setup & Tips","Trae agent bisa handle banyak tugas sekaligus. Ini cara setup-nya biar maksimal. Dibahas praktis dengan konteks Radian Group, engineering, automation, dan pen","2026-04-02",[3328,3899,3317,3342],"trae","\u002Fimages\u002Fposts\u002Ftrae-agent-automation.jpg",{"path":3902,"title":3903,"description":3904,"date":3905,"category":3291,"tags":3906,"image":3908,"readingTime":3392},"\u002Ftech\u002Fopenclaw-vs-hermes-agent","OpenClaw vs Hermes Agent (2026) — Komparasi Jujur, Tanpa Bacot","Dua AI agent platform terbaik 2026. Aku pakai keduanya — ini review jujur mana yang lebih cocok untuk apa. Dibahas praktis dengan konteks Radian Group, engine","2026-04-01 08:00:00+08:00",[531,584,3328,3907],"comparison","\u002Fimages\u002Fposts\u002Fopenclaw-vs-hermes-agent.jpg",{"path":3910,"title":3911,"description":3912,"date":3913,"category":3291,"tags":3914,"image":3919,"readingTime":3599},"\u002Ftech\u002Fabsensi-migrasi-supabase","Migrasi Absensi ke Supabase: Dari Spreadsheet ke Database Real-Time","Bosan dengan spreadsheet absensi yang error terus? Yuk migrasi ke Supabase — setup 30 menit, data real-time forever. Dibahas praktis dengan konteks Radian Gro","2026-04-01",[3915,3916,3917,3918],"supabase","database","absensi","migration","\u002Fimages\u002Fposts\u002Fabsensi-migrasi-supabase.jpg",{"path":3921,"title":3922,"description":3923,"date":3913,"category":3291,"tags":3924,"image":3928,"readingTime":3507},"\u002Ftech\u002Fai-coding-cli-openclaw-kiro-trae","AI Coding CLI Battle: OpenClaw vs Kiro vs Trae — Mana yang Paling Kencang?","Test head-to-head tiga AI coding CLI terbaik 2026. Hasilnya... nggak kayak yang kamu kira. Dibahas praktis dengan konteks Radian Group, engineering, automatio",[3328,3925,3926,3927,3899,531],"coding","cli","kiro","\u002Fimages\u002Fposts\u002Fai-coding-cli-openclaw-kiro-trae.jpg",{"path":3930,"title":3931,"description":3932,"date":3913,"category":3291,"tags":3933,"image":3935,"readingTime":3599},"\u002Ftech\u002Fdashboard-vps-nextjs","Satu Dashboard untuk Semua VPS: Build dengan Next.js","Punya banyak VPS tapi monitor-nya masih cek satu-satu? Build dashboard gabungan yang ngumpulin semua metrics di satu tempat.",[3934,3761,3501,3788],"nextjs","\u002Fimages\u002Fposts\u002Fdashboard-vps-nextjs.jpg",{"path":3937,"title":3938,"description":3939,"date":3913,"category":3291,"tags":3940,"image":3943,"readingTime":3344},"\u002Ftech\u002Ferror-boundary-nextjs","Error Boundary di Next.js: Dashboard Nggak Lagi White Screen of Death","Satu error kecil bikin seluruh dashboard crash? Pasang error boundary — biar yang error cuma komponennya, bukan seluruh halaman.",[3934,3941,3761,3942],"error-handling","react","\u002Fimages\u002Fposts\u002Ferror-boundary-nextjs.jpg",{"path":3945,"title":3946,"description":3947,"date":3913,"category":3291,"tags":3948,"image":3952,"readingTime":3354},"\u002Ftech\u002Ffile-manager-search-nextjs","File Manager dengan Search & Highlight di Next.js","Cari file di dashboard tanpa reload page. Implementasi client-side search dengan highlight real-time. Dibahas praktis dengan konteks Radian Group, engineering",[3934,3949,3950,3951],"file-manager","search","ui","\u002Fimages\u002Fposts\u002Ffile-manager-search-nextjs.jpg",{"path":3954,"title":3955,"description":3956,"date":3913,"category":3291,"tags":3957,"image":3960,"readingTime":3892},"\u002Ftech\u002Fintegrasi-layanan-eksternal-openclaw","Integrasi Layanan Eksternal dengan OpenClaw — API, Webhook, dan N8N","Hubungkan OpenClaw ke dunia luar. Gmail, Slack, Notion, API apapun — semua bisa. Dibahas praktis dengan konteks Radian Group, engineering, automation, dan pen",[531,3626,3958,3848,3959],"api","webhook","\u002Fimages\u002Fposts\u002Fintegrasi-layanan-eksternal-openclaw.webp",{"path":3962,"title":3963,"description":3964,"date":3913,"category":3291,"tags":3965,"image":3967,"readingTime":3968},"\u002Ftech\u002Fjasa-install-openclaw","Jasa Install OpenClaw Profesional 2026 — Panduan Lengkap","Mau install OpenClaw tapi bingung mulai dari mana? Panduan lengkap dari nol sampai production-ready. Dibahas praktis dengan konteks Radian Group, engineering,",[531,3636,3635,3966],"server","\u002Fimages\u002Fposts\u002Fjasa-install-openclaw.jpg","25",{"path":3970,"title":3971,"description":3972,"date":3913,"category":3291,"tags":3973,"image":3976,"readingTime":3599},"\u002Ftech\u002Fnotifikasi-health-check-nextjs","Sistem Notifikasi Health Check di Next.js — Alert Sebelum User Komplen","Jangan tunggu user komplen. Setup health check dengan notifikasi real-time sebelum masalah jadi bencana. Dibahas praktis dengan konteks Radian Group, engineer",[3934,3788,3974,3975],"notification","health-check","\u002Fimages\u002Fposts\u002Fnotifikasi-health-check-nextjs.jpg",{"path":3978,"title":3979,"description":3980,"date":3913,"category":3291,"tags":3981,"image":3984,"readingTime":3344},"\u002Ftech\u002Fupgrade-openclaw-2026-3-31","Upgrade OpenClaw ke 2026.3.31 — Apa yang Baru dan Cara Upgrade","Update besar OpenClaw akhir Maret 2026. Fitur baru, breaking changes, dan cara upgrade tanpa drama. Dibahas praktis dengan konteks Radian Group, engineering, ",[531,3982,3983],"upgrade","changelog","\u002Fimages\u002Fposts\u002Fupgrade-openclaw-2026-3-31.jpg",{"path":3986,"title":3987,"description":3988,"date":3989,"category":3291,"tags":3990,"image":3991,"readingTime":3992},"\u002Ftech\u002Fdashboard-briefing-monitor","AI Agent Dashboard Bagian 2: Dashboard, Briefing & System Monitor","Part 2 — Bikin halaman utama dashboard, morning briefing page, dan system monitor dengan real-time data. Dibahas praktis dengan konteks Radian Group, engineer","2026-03-28",[3934,3761,3788,3958],"\u002Fimages\u002Fposts\u002Fdashboard-briefing-monitor.jpg","18",{"path":3994,"title":3995,"description":3996,"date":3989,"category":3291,"tags":3997,"image":4000,"readingTime":4001},"\u002Ftech\u002Fmodels-settings-deploy","AI Agent Dashboard Bagian 4: Models, Settings & Deployment","Part 4 — Configuration models, settings page, animasi polish, API routes, dan deployment ke production. Dibahas praktis dengan konteks Radian Group, engineeri",[3934,3761,3998,3999],"deployment","production","\u002Fimages\u002Fposts\u002Fmodels-settings-deploy.jpg","30",{"path":4003,"title":4004,"description":4005,"date":3989,"category":3291,"tags":4006,"image":4009,"readingTime":4010},"\u002Ftech\u002Fsessions-skills-logs","AI Agent Dashboard Bagian 3: Sessions, Skills & Logs","Part 3 — Track sessions, manage skills hub, schedule cron jobs, dan monitoring logs. Dibahas praktis dengan konteks Radian Group, engineering, automation, dan",[3934,3761,4007,4008,2456],"sessions","logs","\u002Fimages\u002Fposts\u002Fsessions-skills-logs.jpg","31",{"path":4012,"title":4013,"description":4014,"date":3989,"category":3291,"tags":4015,"image":4017,"readingTime":3507},"\u002Ftech\u002Fsetup-layout","AI Agent Dashboard Bagian 1: Setup, Layout & Navigasi","Part 1 — Fondasi dashboard AI agent dari nol. Next.js 14, Tailwind, shadcn\u002Fui, dan arsitektur layout yang scalable. Dibahas praktis dengan konteks Radian Grou",[3934,3761,3328,4016,3636],"layout","\u002Fimages\u002Fposts\u002Fsetup-layout.jpg",{"path":4019,"title":4020,"description":4021,"date":4022,"category":3291,"tags":4023,"image":4026,"readingTime":3380},"\u002Ftech\u002Fai-video-generation-pipeline","Pipeline AI Video Generation: Dari Script jadi Video Otomatis","Bikin video tanpa buka video editor sekali pun. Setup pipeline AI yang jalan sendiri — dari naskah sampai final render. Dibahas praktis dengan konteks Radian ","2026-03-12",[3328,4024,3317,4025],"video","pipeline","\u002Fimages\u002Fposts\u002Fai-video-generation-pipeline.jpg",{"path":4028,"title":4029,"description":4030,"date":4022,"category":3291,"tags":4031,"image":4034,"readingTime":3321},"\u002Ftech\u002Frepliz-threads-auto-post","Auto-Post ke Threads dengan OpenClaw + Repliz — Content Marketing Otomatis","Threads tapi autopilot. Setup posting otomatis dengan AI-generated content yang engage. Dibahas praktis dengan konteks Radian Group, engineering, automation, ",[3306,4032,3317,4033],"repliz","social-media","\u002Fimages\u002Fposts\u002Frepliz-threads-auto-post.jpg",{"path":4036,"title":4037,"description":4038,"date":4039,"category":3291,"tags":4040,"image":4041,"readingTime":3380},"\u002Ftech\u002Fgmail-auto-label-triage","Gmail Auto-Label & Triage: Email Teratur Tanpa Manual Sorting","Inbox rapi otomatis. Setup AI-based email triage yang label, prioritas, dan sort email tanpa kamu sentuh. Dibahas praktis dengan konteks Radian Group, enginee","2026-03-11",[3341,3873,3317,3328],"\u002Fimages\u002Fposts\u002Fgmail-auto-label-triage.jpg",{"path":4043,"title":4044,"description":4045,"date":4039,"category":3291,"tags":4046,"image":4049,"readingTime":3599},"\u002Ftech\u002Fgog-cli-google-workspace","Gog CLI: Akses Google Workspace dari Terminal — Superpowers buat Dev","Gmail, Drive, Calendar, Sheets — semua dari terminal. Gog CLI bikin Google Workspace jadi tools developer, bukan apps bisnis.",[4047,3926,4048,3504,3514],"google","gog","\u002Fimages\u002Fposts\u002Fgog-cli-google-workspace.jpg",{"path":4051,"title":4052,"description":4053,"date":4039,"category":3291,"tags":4054,"image":4057,"readingTime":3354},"\u002Ftech\u002Fhindari-bug-kimi-openclaw","⚠️ BUG CRITICAL: Jangan Update OpenClaw ke Versi 2026.3.7!","Kimi 2.5 bikin OpenClaw error parah. Ini yang perlu kamu tahu sebelum update — dan cara fix-nya. Dibahas praktis dengan konteks Radian Group, engineering, aut",[531,4055,4056,2490],"bug","kimi","\u002Fimages\u002Fposts\u002Fhindari-bug-kimi-openclaw.jpg",{"path":4059,"title":4060,"description":4061,"date":4039,"category":3291,"tags":4062,"image":4064,"readingTime":3321},"\u002Ftech\u002Fmulti-agent-shared-memory","Multi-Agent dengan Shared Memory — AI Team yang Bisa Ngobrol Sama","Satu agent nggak cukup? Bangun tim AI yang share memory dan koordinasi — kayak tim developer, tapi tanpa drama. Dibahas praktis dengan konteks Radian Group, e",[3328,3608,4063,531],"memory","\u002Fimages\u002Fposts\u002Fmulti-agent-shared-memory.jpg",{"path":4066,"title":4067,"description":4068,"date":4039,"category":3291,"tags":4069,"image":4073,"readingTime":3380},"\u002Ftech\u002Fredis-caching-pattern","Redis Caching Pattern: Akselerasi API 10x dengan Cache yang Benar","API lambat? Cache dulu. Redis pattern yang bener bisa bikin response time turun drastis. Dibahas praktis dengan konteks Radian Group, engineering, automation,",[4070,4071,4072,3958],"redis","caching","performance","\u002Fimages\u002Fposts\u002Fredis-caching-pattern.jpg",{"path":4075,"title":4076,"description":4077,"date":4039,"category":3291,"tags":4078,"image":4080,"readingTime":3380},"\u002Ftech\u002Fservice-health-dashboard","Build Service Health Dashboard — Monitor Semua Service di Satu Tempat","Microservices? Monolith? Whatever. Dashboard ini nge-track health semua service kamu dalam real-time. Dibahas praktis dengan konteks Radian Group, engineering",[3761,3788,3516,4079],"health","\u002Fimages\u002Fposts\u002Fservice-health-dashboard.jpg",{"path":4082,"title":4083,"description":4084,"date":4039,"category":3291,"tags":4085,"image":4087,"readingTime":3412},"\u002Ftech\u002Fsmart-email-forward-pdf","Smart Email Forward dengan PDF Attachment — Otomatis & Pintar","Forward email berdasarkan konten, extract PDF, dan route ke orang yang tepat. Tanpa satu baris manual work. Dibahas praktis dengan konteks Radian Group, engin",[3873,3317,4086,3328],"pdf","\u002Fimages\u002Fposts\u002Fsmart-email-forward-pdf.jpg",{"path":4089,"title":4090,"description":4091,"date":4039,"category":3291,"tags":4092,"image":4094,"readingTime":3321},"\u002Ftech\u002Fsmart-email-triage-ai","Smart Email Triage dengan AI — Inbox Zero Tanpa Sakit Kepala","Filter email penting dari spam dalam sekejap. AI triage yang belajar preferensi kamu. Dibahas praktis dengan konteks Radian Group, engineering, automation, da",[3873,3328,3317,4093],"productivity","\u002Fimages\u002Fposts\u002Fsmart-email-triage-ai.jpg",{"path":4096,"title":4097,"description":4098,"date":4099,"category":3291,"tags":4100,"image":4103,"readingTime":3354},"\u002Ftech\u002Fauto-post-ke-website","Auto-Post ke Website dengan OpenClaw — Content Publishing Otomatis","Stop copy-paste manual. Setup auto-posting dari draft ke website dalam hitungan menit. Dibahas praktis dengan konteks Radian Group, engineering, automation, d","2026-03-08",[3317,4101,4102,531],"website","content","\u002Fimages\u002Fposts\u002Fauto-post-ke-website.jpg",{"path":4105,"title":4106,"description":4107,"date":4099,"category":3291,"tags":4108,"image":4109,"readingTime":3354},"\u002Ftech\u002Fdeployment-butler-otomatis","Deployment Butler: Assistant Deployment yang Jaga Server 24\u002F7","Deploy tanpa was-was. Butler yang monitor deploys, rollback otomatis kalau error, dan kasih notifikasi real-time. Dibahas praktis dengan konteks Radian Group,",[3998,3317,3516,531],"\u002Fimages\u002Fposts\u002Fdeployment-butler-otomatis.jpg",{"path":4111,"title":4112,"description":4113,"date":4099,"category":3291,"tags":4114,"image":4118,"readingTime":3354},"\u002Ftech\u002Fexcalidraw-diagram-ai","Generate Diagram Excalidraw dengan AI — Dari Prompt jadi Visual","Uraian teks panjang jadi diagram cantik dalam sekejap. Excalidraw + AI = combo mematikan untuk dokumentasi. Dibahas praktis dengan konteks Radian Group, engin",[4115,3328,4116,4117],"excalidraw","diagram","visual","\u002Fimages\u002Fposts\u002Fexcalidraw-diagram-ai.webp",{"path":4120,"title":4121,"description":4122,"date":4099,"category":3291,"tags":4123,"image":4124,"readingTime":3321},"\u002Ftech\u002Fn8n-integrasi-openclaw","Integrasi N8N dengan OpenClaw — Workflow Automation Powerhouse","N8N + OpenClaw = automation yang nggak terbatas. Dari email trigger sampai deployment pipeline. Dibahas praktis dengan konteks Radian Group, engineering, auto",[3848,531,3317,3552],"\u002Fimages\u002Fposts\u002Fn8n-integrasi-openclaw.jpg",{"path":4126,"title":4127,"description":4128,"date":4099,"category":3291,"tags":4129,"image":4131,"readingTime":3380},"\u002Ftech\u002Fsmart-file-butler","Smart File Butler: Assistant File Management yang Pintar","File berserakan? Butler ini otomatis sort, tag, dan organize file kamu berdasarkan konten. Dibahas praktis dengan konteks Radian Group, engineering, automatio",[3317,4130,3328,531],"file-management","\u002Fimages\u002Fposts\u002Fsmart-file-butler.jpg",{"path":4133,"title":4134,"description":4135,"date":4099,"category":3291,"tags":4136,"image":4140,"readingTime":3599},"\u002Ftech\u002Fvisual-data-alert","Visual Data Alert — Dari Data jadi Grafik Otomatis","Angka-angka mentah susah dibaca? Otomatis convert ke grafik dan kirim alert kalau ada anomali. Dibahas praktis dengan konteks Radian Group, engineering, autom",[4137,4138,4139,3317],"data","visualization","alert","\u002Fimages\u002Fposts\u002Fvisual-data-alert.jpg",{"path":4142,"title":4143,"description":4144,"date":4099,"category":3291,"tags":4145,"image":4147,"readingTime":3599},"\u002Ftech\u002Fvoice-memo-to-action","Voice Memo to Action — Bicara, AI yang Kerja","Record voice memo, AI convert jadi task, assign, dan track. Productivity level up tanpa ngetik. Dibahas praktis dengan konteks Radian Group, engineering, auto",[4146,3328,4093,3317],"voice","\u002Fimages\u002Fposts\u002Fvoice-memo-to-action.jpg",{"path":4149,"title":4150,"description":4151,"date":4152,"category":3291,"tags":4153,"image":4156,"readingTime":3321},"\u002Ftech\u002Fopenclaw-alibaba-coding","OpenClaw + Alibaba Cloud: 8 AI Model, 1 API Key — Hemat 90%","Bayar 8 provider AI berbeda? Stop. Pakai Alibaba Cloud, satu API key buat 8 model AI top — harga kaki lima. Dibahas praktis dengan konteks Radian Group, engin","2026-03-05 09:00:00+08:00",[531,4154,3328,4155],"alibaba","cloud","\u002Fimages\u002Fposts\u002Fopenclaw-alibaba-coding.webp",{"path":4158,"title":4159,"description":4160,"date":4161,"category":3291,"tags":4162,"image":4164,"readingTime":3354},"\u002Ftech\u002Fopenclaw-multi-agent-system","Sistem Multi-Agent OpenClaw — Bangun Tim AI yang Koordinasi","4 AI agent, 1 koordinator, mission accomplished. Ini arsitektur multi-agent yang aku pakai sehari-hari. Dibahas praktis dengan konteks Radian Group, engineeri","2026-03-05 08:00:00+08:00",[531,3608,3328,4163],"architecture","\u002Fimages\u002Fposts\u002Fopenclaw-multi-agent-system.webp",1781013021338]