[{"data":1,"prerenderedAt":5985},["ShallowReactive",2],{"published-article-paths":3,"search-navigation":348,"\u002Fid\u002Farticle\u002Fself-hosted-travel-planner-trek":421,"\u002Fid\u002Farticle\u002Fself-hosted-travel-planner-trek-surround":2442},[4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346],{"path":5},"\u002Fde\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":7},"\u002Fde\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":9},"\u002Fde\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":11},"\u002Fde\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":13},"\u002Fde\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":15},"\u002Fde\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":17},"\u002Fde\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":19},"\u002Fde\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":21},"\u002Fde\u002Farticle\u002Fsetup-antigravity-2",{"path":23},"\u002Fde\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":25},"\u002Fde\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":27},"\u002Fde\u002Farticle\u002Fsync-obsidian-across-devices",{"path":29},"\u002Fde\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":31},"\u002Fde\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":33},"\u002Fde\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":35},"\u002Fde\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":37},"\u002Fen\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":39},"\u002Fen\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":41},"\u002Fen\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":43},"\u002Fen\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":45},"\u002Fen\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":47},"\u002Fen\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":49},"\u002Fen\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":51},"\u002Fen\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":53},"\u002Fen\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":55},"\u002Fen\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":57},"\u002Fen\u002Farticle\u002Fsetup-antigravity-2",{"path":59},"\u002Fen\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":61},"\u002Fen\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":63},"\u002Fen\u002Farticle\u002Fsync-obsidian-across-devices",{"path":65},"\u002Fen\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":67},"\u002Fen\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":69},"\u002Fen\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":71},"\u002Fen\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":73},"\u002Fes\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":75},"\u002Fes\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":77},"\u002Fes\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":79},"\u002Fes\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":81},"\u002Fes\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":83},"\u002Fes\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":85},"\u002Fes\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":87},"\u002Fes\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":89},"\u002Fes\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":91},"\u002Fes\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":93},"\u002Fes\u002Farticle\u002Fsetup-antigravity-2",{"path":95},"\u002Fes\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":97},"\u002Fes\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":99},"\u002Fes\u002Farticle\u002Fsync-obsidian-across-devices",{"path":101},"\u002Fes\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":103},"\u002Fes\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":105},"\u002Fes\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":107},"\u002Fes\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":109},"\u002Ffr\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":111},"\u002Ffr\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":113},"\u002Ffr\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":115},"\u002Ffr\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":117},"\u002Ffr\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":119},"\u002Ffr\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":121},"\u002Ffr\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":123},"\u002Ffr\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":125},"\u002Ffr\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":127},"\u002Ffr\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":129},"\u002Ffr\u002Farticle\u002Fsetup-antigravity-2",{"path":131},"\u002Ffr\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":133},"\u002Ffr\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":135},"\u002Ffr\u002Farticle\u002Fsync-obsidian-across-devices",{"path":137},"\u002Ffr\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":139},"\u002Ffr\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":141},"\u002Ffr\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":143},"\u002Ffr\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":145},"\u002Fid\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":147},"\u002Fid\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":149},"\u002Fid\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":151},"\u002Fid\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":153},"\u002Fid\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":155},"\u002Fid\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":157},"\u002Fid\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":159},"\u002Fid\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":161},"\u002Fid\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":163},"\u002Fid\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":165},"\u002Fid\u002Farticle\u002Fsetup-antigravity-2",{"path":167},"\u002Fid\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":169},"\u002Fid\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":171},"\u002Fid\u002Farticle\u002Fsync-obsidian-across-devices",{"path":173},"\u002Fid\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":175},"\u002Fid\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":177},"\u002Fid\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":179},"\u002Fid\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":181},"\u002Fja\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":183},"\u002Fja\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":185},"\u002Fja\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":187},"\u002Fja\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":189},"\u002Fja\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":191},"\u002Fja\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":193},"\u002Fja\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":195},"\u002Fja\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":197},"\u002Fja\u002Farticle\u002Fsetup-antigravity-2",{"path":199},"\u002Fja\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":201},"\u002Fja\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":203},"\u002Fja\u002Farticle\u002Fsync-obsidian-across-devices",{"path":205},"\u002Fja\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":207},"\u002Fja\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":209},"\u002Fja\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":211},"\u002Fja\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":213},"\u002Fpt\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":215},"\u002Fpt\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":217},"\u002Fpt\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":219},"\u002Fpt\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":221},"\u002Fpt\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":223},"\u002Fpt\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":225},"\u002Fpt\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":227},"\u002Fpt\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":229},"\u002Fpt\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":231},"\u002Fpt\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":233},"\u002Fpt\u002Farticle\u002Fsetup-antigravity-2",{"path":235},"\u002Fpt\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":237},"\u002Fpt\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":239},"\u002Fpt\u002Farticle\u002Fsync-obsidian-across-devices",{"path":241},"\u002Fpt\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":243},"\u002Fpt\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":245},"\u002Fpt\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":247},"\u002Fpt\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":249},"\u002Ftw\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":251},"\u002Ftw\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":253},"\u002Ftw\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":255},"\u002Ftw\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":257},"\u002Ftw\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":259},"\u002Ftw\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":261},"\u002Ftw\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":263},"\u002Ftw\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":265},"\u002Ftw\u002Farticle\u002Fsetup-antigravity-2",{"path":267},"\u002Ftw\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":269},"\u002Ftw\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":271},"\u002Ftw\u002Farticle\u002Fsync-obsidian-across-devices",{"path":273},"\u002Ftw\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":275},"\u002Ftw\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":277},"\u002Ftw\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":279},"\u002Ftw\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":281},"\u002Fvi\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":283},"\u002Fvi\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":285},"\u002Fvi\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":287},"\u002Fvi\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":289},"\u002Fvi\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":291},"\u002Fvi\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":293},"\u002Fvi\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":295},"\u002Fvi\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":297},"\u002Fvi\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":299},"\u002Fvi\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":301},"\u002Fvi\u002Farticle\u002Fsetup-antigravity-2",{"path":303},"\u002Fvi\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":305},"\u002Fvi\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":307},"\u002Fvi\u002Farticle\u002Fsync-obsidian-across-devices",{"path":309},"\u002Fvi\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":311},"\u002Fvi\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":313},"\u002Fvi\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":315},"\u002Fvi\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":317},"\u002Fzh\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":319},"\u002Fzh\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":321},"\u002Fzh\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":323},"\u002Fzh\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":325},"\u002Fzh\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":327},"\u002Fzh\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":329},"\u002Fzh\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":331},"\u002Fzh\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":333},"\u002Fzh\u002Farticle\u002Fsetup-antigravity-2",{"path":335},"\u002Fzh\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":337},"\u002Fzh\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":339},"\u002Fzh\u002Farticle\u002Fsync-obsidian-across-devices",{"path":341},"\u002Fzh\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":343},"\u002Fzh\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":345},"\u002Fzh\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":347},"\u002Fzh\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",[349,353,357,361,365,369,373,377,381,385,389,393,397,401,405,409,413,417],{"title":350,"path":351,"stem":352},"AI Agent Skills: What They Are & How to Create Them","\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them","en\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"title":354,"path":355,"stem":356},"Bringing Buzz to DeepSeek Harness: Taught to Speak Nostr","\u002Farticle\u002Fbringing-buzz-to-deepseek-harness","en\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"title":358,"path":359,"stem":360},"Solving AI Agent Skills Fragmentation with npx skills","\u002Farticle\u002Fcentralised-the-skills-for-agents","en\u002Farticle\u002Fcentralised-the-skills-for-agents",{"title":362,"path":363,"stem":364},"How to Expose Hermes Agent Privately with Cloudflare WARP","\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp","en\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"title":366,"path":367,"stem":368},"How AI Agent Skills Replace Nuxt App Scaffolding Scripts","\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts","en\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"title":370,"path":371,"stem":372},"Stop Exposing Your Vault: Secure NodeWarden with Cloudflare","\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare","en\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"title":374,"path":375,"stem":376},"How to Deploy Hermes Agent on a Linux VPS","\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server","en\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"title":378,"path":379,"stem":380},"Self-Host Your Travel Itineraries with TREK and Docker","\u002Farticle\u002Fself-hosted-travel-planner-trek","en\u002Farticle\u002Fself-hosted-travel-planner-trek",{"title":382,"path":383,"stem":384},"Self-Host Block's Buzz: Shared AI Agent Workspace","\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues","en\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"title":386,"path":387,"stem":388},"How to Self-Host a BitWarden Compatible Server Nodewarden","\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare","en\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"title":390,"path":391,"stem":392},"Google Antigravity 2 Hands-On: Setup & First Impressions","\u002Farticle\u002Fsetup-antigravity-2","en\u002Farticle\u002Fsetup-antigravity-2",{"title":394,"path":395,"stem":396},"NetSuite AI Connector Guide: MCP Setup & Use Cases","\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude","en\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"title":398,"path":399,"stem":400},"Switch Between Multiple Cloudflare WARP Orgs on Mac","\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac","en\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"title":402,"path":403,"stem":404},"How to Sync Obsidian Vaults Across Devices Securely","\u002Farticle\u002Fsync-obsidian-across-devices","en\u002Farticle\u002Fsync-obsidian-across-devices",{"title":406,"path":407,"stem":408},"Testing Claude Fable 5: A Financial Analysis Review","\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis","en\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"title":410,"path":411,"stem":412},"Guide to Browser and Scheduler in Antigravity 2","\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2","en\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"title":414,"path":415,"stem":416},"Build a Persistent AI Memory System on Cloudflare","\u002Farticle\u002Fuse-cloudflare-as-ai-memory","en\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"title":418,"path":419,"stem":420},"Antigravity 2 in Action: AI Agents, Skills, and MCP","\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2","en\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"id":422,"title":423,"author":424,"body":425,"category":2415,"date":2418,"description":2419,"extension":2420,"image":2421,"imageAlt":2422,"isPublished":505,"meta":2423,"minRead":2432,"navigation":505,"path":159,"seo":2433,"stem":2434,"tags":2435,"updatedAt":2440,"__hash__":2441},"article\u002Fid\u002Farticle\u002Fself-hosted-travel-planner-trek.md","Host Sendiri Rencana Perjalanan Anda dengan TREK dan Docker",null,{"type":426,"value":427,"toc":2374},"minimark",[428,432,435,438,443,448,661,665,674,694,697,701,807,821,824,830,833,845,849,853,856,859,901,905,908,941,944,986,989,994,1006,1010,1017,1021,1024,1121,1125,1131,1135,1142,1146,1149,1168,1178,1182,1185,1195,1199,1203,1212,1216,1220,1223,1227,1231,1234,1239,1242,1247,1253,1257,1261,1264,1268,1281,1286,1292,1297,1301,1304,1309,1314,1317,1324,1328,1331,1334,1344,1351,1356,1362,1367,1371,1376,1381,1384,1389,1393,1399,1403,1408,1412,1415,1418,1423,1428,1433,1437,1444,1449,1454,1459,1464,1468,1473,1478,1484,1488,1491,1495,1501,1506,1511,1517,1522,1527,1532,1546,1550,1555,1575,1580,1583,1587,1590,1595,1598,1645,1649,1656,1662,1667,1673,1678,1684,1689,1695,1698,1703,1709,1714,1720,1724,1730,1735,1740,1744,1748,1751,1755,1758,1765,1769,1776,1780,1792,1801,1805,1809,1819,1829,1834,1841,1846,1853,1857,1860,2029,2035,2039,2042,2047,2050,2058,2062,2069,2073,2076,2081,2088,2093,2097,2107,2179,2195,2198,2203,2207,2211,2222,2299,2310,2313,2317,2321,2324,2328,2331,2334,2343,2347,2370],[429,430,431],"p",{},"Bagian yang menjengkelkan dari merencanakan perjalanan adalah PDF pemesanan penerbangan, konfirmasi hotel, obrolan dengan rekan perjalanan, dan daftar tempat yang ingin dikunjungi tersebar di lokasi yang berbeda-beda. Saat tiba waktunya untuk menghitung total pengeluaran dan membagi tagihan, dibutuhkan usaha ekstra besar untuk menelusuri semua data perjalanan tersebut.",[429,433,434],{},"TREK adalah perencana perjalanan open-source yang dapat di-self-host, mengemas rencana perjalanan, pemesanan, anggaran, dan daftar bawaan Anda semua ke dalam satu tempat. Server MCP bawaan memungkinkan agen AI (seperti Claude Desktop) untuk langsung mengelola data perjalanan Anda.",[429,436,437],{},"Panduan ini akan memandu Anda melalui segalanya, mulai dari instalasi hingga mengelola perjalanan nyata sepenuhnya dari awal hingga selesai.",[439,440,442],"h3",{"id":441},"_1-cara-deploy-perencana-perjalanan-trek-menggunakan-docker","1. Cara Deploy Perencana Perjalanan TREK Menggunakan Docker",[444,445,447],"h4",{"id":446},"instal-docker-di-vps-ubuntu","Instal Docker di VPS Ubuntu",[449,450,455],"pre",{"className":451,"code":452,"language":453,"meta":454,"style":454},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Add Docker's official GPG key and set up the Docker repository\ncurl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg\n\n# Add the official Docker repository\necho \"deb [arch=amd64 signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu $(lsb_release -cs) stable\" | sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list > \u002Fdev\u002Fnull\n\n# Update package list\nsudo apt update\n\n# Install Docker Engine, Docker Community Edition, and containerd runtime\nsudo apt install docker-ce docker-ce-cli containerd.io -y\n\n# Verify docker is installed\ndocker --version\n\n# Starts automatically when your system boots\nsudo systemctl enable docker\n","bash","",[456,457,458,467,500,507,513,560,565,571,583,588,594,616,621,627,636,641,647],"code",{"__ignoreMap":454},[459,460,463],"span",{"class":461,"line":462},"line",1,[459,464,466],{"class":465},"sHwdD","# Add Docker's official GPG key and set up the Docker repository\n",[459,468,470,474,478,481,485,488,491,494,497],{"class":461,"line":469},2,[459,471,473],{"class":472},"sBMFI","curl",[459,475,477],{"class":476},"sfazB"," -fsSL",[459,479,480],{"class":476}," https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg",[459,482,484],{"class":483},"sMK4o"," |",[459,486,487],{"class":472}," sudo",[459,489,490],{"class":476}," gpg",[459,492,493],{"class":476}," --dearmor",[459,495,496],{"class":476}," -o",[459,498,499],{"class":476}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg\n",[459,501,503],{"class":461,"line":502},3,[459,504,506],{"emptyLinePlaceholder":505},true,"\n",[459,508,510],{"class":461,"line":509},4,[459,511,512],{"class":465},"# Add the official Docker repository\n",[459,514,516,520,523,526,529,532,535,538,541,544,546,548,551,554,557],{"class":461,"line":515},5,[459,517,519],{"class":518},"s2Zo4","echo",[459,521,522],{"class":483}," \"",[459,524,525],{"class":476},"deb [arch=amd64 signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu ",[459,527,528],{"class":483},"$(",[459,530,531],{"class":472},"lsb_release",[459,533,534],{"class":476}," -cs",[459,536,537],{"class":483},")",[459,539,540],{"class":476}," stable",[459,542,543],{"class":483},"\"",[459,545,484],{"class":483},[459,547,487],{"class":472},[459,549,550],{"class":476}," tee",[459,552,553],{"class":476}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[459,555,556],{"class":483}," >",[459,558,559],{"class":476}," \u002Fdev\u002Fnull\n",[459,561,563],{"class":461,"line":562},6,[459,564,506],{"emptyLinePlaceholder":505},[459,566,568],{"class":461,"line":567},7,[459,569,570],{"class":465},"# Update package list\n",[459,572,574,577,580],{"class":461,"line":573},8,[459,575,576],{"class":472},"sudo",[459,578,579],{"class":476}," apt",[459,581,582],{"class":476}," update\n",[459,584,586],{"class":461,"line":585},9,[459,587,506],{"emptyLinePlaceholder":505},[459,589,591],{"class":461,"line":590},10,[459,592,593],{"class":465},"# Install Docker Engine, Docker Community Edition, and containerd runtime\n",[459,595,597,599,601,604,607,610,613],{"class":461,"line":596},11,[459,598,576],{"class":472},[459,600,579],{"class":476},[459,602,603],{"class":476}," install",[459,605,606],{"class":476}," docker-ce",[459,608,609],{"class":476}," docker-ce-cli",[459,611,612],{"class":476}," containerd.io",[459,614,615],{"class":476}," -y\n",[459,617,619],{"class":461,"line":618},12,[459,620,506],{"emptyLinePlaceholder":505},[459,622,624],{"class":461,"line":623},13,[459,625,626],{"class":465},"# Verify docker is installed\n",[459,628,630,633],{"class":461,"line":629},14,[459,631,632],{"class":472},"docker",[459,634,635],{"class":476}," --version\n",[459,637,639],{"class":461,"line":638},15,[459,640,506],{"emptyLinePlaceholder":505},[459,642,644],{"class":461,"line":643},16,[459,645,646],{"class":465},"# Starts automatically when your system boots\n",[459,648,650,652,655,658],{"class":461,"line":649},17,[459,651,576],{"class":472},[459,653,654],{"class":476}," systemctl",[459,656,657],{"class":476}," enable",[459,659,660],{"class":476}," docker\n",[444,662,664],{"id":663},"hasilkan-kunci-enkripsi","Hasilkan Kunci Enkripsi",[429,666,667,668,673],{},"TREK menggunakan kunci untuk mengenkripsi data sensitif. Gunakan perintah berikut atau ",[669,670,672],"a",{"href":671},"\u002Fid\u002Ftools\u002Fsecret-key-hex","alat online"," ini untuk menghasilkan kunci enkripsi:",[449,675,677],{"className":451,"code":676,"language":453,"meta":454,"style":454},"openssl rand -hex 32\n",[456,678,679],{"__ignoreMap":454},[459,680,681,684,687,690],{"class":461,"line":462},[459,682,683],{"class":472},"openssl",[459,685,686],{"class":476}," rand",[459,688,689],{"class":476}," -hex",[459,691,693],{"class":692},"sbssI"," 32\n",[429,695,696],{},"Simpan di tempat yang aman; kehilangan kunci ini berarti Anda akan kehilangan akses ke data yang terenkripsi.",[444,698,700],{"id":699},"jalankan-kontainer","Jalankan Kontainer",[449,702,704],{"className":451,"code":703,"language":453,"meta":454,"style":454},"docker run -d \\\n  --name trek \\\n  -p 3000:3000 \\\n  -e ENCRYPTION_KEY=\"\u003Cgenerated_key>\" \\\n  -e APP_URL=\"https:\u002F\u002Ftrek.pafor.me\" \\\n  -v .\u002Fdata:\u002Fapp\u002Fdata \\\n  -v .\u002Fuploads:\u002Fapp\u002Fuploads \\\n  --restart unless-stopped \\\n  mauriceboe\u002Ftrek:latest\n",[456,705,706,720,730,740,757,773,783,792,802],{"__ignoreMap":454},[459,707,708,710,713,716],{"class":461,"line":462},[459,709,632],{"class":472},[459,711,712],{"class":476}," run",[459,714,715],{"class":476}," -d",[459,717,719],{"class":718},"sTEyZ"," \\\n",[459,721,722,725,728],{"class":461,"line":469},[459,723,724],{"class":476},"  --name",[459,726,727],{"class":476}," trek",[459,729,719],{"class":718},[459,731,732,735,738],{"class":461,"line":502},[459,733,734],{"class":476},"  -p",[459,736,737],{"class":476}," 3000:3000",[459,739,719],{"class":718},[459,741,742,745,748,750,753,755],{"class":461,"line":509},[459,743,744],{"class":476},"  -e",[459,746,747],{"class":476}," ENCRYPTION_KEY=",[459,749,543],{"class":483},[459,751,752],{"class":476},"\u003Cgenerated_key>",[459,754,543],{"class":483},[459,756,719],{"class":718},[459,758,759,761,764,766,769,771],{"class":461,"line":515},[459,760,744],{"class":476},[459,762,763],{"class":476}," APP_URL=",[459,765,543],{"class":483},[459,767,768],{"class":476},"https:\u002F\u002Ftrek.pafor.me",[459,770,543],{"class":483},[459,772,719],{"class":718},[459,774,775,778,781],{"class":461,"line":562},[459,776,777],{"class":476},"  -v",[459,779,780],{"class":476}," .\u002Fdata:\u002Fapp\u002Fdata",[459,782,719],{"class":718},[459,784,785,787,790],{"class":461,"line":567},[459,786,777],{"class":476},[459,788,789],{"class":476}," .\u002Fuploads:\u002Fapp\u002Fuploads",[459,791,719],{"class":718},[459,793,794,797,800],{"class":461,"line":573},[459,795,796],{"class":476},"  --restart",[459,798,799],{"class":476}," unless-stopped",[459,801,719],{"class":718},[459,803,804],{"class":461,"line":585},[459,805,806],{"class":476},"  mauriceboe\u002Ftrek:latest\n",[808,809,810],"ul",{},[811,812,813,820],"li",{},[814,815,816,819],"strong",{},[456,817,818],{},"APP_URL"," harus diatur dengan benar"," — alur penemuan OAuth server MCP bergantung padanya. Atur ke alamat HTTPS publik akhir Anda sejak awal.",[429,822,823],{},"Proses pertama membutuhkan waktu beberapa saat untuk mengunduh image:",[825,826],"img",{"src":827,"alt":828,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-docker-pull-image.webp","Log docker pull dan run untuk TREK","max-width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,831,832],{},"Verifikasi bahwa kontainer sedang berjalan:",[449,834,836],{"className":451,"code":835,"language":453,"meta":454,"style":454},"docker ps\n",[456,837,838],{"__ignoreMap":454},[459,839,840,842],{"class":461,"line":462},[459,841,632],{"class":472},[459,843,844],{"class":476}," ps\n",[825,846],{"src":847,"alt":848,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-docker-ps-status.webp","Memverifikasi status container yang berjalan melalui docker ps",[439,850,852],{"id":851},"_2-mengonfigurasi-perutean-domain-ssl-dengan-caddy-reverse-proxy","2. Mengonfigurasi Perutean Domain & SSL dengan Caddy Reverse Proxy",[429,854,855],{},"HTTPS diperlukan untuk passkey, dan OAuth untuk MCP. Nama domain di-host di Cloudflare yang menyediakan sertifikat SSL gratis dan perlindungan DDoS.",[429,857,858],{},"Caddy dikonfigurasi sebagai server reverse proxy yang aman untuk mengarah ke port 3000. Contoh file Caddyfile adalah sebagai berikut:",[449,860,864],{"className":861,"code":862,"language":863,"meta":454,"style":454},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{$TREK_DOMAIN} {\n  encode zstd gzip\n  reverse_proxy host.docker.internal:3000\n}\n","json",[456,865,866,880,885,896],{"__ignoreMap":454},[459,867,868,871,874,877],{"class":461,"line":462},[459,869,870],{"class":483},"{",[459,872,873],{"class":718},"$TREK_DOMAIN",[459,875,876],{"class":483},"}",[459,878,879],{"class":483}," {\n",[459,881,882],{"class":461,"line":469},[459,883,884],{"class":718},"  encode zstd gzip\n",[459,886,887,890,893],{"class":461,"line":502},[459,888,889],{"class":718},"  reverse_proxy host.docker.internal",[459,891,892],{"class":483},":",[459,894,895],{"class":692},"3000\n",[459,897,898],{"class":461,"line":509},[459,899,900],{"class":483},"}\n",[439,902,904],{"id":903},"_3-konfigurasi-awal-penyiapan-admin-yang-aman","3. Konfigurasi Awal & Penyiapan Admin yang Aman",[429,906,907],{},"Ada dua cara untuk membuat akun admin:",[808,909,910,922],{},[811,911,912,921],{},[814,913,914,917,918],{},[456,915,916],{},"ADMIN_EMAIL"," dan ",[456,919,920],{},"ADMIN_PASSWORD"," diatur sebagai variabel lingkungan (environment variables); nilai-nilai tersebut akan digunakan secara langsung.",[811,923,924,925,928,929,932,933,936,937,940],{},"TREK membuat email ",[456,926,927],{},"admin@trek.local",", nama pengguna ",[456,930,931],{},"admin",", dan ",[814,934,935],{},"kata sandi acak yang tercetak di log kontainer",". Jalankan ",[456,938,939],{},"docker logs trek"," untuk mendapatkannya.",[429,942,943],{},"Jika kata sandi tidak dapat ditemukan di log, setel ulang dengan perintah:",[449,945,947],{"className":451,"code":946,"language":453,"meta":454,"style":454},"docker exec -it -e RESET_ADMIN_EMAIL=admin@trek.local -e RESET_ADMIN_PASSWORD='YourNewPassword' trek node server\u002Freset-admin.js\n",[456,948,949],{"__ignoreMap":454},[459,950,951,953,956,959,962,965,967,970,973,976,978,980,983],{"class":461,"line":462},[459,952,632],{"class":472},[459,954,955],{"class":476}," exec",[459,957,958],{"class":476}," -it",[459,960,961],{"class":476}," -e",[459,963,964],{"class":476}," RESET_ADMIN_EMAIL=admin@trek.local",[459,966,961],{"class":476},[459,968,969],{"class":476}," RESET_ADMIN_PASSWORD=",[459,971,972],{"class":483},"'",[459,974,975],{"class":476},"YourNewPassword",[459,977,972],{"class":483},[459,979,727],{"class":476},[459,981,982],{"class":476}," node",[459,984,985],{"class":476}," server\u002Freset-admin.js\n",[429,987,988],{},"Anda akan diminta untuk mengubah kata sandi pada log masuk pertama.",[825,990],{"src":991,"alt":992,"style":993},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-initial-login-password-prompt.webp","Prompt login awal dan reset kata sandi admin","max-width: 215px; width:100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,995,996,997,1000,1001],{},"Klik pada ",[814,998,999],{},"Admin"," dan perbarui email:",[825,1002],{"src":1003,"alt":1004,"style":1005},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-admin-email-update-panel.webp","Mengatur email khusus di pengaturan admin TREK","max-width: 700px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[444,1007,1009],{"id":1008},"_31-cadangan-backups","3.1 Cadangan (Backups)",[429,1011,1012,1013],{},"Konfigurasikan pencadangan otomatis dengan kebijakan retensi di panel admin:\n",[825,1014],{"src":1015,"alt":1016,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-admin-backup-retention-policy.webp","Mengonfigurasi jadwal pencadangan otomatis dan aturan retensi",[444,1018,1020],{"id":1019},"_32-simpan-file-unggahan-ke-cloudflare-r2","3.2 Simpan File Unggahan ke Cloudflare R2",[429,1022,1023],{},"Menyimpan file unggahan, foto, dan cadangan di Cloudflare R2 menjaga penyimpanan VPS Anda tetap bersih dan ringan. TREK mendukung backend yang kompatibel dengan S3, dan Cloudflare R2 sangat cocok untuk ini.",[1025,1026,1027,1034,1047,1058,1069,1083,1095,1110],"ol",{},[811,1028,1029,1030,1033],{},"Buat bucket R2 bernama ",[456,1031,1032],{},"trek",".",[811,1035,1036,1037,1040,1041,1042],{},"Di bagian ",[814,1038,1039],{},"Account Details",", temukan ID akun Anda:","\n  ",[825,1043],{"src":1044,"alt":1045,"style":1046},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fcloudflare-r2-account-details-id.webp","Menemukan ID akun Cloudflare di portal","max-width: 325px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[811,1048,1049,1050,892,1041,1053],{},"Klik ",[814,1051,1052],{},"Manage API Tokens",[825,1054],{"src":1055,"alt":1056,"style":1057},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fcloudflare-r2-manage-api-tokens-button.webp","Tampilan Kelola Token API di portal Cloudflare","max-width: 282px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[811,1059,1049,1060,1063,1041,1064],{},[814,1061,1062],{},"Create Account API token"," dengan izin baca\u002Ftulis (read\u002Fwrite) untuk bucket tersebut:",[825,1065],{"src":1066,"alt":1067,"style":1068},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fcloudflare-r2-create-token-permissions.webp","Membuat token akses R2 dengan izin baca dan tulis","max-width: 360px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[811,1070,1049,1071,1074,1075,892,1041,1078],{},[814,1072,1073],{},"Storage"," pada panel ",[814,1076,1077],{},"ADMINISTRATION",[825,1079],{"src":1080,"alt":1081,"style":1082},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-administration-storage-menu.webp","Menavigasi ke pengaturan penyimpanan di panel kontrol TREK","max-width: 539px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[811,1084,1085,1086,1089,1041,1090],{},"Klik tombol ",[814,1087,1088],{},"Add Backend"," dan isi endpoint, bucket, beserta kredensial Anda:",[825,1091],{"src":1092,"alt":1093,"style":1094},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-add-storage-backend-credentials.webp","Mengonfigurasi backend penyimpanan Cloudflare R2 yang kompatibel dengan S3","max-width: 445px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[811,1096,1049,1097,1100,1101,1104,1041,1105],{},[814,1098,1099],{},"Apply",", lalu klik tombol tautan ",[814,1102,1103],{},"Test",". Anda harus melihat status \"Connection OK\":",[825,1106],{"src":1107,"alt":1108,"style":1109},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-test-storage-backend-connection-ok.webp","Uji koneksi penyimpanan berhasil menunjukkan Connection OK","max-width: 677px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[811,1111,1112,1113,892,1041,1116],{},"Alihkan semua kategori penyimpanan ke Cloudflare R2 dan klik ",[814,1114,1115],{},"Save changes",[825,1117],{"src":1118,"alt":1119,"style":1120},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-switch-storage-categories-r2.webp","Mengarahkan semua kategori penyimpanan file ke Cloudflare R2","max-width: 653px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[444,1122,1124],{"id":1123},"_33-log-masuk-passkey","3.3 Log Masuk Passkey",[429,1126,1127,1128,892],{},"TREK mendukung passkey, autentikasi dua faktor (2FA), dan OIDC single sign-on. Untuk passkey, masukkan nama domain Anda dan asal yang diizinkan (allowed origins) di pengaturan, lalu klik ",[814,1129,1130],{},"Save",[825,1132],{"src":1133,"alt":1134,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-passkey-allowed-origins-settings.webp","Mendaftarkan origin yang diizinkan untuk autentikasi Passkey yang aman",[429,1136,1137,1138,1141],{},"Tanpa mengonfigurasi ",[814,1139,1140],{},"allowed origins",", pendaftaran passkey akan gagal.",[444,1143,1145],{"id":1144},"_34-google-maps-api-key","3.4 Google Maps API Key",[429,1147,1148],{},"Kunci Google Maps memperkaya pencarian tempat dengan peringkat, jam buka, dan foto. TREK secara otomatis menggunakan OpenStreetMap jika tidak ada kunci yang dimasukkan, hanya saja tanpa peringkat dan foto.",[429,1150,1151,1152,1158,1159,1162,1163],{},"Ikuti ",[669,1153,1157],{"href":1154,"rel":1155},"https:\u002F\u002Fmapsplatform.google.com\u002Fmaps-demo-key\u002F",[1156],"nofollow","tautan"," ini dan klik ",[814,1160,1161],{},"Get demo key"," untuk memintanya:                                                  ",[825,1164],{"src":1165,"alt":1166,"style":1167},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fgoogle-maps-get-demo-api-key.webp","Meminta kunci API Google Maps Platform","max-width: 176px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1169,1170,1171,1173,1174],{},"Tempel kunci di pengaturan and klik ",[814,1172,1103],{}," untuk mengonfirmasi koneksi:\n",[825,1175],{"src":1176,"alt":1177,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-google-maps-key-test-connection.webp","Memverifikasi konektivitas kunci API Google Maps di pengaturan",[444,1179,1181],{"id":1180},"_35-integrasi-ai","3.5 Integrasi AI",[429,1183,1184],{},"Model AI digunakan untuk mengurai email konfirmasi pemesanan dan PDF menjadi data reservasi yang terstruktur.",[429,1186,1049,1187,1190,1191,1194],{},[814,1188,1189],{},"Addons"," di menu kiri dan aktifkan ",[814,1192,1193],{},"AI Parsing",". Pilih \"OpenAI\" (atau penyedia lain yang kompatibel) dan isi detail penyedia:",[825,1196],{"src":1197,"alt":1198,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-addons-enable-ai-parsing-openai.webp","Mengaktifkan addon AI Parsing dengan integrasi OpenAI",[444,1200,1202],{"id":1201},"_36-akses-mcp","3.6 Akses MCP",[429,1204,1205,1206,1208,1209,892],{},"Di bawah ",[814,1207,1189],{},", aktifkan ",[814,1210,1211],{},"MCP",[825,1213],{"src":1214,"alt":1215,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-addons-enable-mcp.webp","Mengaktifkan addon server MCP Model Context Protocol",[444,1217,1219],{"id":1218},"_37-plugin","3.7 Plugin",[429,1221,1222],{},"Plugin berikut sangat direkomendasikan dan layak untuk diaktifkan:",[825,1224],{"src":1225,"alt":1226,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-recommended-addons-plugins-activation.webp","Daftar plugin dan addon rekomendasi yang aktif",[444,1228,1230],{"id":1229},"_38-buat-pengguna-harian-anda","3.8 Buat Pengguna Harian Anda",[429,1232,1233],{},"Rencanakan perjalanan sebagai pengguna biasa, bukan sebagai admin. Buat pengguna reguler dan masuk dengannya:",[825,1235],{"src":1236,"alt":1237,"style":1238},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-create-regular-user-form.webp","Membuat akun pengguna biasa di panel TREK","max-width: 420px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1240,1241],{},"Setelah masuk, tambahkan passkey atau siapkan 2FA untuk memperkuat keamanan akun:",[825,1243],{"src":1244,"alt":1245,"style":1246},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-user-security-passkey-2fa-setup.webp","Mengonfigurasi pengaturan keamanan pengguna dengan Passkey dan 2FA","max-width: 381px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1248,1049,1249,1252],{},[814,1250,1251],{},"+ Add a passkey",", masukkan kata sandi saat ini, dan konfirmasi:",[825,1254],{"src":1255,"alt":1256,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-add-passkey-confirm-password.webp","Mengonfirmasi kata sandi untuk mendaftarkan Passkey perangkat keras baru",[439,1258,1260],{"id":1259},"_4-menguji-deployment-anda-mengimpor-data-perjalanan-historis","4. Menguji Deployment Anda: Mengimpor Data Perjalanan Historis",[429,1262,1263],{},"Cara yang baik untuk mempelajari TREK adalah dengan membangun riwayat perjalanan Anda.",[444,1265,1267],{"id":1266},"_41-buat-rencana-perjalanan","4.1 Buat rencana perjalanan",[429,1269,1049,1270,1273,1274,917,1277,1280],{},[814,1271,1272],{},"+ New Trip"," dan atur ",[814,1275,1276],{},"Start Date",[814,1278,1279],{},"End Date"," ke tanggal masa lalu dari perjalanan Anda:",[825,1282],{"src":1283,"alt":1284,"style":1285},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-create-new-trip-details.webp","Membuat perjalanan baru dengan rentang tanggal khusus","max-width: 334px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1287,1288,1289,892],{},"Tambahkan gambar sampul (seret gambar ke dalam, atau tempel dari papan klip) dan klik ",[814,1290,1291],{},"Create New Trip",[825,1293],{"src":1294,"alt":1295,"style":1296},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-cover-image-upload.webp","Mengatur gambar sampul perjalanan berkualitas tinggi","max-width: 608px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[444,1298,1300],{"id":1299},"_42-impor-data-pemesanan","4.2 Impor data pemesanan",[429,1302,1303],{},"Masukkan semua berkas penerbangan, kereta api, dan transportasi lainnya ke dalam:",[825,1305],{"src":1306,"alt":1307,"style":1308},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-import-travel-booking-files.webp","Area seret dan lepas untuk mengimpor PDF perjalanan dan pemesanan","max-width: 570px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[825,1310],{"src":1311,"alt":1312,"style":1313},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-import-booking-pdf-processing-status.webp","Jendela pemrosesan reservasi yang diunggah menunjukkan ekstraksi","max-width: 377px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1315,1316],{},"Dengan mengaktifkan model AI, berkas PDF konfirmasi pemesanan akan diurai dan diekstrak menjadi reservasi terstruktur.",[429,1318,1319,1320,1323],{},"Tinjau hasil yang diurai dan klik ",[814,1321,1322],{},"Add"," untuk menyimpan detail pemesanan:",[825,1325],{"src":1326,"alt":1327,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-review-parsed-booking-details.webp","Meninjau detail pemesanan terstruktur yang diekstraksi oleh AI",[429,1329,1330],{},"Jika pemesanan hanya ada di email, ekspor email tersebut sebagai PDF dan masukkan ke sistem — alur ekstraksi yang sama akan berlaku.",[429,1332,1333],{},"Tangkapan layar berikut menunjukkan bagaimana pemesanan ditampilkan:",[429,1335,1336,1340],{},[825,1337],{"src":1338,"alt":1339,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-bookings-timeline-view.webp","Tampilan lini masa komprehensif dari pemesanan perjalanan",[825,1341],{"src":1342,"alt":1343,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-booking-confirmation-details.webp","Tampilan detail dari reservasi transportasi yang terkonfirmasi",[429,1345,1346,1347,1350],{},"Pada halaman ",[814,1348,1349],{},"Plan",", semua akomodasi akan ditampilkan di peta:",[825,1352],{"src":1353,"alt":1354,"style":1355},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-plan-accommodations-map-display.webp","Peta interaktif yang memplot semua akomodasi hotel","max-width: 546px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1357,1049,1358,1361],{},[814,1359,1360],{},"Atlas"," di bilah menu atas untuk melihat daftar (dan peta) dari setiap negara yang telah Anda kunjungi:",[825,1363],{"src":1364,"alt":1365,"style":1366},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-atlas-countries-visited-summary.webp","Ikhtisar riwayat perjalanan di pelacak Atlas pribadi","max-width: 407px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[444,1368,1370],{"id":1369},"_43-tambahkan-rekan-perjalanan","4.3 Tambahkan rekan perjalanan",[429,1372,1085,1373,892],{},[814,1374,1375],{},"Share",[825,1377],{"src":1378,"alt":1379,"style":1380},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-share-options-button.webp","Membuka dialog berbagi perjalanan di TREK","max-width: 224px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1382,1383],{},"Di bagian bawah dialog, tamu (guests) dapat ditambahkan:",[825,1385],{"src":1386,"alt":1387,"style":1388},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-add-companions-guests.webp","Menambahkan teman perjalanan dan tamu khusus","max-width: 635px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[444,1390,1392],{"id":1391},"_44-catat-pengeluaran","4.4 Catat pengeluaran",[429,1394,1049,1395,1398],{},[814,1396,1397],{},"Add expense"," untuk menambahkan biaya selain pemesanan, seperti asuransi kesehatan, transportasi lokal, kartu SIM:",[825,1400],{"src":1401,"alt":1402,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-add-custom-expense-form.webp","Memasukkan data pengeluaran terperinci dalam formulir pengeluaran",[825,1404],{"src":1405,"alt":1406,"style":1407},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-expenses-list-billing-split.webp","Rincian pembagian tagihan dan buku besar pelacakan biaya","max-width: 526px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[444,1409,1411],{"id":1410},"_45-segmen-perjalanan","4.5 Segmen perjalanan",[429,1413,1414],{},"Fitur ini memerlukan plugin Trip Segment untuk diinstal.",[429,1416,1417],{},"Perjalanan panjang dapat dibagi menjadi segmen-segmen dengan rapi, di mana setiap bagian menampilkan pemesanan, tempat, dan biayanya sendiri:",[825,1419],{"src":1420,"alt":1421,"style":1422},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-segments-overview-display.webp","Membagi rencana perjalanan yang kompleks menjadi segmen perjalanan","max-width: 465px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[825,1424],{"src":1425,"alt":1426,"style":1427},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-segment-itinerary-details.webp","Segmen perjalanan aktif yang menampilkan tempat dan jadwal","max-width: 596px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[825,1429],{"src":1430,"alt":1431,"style":1432},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-segments-interactive-map.webp","Memetakan berbagai tahapan perjalanan di lini masa","max-width: 605px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[444,1434,1436],{"id":1435},"_46-buat-journey-dan-periksa-atlas-anda","4.6 Buat journey dan periksa atlas Anda",[429,1438,1439,1440,1443],{},"Kelompokkan perjalanan ke dalam ",[814,1441,1442],{},"Journey"," dan tulis cerita perjalanan untuk membagikan petualangan Anda dengan teman-teman:",[825,1445],{"src":1446,"alt":1447,"style":1448},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-create-new-journey-group.webp","Menggabungkan beberapa perjalanan menjadi satu perjalanan visual (Journey)","max-width: 441px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[825,1450],{"src":1451,"alt":1452,"style":1453},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-journey-timeline-story-writing.webp","Menulis cerita visual di panel perjalanan (Journey)","max-width: 443px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[825,1455],{"src":1456,"alt":1457,"style":1458},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-journey-gallery-media-grid.webp","Koleksi media dan kisi galeri di dalam perjalanan (Journey)","max-width: 440px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[825,1460],{"src":1461,"alt":1462,"style":1463},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-journey-public-share-link.webp","Membuat tautan berbagi publik untuk perjalanan kolaboratif","max-width: 532px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[439,1465,1467],{"id":1466},"_5-merancang-rencana-perjalanan-dan-daftar-bawaan-kustom","5. Merancang Rencana Perjalanan dan Daftar Bawaan Kustom",[429,1469,1049,1470,1472],{},[814,1471,1272],{},", masukkan nama, dan atur tanggalnya:",[825,1474],{"src":1475,"alt":1476,"style":1477},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-planning-new-trip-setup.webp","Dialog prompt awal untuk membuat perjalanan tanpa tanggal","max-width: 432px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1479,1480,1483],{},[814,1481,1482],{},"Jika Anda belum menentukan tanggal pastinya, biarkan keduanya kosong."," Kolom \"jumlah hari\" akan muncul (hingga 365 hari). Rencanakan dulu, jadwalkan belakangan.",[444,1485,1487],{"id":1486},"_51-menambahkan-tempat","5.1 Menambahkan tempat",[429,1489,1490],{},"Ini adalah langkah yang paling memakan waktu dalam perencanaan perjalanan apa pun, dan TREK memiliki beberapa cara untuk melakukannya:",[825,1492],{"src":1493,"alt":1494,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-add-places-methods-overview.webp","Metode multi-saluran untuk menambahkan tempat baru ke rencana perjalanan",[429,1496,1497,1500],{},[814,1498,1499],{},"1. Klik kanan pada peta"," untuk membuat tempat di lokasi persis tersebut — alamatnya akan di-reverse-geocode secara otomatis:",[825,1502],{"src":1503,"alt":1504,"style":1505},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-right-click-map-location.webp","Mengklik kanan antarmuka peta untuk menentukan lokasi","max-width: 632px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[825,1507],{"src":1508,"alt":1509,"style":1510},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-right-click-reverse-geocode-address.webp","Geocoding terbalik otomatis untuk koordinat peta yang dipilih","max-width: 628px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1512,1513,1516],{},[814,1514,1515],{},"2. Klik + Add Place\u002FActivity"," dan cari berdasarkan nama",[825,1518],{"src":1519,"alt":1520,"style":1521},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-search-place-by-name-input.webp","Mencari tempat nyata menggunakan input teks","max-width: 642px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[825,1523],{"src":1524,"alt":1525,"style":1526},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-select-place-search-results-list.webp","Menampilkan hasil pencarian tempat dengan info alamat","max-width: 594px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[825,1528],{"src":1529,"alt":1530,"style":1531},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-place-details-rich-info-card.webp","Kartu informasi tempat komprehensif dengan ulasan dan peringkat","max-width: 568px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1533,1534,1537,1538,1541,1542,1545],{},[814,1535,1536],{},"3. Tempel URL Google Maps"," (",[456,1539,1540],{},"maps.app.goo.gl\u002F…"," atau ",[456,1543,1544],{},"maps.google.com\u002F…",") ke dalam kolom pencarian. TREK akan mengurai nama, alamat, dan koordinatnya:",[825,1547],{"src":1548,"alt":1549,"style":1109},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-paste-google-maps-share-link.webp","Mengurai lokasi langsung dari tautan berbagi Google Maps yang ditempelkan",[825,1551],{"src":1552,"alt":1553,"style":1554},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-google-maps-parsed-location.webp","Ekstraksi koordinat berhasil dari URL peta","max-width: 543px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1556,1557,1560,1561,1537,1564,917,1567,1570,1571,1574],{},[814,1558,1559],{},"4. Impor massal (Bulk import)"," — cara termudah dari semuanya. Jika Anda sudah memiliki daftar tempat \"ingin dikunjungi\" di Google Maps, ekspor sebagai ",[456,1562,1563],{},".gpx",[456,1565,1566],{},".kml",[456,1568,1569],{},".kmz"," juga didukung) dan klik ",[814,1572,1573],{},"Import file"," pada panel kanan untuk menarik semuanya sekaligus:",[825,1576],{"src":1577,"alt":1578,"style":1579},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-bulk-import-places-gpx-file.webp","Melakukan impor tempat massal menggunakan file GPX atau KML","max-width: 389px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1581,1582],{},"Tambahkan semua hal menarik terlebih dahulu, terlepas dari apakah itu sesuai dengan jadwal. Alokasikan tempat ke hari kunjungan nanti.",[444,1584,1586],{"id":1585},"_52-rencana-hari-dan-catatan","5.2 Rencana hari dan catatan",[429,1588,1589],{},"Rencana Hari (Day Plan) mengatur tempat ke dalam hari secara berurutan. Ini berupa daftar yang dapat diciutkan per hari, dan semuanya menggunakan metode seret-dan-lepas (drag-and-drop):",[825,1591],{"src":1592,"alt":1593,"style":1594},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-day-plan-drag-drop-ordering.webp","Menyesuaikan rute harian dengan tindakan seret-dan-lepas","max-width: 496px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1596,1597],{},"Detail yang membuatnya sangat berguna:",[808,1599,1600,1610,1620,1630],{},[811,1601,1602,1605,1606],{},[814,1603,1604],{},"Transportasi antartempat",": ikon bus di kiri atas bagian hari berfungsi untuk menambahkan moda transportasi (segmen kereta, bus, penerbangan dalam hari tersebut):\n",[825,1607],{"src":1608,"alt":1609,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-day-plan-commuting-transport-button.webp","Mendaftarkan transportasi komuter antar segmen hari",[811,1611,1612,1615,1616],{},[814,1613,1614],{},"Catatan harian",": ikon catatan di kiri bawah berfungsi untuk menyisipkan catatan ber-emoji — \"berangkat pagi hari ini\", \"museum ini memerlukan reservasi\":\n",[825,1617],{"src":1618,"alt":1619,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-day-plan-icon-tagged-notes-button.webp","Menambahkan catatan khusus ber-ikon yang sangat terlihat ke hari",[811,1621,1622,1625,1626],{},[814,1623,1624],{},"Slot waktu",": seret tempat dari panel kanan ke dalam hari, lalu tetapkan waktunya. Tempat dengan waktu yang ditentukan akan terhubung secara otomatis di peta:\n",[825,1627],{"src":1628,"alt":1629,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-day-plan-timed-places-routing.webp","Rute transit yang dihitung otomatis antara lokasi yang dijadwalkan",[811,1631,1632,1633,1638,1639,917,1642,1033],{},"Silakan merujuk ke ",[669,1634,1637],{"href":1635,"rel":1636},"https:\u002F\u002Fgithub.com\u002Fliketrek\u002FTREK\u002Fwiki\u002FDay-Plans-and-Notes",[1156],"halaman wiki Day Plans and Notes"," untuk ",[814,1640,1641],{},"Optimasi rute",[814,1643,1644],{},"Cuaca",[444,1646,1648],{"id":1647},"_53-collections-daftar-tempat-yang-dapat-digunakan-kembali","5.3 Collections: Daftar tempat yang dapat digunakan kembali",[429,1650,1651,1652,1655],{},"Collections memungkinkan pengguna untuk menyimpan daftar tempat di luar rencana perjalanan mana pun. Ini dapat dibagikan dengan teman-teman, dan siap digunakan untuk perjalanan berikutnya. Tempat-tempat ini akan ",[814,1653,1654],{},"disalin"," ke dalam rencana perjalanan, sehingga mengedit entri dalam perjalanan tidak akan pernah mengubah koleksi Anda dan sebaliknya.",[429,1657,1049,1658,1661],{},[814,1659,1660],{},"Collections"," di bilah menu atas:",[825,1663],{"src":1664,"alt":1665,"style":1666},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-dashboard-view.webp","Mengakses koleksi khusus pengguna untuk tempat yang disimpan","max-width: 495px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1668,1049,1669,1672],{},[814,1670,1671],{},"+ New list"," untuk membuatnya:",[825,1674],{"src":1675,"alt":1676,"style":1677},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-create-new-list.webp","Membuat daftar khusus di koleksi pengguna","max-width: 269px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1679,1049,1680,1683],{},[814,1681,1682],{},"+ Add a place"," dan isi detailnya:",[825,1685],{"src":1686,"alt":1687,"style":1688},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-add-place-manually-form.webp","Input formulir manual untuk mengisi daftar koleksi khusus","max-width: 271px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1690,1691,1694],{},[814,1692,1693],{},"Catatan:"," pencarian di dalam dialog \"Add a place\" tampaknya tidak berfungsi, jadi Anda harus memasukkan detailnya secara manual.",[429,1696,1697],{},"Jika koordinat geografis dari tempat tersebut tersedia, tempat tersebut akan muncul di peta:",[825,1699],{"src":1700,"alt":1701,"style":1702},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-map-places-display.webp","Memvisualisasikan tempat koleksi khusus pada peta interaktif","max-width: 592px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1704,1705,1706,892],{},"Untuk mengatur tempat dengan label, klik ikon ",[814,1707,1708],{},"kotak centang (tick-box)",[825,1710],{"src":1711,"alt":1712,"style":1713},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-select-places-tickbox.webp","Mode pilihan untuk pelabelan massal tempat yang disimpan","max-width: 662px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1715,1716,1717,892],{},"Pilih tempat yang ingin dikelompokkan, lalu klik ",[814,1718,1719],{},"Assign label",[825,1721],{"src":1722,"alt":1723,"style":1554},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-group-assign-label.webp","Menetapkan label deskriptif ke tempat koleksi yang dipilih",[429,1725,1049,1726,1729],{},[814,1727,1728],{},"Manage labels"," untuk membuat label terlebih dahulu:",[825,1731],{"src":1732,"alt":1733,"style":1734},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-manage-custom-labels.webp","Pembuatan dan pengelolaan label khusus","max-width: 411px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1736,1737,1738,892],{},"Pilih label dan klik ",[814,1739,1719],{},[825,1741],{"src":1742,"alt":1743,"style":1366},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-confirm-label-selection.webp","Menerapkan label khusus untuk mengelompokkan tempat",[444,1745,1747],{"id":1746},"_54-biaya-dan-anggaran","5.4 Biaya dan anggaran",[429,1749,1750],{},"Kita dapat menambahkan pengeluaran lain untuk perjalanan di halaman 'Costs'.",[825,1752],{"src":1753,"alt":1754,"style":1594},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-costs-budget-overall-expenses-list.webp","Tabel pengeluaran komprehensif dan buku besar penyelesaian saldo",[429,1756,1757],{},"Pembayaran yang dilakukan oleh rekan perjalanan dapat ditambahkan dan dibagi di halaman yang sama.",[429,1759,1760,1761,1764],{},"Panel pelunasan menjalankan algoritma greedy-matching untuk menghitung ",[814,1762,1763],{},"jumlah transfer minimum"," mengenai siapa yang berutang kepada siapa, dan berapa nominalnya.",[439,1766,1768],{"id":1767},"_6-memanfaatkan-model-context-protocol-mcp-untuk-perencanaan-perjalanan-berbasis-ai","6. Memanfaatkan Model Context Protocol (MCP) untuk Perencanaan Perjalanan Berbasis AI",[429,1770,1771,1772,1775],{},"TREK memiliki ",[814,1773,1774],{},"server MCP (Model Context Protocol) bawaan",", yang memungkinkan agen AI membaca dan menulis data perjalanan Anda secara langsung — mencakup lebih dari 150 alat dan 30 sumber daya terkait perjalanan, tempat, anggaran, daftar barang bawaan, pemesanan, dan kolaborasi.",[444,1777,1779],{"id":1778},"_61-cloudflare-zero-trust","6.1 Cloudflare Zero Trust",[429,1781,1782,1783,1786,1787,1033],{},"Karena TREK berjalan di belakang jaringan ",[669,1784,1785],{"href":363},"Cloudflare Zero Trust",", Anda harus menambahkan domain ke dalam daftar inklusi split tunnel. Jika tidak, Anda akan mengalami masalah dengan otorisasi OAuth. Silakan merujuk ke isu GitHub ini: ",[669,1788,1791],{"href":1789,"rel":1790},"https:\u002F\u002Fgithub.com\u002Fliketrek\u002FTREK\u002Fissues\u002F1463",[1156],"github issue",[1793,1794],"article-card",{"description":1795,"image":1796,"image-alt":1797,"label":1798,"min-read":1799,"title":1800,"to":363},"Pelajari cara mengekspos dan mengakses Hermes Agent Anda secara global dengan aman menggunakan Cloudflare WARP dan Zero Trust tanpa membuka port firewall masuk.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002FID-Exposing-Hermes-Agent-to-Private-Network-Using-Cloudflare-WARP.webp","Mengekspos Hermes Agent secara aman ke jaringan privat menggunakan Cloudflare Zero Trust dan terowongan WARP","Panduan terkait","8","Cara Mengekspos Hermes Agent secara Privat dengan WARP",[825,1802],{"src":1803,"alt":1804,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fcloudflare-zero-trust-split-tunnels-domain.webp","Menambahkan domain khusus ke Split Tunnel Cloudflare Warp",[444,1806,1808],{"id":1807},"_62-claude-desktop","6.2 Claude Desktop",[429,1810,1049,1811,1814,1815],{},[814,1812,1813],{},"+ New Client"," untuk membuat klien agen AI:\n",[825,1816],{"src":1817,"alt":1818,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-register-new-mcp-client.webp","Mendaftarkan token klien khusus baru di pengaturan",[429,1820,1821,1822,1825,1826,892],{},"Pilih tab ",[814,1823,1824],{},"Claude Desktop"," dan klik ",[814,1827,1828],{},"Register Client",[825,1830],{"src":1831,"alt":1832,"style":1833},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-mcp-claude-desktop-client-credentials.webp","Membuat kredensial klien Claude Desktop","max-width: 354px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1835,1836,1837,1840],{},"Sepasang ID klien dan rahasia klien (client secret) akan ditampilkan. Salin keduanya di tempat yang aman. Kemudian klik ",[814,1838,1839],{},"Client Configuration"," untuk menampilkan konfigurasi MCP:",[825,1842],{"src":1843,"alt":1844,"style":1845},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-mcp-client-configuration-block.webp","Mengambil blok konfigurasi server MCP yang sudah diformat","max-width: 508px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,1847,1848,1849,1852],{},"Di Claude Desktop, klik ",[814,1850,1851],{},"Edit Config"," untuk membuka berkas konfigurasi server MCP lokal:",[825,1854],{"src":1855,"alt":1856,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fclaude-desktop-mcp-config-json.webp","Mengedit file json konfigurasi MCP lokal Claude Desktop",[429,1858,1859],{},"Tempel konfigurasi TREK, ganti placeholder dengan kredensial Anda:",[449,1861,1863],{"className":861,"code":1862,"language":863,"meta":454,"style":454},"  \"mcpServers\": {\n    \"trek\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"mcp-remote\",\n        \"https:\u002F\u002Ftrek.pafor.me\u002Fmcp\",\n        \"--static-oauth-client-info\",\n        \"{\\\"client_id\\\": \\\"\u003Cyour_client_id>\\\", \\\"client_secret\\\": \\\"\u003Cyour_client_secret>\\\"}\"\n      ]\n    }\n  },\n",[456,1864,1865,1881,1895,1917,1931,1943,1954,1965,2012,2017,2022],{"__ignoreMap":454},[459,1866,1867,1870,1873,1875,1878],{"class":461,"line":462},[459,1868,1869],{"class":483},"  \"",[459,1871,1872],{"class":476},"mcpServers",[459,1874,543],{"class":483},[459,1876,1877],{"class":718},": ",[459,1879,1880],{"class":483},"{\n",[459,1882,1883,1886,1889,1891,1893],{"class":461,"line":469},[459,1884,1885],{"class":483},"    \"",[459,1887,1032],{"class":1888},"spNyl",[459,1890,543],{"class":483},[459,1892,892],{"class":483},[459,1894,879],{"class":483},[459,1896,1897,1900,1903,1905,1907,1909,1912,1914],{"class":461,"line":502},[459,1898,1899],{"class":483},"      \"",[459,1901,1902],{"class":472},"command",[459,1904,543],{"class":483},[459,1906,892],{"class":483},[459,1908,522],{"class":483},[459,1910,1911],{"class":476},"npx",[459,1913,543],{"class":483},[459,1915,1916],{"class":483},",\n",[459,1918,1919,1921,1924,1926,1928],{"class":461,"line":509},[459,1920,1899],{"class":483},[459,1922,1923],{"class":472},"args",[459,1925,543],{"class":483},[459,1927,892],{"class":483},[459,1929,1930],{"class":483}," [\n",[459,1932,1933,1936,1939,1941],{"class":461,"line":515},[459,1934,1935],{"class":483},"        \"",[459,1937,1938],{"class":476},"mcp-remote",[459,1940,543],{"class":483},[459,1942,1916],{"class":483},[459,1944,1945,1947,1950,1952],{"class":461,"line":562},[459,1946,1935],{"class":483},[459,1948,1949],{"class":476},"https:\u002F\u002Ftrek.pafor.me\u002Fmcp",[459,1951,543],{"class":483},[459,1953,1916],{"class":483},[459,1955,1956,1958,1961,1963],{"class":461,"line":567},[459,1957,1935],{"class":483},[459,1959,1960],{"class":476},"--static-oauth-client-info",[459,1962,543],{"class":483},[459,1964,1916],{"class":483},[459,1966,1967,1969,1971,1974,1977,1979,1981,1983,1986,1988,1991,1993,1996,1998,2000,2002,2005,2007,2009],{"class":461,"line":573},[459,1968,1935],{"class":483},[459,1970,870],{"class":476},[459,1972,1973],{"class":718},"\\\"",[459,1975,1976],{"class":476},"client_id",[459,1978,1973],{"class":718},[459,1980,1877],{"class":476},[459,1982,1973],{"class":718},[459,1984,1985],{"class":476},"\u003Cyour_client_id>",[459,1987,1973],{"class":718},[459,1989,1990],{"class":476},", ",[459,1992,1973],{"class":718},[459,1994,1995],{"class":476},"client_secret",[459,1997,1973],{"class":718},[459,1999,1877],{"class":476},[459,2001,1973],{"class":718},[459,2003,2004],{"class":476},"\u003Cyour_client_secret>",[459,2006,1973],{"class":718},[459,2008,876],{"class":476},[459,2010,2011],{"class":483},"\"\n",[459,2013,2014],{"class":461,"line":585},[459,2015,2016],{"class":483},"      ]\n",[459,2018,2019],{"class":461,"line":590},[459,2020,2021],{"class":483},"    }\n",[459,2023,2024,2027],{"class":461,"line":596},[459,2025,2026],{"class":483},"  }",[459,2028,1916],{"class":718},[429,2030,2031,2032,892],{},"Mulai ulang Claude Desktop, dan server TREK akan muncul sebagai terhubung di bawah ",[814,2033,2034],{},"Local MCP servers",[825,2036],{"src":2037,"alt":2038,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fclaude-desktop-mcp-trek-server-connected.webp","Memverifikasi status koneksi TREK yang aktif di dalam UI Claude",[429,2040,2041],{},"Sekarang jalankan sebuah perintah (prompt):",[825,2043],{"src":2044,"alt":2045,"style":2046},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fclaude-desktop-mcp-natural-language-prompt.webp","Meminta Claude dalam bahasa alami untuk memanipulasi data perjalanan","max-width: 550px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,2048,2049],{},"Mari kita tambahkan pengeluaran dalam bahasa alami:",[449,2051,2056],{"className":2052,"code":2054,"language":2055,"meta":454},[2053],"language-text","For the West Europe trip, the Grab from KLIA1 to the hotel cost RM115.90 on 26\u002F4\u002F2025. Please add it as an expense without split to the trip.\n","text",[456,2057,2054],{"__ignoreMap":454},[825,2059],{"src":2060,"alt":2061,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fclaude-desktop-mcp-add-expense-response.webp","Claude menggunakan alat untuk mencatat pengeluaran secara otomatis",[429,2063,2064,2065,2068],{},"Saat memeriksa halaman ",[814,2066,2067],{},"Costs",", pengeluaran dibuat dengan status \"No one paid yet\" (Belum ada yang membayar), karena tidak ada pembayar yang disebutkan:",[825,2070],{"src":2071,"alt":2072,"style":1005},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-costs-page-mcp-parsed-expense.webp","Mengonfirmasi pengeluaran AI yang baru diurai di tampilan Biaya",[429,2074,2075],{},"Menambahkan ke daftar bawaan bekerja dengan cara yang sama:",[825,2077],{"src":2078,"alt":2079,"style":2080},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fclaude-desktop-mcp-add-packing-items.webp","Claude menambahkan item bawaan menggunakan prompt bahasa alami","max-width: 631px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,2082,2083,2084,2087],{},"Segarkan halaman ",[814,2085,2086],{},"Packing List"," dan ketiga barang tersebut sudah ada di sana:",[825,2089],{"src":2090,"alt":2091,"style":2092},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-packing-list-mcp-parsed-items.webp","Mengonfirmasi item bawaan yang baru diurai di halaman Daftar Barang Bawaan","max-width: 312px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[444,2094,2096],{"id":2095},"_63-gemini-cli-pendaftaran-dinamis","6.3 Gemini CLI (Pendaftaran Dinamis)",[429,2098,2099,2100,2103,2104,892],{},"Gemini CLI mendukung ",[814,2101,2102],{},"pendaftaran dinamis",", yaitu tidak memerlukan klien yang dibuat sebelumnya. Tambahkan ini ke ",[456,2105,2106],{},".gemini\u002Fsettings.json",[449,2108,2110],{"className":861,"code":2109,"language":863,"meta":454,"style":454},"    \"trek\": {\n      \"httpUrl\": \"https:\u002F\u002Ftrek.pafor.me\u002Fmcp\",\n      \"oauth\": {\n        \"enabled\": true\n      }\n    }\n",[456,2111,2112,2124,2143,2156,2170,2175],{"__ignoreMap":454},[459,2113,2114,2116,2118,2120,2122],{"class":461,"line":462},[459,2115,1885],{"class":483},[459,2117,1032],{"class":476},[459,2119,543],{"class":483},[459,2121,1877],{"class":718},[459,2123,1880],{"class":483},[459,2125,2126,2128,2131,2133,2135,2137,2139,2141],{"class":461,"line":469},[459,2127,1899],{"class":483},[459,2129,2130],{"class":1888},"httpUrl",[459,2132,543],{"class":483},[459,2134,892],{"class":483},[459,2136,522],{"class":483},[459,2138,1949],{"class":476},[459,2140,543],{"class":483},[459,2142,1916],{"class":483},[459,2144,2145,2147,2150,2152,2154],{"class":461,"line":502},[459,2146,1899],{"class":483},[459,2148,2149],{"class":1888},"oauth",[459,2151,543],{"class":483},[459,2153,892],{"class":483},[459,2155,879],{"class":483},[459,2157,2158,2160,2163,2165,2167],{"class":461,"line":509},[459,2159,1935],{"class":483},[459,2161,2162],{"class":472},"enabled",[459,2164,543],{"class":483},[459,2166,892],{"class":483},[459,2168,2169],{"class":483}," true\n",[459,2171,2172],{"class":461,"line":515},[459,2173,2174],{"class":483},"      }\n",[459,2176,2177],{"class":461,"line":562},[459,2178,2021],{"class":483},[429,2180,2181,2182,2185,2186,2189,2190],{},"Jalankan ",[456,2183,2184],{},"gemini"," di terminal dan klik ",[814,2187,2188],{},"Approve"," saat permintaan otorisasi muncul:\n",[825,2191],{"src":2192,"alt":2193,"style":2194},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fmcp-client-oauth-authorization-prompt.webp","Menyetujui akses OAuth untuk server MCP TREK","max-width: 488px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,2196,2197],{},"Kemudian mulai dengan perintah sederhana:",[825,2199],{"src":2200,"alt":2201,"style":2202},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fgemini-cli-mcp-prompt-itinerary.webp","Meminta Gemini CLI untuk mengambil rencana perjalanan","max-width: 415px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[825,2204],{"src":2205,"alt":2206,"style":1458},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fgemini-cli-mcp-display-itinerary.webp","Gemini CLI berhasil menampilkan informasi perjalanan terstruktur",[444,2208,2210],{"id":2209},"_64-kimi-cli-pendaftaran-dinamis","6.4 Kimi CLI (Pendaftaran Dinamis)",[429,2212,2213,2214,2217,2218,2221],{},"Pendekatan yang sama — tambahkan ke ",[456,2215,2216],{},"mcp.json"," di folder ",[456,2219,2220],{},"\u002FUsers\u002F\u003Cuser>\u002F.kimi\u002F"," :",[449,2223,2225],{"className":861,"code":2224,"language":863,"meta":454,"style":454},"    \"trek\": {\n      \"type\": \"http\",\n      \"url\": \"https:\u002F\u002Ftrek.pafor.me\u002Fmcp\",\n      \"auth\": \"oauth\"\n    }\n",[456,2226,2227,2239,2259,2278,2295],{"__ignoreMap":454},[459,2228,2229,2231,2233,2235,2237],{"class":461,"line":462},[459,2230,1885],{"class":483},[459,2232,1032],{"class":476},[459,2234,543],{"class":483},[459,2236,1877],{"class":718},[459,2238,1880],{"class":483},[459,2240,2241,2243,2246,2248,2250,2252,2255,2257],{"class":461,"line":469},[459,2242,1899],{"class":483},[459,2244,2245],{"class":1888},"type",[459,2247,543],{"class":483},[459,2249,892],{"class":483},[459,2251,522],{"class":483},[459,2253,2254],{"class":476},"http",[459,2256,543],{"class":483},[459,2258,1916],{"class":483},[459,2260,2261,2263,2266,2268,2270,2272,2274,2276],{"class":461,"line":502},[459,2262,1899],{"class":483},[459,2264,2265],{"class":1888},"url",[459,2267,543],{"class":483},[459,2269,892],{"class":483},[459,2271,522],{"class":483},[459,2273,1949],{"class":476},[459,2275,543],{"class":483},[459,2277,1916],{"class":483},[459,2279,2280,2282,2285,2287,2289,2291,2293],{"class":461,"line":509},[459,2281,1899],{"class":483},[459,2283,2284],{"class":1888},"auth",[459,2286,543],{"class":483},[459,2288,892],{"class":483},[459,2290,522],{"class":483},[459,2292,2149],{"class":476},[459,2294,2011],{"class":483},[459,2296,2297],{"class":461,"line":515},[459,2298,2021],{"class":483},[429,2300,2181,2301,2185,2304,2306,2307],{},[456,2302,2303],{},"kimi mcp auth trek",[814,2305,2188],{},":\n",[825,2308],{"src":2192,"alt":2193,"style":2309},"max-width: 453px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[429,2311,2312],{},"Setelah diotorisasi, alat yang tersedia akan dicantumkan:",[825,2314],{"src":2315,"alt":2316,"style":829},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fkimi-cli-mcp-authorized-tools-list.webp","Kimi CLI menampilkan alat yang tersedia setelah otorisasi berhasil",[439,2318,2320],{"id":2319},"_7-pengalaman-seluler","7. Pengalaman Seluler",[429,2322,2323],{},"TREK adalah PWA (progressive web app) di perangkat seluler. Service worker akan menyimpan templat peta dan data API dalam tembolok (cache), sehingga rencana perjalanan Anda tetap dapat dibaca secara offline. Namun, notifikasi push mungkin mengalami beberapa keterlambatan (latency) dibandingkan dengan aplikasi asli.",[439,2325,2327],{"id":2326},"kesimpulan","Kesimpulan",[429,2329,2330],{},"Menghubungkan agen AI melalui MCP menghemat banyak pekerjaan membosankan dalam memasukkan pemesanan penerbangan dan akomodasi. Selain itu, agen dapat menyarankan tempat-tempat menarik berdasarkan tanggal perjalanan dan musim Anda. Satu percakapan dengan agen AI dapat mencakup seluruh rangkaian proses, mulai dari riset dan pembuatan rencana perjalanan hingga pelacakan anggaran dan pengepakan barang.",[429,2332,2333],{},"Ada beberapa kendala teknis kecil. Misalnya, saat mengimpor pemesanan dari berkas PDF, mata uang akan default ke mata uang dasar perjalanan, bukan mata uang yang sebenarnya dibayarkan. Selain itu, saat membuat daftar baru di Collections, gambar sampul apa pun yang ditambahkan selama pembuatan akan hilang saat disimpan, meskipun dapat ditambahkan kembali secara manual saat mengedit.",[429,2335,2336,2337,2342],{},"Ada sedikit hambatan teknis, karena Anda perlu meng-host aplikasi ini di server Anda sendiri. TREK terutama dirancang untuk orang yang sering begegian dan memiliki ekspektasi tinggi tentang bagaimana mereka mengatur data perjalanan mereka. Kami menyarankan untuk mencoba demo resmi di ",[669,2338,2341],{"href":2339,"rel":2340},"https:\u002F\u002Fdemo.liketrek.com\u002F",[1156],"demo.liketrek.com"," sebelum mempertimbangkan self-hosting.",[439,2344,2346],{"id":2345},"referensi","Referensi:",[808,2348,2349,2356,2363],{},[811,2350,2351],{},[669,2352,2355],{"href":2353,"rel":2354},"https:\u002F\u002Fgithub.com\u002Fliketrek\u002FTREK\u002Fwiki\u002FQuick-Start",[1156],"TREK Quick Start",[811,2357,2358],{},[669,2359,2362],{"href":2360,"rel":2361},"https:\u002F\u002Fgithub.com\u002Fliketrek\u002FTREK\u002Fwiki\u002FTroubleshooting",[1156],"TREK Troubleshooting",[811,2364,2365],{},[669,2366,2369],{"href":2367,"rel":2368},"https:\u002F\u002Fgithub.com\u002Fliketrek\u002FTREK\u002Fwiki\u002FMCP-Scopes",[1156],"TREK MCP Scopes",[2371,2372,2373],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":454,"searchDepth":469,"depth":502,"links":2375},[2376,2381,2382,2392,2400,2406,2412,2413,2414],{"id":441,"depth":502,"text":442,"children":2377},[2378,2379,2380],{"id":446,"depth":509,"text":447},{"id":663,"depth":509,"text":664},{"id":699,"depth":509,"text":700},{"id":851,"depth":502,"text":852},{"id":903,"depth":502,"text":904,"children":2383},[2384,2385,2386,2387,2388,2389,2390,2391],{"id":1008,"depth":509,"text":1009},{"id":1019,"depth":509,"text":1020},{"id":1123,"depth":509,"text":1124},{"id":1144,"depth":509,"text":1145},{"id":1180,"depth":509,"text":1181},{"id":1201,"depth":509,"text":1202},{"id":1218,"depth":509,"text":1219},{"id":1229,"depth":509,"text":1230},{"id":1259,"depth":502,"text":1260,"children":2393},[2394,2395,2396,2397,2398,2399],{"id":1266,"depth":509,"text":1267},{"id":1299,"depth":509,"text":1300},{"id":1369,"depth":509,"text":1370},{"id":1391,"depth":509,"text":1392},{"id":1410,"depth":509,"text":1411},{"id":1435,"depth":509,"text":1436},{"id":1466,"depth":502,"text":1467,"children":2401},[2402,2403,2404,2405],{"id":1486,"depth":509,"text":1487},{"id":1585,"depth":509,"text":1586},{"id":1647,"depth":509,"text":1648},{"id":1746,"depth":509,"text":1747},{"id":1767,"depth":502,"text":1768,"children":2407},[2408,2409,2410,2411],{"id":1778,"depth":509,"text":1779},{"id":1807,"depth":509,"text":1808},{"id":2095,"depth":509,"text":2096},{"id":2209,"depth":509,"text":2210},{"id":2319,"depth":502,"text":2320},{"id":2326,"depth":502,"text":2327},{"id":2345,"depth":502,"text":2346},[2416,2417],"travel","ai-agents","2026-09-01","Pelajari cara deploy TREK dengan Docker, amankan lewat Cloudflare R2 dan Caddy, serta gunakan agen AI via MCP untuk rencana perjalanan Anda yang lancar.","md","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002FID-Self-hosted-travel-planner-TREK.webp","Ilustrasi 3D minimalis premium dari dasbor perencana perjalanan self-hosted TREK dengan latar belakang kertas perkamen hangat.",{"schemaOrg":2424,"robots":2430,"sitemap":2431},[2425,2427],{"@type":2426,"headline":423,"description":2419},"HowTo",{"@type":2428,"headline":2429,"description":2419},"Article","Cara Host TREK Sendiri: Planner Perjalanan AI Terbaik","index, follow",{"lastmod":2418},22,{"title":2429,"description":2419,"ogTitle":423,"ogDescription":2419,"twitterTitle":423,"twitterDescription":2419},"id\u002Farticle\u002Fself-hosted-travel-planner-trek",[2436,2437,2438,2439,1211],"Docker","TREK","Caddy","Cloudflare","2026-09-03","3OTyz87QLsG8ujjCue_J7CxOtq4jdBG6T7qk1AU8YZ4",{"surround":2443,"related":5202},[2444,3034],{"id":2445,"title":2446,"author":454,"body":2447,"category":3016,"date":3017,"description":3018,"extension":2420,"image":3019,"imageAlt":3020,"isPublished":505,"meta":3021,"minRead":509,"navigation":505,"path":153,"seo":3026,"stem":3028,"tags":3029,"updatedAt":424,"__hash__":3033},"article\u002Fid\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts.md","Cara Skill Agen AI Menggantikan Script Scaffolding Nuxt",{"type":426,"value":2448,"toc":3009},[2449,2463,2468,2471,2571,2574,2602,2608,2612,2627,2644,2648,2659,2821,2825,2913,2917,2925,2946,2953,2968,2980,2983,2989,2992,2998,3006],[429,2450,2451,2452,917,2455,2458,2459,2462],{},"Saat kita memulai aplikasi baru menggunakan framework Nuxt, kita harus melalui langkah-langkah yang membosankan seperti menginstal modul dan mengatur konfigurasi seperti ",[456,2453,2454],{},"nuxt.config.ts",[456,2456,2457],{},"wrangler.jsonc",". Skrip memang bisa menyelesaikan masalah ini, tetapi ia akan mencapai batasnya seiring bertambahnya variasi kebutuhan. Inilah mengapa kami mengeksplorasi dan mengganti skrip dengan sebuah ",[814,2460,2461],{},"skill agen"," (agent skill).",[2464,2465,2467],"h2",{"id":2466},"kegunaan-utama-skrip-shell-tradisional","Kegunaan Utama Skrip Shell Tradisional",[429,2469,2470],{},"Sebuah skrip sangat baik untuk menjalankan serangkaian instruksi tetap secara berurutan dengan keputusan yang telah ditulis secara kaku di dalam kode (hardcoded).",[449,2472,2474],{"className":451,"code":2473,"language":453,"meta":454,"style":454},"#!\u002Fusr\u002Fbin\u002Fenv bash\nset -e\n\nnpx nuxi@latest init \"$1\" --template minimal --packageManager pnpm --no-gitInit -M @nuxt\u002Fui,@nuxthub\u002Fcore,@vueuse\u002Fnuxt\n\ncd \"$1\"\n\ncp ~\u002Ftemplates\u002Fnuxt.config.ts .\ncp ~\u002Ftemplates\u002Fwrangler.jsonc .\n",[456,2475,2476,2481,2489,2493,2532,2536,2547,2551,2562],{"__ignoreMap":454},[459,2477,2478],{"class":461,"line":462},[459,2479,2480],{"class":465},"#!\u002Fusr\u002Fbin\u002Fenv bash\n",[459,2482,2483,2486],{"class":461,"line":469},[459,2484,2485],{"class":518},"set",[459,2487,2488],{"class":476}," -e\n",[459,2490,2491],{"class":461,"line":502},[459,2492,506],{"emptyLinePlaceholder":505},[459,2494,2495,2497,2500,2503,2505,2509,2511,2514,2517,2520,2523,2526,2529],{"class":461,"line":509},[459,2496,1911],{"class":472},[459,2498,2499],{"class":476}," nuxi@latest",[459,2501,2502],{"class":476}," init",[459,2504,522],{"class":483},[459,2506,2508],{"class":2507},"sHdIc","$1",[459,2510,543],{"class":483},[459,2512,2513],{"class":476}," --template",[459,2515,2516],{"class":476}," minimal",[459,2518,2519],{"class":476}," --packageManager",[459,2521,2522],{"class":476}," pnpm",[459,2524,2525],{"class":476}," --no-gitInit",[459,2527,2528],{"class":476}," -M",[459,2530,2531],{"class":476}," @nuxt\u002Fui,@nuxthub\u002Fcore,@vueuse\u002Fnuxt\n",[459,2533,2534],{"class":461,"line":515},[459,2535,506],{"emptyLinePlaceholder":505},[459,2537,2538,2541,2543,2545],{"class":461,"line":562},[459,2539,2540],{"class":518},"cd",[459,2542,522],{"class":483},[459,2544,2508],{"class":2507},[459,2546,2011],{"class":483},[459,2548,2549],{"class":461,"line":567},[459,2550,506],{"emptyLinePlaceholder":505},[459,2552,2553,2556,2559],{"class":461,"line":573},[459,2554,2555],{"class":472},"cp",[459,2557,2558],{"class":476}," ~\u002Ftemplates\u002Fnuxt.config.ts",[459,2560,2561],{"class":476}," .\n",[459,2563,2564,2566,2569],{"class":461,"line":585},[459,2565,2555],{"class":472},[459,2567,2568],{"class":476}," ~\u002Ftemplates\u002Fwrangler.jsonc",[459,2570,2561],{"class":476},[429,2572,2573],{},"Skrip ini berfungsi dengan baik sampai hal-hal berikut terjadi:",[808,2575,2576,2582,2592],{},[811,2577,2578,2581],{},[814,2579,2580],{},"Nilai default yang kaku."," Skrip menetapkan modul Nuxt UI secara kaku; bagaimana jika kita ingin modul Ant Design UI? Setiap opsi modul baru membutuhkan argumen tambahan dari pengguna.",[811,2583,2584,2587,2588,2591],{},[814,2585,2586],{},"Tidak dapat membaca niat pengguna."," Perintah \"Buatkan saya blog\" membutuhkan ",[456,2589,2590],{},"@nuxt\u002Fcontent","; \"buatkan saya situs web dengan buletin\" membutuhkan Cloudflare D1 + Drizzle. Skrip tidak dapat membedakan hal ini — setiap variasi memerlukan skrip baru.",[811,2593,2594,2597,2598,2601],{},[814,2595,2596],{},"Menjadi usang secara diam-diam."," Aturan konvensi Nuxt berubah antar versi mayor. Nuxt 4 mengubah direktori sumber menjadi ",[456,2599,2600],{},"app\u002F",". Skrip yang ditulis untuk Nuxt 3 akan melakukan inisialisasi (scaffolding) dengan struktur yang salah tanpa pernah memberi tahu pengguna.",[429,2603,2604,2607],{},[814,2605,2606],{},"Inisialisasi proyek"," (app scaffolding) adalah masalah pengambilan keputusan, bukan masalah eksekusi. Skrip tidak akan bisa berkembang ketika jumlah keputusan yang harus diambil meningkat.",[2464,2609,2611],{"id":2610},"mengapa-menggunakan-skill-agen-ai-dibandingkan-skrip-tradisional","Mengapa Menggunakan Skill Agen AI Dibandingkan Skrip Tradisional?",[429,2613,2614,2615,2618,2619,2622,2623,2626],{},"Skill agen (agent skill) bukanlah sekumpulan kode yang dieksekusi, melainkan ",[814,2616,2617],{},"sekumpulan pengetahuan yang diikuti oleh agen AI",". Skill ini berisi file ",[456,2620,2621],{},"SKILL.md"," dan dapat membundel file lain yang diperlukan untuk tugas tersebut (seperti dokumen referensi, templat, dan skrip yang dapat dieksekusi). Artikel ",[669,2624,2625],{"href":351},"Skill Agen AI: Apa Itu dan Bagaimana Cara Membuatnya"," menjelaskan bagaimana cara kerja skill agen. Sebuah skill mempertahankan kedisiplinan skrip sekaligus menambahkan penilaian logis yang tidak dimiliki oleh skrip biasa:",[808,2628,2629,2632,2635,2638,2641],{},[811,2630,2631],{},"Menyimpulkan niat pengguna untuk menentukan apakah aplikasi memerlukan database.",[811,2633,2634],{},"Memutuskan modul opsional mana yang diperlukan dari daftar yang ditentukan. Misalnya, Nuxt Content, i18n, dan analitik bersifat opsional berdasarkan permintaan pengguna.",[811,2636,2637],{},"Menyesuaikan diri dengan ekosistem saat ini menggunakan framework Nuxt terbaru, NuxtHub untuk binding Cloudflare, dan Wrangler untuk deployment.",[811,2639,2640],{},"Memulihkan diri secara mandiri ketika sebuah langkah gagal.",[811,2642,2643],{},"Memverifikasi kesesuaian proyek terhadap checklist akhir sebelum menyerahkannya kepada pengguna.",[2464,2645,2647],{"id":2646},"di-balik-layar-skill-scaffolding-nuxt-cloudflare-kami","Di Balik Layar Skill Scaffolding Nuxt & Cloudflare Kami",[429,2649,2650,2651,2658],{},"Skill kami, ",[669,2652,2655],{"href":2653,"rel":2654},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fscaffold-nuxt-cloudflare-app-skill",[1156],[456,2656,2657],{},"scaffold-nuxt-cloudflare-app-skill",", memandu proses inisialisasi yang berorientasi produksi:",[1025,2660,2661,2692,2713,2737,2766,2801,2807],{},[811,2662,2663,2666,2667],{},[814,2664,2665],{},"Mengklarifikasi hal-hal"," yang tidak dapat disimpulkan secara otomatis:\n",[808,2668,2669,2680,2683],{},[811,2670,2671,2672,2675,2676,2679],{},"Kit UI (",[814,2673,2674],{},"Nuxt UI"," secara default atau ",[814,2677,2678],{},"Antdv Next",");",[811,2681,2682],{},"Apakah database diperlukan (seperti Cloudflare D1);",[811,2684,2685,2686,1541,2689,2691],{},"Modul tambahan seperti ",[456,2687,2688],{},"@nuxtjs\u002Fi18n",[456,2690,2590],{}," untuk fitur CMS.",[811,2693,2694,2697,2698,2701,2702,2705,2706,2709,2710,1033],{},[814,2695,2696],{},"Membuat scaffolding aplikasi dasar"," dengan ",[456,2699,2700],{},"pnpm dlx nuxi@latest init"," untuk versi framework Nuxt terbaru dengan ",[456,2703,2704],{},"pnpm"," sebagai package manager. Kemudian, ia mengatur daftar izin kompilasi asli (native-build allowlists) agar lingkungan build Cloudflare dapat mengompilasi ",[456,2707,2708],{},"better-sqlite3","\u002F",[456,2711,2712],{},"sharp",[811,2714,2715,1877,2718,1541,2721,1990,2724,1990,2727,1990,2730,1990,2733,2736],{},[814,2716,2717],{},"Menginstal modul berdasarkan tabel keputusan",[456,2719,2720],{},"@nuxt\u002Fui",[456,2722,2723],{},"@antdv-next\u002Fnuxt",[456,2725,2726],{},"@nuxt\u002Fimage",[456,2728,2729],{},"@nuxtjs\u002Fseo",[456,2731,2732],{},"@nuxthub\u002Fcore",[456,2734,2735],{},"@vueuse\u002Fnuxt",", ditambah Drizzle\u002FD1, Nuxt Content, dan i18n hanya jika dipilih.",[811,2738,2739,2306,2742],{},[814,2740,2741],{},"Menata struktur direktori",[808,2743,2744,2748,2753,2758,2763],{},[811,2745,2746],{},[456,2747,2600],{},[811,2749,2750],{},[456,2751,2752],{},"server\u002F",[811,2754,2755],{},[456,2756,2757],{},"shared\u002F",[811,2759,2760],{},[456,2761,2762],{},"tests\u002F",[811,2764,2765],{},"file konfigurasi root.",[811,2767,2768,2306,2773],{},[814,2769,2770,2771],{},"Mengonfigurasi ",[456,2772,2454],{},[808,2774,2775,2784,2791,2796],{},[811,2776,2777,2709,2780,2783],{},[456,2778,2779],{},"site.url",[456,2781,2782],{},"site.name"," untuk SEO",[811,2785,2786,2787,2790],{},"Blok ",[456,2788,2789],{},"hub"," NuxtHub untuk Cloudflare",[811,2792,2793],{},[456,2794,2795],{},"routeRules",[811,2797,2798],{},[456,2799,2800],{},"compatibilityDate",[811,2802,2803],{},[814,2804,2770,2805],{},[456,2806,2457],{},[811,2808,2809,2812,2813,2816,2817,2820],{},[814,2810,2811],{},"Menyiapkan Vitest dan ESLint",", lalu menjalankan ",[814,2814,2815],{},"checklist akhir"," termasuk ",[456,2818,2819],{},"pnpm install && pnpm dev"," sebelum menganggap pekerjaan selesai.",[2464,2822,2824],{"id":2823},"skrip-shell-vs-skill-agen-ai-perbandingan-langsung","Skrip Shell vs Skill Agen AI: Perbandingan Langsung",[2826,2827,2828,2843],"table",{},[2829,2830,2831],"thead",{},[2832,2833,2834,2837,2840],"tr",{},[2835,2836],"th",{},[2835,2838,2839],{},"Skrip",[2835,2841,2842],{},"Skill",[2844,2845,2846,2858,2869,2880,2891,2902],"tbody",{},[2832,2847,2848,2852,2855],{},[2849,2850,2851],"td",{},"Niat pengguna",[2849,2853,2854],{},"❌ nilai default kaku",[2849,2856,2857],{},"✅ menyesuaikan permintaan",[2832,2859,2860,2863,2866],{},[2849,2861,2862],{},"Pengambilan keputusan",[2849,2864,2865],{},"hanya jika flag diprogram",[2849,2867,2868],{},"✅ dinilai saat runtime",[2832,2870,2871,2874,2877],{},[2849,2872,2873],{},"Perubahan versi",[2849,2875,2876],{},"penulisan ulang manual",[2849,2878,2879],{},"✅ memeriksa kondisi saat ini",[2832,2881,2882,2885,2888],{},[2849,2883,2884],{},"Pemulihan kesalahan",[2849,2886,2887],{},"berhenti",[2849,2889,2890],{},"✅ memperbaiki dan lanjut",[2832,2892,2893,2896,2899],{},[2849,2894,2895],{},"Verifikasi hasil",[2849,2897,2898],{},"❌",[2849,2900,2901],{},"✅ checklist akhir",[2832,2903,2904,2907,2910],{},[2849,2905,2906],{},"Biaya pemeliharaan",[2849,2908,2909],{},"penumpukan flag, pembaruan versi",[2849,2911,2912],{},"mengedit Markdown, bukan kode",[2464,2914,2916],{"id":2915},"cara-menginstal-skill-agen-ai-dengan-cli-npx-skills","Cara Menginstal Skill Agen AI dengan CLI npx skills",[429,2918,2919,2920,892],{},"Instalasi dilakukan dengan satu perintah menggunakan ",[669,2921,2924],{"href":2922,"rel":2923},"https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fskills",[1156],"skills CLI",[449,2926,2928],{"className":451,"code":2927,"language":453,"meta":454,"style":454},"npx skills add https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fscaffold-nuxt-cloudflare-app-skill.git -g\n",[456,2929,2930],{"__ignoreMap":454},[459,2931,2932,2934,2937,2940,2943],{"class":461,"line":462},[459,2933,1911],{"class":472},[459,2935,2936],{"class":476}," skills",[459,2938,2939],{"class":476}," add",[459,2941,2942],{"class":476}," https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fscaffold-nuxt-cloudflare-app-skill.git",[459,2944,2945],{"class":476}," -g\n",[429,2947,2948,2949],{},"CLI akan mengkloning repo, menemukan skill tersebut, dan menanyakan agen mana dari 77 agen yang didukung yang akan menerimanya:\n",[825,2950],{"alt":2951,"src":2952},"Antarmuka baris perintah yang menunjukkan instalasi skill scaffolding Nuxt menggunakan perintah CLI npx skills add","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20AI%20Agent%20Skills%20Replace%20Nuxt%20App%20Scaffolding%20Scripts\u002Fnpx-skills-add-scaffold-nuxt-installation.webp",[429,2954,2955,2956,2959,2960,2963,2964],{},"Kami memilih ",[814,2957,2958],{},"Symlink"," (metode yang direkomendasikan), yang menginstal skill satu kali di ",[456,2961,2962],{},"~\u002F.agents\u002Fskills"," dan menghubungkan setiap agen yang dipilih ke satu salinan ini.\n",[825,2965],{"alt":2966,"src":2967},"Tampilan terminal yang menunjukkan ringkasan instalasi dan penyiapan symlink untuk skill agen yang terpusat","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20AI%20Agent%20Skills%20Replace%20Nuxt%20App%20Scaffolding%20Scripts\u002Fnpx-skills-installation-summary-details.webp",[808,2969,2970],{},[811,2971,2972],{},[2973,2974,2975,2976,2979],"em",{},"Silakan merujuk ke artikel ini, ",[669,2977,2978],{"href":359},"Mengatasi Fragmentasi Kemampuan Agen AI dengan npx skills",", tentang cara memusatkan skill agen dalam satu sumber kebenaran tunggal.",[429,2981,2982],{},"Membuka Claude Code mengonfirmasi bahwa skill tersebut telah berhasil diinstal.",[429,2984,2985],{},[825,2986],{"alt":2987,"src":2988},"Antarmuka baris perintah Claude Code menunjukkan perintah slash scaffold-nuxt yang baru diinstal telah aktif dan siap digunakan","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20AI%20Agent%20Skills%20Replace%20Nuxt%20App%20Scaffolding%20Scripts\u002Fclaude-code-scaffold-nuxt-slash-command-active.webp",[429,2990,2991],{},"Dari sana, sebuah perintah bahasa alami adalah semua yang Anda butuhkan:",[2993,2994,2995],"blockquote",{},[429,2996,2997],{},"\"Scaffold a new Nuxt app deployed to Cloudflare Workers — Nuxt UI, a blog section, and a D1 database\"",[429,2999,3000,3001,3005],{},"Skill ini bersifat open source; silakan kunjungi ",[669,3002,3004],{"href":2653,"rel":3003},[1156],"repo GitHub"," kami dan cobalah sendiri.",[2371,3007,3008],{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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);}",{"title":454,"searchDepth":469,"depth":502,"links":3010},[3011,3012,3013,3014,3015],{"id":2466,"depth":469,"text":2467},{"id":2610,"depth":469,"text":2611},{"id":2646,"depth":469,"text":2647},{"id":2823,"depth":469,"text":2824},{"id":2915,"depth":469,"text":2916},[2417],"2026-08-25","Scaffold Nuxt di Cloudflare Workers dengan mudah. Pelajari mengapa kami mengganti script rapuh dengan skill agen AI dan cara mudah pasang lewat npx skills.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20AI%20Agent%20Skills%20Replace%20Nuxt%20App%20Scaffolding%20Scripts\u002FID-How-AI-Agent-Skills-Replace-Nuxt-App-Scaffolding-Scripts.webp","Scaffolding Nuxt di Cloudflare: Script vs Skill Agen AI - Membandingkan script tradisional yang rapuh dengan skill agen AI yang adaptif.",{"schemaOrg":3022,"robots":2430,"sitemap":3025},[3023],{"@type":3024,"headline":2446,"description":3018,"image":3019},"TechArticle",{"lastmod":3017},{"title":3027,"description":3018,"ogTitle":2446,"ogDescription":3018,"twitterTitle":2446,"twitterDescription":3018},"Scaffolding Nuxt di Cloudflare: Script vs Skill Agen AI","id\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",[3030,2439,3031,3032],"Nuxt","AI Agent","Scaffolding","c7Qy-ZbcGWM5rhTOdJgtNkZm7e0UzyTvVaPTmF26fDQ",{"id":3035,"title":3036,"author":454,"body":3037,"category":5168,"date":5170,"description":5171,"extension":2420,"image":5172,"imageAlt":5173,"isPublished":505,"meta":5174,"minRead":643,"navigation":505,"path":161,"seo":5196,"stem":5198,"tags":5199,"updatedAt":424,"__hash__":5201},"article\u002Fid\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues.md","Self-Host Buzz dari Block: Ruang Kerja Bersama Agen AI Anda",{"type":426,"value":3038,"toc":5138},[3039,3042,3048,3054,3058,3061,3099,3103,3109,3147,3151,3155,3169,3175,3178,3182,3186,3199,3205,3253,3279,3283,3291,3297,3301,3304,3487,3491,3535,3542,3549,3555,3604,3610,3637,3641,3645,3672,3700,3705,3747,3756,4036,4040,4085,4090,4097,4102,4106,4129,4132,4138,4141,4145,4153,4159,4162,4168,4175,4203,4209,4215,4218,4224,4228,4231,4234,4237,4243,4246,4252,4258,4264,4269,4273,4284,4291,4297,4300,4306,4310,4317,4323,4330,4334,4342,4405,4417,4471,4474,4545,4551,4567,4573,4577,4623,4629,4632,4638,4641,4647,4651,4668,4684,4690,4787,4790,4796,4807,4856,4862,4868,4881,4897,4900,4906,4910,4917,4939,4949,5047,5058,5064,5071,5077,5080,5086,5089,5095,5099,5102,5105,5135],[429,3040,3041],{},"Fragmentasi konteks adalah kendala yang membuat frustrasi saat bekerja dengan beberapa agen AI. Dengan percakapan yang tersebar di berbagai alat, Anda akhirnya bertindak sebagai perute manusia (human router) dengan menyalin percakapan dari Claude Code untuk ditempelkan ke Gemini CLI, lalu menyalin dari Gemini CLI untuk ditempelkan ke Hermes Agent. Friksi ini meningkat ketika ada rekan manusia dalam tim yang sama.",[429,3043,3044],{},[825,3045],{"alt":3046,"src":3047},"Antarmuka pengguna ruang kerja kolaboratif Buzz yang menampilkan saluran obrolan dan agen AI yang aktif","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-workspace-interface.webp",[429,3049,3050,3053],{},[814,3051,3052],{},"Buzz",", sebuah ruang kerja kolaborasi sumber terbuka (open-source), menyatukan tim manusia dan agen AI ke dalam satu lingkungan yang terpadu. Di sini, rekan manusia dan agen AI berbagi riwayat tugas dan proyek yang sama, menyerahkan pekerjaan satu sama lain secara mulus.",[2464,3055,3057],{"id":3056},"apa-itu-buzz-dari-block-ruang-kerja-kolaboratif-agen-ai","Apa itu Buzz dari Block? Ruang Kerja Kolaboratif Agen AI",[429,3059,3060],{},"Buzz adalah ruang kerja kolaborasi sumber terbuka dari Block (perusahaan milik Jack Dorsey) tempat manusia dan agen AI berbagi saluran dan proyek yang sama. Buzz menawarkan fitur-fitur utama berikut:",[808,3062,3063,3069,3075,3081,3087,3093],{},[811,3064,3065,3068],{},[814,3066,3067],{},"Konteks bersama:"," Saluran (channels) adalah tempat manusia dan agen berkolaborasi satu sama lain. Semua riwayat percakapan dan proyek terkandung di dalam saluran tersebut.",[811,3070,3071,3074],{},[814,3072,3073],{},"Komunikasi antar-agen:"," Agen dapat berkomunikasi satu sama lain, bahkan di mesin yang berbeda. Agen dapat me-@mention agen lain untuk menyerahkan pekerjaan atau memeriksa silang kode.",[811,3076,3077,3080],{},[814,3078,3079],{},"Aktivasi berbasis sebutan (mention-driven):"," Agen hanya bertindak ketika di-@mention, jika tidak, mereka akan tetap diam. Saat disebut, agen membaca konteks yang relevan di saluran tersebut dan mulai bekerja.",[811,3082,3083,3086],{},[814,3084,3085],{},"Sistem identitas terpadu:"," Manusia dan agen menggunakan sistem identitas yang sama, yang diautentikasi melalui kunci kriptografi.",[811,3088,3089,3092],{},[814,3090,3091],{},"Perintah yang didelegasikan:"," Anda dapat memberikan izin kepada rekan manusia untuk memerintah agen Anda, memungkinkan seluruh tim untuk memberi instruksi dan memanfaatkan asisten digital satu sama lain.",[811,3094,3095,3098],{},[814,3096,3097],{},"Server mandiri (self-hosted):"," Karena Anda meng-host server sendiri, data Anda tetap sepenuhnya berada di bawah kendali Anda. Anda memilih siapa yang bergabung dan menetapkan aturan operasional Anda sendiri.",[2464,3100,3102],{"id":3101},"arsitektur-buzz-yang-kriptografis-dan-didukung-nostr","Arsitektur Buzz yang Kriptografis dan Didukung Nostr",[429,3104,3105],{},[825,3106],{"alt":3107,"src":3108},"Diagram arsitektur kriptografis berbasis Nostr dari ruang kerja kolaborasi Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-nostr-cryptographic-architecture.webp",[808,3110,3111,3117,3123,3129,3135,3141],{},[811,3112,3113,3116],{},[814,3114,3115],{},"Relay Nostr bertindak sebagai server:"," Pesan, alur kerja, repositori, dan peristiwa lainnya ditandatangani secara kriptografis, diverifikasi, dan disimpan di server relay Nostr. Protokol Nostr secara native mendukung komunikasi melalui WebSockets dan REST API.",[811,3118,3119,3122],{},[814,3120,3121],{},"Identitas kriptografis terpadu:"," Manusia dan agen mengautentikasi menggunakan kunci kriptografis mereka sendiri. Identitas ini tetap berada di sisi klien (client-side) dan tidak pernah disimpan di server.",[811,3124,3125,3128],{},[814,3126,3127],{},"Keanggotaan agen kelas satu:"," Setiap agen memiliki identitas, keanggotaan saluran, dan jejak auditnya sendiri. Agen terhubung ke ruang kerja menggunakan Agent Communication Protocol (ACP).",[811,3130,3131,3134],{},[814,3132,3133],{},"Repositori Git terdesentralisasi:"," Repositori kode disimpan pada penyimpanan objek yang kompatibel dengan S3, sedangkan tugas, pull request, dan ulasan kode dilacak dalam log aktivitas Nostr. Oleh karena itu, repositori Git Buzz di-host di relay Nostr, bukan di GitHub.",[811,3136,3137,3140],{},[814,3138,3139],{},"Aplikasi Buzz adalah klien Nostr:"," Buzz terpisah dari relay Nostr; ini adalah aplikasi klien desktop\u002Fseluler yang terhubung ke URL relay.",[811,3142,3143,3146],{},[814,3144,3145],{},"Stack infrastruktur:"," Database PostgreSQL menangani penyimpanan peristiwa dan pencarian teks lengkap, Redis mengelola pesan pub\u002Fsub, dan MinIO yang kompatibel dengan S3 digunakan untuk penyimpanan media.",[2464,3148,3150],{"id":3149},"cara-self-host-relay-buzz-block-di-linux-vps","Cara Self-Host Relay Buzz Block di Linux VPS",[439,3152,3154],{"id":3153},"_0-prasyarat","0. Prasyarat",[808,3156,3157,3160,3163,3166],{},[811,3158,3159],{},"Sebuah Linux VPS",[811,3161,3162],{},"Domain yang mengarah ke server Anda",[811,3164,3165],{},"Docker dan plugin Docker Compose",[811,3167,3168],{},"Akun Cloudflare (paket gratis)",[429,3170,3171,3172,3174],{},"Dalam panduan ini, kita akan menjalankan relay Nostr di Ubuntu VPS di balik jaringan privat ",[669,3173,1800],{"href":363},". Stack-nya adalah empat layanan dalam Docker Compose — relay, PostgreSQL, Redis, dan MinIO — ditambah Caddy untuk HTTPS.",[1793,3176],{"description":3177,"image":1796,"image-alt":1797,"label":1798,"min-read":1799,"title":1800,"to":363},"Pelajari cara mengekspos dan mengakses Hermes Agent Anda secara aman secara global menggunakan Cloudflare WARP dan Zero Trust tanpa membuka port firewall masuk.",[439,3179,3181],{"id":3180},"_1-dns-cloudflare-dan-token-api","1. DNS Cloudflare dan Token API",[444,3183,3185],{"id":3184},"membuat-token-api-cloudflare","Membuat Token API Cloudflare",[1025,3187,3188,3194],{},[811,3189,996,3190,3193],{},[814,3191,3192],{},"Profile"," di sudut kanan atas dari menu dropdown ikon pengguna.",[811,3195,996,3196,1033],{},[814,3197,3198],{},"API Tokens",[429,3200,3201],{},[825,3202],{"alt":3203,"src":3204},"Halaman profil pengguna Cloudflare yang menampilkan menu pembuatan Token API","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fcloudflare-profile-api-tokens.webp",[1025,3206,3207,3212,3218,3238,3243,3247,3250],{"start":502},[811,3208,1049,3209,1033],{},[814,3210,3211],{},"Create Token",[811,3213,3214,3215,1033],{},"Gunakan templat ",[814,3216,3217],{},"Edit zone DNS",[811,3219,3220,3221],{},"Konfigurasikan templat sebagai berikut:\n",[808,3222,3223,3229],{},[811,3224,3225,3228],{},[814,3226,3227],{},"Permissions",": Zone — DNS — Edit",[811,3230,3231,3234,3235],{},[814,3232,3233],{},"Zone Resources",": Include — Specific zone — ",[456,3236,3237],{},"example.com",[811,3239,1049,3240,1033],{},[814,3241,3242],{},"Continue to summary",[811,3244,1049,3245,1033],{},[814,3246,3211],{},[811,3248,3249],{},"Salin token yang dihasilkan karena tidak akan ditampilkan lagi setelah halaman ditutup.",[811,3251,3252],{},"Uji token yang dihasilkan di terminal Anda untuk memastikan token berfungsi:",[449,3254,3256],{"className":451,"code":3255,"language":453,"meta":454,"style":454},"curl \"https:\u002F\u002Fapi.cloudflare.com\u002Fclient\u002Fv4\u002Fuser\u002Ftokens\u002Fverify\" -H \"Authorization: Bearer YOUR_TOKEN_HERE\"\n",[456,3257,3258],{"__ignoreMap":454},[459,3259,3260,3262,3264,3267,3269,3272,3274,3277],{"class":461,"line":462},[459,3261,473],{"class":472},[459,3263,522],{"class":483},[459,3265,3266],{"class":476},"https:\u002F\u002Fapi.cloudflare.com\u002Fclient\u002Fv4\u002Fuser\u002Ftokens\u002Fverify",[459,3268,543],{"class":483},[459,3270,3271],{"class":476}," -H",[459,3273,522],{"class":483},[459,3275,3276],{"class":476},"Authorization: Bearer YOUR_TOKEN_HERE",[459,3278,2011],{"class":483},[444,3280,3282],{"id":3281},"catatan-dns","Catatan DNS",[808,3284,3285],{},[811,3286,3287,3288,1033],{},"Buat catatan A dan atur ke ",[814,3289,3290],{},"DNS only",[429,3292,3293],{},[825,3294],{"alt":3295,"src":3296},"Mengonfigurasi catatan DNS A untuk domain Buzz di dasbor Cloudflare dengan status proksi diatur ke DNS saja","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fcloudflare-dns-a-record-configuration.webp",[439,3298,3300],{"id":3299},"_2-menginstal-docker-di-ubuntu","2. Menginstal Docker di Ubuntu",[429,3302,3303],{},"Jalankan perintah berikut untuk menginstal Docker di Ubuntu:",[449,3305,3307],{"className":451,"code":3306,"language":453,"meta":454,"style":454},"# Add Docker's official GPG key and set up the Docker repository\ncurl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg\n\n# Add the official Docker repository\necho \"deb [arch=amd64 signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu $(lsb_release -cs) stable\" | sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list > \u002Fdev\u002Fnull\n\n# Update package list\nsudo apt update\n\n# Install Docker Engine, Docker Community Edition, and containerd runtime\nsudo apt install docker-ce docker-ce-cli containerd.io -y\n\n# Start automatically when the system boots\nsudo systemctl enable docker\n\n# Verify docker is installed\ndocker --version\n\nsudo apt install -y docker-compose-plugin\n\n# Verify the compose plugin is installed\ndocker compose version\n\n",[456,3308,3309,3313,3333,3337,3341,3373,3377,3381,3389,3393,3397,3413,3417,3422,3432,3436,3440,3446,3451,3466,3471,3477],{"__ignoreMap":454},[459,3310,3311],{"class":461,"line":462},[459,3312,466],{"class":465},[459,3314,3315,3317,3319,3321,3323,3325,3327,3329,3331],{"class":461,"line":469},[459,3316,473],{"class":472},[459,3318,477],{"class":476},[459,3320,480],{"class":476},[459,3322,484],{"class":483},[459,3324,487],{"class":472},[459,3326,490],{"class":476},[459,3328,493],{"class":476},[459,3330,496],{"class":476},[459,3332,499],{"class":476},[459,3334,3335],{"class":461,"line":502},[459,3336,506],{"emptyLinePlaceholder":505},[459,3338,3339],{"class":461,"line":509},[459,3340,512],{"class":465},[459,3342,3343,3345,3347,3349,3351,3353,3355,3357,3359,3361,3363,3365,3367,3369,3371],{"class":461,"line":515},[459,3344,519],{"class":518},[459,3346,522],{"class":483},[459,3348,525],{"class":476},[459,3350,528],{"class":483},[459,3352,531],{"class":472},[459,3354,534],{"class":476},[459,3356,537],{"class":483},[459,3358,540],{"class":476},[459,3360,543],{"class":483},[459,3362,484],{"class":483},[459,3364,487],{"class":472},[459,3366,550],{"class":476},[459,3368,553],{"class":476},[459,3370,556],{"class":483},[459,3372,559],{"class":476},[459,3374,3375],{"class":461,"line":562},[459,3376,506],{"emptyLinePlaceholder":505},[459,3378,3379],{"class":461,"line":567},[459,3380,570],{"class":465},[459,3382,3383,3385,3387],{"class":461,"line":573},[459,3384,576],{"class":472},[459,3386,579],{"class":476},[459,3388,582],{"class":476},[459,3390,3391],{"class":461,"line":585},[459,3392,506],{"emptyLinePlaceholder":505},[459,3394,3395],{"class":461,"line":590},[459,3396,593],{"class":465},[459,3398,3399,3401,3403,3405,3407,3409,3411],{"class":461,"line":596},[459,3400,576],{"class":472},[459,3402,579],{"class":476},[459,3404,603],{"class":476},[459,3406,606],{"class":476},[459,3408,609],{"class":476},[459,3410,612],{"class":476},[459,3412,615],{"class":476},[459,3414,3415],{"class":461,"line":618},[459,3416,506],{"emptyLinePlaceholder":505},[459,3418,3419],{"class":461,"line":623},[459,3420,3421],{"class":465},"# Start automatically when the system boots\n",[459,3423,3424,3426,3428,3430],{"class":461,"line":629},[459,3425,576],{"class":472},[459,3427,654],{"class":476},[459,3429,657],{"class":476},[459,3431,660],{"class":476},[459,3433,3434],{"class":461,"line":638},[459,3435,506],{"emptyLinePlaceholder":505},[459,3437,3438],{"class":461,"line":643},[459,3439,626],{"class":465},[459,3441,3442,3444],{"class":461,"line":649},[459,3443,632],{"class":472},[459,3445,635],{"class":476},[459,3447,3449],{"class":461,"line":3448},18,[459,3450,506],{"emptyLinePlaceholder":505},[459,3452,3454,3456,3458,3460,3463],{"class":461,"line":3453},19,[459,3455,576],{"class":472},[459,3457,579],{"class":476},[459,3459,603],{"class":476},[459,3461,3462],{"class":476}," -y",[459,3464,3465],{"class":476}," docker-compose-plugin\n",[459,3467,3469],{"class":461,"line":3468},20,[459,3470,506],{"emptyLinePlaceholder":505},[459,3472,3474],{"class":461,"line":3473},21,[459,3475,3476],{"class":465},"# Verify the compose plugin is installed\n",[459,3478,3479,3481,3484],{"class":461,"line":2432},[459,3480,632],{"class":472},[459,3482,3483],{"class":476}," compose",[459,3485,3486],{"class":476}," version\n",[439,3488,3490],{"id":3489},"_3-kloning-dan-konfigurasi","3. Kloning dan Konfigurasi",[449,3492,3494],{"className":451,"code":3493,"language":453,"meta":454,"style":454},"git clone https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz.git\n\ncd buzz\u002Fdeploy\u002Fcompose\ncp .env.example .env\nnano .env\n",[456,3495,3496,3507,3511,3518,3528],{"__ignoreMap":454},[459,3497,3498,3501,3504],{"class":461,"line":462},[459,3499,3500],{"class":472},"git",[459,3502,3503],{"class":476}," clone",[459,3505,3506],{"class":476}," https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz.git\n",[459,3508,3509],{"class":461,"line":469},[459,3510,506],{"emptyLinePlaceholder":505},[459,3512,3513,3515],{"class":461,"line":502},[459,3514,2540],{"class":518},[459,3516,3517],{"class":476}," buzz\u002Fdeploy\u002Fcompose\n",[459,3519,3520,3522,3525],{"class":461,"line":509},[459,3521,2555],{"class":472},[459,3523,3524],{"class":476}," .env.example",[459,3526,3527],{"class":476}," .env\n",[459,3529,3530,3533],{"class":461,"line":515},[459,3531,3532],{"class":472},"nano",[459,3534,3527],{"class":476},[429,3536,3537,3538,3541],{},"Edit ",[456,3539,3540],{},".env"," dalam beberapa kelompok:",[808,3543,3544],{},[811,3545,3546],{},[814,3547,3548],{},"Domain:",[449,3550,3553],{"className":3551,"code":3552,"language":2055},[2053],"BUZZ_DOMAIN=buzz.pafor.me\nRELAY_URL=wss:\u002F\u002Fbuzz.pafor.me\nBUZZ_PAIRING_RELAY_URL=wss:\u002F\u002Fbuzz.pafor.me\u002Fpair\nBUZZ_MEDIA_BASE_URL=https:\u002F\u002Fbuzz.pafor.me\u002Fmedia\nBUZZ_MEDIA_SERVER_DOMAIN=buzz.pafor.me\nBUZZ_CORS_ORIGINS=https:\u002F\u002Fbuzz.pafor.me\n",[456,3554,3552],{"__ignoreMap":454},[808,3556,3557,3567],{},[811,3558,3559,3562,3563,3566],{},[814,3560,3561],{},"Kunci pemilik:"," ",[456,3564,3565],{},"RELAY_OWNER_PUBKEY"," memerlukan kunci publik hex 64-karakter Anda. Buat identitas di aplikasi desktop terlebih dahulu ('Create a new identity key' → salin ID publik Anda, yang dalam format npub), lalu konversikan ke hex.",[811,3568,3569,3572],{},[814,3570,3571],{},"Rahasia (Secrets):",[808,3573,3574,3585,3598],{},[811,3575,3576,3577,3580,3581,3584],{},"Hasilkan rahasia menggunakan ",[669,3578,3579],{"href":671},"alat kustom online"," ini atau dengan ",[456,3582,3583],{},"openssl rand -hex 32"," (jalankan tujuh kali)",[811,3586,3587,3588,1877,3591,1990,3594,3597],{},"Ganti setiap placeholder ",[456,3589,3590],{},"CHANGE_ME",[456,3592,3593],{},"BUZZ_RELAY_PRIVATE_KEY",[456,3595,3596],{},"BUZZ_GIT_HOOK_HMAC_SECRET",", kata sandi Postgres\u002FRedis\u002FTypesense, dan kunci akses\u002Frahasia S3.",[811,3599,3600,3601,1033],{},"Placeholder yang tersisa adalah penyebab paling umum dari loop mulai ulang kontainer; verifikasi milik Anda dengan ",[456,3602,3603],{},"grep CHANGE_ME .env",[449,3605,3608],{"className":3606,"code":3607,"language":2055},[2053],"    BUZZ_RELAY_PRIVATE_KEY=CHANGE_ME_64_HEX_PRIVATE_KEY\n    BUZZ_GIT_HOOK_HMAC_SECRET=CHANGE_ME_RANDOM_64_HEX\n    POSTGRES_PASSWORD=CHANGE_ME_RANDOM_PASSWORD\n    REDIS_PASSWORD=CHANGE_ME_RANDOM_PASSWORD\n    TYPESENSE_API_KEY=CHANGE_ME_RANDOM_API_KEY\n    BUZZ_S3_ACCESS_KEY=CHANGE_ME_RANDOM_ACCESS_KEY\n    BUZZ_S3_SECRET_KEY=CHANGE_ME_RANDOM_SECRET_KEY\n",[456,3609,3607],{"__ignoreMap":454},[808,3611,3612],{},[811,3613,3614,3617],{},[814,3615,3616],{},"Lainnya:",[808,3618,3619,3626],{},[811,3620,3621,3622,3625],{},"Tambahkan ",[456,3623,3624],{},"CLOUDFLARE_API_TOKEN"," sebagai variabel lingkungan dan tetapkan token API yang dibuat sebelumnya. Ini diperlukan untuk Caddy.",[811,3627,3628,3629,1990,3631,932,3634,1033],{},"Buzz dikirimkan dengan default terbuka — siapa pun yang mengetahui URL relay Anda dapat mengautentikasi dan bergabung. Atur ",[456,3630,3565],{},[456,3632,3633],{},"BUZZ_REQUIRE_RELAY_MEMBERSHIP=true",[456,3635,3636],{},"BUZZ_REQUIRE_AUTH_TOKEN=true",[439,3638,3640],{"id":3639},"_4-mengaktifkan-https-dengan-caddy","4. Mengaktifkan HTTPS dengan Caddy",[444,3642,3644],{"id":3643},"membangun-image-caddy-kustom-dengan-modul-dns-cloudflare","Membangun Image Caddy Kustom dengan Modul DNS Cloudflare",[808,3646,3647,3658,3669],{},[811,3648,3649,3650,3653,3654,3657],{},"Kita menyiapkan DNS-01 dengan Cloudflare untuk Caddy. DNS-01 bekerja dengan meminta plugin menulis catatan TXT ",[456,3651,3652],{},"_acme-challenge.buzz.pafor.me"," ke ",[814,3655,3656],{},"DNS publik",";",[811,3659,3660,3661,3664,3665,3668],{},"Let's Encrypt kemudian mencari catatan tersebut dari internet publik untuk memverifikasi kontrol domain. Ini berarti ",[456,3662,3663],{},"pafor.me"," harus berupa zona publik di akun Cloudflare Anda — bukan hanya nama host privat yang hanya ada di DNS privat Zero Trust \u002F WARP. Jika ",[456,3666,3667],{},"buzz.pafor.me"," hanya diselesaikan secara privat dan tidak ada zona publik, DNS-01 akan gagal, sehingga memerlukan pendekatan yang berbeda.",[811,3670,3671],{},"Tambahkan berikut ini ke Caddyfile:",[449,3673,3677],{"className":3674,"code":3675,"language":3676,"meta":454,"style":454},"language-yml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}\n}\n","yml",[456,3678,3679,3683,3696],{"__ignoreMap":454},[459,3680,3681],{"class":461,"line":462},[459,3682,1880],{"class":483},[459,3684,3685,3688,3691,3694],{"class":461,"line":469},[459,3686,3687],{"class":476},"  acme_dns cloudflare",[459,3689,3690],{"class":483}," {",[459,3692,3693],{"class":476},"env.CLOUDFLARE_API_TOKEN",[459,3695,900],{"class":483},[459,3697,3698],{"class":461,"line":502},[459,3699,900],{"class":483},[808,3701,3702],{},[811,3703,3704],{},"Buat Dockerfile.caddy dengan konten berikut, yang diperlukan oleh compose.caddy.yml:",[449,3706,3708],{"className":3674,"code":3707,"language":3676,"meta":454,"style":454},"FROM caddy:2-builder AS builder\n\nRUN xcaddy build \\\n    --with github.com\u002Fcaddy-dns\u002Fcloudflare\n\nFROM caddy:2-alpine\n\nCOPY --from=builder \u002Fusr\u002Fbin\u002Fcaddy \u002Fusr\u002Fbin\u002Fcaddy\n",[456,3709,3710,3715,3719,3724,3729,3733,3738,3742],{"__ignoreMap":454},[459,3711,3712],{"class":461,"line":462},[459,3713,3714],{"class":476},"FROM caddy:2-builder AS builder\n",[459,3716,3717],{"class":461,"line":469},[459,3718,506],{"emptyLinePlaceholder":505},[459,3720,3721],{"class":461,"line":502},[459,3722,3723],{"class":476},"RUN xcaddy build \\\n",[459,3725,3726],{"class":461,"line":509},[459,3727,3728],{"class":476},"    --with github.com\u002Fcaddy-dns\u002Fcloudflare\n",[459,3730,3731],{"class":461,"line":515},[459,3732,506],{"emptyLinePlaceholder":505},[459,3734,3735],{"class":461,"line":562},[459,3736,3737],{"class":476},"FROM caddy:2-alpine\n",[459,3739,3740],{"class":461,"line":567},[459,3741,506],{"emptyLinePlaceholder":505},[459,3743,3744],{"class":461,"line":573},[459,3745,3746],{"class":476},"COPY --from=builder \u002Fusr\u002Fbin\u002Fcaddy \u002Fusr\u002Fbin\u002Fcaddy\n",[808,3748,3749],{},[811,3750,3751,3752,3755],{},"Modifikasi ",[456,3753,3754],{},"compose.caddy.yml"," untuk menggunakan image dengan modul Cloudflare dan meneruskan token API Cloudflare:",[449,3757,3759],{"className":3674,"code":3758,"language":3676,"meta":454,"style":454},"services:\n  relay:\n    ports: !reset []\n\n  caddy:\n    build:\n      context: .\n      dockerfile: Dockerfile.caddy\n    image: buzz-caddy:cloudflare\n    depends_on:\n      relay:\n        condition: service_healthy\n    environment:\n      BUZZ_DOMAIN: ${BUZZ_DOMAIN:?set BUZZ_DOMAIN}\n      CLOUDFLARE_API_TOKEN: ${CLOUDFLARE_API_TOKEN:?set CLOUDFLARE_API_TOKEN}\n    ports:\n      - \"${CADDY_HTTP_PORT:-80}:80\"\n      - \"${CADDY_HTTPS_PORT:-443}:443\"\n    volumes:\n      - .\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile:ro\n      - buzz-caddy-data:\u002Fdata\n      - buzz-caddy-config:\u002Fconfig\n    restart: unless-stopped\n    networks:\n      - buzz-net\n\nvolumes:\n  buzz-caddy-data:\n    labels:\n      com.buzz.volume: caddy-data\n  buzz-caddy-config:\n    labels:\n      com.buzz.volume: caddy-config\n",[456,3760,3761,3769,3776,3789,3793,3800,3807,3816,3826,3836,3843,3850,3860,3867,3877,3887,3893,3905,3916,3923,3930,3937,3944,3955,3963,3971,3976,3984,3992,4000,4011,4019,4026],{"__ignoreMap":454},[459,3762,3763,3767],{"class":461,"line":462},[459,3764,3766],{"class":3765},"swJcz","services",[459,3768,2306],{"class":483},[459,3770,3771,3774],{"class":461,"line":469},[459,3772,3773],{"class":3765},"  relay",[459,3775,2306],{"class":483},[459,3777,3778,3781,3783,3786],{"class":461,"line":502},[459,3779,3780],{"class":3765},"    ports",[459,3782,892],{"class":483},[459,3784,3785],{"class":1888}," !reset",[459,3787,3788],{"class":483}," []\n",[459,3790,3791],{"class":461,"line":509},[459,3792,506],{"emptyLinePlaceholder":505},[459,3794,3795,3798],{"class":461,"line":515},[459,3796,3797],{"class":3765},"  caddy",[459,3799,2306],{"class":483},[459,3801,3802,3805],{"class":461,"line":562},[459,3803,3804],{"class":3765},"    build",[459,3806,2306],{"class":483},[459,3808,3809,3812,3814],{"class":461,"line":567},[459,3810,3811],{"class":3765},"      context",[459,3813,892],{"class":483},[459,3815,2561],{"class":692},[459,3817,3818,3821,3823],{"class":461,"line":573},[459,3819,3820],{"class":3765},"      dockerfile",[459,3822,892],{"class":483},[459,3824,3825],{"class":476}," Dockerfile.caddy\n",[459,3827,3828,3831,3833],{"class":461,"line":585},[459,3829,3830],{"class":3765},"    image",[459,3832,892],{"class":483},[459,3834,3835],{"class":476}," buzz-caddy:cloudflare\n",[459,3837,3838,3841],{"class":461,"line":590},[459,3839,3840],{"class":3765},"    depends_on",[459,3842,2306],{"class":483},[459,3844,3845,3848],{"class":461,"line":596},[459,3846,3847],{"class":3765},"      relay",[459,3849,2306],{"class":483},[459,3851,3852,3855,3857],{"class":461,"line":618},[459,3853,3854],{"class":3765},"        condition",[459,3856,892],{"class":483},[459,3858,3859],{"class":476}," service_healthy\n",[459,3861,3862,3865],{"class":461,"line":623},[459,3863,3864],{"class":3765},"    environment",[459,3866,2306],{"class":483},[459,3868,3869,3872,3874],{"class":461,"line":629},[459,3870,3871],{"class":3765},"      BUZZ_DOMAIN",[459,3873,892],{"class":483},[459,3875,3876],{"class":476}," ${BUZZ_DOMAIN:?set BUZZ_DOMAIN}\n",[459,3878,3879,3882,3884],{"class":461,"line":638},[459,3880,3881],{"class":3765},"      CLOUDFLARE_API_TOKEN",[459,3883,892],{"class":483},[459,3885,3886],{"class":476}," ${CLOUDFLARE_API_TOKEN:?set CLOUDFLARE_API_TOKEN}\n",[459,3888,3889,3891],{"class":461,"line":643},[459,3890,3780],{"class":3765},[459,3892,2306],{"class":483},[459,3894,3895,3898,3900,3903],{"class":461,"line":649},[459,3896,3897],{"class":483},"      -",[459,3899,522],{"class":483},[459,3901,3902],{"class":476},"${CADDY_HTTP_PORT:-80}:80",[459,3904,2011],{"class":483},[459,3906,3907,3909,3911,3914],{"class":461,"line":3448},[459,3908,3897],{"class":483},[459,3910,522],{"class":483},[459,3912,3913],{"class":476},"${CADDY_HTTPS_PORT:-443}:443",[459,3915,2011],{"class":483},[459,3917,3918,3921],{"class":461,"line":3453},[459,3919,3920],{"class":3765},"    volumes",[459,3922,2306],{"class":483},[459,3924,3925,3927],{"class":461,"line":3468},[459,3926,3897],{"class":483},[459,3928,3929],{"class":476}," .\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile:ro\n",[459,3931,3932,3934],{"class":461,"line":3473},[459,3933,3897],{"class":483},[459,3935,3936],{"class":476}," buzz-caddy-data:\u002Fdata\n",[459,3938,3939,3941],{"class":461,"line":2432},[459,3940,3897],{"class":483},[459,3942,3943],{"class":476}," buzz-caddy-config:\u002Fconfig\n",[459,3945,3947,3950,3952],{"class":461,"line":3946},23,[459,3948,3949],{"class":3765},"    restart",[459,3951,892],{"class":483},[459,3953,3954],{"class":476}," unless-stopped\n",[459,3956,3958,3961],{"class":461,"line":3957},24,[459,3959,3960],{"class":3765},"    networks",[459,3962,2306],{"class":483},[459,3964,3966,3968],{"class":461,"line":3965},25,[459,3967,3897],{"class":483},[459,3969,3970],{"class":476}," buzz-net\n",[459,3972,3974],{"class":461,"line":3973},26,[459,3975,506],{"emptyLinePlaceholder":505},[459,3977,3979,3982],{"class":461,"line":3978},27,[459,3980,3981],{"class":3765},"volumes",[459,3983,2306],{"class":483},[459,3985,3987,3990],{"class":461,"line":3986},28,[459,3988,3989],{"class":3765},"  buzz-caddy-data",[459,3991,2306],{"class":483},[459,3993,3995,3998],{"class":461,"line":3994},29,[459,3996,3997],{"class":3765},"    labels",[459,3999,2306],{"class":483},[459,4001,4003,4006,4008],{"class":461,"line":4002},30,[459,4004,4005],{"class":3765},"      com.buzz.volume",[459,4007,892],{"class":483},[459,4009,4010],{"class":476}," caddy-data\n",[459,4012,4014,4017],{"class":461,"line":4013},31,[459,4015,4016],{"class":3765},"  buzz-caddy-config",[459,4018,2306],{"class":483},[459,4020,4022,4024],{"class":461,"line":4021},32,[459,4023,3997],{"class":3765},[459,4025,2306],{"class":483},[459,4027,4029,4031,4033],{"class":461,"line":4028},33,[459,4030,4005],{"class":3765},[459,4032,892],{"class":483},[459,4034,4035],{"class":476}," caddy-config\n",[444,4037,4039],{"id":4038},"memulai-kontainer-docker","Memulai kontainer Docker",[449,4041,4043],{"className":451,"code":4042,"language":453,"meta":454,"style":454},"docker compose -f compose.yml -f compose.caddy.yml up -d\n\n#Check the Docker status\ndocker compose ps\n",[456,4044,4045,4068,4072,4077],{"__ignoreMap":454},[459,4046,4047,4049,4051,4054,4057,4059,4062,4065],{"class":461,"line":462},[459,4048,632],{"class":472},[459,4050,3483],{"class":476},[459,4052,4053],{"class":476}," -f",[459,4055,4056],{"class":476}," compose.yml",[459,4058,4053],{"class":476},[459,4060,4061],{"class":476}," compose.caddy.yml",[459,4063,4064],{"class":476}," up",[459,4066,4067],{"class":476}," -d\n",[459,4069,4070],{"class":461,"line":469},[459,4071,506],{"emptyLinePlaceholder":505},[459,4073,4074],{"class":461,"line":502},[459,4075,4076],{"class":465},"#Check the Docker status\n",[459,4078,4079,4081,4083],{"class":461,"line":509},[459,4080,632],{"class":472},[459,4082,3483],{"class":476},[459,4084,844],{"class":476},[825,4086],{"src":4087,"alt":4088,"style":4089},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fdocker-compose-ps-status-terminal.webp","Jendela terminal yang menampilkan kontainer yang berjalan untuk layanan Buzz melalui docker compose ps","max-width: 700px; width: 100%; height: auto;",[429,4091,4092,4093,4096],{},"Buka browser web Anda dan navigasikan ke ",[456,4094,4095],{},"http:\u002F\u002Fbuzz.pafor.me"," untuk memverifikasi bahwa relay berjalan.",[825,4098],{"src":4099,"alt":4100,"style":4101},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-relay-running-browser-verification.webp","Verifikasi browser yang menunjukkan respons sukses dari relay Buzz Block yang di-self-host","max-width: 500px; width: 100%; height: auto;",[439,4103,4105],{"id":4104},"langkah-5-cadangkan-back-up-sejak-hari-pertama","Langkah 5: Cadangkan (Back up) sejak hari pertama",[449,4107,4109],{"className":451,"code":4108,"language":453,"meta":454,"style":454},"mkdir -p \u002Fbuzz_backups\ncrontab -e\n",[456,4110,4111,4122],{"__ignoreMap":454},[459,4112,4113,4116,4119],{"class":461,"line":462},[459,4114,4115],{"class":472},"mkdir",[459,4117,4118],{"class":476}," -p",[459,4120,4121],{"class":476}," \u002Fbuzz_backups\n",[459,4123,4124,4127],{"class":461,"line":469},[459,4125,4126],{"class":472},"crontab",[459,4128,2488],{"class":476},[429,4130,4131],{},"Tambahkan tugas cron dump database harian:",[449,4133,4136],{"className":4134,"code":4135,"language":2055},[2053],"0 3 * * * cd \u002Fhome\u002F\u003Cuser>\u002Fbuzz\u002Fdeploy\u002Fcompose && docker compose exec -T postgres pg_dump -U buzz buzz > \u002Fbuzz_backups\u002Fbuzz-$(date +\\%Y\\%m\\%d).sql\n",[456,4137,4135],{"__ignoreMap":454},[429,4139,4140],{},"Catatan: Perlakukan BUZZ_RELAY_PRIVATE_KEY sebagai permanen. Peristiwa yang ditandatangani olehnya akan gagal verifikasi jika kuncinya berubah; database yang dipulihkan yang dipasangkan dengan kunci baru tidak akan dianggap sebagai relay yang sama.",[2464,4142,4144],{"id":4143},"menyiapkan-klien-desktop-buzz-dan-identitas-nostr","Menyiapkan Klien Desktop Buzz dan Identitas Nostr",[429,4146,4147,4148,4152],{},"Unduh aplikasi desktop Buzz dari ",[669,4149,4150],{"href":4150,"rel":4151},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Freleases",[1156]," dan jalankan. Isi detail profil hingga Anda mencapai halaman \"Join or create a community\".",[429,4154,4155],{},[825,4156],{"alt":4157,"src":4158},"Layar pengaturan awal Klien Desktop Buzz untuk bergabung atau membuat komunitas","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-setup-community.webp",[429,4160,4161],{},"Klik \"Join a community\" dan salin kunci publik Anda.",[429,4163,4164],{},[825,4165],{"alt":4166,"src":4167},"Tampilan klien Buzz yang menunjukkan identitas kunci publik sebelum bergabung dengan komunitas","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-join-community-public-key.webp",[429,4169,4170,4171,4174],{},"Jalankan perintah berikut di ",[814,4172,4173],{},"VPS"," untuk menambahkan diri Anda sebagai anggota pertama:",[449,4176,4178],{"className":451,"code":4177,"language":453,"meta":454,"style":454},"docker compose exec relay buzz-admin add-member --pubkey npub1yourkeyhere\n",[456,4179,4180],{"__ignoreMap":454},[459,4181,4182,4184,4186,4188,4191,4194,4197,4200],{"class":461,"line":462},[459,4183,632],{"class":472},[459,4185,3483],{"class":476},[459,4187,955],{"class":476},[459,4189,4190],{"class":476}," relay",[459,4192,4193],{"class":476}," buzz-admin",[459,4195,4196],{"class":476}," add-member",[459,4198,4199],{"class":476}," --pubkey",[459,4201,4202],{"class":476}," npub1yourkeyhere\n",[429,4204,3621,4205,4208],{},[456,4206,4207],{},"wss:\u002F\u002Fbuzz.pafor.me"," as the community URL and click \"Next\".",[429,4210,4211],{},[825,4212],{"alt":4213,"src":4214},"Memasukkan URL relay komunitas yang di-self-host di aplikasi desktop Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-input-community-url.webp",[429,4216,4217],{},"Masukkan nama dan klik tombol Next.",[429,4219,4220],{},[825,4221],{"alt":4222,"src":4223},"Layar konfigurasi profil di aplikasi Buzz untuk memasukkan nama tampilan","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-profile-name-input.webp",[439,4225,4227],{"id":4226},"saluran-channels-dan-agen","Saluran (Channels) dan Agen",[429,4229,4230],{},"Saluran adalah grup tugas atau grup proyek. Buat saluran per tugas atau proyek dan masukkan manusia serta agen ke dalamnya.",[429,4232,4233],{},"Semua hal dalam saluran dibagikan secara otomatis, menghilangkan kebutuhan untuk memberikan pengarahan kepada setiap anggota secara individual. Setiap agen dapat disebut menggunakan @ dan membaca pesan yang relevan. Selain itu, agen dapat me-@mention satu sama lain.",[429,4235,4236],{},"Mari kirim DM ke agen yang telah dikonfigurasi sebelumnya",[429,4238,4239],{},[825,4240],{"alt":4241,"src":4242},"Mengirim pesan langsung ke agen AI di klien desktop kolaboratif Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-dm-agent.webp",[429,4244,4245],{},"Mari buat saluran dan tambahkan beberapa agen ke dalamnya",[429,4247,4248],{},[825,4249],{"alt":4250,"src":4251},"Membuat saluran tugas atau proyek baru di dalam aplikasi desktop Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-create-channel-dialog.webp",[429,4253,4254],{},[825,4255],{"alt":4256,"src":4257},"Menambahkan anggota manusia dan agen AI ke saluran yang baru dibuat","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-add-agents-to-channel.webp",[429,4259,4260],{},[825,4261],{"alt":4262,"src":4263},"Tampilan saluran aktif yang menampilkan riwayat obrolan terkonsolidasi dan tugas proyek","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-channel-view.webp",[825,4265],{"src":4266,"alt":4267,"style":4268},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-channel-active-agents.webp","Tampilan detail agen AI aktif yang terintegrasi ke dalam saluran proyek kolaboratif","max-width: 367px; width: 100%; height: auto;",[439,4270,4272],{"id":4271},"mengaktifkan-runtime-agen","Mengaktifkan Runtime Agen",[429,4274,4275,4276,4279,4280,4283],{},"Runtime default mengandalkan deteksi otomatis yang mencari biner peluncur (misalnya ",[456,4277,4278],{},"hermes-acp",") di direktori standar seperti ",[456,4281,4282],{},"~\u002F.local\u002Fbin",". Jika suatu alat diinstal di lokasi non-standar, Buzz tidak dapat menyelesaikannya.",[429,4285,4286,4287,4290],{},"Untuk Kimi Code, ID agennya adalah kimi, dan Buzz mencari binernya di ",[456,4288,4289],{},"~\u002F.local\u002Fbin\u002Fkimi",". Tautan simbolis (symbolic link) dapat melakukannya:",[449,4292,4295],{"className":4293,"code":4294,"language":2055},[2053],"ln -s kimi-cli \u002FUsers\u002F\u003Cuser>\u002F.local\u002Fbin\u002Fkimi\n",[456,4296,4294],{"__ignoreMap":454},[429,4298,4299],{},"Kimi Code sekarang muncul di bawah runtime Agen.",[429,4301,4302],{},[825,4303],{"alt":4304,"src":4305},"Pengaturan aplikasi Buzz yang menampilkan runtime Agen AI yang dikonfigurasi termasuk Kimi","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-agent-runtimes-list.webp",[439,4307,4309],{"id":4308},"proyek-dan-repositori","Proyek dan Repositori",[429,4311,4312,4313,4316],{},"Aktifkan fitur '",[814,4314,4315],{},"Projects","' di Settings → Experiments terlebih dahulu:",[429,4318,4319],{},[825,4320],{"alt":4321,"src":4322},"Mengaktifkan fitur eksperimental Projects di tab pengaturan Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-experiments-projects.webp",[429,4324,4325,4326,4329],{},"Saat ini, proyek harus dibuat menggunakan ",[456,4327,4328],{},"buzz-cli"," (meskipun pembuatan proyek langsung dari UI direnkanakan untuk rilis mendatang).",[444,4331,4333],{"id":4332},"menginstal-buzz-cli","Menginstal buzz-cli",[429,4335,4336,4337,4339,4340,892],{},"Jalankan perintah berikut untuk menginstal ",[456,4338,4328],{}," di ",[814,4341,4173],{},[449,4343,4345],{"className":451,"code":4344,"language":453,"meta":454,"style":454},"sudo apt install cargo\ncd ~\u002Fbuzz\ncargo install --path crates\u002Fbuzz-cli\necho 'export PATH=\"$HOME\u002F.cargo\u002Fbin:$PATH\"' >> ~\u002F.bashrc && source ~\u002F.bashrc\n",[456,4346,4347,4358,4365,4378],{"__ignoreMap":454},[459,4348,4349,4351,4353,4355],{"class":461,"line":462},[459,4350,576],{"class":472},[459,4352,579],{"class":476},[459,4354,603],{"class":476},[459,4356,4357],{"class":476}," cargo\n",[459,4359,4360,4362],{"class":461,"line":469},[459,4361,2540],{"class":518},[459,4363,4364],{"class":476}," ~\u002Fbuzz\n",[459,4366,4367,4370,4372,4375],{"class":461,"line":502},[459,4368,4369],{"class":472},"cargo",[459,4371,603],{"class":476},[459,4373,4374],{"class":476}," --path",[459,4376,4377],{"class":476}," crates\u002Fbuzz-cli\n",[459,4379,4380,4382,4385,4388,4390,4393,4396,4399,4402],{"class":461,"line":509},[459,4381,519],{"class":518},[459,4383,4384],{"class":483}," '",[459,4386,4387],{"class":476},"export PATH=\"$HOME\u002F.cargo\u002Fbin:$PATH\"",[459,4389,972],{"class":483},[459,4391,4392],{"class":483}," >>",[459,4394,4395],{"class":476}," ~\u002F.bashrc",[459,4397,4398],{"class":483}," &&",[459,4400,4401],{"class":518}," source",[459,4403,4404],{"class":476}," ~\u002F.bashrc\n",[429,4406,4407,4408,1541,4411,4413,4414,4416],{},"Hasilkan sepasang kunci privat dan publik menggunakan ",[669,4409,3579],{"href":4410},"\u002Fid\u002Ftools\u002Fnostr-key-generator",[456,4412,4328],{},". Pasangan ini adalah identitas ",[456,4415,4328],{}," di relay Nostr.",[449,4418,4420],{"className":451,"code":4419,"language":453,"meta":454,"style":454},"docker run --rm --entrypoint \u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-admin ghcr.io\u002Fblock\u002Fbuzz:main generate-key\n\n# Use the generated Public Key\ndocker compose exec relay buzz-admin add-member --pubkey generated_Public_key\n",[456,4421,4422,4443,4447,4452],{"__ignoreMap":454},[459,4423,4424,4426,4428,4431,4434,4437,4440],{"class":461,"line":462},[459,4425,632],{"class":472},[459,4427,712],{"class":476},[459,4429,4430],{"class":476}," --rm",[459,4432,4433],{"class":476}," --entrypoint",[459,4435,4436],{"class":476}," \u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-admin",[459,4438,4439],{"class":476}," ghcr.io\u002Fblock\u002Fbuzz:main",[459,4441,4442],{"class":476}," generate-key\n",[459,4444,4445],{"class":461,"line":469},[459,4446,506],{"emptyLinePlaceholder":505},[459,4448,4449],{"class":461,"line":502},[459,4450,4451],{"class":465},"# Use the generated Public Key\n",[459,4453,4454,4456,4458,4460,4462,4464,4466,4468],{"class":461,"line":509},[459,4455,632],{"class":472},[459,4457,3483],{"class":476},[459,4459,955],{"class":476},[459,4461,4190],{"class":476},[459,4463,4193],{"class":476},[459,4465,4196],{"class":476},[459,4467,4199],{"class":476},[459,4469,4470],{"class":476}," generated_Public_key\n",[429,4472,4473],{},"Mengonfigurasi CLI:",[449,4475,4477],{"className":451,"code":4476,"language":453,"meta":454,"style":454},"# Copy the Secret key as the BUZZ_PRIVATE_KEY\necho 'export BUZZ_PRIVATE_KEY=\"nsec1...\"'  >> \u002Fhome\u002F\u003Cuser>\u002F.bashrc\n\necho 'export BUZZ_RELAY_URL=\"wss:\u002F\u002Fbuzz.pafor.me\"'  >> \u002Fhome\u002F\u003Cuser>\u002F.bashrc\n",[456,4478,4479,4484,4516,4520],{"__ignoreMap":454},[459,4480,4481],{"class":461,"line":462},[459,4482,4483],{"class":465},"# Copy the Secret key as the BUZZ_PRIVATE_KEY\n",[459,4485,4486,4488,4490,4493,4495,4498,4501,4504,4507,4510,4513],{"class":461,"line":469},[459,4487,519],{"class":518},[459,4489,4384],{"class":483},[459,4491,4492],{"class":476},"export BUZZ_PRIVATE_KEY=\"nsec1...\"",[459,4494,972],{"class":483},[459,4496,4497],{"class":483},"  >>",[459,4499,4500],{"class":476}," \u002Fhome\u002F",[459,4502,4503],{"class":483},"\u003C",[459,4505,4506],{"class":476},"use",[459,4508,4509],{"class":718},"r",[459,4511,4512],{"class":483},">",[459,4514,4515],{"class":476},"\u002F.bashrc\n",[459,4517,4518],{"class":461,"line":502},[459,4519,506],{"emptyLinePlaceholder":505},[459,4521,4522,4524,4526,4529,4531,4533,4535,4537,4539,4541,4543],{"class":461,"line":509},[459,4523,519],{"class":518},[459,4525,4384],{"class":483},[459,4527,4528],{"class":476},"export BUZZ_RELAY_URL=\"wss:\u002F\u002Fbuzz.pafor.me\"",[459,4530,972],{"class":483},[459,4532,4497],{"class":483},[459,4534,4500],{"class":476},[459,4536,4503],{"class":483},[459,4538,4506],{"class":476},[459,4540,4509],{"class":718},[459,4542,4512],{"class":483},[459,4544,4515],{"class":476},[429,4546,4547,4548,4550],{},"Jalankan perintah berikut untuk memverifikasi bahwa ",[456,4549,4328],{}," dikonfigurasi dengan benar:",[449,4552,4554],{"className":451,"code":4553,"language":453,"meta":454,"style":454},"buzz channels list\n",[456,4555,4556],{"__ignoreMap":454},[459,4557,4558,4561,4564],{"class":461,"line":462},[459,4559,4560],{"class":472},"buzz",[459,4562,4563],{"class":476}," channels",[459,4565,4566],{"class":476}," list\n",[429,4568,4569],{},[825,4570],{"alt":4571,"src":4572},"Eksekusi perintah terminal yang memverifikasi konfigurasi buzz-cli dengan mencantumkan saluran aktif","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-cli-channels-list-terminal.webp",[444,4574,4576],{"id":4575},"membuat-proyek-dengan-buzz-cli","Membuat Proyek dengan buzz-cli",[449,4578,4580],{"className":451,"code":4579,"language":453,"meta":454,"style":454},"# --channel refers to the UUID of the channel\nbuzz repos create --id TestKOA --name 'Display Name' --channel \"bd92b3d1-8fac-441c-a9ac-2b2f3aac5c5b\"\n",[456,4581,4582,4587],{"__ignoreMap":454},[459,4583,4584],{"class":461,"line":462},[459,4585,4586],{"class":465},"# --channel refers to the UUID of the channel\n",[459,4588,4589,4591,4594,4597,4600,4603,4606,4608,4611,4613,4616,4618,4621],{"class":461,"line":469},[459,4590,4560],{"class":472},[459,4592,4593],{"class":476}," repos",[459,4595,4596],{"class":476}," create",[459,4598,4599],{"class":476}," --id",[459,4601,4602],{"class":476}," TestKOA",[459,4604,4605],{"class":476}," --name",[459,4607,4384],{"class":483},[459,4609,4610],{"class":476},"Display Name",[459,4612,972],{"class":483},[459,4614,4615],{"class":476}," --channel",[459,4617,522],{"class":483},[459,4619,4620],{"class":476},"bd92b3d1-8fac-441c-a9ac-2b2f3aac5c5b",[459,4622,2011],{"class":483},[429,4624,4625,4626,4628],{},"Proyek hanya dapat dihapus oleh pemiliknya. Karena proyek \"Display Name\" dibuat oleh ",[456,4627,4328],{}," yang tidak memiliki perintah penghapusan, proyek tersebut tidak dapat dihapus dengan cara ini.",[429,4630,4631],{},"Periksa kembali aplikasi desktop Buzz untuk memverifikasi bahwa proyek telah dibuat.",[429,4633,4634],{},[825,4635],{"alt":4636,"src":4637},"Tampilan proyek aplikasi desktop Buzz yang mengonfirmasi keberhasilan pembuatan proyek","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-project-view.webp",[429,4639,4640],{},"Setelah proyek tersedia di Projects, proyek tambahan dapat ditambahkan menggunakan tombol \"+\" di sudut kanan atas.",[429,4642,4643],{},[825,4644],{"alt":4645,"src":4646},"Menambahkan proyek pengembang baru menggunakan ikon plus di klien desktop Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-add-project-button.webp",[444,4648,4650],{"id":4649},"menghubungkan-repositori-git-yang-ada","Menghubungkan Repositori Git yang Ada",[429,4652,4653,4654,4657,4658,4661,4662,4667],{},"Instal ",[456,4655,4656],{},"git-credential-nostr"," pada mesin tempat repositori git berada. Ini memerlukan ",[814,4659,4660],{},"git 2.46+"," dan toolchain Rust. Silakan rujuk ",[669,4663,4666],{"href":4664,"rel":4665},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Ftree\u002Fmain\u002Fcrates\u002Fgit-credential-nostr",[1156],"Readme"," ini:",[449,4669,4671],{"className":451,"code":4670,"language":453,"meta":454,"style":454},"cargo install --path crates\u002Fgit-credential-nostr\n",[456,4672,4673],{"__ignoreMap":454},[459,4674,4675,4677,4679,4681],{"class":461,"line":462},[459,4676,4369],{"class":472},[459,4678,603],{"class":476},[459,4680,4374],{"class":476},[459,4682,4683],{"class":476}," crates\u002Fgit-credential-nostr\n",[429,4685,4686,4687,4689],{},"Siapkan ",[456,4688,4656],{}," untuk otorisasi relay Buzz:",[449,4691,4693],{"className":451,"code":4692,"language":453,"meta":454,"style":454},"# 1. Register the helper and enable per-path credentials.\ngit config --global credential.helper nostr\ngit config --global credential.useHttpPath true\n\n# 2. Store your nsec in a key file (must be 0600). Replace \"nsec1...\" with your private key\nmkdir -p ~\u002F.nostr\necho \"nsec1...\" > ~\u002F.nostr\u002Fkey && chmod 600 ~\u002F.nostr\u002Fkey\ngit config --global nostr.keyfile ~\u002F.nostr\u002Fkey\n",[456,4694,4695,4700,4716,4729,4733,4738,4747,4774],{"__ignoreMap":454},[459,4696,4697],{"class":461,"line":462},[459,4698,4699],{"class":465},"# 1. Register the helper and enable per-path credentials.\n",[459,4701,4702,4704,4707,4710,4713],{"class":461,"line":469},[459,4703,3500],{"class":472},[459,4705,4706],{"class":476}," config",[459,4708,4709],{"class":476}," --global",[459,4711,4712],{"class":476}," credential.helper",[459,4714,4715],{"class":476}," nostr\n",[459,4717,4718,4720,4722,4724,4727],{"class":461,"line":502},[459,4719,3500],{"class":472},[459,4721,4706],{"class":476},[459,4723,4709],{"class":476},[459,4725,4726],{"class":476}," credential.useHttpPath",[459,4728,2169],{"class":483},[459,4730,4731],{"class":461,"line":509},[459,4732,506],{"emptyLinePlaceholder":505},[459,4734,4735],{"class":461,"line":515},[459,4736,4737],{"class":465},"# 2. Store your nsec in a key file (must be 0600). Replace \"nsec1...\" with your private key\n",[459,4739,4740,4742,4744],{"class":461,"line":562},[459,4741,4115],{"class":472},[459,4743,4118],{"class":476},[459,4745,4746],{"class":476}," ~\u002F.nostr\n",[459,4748,4749,4751,4753,4756,4758,4760,4763,4765,4768,4771],{"class":461,"line":567},[459,4750,519],{"class":518},[459,4752,522],{"class":483},[459,4754,4755],{"class":476},"nsec1...",[459,4757,543],{"class":483},[459,4759,556],{"class":483},[459,4761,4762],{"class":476}," ~\u002F.nostr\u002Fkey",[459,4764,4398],{"class":483},[459,4766,4767],{"class":472}," chmod",[459,4769,4770],{"class":692}," 600",[459,4772,4773],{"class":476}," ~\u002F.nostr\u002Fkey\n",[459,4775,4776,4778,4780,4782,4785],{"class":461,"line":573},[459,4777,3500],{"class":472},[459,4779,4706],{"class":476},[459,4781,4709],{"class":476},[459,4783,4784],{"class":476}," nostr.keyfile",[459,4786,4773],{"class":476},[429,4788,4789],{},"Crea un repositorio en el relay de Buzz:",[449,4791,4794],{"className":4792,"code":4793,"language":2055},[2053],"buzz repos create --id koa-email-routing --name \"KOA Email Routing\" --clone \"https:\u002F\u002Fbuzz.pafor.me\u002Fgit\u002F\u003Cpub_key>\u002Fkoa-email-routing\" --nostr-relay \"wss:\u002F\u002Fbuzz.pafor.me\"\n",[456,4795,4793],{"__ignoreMap":454},[429,4797,4798,4799,4802,4803,4806],{},"Pada ",[456,4800,4801],{},"git push"," pertama Anda, Anda akan menemui kesalahan ",[456,4804,4805],{},"remote: missing Authorization header",". Untuk mengatasi ini, Anda perlu mengikat ID repositori ke saluran Buzz, karena keanggotaan saluran menentukan izin menulis Git (ACLs):",[449,4808,4810],{"className":451,"code":4809,"language":453,"meta":454,"style":454},"buzz repos bind --id koa-email-routing --channel \u003CCHANNEL_UUID>\n\n# push the code again\ngit push\n",[456,4811,4812,4840,4844,4849],{"__ignoreMap":454},[459,4813,4814,4816,4818,4821,4823,4826,4828,4831,4834,4837],{"class":461,"line":462},[459,4815,4560],{"class":472},[459,4817,4593],{"class":476},[459,4819,4820],{"class":476}," bind",[459,4822,4599],{"class":476},[459,4824,4825],{"class":476}," koa-email-routing",[459,4827,4615],{"class":476},[459,4829,4830],{"class":483}," \u003C",[459,4832,4833],{"class":476},"CHANNEL_UUI",[459,4835,4836],{"class":718},"D",[459,4838,4839],{"class":483},">\n",[459,4841,4842],{"class":461,"line":469},[459,4843,506],{"emptyLinePlaceholder":505},[459,4845,4846],{"class":461,"line":502},[459,4847,4848],{"class":465},"# push the code again\n",[459,4850,4851,4853],{"class":461,"line":509},[459,4852,3500],{"class":472},[459,4854,4855],{"class":476}," push\n",[429,4857,4858,4859,4861],{},"Memeriksa proyek di aplikasi desktop Buzz menunjukkan hal berikut, karena aplikasi memerlukan ",[814,4860,4660],{}," — meluncurkan aplikasi secara langsung mungkin mendeteksi versi Git yang lebih lama:",[429,4863,4864],{},[825,4865],{"alt":4866,"src":4867},"Klien Buzz menampilkan kesalahan pemuatan Git karena versi Git lokal yang kedaluwarsa di bawah 2.46","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-git-version-error.webp",[429,4869,4870,4871,4874,4875,4880],{},"Ekspor PATH via ",[456,4872,4873],{},"launchctl setenv PATH \"\u002Fopt\u002Fhomebrew\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin:\u002Fusr\u002Fsbin:\u002Fsbin\""," di profil shell dan luncurkan aplikasi Buzz dari shell. Rujuk ke ",[669,4876,4879],{"href":4877,"rel":4878},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Fissues\u002F5348",[1156],"issue"," ini.",[449,4882,4884],{"className":451,"code":4883,"language":453,"meta":454,"style":454},"open -a Buzz\n",[456,4885,4886],{"__ignoreMap":454},[459,4887,4888,4891,4894],{"class":461,"line":462},[459,4889,4890],{"class":472},"open",[459,4892,4893],{"class":476}," -a",[459,4895,4896],{"class":476}," Buzz\n",[429,4898,4899],{},"Periksa kembali Projects di aplikasi Buzz, detail repositori sekarang telah dimuat.",[429,4901,4902],{},[825,4903],{"alt":4904,"src":4905},"Antarmuka desktop Buzz dengan detail repositório Git dan log komit yang berhasil dimuat","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-repository-details-loaded.webp",[2464,4907,4909],{"id":4908},"menyinkronkan-agen-ai-dengan-aplikasi-seluler-buzz-via-kode-qr","Menyinkronkan Agen AI dengan Aplikasi Seluler Buzz via Kode QR",[429,4911,4912,4913,4916],{},"Penyandingan aplikasi seluler Buzz hanya menerima protokol HTTPS dan ",[456,4914,4915],{},"buzz-pair-relay"," tidak dimulai secara default di VPS.",[449,4918,4920],{"className":451,"code":4919,"language":453,"meta":454,"style":454},"cd ~\u002Fbuzz\ncargo install --path crates\u002Fbuzz-pair-relay\n",[456,4921,4922,4928],{"__ignoreMap":454},[459,4923,4924,4926],{"class":461,"line":462},[459,4925,2540],{"class":518},[459,4927,4364],{"class":476},[459,4929,4930,4932,4934,4936],{"class":461,"line":469},[459,4931,4369],{"class":472},[459,4933,603],{"class":476},[459,4935,4374],{"class":476},[459,4937,4938],{"class":476}," crates\u002Fbuzz-pair-relay\n",[429,4940,4941,4942,4945,4946,4948],{},"Add the following to ",[456,4943,4944],{},"compose.yml"," to start the ",[456,4947,4915],{}," service:",[449,4950,4952],{"className":3674,"code":4951,"language":3676,"meta":454,"style":454},"  pair:\n    image: ${BUZZ_IMAGE:-ghcr.io\u002Fblock\u002Fbuzz:main}\n    entrypoint: [\"\u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-pair-relay\"]\n    environment:\n      BUZZ_PAIR_RELAY_BIND_ADDR: 0.0.0.0:5000\n    ports:\n      - \"${BUZZ_PAIR_RELAY_PORT:-5000}:5000\"\n    restart: unless-stopped\n    networks:\n      [buzz-net]\n",[456,4953,4954,4961,4970,4990,4996,5006,5012,5023,5031,5037],{"__ignoreMap":454},[459,4955,4956,4959],{"class":461,"line":462},[459,4957,4958],{"class":3765},"  pair",[459,4960,2306],{"class":483},[459,4962,4963,4965,4967],{"class":461,"line":469},[459,4964,3830],{"class":3765},[459,4966,892],{"class":483},[459,4968,4969],{"class":476}," ${BUZZ_IMAGE:-ghcr.io\u002Fblock\u002Fbuzz:main}\n",[459,4971,4972,4975,4977,4980,4982,4985,4987],{"class":461,"line":502},[459,4973,4974],{"class":3765},"    entrypoint",[459,4976,892],{"class":483},[459,4978,4979],{"class":483}," [",[459,4981,543],{"class":483},[459,4983,4984],{"class":476},"\u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-pair-relay",[459,4986,543],{"class":483},[459,4988,4989],{"class":483},"]\n",[459,4991,4992,4994],{"class":461,"line":509},[459,4993,3864],{"class":3765},[459,4995,2306],{"class":483},[459,4997,4998,5001,5003],{"class":461,"line":515},[459,4999,5000],{"class":3765},"      BUZZ_PAIR_RELAY_BIND_ADDR",[459,5002,892],{"class":483},[459,5004,5005],{"class":476}," 0.0.0.0:5000\n",[459,5007,5008,5010],{"class":461,"line":562},[459,5009,3780],{"class":3765},[459,5011,2306],{"class":483},[459,5013,5014,5016,5018,5021],{"class":461,"line":567},[459,5015,3897],{"class":483},[459,5017,522],{"class":483},[459,5019,5020],{"class":476},"${BUZZ_PAIR_RELAY_PORT:-5000}:5000",[459,5022,2011],{"class":483},[459,5024,5025,5027,5029],{"class":461,"line":573},[459,5026,3949],{"class":3765},[459,5028,892],{"class":483},[459,5030,3954],{"class":476},[459,5032,5033,5035],{"class":461,"line":585},[459,5034,3960],{"class":3765},[459,5036,2306],{"class":483},[459,5038,5039,5042,5045],{"class":461,"line":590},[459,5040,5041],{"class":483},"      [",[459,5043,5044],{"class":476},"buzz-net",[459,5046,4989],{"class":483},[429,5048,3621,5049,917,5052,5055,5056,892],{},[456,5050,5051],{},"BUZZ_PAIRING_RELAY_URL",[456,5053,5054],{},"BUZZ_PAIR_RELAY_PORT"," ke file ",[456,5057,3540],{},[449,5059,5062],{"className":5060,"code":5061,"language":2055},[2053],"BUZZ_PAIRING_RELAY_URL=wss:\u002F\u002Fbuzz.pafor.me\u002Fpair\nBUZZ_PAIR_RELAY_PORT=5000\n",[456,5063,5061],{"__ignoreMap":454},[429,5065,5066,5067,5070],{},"Buka bagian '",[814,5068,5069],{},"Mobile","' di Pengaturan desktop Buzz:",[429,5072,5073],{},[825,5074],{"alt":5075,"src":5076},"Dialog pengaturan di aplikasi Buzz yang menampilkan tab konfigurasi perangkat seluler","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-mobile-tab.webp",[429,5078,5079],{},"Klik \"Start pairing\" — kode QR akan dihasilkan; pindai kode QR ini dengan aplikasi Buzz di perangkat seluler. Pendaftaran akan disandingkan setelah Anda mengklik \"Code Match\".",[429,5081,5082],{},[825,5083],{"alt":5084,"src":5085},"Menghasilkan kode QR penyandingan aman di klien desktop untuk sinkronisasi seluler Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-pairing-qr-code.webp",[429,5087,5088],{},"Agen di aplikasi seluler Buzz hanya tersedia jika mereka berjalan di aplikasi desktop Buzz. Mesin desktop harus tetap menyala agar agen dapat bekerja.",[429,5090,5091],{},[825,5092],{"alt":5093,"src":5094},"Antarmuka aplikasi seluler Buzz yang menampilkan agen pendamping AI aktif yang disinkronkan","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-mobile-app-active-agents.webp",[2464,5096,5098],{"id":5097},"pemikiran-akhir","Pemikiran Akhir",[429,5100,5101],{},"Meskipun Buzz masih terlalu dini untuk lingkungan produksi skala besar dengan beberapa bug dan batasan antarmuka pengguna (UI), ini adalah pengalaman yang menarik bagi tim kecil dan pengembang solo. Buzz menawarkan pratinjau tentang bagaimana rasanya ruang kerja kolaboratif yang mengutamakan AI.",[2464,5103,5104],{"id":2345},"Referensi",[808,5106,5107,5114,5121,5128],{},[811,5108,5109],{},[669,5110,5113],{"href":5111,"rel":5112},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz",[1156],"Buzz releases",[811,5115,5116],{},[669,5117,5120],{"href":5118,"rel":5119},"https:\u002F\u002Fblock.xyz\u002Finside\u002Fintroducing-buzz-where-humans-and-agents-work-together",[1156],"Introducing Buzz",[811,5122,5123],{},[669,5124,5127],{"href":5125,"rel":5126},"https:\u002F\u002Fwww.hostinger.com\u002Ftutorials\u002Fwhat-is-buzz",[1156],"What is buzz",[811,5129,5130],{},[669,5131,5134],{"href":5132,"rel":5133},"https:\u002F\u002Fmiget.com\u002Fblog\u002Fhow-to-self-host-buzz",[1156],"How to self-host Buzz (Miget)",[2371,5136,5137],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":454,"searchDepth":469,"depth":502,"links":5139},[5140,5141,5142,5156,5165,5166,5167],{"id":3056,"depth":469,"text":3057},{"id":3101,"depth":469,"text":3102},{"id":3149,"depth":469,"text":3150,"children":5143},[5144,5145,5149,5150,5151,5155],{"id":3153,"depth":502,"text":3154},{"id":3180,"depth":502,"text":3181,"children":5146},[5147,5148],{"id":3184,"depth":509,"text":3185},{"id":3281,"depth":509,"text":3282},{"id":3299,"depth":502,"text":3300},{"id":3489,"depth":502,"text":3490},{"id":3639,"depth":502,"text":3640,"children":5152},[5153,5154],{"id":3643,"depth":509,"text":3644},{"id":4038,"depth":509,"text":4039},{"id":4104,"depth":502,"text":4105},{"id":4143,"depth":469,"text":4144,"children":5157},[5158,5159,5160],{"id":4226,"depth":502,"text":4227},{"id":4271,"depth":502,"text":4272},{"id":4308,"depth":502,"text":4309,"children":5161},[5162,5163,5164],{"id":4332,"depth":509,"text":4333},{"id":4575,"depth":509,"text":4576},{"id":4649,"depth":509,"text":4650},{"id":4908,"depth":469,"text":4909},{"id":5097,"depth":469,"text":5098},{"id":2345,"depth":469,"text":5104},[5169,2417,4560],"collaboration","2026-09-08","Pelajari cara self-host relay Buzz Block pada Linux VPS di balik Cloudflare. Kelola ruang kerja berbasis Nostr tempat kolaborasi manusia dan agen AI.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002FID-Self-Hosting-Buzz-As-The-Workspace-Where-AI-Agents-Become-Colleagues.webp","Kartu teknologi premium 16:9 dengan aksen biru tua dan oranye yang mengilustrasikan cara self-host relay Buzz Block pada Ubuntu VPS, menampilkan panel bergaya glassmorphism bersih dengan tipografi terpusat.",{"schemaOrg":5175,"robots":2430,"sitemap":5195},[5176,5177],{"@type":3024,"headline":3036,"description":5171,"image":5172},{"@type":2426,"name":3036,"description":5171,"image":5172,"step":5178},[5179,5183,5186,5189,5192],{"@type":5180,"name":5181,"text":5182},"HowToStep","Langkah 1: Pengaturan Cloudflare","Buat Token API Cloudflare dan konfigurasikan pengaturan DNS.",{"@type":5180,"name":5184,"text":5185},"Langkah 2: Instal Docker","Siapkan dan instal Docker Engine di VPS Ubuntu.",{"@type":5180,"name":5187,"text":5188},"Langkah 3: Kloning dan Konfigurasi","Kloning repositori dan konfigurasikan variabel compose.",{"@type":5180,"name":5190,"text":5191},"Langkah 4: Integrasi Caddy","Bangun Caddy kustom dengan modul tantangan DNS Cloudflare.",{"@type":5180,"name":5193,"text":5194},"Langkah 5: Cadangan Otomatis","Konfigurasikan cron job untuk mencadangkan PostgreSQL secara otomatis.",{"lastmod":2440},{"title":5197,"description":5171,"ogTitle":3036,"ogDescription":5171,"twitterTitle":3036,"twitterDescription":5171},"Cara Install dan Self-Host Relay Buzz Block di VPS Ubuntu","id\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",[5200,2436,3052,2438,2439],"Nostr","lAxLGSDiA8d43UunUr_JbjVjtCsvGEe0ttXN_h25Swk",[5203,5204,5984],{"id":3035,"title":3036,"author":454,"body":3037,"category":5168,"date":5170,"description":5171,"extension":2420,"image":5172,"imageAlt":5173,"isPublished":505,"meta":5174,"minRead":643,"navigation":505,"path":383,"seo":5196,"stem":5198,"tags":5199,"updatedAt":424,"__hash__":5201},{"id":5205,"title":5206,"author":424,"body":5207,"category":5967,"date":5969,"description":5970,"extension":2420,"image":5971,"imageAlt":5972,"isPublished":505,"meta":5973,"minRead":567,"navigation":505,"path":415,"seo":5978,"stem":5979,"tags":5980,"updatedAt":424,"__hash__":5983},"article\u002Fid\u002Farticle\u002Fuse-cloudflare-as-ai-memory.md","Membangun Sistem Memori AI Persisten di Cloudflare",{"type":426,"value":5208,"toc":5949},[5209,5213,5216,5219,5223,5226,5240,5244,5251,5265,5268,5271,5315,5319,5401,5405,5430,5527,5538,5542,5547,5589,5612,5616,5621,5688,5693,5697,5729,5735,5773,5777,5809,5813,5821,5825,5855,5859,5899,5901,5904,5907,5910,5912,5946],[2464,5210,5212],{"id":5211},"pentingnya-memori-ai-persisten-untuk-agen","Pentingnya Memori AI Persisten untuk Agen",[429,5214,5215],{},"Seiring dengan semakin terintegrasinya asisten AI ke dalam kehidupan kita sehari-hari, kita sering kali menghadapi masalah konteks kosong (blank context). Keputusan yang dibuat minggu lalu terlupakan, sehingga kita harus memasukkan detail tech stack yang sama dan mengatur preferensi pengguna berulang kali di setiap sesi baru.",[429,5217,5218],{},"Alih-alih memulai dari awal setiap kali, kita perlu membangun sistem memori yang terus berkembang, secara konsisten memahami keputusan pengguna, dan menghilangkan kebutuhan untuk mengulang konteks secara terus-menerus.",[2464,5220,5222],{"id":5221},"sistem-memori-ai-mandiri-vs-bawaan","Sistem Memori AI Mandiri vs. Bawaan",[429,5224,5225],{},"Banyak agen AI dilengkapi dengan memori bawaan, tetapi kita jarang menggunakan satu agen saja untuk semua kebutuhan. Kita menggunakan Claude untuk merancang dan menyusun arsitektur proyek, Kimi untuk menulis kode, dan ChatGPT untuk riset mendalam. Konteks tidak dibagikan di antara agen-agen ini; semuanya tetap terisolasi di setiap alat secara terpisah.",[429,5227,5228,5229,5234,5235,5239],{},"Dari sudut pandang rekayasa perangkat lunak, kita tidak mempercayai kotak hitam (black box). Kita membutuhkan sistem memori AI yang dapat diobservasi, diaudit, dan berada di bawah kendali kita sepenuhnya. Proyek sumber terbuka ",[669,5230,5233],{"href":5231,"rel":5232},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fsecond-brain-cloudflare\u002Ftree\u002Fmain",[1156],"Second Brain",", yang merupakan fork dari ",[669,5236,5237],{"href":5237,"rel":5238},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare",[1156],", menyediakan sistem memori persisten dan mandiri (self-hosted) dengan dukungan Model Context Protocol (MCP). Agen AI apa pun yang kompatibel seperti Claude, ChatGPT, atau Kimi Code dapat berbagi konteks memori terpadu yang sama.",[2464,5241,5243],{"id":5242},"cara-membangun-memori-ai-second-brain-di-cloudflare","Cara Membangun Memori AI Second Brain di Cloudflare",[429,5245,5246,5247,5250],{},"Sistem memori Second Brain diterapkan di atas ",[814,5248,5249],{},"Cloudflare Workers",", yang menyediakan infrastruktur serverless berlatensi sangat rendah yang terdistribusi secara global. Hal ini memungkinkan operasi pencarian memori (recall) dan penyimpanan berjalan hampir instan dalam logika berpikir AI.",[429,5252,5253,5254,5257,5258,5261,5262,5264],{},"Model embedding dari ",[814,5255,5256],{},"Workers AI"," digunakan untuk menghasilkan vektor. Embedding ini disimpan di ",[814,5259,5260],{},"Cloudflare Vectorize",", yang merupakan database vektor terdistribusi global yang sangat optimal. ",[814,5263,5260],{}," melakukan pencarian kemiripan kosinus (cosine similarity) untuk mengidentifikasi memori dengan relevansi semantik.",[429,5266,5267],{},"Second Brain juga dilengkapi dengan mekanisme deduplikasi dan penggabungan cerdas. Konten dengan kemiripan kurang dari 85% akan disimpan langsung; jika tidak, konten tersebut akan diblokir atau ditandai sebagai kandidat duplikat. Teks panjang yang melebihi 1.600 karakter akan dipotong berdasarkan batas kalimat atau baris baru, dengan tetap mempertahankan tumpang tindih (overlap) sebanyak 200 karakter untuk menjaga kontinuitas konteks. Setiap potongan kemudian divektorisasi untuk pencocokan presisi tinggi.",[429,5269,5270],{},"Alat-alat berikut diekspos sebagai antarmuka MCP untuk digunakan langsung oleh agen AI:",[808,5272,5273,5279,5285,5291,5297,5303,5309],{},[811,5274,5275,5278],{},[456,5276,5277],{},"remember",": Menyimpan ide, keputusan, preferensi, dan konteks proyek secara umum.",[811,5280,5281,5284],{},[456,5282,5283],{},"append",": Menambahkan pembaruan ke memori yang sudah ada.",[811,5286,5287,5290],{},[456,5288,5289],{},"update",": Mengganti memori yang ada secara keseluruhan.",[811,5292,5293,5296],{},[456,5294,5295],{},"recall",": Menemukan memori berdasarkan makna semantiknya, bukan kata kunci yang tepat.",[811,5298,5299,5302],{},[456,5300,5301],{},"list_recent",": Menampilkan memori yang baru disimpan.",[811,5304,5305,5308],{},[456,5306,5307],{},"forget",": Menghapus memori secara permanen.",[811,5310,5311,5314],{},[456,5312,5313],{},"link\u002Fconnections",": Menghubungkan memori yang saling berkaitan (fitur graf v2).",[439,5316,5318],{"id":5317},"menyiapkan-second-brain-di-cloudflare","Menyiapkan Second Brain di Cloudflare",[1025,5320,5321,5338,5345,5352,5359,5366,5377,5384,5387,5394],{},[811,5322,1049,5323,5326,5327,5332,5333,5337],{},[456,5324,5325],{},"Deploy to Cloudflare"," pada halaman ",[669,5328,5331],{"href":5329,"rel":5330},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fsecond-brain-cloudflare",[1156],"Github repo",". [[",[825,5334],{"alt":5335,"src":5336},"Halaman GitHub dengan tombol Deploy to Cloudflare yang disorot","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fdeploy-to-cloudflare-button.webp","]]",[811,5339,5340,5341],{},"Isi formulir Cloudflare Worker yang ditampilkan.\n",[825,5342],{"alt":5343,"src":5344},"Formulir konfigurasi deployment Cloudflare Workers","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-deployment-form.webp",[811,5346,5347,5348],{},"Masukkan '384' untuk Dimensions; pilih 'cosine' untuk Metric; lalu klik tombol Deploy.\n",[825,5349],{"alt":5350,"src":5351},"Tampilan pengaturan pembuatan database Cloudflare Vectorize","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-vectorize-configuration.webp",[811,5353,5354,5355],{},"Gambar berikut menunjukkan ringkasan dari Second Brain Anda di Cloudflare Worker:\n",[825,5356],{"alt":5357,"src":5358},"Dasbor ikhtisar dari worker Second Brain yang dideploy","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-second-brain-overview.webp",[811,5360,5361,5362],{},"Buka tab 'Settings', lalu klik ikon edit pada variabel 'AUTH_TOKEN' untuk membuat token keamanan:\n",[825,5363],{"alt":5364,"src":5365},"Pengaturan variabel Cloudflare Worker yang menyoroti AUTH_TOKEN","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-settings.webp",[811,5367,5368,5369,5373],{},"Klik tautan 'Rotate' untuk memasukkan nilai baru: ",[825,5370],{"alt":5371,"src":5372},"Tampilan modifikasi dan rotasi variabel AUTH_TOKEN","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-rotate.webp",[825,5374],{"alt":5375,"src":5376},"Memasukkan string acak yang dihasilkan ke kolom nilai AUTH_TOKEN","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-value-input.webp",[811,5378,5379,5380,5383],{},"Jalankan perintah ",[456,5381,5382],{},"openssl rand -base64 32"," di terminal macOS untuk menghasilkan nilai acak yang aman dan tempelkan di bidang input 'Value'.",[811,5385,5386],{},"Klik tombol 'Deploy' untuk menyimpan nilai baru dari variabel 'AUTH_TOKEN'.",[811,5388,5389,5390],{},"Buka URL worker Second Brain Anda di peramban web.\n",[825,5391],{"alt":5392,"src":5393},"Tampilan masuk Web UI Second Brain dengan input Bearer Token","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-login.webp",[811,5395,5396,5397,5400],{},"Masukkan 'AUTH_TOKEN' yang telah dibuat pada kolom input ",[456,5398,5399],{},"Bearer token"," dan klik tombol 'Connect' untuk masuk ke dashboard Web UI.",[439,5402,5404],{"id":5403},"mengintegrasikan-claude-desktop-via-mcp","Mengintegrasikan Claude Desktop via MCP",[1025,5406,5407,5414,5421],{},[811,5408,5409,5410],{},"Klik 'Customize' pada pengaturan Claude Desktop.\n",[825,5411],{"alt":5412,"src":5413},"Antarmuka Claude Desktop yang menunjuk ke tombol Customize","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-customize-button.webp",[811,5415,5416,5417],{},"Klik 'Developer' untuk membuka dan mengedit file konfigurasi server MCP secara manual:\n",[825,5418],{"alt":5419,"src":5420},"Menu pengaturan Developer Claude Desktop untuk mengakses konfigurasi MCP","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-developer-menu.webp",[811,5422,5423,5424,5426,5427,892],{},"Tambahkan blok kode berikut ke bagian ",[456,5425,1872],{}," di file ",[456,5428,5429],{},"claude_desktop_config.json",[449,5431,5433],{"className":861,"code":5432,"language":863,"meta":454,"style":454},"    \"second-brain\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"mcp-remote\",\n        \"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\",\n        \"--header\",\n        \"Authorization: Bearer \u003Cyour-token>\"\n      ]\n    }\n",[456,5434,5435,5448,5466,5478,5488,5499,5510,5519,5523],{"__ignoreMap":454},[459,5436,5437,5439,5442,5444,5446],{"class":461,"line":462},[459,5438,1885],{"class":483},[459,5440,5441],{"class":476},"second-brain",[459,5443,543],{"class":483},[459,5445,1877],{"class":718},[459,5447,1880],{"class":483},[459,5449,5450,5452,5454,5456,5458,5460,5462,5464],{"class":461,"line":469},[459,5451,1899],{"class":483},[459,5453,1902],{"class":1888},[459,5455,543],{"class":483},[459,5457,892],{"class":483},[459,5459,522],{"class":483},[459,5461,1911],{"class":476},[459,5463,543],{"class":483},[459,5465,1916],{"class":483},[459,5467,5468,5470,5472,5474,5476],{"class":461,"line":502},[459,5469,1899],{"class":483},[459,5471,1923],{"class":1888},[459,5473,543],{"class":483},[459,5475,892],{"class":483},[459,5477,1930],{"class":483},[459,5479,5480,5482,5484,5486],{"class":461,"line":509},[459,5481,1935],{"class":483},[459,5483,1938],{"class":476},[459,5485,543],{"class":483},[459,5487,1916],{"class":483},[459,5489,5490,5492,5495,5497],{"class":461,"line":515},[459,5491,1935],{"class":483},[459,5493,5494],{"class":476},"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp",[459,5496,543],{"class":483},[459,5498,1916],{"class":483},[459,5500,5501,5503,5506,5508],{"class":461,"line":562},[459,5502,1935],{"class":483},[459,5504,5505],{"class":476},"--header",[459,5507,543],{"class":483},[459,5509,1916],{"class":483},[459,5511,5512,5514,5517],{"class":461,"line":567},[459,5513,1935],{"class":483},[459,5515,5516],{"class":476},"Authorization: Bearer \u003Cyour-token>",[459,5518,2011],{"class":483},[459,5520,5521],{"class":461,"line":573},[459,5522,2016],{"class":483},[459,5524,5525],{"class":461,"line":585},[459,5526,2021],{"class":483},[429,5528,5529,5533,5534],{},[825,5530],{"alt":5531,"src":5532},"JSON konfigurasi MCP Claude Desktop yang berisi server Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-mcp-config-json.webp","\n4. Mulai ulang Claude Desktop dan periksa daftar 'Local MCP servers'. Statusnya harus menunjukkan 'running' (sedang berjalan).\n",[825,5535],{"alt":5536,"src":5537},"Claude Desktop menampilkan status berjalan untuk server MCP Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-mcp-status-running.webp",[439,5539,5541],{"id":5540},"mengintegrasikan-claude-code-via-mcp","Mengintegrasikan Claude Code via MCP",[808,5543,5544],{},[811,5545,5546],{},"Jalankan perintah berikut untuk menambahkan server MCP baru:",[449,5548,5552],{"className":5549,"code":5550,"language":5551,"meta":454,"style":454},"language-shell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","claude mcp add --transport http second-brain https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\n","shell",[456,5553,5554],{"__ignoreMap":454},[459,5555,5556,5559,5562,5564,5567,5570,5573,5576,5578,5581,5584,5586],{"class":461,"line":462},[459,5557,5558],{"class":472},"claude",[459,5560,5561],{"class":476}," mcp",[459,5563,2939],{"class":476},[459,5565,5566],{"class":476}," --transport",[459,5568,5569],{"class":476}," http",[459,5571,5572],{"class":476}," second-brain",[459,5574,5575],{"class":476}," https:\u002F\u002F",[459,5577,4503],{"class":483},[459,5579,5580],{"class":476},"your-worker-ur",[459,5582,5583],{"class":718},"l",[459,5585,4512],{"class":483},[459,5587,5588],{"class":476},"\u002Fmcp\n",[808,5590,5591,5597],{},[811,5592,5593,5594,1033],{},"Claude Code akan mendeteksi bahwa endpoint memerlukan OAuth dan akan membuka halaman masuk di peramban web untuk memasukkan ",[456,5595,5596],{},"AUTH_TOKEN",[811,5598,5599,5600,2217,5603,5606,5607,1033],{},"Buat file ",[456,5601,5602],{},"CLAUDE.md",[456,5604,5605],{},"~\u002F.claude"," dengan instruksi yang dijelaskan di ",[669,5608,5611],{"href":5609,"rel":5610},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fblob\u002Fmain\u002FAI_Instructions\u002FCLAUDE_INSTRUCTIONS.md",[1156],"CLAUDE_INSTRUCTIONS.md",[439,5613,5615],{"id":5614},"mengintegrasikan-gemini-cli-via-mcp","Mengintegrasikan Gemini CLI via MCP",[1025,5617,5618],{},[811,5619,5620],{},"Tambahkan pengaturan server MCP berikut ke file '.\u002F.gemini\u002Fsettings.json' Anda:",[449,5622,5624],{"className":861,"code":5623,"language":863,"meta":454,"style":454},"    \"second-brain\": {\n      \"httpUrl\": \"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\",\n      \"oauth\": {\n        \"enabled\": true\n      }\n    }\n",[456,5625,5626,5638,5656,5668,5680,5684],{"__ignoreMap":454},[459,5627,5628,5630,5632,5634,5636],{"class":461,"line":462},[459,5629,1885],{"class":483},[459,5631,5441],{"class":476},[459,5633,543],{"class":483},[459,5635,1877],{"class":718},[459,5637,1880],{"class":483},[459,5639,5640,5642,5644,5646,5648,5650,5652,5654],{"class":461,"line":469},[459,5641,1899],{"class":483},[459,5643,2130],{"class":1888},[459,5645,543],{"class":483},[459,5647,892],{"class":483},[459,5649,522],{"class":483},[459,5651,5494],{"class":476},[459,5653,543],{"class":483},[459,5655,1916],{"class":483},[459,5657,5658,5660,5662,5664,5666],{"class":461,"line":502},[459,5659,1899],{"class":483},[459,5661,2149],{"class":1888},[459,5663,543],{"class":483},[459,5665,892],{"class":483},[459,5667,879],{"class":483},[459,5669,5670,5672,5674,5676,5678],{"class":461,"line":509},[459,5671,1935],{"class":483},[459,5673,2162],{"class":472},[459,5675,543],{"class":483},[459,5677,892],{"class":483},[459,5679,2169],{"class":483},[459,5681,5682],{"class":461,"line":515},[459,5683,2174],{"class":483},[459,5685,5686],{"class":461,"line":562},[459,5687,2021],{"class":483},[1025,5689,5690],{"start":469},[811,5691,5692],{},"Jalankan Gemini CLI.",[439,5694,5696],{"id":5695},"menguji-second-brain-di-agen-ai","Menguji Second Brain di Agen AI",[1025,5698,5699,5709,5722],{},[811,5700,5701,5702,5704,5705],{},"Saat mendefinisikan palet warna merek sederhana di ",[814,5703,1824],{},", Second Brain tidak langsung dipanggil secara default.\n",[825,5706],{"alt":5707,"src":5708},"Pengujian pertama di Claude Desktop tanpa lapisan memori Second Brain yang aktif","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-first-run-brand-palette.webp",[811,5710,5711,5712,4339,5715,5717,5718],{},"Saat menggunakan kata kunci sederhana seperti 'remember', hanya alat bawaan lokal ",[456,5713,5714],{},"memory_user-edits",[814,5716,1824],{}," yang digunakan, bukan lapisan penyimpanan jarak jauh Second Brain.\n",[825,5719],{"alt":5720,"src":5721},"Claude Desktop beralih ke pengeditan pengguna bawaan lokal alih-alih Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-remember-built-in-tool-fallback.webp",[811,5723,5724,5725,5728],{},"Saat mengirim perintah berikut di ",[814,5726,5727],{},"Claude Code",", integrasi dengan Second Brain berhasil dipanggil:",[449,5730,5733],{"className":5731,"code":5732,"language":2055},[2053],"Remember Our brand palette uses `#1a1a2e` as primary, `#16213e` as secondary, and `#e94560` as accent. Never use pure black.\"\n",[456,5734,5732],{"__ignoreMap":454},[429,5736,5737,5741,5742,2306,5745,5749,5750,5753,5754,5756,5757,5761,5762,5765,5766,5749,5770],{},[825,5738],{"alt":5739,"src":5740},"Jendela terminal Claude Code menampilkan pemicuan sukses dari MCP Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-code-second-brain-mcp-called.webp","\n4. Verifikasi pengaturan warna baru yang disimpan di ",[814,5743,5744],{},"Second Brain di Cloudflare",[825,5746],{"alt":5747,"src":5748},"Memverifikasi kode warna merek yang disimpan pada Web UI database Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-color-verification.webp","\n- ",[2973,5751,5752],{},"Claude Code dapat berfungsi secara otomatis karena file instruksi CLAUDE_INSTRUCTIONS.md berisi aturan yang mengarah pada kata kunci 'Second Brain'.","\n5. Untuk menggunakan integrasi ini di ",[814,5755,1824],{},", kata kunci 'Second Brain' harus disebutkan secara eksplisit dalam prompt Anda untuk memaksa penyimpanan atau pembacaan di lapisan memori persisten ini.\n",[825,5758],{"alt":5759,"src":5760},"Memicu Second Brain di Claude Desktop dengan menyebutkan kata kunci secara eksplisit","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-second-brain-explicit-trigger.webp","\n6. Hal yang sama berlaku untuk ",[814,5763,5764],{},"Gemini CLI",", Anda harus menyebutkan kata kunci 'Second Brain' untuk mengaktifkan alat MCP Second Brain.\n",[825,5767],{"alt":5768,"src":5769},"Jendela terminal Gemini CLI mendemonstrasikan panggilan sukses ke MCP Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fgemini-cli-second-brain-trigger.webp",[2973,5771,5772],{},"Menambahkan instruksi serupa ke file GEMINI.md, seperti yang telah dilakukan pada CLAUDE_INSTRUCTIONS.md, akan mengaktifkan Second Brain di latar belakang tanpa harus menulis kata kunci secara manual.",[439,5774,5776],{"id":5775},"ekstensi-peramban-web","Ekstensi Peramban Web",[808,5778,5779,5782],{},[811,5780,5781],{},"Ekstensi tersedia untuk peramban web Chrome, Firefox, dan Microsoft Edge.",[811,5783,5784,5785],{},"Fitur ekstensi meliputi:\n",[808,5786,5787,5793,5799],{},[811,5788,5789,5792],{},[814,5790,5791],{},"Mengambil halaman saat ini"," — menyimpan judul dan URL halaman ke Second Brain.",[811,5794,5795,5798],{},[814,5796,5797],{},"Mengambil teks terpilih"," — pilih teks apa pun pada halaman sebelum mengklik ikon ekstensi; cuplikan tersebut akan disimpan bersama judul dan URL.",[811,5800,5801,5804,5805,5808],{},[814,5802,5803],{},"Menambahkan catatan cepat"," — ketik catatan atau gunakan ",[456,5806,5807],{},"#hashtags"," langsung di popup ekstensi sebelum menyimpan; hashtag akan diekstrak secara otomatis sebagai tag.",[439,5810,5812],{"id":5811},"sinkronisasi-pengetahuan-pribadi-dengan-plugin-obsidian","Sinkronisasi Pengetahuan Pribadi dengan Plugin Obsidian",[808,5814,5815,5818],{},[811,5816,5817],{},"Tersedia plugin Obsidian untuk menyinkronkan catatan dari Obsidian Vault Anda langsung ke Second Brain di Cloudflare.",[811,5819,5820],{},"Catatan dapat ditandai dengan tag khusus untuk disinkronkan ke penyimpanan persisten.",[444,5822,5824],{"id":5823},"menginstal-plugin-obsidian","Menginstal Plugin Obsidian",[1025,5826,5827,5834,5841,5848],{},[811,5828,5829,5830],{},"Buka Obsidian → Settings → Community Plugins\n",[825,5831],{"alt":5832,"src":5833},"Panel pengaturan Obsidian menavigasi ke bagian Community Plugins","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-settings-community-plugins.webp",[811,5835,5836,5837],{},"Klik tombol 'Browse'.\n",[825,5838],{"alt":5839,"src":5840},"Halaman pencarian plugin komunitas Obsidian menampilkan tombol Browse","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-community-plugins-browse.webp",[811,5842,5843,5844],{},"Cari 'Second Brain Sync'.\n",[825,5845],{"alt":5846,"src":5847},"Mencari plugin Second Brain Sync di toko plugin Obsidian","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-community-plugins-search-second-brain.webp",[811,5849,5850,5851],{},"Klik tombol 'Install' lalu 'Enable'.\n",[825,5852],{"alt":5853,"src":5854},"Menginstal dan mengaktifkan plugin Second Brain Sync di Obsidian","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-install-and-enable.webp",[444,5856,5858],{"id":5857},"mengonfigurasi-plugin-obsidian","Mengonfigurasi Plugin Obsidian",[1025,5860,5861,5864,5871,5878,5885,5892],{},[811,5862,5863],{},"Buka Obsidian → Settings → Second Brain Sync",[811,5865,5866,5867],{},"Masukkan 'URL' dan 'Auth token' Anda.\n",[825,5868],{"alt":5869,"src":5870},"Memasukkan URL Worker dan Token Otorisasi di pengaturan plugin Obsidian","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-configuration-credentials.webp",[811,5872,5873,5874],{},"Klik tombol 'Test' untuk memverifikasi koneksi.\n",[825,5875],{"alt":5876,"src":5877},"Pengujian koneksi plugin Obsidian menunjukkan verifikasi sukses","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-connection-test-success.webp",[811,5879,5880,5881],{},"Konfigurasikan perilaku sinkronisasi. Atur tag sinkronisasi di 'Sync tag' dan aktifkan 'Auto-sync on save'.\n",[825,5882],{"alt":5883,"src":5884},"Mengonfigurasi Sync Tag dan mengaktifkan sinkronisasi otomatis saat menyimpan di Obsidian","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-sync-behavior-settings.webp",[811,5886,5887,5888],{},"Buat catatan di Obsidian dengan tag 'second-brain', sesuai dengan yang dikonfigurasi di 'Sync tag'.\n",[825,5889],{"alt":5890,"src":5891},"Membuat catatan Obsidian baru dengan tag second-brain untuk sinkronisasi","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-note-with-sync-tag.webp",[811,5893,5894,5895],{},"Catatan tersebut kini telah disimpan dan disinkronkan ke Second Brain yang diterapkan di Cloudflare.\n",[825,5896],{"alt":5897,"src":5898},"Memverifikasi catatan Obsidian yang sukses disinkronkan pada Web UI Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-synced-note-verification.webp",[2464,5900,2327],{"id":2326},[429,5902,5903],{},"Second Brain menawarkan solusi sumber terbuka yang cerdas untuk mengatasi salah satu masalah paling membuat frustrasi dalam AI: ketiadaan memori persisten. Dengan memadukan proyek ini dengan infrastruktur Cloudflare yang skalabel, kita mendapatkan lapisan memori semantik mandiri yang terdistribusi secara global dengan latensi sangat rendah. Dukungan MCP yang tertanam di Second Brain membuat memori ini sepenuhnya portabel di berbagai agen AI.",[429,5905,5906],{},"Plugin Obsidian memperluas arsitektur ini dengan menghubungkan catatan pribadi di dalam vault dengan logika berpikir AI. Catatan mentah Anda diubah menjadi konteks terstruktur yang dapat dipahami dan dipanggil secara semantik oleh agen AI kapan saja.",[429,5908,5909],{},"Dengan menyatukan self-hosting, pencarian semantik vektor, dan standar integrasi berbasis MCP; Second Brain membuktikan dirinya bukan sekadar tempat penyimpanan memori, melainkan fondasi praktis untuk membangun ekosistem AI yang andal.",[2464,5911,2346],{"id":2345},[808,5913,5914,5920,5926,5933,5940],{},[811,5915,5916],{},[669,5917,5918],{"href":5918,"rel":5919},"https:\u002F\u002Fwww.thesecondbrain.dev\u002F",[1156],[811,5921,5922],{},[669,5923,5924],{"href":5924,"rel":5925},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FHow-It-Works",[1156],[811,5927,5928],{},[669,5929,5932],{"href":5930,"rel":5931},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FConnect-to-AI-Clients",[1156],"Connect to AI Clients",[811,5934,5935],{},[669,5936,5939],{"href":5937,"rel":5938},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FObsidian-Plugin",[1156],"Second Brain Obsidian Plugin",[811,5941,5942],{},[669,5943,5944],{"href":5944,"rel":5945},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-obsidian-plugin",[1156],[2371,5947,5948],{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":454,"searchDepth":469,"depth":502,"links":5950},[5951,5952,5953,5965,5966],{"id":5211,"depth":469,"text":5212},{"id":5221,"depth":469,"text":5222},{"id":5242,"depth":469,"text":5243,"children":5954},[5955,5956,5957,5958,5959,5960,5961],{"id":5317,"depth":502,"text":5318},{"id":5403,"depth":502,"text":5404},{"id":5540,"depth":502,"text":5541},{"id":5614,"depth":502,"text":5615},{"id":5695,"depth":502,"text":5696},{"id":5775,"depth":502,"text":5776},{"id":5811,"depth":502,"text":5812,"children":5962},[5963,5964],{"id":5823,"depth":509,"text":5824},{"id":5857,"depth":509,"text":5858},{"id":2326,"depth":469,"text":2327},{"id":2345,"depth":469,"text":2346},[5968,2417],"cloudflare","2026-08-07","Pelajari cara membangun sistem memori AI persisten dan mandiri di Cloudflare menggunakan Second Brain dan MCP. Berbagi konteks di Claude dan Obsidian.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002FID-Use-Cloudflare-as-AI-memory.webp","Sistem memori AI persisten dan mandiri yang dideploy di Cloudflare Workers dan Vectorize dengan dukungan MCP dan sinkronisasi Obsidian.",{"schemaOrg":5974,"robots":2430,"sitemap":5977},[5975],{"@type":3024,"headline":5976,"description":5970},"Sistem Memori AI Mandiri dengan Cloudflare & MCP",{"lastmod":5969},{"title":5976,"description":5970,"ogTitle":5206,"ogDescription":5970,"twitterTitle":5206,"twitterDescription":5970},"id\u002Farticle\u002Fuse-cloudflare-as-ai-memory",[2439,1211,5981,5233,5982],"Memori AI","Obsidian","9yZS7dESNmDcB1oP9vh_bLPfFb6ffNM8_A7ZXzmLTj8",{"id":2445,"title":2446,"author":454,"body":2447,"category":3016,"date":3017,"description":3018,"extension":2420,"image":3019,"imageAlt":3020,"isPublished":505,"meta":3021,"minRead":509,"navigation":505,"path":367,"seo":3026,"stem":3028,"tags":3029,"updatedAt":424,"__hash__":3033},1792489985998]