[{"data":1,"prerenderedAt":6376},["ShallowReactive",2],{"published-article-paths":3,"search-navigation":348,"\u002Fpt\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them":421,"\u002Fpt\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them-surround":866},[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":844,"date":846,"description":847,"extension":848,"image":849,"imageAlt":850,"isPublished":513,"meta":851,"minRead":510,"navigation":513,"path":213,"seo":857,"stem":858,"tags":859,"updatedAt":864,"__hash__":865},"article\u002Fpt\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them.md","Habilidades de agentes de IA: o que são e como criá-las","",{"type":426,"value":427,"toc":834},"minimark",[428,433,447,460,543,549,553,556,565,572,577,635,646,652,655,710,714,721,728,731,743,747,792,795,812,816,827,830],[429,430,432],"h2",{"id":431},"o-que-é-uma-habilidade-de-agente-de-ia","O que é uma habilidade de agente de IA?",[434,435,436,437,441,442,446],"p",{},"Uma habilidade de agente (agent skill) é um ",[438,439,440],"strong",{},"conjunto reutilizável de instruções"," — um procedimento padronizado que ensina a um agente como realizar uma tarefa específica com maestria. Consiste em um único arquivo Markdown chamado ",[443,444,445],"code",{},"SKILL.md"," e pode agrupar outros arquivos necessários para a tarefa, como documentos de referência, modelos ou scripts executáveis.",[434,448,449,450,459],{},"Veja a habilidade ",[451,452,456],"a",{"href":453,"rel":454},"https:\u002F\u002Fgithub.com\u002Fmattpocock\u002Fskills\u002Fblob\u002F733d312884b3878a9a9cff693c5886943753a741\u002Fskills\u002Fproductivity\u002Fgrill-me\u002FSKILL.md",[455],"nofollow",[443,457,458],{},"grill-me"," como exemplo:",[461,462,466],"pre",{"className":463,"code":464,"language":465,"meta":424,"style":424},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","---\nname: grill-me\ndescription: Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Use when user wants to stress-test a plan, get grilled on their design, or mentions \"grill me\".\n---\n\nInterview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.\n\nAsk the questions one at a time.\n\nIf a question can be answered by exploring the codebase, explore the codebase instead.\n","yaml",[443,467,468,477,492,503,508,515,521,526,532,537],{"__ignoreMap":424},[469,470,473],"span",{"class":471,"line":472},"line",1,[469,474,476],{"class":475},"sBMFI","---\n",[469,478,480,484,488],{"class":471,"line":479},2,[469,481,483],{"class":482},"swJcz","name",[469,485,487],{"class":486},"sMK4o",":",[469,489,491],{"class":490},"sfazB"," grill-me\n",[469,493,495,498,500],{"class":471,"line":494},3,[469,496,497],{"class":482},"description",[469,499,487],{"class":486},[469,501,502],{"class":490}," Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Use when user wants to stress-test a plan, get grilled on their design, or mentions \"grill me\".\n",[469,504,506],{"class":471,"line":505},4,[469,507,476],{"class":475},[469,509,511],{"class":471,"line":510},5,[469,512,514],{"emptyLinePlaceholder":513},true,"\n",[469,516,518],{"class":471,"line":517},6,[469,519,520],{"class":490},"Interview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.\n",[469,522,524],{"class":471,"line":523},7,[469,525,514],{"emptyLinePlaceholder":513},[469,527,529],{"class":471,"line":528},8,[469,530,531],{"class":490},"Ask the questions one at a time.\n",[469,533,535],{"class":471,"line":534},9,[469,536,514],{"emptyLinePlaceholder":513},[469,538,540],{"class":471,"line":539},10,[469,541,542],{"class":490},"If a question can be answered by exploring the codebase, explore the codebase instead.\n",[434,544,545,546,548],{},"Um arquivo ",[443,547,445],{}," contains um pequeno bloco de metadados e um corpo de instruções. Os metadados consistem no nome e na descrição da habilidade, carregados pelo agente de IA durante a inicialização.",[429,550,552],{"id":551},"como-funcionam-as-habilidades-de-agentes-de-ia-divulgação-progressiva","Como funcionam as habilidades de agentes de IA: divulgação progressiva",[434,554,555],{},"Inicialmente, apenas o nome e a descrição são carregados no contexto. Quando a solicitação do usuário corresponde à descrição de uma habilidade, o corpo de instruções correspondente é inserido no mesmo contexto.",[434,557,558,559,564],{},"Vejamos como a habilidade ",[451,560,562],{"href":453,"rel":561},[455],[443,563,458],{}," é utilizada na prática.",[434,566,567],{},[568,569],"img",{"alt":570,"src":571},"Diagrama de sequência ilustrando o mecanismo de divulgação progressiva para a execução de habilidades de agentes de IA","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FAI%20Agent%20Skills%20What%20They%20Are%20%26%20How%20to%20Create%20Them\u002Fai-agent-skill-progressive-disclosure-sequence-diagram.webp",[573,574,576],"h3",{"id":575},"passo-a-passo","Passo a passo",[578,579,580,587,593,599,605,619,629],"ol",{},[581,582,583,586],"li",{},[438,584,585],{},"Solicitação (Request)"," — O usuário pede algo ao agente (\"sabatine-me sobre o design do meu fluxo de trabalho\").",[581,588,589,592],{},[438,590,591],{},"Prompt de seleção"," — A solicitação do usuário, juntamente com as descrições de todas as habilidades disponíveis, é enviada ao LLM.",[581,594,595,598],{},[438,596,597],{},"Seleção do LLM"," — O LLM compara a solicitação com cada descrição e retorna a(s) habilidade(s) correspondente(s).",[581,600,601,604],{},[438,602,603],{},"Confirmação"," — O agente exibe a habilidade proposta ao usuário, que confirma (ou rejeita\u002Fajusta) a escolha.",[581,606,607,610,611,615,616,618],{},[438,608,609],{},"Instruções carregadas"," — O agente busca as instruções ",[612,613,614],"em",{},"completas"," para a habilidade confirmada: o corpo do arquivo ",[443,617,445],{},".",[581,620,621,624,625,628],{},[438,622,623],{},"Prompt de execução"," — A solicitação do usuário ",[438,626,627],{},"somada às instruções da habilidade selecionada"," é enviada ao LLM.",[581,630,631,634],{},[438,632,633],{},"Resposta"," — O LLM gera a saída, que é a primeira pergunta da sabatina.",[434,636,637,638,645],{},"Agora vamos usar o ",[451,639,642],{"href":640,"rel":641},"https:\u002F\u002Fgithub.com\u002Fcoleam00\u002Fexcalidraw-diagram-skill",[455],[443,643,644],{},"excalidraw-diagram-skill"," para ilustrar como funciona uma habilidade vinculada a um documento de referência:",[434,647,648],{},[568,649],{"alt":650,"src":651},"Diagrama de sequência mostrando um agente de IA executando uma habilidade carregada com arquivos de referência e modelos externos","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FAI%20Agent%20Skills%20What%20They%20Are%20%26%20How%20to%20Create%20Them\u002Fai-agent-skill-with-reference-files-sequence-diagram.webp",[573,653,576],{"id":654},"passo-a-passo-1",[578,656,657,662,667,676,681,694,701],{},[581,658,659,661],{},[438,660,585],{}," — O usuário pede algo ao agente (\"desenhe o fluxo de trabalho do processo de deploy\").",[581,663,664,666],{},[438,665,591],{}," — A solicitação do usuário, além das descrições de todas as habilidades disponíveis, é enviada ao LLM.",[581,668,669,671,672,675],{},[438,670,597],{}," — O LLM compara a solicitação com as descrições e retorna o que for compatível. Aqui, \"desenhe o fluxo de trabalho\" corresponde à descrição do ",[443,673,674],{},"excalidraw-diagram",", sendo selecionado.",[581,677,678,680],{},[438,679,603],{}," — O agente apresenta a habilidade proposta ao usuário, que confirma (ou rejeita\u002Fajusta) a escolha.",[581,682,683,610,685,687,688,690,691,693],{},[438,684,609],{},[612,686,614],{}," da habilidade: o corpo do ",[443,689,445],{}," e quaisquer arquivos referenciados (para o ",[443,692,674],{},", isso inclui a paleta de cores, o esquema JSON e os modelos de elementos).",[581,695,696,624,698,700],{},[438,697,623],{},[438,699,627],{}," vai para o LLM. O modelo agora tem a metodologia detalhada em mãos.",[581,702,703,705,706,709],{},[438,704,633],{}," — O LLM gera a saída (um arquivo JSON ",[443,707,708],{},".excalidraw","), que o agente entrega de volta ao usuário.",[429,711,713],{"id":712},"habilidades-de-agentes-de-ia-vs-ferramentas-e-mcp","Habilidades de agentes de IA vs. Ferramentas e MCP",[434,715,716,717,720],{},"Habilidades não substituem prompts, ferramentas ou integrações MCP. Ferramentas e protocolos MCP ampliam o alcance do agente a sistemas externos — consultando um banco de dados, chamando uma API e assim por diante. Já as habilidades aprofundam o conhecimento prático (",[612,718,719],{},"know-how",") do agente para a execução de uma tarefa específica.",[434,722,723,724,727],{},"Um MCP como o ",[451,725,726],{"href":395},"Configuração do NetSuite MCP no ChatGPT e Claude"," permite que o agente responda a perguntas acessando dados financeiros e operacionais em tempo real no NetSuite. Em seguida, uma habilidade de relatórios operacionais do NetSuite orienta o agente sobre como estruturar esse relatório e apresentar as respostas estruturadas ao usuário.",[434,729,730],{},"Alguns cenários ideais para o uso de habilidades incluem:",[732,733,734,737,740],"ul",{},[581,735,736],{},"Fluxos de trabalho de várias etapas",[581,738,739],{},"Processamento de documentos, como extração de dados de PDFs",[581,741,742],{},"Padronização de geração de código",[429,744,746],{"id":745},"como-criar-habilidades-de-agentes-de-ia","Como criar habilidades de agentes de IA",[578,748,749,759,773,782],{},[581,750,751,754,755,758],{},[438,752,753],{},"Crie uma pasta"," com o nome da habilidade (ex: ",[443,756,757],{},"netsuite-operation-report\u002F",").",[581,760,761,766,767,769,770,772],{},[438,762,763,764],{},"Escreva o arquivo ",[443,765,445],{}," contendo um ",[443,768,483],{},", uma ",[443,771,497],{}," precisa e um corpo de instruções conciso (com menos de 200 palavras).",[581,774,775,778,779,781],{},[438,776,777],{},"Adicione os recursos"," que a tarefa exige — documentos de referência, templates, scripts. Mantenha o arquivo ",[443,780,445],{}," enxuto e aponte os links para os detalhes.",[581,783,784,787,788,791],{},[438,785,786],{},"Instale a habilidade"," em um diretório onde os agentes possam descobri-la. Consulte ",[451,789,790],{"href":359},"Centralização de habilidades para agentes"," para entender como gerenciar habilidades em múltiplos agentes.",[434,793,794],{},"Algumas dicas para escrever excelentes habilidades:",[732,796,797,800,806,809],{},[581,798,799],{},"Redija a descrição pensando no acionamento (trigger) do sistema, não na leitura humana.",[581,801,802,803,805],{},"Mantenha o ",[443,804,445],{}," curto (menos de 200 palavras). Coloque o caso geral no corpo do texto e delegue as exceções para documentos de referência.",[581,807,808],{},"Use scripts para tarefas determinísticas. Não peça para o LLM fazer contas e aritmética simples.",[581,810,811],{},"Controle as versões. Adicione-o ao Git.",[429,813,815],{"id":814},"conclusão","Conclusão",[434,817,818,819,822,823,826],{},"Diferente das ferramentas e do MCP, que especificam ",[612,820,821],{},"ao que se conectar",", as habilidades de agentes empacotam ",[612,824,825],{},"como realizar o trabalho",". Elas são complementos fundamentais, não substitutos.",[434,828,829],{},"Ao tirar proveito da divulgação progressiva, as habilidades mantêm a janela de contexto do seu agente limpa e eficiente — carregando instruções detalhadas, documentos de referência e scripts executáveis apenas quando a intenção da solicitação do usuário os ativa de fato.",[831,832,833],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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);}",{"title":424,"searchDepth":479,"depth":494,"links":835},[836,837,841,842,843],{"id":431,"depth":479,"text":432},{"id":551,"depth":479,"text":552,"children":838},[839,840],{"id":575,"depth":494,"text":576},{"id":654,"depth":494,"text":576},{"id":712,"depth":479,"text":713},{"id":745,"depth":479,"text":746},{"id":814,"depth":479,"text":815},[845],"ai-agents","2026-06-26","Descubra o que são habilidades de agentes de IA, entenda a divulgação progressiva e aprenda a criar instruções reutilizáveis para fluxos de trabalho eficientes.","md","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FAI%20Agent%20Skills%20What%20They%20Are%20%26%20How%20to%20Create%20Them\u002FPT-AI-Agent-Skills-What-They-Are-%26-How-to-Create-Them.webp","Guia de habilidades de agentes de IA: crie novos workflows",{"schemaOrg":852,"robots":855,"sitemap":856},[853],{"@type":854,"headline":423,"description":847},"HowTo","index, follow",{"lastmod":846},{"title":850,"description":847,"ogTitle":423,"ogDescription":847,"twitterTitle":423,"twitterDescription":847},"pt\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",[860,861,862,863],"Agentes de IA","Habilidades de Agentes","Fluxos de Trabalho Reutilizáveis","Tutorial de IA",null,"YpLi8LsrzMKZ0wdwwn0TjwuJEtgCfN7WEXwrLXFU6qA",{"surround":867,"related":2106},[868,1544],{"id":869,"title":870,"author":424,"body":871,"category":1515,"date":1516,"description":1517,"extension":848,"image":1518,"imageAlt":1519,"isPublished":513,"meta":1520,"minRead":517,"navigation":513,"path":225,"seo":1535,"stem":1537,"tags":1538,"updatedAt":864,"__hash__":1543},"article\u002Fpt\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server.md","Como instalar e configurar o Hermes Agent em um VPS Linux",{"type":426,"value":872,"toc":1504},[873,877,880,883,887,891,894,909,915,918,948,955,984,990,995,1010,1022,1030,1035,1053,1057,1060,1082,1088,1091,1103,1114,1125,1156,1160,1171,1181,1192,1206,1213,1223,1229,1258,1274,1278,1284,1296,1301,1337,1341,1344,1360,1366,1445,1448,1496,1498,1501],[429,874,876],{"id":875},"por-que-hospedar-o-hermes-agent-em-um-vps-remoto","Por que hospedar o Hermes Agent em um VPS remoto?",[434,878,879],{},"Como o Hermes Agent é capaz de executar tarefas em segundo plano, agendar tarefas e responder a chamadas de webhooks, precisamos de uma máquina que esteja em standby 24 horas por dia, 7 dias por semana. Computadores locais podem sofrer quedas de energia, desconectar-se da Internet ou ter seus recursos de hardware esgotados. Um servidor remoto garante 99% de tempo de atividade (uptime) e facilita a escala de recursos computacionais sempre que necessário.",[434,881,882],{},"Existem vários provedores acessíveis de servidores privados virtuais (VPS) no mercado, como Hetzner, Hostinger e Contabo. Nós usamos a Contabo há algum tempo e, até o momento, tudo tem funcionado muito bem.",[429,884,886],{"id":885},"como-configurar-o-hermes-agent-em-um-vps-linux","Como configurar o Hermes Agent em um VPS Linux",[573,888,890],{"id":889},"passo-1-conectar-se-ao-seu-vps","Passo 1: Conectar-se ao seu VPS",[434,892,893],{},"Abra o terminal e conecte-se via SSH à sua máquina remota:",[461,895,899],{"className":896,"code":897,"language":898,"meta":424,"style":424},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","ssh root@your_server_ip\n","bash",[443,900,901],{"__ignoreMap":424},[469,902,903,906],{"class":471,"line":472},[469,904,905],{"class":475},"ssh",[469,907,908],{"class":490}," root@your_server_ip\n",[434,910,911],{},[568,912],{"alt":913,"src":914},"Conexão SSH ao servidor VPS Linux no terminal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fvps-terminal-ssh-connection.webp",[434,916,917],{},"Certifique-se de que os pacotes do seu servidor estejam atualizados:",[461,919,921],{"className":896,"code":920,"language":898,"meta":424,"style":424},"sudo apt update && sudo apt upgrade -y\n",[443,922,923],{"__ignoreMap":424},[469,924,925,928,931,934,937,940,942,945],{"class":471,"line":472},[469,926,927],{"class":475},"sudo",[469,929,930],{"class":490}," apt",[469,932,933],{"class":490}," update",[469,935,936],{"class":486}," &&",[469,938,939],{"class":475}," sudo",[469,941,930],{"class":490},[469,943,944],{"class":490}," upgrade",[469,946,947],{"class":490}," -y\n",[434,949,950,951,954],{},"Adicione um novo usuário, ",[443,952,953],{},"hermes",", ou o seu nome de usuário de preferência:",[461,956,958],{"className":896,"code":957,"language":898,"meta":424,"style":424},"sudo adduser hermes \nsudo passwd hermes\n",[443,959,960,974],{"__ignoreMap":424},[469,961,962,964,967,970],{"class":471,"line":472},[469,963,927],{"class":475},[469,965,966],{"class":490}," adduser",[469,968,969],{"class":490}," hermes",[469,971,973],{"class":972},"sTEyZ"," \n",[469,975,976,978,981],{"class":471,"line":479},[469,977,927],{"class":475},[469,979,980],{"class":490}," passwd",[469,982,983],{"class":490}," hermes\n",[434,985,986,987,487],{},"Desative o login por senha para o usuário ",[443,988,989],{},"root",[578,991,992],{},[581,993,994],{},"Abra o arquivo de configuração do SSH:",[461,996,998],{"className":896,"code":997,"language":898,"meta":424,"style":424},"sudo nano \u002Fetc\u002Fssh\u002Fsshd_config\n",[443,999,1000],{"__ignoreMap":424},[469,1001,1002,1004,1007],{"class":471,"line":472},[469,1003,927],{"class":475},[469,1005,1006],{"class":490}," nano",[469,1008,1009],{"class":490}," \u002Fetc\u002Fssh\u002Fsshd_config\n",[578,1011,1012],{"start":479},[581,1013,1014,1015,1018,1019,487],{},"Localize a linha ",[443,1016,1017],{},"PermitRootLogin"," e altere seu valor para ",[443,1020,1021],{},"no",[461,1023,1028],{"className":1024,"code":1026,"language":1027,"meta":424},[1025],"language-text","PermitRootLogin no\n","text",[443,1029,1026],{"__ignoreMap":424},[578,1031,1032],{"start":494},[581,1033,1034],{},"Salve o arquivo e reinicie o serviço SSH:",[461,1036,1038],{"className":896,"code":1037,"language":898,"meta":424,"style":424},"sudo systemctl restart ssh\n",[443,1039,1040],{"__ignoreMap":424},[469,1041,1042,1044,1047,1050],{"class":471,"line":472},[469,1043,927],{"class":475},[469,1045,1046],{"class":490}," systemctl",[469,1048,1049],{"class":490}," restart",[469,1051,1052],{"class":490}," ssh\n",[573,1054,1056],{"id":1055},"passo-2-instalar-o-hermes-agent","Passo 2: Instalar o Hermes Agent",[434,1058,1059],{},"Execute o seguinte comando:",[461,1061,1063],{"className":896,"code":1062,"language":898,"meta":424,"style":424},"curl -fsSL https:\u002F\u002Fhermes-agent.nousresearch.com\u002Finstall.sh | bash\n",[443,1064,1065],{"__ignoreMap":424},[469,1066,1067,1070,1073,1076,1079],{"class":471,"line":472},[469,1068,1069],{"class":475},"curl",[469,1071,1072],{"class":490}," -fsSL",[469,1074,1075],{"class":490}," https:\u002F\u002Fhermes-agent.nousresearch.com\u002Finstall.sh",[469,1077,1078],{"class":486}," |",[469,1080,1081],{"class":475}," bash\n",[434,1083,1084],{},[568,1085],{"alt":1086,"src":1087},"Executando o script de instalação do Hermes Agent no terminal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-agent-installation-terminal.webp",[434,1089,1090],{},"Depois de instalado, verifique a instalação digitando:",[461,1092,1094],{"className":896,"code":1093,"language":898,"meta":424,"style":424},"hermes --version\n",[443,1095,1096],{"__ignoreMap":424},[469,1097,1098,1100],{"class":471,"line":472},[469,1099,953],{"class":475},[469,1101,1102],{"class":490}," --version\n",[434,1104,1105,1106,1109,1110],{},"Execute ",[443,1107,1108],{},"hermes setup"," para configurar o Hermes Agent:\n",[568,1111],{"alt":1112,"src":1113},"Executando o comando hermes setup no terminal para iniciar a configuração","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-agent-setup-wizard.webp",[434,1115,1116,1117,1120,1121],{},"Selecione um provedor de LLM, comece com o ",[443,1118,1119],{},"DeepSeek"," e adicione outros mais tarde.\n",[568,1122],{"alt":1123,"src":1124},"Selecionando DeepSeek como o provedor de LLM na configuração do Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-llm-provider-selection.webp",[434,1126,1127,1128,1130,1131,1135,1139,1140,1143,1144,1139,1148,1151,1152],{},"Insira a chave de API do ",[443,1129,1119],{},":\n",[568,1132],{"alt":1133,"src":1134},"Inserindo a chave de API do DeepSeek no terminal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-enter-api-key.webp",[568,1136],{"alt":1137,"src":1138},"Confirmação de sucesso da chave de API do provedor de LLM","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-api-key-success.webp","\nSelecione ",[443,1141,1142],{},"local machine"," para executar o Hermes Agent:\n",[568,1145],{"alt":1146,"src":1147},"Selecionando local machine para o ambiente de execução do Hermes Agent","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-select-local-machine.webp",[443,1149,1150],{},"Telegram"," nos canais de comunicação. Outros canais podem ser configurados posteriormente.\n",[568,1153],{"alt":1154,"src":1155},"Selecionando o Telegram como canal de comunicação na configuração do Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-select-telegram-channel.webp",[573,1157,1159],{"id":1158},"passo-3-integração-com-o-telegram","Passo 3: Integração com o Telegram",[434,1161,1162,1163,1166,1167],{},"Selecione ",[443,1164,1165],{},"[2]"," para usar o bot do Telegram.\n",[568,1168],{"alt":1169,"src":1170},"Selecionando a opção de configurar a integração do bot do Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-bot-integration-option.webp",[434,1172,1173,1174,1176,1177],{},"Acesse o ",[443,1175,1150],{}," e pesquise por 'BotFather'.\n",[568,1178],{"alt":1179,"src":1180},"Pesquisando por BotFather no aplicativo Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-search-botfather.webp",[434,1182,1183,1184,1187,1188],{},"Clique em ",[443,1185,1186],{},"Open"," para abrir o 'BotFather'.\n",[568,1189],{"alt":1190,"src":1191},"Abrindo a interface de chat com BotFather no Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-open-botfather-chat.webp",[434,1193,1183,1194,1197,1198,1201,1202],{},[443,1195,1196],{},"Create a New Bot"," (ou envie o comando ",[443,1199,1200],{},"\u002Fnewbot",").\n",[568,1203],{"alt":1204,"src":1205},"Enviando o comando newbot ao BotFather para criar um novo bot do Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-create-new-bot.webp",[434,1207,1208,1209],{},"Preencha os nomes requeridos e crie o bot.\n",[568,1210],{"alt":1211,"src":1212},"Configurando o nome e usuário do novo bot do Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-bot-details-configured.webp",[434,1214,1183,1215,1218,1219],{},[443,1216,1217],{},"Copy"," para copiar o token e cole-o de volta no terminal.\n",[568,1220],{"alt":1221,"src":1222},"Copiando o token da API HTTP do bot do Telegram recém-criado","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-copy-http-api-token.webp",[434,1224,1225,1226,1228],{},"Encontre o ID da sua conta de usuário do ",[443,1227,1150],{}," e adicione-o à lista de usuários permitidos ('Allowed user list'):",[732,1230,1231,1241,1255],{},[581,1232,1233,1234,1236,1237],{},"Pesquise por '@raw_data_bot' no ",[443,1235,1150],{},".\n",[568,1238],{"alt":1239,"src":1240},"Pesquisando por raw data bot no Telegram para obter o ID do usuário","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-search-raw-data-bot.webp",[581,1242,1243,1244,1247,1248,1236,1251],{},"Clique no ",[443,1245,1246],{},"RawDataBot"," e depois no botão Start (Começar). O ID do usuário será exibido após ",[443,1249,1250],{},"P.S. Your ID:",[568,1252],{"alt":1253,"src":1254},"Iniciando o RawDataBot para visualizar o ID da conta de usuário","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-raw-data-bot-user-id.webp",[581,1256,1257],{},"Copie o ID de usuário e cole-o no terminal.",[434,1259,1260,1261,1265,1266,1270],{},"Como estamos executando na nuvem, queremos que o serviço seja iniciado automaticamente.\n",[568,1262],{"alt":1263,"src":1264},"Configurando a opção de início automático para o serviço systemd do Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-autostart-service-option.webp","\nDeixe todas as opções como padrão:\n",[568,1267],{"alt":1268,"src":1269},"Mantendo as configurações de instalação padrão no terminal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-leave-defaults-1.webp",[568,1271],{"alt":1272,"src":1273},"Concluindo as opções padrão de configuração do Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-leave-defaults-2.webp",[429,1275,1277],{"id":1276},"testando-seu-hermes-agent-com-o-bot-do-telegram","Testando seu Hermes Agent com o bot do Telegram",[434,1279,1280,1281,487],{},"Execute o seguinte comando para iniciar o ",[443,1282,1283],{},"hermes gateway",[461,1285,1287],{"className":896,"code":1286,"language":898,"meta":424,"style":424},"hermes gateway\n",[443,1288,1289],{"__ignoreMap":424},[469,1290,1291,1293],{"class":471,"line":472},[469,1292,953],{"class":475},[469,1294,1295],{"class":490}," gateway\n",[434,1297,1173,1298,1300],{},[443,1299,1150],{}," e adicione o bot criado, '@tech_cloud_hermes_bot', às suas conversas.",[732,1302,1303,1316,1327],{},[581,1304,1305,1306,1308,1309,1236,1312],{},"Digite '\u002Fnew' no ",[443,1307,1150],{}," para iniciar uma nova sessão do ",[443,1310,1311],{},"Hermes Agent",[568,1313],{"alt":1314,"src":1315},"Digitando o comando new no Telegram para iniciar uma nova sessão do Hermes Agent","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-new-session.webp",[581,1317,1318,1319,1322,1323],{},"Digitar ",[443,1320,1321],{},"\u002Fcommands"," listará todos os comandos disponíveis.\n",[568,1324],{"alt":1325,"src":1326},"Digitando commands no Telegram para listar as instruções disponíveis do Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-commands-list.webp",[581,1328,1318,1329,1332,1333],{},[443,1330,1331],{},"\u002Fmodel"," exibirá uma lista com os LLMs disponíveis.\n",[568,1334],{"alt":1335,"src":1336},"Digitando model no Telegram para ver a lista de LLMs ativos","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-model-selection.webp",[429,1338,1340],{"id":1339},"executando-o-hermes-gateway-como-um-serviço-em-segundo-plano","Executando o Hermes Gateway como um serviço em segundo plano",[434,1342,1343],{},"Crie o arquivo de serviço:",[461,1345,1349],{"className":1346,"code":1347,"language":1348,"meta":424,"style":424},"language-shell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-gateway.service\n","shell",[443,1350,1351],{"__ignoreMap":424},[469,1352,1353,1355,1357],{"class":471,"line":472},[469,1354,927],{"class":475},[469,1356,1006],{"class":490},[469,1358,1359],{"class":490}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-gateway.service\n",[434,1361,1362,1363,1365],{},"Cole o seguinte conteúdo, substituindo ",[443,1364,953],{}," em '\u002Fhome\u002Fhermes' pelo seu nome de usuário preferido:",[461,1367,1371],{"className":1368,"code":1369,"language":1370,"meta":424,"style":424},"language-ini shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[Unit]\nDescription=Hermes Gateway\nAfter=network.target\n\n[Service]\nUser=hermes\nWorkingDirectory=\u002Fhome\u002Fhermes\nExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes gateway\nRestart=always\nRestartSec=10\nEnvironment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n\n[Install]\nWantedBy=multi-user.target\n","ini",[443,1372,1373,1378,1383,1388,1392,1397,1402,1407,1412,1417,1422,1428,1433,1439],{"__ignoreMap":424},[469,1374,1375],{"class":471,"line":472},[469,1376,1377],{},"[Unit]\n",[469,1379,1380],{"class":471,"line":479},[469,1381,1382],{},"Description=Hermes Gateway\n",[469,1384,1385],{"class":471,"line":494},[469,1386,1387],{},"After=network.target\n",[469,1389,1390],{"class":471,"line":505},[469,1391,514],{"emptyLinePlaceholder":513},[469,1393,1394],{"class":471,"line":510},[469,1395,1396],{},"[Service]\n",[469,1398,1399],{"class":471,"line":517},[469,1400,1401],{},"User=hermes\n",[469,1403,1404],{"class":471,"line":523},[469,1405,1406],{},"WorkingDirectory=\u002Fhome\u002Fhermes\n",[469,1408,1409],{"class":471,"line":528},[469,1410,1411],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes gateway\n",[469,1413,1414],{"class":471,"line":534},[469,1415,1416],{},"Restart=always\n",[469,1418,1419],{"class":471,"line":539},[469,1420,1421],{},"RestartSec=10\n",[469,1423,1425],{"class":471,"line":1424},11,[469,1426,1427],{},"Environment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n",[469,1429,1431],{"class":471,"line":1430},12,[469,1432,514],{"emptyLinePlaceholder":513},[469,1434,1436],{"class":471,"line":1435},13,[469,1437,1438],{},"[Install]\n",[469,1440,1442],{"class":471,"line":1441},14,[469,1443,1444],{},"WantedBy=multi-user.target\n",[434,1446,1447],{},"Habilite e inicie o serviço:",[461,1449,1451],{"className":1346,"code":1450,"language":1348,"meta":424,"style":424},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-gateway\nsudo systemctl start hermes-gateway\nsudo systemctl status hermes-gateway\n",[443,1452,1453,1462,1474,1485],{"__ignoreMap":424},[469,1454,1455,1457,1459],{"class":471,"line":472},[469,1456,927],{"class":475},[469,1458,1046],{"class":490},[469,1460,1461],{"class":490}," daemon-reload\n",[469,1463,1464,1466,1468,1471],{"class":471,"line":479},[469,1465,927],{"class":475},[469,1467,1046],{"class":490},[469,1469,1470],{"class":490}," enable",[469,1472,1473],{"class":490}," hermes-gateway\n",[469,1475,1476,1478,1480,1483],{"class":471,"line":494},[469,1477,927],{"class":475},[469,1479,1046],{"class":490},[469,1481,1482],{"class":490}," start",[469,1484,1473],{"class":490},[469,1486,1487,1489,1491,1494],{"class":471,"line":505},[469,1488,927],{"class":475},[469,1490,1046],{"class":490},[469,1492,1493],{"class":490}," status",[469,1495,1473],{"class":490},[429,1497,815],{"id":814},[434,1499,1500],{},"Neste artigo, focamos em como configurar o Hermes Agent e usar o Telegram para se comunicar com ele. Manter o Hermes Agent em execução em um servidor remoto oferece um assistente digital real que funciona 24 horas por dia, 7 dias por semana.",[831,1502,1503],{},"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 .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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":424,"searchDepth":479,"depth":494,"links":1505},[1506,1507,1512,1513,1514],{"id":875,"depth":479,"text":876},{"id":885,"depth":479,"text":886,"children":1508},[1509,1510,1511],{"id":889,"depth":494,"text":890},{"id":1055,"depth":494,"text":1056},{"id":1158,"depth":494,"text":1159},{"id":1276,"depth":479,"text":1277},{"id":1339,"depth":479,"text":1340},{"id":814,"depth":479,"text":815},[845],"2026-06-19","Instale o Hermes Agent em um VPS remoto para garantir suporte 24 horas por dia. Siga o nosso guia passo a paso e integre-o com seu próprio bot do Telegram.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002FPT-How%20to%20Setup%20Hermes%20on%20Remote%20Server.webp","Guia passo a passo para instalar o Hermes Agent em um VPS Linux e integrá-lo a um bot do Telegram.",{"schemaOrg":1521,"robots":855,"sitemap":1534},[1522],{"@type":854,"name":870,"description":1517,"image":1518,"step":1523},[1524,1528,1531],{"@type":1525,"name":890,"text":1526,"image":914,"url":1527},"HowToStep","Abra o terminal e conecte-se via SSH à sua máquina remota: Certifique-se de que os pacotes do seu servidor estejam atualizados: Adicione um novo us...","#passo-1-conectar-se-ao-seu-vps",{"@type":1525,"name":1056,"text":1529,"image":1087,"url":1530},"Execute o seguinte comando: Depois de instalado, verifique a instalação digitando: Execute `hermes setup` para configurar o Hermes Agent: Selecione...","#passo-2-instalar-o-hermes-agent",{"@type":1525,"name":1159,"text":1532,"image":1170,"url":1533},"Selecione `[2]` para usar o bot do Telegram. Acesse o `Telegram` e pesquise por 'BotFather'. Clique em `Open` para abrir o 'BotFather'. Clique em `...","#passo-3-integrao-com-o-telegram",{"lastmod":1516},{"title":1536,"description":1517,"ogTitle":870,"ogDescription":1517,"twitterTitle":870,"twitterDescription":1517},"Configuração do Hermes Agent no VPS: Guia de Bot do Telegram","pt\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",[1311,1539,1540,1541,1542],"VPS Setup","Telegram Bot","Linux VPS","AI Agent","kFF1oLcXZtGj8Oh10ngzAGRuWJX_j9kzta_KDeDZSEY",{"id":1545,"title":1546,"author":424,"body":1547,"category":2088,"date":2091,"description":2092,"extension":848,"image":2093,"imageAlt":2094,"isPublished":513,"meta":2095,"minRead":505,"navigation":513,"path":237,"seo":2099,"stem":2100,"tags":2101,"updatedAt":864,"__hash__":2105},"article\u002Fpt\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac.md","Alternar entre múltiplos perfis do Cloudflare WARP no macOS",{"type":426,"value":1548,"toc":2081},[1549,1553,1556,1563,1567,1573,1576,1579,1583,1586,1593,1609,1922,2039,2041,2044,2048,2078],[429,1550,1552],{"id":1551},"o-que-é-o-cloudflare-warp","O que é o Cloudflare WARP?",[434,1554,1555],{},"O Cloudflare WARP é um aplicativo de cliente que direciona o tráfego do dispositivo especificado através da rede global da Cloudflare, em vez de enviá-lo diretamente para a internet pública.",[434,1557,1558,1559,1562],{},"Ele cria um túnel criptografado baseado no protocolo ",[438,1560,1561],{},"WireGuard",", protegendo o tráfego do dispositivo até o data center da Cloudflare mais próximo. Políticas podem ser criadas em seu painel da Cloudflare para filtrar, registrar, inspecionar ou rotear esse tráfego de entrada.",[429,1564,1566],{"id":1565},"por-que-precisamos-do-cloudflare-warp","Por que precisamos do Cloudflare WARP?",[434,1568,1569,1570,618],{},"Para expor com segurança recursos internos—como serviços web privados ou aplicativos SaaS—a funcionários, contratados e outras partes interessadas, o cliente Cloudflare WARP atua como ponto de aplicação no lado do cliente para o ",[438,1571,1572],{},"Acesso à Rede de Confiança Zero (ZTNA)",[434,1574,1575],{},"O cliente Cloudflare WARP é instalado no laptop ou celular do usuário. Ele exige que os usuários se autentiquem e cumpram verificações específicas de integridade de segurança (como vir de uma faixa de IPs aprovada, usar um domínio de e-mail registrado ou executar um firewall ativo) antes de conceder acesso.",[434,1577,1578],{},"Ao tunelar o tráfego do dispositivo diretamente para a Cloudflare, a identidade do usuário, o dispositivo e as políticas são verificados antes que as solicitações cheguem aos recursos internos. Como resultado, os recursos internos nunca ficam expostos à internet pública, e cada solicitação é totalmente registrada e auditada.",[429,1580,1582],{"id":1581},"suporte-a-múltiplos-perfis-do-warp-em-um-único-dispositivo","Suporte a múltiplos perfis do WARP em um único dispositivo",[434,1584,1585],{},"Quando os usuários precisam alternar entre contas pessoais e corporativas da Cloudflare, ou quando os administradores de sistemas gerenciam múltiplos locatários (tenants), oferecer suporte a múltiplos perfis do WARP em um único dispositivo se torna crucial.",[434,1587,1588,1589,1592],{},"Para conseguir isso no macOS, podemos usar um arquivo de perfil MDM ",[443,1590,1591],{},".mobileconfig"," para definir e registrar os diferentes ambientes do WARP.",[732,1594,1595,1606],{},[581,1596,1597,1605],{},[451,1598,1601,1602,1604],{"href":1599,"rel":1600},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fstatic\u002Fmdm\u002Fmultiple-orgs\u002FCloudflareWARP.mobileconfig",[455],"Download a sample ",[443,1603,1591],{}," file"," diretamente da Cloudflare.",[581,1607,1608],{},"Abaixo está um exemplo de como essa configuração se parece:",[461,1610,1614],{"className":1611,"code":1612,"language":1613,"meta":424,"style":424},"language-xml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\" \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n\u003Cplist version=\"1.0\">\n\u003Cdict>\n  \u003Ckey>PayloadContent\u003C\u002Fkey>\n  \u003Carray>\n    \u003Cdict>\n      \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n      \u003Cstring>Warp Configuration\u003C\u002Fstring>\n      \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n      \u003Cstring>com.cloudflare.warp.CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n      \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n      \u003Cstring>Cloudflare Ltd.\u003C\u002Fstring>\n      \u003Ckey>PayloadType\u003C\u002Fkey>\n      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n      \u003Cinteger>1\u003C\u002Finteger>\n      \u003Ckey>configs\u003C\u002Fkey>\n      \u003Carray>\n        \u003Cdict>\n          \u003Ckey>organization\u003C\u002Fkey>\n          \u003Cstring>your-team-name-1\u003C\u002Fstring>\n          \u003Ckey>display_name\u003C\u002Fkey>\n          \u003Cstring>Team 1\u003C\u002Fstring>\n        \u003C\u002Fdict>\n        \u003Cdict>\n          \u003Ckey>organization\u003C\u002Fkey>\n          \u003Cstring>your-team-name-2\u003C\u002Fstring>\n          \u003Ckey>display_name\u003C\u002Fkey>\n          \u003Cstring>Team 2\u003C\u002Fstring>\n        \u003C\u002Fdict>\n      \u003C\u002Farray>\n    \u003C\u002Fdict>\n  \u003C\u002Farray>\n  \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n  \u003Cstring>Cloudflare WARP\u003C\u002Fstring>\n  \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n  \u003Cstring>cloudflare_warp\u003C\u002Fstring>\n  \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n  \u003Cstring>Cloudflare, Ltd.\u003C\u002Fstring>\n  \u003Ckey>PayloadRemovalDisallowed\u003C\u002Fkey>\n  \u003Cfalse\u002F>\n  \u003Ckey>PayloadScope\u003C\u002Fkey>\n  \u003Cstring>System\u003C\u002Fstring>\n  \u003Ckey>PayloadType\u003C\u002Fkey>\n  \u003Cstring>Configuration\u003C\u002Fstring>\n  \u003Ckey>PayloadUUID\u003C\u002Fkey>\n  \u003Cstring>2B7763B8-64F6-41EB-AA5E-7761651B8131\u003C\u002Fstring>\n  \u003Ckey>PayloadVersion\u003C\u002Fkey>\n  \u003Cinteger>1\u003C\u002Finteger>\n\u003C\u002Fdict>\n\u003C\u002Fplist>\n","xml",[443,1615,1616,1621,1626,1631,1636,1641,1646,1651,1656,1661,1666,1671,1676,1681,1686,1692,1698,1704,1710,1716,1722,1728,1734,1740,1746,1752,1758,1764,1769,1774,1780,1785,1791,1796,1802,1808,1814,1820,1826,1832,1838,1844,1850,1856,1862,1868,1874,1880,1886,1892,1898,1904,1910,1916],{"__ignoreMap":424},[469,1617,1618],{"class":471,"line":472},[469,1619,1620],{},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",[469,1622,1623],{"class":471,"line":479},[469,1624,1625],{},"\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\" \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n",[469,1627,1628],{"class":471,"line":494},[469,1629,1630],{},"\u003Cplist version=\"1.0\">\n",[469,1632,1633],{"class":471,"line":505},[469,1634,1635],{},"\u003Cdict>\n",[469,1637,1638],{"class":471,"line":510},[469,1639,1640],{},"  \u003Ckey>PayloadContent\u003C\u002Fkey>\n",[469,1642,1643],{"class":471,"line":517},[469,1644,1645],{},"  \u003Carray>\n",[469,1647,1648],{"class":471,"line":523},[469,1649,1650],{},"    \u003Cdict>\n",[469,1652,1653],{"class":471,"line":528},[469,1654,1655],{},"      \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[469,1657,1658],{"class":471,"line":534},[469,1659,1660],{},"      \u003Cstring>Warp Configuration\u003C\u002Fstring>\n",[469,1662,1663],{"class":471,"line":539},[469,1664,1665],{},"      \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[469,1667,1668],{"class":471,"line":1424},[469,1669,1670],{},"      \u003Cstring>com.cloudflare.warp.CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[469,1672,1673],{"class":471,"line":1430},[469,1674,1675],{},"      \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[469,1677,1678],{"class":471,"line":1435},[469,1679,1680],{},"      \u003Cstring>Cloudflare Ltd.\u003C\u002Fstring>\n",[469,1682,1683],{"class":471,"line":1441},[469,1684,1685],{},"      \u003Ckey>PayloadType\u003C\u002Fkey>\n",[469,1687,1689],{"class":471,"line":1688},15,[469,1690,1691],{},"      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n",[469,1693,1695],{"class":471,"line":1694},16,[469,1696,1697],{},"      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[469,1699,1701],{"class":471,"line":1700},17,[469,1702,1703],{},"      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[469,1705,1707],{"class":471,"line":1706},18,[469,1708,1709],{},"      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[469,1711,1713],{"class":471,"line":1712},19,[469,1714,1715],{},"      \u003Cinteger>1\u003C\u002Finteger>\n",[469,1717,1719],{"class":471,"line":1718},20,[469,1720,1721],{},"      \u003Ckey>configs\u003C\u002Fkey>\n",[469,1723,1725],{"class":471,"line":1724},21,[469,1726,1727],{},"      \u003Carray>\n",[469,1729,1731],{"class":471,"line":1730},22,[469,1732,1733],{},"        \u003Cdict>\n",[469,1735,1737],{"class":471,"line":1736},23,[469,1738,1739],{},"          \u003Ckey>organization\u003C\u002Fkey>\n",[469,1741,1743],{"class":471,"line":1742},24,[469,1744,1745],{},"          \u003Cstring>your-team-name-1\u003C\u002Fstring>\n",[469,1747,1749],{"class":471,"line":1748},25,[469,1750,1751],{},"          \u003Ckey>display_name\u003C\u002Fkey>\n",[469,1753,1755],{"class":471,"line":1754},26,[469,1756,1757],{},"          \u003Cstring>Team 1\u003C\u002Fstring>\n",[469,1759,1761],{"class":471,"line":1760},27,[469,1762,1763],{},"        \u003C\u002Fdict>\n",[469,1765,1767],{"class":471,"line":1766},28,[469,1768,1733],{},[469,1770,1772],{"class":471,"line":1771},29,[469,1773,1739],{},[469,1775,1777],{"class":471,"line":1776},30,[469,1778,1779],{},"          \u003Cstring>your-team-name-2\u003C\u002Fstring>\n",[469,1781,1783],{"class":471,"line":1782},31,[469,1784,1751],{},[469,1786,1788],{"class":471,"line":1787},32,[469,1789,1790],{},"          \u003Cstring>Team 2\u003C\u002Fstring>\n",[469,1792,1794],{"class":471,"line":1793},33,[469,1795,1763],{},[469,1797,1799],{"class":471,"line":1798},34,[469,1800,1801],{},"      \u003C\u002Farray>\n",[469,1803,1805],{"class":471,"line":1804},35,[469,1806,1807],{},"    \u003C\u002Fdict>\n",[469,1809,1811],{"class":471,"line":1810},36,[469,1812,1813],{},"  \u003C\u002Farray>\n",[469,1815,1817],{"class":471,"line":1816},37,[469,1818,1819],{},"  \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[469,1821,1823],{"class":471,"line":1822},38,[469,1824,1825],{},"  \u003Cstring>Cloudflare WARP\u003C\u002Fstring>\n",[469,1827,1829],{"class":471,"line":1828},39,[469,1830,1831],{},"  \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[469,1833,1835],{"class":471,"line":1834},40,[469,1836,1837],{},"  \u003Cstring>cloudflare_warp\u003C\u002Fstring>\n",[469,1839,1841],{"class":471,"line":1840},41,[469,1842,1843],{},"  \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[469,1845,1847],{"class":471,"line":1846},42,[469,1848,1849],{},"  \u003Cstring>Cloudflare, Ltd.\u003C\u002Fstring>\n",[469,1851,1853],{"class":471,"line":1852},43,[469,1854,1855],{},"  \u003Ckey>PayloadRemovalDisallowed\u003C\u002Fkey>\n",[469,1857,1859],{"class":471,"line":1858},44,[469,1860,1861],{},"  \u003Cfalse\u002F>\n",[469,1863,1865],{"class":471,"line":1864},45,[469,1866,1867],{},"  \u003Ckey>PayloadScope\u003C\u002Fkey>\n",[469,1869,1871],{"class":471,"line":1870},46,[469,1872,1873],{},"  \u003Cstring>System\u003C\u002Fstring>\n",[469,1875,1877],{"class":471,"line":1876},47,[469,1878,1879],{},"  \u003Ckey>PayloadType\u003C\u002Fkey>\n",[469,1881,1883],{"class":471,"line":1882},48,[469,1884,1885],{},"  \u003Cstring>Configuration\u003C\u002Fstring>\n",[469,1887,1889],{"class":471,"line":1888},49,[469,1890,1891],{},"  \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[469,1893,1895],{"class":471,"line":1894},50,[469,1896,1897],{},"  \u003Cstring>2B7763B8-64F6-41EB-AA5E-7761651B8131\u003C\u002Fstring>\n",[469,1899,1901],{"class":471,"line":1900},51,[469,1902,1903],{},"  \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[469,1905,1907],{"class":471,"line":1906},52,[469,1908,1909],{},"  \u003Cinteger>1\u003C\u002Finteger>\n",[469,1911,1913],{"class":471,"line":1912},53,[469,1914,1915],{},"\u003C\u002Fdict>\n",[469,1917,1919],{"class":471,"line":1918},54,[469,1920,1921],{},"\u003C\u002Fplist>\n",[732,1923,1924,1935,1948,1958,1964,1982,1994,2014,2030],{},[581,1925,1926,1927,1930,1931,1934],{},"Substitua ",[443,1928,1929],{},"your-team-name-1"," e ",[443,1932,1933],{},"your-team-name-2"," pelos seus respectivos nomes de equipe do Cloudflare Zero Trust.",[581,1936,1937,1938,1941,1942,1945,1946,618],{},"Execute o comando ",[443,1939,1940],{},"uuidgen"," no seu Terminal para gerar UUIDs exclusivos e use-os para substituir os valores de espaço reservado ",[443,1943,1944],{},"PayloadUUID"," no arquivo ",[443,1947,1591],{},[581,1949,1950,1951,1954,1955,1957],{},"Certifique-se de que a string ",[443,1952,1953],{},"PayloadIdentifier"," também contenha o ",[443,1956,1944],{}," atualizado para manter o perfil distinto.",[581,1959,1960,1961,1963],{},"Salve o arquivo ",[443,1962,1591],{}," editado.",[581,1965,1966,1967,1970,1971,1974,1975,1978],{},"Abra as ",[438,1968,1969],{},"Ajustes do Sistema"," no seu Mac, pesquise por ",[438,1972,1973],{},"Perfis"," e selecione-o.",[1976,1977],"br",{},[568,1979],{"alt":1980,"src":1981},"Painel de Perfis nos Ajustes do Sistema do macOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-system-settings-profiles.webp",[581,1983,1183,1984,1987,1988,1990],{},[438,1985,1986],{},"Instalar, visualizar ou remover..."," para começar a adicionar o seu novo perfil de configuração.",[1976,1989],{},[568,1991],{"alt":1992,"src":1993},"Botão para instalar, visualizar ou remover perfis no macOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-profiles-view-remove.webp",[581,1995,1996,1997,2000,2001,2003,2004,2006,2010],{},"Clique no ícone ",[438,1998,1999],{},"+"," (mais) no canto primeiro esquerdo e selecione o arquivo ",[443,2002,1591],{}," salvo.",[1976,2005],{},[568,2007],{"alt":2008,"src":2009},"Botão de mais (+) nos perfis do macOS para adicionar um novo perfil","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-profiles-add-profile.webp",[568,2011],{"alt":2012,"src":2013},"Selecionando o arquivo .mobileconfig no macOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-select-mobileconfig-file.webp",[581,2015,1162,2016,2019,2020,2023,2024,2026],{},[438,2017,2018],{},"Cloudflare WARP"," e clique em ",[438,2021,2022],{},"Instalar"," para aplicar la configuração.",[1976,2025],{},[568,2027],{"alt":2028,"src":2029},"Confirmando a instalação do perfil do Cloudflare WARP no macOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-install-cloudflare-warp-profile.webp",[581,2031,2032,2033,2035],{},"Reinicie o cliente Cloudflare WARP. Agora você deverá ver o alternador de múltiplos perfis na interface do usuário:",[1976,2034],{},[568,2036],{"alt":2037,"src":2038},"Cliente Cloudflare WARP com seletor de múltiplos perfis no macOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fcloudflare-warp-multi-profile-switcher.webp",[429,2040,815],{"id":814},[434,2042,2043],{},"O cliente Cloudflare WARP atua como um ponto de segurança crítico nos dispositivos dos usuários, tornando o Acesso à Rede de Confiança Zero robusto e altamente prático. Manter os recursos internos isolados da internet pública garante que cada tentativa de conexão seja autenticada, avaliada e auditada com segurança.",[429,2045,2047],{"id":2046},"referências","Referências",[732,2049,2050,2057,2064,2071],{},[581,2051,2052],{},[451,2053,2056],{"href":2054,"rel":2055},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002F#prepare-file-for-mdm-deployment",[455],"Managed Deployment Preparation",[581,2058,2059],{},[451,2060,2063],{"href":2061,"rel":2062},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002Fswitch-organizations\u002F",[455],"Switch Between Zero Trust Organizations",[581,2065,2066],{},[451,2067,2070],{"href":2068,"rel":2069},"https:\u002F\u002Fblog.cloudflare.com\u002Fintroducing-warp-connector-paving-the-path-to-any-to-any-connectivity-2\u002F",[455],"Introducing WARP Connector: Paving the Path to Any-to-Any Connectivity",[581,2072,2073],{},[451,2074,2077],{"href":2075,"rel":2076},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002F",[455],"Cloudflare One Client Documentation",[831,2079,2080],{},"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":424,"searchDepth":479,"depth":494,"links":2082},[2083,2084,2085,2086,2087],{"id":1551,"depth":479,"text":1552},{"id":1565,"depth":479,"text":1566},{"id":1581,"depth":479,"text":1582},{"id":814,"depth":479,"text":815},{"id":2046,"depth":479,"text":2047},[2089,2090],"security","cloudflare","2026-07-04","Configure e alterne entre múltiplas organizações do Cloudflare WARP no macOS com um arquivo .mobileconfig. Guia MDM completo para administradores de TI.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002FPT-Switch-Between-Multiple-Cloudflare-WARP-Orgs-on-Mac.webp","Configurar múltiplos perfis do Cloudflare WARP no macOS",{"schemaOrg":2096,"robots":855,"sitemap":2098},[2097],{"@type":854,"headline":1546,"description":2092},{"lastmod":2091},{"title":2094,"description":2092,"ogTitle":1546,"ogDescription":2092,"twitterTitle":1546,"twitterDescription":2092},"pt\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",[2102,2018,2103,2104],"macOS","MDM","Zero Trust","EwH2jVxo0k3L6vZD6bfnIxGUBZQQEsBLKPw_paSz3AA",[2107,3343,4213],{"id":2108,"title":2109,"author":424,"body":2110,"category":3304,"date":3307,"description":3308,"extension":848,"image":3309,"imageAlt":3310,"isPublished":513,"meta":3311,"minRead":1424,"navigation":513,"path":355,"seo":3336,"stem":3338,"tags":3339,"updatedAt":864,"__hash__":3342},"article\u002Fpt\u002Farticle\u002Fbringing-buzz-to-deepseek-harness.md","Conectar DeepSeek Harness ao Buzz: O Gateway de Nostr",{"type":426,"value":2111,"toc":3288},[2112,2118,2139,2147,2150,2154,2160,2202,2205,2263,2267,2274,2541,2544,2548,2552,2558,2562,2575,2579,2589,2636,2643,2647,2650,2682,2686,2691,2733,2741,2747,2756,2762,2793,2806,2810,2819,2850,2872,2920,2927,2932,2938,2945,2951,2956,2963,2977,2983,2992,3030,3033,3039,3046,3052,3056,3059,3208,3212,3246,3250,3256,3259,3285],[434,2113,2114],{},[568,2115],{"alt":2116,"src":2117},"Visão geral do gateway de mensagens DeepSeek Harness conectado a um canal do Block Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-nostr-gateway-overview.webp",[434,2119,2120,2121,2128,2129,2134,2135,618],{},"O plugin do DeepSeek Harness (DSH), ",[438,2122,2123],{},[451,2124,2127],{"href":2125,"rel":2126},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway",[455],"dsh-message-gateway",", estende o assistente DeepSeek Harness a múltiplas plataformas de mensagens, como Discord, Telegram e WeChat. O repositório do plugin foi bifurcado e estendido para adicionar a plataforma ",[438,2130,2131],{},[451,2132,2133],{"href":383},"Como auto-hospedar o Buzz do Block: Espaço para agentes de IA"," à lista. O repositório bifurcado está disponível no GitHub em ",[451,2136,2137],{"href":2137,"rel":2138},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway",[455],[2140,2141],"article-card",{"description":2142,"image":2143,"image-alt":2144,"label":2145,"min-read":2146,"title":2133,"to":383},"Aprenda a auto-hospedar o relay Buzz da Block em um VPS Linux com Cloudflare. Crie um espaço de trabalho seguro baseado em Nostr para humanos e agentes IA.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002FPT-Self-Hosting-Buzz-As-The-Workspace-Where-AI-Agents-Become-Colleagues.webp","Um cartão tecnológico premium de 16:9 com detalhes em azul profundo e laranja ilustrando como auto-hospedar o relay Buzz do Block em um VPS Ubuntu, apresentando um painel glassmorphic limpo com tipografia centrada.","Guia de pré-requisitos","12",[434,2148,2149],{},"O assistente DSH ingressa em um relay do Buzz como membro, recebe mensagens diretas (DMs) e mensagens de canal onde é @mencionado, e responde pelo mesmo pipeline de agentes por chat utilizado na interface Web.",[429,2151,2153],{"id":2152},"arquitetura-do-plugin-dsh-message-gateway","Arquitetura do plugin dsh-message-gateway",[434,2155,2156,2157,2159],{},"A arquitetura do plugin ",[438,2158,2127],{}," é dividida em duas camadas principais:",[732,2161,2162,2192],{},[581,2163,2164,2167,2168,2171,2172,2175,2176,2179,2180,2183,2184,2187,2188,2191],{},[438,2165,2166],{},"Host"," (Node): ",[443,2169,2170],{},"gateway-store"," (credenciais em ",[443,2173,2174],{},"~\u002F.dsh\u002Fgateway.json","), ",[443,2177,2178],{},"platforms.ts"," (definições de plataformas e testes de conexão), ",[443,2181,2182],{},"routes.ts"," (endpoints ",[443,2185,2186],{},"\u002Fgateway\u002F*",") e ",[443,2189,2190],{},"bridge-manager.ts"," (as pontes residentes: sessões de agentes independentes por chat e respostas em streaming).",[581,2193,2194,2197,2198,2201],{},[438,2195,2196],{},"Cliente"," (navegador): a página \"",[438,2199,2200],{},"Message platforms","\" na barra lateral, onde você salva credenciais, testa conexões e monitora o status do serviço.",[434,2203,2204],{},"Adicionar uma nova plataforma envolve as seguintes etapas:",[578,2206,2207,2224,2238],{},[581,2208,2209,2212,2213,2216,2217,2220,2221,618],{},[438,2210,2211],{},"Uma classe de ponte (bridge)",": implementando os métodos ",[443,2214,2215],{},"start\u002Fstop\u002Fstatus"," e o callback ",[443,2218,2219],{},"onText(text, frame)",", espelhando o padrão de ",[443,2222,2223],{},"wecom-bridge.ts",[581,2225,2226,2229,2230,2233,2234,2237],{},[438,2227,2228],{},"Integração no bridge-manager",": reaproveitar o pipeline existente por conversa (",[443,2231,2232],{},"ensureAgentForKey"," + ",[443,2235,2236],{},"pendingMap",") e conectar o coletor de respostas da plataforma.",[581,2239,2240,2243,2244,1930,2247,2250,2251,2254,2255,2258,2259,2262],{},[438,2241,2242],{},"Persistência e rotas",": em ",[443,2245,2246],{},"\u002Fgateway\u002Fsave",[443,2248,2249],{},"\u002Fgateway\u002Fdelete",": ",[438,2252,2253],{},"salvar credenciais inicia a ponte, excluí-las a encerra"," — complementado por uma flag ",[443,2256,2257],{},"autoStartXxx"," para que o ",[443,2260,2261],{},"dsh web"," reconecte automaticamente no boot.",[429,2264,2266],{"id":2265},"implementação-da-ponte-do-buzz-protocolo-nostr-e-ciclo-de-vida-de-eventos","Implementação da ponte do Buzz: Protocolo Nostr e ciclo de vida de eventos",[434,2268,2269,2270,2273],{},"O ",[438,2271,2272],{},"DeepSeek Harness"," foi utilizado para implementar a ponte do Buzz. A implementação atende rigorosamente às seguintes especificações do protocolo Nostr:",[2275,2276,2277,2303],"table",{},[2278,2279,2280],"thead",{},[2281,2282,2283,2289],"tr",{},[2284,2285,2286],"th",{},[438,2287,2288],{},"Transporte",[2284,2290,2291,2292,2295,2296,2299,2300],{},"Um único WebSocket autenticado via NIP-42; padrão ",[443,2293,2294],{},"ws:\u002F\u002Flocalhost:3000","; ",[443,2297,2298],{},"http(s):\u002F\u002F"," é normalizado para ",[443,2301,2302],{},"ws(s):\u002F\u002F",[2304,2305,2306,2325,2353,2370,2392,2416,2441,2454,2467,2486,2503,2517],"tbody",{},[2281,2307,2308,2314],{},[2309,2310,2311],"td",{},[438,2312,2313],{},"Autenticação",[2309,2315,2316,2317,2320,2321,2324],{},"Evento AUTH ",[443,2318,2319],{},"kind 22242",", tags ",[443,2322,2323],{},"[[\"relay\", url], [\"challenge\", challenge]]",", conteúdo vazio, assinado com a chave do agente",[2281,2326,2327,2332],{},[2309,2328,2329],{},[438,2330,2331],{},"Inscrições",[2309,2333,2334,2250,2337,2340,2341,2344,2345,2348,2349,2352],{},[438,2335,2336],{},"Por canal",[443,2338,2339],{},"REQ {\"kinds\":[9], \"#h\":[\u003Cuuid>]}"," — um REQ por canal. Um REQ global ",[443,2342,2343],{},"kinds:[9]"," recebe EOSE mas nunca distribui eventos; filtro ",[443,2346,2347],{},"#h"," multivalorado ",[438,2350,2351],{},"não"," funciona",[2281,2354,2355,2360],{},[2309,2356,2357],{},[438,2358,2359],{},"Descoberta",[2309,2361,2362,2365,2366,2369],{},[443,2363,2364],{},"REQ {kinds:[39000]}"," histórico para metadados de canal (",[443,2367,2368],{},"type == \"dm\""," marca canal de mensagem direta)",[2281,2371,2372,2377],{},[2309,2373,2374],{},[438,2375,2376],{},"Associação",[2309,2378,2379,2382,2383,1999,2385,2388,2389],{},[443,2380,2381],{},"REQ {kinds:[44100,44101], \"#p\":[nossa pubkey], since: now-60s}"," ao vivo — 44100 = adição, 44101 = remoção, com ",[443,2384,434],{},[443,2386,2387],{},"h","; atualiza inscrições ",[438,2390,2391],{},"sem reconectar",[2281,2393,2394,2399],{},[2309,2395,2396],{},[438,2397,2398],{},"Eventos de chat",[2309,2400,2401,2404,2405,2408,2409,2412,2413],{},[443,2402,2403],{},"kind 9"," com tags ",[443,2406,2407],{},"[\"h\", canal]",", opcional ",[443,2410,2411],{},"[\"e\", replyTo]",", ",[443,2414,2415],{},"[\"p\", menção]",[2281,2417,2418,2423],{},[2309,2419,2420],{},[438,2421,2422],{},"Edições in-place",[2309,2424,2425,2428,2429,2233,2431,2434,2435,2437,2438,2440],{},[443,2426,2427],{},"kind 40003"," com ",[443,2430,2387],{},[443,2432,2433],{},"e","→alvo; substituição de conteúdo; limite do relay de 64 KB → manter payloads ≤ 60.000 B; respostas longas são fragmentadas — chunk 0 na edição, o restante adicionado como mensagens ",[443,2436,2403],{}," encadeadas (",[443,2439,2433],{},"→raiz)",[2281,2442,2443,2448],{},[2309,2444,2445],{},[438,2446,2447],{},"Quadros CLOSED",[2309,2449,2450,2453],{},[443,2451,2452],{},"auth-required"," antes de AUTH é normal durante o bootstrap (completar AUTH e reabrir inscrições); após AUTH → retentativa delimitada (3 tentativas, backoff 0\u002F1\u002F2 s); reconexão reconstrói tudo",[2281,2455,2456,2461],{},[2309,2457,2458],{},[438,2459,2460],{},"Limites do relay",[2309,2462,2463,2464],{},"≤ 2000 eventos históricos por inscrição, ordenados do mais recente para o mais antigo, mesmo utilizando ",[443,2465,2466],{},"since",[2281,2468,2469,2474],{},[2309,2470,2471],{},[438,2472,2473],{},"Filtro de menções",[2309,2475,2476,2477,2479,2480,2482,2483,2485],{},"Processa ",[443,2478,2403],{}," de entrada apenas quando: (a) tag ",[443,2481,434],{}," inclui nossa pubkey, (b) o canal é DM, ou (c) a raiz ",[443,2484,2433],{}," pertence ao nosso agente. Ignora a própria pubkey (anti-loop)",[2281,2487,2488,2493],{},[2309,2489,2490],{},[438,2491,2492],{},"Menções de saída",[2309,2494,2495,2496,2499,2500,2502],{},"Texto publicado sem alterações — o relay não valida tokens ",[443,2497,2498],{},"@","; tags ",[443,2501,434],{}," incluem o autor de origem mais até 7 outras pubkeys mencionadas (máx. 8)",[2281,2504,2505,2510],{},[2309,2506,2507],{},[438,2508,2509],{},"Mensagens diretas",[2309,2511,2512,2513,2516],{},"Canais de texto simples no escopo do relay (metadados ",[443,2514,2515],{},"type: \"dm\"",") — sem criptografia NIP-04\u002F44 nesta ponte",[2281,2518,2519,2524],{},[2309,2520,2521],{},[438,2522,2523],{},"Anexos (entrada)",[2309,2525,2526,2527,2530,2531,2412,2534,2412,2537,2540],{},"NIP-92 ",[443,2528,2529],{},"imeta"," (",[443,2532,2533],{},"url",[443,2535,2536],{},"sha256",[443,2538,2539],{},"m",") → download http(s), verificação de SHA-256, limite de 20 MB, máx. 4 por mensagem; imagens de saída não suportadas",[434,2542,2543],{},"O diagrama abaixo ilustra o fluxo de inicialização (bootstrap) da ponte do Buzz:",[568,2545],{"src":2546,"alt":2547},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-bootstrap.webp","Diagrama de sequência ilustrando o processo de bootstrap e autenticação NIP-42 da ponte Buzz",[573,2549,2551],{"id":2550},"streaming-em-tempo-real-via-edições-in-place-do-nostr-kind-40003","Streaming em tempo real via edições in-place do Nostr (Kind 40003)",[434,2553,2554,2555,487],{},"Como o Nostr não possui indicador nativo de digitação e seus eventos são estritamente cumulativos (append-only), a ponte do Buzz ",[438,2556,2557],{},"simula streaming por meio de edições in-place",[568,2559],{"src":2560,"alt":2561},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-reply.webp","Diagrama do fluxo de edição in-place simulando respostas em streaming com eventos kind 40003",[732,2563,2564],{},[581,2565,2566],{},[612,2567,2568,2569,2571,2572,2574],{},"A ponte do Buzz publica primeiro um evento placeholder ",[443,2570,2403],{},", depois o reescreve progressivamente com edições in-place ",[443,2573,2427],{}," com taxa controlada e grava a edição final quando o agente conclui a resposta. Esse mecanismo segue o mesmo padrão consagrado das pontes do Telegram e Discord.",[573,2576,2578],{"id":2577},"conexão-de-workspaces-do-deepseek-harness-via-comandos-de-chat","Conexão de workspaces do DeepSeek Harness via comandos de chat",[434,2580,2581,2582,2530,2585,2588],{},"O recurso de \"Workspaces\" na interface Web do DSH é gerenciado pelo serviço ",[443,2583,2584],{},"workspaceRegistry",[443,2586,2587],{},"@deepseek-ai\u002Fdsh-workspace","):",[461,2590,2594],{"className":2591,"code":2592,"language":2593,"meta":424,"style":424},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const existing = await ctx.workspaceRegistry.resolveByPath(request.path);\n","typescript",[443,2595,2596],{"__ignoreMap":424},[469,2597,2598,2602,2605,2608,2612,2615,2617,2619,2621,2625,2628,2630,2633],{"class":471,"line":472},[469,2599,2601],{"class":2600},"spNyl","const",[469,2603,2604],{"class":972}," existing ",[469,2606,2607],{"class":486},"=",[469,2609,2611],{"class":2610},"s7zQu"," await",[469,2613,2614],{"class":972}," ctx",[469,2616,618],{"class":486},[469,2618,2584],{"class":972},[469,2620,618],{"class":486},[469,2622,2624],{"class":2623},"s2Zo4","resolveByPath",[469,2626,2627],{"class":972},"(request",[469,2629,618],{"class":486},[469,2631,2632],{"class":972},"path)",[469,2634,2635],{"class":486},";\n",[434,2637,2638,2639,2642],{},"A ponte do Buzz disponibiliza o comando de chat ",[443,2640,2641],{},"\u002Fworkspace \u003Cpasta>",", que registra uma pasta existente no DSH. Qualquer nova sessão criada pelo gateway é anexada a essa pasta e exibida na interface Web.",[568,2644],{"src":2645,"alt":2646},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace.webp","Arquitetura do registro de espaços de trabalho do DeepSeek Harness a partir de comandos de chat",[434,2648,2649],{},"Três regras de projeto essenciais:",[732,2651,2652,2662,2672],{},[581,2653,2654,2657,2658,2661],{},[438,2655,2656],{},"Mudar de pasta = nova sessão."," O valor de ",[443,2659,2660],{},"cwd"," é gravado no cabeçalho da sessão no momento da criação e não pode ser alterado posteriormente.",[581,2663,2664,2667,2668,2671],{},[438,2665,2666],{},"A pasta deve existir previamente."," O método ",[443,2669,2670],{},"create"," rejeita caminhos inexistentes.",[581,2673,2674,2677,2678,2681],{},[438,2675,2676],{},"Comando com sensibilidade de segurança."," Toda sessão opera sob uma política de ",[438,2679,2680],{},"auto-aprovação",", concedendo acesso aos arquivos da pasta de destino.",[429,2683,2685],{"id":2684},"guia-passo-a-passo-de-instalação-e-configuração","Guia passo a passo de instalação e configuração",[578,2687,2688],{},[581,2689,2690],{},"Execute os seguintes comandos no terminal:",[461,2692,2694],{"className":896,"code":2693,"language":898,"meta":424,"style":424},"dsh plugin --profile web add https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway.git\n\n# Start DSH web\ndsh web\n",[443,2695,2696,2716,2720,2726],{"__ignoreMap":424},[469,2697,2698,2701,2704,2707,2710,2713],{"class":471,"line":472},[469,2699,2700],{"class":475},"dsh",[469,2702,2703],{"class":490}," plugin",[469,2705,2706],{"class":490}," --profile",[469,2708,2709],{"class":490}," web",[469,2711,2712],{"class":490}," add",[469,2714,2715],{"class":490}," https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway.git\n",[469,2717,2718],{"class":471,"line":479},[469,2719,514],{"emptyLinePlaceholder":513},[469,2721,2722],{"class":471,"line":494},[469,2723,2725],{"class":2724},"sHwdD","# Start DSH web\n",[469,2727,2728,2730],{"class":471,"line":505},[469,2729,2700],{"class":475},[469,2731,2732],{"class":490}," web\n",[578,2734,2735],{"start":479},[581,2736,2737,2738,2740],{},"Assim que a interface Web do DSH abrir no navegador, clique no ícone \"",[438,2739,2200],{},"\":",[434,2742,2743],{},[568,2744],{"alt":2745,"src":2746},"Barra lateral da interface Web do DeepSeek Harness destacando o menu Message platforms","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-web-ui-message-platforms-sidebar-icon.webp",[578,2748,2749],{"start":494},[581,2750,2751,2752,2755],{},"Selecione \"",[438,2753,2754],{},"Buzz","\" no painel esquerdo:",[434,2757,2758],{},[568,2759],{"alt":2760,"src":2761},"Painel de configurações da ponte Buzz no gateway de mensagens do DeepSeek Harness","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-message-gateway-buzz-config-panel.webp",[578,2763,2764,2775,2786],{"start":505},[581,2765,2766,2767,2770,2771,2774],{},"Clique em \"",[438,2768,2769],{},"Generate keypair","\" para gerar o par de chaves Nostr. Guarde a chave pública ",[443,2772,2773],{},"npub"," em local seguro.",[581,2776,2777,2778,2781,2782,2785],{},"Preencha a ",[438,2779,2780],{},"Relay URL"," e os ",[438,2783,2784],{},"Channels"," (a lista autorizada de UUIDs dos canais que serão assinados).",[581,2787,2788,2789,2792],{},"Clique no botão \"",[438,2790,2791],{},"Save","\".",[434,2794,2795,2796,2799,2800,2803,2804,618],{},"Ao salvar o formulário, as credenciais são armazenadas e ",[438,2797,2798],{},"a ponte é iniciada",". A chave privada ",[443,2801,2802],{},"nsec"," é protegida como segredo e gravada exclusivamente em ",[443,2805,2174],{},[573,2807,2809],{"id":2808},"registro-do-par-de-chaves-do-agente-no-relay-nostr-do-buzz","Registro do par de chaves do agente no relay Nostr do Buzz",[434,2811,2812,2815,2816,2818],{},[438,2813,2814],{},"Adicione o assistente DSH ao relay como membro."," Utilize a chave ",[443,2817,2773],{}," gerada na etapa anterior:",[461,2820,2822],{"className":896,"code":2821,"language":898,"meta":424,"style":424},"docker compose exec relay buzz-admin add-member --pubkey npub123123123\n",[443,2823,2824],{"__ignoreMap":424},[469,2825,2826,2829,2832,2835,2838,2841,2844,2847],{"class":471,"line":472},[469,2827,2828],{"class":475},"docker",[469,2830,2831],{"class":490}," compose",[469,2833,2834],{"class":490}," exec",[469,2836,2837],{"class":490}," relay",[469,2839,2840],{"class":490}," buzz-admin",[469,2842,2843],{"class":490}," add-member",[469,2845,2846],{"class":490}," --pubkey",[469,2848,2849],{"class":490}," npub123123123\n",[434,2851,2852,2855,2856,2859,2860,2863,2864,2867,2868,2871],{},[438,2853,2854],{},"Adicione o assistente a um canal específico."," Apenas registrar o membro no relay não o torna visível nem pesquisável nos canais. Para adicioná-lo via ",[443,2857,2858],{},"buzz-cli",", lembre-se de que o parâmetro ",[443,2861,2862],{},"--pubkey"," deve estar no formato ",[438,2865,2866],{},"HEX",", e não npub (o comando ",[443,2869,2870],{},"buzz-admin add-member"," exibe a chave HEX correspondente):",[461,2873,2875],{"className":896,"code":2874,"language":898,"meta":424,"style":424},"buzz channels add-member --channel \u003CCHANNEL_UUID> --pubkey \u003CAGENT_HEX> --role member\n",[443,2876,2877],{"__ignoreMap":424},[469,2878,2879,2882,2885,2887,2890,2893,2896,2899,2902,2904,2906,2909,2912,2914,2917],{"class":471,"line":472},[469,2880,2881],{"class":475},"buzz",[469,2883,2884],{"class":490}," channels",[469,2886,2843],{"class":490},[469,2888,2889],{"class":490}," --channel",[469,2891,2892],{"class":486}," \u003C",[469,2894,2895],{"class":490},"CHANNEL_UUI",[469,2897,2898],{"class":972},"D",[469,2900,2901],{"class":486},">",[469,2903,2846],{"class":490},[469,2905,2892],{"class":486},[469,2907,2908],{"class":490},"AGENT_HE",[469,2910,2911],{"class":972},"X",[469,2913,2901],{"class":486},[469,2915,2916],{"class":490}," --role",[469,2918,2919],{"class":490}," member\n",[2140,2921],{"description":2922,"image":2143,"image-alt":2144,"label":2923,"min-read":2924,"title":2925,"to":2926},"Instruções passo a passo para instalar e configurar o buzz-cli para gerir canais Nostr, chaves de membros e permissões de agentes de IA.","Guia da CLI","5","Como instalar e usar o buzz-cli","\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#install-buzz-cli",[434,2928,2929,2930,487],{},"Atualize o perfil do assistente no relay Nostr definindo um nome amigável com o ",[443,2931,2858],{},[434,2933,2934],{},[568,2935],{"alt":2936,"src":2937},"Atualização do nome do assistente DeepSeek Harness no relay Nostr usando buzz-cli","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-assistant-buzz-cli-profile-update.webp",[434,2939,2940,2941,2944],{},"Envie uma saudação ",[438,2942,2943],{},"Wave"," (a saudação padrão de DM do Buzz) para o assistente. O retorno confirma a operação:",[434,2946,2947],{},[568,2948],{"alt":2949,"src":2950},"Teste de conexão enviando uma saudação Wave por DM para o assistente DeepSeek Harness no Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-dm-wave-greeting-reply.webp",[434,2952,2953],{},[612,2954,2955],{},"Enviando uma Wave por mensagem direta para o assistente DSH — a ponte está ativa.",[573,2957,2959,2960],{"id":2958},"habilitando-o-acesso-a-pastas-locais-com-workspace","Habilitando o acesso a pastas locais com ",[443,2961,2962],{},"\u002Fworkspace",[434,2964,2965,2966,2969,2970,2973,2974,2976],{},"Como a configuração ",[443,2967,2968],{},"allowWorkspace"," vem desativada (",[443,2971,2972],{},"false",") por padrão, o comando ",[443,2975,2962],{}," será inicialmente recusado:",[434,2978,2979],{},[568,2980],{"alt":2981,"src":2982},"Notificação de erro mostrando a rejeição do comando workspace com allowWorkspace desativado","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace-command-rejected-error.webp",[434,2984,2985,2986,2989,2990,487],{},"Ative a funcionalidade em ",[443,2987,2988],{},"~\u002F.dsh\u002Fprofiles\u002Fweb\u002Fcordis.patch.yml"," e reinicie o ",[443,2991,2261],{},[461,2993,2997],{"className":2994,"code":2995,"language":2996,"meta":424,"style":424},"language-yml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","- id: ui-message-gateway\n  config:\n    allowWorkspace: true\n","yml",[443,2998,2999,3012,3019],{"__ignoreMap":424},[469,3000,3001,3004,3007,3009],{"class":471,"line":472},[469,3002,3003],{"class":486},"-",[469,3005,3006],{"class":482}," id",[469,3008,487],{"class":486},[469,3010,3011],{"class":490}," ui-message-gateway\n",[469,3013,3014,3017],{"class":471,"line":479},[469,3015,3016],{"class":482},"  config",[469,3018,1130],{"class":486},[469,3020,3021,3024,3026],{"class":471,"line":494},[469,3022,3023],{"class":482},"    allowWorkspace",[469,3025,487],{"class":486},[469,3027,3029],{"class":3028},"sfNiH"," true\n",[434,3031,3032],{},"Após reiniciar:",[434,3034,3035],{},[568,3036],{"alt":3037,"src":3038},"Mensagem de confirmação de sucesso após executar o comando de registro de workspace no Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace-command-success-confirmation.webp",[434,3040,3041,3042,3045],{},"Dica importante: o sistema presume que a pasta do workspace (",[443,3043,3044],{},"TechVoyage"," nas capturas) esteja no diretório padrão do usuário. Caso contrário, informe o caminho absoluto. Qualquer nova sessão criada sob este workspace pelo Buzz também aparecerá na interface Web do DeepSeek Harness.",[434,3047,3048],{},[568,3049],{"alt":3050,"src":3051},"Interface Web do DeepSeek Harness exibindo a sessão de workspace sincronizada do Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-web-ui-synced-workspace-session.webp",[573,3053,3055],{"id":3054},"comandos-disponíveis-no-buzz","Comandos disponíveis no Buzz",[434,3057,3058],{},"Todos os comandos disponíveis nas demais plataformas suportadas funcionam normalmente no Buzz:",[2275,3060,3061,3071],{},[2278,3062,3063],{},[2281,3064,3065,3068],{},[2284,3066,3067],{},"Comando",[2284,3069,3070],{},"O que faz",[2304,3072,3073,3083,3093,3103,3113,3123,3133,3143,3152,3172,3191],{},[2281,3074,3075,3080],{},[2309,3076,3077],{},[443,3078,3079],{},"\u002Fworkspace \u003Cfolder>",[2309,3081,3082],{},"Registra uma pasta existente como o workspace da conversa (requer habilitação nas configurações)",[2281,3084,3085,3090],{},[2309,3086,3087],{},[443,3088,3089],{},"\u002Fhelp",[2309,3091,3092],{},"Lista os comandos disponíveis",[2281,3094,3095,3100],{},[2309,3096,3097],{},[443,3098,3099],{},"\u002Ftime",[2309,3101,3102],{},"Mostra a hora atual do sistema",[2281,3104,3105,3110],{},[2309,3106,3107],{},[443,3108,3109],{},"\u002Fnew",[2309,3111,3112],{},"Inicia uma nova sessão de conversa limpa",[2281,3114,3115,3120],{},[2309,3116,3117],{},[443,3118,3119],{},"\u002Fclear",[2309,3121,3122],{},"Limpa o histórico da conversa atual",[2281,3124,3125,3130],{},[2309,3126,3127],{},[443,3128,3129],{},"\u002Fstatus",[2309,3131,3132],{},"Exibe o status operacional da ponte",[2281,3134,3135,3140],{},[2309,3136,3137],{},[443,3138,3139],{},"\u002Fstats",[2309,3141,3142],{},"Mostra a contagem de conversas e linhas de status por ponte (todas as plataformas, incluindo Buzz)",[2281,3144,3145,3149],{},[2309,3146,3147],{},[443,3148,1321],{},[2309,3150,3151],{},"Lista descritiva com todos os comandos",[2281,3153,3154,3159],{},[2309,3155,3156],{},[443,3157,3158],{},"@path\u002Fto\u002Ffile",[2309,3160,3161,3162,2412,3164,3167,3168,3171],{},"Funciona exatamente como menções de arquivos na Web: o modelo lê o arquivo relativo ao workspace; ",[443,3163,2498],{},[443,3165,3166],{},"@prefixo"," ou ",[443,3169,3170],{},"\u002Ffiles \u003Cprefixo>"," retornam arquivos e pastas correspondentes",[2281,3173,3174,3178],{},[2309,3175,3176],{},[443,3177,1331],{},[2309,3179,3180,3183,3184,3186,3187,3190],{},[443,3181,3182],{},"[provider model effort]"," — valida contra o catálogo ativo de LLMs; ",[443,3185,1331],{}," lista as opções disponíveis e ",[443,3188,3189],{},"\u002Fmodel reset"," restaura os padrões",[2281,3192,3193,3198],{},[2309,3194,3195],{},[443,3196,3197],{},"\u002Feffort",[2309,3199,3200,3203,3204,3207],{},[443,3201,3202],{},"\u003Cid>"," ajusta apenas o esforço de raciocínio do modelo; ",[443,3205,3206],{},"\u002Feffort reset"," restaura o valor padrão",[573,3209,3211],{"id":3210},"resumo-das-medidas-de-segurança","Resumo das medidas de segurança",[732,3213,3214,3227,3237],{},[581,3215,3216,3217,3219,3220,3222,3223,3226],{},"A chave privada ",[438,3218,2802],{}," reside unicamente em ",[443,3221,2174],{}," (permissões 0600, gravação atômica) — nunca sendo exposta em ",[443,3224,3225],{},"\u002Fgateway\u002Flist"," nem em logs.",[581,3228,3229,3230,2530,3233,3236],{},"Todo evento de entrada passa por ",[438,3231,3232],{},"validação de assinatura criptográfica",[443,3234,3235],{},"verifyEvent","), desduplicação, filtro de mensagens próprias e controle de menções antes de alcançar o agente.",[581,3238,3239,2530,3242,3245],{},[438,3240,3241],{},"O registro de workspaces é bloqueado por configuração",[443,3243,3244],{},"allowWorkspace: false"," por padrão), garantindo controle total contra acesso indevido aos arquivos da máquina.",[429,3247,3249],{"id":3248},"conclusão-colaboração-com-agentes-de-ia-descentralizados-no-buzz","Conclusão: Colaboração com agentes de IA descentralizados no Buzz",[434,3251,3252,3253,3255],{},"O maior desafio ao incorporar o Buzz ao ",[443,3254,2127],{}," esteve na conformidade com o protocolo Nostr. Como a base do plugin já contava com uma sólida arquitetura de sessões por conversa e despacho de comandos, a integração correu de maneira muito fluida assim que a manipulação de eventos e o streaming foram resolvidos.",[429,3257,3258],{"id":2046},"Referências:",[732,3260,3261,3269,3277],{},[581,3262,3263,3268],{},[451,3264,3267],{"href":3265,"rel":3266},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway\u002Fblob\u002Fmain\u002Fdocs\u002Farchitecture.md",[455],"dsh-message-gateway architecture guide"," — guia de arquitetura, receitas de extensão e notas de segurança",[581,3270,3271,3276],{},[451,3272,3275],{"href":3273,"rel":3274},"https:\u002F\u002Fgithub.com\u002Fnbd-wtf\u002Fnostr-tools",[455],"nostr-tools"," — biblioteca Nostr utilizada sob o capô",[581,3278,3279,3284],{},[451,3280,3283],{"href":3281,"rel":3282},"https:\u002F\u002Fgithub.com\u002Fbytedance\u002Fdeer-flow\u002Fblob\u002Fmain\u002Fbackend\u002Fdocs\u002FIM_CHANNEL_CONNECTIONS.md",[455],"deer-flow IM channel connections"," — referências para arquiteturas de conexão em canais de mensageria",[831,3286,3287],{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}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 .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 .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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":424,"searchDepth":479,"depth":494,"links":3289},[3290,3291,3295,3302,3303],{"id":2152,"depth":479,"text":2153},{"id":2265,"depth":479,"text":2266,"children":3292},[3293,3294],{"id":2550,"depth":494,"text":2551},{"id":2577,"depth":494,"text":2578},{"id":2684,"depth":479,"text":2685,"children":3296},[3297,3298,3300,3301],{"id":2808,"depth":494,"text":2809},{"id":2958,"depth":494,"text":3299},"Habilitando o acesso a pastas locais com \u002Fworkspace",{"id":3054,"depth":494,"text":3055},{"id":3210,"depth":494,"text":3211},{"id":3248,"depth":479,"text":3249},{"id":2046,"depth":479,"text":3258},[845,3305,2881,3306],"collaboration","deepseek-harness","2026-09-30","Integre o DeepSeek Harness ao Block Buzz com uma ponte Nostr. Configure auth NIP-42, streaming de mensagens in-place e espaços de trabalho de agentes de IA.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002FPT-Bringing-Buzz-to-DeepSeek-Harness.webp","Um cartão tecnológico premium de 16:9 com detalhes em índigo profundo e âmbar ilustrando como conectar o DeepSeek Harness ao Block Buzz com uma ponte Nostr, apresentando um painel glassmorphic limpo e tipografia centrada.",{"schemaOrg":3312,"robots":855,"sitemap":3335},[3313,3315],{"@type":3314,"headline":2109,"description":3308,"image":3309},"TechArticle",{"@type":854,"name":2109,"description":3308,"image":3309,"step":3316},[3317,3320,3323,3326,3329,3332],{"@type":1525,"name":3318,"text":3319},"Fase 1: Instalar o plugin de gateway","Instale o plugin dsh-message-gateway e inicie o serviço dsh web.",{"@type":1525,"name":3321,"text":3322},"Fase 2: Acessar Message platforms","Abra a interface Web do DSH e navegue até as configurações de Message platforms.",{"@type":1525,"name":3324,"text":3325},"Fase 3: Configurar a ponte Buzz","Gere um par de chaves Nostr, insira a URL do relay e os canais.",{"@type":1525,"name":3327,"text":3328},"Fase 4: Registrar o agente no relay","Adicione o assistente DSH ao relay Nostr do Buzz usando buzz-admin.",{"@type":1525,"name":3330,"text":3331},"Fase 5: Adicionar o agente ao canal","Vincule a chave HEX do agente aos canais usando buzz-cli.",{"@type":1525,"name":3333,"text":3334},"Fase 6: Habilitar acesso a workspaces","Configure allowWorkspace em cordis.patch.yml para permitir comandos de pastas locais.",{"lastmod":3307},{"title":3337,"description":3308,"ogTitle":2109,"ogDescription":3308,"twitterTitle":2109,"twitterDescription":3308},"Plugin Buzz para DeepSeek Harness: Criar Ponte Nostr","pt\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",[2272,2754,3340,3341,2127],"Nostr","Agentes IA","c3DZPaQeg7cLpNEOnZ4JMkgdCZ3xrLJOL0NosdV2XnI",{"id":3344,"title":3345,"author":424,"body":3346,"category":4196,"date":4197,"description":4198,"extension":848,"image":4199,"imageAlt":4200,"isPublished":513,"meta":4201,"minRead":534,"navigation":513,"path":363,"seo":4206,"stem":4208,"tags":4209,"updatedAt":4205,"__hash__":4212},"article\u002Fpt\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp.md","Expor o Hermes Agent em rede privada com Cloudflare WARP",{"type":426,"value":3347,"toc":4178},[3348,3361,3370,3374,3377,3389,3393,3401,3405,3409,3457,3461,3589,3593,3627,3631,3634,3698,3701,3737,3740,3767,3771,3781,3786,3824,3909,3913,3918,3932,3941,4004,4008,4052,4056,4101,4115,4119,4163,4165,4175],[434,3349,3350,3351,3353,3354,3356,3357,3360],{},"Um desafio comum surge quando você deseja acessar seu ",[438,3352,1311],{}," de outros dispositivos, como notebooks, tablets ou telefones, sem expô-lo à internet pública. Utilizar o ",[438,3355,2018],{}," com o ",[438,3358,3359],{},"Cloudflare Zero Trust"," permite que você exponha o Hermes Agent globalmente sem abrir uma única porta de entrada no seu firewall.",[434,3362,3363,3364,3366,3367,3369],{},"Se você seguiu nosso guia anterior, '",[451,3365,870],{"href":375},"', um Hermes Agent já está instalado e funcionando 24 horas por dia. Em vez de lidar com a complexidade das VPNs tradicionais, usaremos o cliente ",[438,3368,2018],{}," para expor o Hermes Agent a uma rede privada pela internet.",[429,3371,3373],{"id":3372},"entendendo-a-arquitetura","Entendendo a Arquitetura",[434,3375,3376],{},"Os componentes em ação:",[578,3378,3379,3384],{},[581,3380,3381,3383],{},[438,3382,3359],{},": O painel de controle da Cloudflare onde você define regras de roteamento e políticas de acesso.",[581,3385,3386,3388],{},[438,3387,2018],{},": O aplicativo cliente instalado em seus dispositivos (VPS, notebooks, telefones). Ele intercepta o tráfego destinado à sua rede privada e o roteia com segurança.",[573,3390,3392],{"id":3391},"pré-requisitos","Pré-requisitos",[732,3394,3395,3398],{},[581,3396,3397],{},"Um Hermes Agent em execução no seu VPS.",[581,3399,3400],{},"Uma conta gratuita da Cloudflare.",[429,3402,3404],{"id":3403},"guia-passo-a-passo","Guia Passo a Passo",[573,3406,3408],{"id":3407},"passo-1-configurar-o-cloudflare-zero-trust","Passo 1: Configurar o Cloudflare Zero Trust",[578,3410,3411,3419,3426,3436,3443,3450],{},[581,3412,3413,3414,618],{},"Faça login no seu ",[451,3415,3418],{"href":3416,"rel":3417},"https:\u002F\u002Fdash.cloudflare.com\u002F",[455],"Painel da Cloudflare",[581,3420,3421,3422],{},"Clique em 'Zero Trust' no menu à esquerda.\n",[568,3423],{"alt":3424,"src":3425},"Menu de navegação lateral esquerdo do painel Cloudflare com a opção Zero Trust","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-left-menu.webp",[581,3427,3428,3429,1201,3432],{},"Se esta for sua primeira vez, você será solicitado a escolher um plano (o nível Gratuito atende perfeitamente a essa configuração) e dar um nome à sua equipe (ex., ",[443,3430,3431],{},"ai-team",[568,3433],{"alt":3434,"src":3435},"Configuração inicial da conta Cloudflare Zero Trust e definição do nome da equipe","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-team-setup.webp",[581,3437,3438,3439],{},"Clique em 'Access' e depois em 'Policies' para criar uma política de acesso definindo quem tem acesso à rede.\n",[568,3440],{"alt":3441,"src":3442},"Página de políticas de acesso do Cloudflare Zero Trust mostrando as regras de acesso configuradas","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-access-policies-page.webp",[581,3444,3445,3446],{},"Clique em 'Create new policy'.\n",[568,3447],{"alt":3448,"src":3449},"Cloudflare Access policies page showing no policies added and a button to create a new policy.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-no-policies-create-button.png",[581,3451,3452,3453],{},"Selecione 'Emails' e insira seu e-mail em 'Policy rules'.\n",[568,3454],{"alt":3455,"src":3456},"Cloudflare Access policy rule configuration screen with an email address specified as the inclusion criteria.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-policy-rule-email.png",[573,3458,3460],{"id":3459},"passo-2-configurar-o-cliente-cloudflare-warp-no-vps","Passo 2: Configurar o cliente Cloudflare WARP no VPS",[578,3462,3463,3472,3478,3485,3488,3503,3506,3582],{},[581,3464,1105,3465,1930,3468,3471],{},[443,3466,3467],{},"sudo apt update",[443,3469,3470],{},"sudo apt install cloudflare-warp"," no terminal do seu VPS.",[581,3473,1105,3474,3477],{},[443,3475,3476],{},"warp-cli registration new \u003CTEAM-NAME>"," no terminal do seu VPS, o que exibirá um URL.",[581,3479,3480,3481,3484],{},"Copie o URL gerado, que será parecido com ",[443,3482,3483],{},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fwarp",", e cole-o no seu navegador para autenticação.",[581,3486,3487],{},"Como a autenticação por e-mail foi definida na configuração da política acima, insira seu e-mail para autenticar.",[581,3489,3490,3491,3494,3495,3498,3499,3502],{},"Na página de '",[438,3492,3493],{},"Success","' (Colaboração bem-sucedida) no navegador, clique com o botão direito e selecione '",[438,3496,3497],{},"Inspect","' (Inspecionar) no botão azul '",[438,3500,3501],{},"Open Cloudflare WARP","'.",[581,3504,3505],{},"Copie o token longo que aparece no link do botão.",[581,3507,1105,3508,3511,3512,3514,3515],{},[443,3509,3510],{},"warp-cli --accept-tos registration token \"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>\""," no terminal do seu VPS para conectá-lo ao Cloudflare Zero Trust.",[1976,3513],{},"Se encontrar o 'Error: Failed to communicate with the WARP API' no Ubuntu 26, execute os seguintes comandos:",[461,3516,3518],{"className":896,"code":3517,"language":898,"meta":424,"style":424},"sudo systemctl restart warp-svc.service\n\n# Check status\nsudo systemctl status warp-svc.service\n\n# Run the warp-cli registration token again\nwarp-cli --accept-tos registration token   \"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>\"\n",[443,3519,3520,3531,3535,3540,3550,3554,3559],{"__ignoreMap":424},[469,3521,3522,3524,3526,3528],{"class":471,"line":472},[469,3523,927],{"class":475},[469,3525,1046],{"class":490},[469,3527,1049],{"class":490},[469,3529,3530],{"class":490}," warp-svc.service\n",[469,3532,3533],{"class":471,"line":479},[469,3534,514],{"emptyLinePlaceholder":513},[469,3536,3537],{"class":471,"line":494},[469,3538,3539],{"class":2724},"# Check status\n",[469,3541,3542,3544,3546,3548],{"class":471,"line":505},[469,3543,927],{"class":475},[469,3545,1046],{"class":490},[469,3547,1493],{"class":490},[469,3549,3530],{"class":490},[469,3551,3552],{"class":471,"line":510},[469,3553,514],{"emptyLinePlaceholder":513},[469,3555,3556],{"class":471,"line":517},[469,3557,3558],{"class":2724},"# Run the warp-cli registration token again\n",[469,3560,3561,3564,3567,3570,3573,3576,3579],{"class":471,"line":523},[469,3562,3563],{"class":475},"warp-cli",[469,3565,3566],{"class":490}," --accept-tos",[469,3568,3569],{"class":490}," registration",[469,3571,3572],{"class":490}," token",[469,3574,3575],{"class":486},"   \"",[469,3577,3578],{"class":490},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>",[469,3580,3581],{"class":486},"\"\n",[581,3583,3584,3585],{},"Volte ao painel do Cloudflare Zero Trust e clique em 'Devices' (Dispositivos). O dispositivo do seu VPS deve ser exibido agora.\n",[568,3586],{"alt":3587,"src":3588},"Painel de dispositivos Zero Trust confirmando que o VPS Linux está conectado","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-devices-vps-connected.webp",[573,3590,3592],{"id":3591},"passo-3-configurar-o-roteamento-de-tráfego","Passo 3: Configurar o roteamento de tráfego",[578,3594,3595,3602,3609,3616],{},[581,3596,3597,3598],{},"Clique no perfil do seu VPS no painel de Dispositivos.\n",[568,3599],{"alt":3600,"src":3601},"Acesso aos detalhes e configurações de Split Tunnels para o VPS registrado","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-device-profile.webp",[581,3603,3604,3605],{},"Role para baixo até a seção 'Split Tunnels' (Túneis divididos).\n",[568,3606],{"alt":3607,"src":3608},"Seção Split Tunnels sob as configurações de perfil do VPS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-split-tunnels-section.webp",[581,3610,3611,3612],{},"Clique no botão 'Manage' (Gerenciar) e defina as configurações conforme mostrado abaixo. Substitua o endereço IP, se necessário.\n",[568,3613],{"alt":3614,"src":3615},"Gerenciamento de exclusões de IP e host nos Split Tunnels das configurações Cloudflare","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-manage-split-tunnels.webp",[581,3617,3618,3619,3622,3623,3626],{},"Expor o ",[443,3620,3621],{},"address"," (endereço) e o ",[443,3624,3625],{},"host"," roteará o tráfego para seus serviços pela mesma rede privada.",[573,3628,3630],{"id":3629},"passo-4-configurar-o-firewall-no-vps","Passo 4: Configurar o Firewall no VPS",[434,3632,3633],{},"Habilite o firewall para permitir apenas a sub-rede '100.96.0.0\u002F12', bloqueando qualquer outro acesso público de entrada.",[461,3635,3637],{"className":896,"code":3636,"language":898,"meta":424,"style":424},"sudo ufw enable \nsudo ufw default allow outgoing \nsudo ufw default deny incoming\nsudo ufw allow in from 100.96.0.0\u002F12\n",[443,3638,3639,3650,3667,3681],{"__ignoreMap":424},[469,3640,3641,3643,3646,3648],{"class":471,"line":472},[469,3642,927],{"class":475},[469,3644,3645],{"class":490}," ufw",[469,3647,1470],{"class":490},[469,3649,973],{"class":972},[469,3651,3652,3654,3656,3659,3662,3665],{"class":471,"line":479},[469,3653,927],{"class":475},[469,3655,3645],{"class":490},[469,3657,3658],{"class":490}," default",[469,3660,3661],{"class":490}," allow",[469,3663,3664],{"class":490}," outgoing",[469,3666,973],{"class":972},[469,3668,3669,3671,3673,3675,3678],{"class":471,"line":494},[469,3670,927],{"class":475},[469,3672,3645],{"class":490},[469,3674,3658],{"class":490},[469,3676,3677],{"class":490}," deny",[469,3679,3680],{"class":490}," incoming\n",[469,3682,3683,3685,3687,3689,3692,3695],{"class":471,"line":505},[469,3684,927],{"class":475},[469,3686,3645],{"class":490},[469,3688,3661],{"class":490},[469,3690,3691],{"class":490}," in",[469,3693,3694],{"class":490}," from",[469,3696,3697],{"class":490}," 100.96.0.0\u002F12\n",[434,3699,3700],{},"Permita o tráfego de loopback para evitar a interrupção de serviços locais:",[461,3702,3704],{"className":896,"code":3703,"language":898,"meta":424,"style":424},"sudo ufw allow in on lo\nsudo ufw allow out on lo\n",[443,3705,3706,3722],{"__ignoreMap":424},[469,3707,3708,3710,3712,3714,3716,3719],{"class":471,"line":472},[469,3709,927],{"class":475},[469,3711,3645],{"class":490},[469,3713,3661],{"class":490},[469,3715,3691],{"class":490},[469,3717,3718],{"class":490}," on",[469,3720,3721],{"class":490}," lo\n",[469,3723,3724,3726,3728,3730,3733,3735],{"class":471,"line":479},[469,3725,927],{"class":475},[469,3727,3645],{"class":490},[469,3729,3661],{"class":490},[469,3731,3732],{"class":490}," out",[469,3734,3718],{"class":490},[469,3736,3721],{"class":490},[434,3738,3739],{},"Recarregue o firewall e verifique o status:",[461,3741,3743],{"className":896,"code":3742,"language":898,"meta":424,"style":424},"sudo ufw reload \nsudo ufw status verbose\n",[443,3744,3745,3756],{"__ignoreMap":424},[469,3746,3747,3749,3751,3754],{"class":471,"line":472},[469,3748,927],{"class":475},[469,3750,3645],{"class":490},[469,3752,3753],{"class":490}," reload",[469,3755,973],{"class":972},[469,3757,3758,3760,3762,3764],{"class":471,"line":479},[469,3759,927],{"class":475},[469,3761,3645],{"class":490},[469,3763,1493],{"class":490},[469,3765,3766],{"class":490}," verbose\n",[573,3768,3770],{"id":3769},"passo-5-expor-o-hermes-agent-à-rede-privada","Passo 5: Expor o Hermes Agent à Rede Privada",[434,3772,3773,3774,3777,3778,618],{},"Vamos expor o ",[438,3775,3776],{},"Hermes Agent Web Dashboard"," à nossa rede privada e usar o provedor de autenticação padrão, ",[438,3779,3780],{},"Nous Research",[3782,3783,3785],"h4",{"id":3784},"configurar-o-provedor-de-autenticação","Configurar o provedor de autenticação",[578,3787,3788,3797,3804,3811,3818],{},[581,3789,3790,3791,3796],{},"Vá até ",[451,3792,3795],{"href":3793,"rel":3794},"https:\u002F\u002Fportal.nousresearch.com",[455],"portal.nousresearch.com"," para registrar uma conta.",[581,3798,3799,3800],{},"Selecione 'Local Dashboards' (Painéis locais).\n",[568,3801],{"alt":3802,"src":3803},"Seleção da opção Local Dashboards no portal da Nous Research","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-local-dashboards-selection.webp",[581,3805,3806,3807],{},"Clique em 'Register Dashboard' (Registrar painel).\n",[568,3808],{"alt":3809,"src":3810},"Clique no botão Registrar painel para criar uma nova entrada de painel","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-register-dashboard.webp",[581,3812,3813,3814],{},"Insira o endereço IP da rede privada do seu VPS como a 'Dashboard redirect URI' (URI de redirecionamento do painel) e clique em 'Save' (Salvar).\n",[568,3815],{"alt":3816,"src":3817},"Registro do endereço IP de rede privada do VPS como URI de redirecionamento no portal Nous Research","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-register-redirect-uri.webp",[581,3819,3820,3821,487],{},"Copie o 'OAuth client ID' e cole-o em seu arquivo ",[443,3822,3823],{},"config.yaml",[461,3825,3827],{"className":463,"code":3826,"language":465,"meta":424,"style":424},"dashboard:\n  theme: default\n  show_token_analytics: false\n  oauth:\n    client_id: agent:cmq02x7ha0002jk0ba3kfnb\n    portal_url: https:\u002F\u002Fportal.nousresearch.com\n  basic_auth:\n    username: ''\n    password_hash: ''\n",[443,3828,3829,3836,3846,3856,3863,3873,3883,3890,3900],{"__ignoreMap":424},[469,3830,3831,3834],{"class":471,"line":472},[469,3832,3833],{"class":482},"dashboard",[469,3835,1130],{"class":486},[469,3837,3838,3841,3843],{"class":471,"line":479},[469,3839,3840],{"class":482},"  theme",[469,3842,487],{"class":486},[469,3844,3845],{"class":490}," default\n",[469,3847,3848,3851,3853],{"class":471,"line":494},[469,3849,3850],{"class":482},"  show_token_analytics",[469,3852,487],{"class":486},[469,3854,3855],{"class":3028}," false\n",[469,3857,3858,3861],{"class":471,"line":505},[469,3859,3860],{"class":482},"  oauth",[469,3862,1130],{"class":486},[469,3864,3865,3868,3870],{"class":471,"line":510},[469,3866,3867],{"class":482},"    client_id",[469,3869,487],{"class":486},[469,3871,3872],{"class":490}," agent:cmq02x7ha0002jk0ba3kfnb\n",[469,3874,3875,3878,3880],{"class":471,"line":517},[469,3876,3877],{"class":482},"    portal_url",[469,3879,487],{"class":486},[469,3881,3882],{"class":490}," https:\u002F\u002Fportal.nousresearch.com\n",[469,3884,3885,3888],{"class":471,"line":523},[469,3886,3887],{"class":482},"  basic_auth",[469,3889,1130],{"class":486},[469,3891,3892,3895,3897],{"class":471,"line":528},[469,3893,3894],{"class":482},"    username",[469,3896,487],{"class":486},[469,3898,3899],{"class":486}," ''\n",[469,3901,3902,3905,3907],{"class":471,"line":534},[469,3903,3904],{"class":482},"    password_hash",[469,3906,487],{"class":486},[469,3908,3899],{"class":486},[3782,3910,3912],{"id":3911},"configurar-o-systemd-para-iniciar-automaticamente-o-painel-do-hermes","Configurar o Systemd para Iniciar Automaticamente o Painel do Hermes",[578,3914,3915],{},[581,3916,3917],{},"Crie um arquivo de serviço:",[461,3919,3921],{"className":1346,"code":3920,"language":1348,"meta":424,"style":424},"sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[443,3922,3923],{"__ignoreMap":424},[469,3924,3925,3927,3929],{"class":471,"line":472},[469,3926,927],{"class":475},[469,3928,1006],{"class":490},[469,3930,3931],{"class":490}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[578,3933,3934],{"start":479},[581,3935,3936,3937,3940],{},"Cole a seguinte configuração, garantindo que ",[443,3938,3939],{},"--host 0.0.0.0"," faça parte do comando:",[461,3942,3944],{"className":1368,"code":3943,"language":1370,"meta":424,"style":424},"[Unit]\nDescription=Hermes Dashboard\nAfter=network.target\n\n[Service]\nUser=hermes\nWorkingDirectory=\u002Fhome\u002Fhermes\nExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes dashboard --host 0.0.0.0\nRestart=always\nRestartSec=10\nEnvironment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n\n[Install]\nWantedBy=multi-user.target\n",[443,3945,3946,3950,3955,3959,3963,3967,3971,3975,3980,3984,3988,3992,3996,4000],{"__ignoreMap":424},[469,3947,3948],{"class":471,"line":472},[469,3949,1377],{},[469,3951,3952],{"class":471,"line":479},[469,3953,3954],{},"Description=Hermes Dashboard\n",[469,3956,3957],{"class":471,"line":494},[469,3958,1387],{},[469,3960,3961],{"class":471,"line":505},[469,3962,514],{"emptyLinePlaceholder":513},[469,3964,3965],{"class":471,"line":510},[469,3966,1396],{},[469,3968,3969],{"class":471,"line":517},[469,3970,1401],{},[469,3972,3973],{"class":471,"line":523},[469,3974,1406],{},[469,3976,3977],{"class":471,"line":528},[469,3978,3979],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes dashboard --host 0.0.0.0\n",[469,3981,3982],{"class":471,"line":534},[469,3983,1416],{},[469,3985,3986],{"class":471,"line":539},[469,3987,1421],{},[469,3989,3990],{"class":471,"line":1424},[469,3991,1427],{},[469,3993,3994],{"class":471,"line":1430},[469,3995,514],{"emptyLinePlaceholder":513},[469,3997,3998],{"class":471,"line":1435},[469,3999,1438],{},[469,4001,4002],{"class":471,"line":1441},[469,4003,1444],{},[578,4005,4006],{"start":494},[581,4007,1447],{},[461,4009,4011],{"className":1346,"code":4010,"language":1348,"meta":424,"style":424},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-dashboard\nsudo systemctl start hermes-dashboard\nsudo systemctl status hermes-dashboard\n",[443,4012,4013,4021,4032,4042],{"__ignoreMap":424},[469,4014,4015,4017,4019],{"class":471,"line":472},[469,4016,927],{"class":475},[469,4018,1046],{"class":490},[469,4020,1461],{"class":490},[469,4022,4023,4025,4027,4029],{"class":471,"line":479},[469,4024,927],{"class":475},[469,4026,1046],{"class":490},[469,4028,1470],{"class":490},[469,4030,4031],{"class":490}," hermes-dashboard\n",[469,4033,4034,4036,4038,4040],{"class":471,"line":494},[469,4035,927],{"class":475},[469,4037,1046],{"class":490},[469,4039,1482],{"class":490},[469,4041,4031],{"class":490},[469,4043,4044,4046,4048,4050],{"class":471,"line":505},[469,4045,927],{"class":475},[469,4047,1046],{"class":490},[469,4049,1493],{"class":490},[469,4051,4031],{"class":490},[573,4053,4055],{"id":4054},"passo-6-instalar-o-cliente-cloudflare-warp-no-desktop","Passo 6: Instalar o cliente Cloudflare WARP no Desktop",[578,4057,4058,4066,4069,4076,4083,4090],{},[581,4059,4060,4061,618],{},"Baixe o cliente Cloudflare WARP pelo ",[451,4062,4065],{"href":4063,"rel":4064},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fwarp-client\u002Fget-started\u002F",[455],"portal da Cloudflare",[581,4067,4068],{},"Abra e inicie o cliente Cloudflare WARP após a instalação.",[581,4070,4071,4072],{},"Faça login quando solicitado.\n",[568,4073],{"alt":4074,"src":4075},"Tela de login do cliente Cloudflare WARP em computador desktop","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-login-prompt.webp",[581,4077,4078,4079],{},"Uma página de 'Success' (Sucesso) será exibida após o login.\n",[568,4080],{"alt":4081,"src":4082},"Página de sucesso na autenticação após fazer login no Cloudflare Zero Trust no desktop","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-login-success.webp",[581,4084,4085,4086],{},"O cliente WARP agora deve mostrar que está conectado à sua equipe do Zero Trust.\n",[568,4087],{"alt":4088,"src":4089},"Cliente Cloudflare WARP desktop confirmando conexão ativa com a rede privada Zero Trust","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-client-connected.webp",[581,4091,4092,4093,4096,4097],{},"Navegue até o seu navegador e insira o seu IP privado (ex., ",[443,4094,4095],{},"100.96.0.3","). O Hermes Web Dashboard deve ser carregado com sucesso.\n",[568,4098],{"alt":4099,"src":4100},"Acesso ao painel web privado do Hermes Agent no navegador do desktop","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fhermes-agent-dashboard-desktop-view.webp",[4102,4103,4104],"blockquote",{},[434,4105,4106,4109,4110,4114],{},[438,4107,4108],{},"Dica de profissional para usuários do macOS:"," Se você estiver usando o cliente WARP para acessar várias contas da Cloudflare, confira nosso guia rápido sobre ",[438,4111,4112],{},[451,4113,1546],{"href":399}," para alternar entre as contas sem problemas.",[573,4116,4118],{"id":4117},"passo-7-instalar-o-cliente-cloudflare-warp-em-dispositivos-ios","Passo 7: Instalar o cliente Cloudflare WARP em Dispositivos iOS",[578,4120,4121,4128,4136,4144,4152],{},[581,4122,4123,4124,4127],{},"Instale o ",[438,4125,4126],{},"Cloudflare One"," através da App Store.",[581,4129,4130,4131],{},"Abra o aplicativo Cloudflare One e insira o nome da sua equipe quando solicitado.\n",[568,4132],{"alt":4133,"src":4134,"width":4135},"Inserção do nome da equipe Cloudflare Zero Trust no aplicativo Cloudflare One no iOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-team-name-prompt.webp",239,[581,4137,4138,4139],{},"Faça login usando o mesmo endereço de e-mail que foi configurado na regra de política acima.\n",[568,4140],{"alt":4141,"src":4142,"width":4143},"Tela de autenticação por e-mail para o Cloudflare Zero Trust no iOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-email-login.webp",229,[581,4145,4146,4147],{},"Assim que estiver conectado, a tela deve ficar parecida com isto:\n",[568,4148],{"alt":4149,"src":4150,"width":4151},"Aplicativo Cloudflare One exibindo status conectado no dispositivo móvel iOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-client-connected.webp",322,[581,4153,4154,4155,4157,4158],{},"Navegue até o seu navegador e insira o IP privado ",[443,4156,4095],{}," para acessar o Hermes Web Dashboard no seu dispositivo móvel.\n",[568,4159],{"alt":4160,"src":4161,"width":4162},"Acesso à interface do painel web do Hermes Agent no navegador do celular","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fhermes-agent-dashboard-mobile-view.webp",345,[429,4164,815],{"id":814},[434,4166,4167,4168,4170,4171,4174],{},"Com o ",[438,4169,3359],{}," gerenciando as políticas de identidade e o cliente ",[438,4172,4173],{},"WARP"," roteando o tráfego por um túnel criptografado, o seu Hermes Agent estará acessível de forma segura a partir dos seus dispositivos no mundo todo. Esta configuração estabelece uma base segura e robusta para criar e acessar uma infraestrutura de IA privada totalmente remota.",[831,4176,4177],{},"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 .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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":424,"searchDepth":479,"depth":494,"links":4179},[4180,4183,4195],{"id":3372,"depth":479,"text":3373,"children":4181},[4182],{"id":3391,"depth":494,"text":3392},{"id":3403,"depth":479,"text":3404,"children":4184},[4185,4186,4187,4188,4189,4193,4194],{"id":3407,"depth":494,"text":3408},{"id":3459,"depth":494,"text":3460},{"id":3591,"depth":494,"text":3592},{"id":3629,"depth":494,"text":3630},{"id":3769,"depth":494,"text":3770,"children":4190},[4191,4192],{"id":3784,"depth":505,"text":3785},{"id":3911,"depth":505,"text":3912},{"id":4054,"depth":494,"text":4055},{"id":4117,"depth":494,"text":4118},{"id":814,"depth":479,"text":815},[845,2089],"2026-07-09","Aprenda a expor e acessar globalmente seu Hermes Agent de forma segura com o Cloudflare WARP e o Zero Trust, sem abrir portas de entrada em seu firewall.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002FPT-Exposing-Hermes-Agent-to-Private-Network-Using-Cloudflare-WARP.webp","Exposição segura do Hermes Agent em rede privada usando Cloudflare Zero Trust e túnel WARP",{"schemaOrg":4202,"robots":855,"sitemap":4204},[4203],{"@type":854,"headline":3345,"description":4198,"name":3345,"image":4199},{"lastmod":4205},"2026-09-28",{"title":4207,"description":4198,"ogTitle":3345,"ogDescription":4198,"twitterTitle":3345,"twitterDescription":4198},"Acesso seguro ao Hermes Agent com Cloudflare Zero Trust","pt\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",[2018,2104,1311,4210,4211],"Rede privada","Tutorial","YSMA4-lqPipX1pmOP069tbQJepC0q97hwEJOym2fqzI",{"id":4214,"title":2133,"author":424,"body":4215,"category":6344,"date":6345,"description":2142,"extension":848,"image":2143,"imageAlt":2144,"isPublished":513,"meta":6346,"minRead":1706,"navigation":513,"path":383,"seo":6368,"stem":6370,"tags":6371,"updatedAt":864,"__hash__":6375},"article\u002Fpt\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues.md",{"type":426,"value":4216,"toc":6314},[4217,4220,4226,4231,4235,4238,4276,4280,4286,4324,4328,4332,4346,4352,4358,4362,4366,4380,4386,4434,4462,4466,4475,4481,4485,4488,4693,4697,4743,4750,4757,4763,4813,4819,4846,4850,4854,4881,4909,4914,4956,4964,5234,5238,5284,5289,5296,5301,5305,5329,5332,5338,5341,5345,5353,5359,5362,5368,5371,5395,5401,5407,5410,5416,5420,5423,5426,5429,5435,5438,5444,5450,5456,5461,5465,5476,5483,5489,5492,5498,5502,5509,5515,5521,5525,5531,5594,5607,5662,5665,5735,5738,5752,5758,5762,5807,5813,5816,5822,5825,5831,5835,5850,5866,5872,5969,5972,5978,5989,6035,6041,6047,6059,6075,6078,6084,6088,6095,6117,6126,6224,6235,6241,6248,6254,6257,6263,6266,6272,6276,6279,6281,6311],[434,4218,4219],{},"A fragmentação de contexto é um obstáculo frustrante ao trabalhar com múltiplos agentes de IA. Com conversas dispersas em diferentes ferramentas, você acaba agindo como um roteador humano ao copiar conversas do Claude Code para colar no Gemini CLI, depois copiando do Gemini CLI para colar no Hermes Agent. Essa fricção aumenta quando colegas humanos estão na mesma equipe.",[434,4221,4222],{},[568,4223],{"alt":4224,"src":4225},"A interface de usuário do espaço de trabalho colaborativo Buzz mostrando canais de chat e agentes de IA ativos","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-workspace-interface.webp",[434,4227,2269,4228,4230],{},[438,4229,2754],{},", um espaço de trabalho colaborativo de código aberto, reúne equipes humanas e agentes de IA em um ambiente único e unificado. Aqui, colegas humanos e agentes de IA compartilham o mesmo histórico de tarefas e projetos, transferindo o trabalho entre si de forma integrada.",[429,4232,4234],{"id":4233},"o-que-é-o-buzz-do-block-o-espaço-de-trabalho-colaborativo-para-agentes-de-ia","O que é o Buzz do Block? O espaço de trabalho colaborativo para agentes de IA",[434,4236,4237],{},"O Buzz é um espaço de trabalho colaborativo de código aberto da Block (empresa de Jack Dorsey) onde humanos e agentes de IA compartilham os mesmos canais e projetos. Ele oferece os seguintes recursos principais:",[732,4239,4240,4246,4252,4258,4264,4270],{},[581,4241,4242,4245],{},[438,4243,4244],{},"Contexto compartilhado:"," Os canais são onde os humanos e agentes colaboram entre si. Todo o histórico de conversas e projetos está contido no canal.",[581,4247,4248,4251],{},[438,4249,4250],{},"Comunicação agente a agente:"," Os agentes podem se comunicar entre si, mesmo em máquinas diferentes. Um agente pode mencionar outro usando @ para transferir trabalho ou verificar o código.",[581,4253,4254,4257],{},[438,4255,4256],{},"Ativação baseada em menção:"," Os agentes só agem quando mencionados com @, caso contrário, permanecem silenciosos. Quando mencionado, um agente lê o contexto relevante no canal e começa a trabalhar.",[581,4259,4260,4263],{},[438,4261,4262],{},"Sistema de identidade unificado:"," Humanos e agentes usam o mesmo sistema de identidade, autenticado por meio de chaves criptográficas.",[581,4265,4266,4269],{},[438,4267,4268],{},"Comandos delegados:"," Você pode conceder a colegas humanos permissão para comandar seus agentes, permitindo que toda a equipe instrua e aproveite os assistentes digitais uns dos outros.",[581,4271,4272,4275],{},[438,4273,4274],{},"Servidores auto-hospedados:"," Como você hospeda o servidor, seus dados permanecem totalmente sob seu controle. Você escolhe quem entra e define suas próprias regras operacionais.",[429,4277,4279],{"id":4278},"a-arquitetura-criptográfica-baseada-em-nostr-do-buzz","A arquitetura criptográfica baseada em Nostr do Buzz",[434,4281,4282],{},[568,4283],{"alt":4284,"src":4285},"Diagrama arquitetônico criptográfico baseado em Nostr do espaço de trabalho de colaboração Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-nostr-cryptographic-architecture.webp",[732,4287,4288,4294,4300,4306,4312,4318],{},[581,4289,4290,4293],{},[438,4291,4292],{},"O relay Nostr atua como o servidor:"," Mensagens, fluxos de trabalho, repositórios e outros eventos são assinados criptograficamente, verificados e armazenados em um servidor relay Nostr. O protocolo Nostr suporta nativamente a comunicação por meio de WebSockets e APIs REST.",[581,4295,4296,4299],{},[438,4297,4298],{},"Identidade criptográfica unificada:"," Tanto os humanos quanto os agentes se autenticam usando suas próprias chaves criptográficas. Essa identidade permanece no lado do cliente e nunca é armazenada no servidor.",[581,4301,4302,4305],{},[438,4303,4304],{},"Membro agente de primeira classe:"," Cada agente possui sua própria identidade, associações de canais e trilha de auditoria. Os agentes se conectam ao espaço de trabalho usando o Protocolo de Comunicação do Agente (ACP).",[581,4307,4308,4311],{},[438,4309,4310],{},"Repositórios Git descentralizados:"," Os repositórios de código são armazenados em armazenamento de objetos compatível com S3, enquanto tarefas, pull requests e revisões de código são rastreados no log de eventos Nostr. Consequentemente, um repositório Git do Buzz é hospedado no relay Nostr em vez do GitHub.",[581,4313,4314,4317],{},[438,4315,4316],{},"O aplicativo Buzz é um cliente Nostr:"," O Buzz é separado do relay Nostr; é um aplicativo cliente para desktop\u002Fdispositivos móveis que se conecta à URL do relay.",[581,4319,4320,4323],{},[438,4321,4322],{},"Pilha de infraestrutura:"," Um banco de dados PostgreSQL gerencia o armazenamento de eventos e a busca em texto completo, o Redis gerencia o envio\u002Frecebimento de mensagens (pub\u002Fsub), e o MinIO compatível com S3 é usado para armazenamento de mídia.",[429,4325,4327],{"id":4326},"como-auto-hospedar-o-relay-buzz-do-block-em-um-vps-linux","Como auto-hospedar o relay Buzz do Block em um VPS Linux",[573,4329,4331],{"id":4330},"_0-pré-requisitos","0. Pré-requisitos",[732,4333,4334,4337,4340,4343],{},[581,4335,4336],{},"Um VPS Linux",[581,4338,4339],{},"Um domínio que aponte para o seu servidor",[581,4341,4342],{},"Docker e o plugin Docker Compose",[581,4344,4345],{},"Conta da Cloudflare (plano gratuito)",[434,4347,4348,4349,4351],{},"Neste guia, executaremos o relay Nostr em um VPS Ubuntu por trás de uma rede privada ",[451,4350,3345],{"href":363},". A pilha de recursos consiste em quatro serviços no Docker Compose — relay, PostgreSQL, Redis e MinIO — além do Caddy para HTTPS.",[2140,4353],{"description":4354,"image":4199,"image-alt":4355,"label":4356,"min-read":4357,"title":3345,"to":363},"Aprenda a expor e acessar o seu Hermes Agent com segurança globalmente usando Cloudflare WARP e Zero Trust sem abrir portas de entrada no firewall.","Exposição segura do Hermes Agent a uma rede privada usando Cloudflare Zero Trust e túnel WARP","Guia relacionado","8",[573,4359,4361],{"id":4360},"_1-dns-da-cloudflare-e-api-token","1. DNS da Cloudflare e API Token",[3782,4363,4365],{"id":4364},"criar-um-api-token-da-cloudflare","Criar um API Token da Cloudflare",[578,4367,4368,4375],{},[581,4369,4370,4371,4374],{},"Clique no botão ",[438,4372,4373],{},"Profile"," no canto superior direito no menu suspenso do ícone do usuário.",[581,4376,1183,4377,618],{},[438,4378,4379],{},"API Tokens",[434,4381,4382],{},[568,4383],{"alt":4384,"src":4385},"Página de perfil do usuário da Cloudflare mostrando o menu de criação de tokens de API","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fcloudflare-profile-api-tokens.webp",[578,4387,4388,4393,4399,4419,4424,4428,4431],{"start":494},[581,4389,1183,4390,618],{},[438,4391,4392],{},"Create Token",[581,4394,4395,4396,618],{},"Use o modelo ",[438,4397,4398],{},"Edit zone DNS",[581,4400,4401,4402],{},"Configure o modelo da seguinte maneira:\n",[732,4403,4404,4410],{},[581,4405,4406,4409],{},[438,4407,4408],{},"Permissions",": Zone — DNS — Edit",[581,4411,4412,4415,4416],{},[438,4413,4414],{},"Zone Resources",": Include — Specific zone — ",[443,4417,4418],{},"example.com",[581,4420,1183,4421,618],{},[438,4422,4423],{},"Continue to summary",[581,4425,1183,4426,618],{},[438,4427,4392],{},[581,4429,4430],{},"Copie o token gerado, pois ele não será exibido novamente após fechar a página.",[581,4432,4433],{},"Teste o token gerado no seu terminal para se certificar de que funciona corretamente:",[461,4435,4437],{"className":896,"code":4436,"language":898,"meta":424,"style":424},"curl \"https:\u002F\u002Fapi.cloudflare.com\u002Fclient\u002Fv4\u002Fuser\u002Ftokens\u002Fverify\" -H \"Authorization: Bearer YOUR_TOKEN_HERE\"\n",[443,4438,4439],{"__ignoreMap":424},[469,4440,4441,4443,4446,4449,4452,4455,4457,4460],{"class":471,"line":472},[469,4442,1069],{"class":475},[469,4444,4445],{"class":486}," \"",[469,4447,4448],{"class":490},"https:\u002F\u002Fapi.cloudflare.com\u002Fclient\u002Fv4\u002Fuser\u002Ftokens\u002Fverify",[469,4450,4451],{"class":486},"\"",[469,4453,4454],{"class":490}," -H",[469,4456,4445],{"class":486},[469,4458,4459],{"class":490},"Authorization: Bearer YOUR_TOKEN_HERE",[469,4461,3581],{"class":486},[3782,4463,4465],{"id":4464},"registros-dns","Registros DNS",[732,4467,4468],{},[581,4469,4470,4471,4474],{},"Crie um registro A e configure-o como ",[438,4472,4473],{},"Apenas DNS"," (DNS only).",[434,4476,4477],{},[568,4478],{"alt":4479,"src":4480},"Configurando um registro DNS A para o domínio do Buzz no painel da Cloudflare com status de proxy configurado como apenas DNS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fcloudflare-dns-a-record-configuration.webp",[573,4482,4484],{"id":4483},"_2-instalar-o-docker-no-ubuntu","2. Instalar o Docker no Ubuntu",[434,4486,4487],{},"Execute os seguintes comandos para instalar o Docker no Ubuntu:",[461,4489,4491],{"className":896,"code":4490,"language":898,"meta":424,"style":424},"# 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",[443,4492,4493,4498,4523,4527,4532,4575,4579,4584,4593,4597,4602,4622,4626,4631,4642,4646,4651,4657,4661,4675,4679,4684],{"__ignoreMap":424},[469,4494,4495],{"class":471,"line":472},[469,4496,4497],{"class":2724},"# Add Docker's official GPG key and set up the Docker repository\n",[469,4499,4500,4502,4504,4507,4509,4511,4514,4517,4520],{"class":471,"line":479},[469,4501,1069],{"class":475},[469,4503,1072],{"class":490},[469,4505,4506],{"class":490}," https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg",[469,4508,1078],{"class":486},[469,4510,939],{"class":475},[469,4512,4513],{"class":490}," gpg",[469,4515,4516],{"class":490}," --dearmor",[469,4518,4519],{"class":490}," -o",[469,4521,4522],{"class":490}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg\n",[469,4524,4525],{"class":471,"line":494},[469,4526,514],{"emptyLinePlaceholder":513},[469,4528,4529],{"class":471,"line":505},[469,4530,4531],{"class":2724},"# Add the official Docker repository\n",[469,4533,4534,4537,4539,4542,4545,4548,4551,4554,4557,4559,4561,4563,4566,4569,4572],{"class":471,"line":510},[469,4535,4536],{"class":2623},"echo",[469,4538,4445],{"class":486},[469,4540,4541],{"class":490},"deb [arch=amd64 signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu ",[469,4543,4544],{"class":486},"$(",[469,4546,4547],{"class":475},"lsb_release",[469,4549,4550],{"class":490}," -cs",[469,4552,4553],{"class":486},")",[469,4555,4556],{"class":490}," stable",[469,4558,4451],{"class":486},[469,4560,1078],{"class":486},[469,4562,939],{"class":475},[469,4564,4565],{"class":490}," tee",[469,4567,4568],{"class":490}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[469,4570,4571],{"class":486}," >",[469,4573,4574],{"class":490}," \u002Fdev\u002Fnull\n",[469,4576,4577],{"class":471,"line":517},[469,4578,514],{"emptyLinePlaceholder":513},[469,4580,4581],{"class":471,"line":523},[469,4582,4583],{"class":2724},"# Update package list\n",[469,4585,4586,4588,4590],{"class":471,"line":528},[469,4587,927],{"class":475},[469,4589,930],{"class":490},[469,4591,4592],{"class":490}," update\n",[469,4594,4595],{"class":471,"line":534},[469,4596,514],{"emptyLinePlaceholder":513},[469,4598,4599],{"class":471,"line":539},[469,4600,4601],{"class":2724},"# Install Docker Engine, Docker Community Edition, and containerd runtime\n",[469,4603,4604,4606,4608,4611,4614,4617,4620],{"class":471,"line":1424},[469,4605,927],{"class":475},[469,4607,930],{"class":490},[469,4609,4610],{"class":490}," install",[469,4612,4613],{"class":490}," docker-ce",[469,4615,4616],{"class":490}," docker-ce-cli",[469,4618,4619],{"class":490}," containerd.io",[469,4621,947],{"class":490},[469,4623,4624],{"class":471,"line":1430},[469,4625,514],{"emptyLinePlaceholder":513},[469,4627,4628],{"class":471,"line":1435},[469,4629,4630],{"class":2724},"# Start automatically when the system boots\n",[469,4632,4633,4635,4637,4639],{"class":471,"line":1441},[469,4634,927],{"class":475},[469,4636,1046],{"class":490},[469,4638,1470],{"class":490},[469,4640,4641],{"class":490}," docker\n",[469,4643,4644],{"class":471,"line":1688},[469,4645,514],{"emptyLinePlaceholder":513},[469,4647,4648],{"class":471,"line":1694},[469,4649,4650],{"class":2724},"# Verify docker is installed\n",[469,4652,4653,4655],{"class":471,"line":1700},[469,4654,2828],{"class":475},[469,4656,1102],{"class":490},[469,4658,4659],{"class":471,"line":1706},[469,4660,514],{"emptyLinePlaceholder":513},[469,4662,4663,4665,4667,4669,4672],{"class":471,"line":1712},[469,4664,927],{"class":475},[469,4666,930],{"class":490},[469,4668,4610],{"class":490},[469,4670,4671],{"class":490}," -y",[469,4673,4674],{"class":490}," docker-compose-plugin\n",[469,4676,4677],{"class":471,"line":1718},[469,4678,514],{"emptyLinePlaceholder":513},[469,4680,4681],{"class":471,"line":1724},[469,4682,4683],{"class":2724},"# Verify the compose plugin is installed\n",[469,4685,4686,4688,4690],{"class":471,"line":1730},[469,4687,2828],{"class":475},[469,4689,2831],{"class":490},[469,4691,4692],{"class":490}," version\n",[573,4694,4696],{"id":4695},"_3-clonar-e-configurar","3. Clonar e configurar",[461,4698,4700],{"className":896,"code":4699,"language":898,"meta":424,"style":424},"git clone https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz.git\n\ncd buzz\u002Fdeploy\u002Fcompose\ncp .env.example .env\nnano .env\n",[443,4701,4702,4713,4717,4725,4736],{"__ignoreMap":424},[469,4703,4704,4707,4710],{"class":471,"line":472},[469,4705,4706],{"class":475},"git",[469,4708,4709],{"class":490}," clone",[469,4711,4712],{"class":490}," https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz.git\n",[469,4714,4715],{"class":471,"line":479},[469,4716,514],{"emptyLinePlaceholder":513},[469,4718,4719,4722],{"class":471,"line":494},[469,4720,4721],{"class":2623},"cd",[469,4723,4724],{"class":490}," buzz\u002Fdeploy\u002Fcompose\n",[469,4726,4727,4730,4733],{"class":471,"line":505},[469,4728,4729],{"class":475},"cp",[469,4731,4732],{"class":490}," .env.example",[469,4734,4735],{"class":490}," .env\n",[469,4737,4738,4741],{"class":471,"line":510},[469,4739,4740],{"class":475},"nano",[469,4742,4735],{"class":490},[434,4744,4745,4746,4749],{},"Modifique ",[443,4747,4748],{},".env"," em grupos:",[732,4751,4752],{},[581,4753,4754],{},[438,4755,4756],{},"Domínio:",[461,4758,4761],{"className":4759,"code":4760,"language":1027},[1025],"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",[443,4762,4760],{"__ignoreMap":424},[732,4764,4765,4775],{},[581,4766,4767,4770,4771,4774],{},[438,4768,4769],{},"Chave do proprietário:"," ",[443,4772,4773],{},"RELAY_OWNER_PUBKEY"," requer sua chave pública hexadecimal de 64 caracteres. Gere uma identidade no aplicativo de desktop primeiro ('Create a new identity key' → copie seu ID público, que está no formato npub), depois converta-o para hexadecimal.",[581,4776,4777,4780],{},[438,4778,4779],{},"Segredos (Secrets):",[732,4781,4782,4794,4807],{},[581,4783,4784,4785,4789,4790,4793],{},"Gere segredos usando esta ",[451,4786,4788],{"href":4787},"\u002Fpt\u002Ftools\u002Fsecret-key-hex","ferramenta online"," ou com ",[443,4791,4792],{},"openssl rand -hex 32"," (execute sete vezes)",[581,4795,4796,4797,2250,4800,2412,4803,4806],{},"Substitua cada marcador ",[443,4798,4799],{},"CHANGE_ME",[443,4801,4802],{},"BUZZ_RELAY_PRIVATE_KEY",[443,4804,4805],{},"BUZZ_GIT_HOOK_HMAC_SECRET",", as senhas do Postgres\u002FRedis\u002FTypesense e as chaves secretas\u002Facesso do S3.",[581,4808,4809,4810,618],{},"Marcadores restantes são a causa mais comum de loops de reinicialização de contêineres; verifique os seus com ",[443,4811,4812],{},"grep CHANGE_ME .env",[461,4814,4817],{"className":4815,"code":4816,"language":1027},[1025],"    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",[443,4818,4816],{"__ignoreMap":424},[732,4820,4821],{},[581,4822,4823,4826],{},[438,4824,4825],{},"Outros:",[732,4827,4828,4835],{},[581,4829,4830,4831,4834],{},"Adicione ",[443,4832,4833],{},"CLOUDFLARE_API_TOKEN"," como uma variável de ambiente e atribua o token de API gerado anteriormente. Isso é obrigatório para o Caddy.",[581,4836,4837,4838,2412,4840,1930,4843,618],{},"Buzz é fornecido com padrões abertos — qualquer pessoa que conheça a URL do seu relay pode se autenticar e participar. Defina ",[443,4839,4773],{},[443,4841,4842],{},"BUZZ_REQUIRE_RELAY_MEMBERSHIP=true",[443,4844,4845],{},"BUZZ_REQUIRE_AUTH_TOKEN=true",[573,4847,4849],{"id":4848},"_4-habilitar-https-com-caddy","4. Habilitar HTTPS com Caddy",[3782,4851,4853],{"id":4852},"construir-uma-imagem-personalizada-do-caddy-com-o-módulo-dns-da-cloudflare","Construir uma imagem personalizada do Caddy com o módulo DNS da Cloudflare",[732,4855,4856,4867,4878],{},[581,4857,4858,4859,4862,4863,4866],{},"Configuramos o DNS-01 com a Cloudflare para o Caddy. DNS-01 funciona fazendo com que o plug-in grave um registro TXT ",[443,4860,4861],{},"_acme-challenge.buzz.pafor.me"," no ",[438,4864,4865],{},"DNS público",";",[581,4868,4869,4870,4873,4874,4877],{},"Let's Encrypt então consulta o registro na internet pública para verificar o controle do domínio. Isso significa que ",[443,4871,4872],{},"pafor.me"," deve ser uma zona pública em sua conta da Cloudflare — não apenas um nome de host privado que existe apenas no DNS privado do Zero Trust \u002F WARP. Se o ",[443,4875,4876],{},"buzz.pafor.me"," for resolvido apenas de forma privada e não houver uma zona pública, o DNS-01 falhará, exigindo uma abordagem diferente.",[581,4879,4880],{},"Adicione o seguinte ao Caddyfile:",[461,4882,4884],{"className":2994,"code":4883,"language":2996,"meta":424,"style":424},"{\n  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}\n}\n",[443,4885,4886,4891,4905],{"__ignoreMap":424},[469,4887,4888],{"class":471,"line":472},[469,4889,4890],{"class":486},"{\n",[469,4892,4893,4896,4899,4902],{"class":471,"line":479},[469,4894,4895],{"class":490},"  acme_dns cloudflare",[469,4897,4898],{"class":486}," {",[469,4900,4901],{"class":490},"env.CLOUDFLARE_API_TOKEN",[469,4903,4904],{"class":486},"}\n",[469,4906,4907],{"class":471,"line":494},[469,4908,4904],{"class":486},[732,4910,4911],{},[581,4912,4913],{},"Crie um Dockerfile.caddy com o seguinte conteúdo, que é exigido pelo compose.caddy.yml:",[461,4915,4917],{"className":2994,"code":4916,"language":2996,"meta":424,"style":424},"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",[443,4918,4919,4924,4928,4933,4938,4942,4947,4951],{"__ignoreMap":424},[469,4920,4921],{"class":471,"line":472},[469,4922,4923],{"class":490},"FROM caddy:2-builder AS builder\n",[469,4925,4926],{"class":471,"line":479},[469,4927,514],{"emptyLinePlaceholder":513},[469,4929,4930],{"class":471,"line":494},[469,4931,4932],{"class":490},"RUN xcaddy build \\\n",[469,4934,4935],{"class":471,"line":505},[469,4936,4937],{"class":490},"    --with github.com\u002Fcaddy-dns\u002Fcloudflare\n",[469,4939,4940],{"class":471,"line":510},[469,4941,514],{"emptyLinePlaceholder":513},[469,4943,4944],{"class":471,"line":517},[469,4945,4946],{"class":490},"FROM caddy:2-alpine\n",[469,4948,4949],{"class":471,"line":523},[469,4950,514],{"emptyLinePlaceholder":513},[469,4952,4953],{"class":471,"line":528},[469,4954,4955],{"class":490},"COPY --from=builder \u002Fusr\u002Fbin\u002Fcaddy \u002Fusr\u002Fbin\u002Fcaddy\n",[732,4957,4958],{},[581,4959,4745,4960,4963],{},[443,4961,4962],{},"compose.caddy.yml"," para usar a imagem com o módulo da Cloudflare e passar o token de API da Cloudflare:",[461,4965,4967],{"className":2994,"code":4966,"language":2996,"meta":424,"style":424},"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",[443,4968,4969,4976,4983,4996,5000,5007,5014,5025,5035,5045,5052,5059,5069,5076,5086,5096,5102,5114,5125,5132,5139,5146,5153,5163,5170,5177,5181,5188,5195,5202,5212,5219,5225],{"__ignoreMap":424},[469,4970,4971,4974],{"class":471,"line":472},[469,4972,4973],{"class":482},"services",[469,4975,1130],{"class":486},[469,4977,4978,4981],{"class":471,"line":479},[469,4979,4980],{"class":482},"  relay",[469,4982,1130],{"class":486},[469,4984,4985,4988,4990,4993],{"class":471,"line":494},[469,4986,4987],{"class":482},"    ports",[469,4989,487],{"class":486},[469,4991,4992],{"class":2600}," !reset",[469,4994,4995],{"class":486}," []\n",[469,4997,4998],{"class":471,"line":505},[469,4999,514],{"emptyLinePlaceholder":513},[469,5001,5002,5005],{"class":471,"line":510},[469,5003,5004],{"class":482},"  caddy",[469,5006,1130],{"class":486},[469,5008,5009,5012],{"class":471,"line":517},[469,5010,5011],{"class":482},"    build",[469,5013,1130],{"class":486},[469,5015,5016,5019,5021],{"class":471,"line":523},[469,5017,5018],{"class":482},"      context",[469,5020,487],{"class":486},[469,5022,5024],{"class":5023},"sbssI"," .\n",[469,5026,5027,5030,5032],{"class":471,"line":528},[469,5028,5029],{"class":482},"      dockerfile",[469,5031,487],{"class":486},[469,5033,5034],{"class":490}," Dockerfile.caddy\n",[469,5036,5037,5040,5042],{"class":471,"line":534},[469,5038,5039],{"class":482},"    image",[469,5041,487],{"class":486},[469,5043,5044],{"class":490}," buzz-caddy:cloudflare\n",[469,5046,5047,5050],{"class":471,"line":539},[469,5048,5049],{"class":482},"    depends_on",[469,5051,1130],{"class":486},[469,5053,5054,5057],{"class":471,"line":1424},[469,5055,5056],{"class":482},"      relay",[469,5058,1130],{"class":486},[469,5060,5061,5064,5066],{"class":471,"line":1430},[469,5062,5063],{"class":482},"        condition",[469,5065,487],{"class":486},[469,5067,5068],{"class":490}," service_healthy\n",[469,5070,5071,5074],{"class":471,"line":1435},[469,5072,5073],{"class":482},"    environment",[469,5075,1130],{"class":486},[469,5077,5078,5081,5083],{"class":471,"line":1441},[469,5079,5080],{"class":482},"      BUZZ_DOMAIN",[469,5082,487],{"class":486},[469,5084,5085],{"class":490}," ${BUZZ_DOMAIN:?set BUZZ_DOMAIN}\n",[469,5087,5088,5091,5093],{"class":471,"line":1688},[469,5089,5090],{"class":482},"      CLOUDFLARE_API_TOKEN",[469,5092,487],{"class":486},[469,5094,5095],{"class":490}," ${CLOUDFLARE_API_TOKEN:?set CLOUDFLARE_API_TOKEN}\n",[469,5097,5098,5100],{"class":471,"line":1694},[469,5099,4987],{"class":482},[469,5101,1130],{"class":486},[469,5103,5104,5107,5109,5112],{"class":471,"line":1700},[469,5105,5106],{"class":486},"      -",[469,5108,4445],{"class":486},[469,5110,5111],{"class":490},"${CADDY_HTTP_PORT:-80}:80",[469,5113,3581],{"class":486},[469,5115,5116,5118,5120,5123],{"class":471,"line":1706},[469,5117,5106],{"class":486},[469,5119,4445],{"class":486},[469,5121,5122],{"class":490},"${CADDY_HTTPS_PORT:-443}:443",[469,5124,3581],{"class":486},[469,5126,5127,5130],{"class":471,"line":1712},[469,5128,5129],{"class":482},"    volumes",[469,5131,1130],{"class":486},[469,5133,5134,5136],{"class":471,"line":1718},[469,5135,5106],{"class":486},[469,5137,5138],{"class":490}," .\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile:ro\n",[469,5140,5141,5143],{"class":471,"line":1724},[469,5142,5106],{"class":486},[469,5144,5145],{"class":490}," buzz-caddy-data:\u002Fdata\n",[469,5147,5148,5150],{"class":471,"line":1730},[469,5149,5106],{"class":486},[469,5151,5152],{"class":490}," buzz-caddy-config:\u002Fconfig\n",[469,5154,5155,5158,5160],{"class":471,"line":1736},[469,5156,5157],{"class":482},"    restart",[469,5159,487],{"class":486},[469,5161,5162],{"class":490}," unless-stopped\n",[469,5164,5165,5168],{"class":471,"line":1742},[469,5166,5167],{"class":482},"    networks",[469,5169,1130],{"class":486},[469,5171,5172,5174],{"class":471,"line":1748},[469,5173,5106],{"class":486},[469,5175,5176],{"class":490}," buzz-net\n",[469,5178,5179],{"class":471,"line":1754},[469,5180,514],{"emptyLinePlaceholder":513},[469,5182,5183,5186],{"class":471,"line":1760},[469,5184,5185],{"class":482},"volumes",[469,5187,1130],{"class":486},[469,5189,5190,5193],{"class":471,"line":1766},[469,5191,5192],{"class":482},"  buzz-caddy-data",[469,5194,1130],{"class":486},[469,5196,5197,5200],{"class":471,"line":1771},[469,5198,5199],{"class":482},"    labels",[469,5201,1130],{"class":486},[469,5203,5204,5207,5209],{"class":471,"line":1776},[469,5205,5206],{"class":482},"      com.buzz.volume",[469,5208,487],{"class":486},[469,5210,5211],{"class":490}," caddy-data\n",[469,5213,5214,5217],{"class":471,"line":1782},[469,5215,5216],{"class":482},"  buzz-caddy-config",[469,5218,1130],{"class":486},[469,5220,5221,5223],{"class":471,"line":1787},[469,5222,5199],{"class":482},[469,5224,1130],{"class":486},[469,5226,5227,5229,5231],{"class":471,"line":1793},[469,5228,5206],{"class":482},[469,5230,487],{"class":486},[469,5232,5233],{"class":490}," caddy-config\n",[3782,5235,5237],{"id":5236},"iniciar-os-contêineres-docker","Iniciar os contêineres Docker",[461,5239,5241],{"className":896,"code":5240,"language":898,"meta":424,"style":424},"docker compose -f compose.yml -f compose.caddy.yml up -d\n\n#Check the Docker status\ndocker compose ps\n",[443,5242,5243,5266,5270,5275],{"__ignoreMap":424},[469,5244,5245,5247,5249,5252,5255,5257,5260,5263],{"class":471,"line":472},[469,5246,2828],{"class":475},[469,5248,2831],{"class":490},[469,5250,5251],{"class":490}," -f",[469,5253,5254],{"class":490}," compose.yml",[469,5256,5251],{"class":490},[469,5258,5259],{"class":490}," compose.caddy.yml",[469,5261,5262],{"class":490}," up",[469,5264,5265],{"class":490}," -d\n",[469,5267,5268],{"class":471,"line":479},[469,5269,514],{"emptyLinePlaceholder":513},[469,5271,5272],{"class":471,"line":494},[469,5273,5274],{"class":2724},"#Check the Docker status\n",[469,5276,5277,5279,5281],{"class":471,"line":505},[469,5278,2828],{"class":475},[469,5280,2831],{"class":490},[469,5282,5283],{"class":490}," ps\n",[568,5285],{"src":5286,"alt":5287,"style":5288},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fdocker-compose-ps-status-terminal.webp","Janela de terminal exibindo contêineres em execução para os serviços do Buzz via docker compose ps","max-width: 700px; width: 100%; height: auto;",[434,5290,5291,5292,5295],{},"Abra o seu navegador e navegue até ",[443,5293,5294],{},"http:\u002F\u002Fbuzz.pafor.me"," para verificar se o relay está funcionando.",[568,5297],{"src":5298,"alt":5299,"style":5300},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-relay-running-browser-verification.webp","Verificação no navegador mostrando resposta bem-sucedida do relay auto-hospedado do Buzz do Block","max-width: 500px; width: 100%; height: auto;",[573,5302,5304],{"id":5303},"passo-5-backups-desde-o-primeiro-dia","Passo 5: Backups desde o primeiro dia",[461,5306,5308],{"className":896,"code":5307,"language":898,"meta":424,"style":424},"mkdir -p \u002Fbuzz_backups\ncrontab -e\n",[443,5309,5310,5321],{"__ignoreMap":424},[469,5311,5312,5315,5318],{"class":471,"line":472},[469,5313,5314],{"class":475},"mkdir",[469,5316,5317],{"class":490}," -p",[469,5319,5320],{"class":490}," \u002Fbuzz_backups\n",[469,5322,5323,5326],{"class":471,"line":479},[469,5324,5325],{"class":475},"crontab",[469,5327,5328],{"class":490}," -e\n",[434,5330,5331],{},"Adicione um trabalho cron de backup noturno do banco de dados:",[461,5333,5336],{"className":5334,"code":5335,"language":1027},[1025],"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",[443,5337,5335],{"__ignoreMap":424},[434,5339,5340],{},"Nota: Trate BUZZ_RELAY_PRIVATE_KEY como permanente. Os eventos assinados por ela falharão na verificação se a chave for alterada; um banco de dados restaurado emparejado com uma nova chave não será tratado como o mesmo relay.",[429,5342,5344],{"id":5343},"configurando-o-cliente-desktop-buzz-e-as-identidades-nostr","Configurando o cliente desktop Buzz e as identidades Nostr",[434,5346,5347,5348,5352],{},"Baixe o aplicativo desktop do Buzz em ",[451,5349,5350],{"href":5350,"rel":5351},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Freleases",[455]," e inicie-o. Preencha as informações do perfil até chegar à página \"Join or create a community\".",[434,5354,5355],{},[568,5356],{"alt":5357,"src":5358},"Tela de configuração inicial do cliente desktop Buzz para participar ou criar uma comunidade","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-setup-community.webp",[434,5360,5361],{},"Clique em \"Join a community\" e copie a sua chave pública.",[434,5363,5364],{},[568,5365],{"alt":5366,"src":5367},"Exibição do cliente Buzz mostrando a identidade da chave pública antes de participar da comunidade","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",[434,5369,5370],{},"Execute o seguinte comando no VPS para se adicionar como o primeiro membro:",[461,5372,5374],{"className":896,"code":5373,"language":898,"meta":424,"style":424},"docker compose exec relay buzz-admin add-member --pubkey npub1yourkeyhere\n",[443,5375,5376],{"__ignoreMap":424},[469,5377,5378,5380,5382,5384,5386,5388,5390,5392],{"class":471,"line":472},[469,5379,2828],{"class":475},[469,5381,2831],{"class":490},[469,5383,2834],{"class":490},[469,5385,2837],{"class":490},[469,5387,2840],{"class":490},[469,5389,2843],{"class":490},[469,5391,2846],{"class":490},[469,5393,5394],{"class":490}," npub1yourkeyhere\n",[434,5396,4830,5397,5400],{},[443,5398,5399],{},"wss:\u002F\u002Fbuzz.pafor.me"," como a URL da comunidade e clique em \"Next\".",[434,5402,5403],{},[568,5404],{"alt":5405,"src":5406},"Inserindo a URL do relay da comunidade auto-hospedada no aplicativo 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",[434,5408,5409],{},"Digite um nome e clique no botão Next.",[434,5411,5412],{},[568,5413],{"alt":5414,"src":5415},"Tela de configuração de perfil no aplicativo Buzz para inserir o nome de exibição","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-profile-name-input.webp",[573,5417,5419],{"id":5418},"canais-channels-e-agentes","Canais (Channels) e Agentes",[434,5421,5422],{},"Canais são grupos de tarefas ou projetos. Crie um canal por tarefa ou projeto e inclua os humanos e agentes.",[434,5424,5425],{},"Tudo dentro de um canal é compartilhado automaticamente, eliminando a necessidade de instruir cada membro individualmente. Cada agente pode ser mencionado usando @ e lê as mensagens relevantes. Além disso, os agentes podem se mencionar usando @ entre si.",[434,5427,5428],{},"Vamos enviar uma mensagem direta (DM) para um agente pré-configurado",[434,5430,5431],{},[568,5432],{"alt":5433,"src":5434},"Enviando mensagem direta para um agente de IA no cliente desktop colaborativo Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-dm-agent.webp",[434,5436,5437],{},"Vamos criar um canal e adicionar alguns agentes a ele",[434,5439,5440],{},[568,5441],{"alt":5442,"src":5443},"Criando um novo canal de tarefa ou projeto no aplicativo 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",[434,5445,5446],{},[568,5447],{"alt":5448,"src":5449},"Adicionando membro humano e agentes de IA ao canal recém-criado","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",[434,5451,5452],{},[568,5453],{"alt":5454,"src":5455},"Visualização do canal ativo exibindo histórico de chat consolidado e tarefas do projeto","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-channel-view.webp",[568,5457],{"src":5458,"alt":5459,"style":5460},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-channel-active-agents.webp","Visualização detalhada dos agentes de IA ativos integrados no canal do projeto colaborativo","max-width: 367px; width: 100%; height: auto;",[573,5462,5464],{"id":5463},"habilitar-runtimes-de-agentes","Habilitar runtimes de agentes",[434,5466,5467,5468,5471,5472,5475],{},"Os runtimes predefinidos dependem da descoberta automática que detecta os binários de inicialização (como ",[443,5469,5470],{},"hermes-acp",") em diretórios padrão como ",[443,5473,5474],{},"~\u002F.local\u002Fbin",". Se uma ferramenta foi instalada em um local não padrão, o Buzz não poderá resolvê-la.",[434,5477,5478,5479,5482],{},"Para o Kimi Code, o ID do agente é kimi, e o Buzz procura o seu binario em ",[443,5480,5481],{},"~\u002F.local\u002Fbin\u002Fkimi",". Um link simbólico resolve o problema:",[461,5484,5487],{"className":5485,"code":5486,"language":1027},[1025],"ln -s kimi-cli \u002FUsers\u002F\u003Cuser>\u002F.local\u002Fbin\u002Fkimi\n",[443,5488,5486],{"__ignoreMap":424},[434,5490,5491],{},"O Kimi Code agora aparece em runtimes de agentes.",[434,5493,5494],{},[568,5495],{"alt":5496,"src":5497},"Configurações do aplicativo Buzz exibindo runtimes de agentes de IA configurados, incluindo Kimi","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-agent-runtimes-list.webp",[573,5499,5501],{"id":5500},"projetos-e-repositórios","Projetos e Repositórios",[434,5503,5504,5505,5508],{},"Primeiro, ative o recurso '",[438,5506,5507],{},"Projects","' em Settings → Experiments:",[434,5510,5511],{},[568,5512],{"alt":5513,"src":5514},"Habilitando o recurso experimental Projects na guia de configurações do Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-experiments-projects.webp",[434,5516,5517,5518,5520],{},"Atualmente, um projeto deve ser criado usando o ",[443,5519,2858],{}," (embora a criação direta de projetos a partir da interface do usuário esteja planejada para uma versão futura).",[3782,5522,5524],{"id":5523},"instalar-buzz-cli","Instalar buzz-cli",[434,5526,5527,5528,5530],{},"Execute os seguintes comandos para instalar o ",[443,5529,2858],{}," no VPS:",[461,5532,5534],{"className":896,"code":5533,"language":898,"meta":424,"style":424},"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",[443,5535,5536,5547,5554,5567],{"__ignoreMap":424},[469,5537,5538,5540,5542,5544],{"class":471,"line":472},[469,5539,927],{"class":475},[469,5541,930],{"class":490},[469,5543,4610],{"class":490},[469,5545,5546],{"class":490}," cargo\n",[469,5548,5549,5551],{"class":471,"line":479},[469,5550,4721],{"class":2623},[469,5552,5553],{"class":490}," ~\u002Fbuzz\n",[469,5555,5556,5559,5561,5564],{"class":471,"line":494},[469,5557,5558],{"class":475},"cargo",[469,5560,4610],{"class":490},[469,5562,5563],{"class":490}," --path",[469,5565,5566],{"class":490}," crates\u002Fbuzz-cli\n",[469,5568,5569,5571,5574,5577,5580,5583,5586,5588,5591],{"class":471,"line":505},[469,5570,4536],{"class":2623},[469,5572,5573],{"class":486}," '",[469,5575,5576],{"class":490},"export PATH=\"$HOME\u002F.cargo\u002Fbin:$PATH\"",[469,5578,5579],{"class":486},"'",[469,5581,5582],{"class":486}," >>",[469,5584,5585],{"class":490}," ~\u002F.bashrc",[469,5587,936],{"class":486},[469,5589,5590],{"class":2623}," source",[469,5592,5593],{"class":490}," ~\u002F.bashrc\n",[434,5595,5596,5597,5600,5601,5603,5604,5606],{},"Gere um par de chaves privada e pública usando a ",[451,5598,4788],{"href":5599},"\u002Fpt\u002Ftools\u002Fnostr-key-generator"," ou o ",[443,5602,2858],{},". Este par constitui a identidade do ",[443,5605,2858],{}," no relay Nostr.",[461,5608,5610],{"className":896,"code":5609,"language":898,"meta":424,"style":424},"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",[443,5611,5612,5634,5638,5643],{"__ignoreMap":424},[469,5613,5614,5616,5619,5622,5625,5628,5631],{"class":471,"line":472},[469,5615,2828],{"class":475},[469,5617,5618],{"class":490}," run",[469,5620,5621],{"class":490}," --rm",[469,5623,5624],{"class":490}," --entrypoint",[469,5626,5627],{"class":490}," \u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-admin",[469,5629,5630],{"class":490}," ghcr.io\u002Fblock\u002Fbuzz:main",[469,5632,5633],{"class":490}," generate-key\n",[469,5635,5636],{"class":471,"line":479},[469,5637,514],{"emptyLinePlaceholder":513},[469,5639,5640],{"class":471,"line":494},[469,5641,5642],{"class":2724},"# Use the generated Public Key\n",[469,5644,5645,5647,5649,5651,5653,5655,5657,5659],{"class":471,"line":505},[469,5646,2828],{"class":475},[469,5648,2831],{"class":490},[469,5650,2834],{"class":490},[469,5652,2837],{"class":490},[469,5654,2840],{"class":490},[469,5656,2843],{"class":490},[469,5658,2846],{"class":490},[469,5660,5661],{"class":490}," generated_Public_key\n",[434,5663,5664],{},"Configurar a CLI:",[461,5666,5668],{"className":896,"code":5667,"language":898,"meta":424,"style":424},"# 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",[443,5669,5670,5675,5706,5710],{"__ignoreMap":424},[469,5671,5672],{"class":471,"line":472},[469,5673,5674],{"class":2724},"# Copy the Secret key as the BUZZ_PRIVATE_KEY\n",[469,5676,5677,5679,5681,5684,5686,5689,5692,5695,5698,5701,5703],{"class":471,"line":479},[469,5678,4536],{"class":2623},[469,5680,5573],{"class":486},[469,5682,5683],{"class":490},"export BUZZ_PRIVATE_KEY=\"nsec1...\"",[469,5685,5579],{"class":486},[469,5687,5688],{"class":486},"  >>",[469,5690,5691],{"class":490}," \u002Fhome\u002F",[469,5693,5694],{"class":486},"\u003C",[469,5696,5697],{"class":490},"use",[469,5699,5700],{"class":972},"r",[469,5702,2901],{"class":486},[469,5704,5705],{"class":490},"\u002F.bashrc\n",[469,5707,5708],{"class":471,"line":494},[469,5709,514],{"emptyLinePlaceholder":513},[469,5711,5712,5714,5716,5719,5721,5723,5725,5727,5729,5731,5733],{"class":471,"line":505},[469,5713,4536],{"class":2623},[469,5715,5573],{"class":486},[469,5717,5718],{"class":490},"export BUZZ_RELAY_URL=\"wss:\u002F\u002Fbuzz.pafor.me\"",[469,5720,5579],{"class":486},[469,5722,5688],{"class":486},[469,5724,5691],{"class":490},[469,5726,5694],{"class":486},[469,5728,5697],{"class":490},[469,5730,5700],{"class":972},[469,5732,2901],{"class":486},[469,5734,5705],{"class":490},[434,5736,5737],{},"Execute o seguinte comando para verificar se o buzz-cli está configurado corretamente:",[461,5739,5741],{"className":896,"code":5740,"language":898,"meta":424,"style":424},"buzz channels list\n",[443,5742,5743],{"__ignoreMap":424},[469,5744,5745,5747,5749],{"class":471,"line":472},[469,5746,2881],{"class":475},[469,5748,2884],{"class":490},[469,5750,5751],{"class":490}," list\n",[434,5753,5754],{},[568,5755],{"alt":5756,"src":5757},"Execução de comando no terminal verificando a configuração do buzz-cli ao listar canais ativos","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-cli-channels-list-terminal.webp",[3782,5759,5761],{"id":5760},"criar-um-projeto-com-o-buzz-cli","Criar um projeto com o buzz-cli",[461,5763,5765],{"className":896,"code":5764,"language":898,"meta":424,"style":424},"# --channel refers to the UUID of the channel\nbuzz repos create --id TestKOA --name 'Display Name' --channel \"bd92b3d1-8fac-441c-a9ac-2b2f3aac5c5b\"\n",[443,5766,5767,5772],{"__ignoreMap":424},[469,5768,5769],{"class":471,"line":472},[469,5770,5771],{"class":2724},"# --channel refers to the UUID of the channel\n",[469,5773,5774,5776,5779,5782,5785,5788,5791,5793,5796,5798,5800,5802,5805],{"class":471,"line":479},[469,5775,2881],{"class":475},[469,5777,5778],{"class":490}," repos",[469,5780,5781],{"class":490}," create",[469,5783,5784],{"class":490}," --id",[469,5786,5787],{"class":490}," TestKOA",[469,5789,5790],{"class":490}," --name",[469,5792,5573],{"class":486},[469,5794,5795],{"class":490},"Display Name",[469,5797,5579],{"class":486},[469,5799,2889],{"class":490},[469,5801,4445],{"class":486},[469,5803,5804],{"class":490},"bd92b3d1-8fac-441c-a9ac-2b2f3aac5c5b",[469,5806,3581],{"class":486},[434,5808,5809,5810,5812],{},"Um projeto só pode ser removido por seu proprietário. Como o projeto \"Display Name\" foi criado pelo ",[443,5811,2858],{},", que carece de um comando de remoção, ele não pode ser excluído dessa maneira.",[434,5814,5815],{},"Consulte o aplicativo desktop Buzz para verificar se o projeto foi criado.",[434,5817,5818],{},[568,5819],{"alt":5820,"src":5821},"Visualização de projetos do aplicativo Buzz confirmando a criação bem-sucedida do projeto","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-project-view.webp",[434,5823,5824],{},"Assim que um projeto estiver disponível em Projects, mais projetos poderão ser adicionados usando o botão \"+\" no canto superior direito.",[434,5826,5827],{},[568,5828],{"alt":5829,"src":5830},"Adicionando novos projetos de desenvolvedor usando o ícone de adição no cliente 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",[3782,5832,5834],{"id":5833},"vincular-repositórios-git-existentes","Vincular repositórios Git existentes",[434,5836,4123,5837,5840,5841,5844,5845,487],{},[443,5838,5839],{},"git-credential-nostr"," na máquina onde os repositórios git estão instalados. Ele requer o ",[438,5842,5843],{},"git 2.46+"," e a toolchain Rust. Consulte este ",[451,5846,5849],{"href":5847,"rel":5848},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Ftree\u002Fmain\u002Fcrates\u002Fgit-credential-nostr",[455],"Readme",[461,5851,5853],{"className":896,"code":5852,"language":898,"meta":424,"style":424},"cargo install --path crates\u002Fgit-credential-nostr\n",[443,5854,5855],{"__ignoreMap":424},[469,5856,5857,5859,5861,5863],{"class":471,"line":472},[469,5858,5558],{"class":475},[469,5860,4610],{"class":490},[469,5862,5563],{"class":490},[469,5864,5865],{"class":490}," crates\u002Fgit-credential-nostr\n",[434,5867,5868,5869,5871],{},"Configure o ",[443,5870,5839],{}," para autorização do relay Buzz:",[461,5873,5875],{"className":896,"code":5874,"language":898,"meta":424,"style":424},"# 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",[443,5876,5877,5882,5898,5911,5915,5920,5929,5956],{"__ignoreMap":424},[469,5878,5879],{"class":471,"line":472},[469,5880,5881],{"class":2724},"# 1. Register the helper and enable per-path credentials.\n",[469,5883,5884,5886,5889,5892,5895],{"class":471,"line":479},[469,5885,4706],{"class":475},[469,5887,5888],{"class":490}," config",[469,5890,5891],{"class":490}," --global",[469,5893,5894],{"class":490}," credential.helper",[469,5896,5897],{"class":490}," nostr\n",[469,5899,5900,5902,5904,5906,5909],{"class":471,"line":494},[469,5901,4706],{"class":475},[469,5903,5888],{"class":490},[469,5905,5891],{"class":490},[469,5907,5908],{"class":490}," credential.useHttpPath",[469,5910,3029],{"class":486},[469,5912,5913],{"class":471,"line":505},[469,5914,514],{"emptyLinePlaceholder":513},[469,5916,5917],{"class":471,"line":510},[469,5918,5919],{"class":2724},"# 2. Store your nsec in a key file (must be 0600). Replace \"nsec1...\" with your private key\n",[469,5921,5922,5924,5926],{"class":471,"line":517},[469,5923,5314],{"class":475},[469,5925,5317],{"class":490},[469,5927,5928],{"class":490}," ~\u002F.nostr\n",[469,5930,5931,5933,5935,5938,5940,5942,5945,5947,5950,5953],{"class":471,"line":523},[469,5932,4536],{"class":2623},[469,5934,4445],{"class":486},[469,5936,5937],{"class":490},"nsec1...",[469,5939,4451],{"class":486},[469,5941,4571],{"class":486},[469,5943,5944],{"class":490}," ~\u002F.nostr\u002Fkey",[469,5946,936],{"class":486},[469,5948,5949],{"class":475}," chmod",[469,5951,5952],{"class":5023}," 600",[469,5954,5955],{"class":490}," ~\u002F.nostr\u002Fkey\n",[469,5957,5958,5960,5962,5964,5967],{"class":471,"line":528},[469,5959,4706],{"class":475},[469,5961,5888],{"class":490},[469,5963,5891],{"class":490},[469,5965,5966],{"class":490}," nostr.keyfile",[469,5968,5955],{"class":490},[434,5970,5971],{},"Crie um repositório no relay Buzz:",[461,5973,5976],{"className":5974,"code":5975,"language":1027},[1025],"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",[443,5977,5975],{"__ignoreMap":424},[434,5979,5980,5981,5984,5985,5988],{},"No seu primeiro ",[443,5982,5983],{},"git push",", você encontrará um erro ",[443,5986,5987],{},"remote: missing Authorization header",". Para resolver isso, você precisa vincular o ID do repositório a um canal Buzz, pois a associação ao canal dita as permissões de gravação do Git (ACLs):",[461,5990,5992],{"className":896,"code":5991,"language":898,"meta":424,"style":424},"buzz repos bind --id koa-email-routing --channel \u003CCHANNEL_UUID>\n\n# push the code again\ngit push\n",[443,5993,5994,6019,6023,6028],{"__ignoreMap":424},[469,5995,5996,5998,6000,6003,6005,6008,6010,6012,6014,6016],{"class":471,"line":472},[469,5997,2881],{"class":475},[469,5999,5778],{"class":490},[469,6001,6002],{"class":490}," bind",[469,6004,5784],{"class":490},[469,6006,6007],{"class":490}," koa-email-routing",[469,6009,2889],{"class":490},[469,6011,2892],{"class":486},[469,6013,2895],{"class":490},[469,6015,2898],{"class":972},[469,6017,6018],{"class":486},">\n",[469,6020,6021],{"class":471,"line":479},[469,6022,514],{"emptyLinePlaceholder":513},[469,6024,6025],{"class":471,"line":494},[469,6026,6027],{"class":2724},"# push the code again\n",[469,6029,6030,6032],{"class":471,"line":505},[469,6031,4706],{"class":475},[469,6033,6034],{"class":490}," push\n",[434,6036,6037,6038,6040],{},"A verificação do projeto no aplicativo Buzz desktop mostra o seguinte, porque o aplicativo precisa do ",[438,6039,5843],{}," — iniciar o aplicativo diretamente pode carregar uma versão mais antiga do Git:",[434,6042,6043],{},[568,6044],{"alt":6045,"src":6046},"O cliente Buzz exibindo erro de carregamento do Git devido a versão local do Git desatualizada inferior a 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",[434,6048,6049,6050,6053,6054,618],{},"Exporte o PATH por meio de ",[443,6051,6052],{},"launchctl setenv PATH \"\u002Fopt\u002Fhomebrew\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin:\u002Fusr\u002Fsbin:\u002Fsbin\""," no perfil do shell e inicie o aplicativo Buzz no shell. Consulte este ",[451,6055,6058],{"href":6056,"rel":6057},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Fissues\u002F5348",[455],"problema",[461,6060,6062],{"className":896,"code":6061,"language":898,"meta":424,"style":424},"open -a Buzz\n",[443,6063,6064],{"__ignoreMap":424},[469,6065,6066,6069,6072],{"class":471,"line":472},[469,6067,6068],{"class":475},"open",[469,6070,6071],{"class":490}," -a",[469,6073,6074],{"class":490}," Buzz\n",[434,6076,6077],{},"Consulte novamente os Projetos no aplicativo Buzz, os detalhes do repositório agora estão carregados.",[434,6079,6080],{},[568,6081],{"alt":6082,"src":6083},"Interface de desktop do Buzz com detalhes do repositório Git e logs de commit carregados com sucesso","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-repository-details-loaded.webp",[429,6085,6087],{"id":6086},"sincronizando-agentes-de-ia-com-o-buzz-mobile-app-via-código-qr","Sincronizando agentes de IA com o Buzz Mobile App via código QR",[434,6089,6090,6091,6094],{},"O emparelhamento do aplicativo móvel Buzz só aceita o protocolo HTTPS e o ",[443,6092,6093],{},"buzz-pair-relay"," não é iniciado por padrão no VPS.",[461,6096,6098],{"className":896,"code":6097,"language":898,"meta":424,"style":424},"cd ~\u002Fbuzz\ncargo install --path crates\u002Fbuzz-pair-relay\n",[443,6099,6100,6106],{"__ignoreMap":424},[469,6101,6102,6104],{"class":471,"line":472},[469,6103,4721],{"class":2623},[469,6105,5553],{"class":490},[469,6107,6108,6110,6112,6114],{"class":471,"line":479},[469,6109,5558],{"class":475},[469,6111,4610],{"class":490},[469,6113,5563],{"class":490},[469,6115,6116],{"class":490}," crates\u002Fbuzz-pair-relay\n",[434,6118,6119,6120,6123,6124,487],{},"Adicione o seguinte ao ",[443,6121,6122],{},"compose.yml"," para iniciar o serviço ",[443,6125,6093],{},[461,6127,6129],{"className":2994,"code":6128,"language":2996,"meta":424,"style":424},"  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",[443,6130,6131,6138,6147,6167,6173,6183,6189,6200,6208,6214],{"__ignoreMap":424},[469,6132,6133,6136],{"class":471,"line":472},[469,6134,6135],{"class":482},"  pair",[469,6137,1130],{"class":486},[469,6139,6140,6142,6144],{"class":471,"line":479},[469,6141,5039],{"class":482},[469,6143,487],{"class":486},[469,6145,6146],{"class":490}," ${BUZZ_IMAGE:-ghcr.io\u002Fblock\u002Fbuzz:main}\n",[469,6148,6149,6152,6154,6157,6159,6162,6164],{"class":471,"line":494},[469,6150,6151],{"class":482},"    entrypoint",[469,6153,487],{"class":486},[469,6155,6156],{"class":486}," [",[469,6158,4451],{"class":486},[469,6160,6161],{"class":490},"\u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-pair-relay",[469,6163,4451],{"class":486},[469,6165,6166],{"class":486},"]\n",[469,6168,6169,6171],{"class":471,"line":505},[469,6170,5073],{"class":482},[469,6172,1130],{"class":486},[469,6174,6175,6178,6180],{"class":471,"line":510},[469,6176,6177],{"class":482},"      BUZZ_PAIR_RELAY_BIND_ADDR",[469,6179,487],{"class":486},[469,6181,6182],{"class":490}," 0.0.0.0:5000\n",[469,6184,6185,6187],{"class":471,"line":517},[469,6186,4987],{"class":482},[469,6188,1130],{"class":486},[469,6190,6191,6193,6195,6198],{"class":471,"line":523},[469,6192,5106],{"class":486},[469,6194,4445],{"class":486},[469,6196,6197],{"class":490},"${BUZZ_PAIR_RELAY_PORT:-5000}:5000",[469,6199,3581],{"class":486},[469,6201,6202,6204,6206],{"class":471,"line":528},[469,6203,5157],{"class":482},[469,6205,487],{"class":486},[469,6207,5162],{"class":490},[469,6209,6210,6212],{"class":471,"line":534},[469,6211,5167],{"class":482},[469,6213,1130],{"class":486},[469,6215,6216,6219,6222],{"class":471,"line":539},[469,6217,6218],{"class":486},"      [",[469,6220,6221],{"class":490},"buzz-net",[469,6223,6166],{"class":486},[434,6225,4830,6226,1930,6229,6232,6233,487],{},[443,6227,6228],{},"BUZZ_PAIRING_RELAY_URL",[443,6230,6231],{},"BUZZ_PAIR_RELAY_PORT"," ao arquivo ",[443,6234,4748],{},[461,6236,6239],{"className":6237,"code":6238,"language":1027},[1025],"BUZZ_PAIRING_RELAY_URL=wss:\u002F\u002Fbuzz.pafor.me\u002Fpair\nBUZZ_PAIR_RELAY_PORT=5000\n",[443,6240,6238],{"__ignoreMap":424},[434,6242,6243,6244,6247],{},"Vá para '",[438,6245,6246],{},"Mobile","' nas configurações da versão desktop do Buzz:",[434,6249,6250],{},[568,6251],{"alt":6252,"src":6253},"Caixa de diálogo de configurações no aplicativo Buzz mostrando a guia de configuração de dispositivos móveis","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-mobile-tab.webp",[434,6255,6256],{},"Clique em \"Start pairing\" — um código QR é gerado; escaneie esse código QR com o aplicativo Buzz no dispositivo móvel. Ele será emparelhado depois que você clicar em \"Code Match\".",[434,6258,6259],{},[568,6260],{"alt":6261,"src":6262},"Gerando código QR de emparelhamento seguro no cliente de desktop para sincronização móvel do 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",[434,6264,6265],{},"Os agentes no aplicativo móvel Buzz só estão disponíveis se estiverem sendo executados no aplicativo de dektop Buzz. O computador desktop deve estar ligado para que os agentes funcionem.",[434,6267,6268],{},[568,6269],{"alt":6270,"src":6271},"Interface do aplicativo móvel do Buzz apresentando os agentes de IA ativos sincronizados","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-mobile-app-active-agents.webp",[429,6273,6275],{"id":6274},"considerações-finais","Considerações Finais",[434,6277,6278],{},"Embora o Buzz ainda esteja em estágio muito inicial para ambientes de produção em larga escala, apresentando vários bugs e limitações de interface de usuário, é uma experiência empolgante para pequenas equipes e desenvolvedores individuais. Ele oferece uma prévia de como é realmente um espaço de trabalho colaborativo focado primeiramente em IA.",[429,6280,2047],{"id":2046},[732,6282,6283,6290,6297,6304],{},[581,6284,6285],{},[451,6286,6289],{"href":6287,"rel":6288},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz",[455],"Buzz releases",[581,6291,6292],{},[451,6293,6296],{"href":6294,"rel":6295},"https:\u002F\u002Fblock.xyz\u002Finside\u002Fintroducing-buzz-where-humans-and-agents-work-together",[455],"Introducing Buzz",[581,6298,6299],{},[451,6300,6303],{"href":6301,"rel":6302},"https:\u002F\u002Fwww.hostinger.com\u002Ftutorials\u002Fwhat-is-buzz",[455],"What is buzz",[581,6305,6306],{},[451,6307,6310],{"href":6308,"rel":6309},"https:\u002F\u002Fmiget.com\u002Fblog\u002Fhow-to-self-host-buzz",[455],"How to self-host Buzz (Miget)",[831,6312,6313],{},"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":424,"searchDepth":479,"depth":494,"links":6315},[6316,6317,6318,6332,6341,6342,6343],{"id":4233,"depth":479,"text":4234},{"id":4278,"depth":479,"text":4279},{"id":4326,"depth":479,"text":4327,"children":6319},[6320,6321,6325,6326,6327,6331],{"id":4330,"depth":494,"text":4331},{"id":4360,"depth":494,"text":4361,"children":6322},[6323,6324],{"id":4364,"depth":505,"text":4365},{"id":4464,"depth":505,"text":4465},{"id":4483,"depth":494,"text":4484},{"id":4695,"depth":494,"text":4696},{"id":4848,"depth":494,"text":4849,"children":6328},[6329,6330],{"id":4852,"depth":505,"text":4853},{"id":5236,"depth":505,"text":5237},{"id":5303,"depth":494,"text":5304},{"id":5343,"depth":479,"text":5344,"children":6333},[6334,6335,6336],{"id":5418,"depth":494,"text":5419},{"id":5463,"depth":494,"text":5464},{"id":5500,"depth":494,"text":5501,"children":6337},[6338,6339,6340],{"id":5523,"depth":505,"text":5524},{"id":5760,"depth":505,"text":5761},{"id":5833,"depth":505,"text":5834},{"id":6086,"depth":479,"text":6087},{"id":6274,"depth":479,"text":6275},{"id":2046,"depth":479,"text":2047},[3305,845,2881],"2026-09-08",{"schemaOrg":6347,"robots":855,"sitemap":6366},[6348,6349],{"@type":3314,"headline":2133,"description":2142,"image":2143},{"@type":854,"name":2133,"description":2142,"image":2143,"step":6350},[6351,6354,6357,6360,6363],{"@type":1525,"name":6352,"text":6353},"Fase 1: Configuração da Cloudflare","Criar um token de API da Cloudflare e configurar as definições de DNS.",{"@type":1525,"name":6355,"text":6356},"Fase 2: Instalar o Docker","Configurar e instalar o Docker Engine no VPS Ubuntu.",{"@type":1525,"name":6358,"text":6359},"Fase 3: Clonar e configurar","Clonar o repositório e configurar as variáveis do compose.",{"@type":1525,"name":6361,"text":6362},"Fase 4: Integração do Caddy","Compilar um Caddy personalizado com o módulo de desafio DNS da Cloudflare.",{"@type":1525,"name":6364,"text":6365},"Fase 5: Backup automatizado","Configurar uma tarefa cron para fazer backup automático do PostgreSQL.",{"lastmod":6367},"2026-09-03",{"title":6369,"description":2142,"ogTitle":2133,"ogDescription":2142,"twitterTitle":2133,"twitterDescription":2142},"Como instalar e auto-hospedar o relay Buzz em VPS Ubuntu","pt\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",[3340,6372,2754,6373,6374],"Docker","Caddy","Cloudflare","d81fxoKo6iAaIp8OwbrHCSaUSob7w9HyKP0oH38Exq0",1792489983829]