[{"data":1,"prerenderedAt":5254},["ShallowReactive",2],{"published-article-paths":3,"search-navigation":348,"\u002Fpt\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp":421,"\u002Fpt\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp-surround":1378},[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":1355,"date":1358,"description":1359,"extension":1360,"image":1361,"imageAlt":1362,"isPublished":646,"meta":1363,"minRead":1033,"navigation":646,"path":219,"seo":1370,"stem":1372,"tags":1373,"updatedAt":1369,"__hash__":1377},"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":427,"toc":1337},"minimark",[428,445,456,461,464,478,483,492,496,500,553,557,710,714,748,752,755,822,825,861,864,891,895,905,910,949,1041,1045,1050,1067,1076,1156,1161,1207,1211,1256,1271,1275,1319,1323,1333],[429,430,431,432,436,437,440,441,444],"p",{},"Um desafio comum surge quando você deseja acessar seu ",[433,434,435],"strong",{},"Hermes Agent"," de outros dispositivos, como notebooks, tablets ou telefones, sem expô-lo à internet pública. Utilizar o ",[433,438,439],{},"Cloudflare WARP"," com o ",[433,442,443],{},"Cloudflare Zero Trust"," permite que você exponha o Hermes Agent globalmente sem abrir uma única porta de entrada no seu firewall.",[429,446,447,448,452,453,455],{},"Se você seguiu nosso guia anterior, '",[449,450,451],"a",{"href":375},"Como instalar e configurar o Hermes Agent em um VPS Linux","', 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 ",[433,454,439],{}," para expor o Hermes Agent a uma rede privada pela internet.",[457,458,460],"h2",{"id":459},"entendendo-a-arquitetura","Entendendo a Arquitetura",[429,462,463],{},"Os componentes em ação:",[465,466,467,473],"ol",{},[468,469,470,472],"li",{},[433,471,443],{},": O painel de controle da Cloudflare onde você define regras de roteamento e políticas de acesso.",[468,474,475,477],{},[433,476,439],{},": 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.",[479,480,482],"h3",{"id":481},"pré-requisitos","Pré-requisitos",[484,485,486,489],"ul",{},[468,487,488],{},"Um Hermes Agent em execução no seu VPS.",[468,490,491],{},"Uma conta gratuita da Cloudflare.",[457,493,495],{"id":494},"guia-passo-a-passo","Guia Passo a Passo",[479,497,499],{"id":498},"passo-1-configurar-o-cloudflare-zero-trust","Passo 1: Configurar o Cloudflare Zero Trust",[465,501,502,512,520,532,539,546],{},[468,503,504,505,511],{},"Faça login no seu ",[449,506,510],{"href":507,"rel":508},"https:\u002F\u002Fdash.cloudflare.com\u002F",[509],"nofollow","Painel da Cloudflare",".",[468,513,514,515],{},"Clique em 'Zero Trust' no menu à esquerda.\n",[516,517],"img",{"alt":518,"src":519},"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",[468,521,522,523,527,528],{},"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., ",[524,525,526],"code",{},"ai-team",").\n",[516,529],{"alt":530,"src":531},"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",[468,533,534,535],{},"Clique em 'Access' e depois em 'Policies' para criar uma política de acesso definindo quem tem acesso à rede.\n",[516,536],{"alt":537,"src":538},"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",[468,540,541,542],{},"Clique em 'Create new policy'.\n",[516,543],{"alt":544,"src":545},"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",[468,547,548,549],{},"Selecione 'Emails' e insira seu e-mail em 'Policy rules'.\n",[516,550],{"alt":551,"src":552},"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",[479,554,556],{"id":555},"passo-2-configurar-o-cliente-cloudflare-warp-no-vps","Passo 2: Configurar o cliente Cloudflare WARP no VPS",[465,558,559,570,576,583,586,601,604,703],{},[468,560,561,562,565,566,569],{},"Execute ",[524,563,564],{},"sudo apt update"," e ",[524,567,568],{},"sudo apt install cloudflare-warp"," no terminal do seu VPS.",[468,571,561,572,575],{},[524,573,574],{},"warp-cli registration new \u003CTEAM-NAME>"," no terminal do seu VPS, o que exibirá um URL.",[468,577,578,579,582],{},"Copie o URL gerado, que será parecido com ",[524,580,581],{},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fwarp",", e cole-o no seu navegador para autenticação.",[468,584,585],{},"Como a autenticação por e-mail foi definida na configuração da política acima, insira seu e-mail para autenticar.",[468,587,588,589,592,593,596,597,600],{},"Na página de '",[433,590,591],{},"Success","' (Colaboração bem-sucedida) no navegador, clique com o botão direito e selecione '",[433,594,595],{},"Inspect","' (Inspecionar) no botão azul '",[433,598,599],{},"Open Cloudflare WARP","'.",[468,602,603],{},"Copie o token longo que aparece no link do botão.",[468,605,561,606,609,610,613,614],{},[524,607,608],{},"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.",[611,612],"br",{},"Se encontrar o 'Error: Failed to communicate with the WARP API' no Ubuntu 26, execute os seguintes comandos:",[615,616,620],"pre",{"className":617,"code":618,"language":619,"meta":424,"style":424},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","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","bash",[524,621,622,641,648,655,667,672,678],{"__ignoreMap":424},[623,624,627,631,635,638],"span",{"class":625,"line":626},"line",1,[623,628,630],{"class":629},"sBMFI","sudo",[623,632,634],{"class":633},"sfazB"," systemctl",[623,636,637],{"class":633}," restart",[623,639,640],{"class":633}," warp-svc.service\n",[623,642,644],{"class":625,"line":643},2,[623,645,647],{"emptyLinePlaceholder":646},true,"\n",[623,649,651],{"class":625,"line":650},3,[623,652,654],{"class":653},"sHwdD","# Check status\n",[623,656,658,660,662,665],{"class":625,"line":657},4,[623,659,630],{"class":629},[623,661,634],{"class":633},[623,663,664],{"class":633}," status",[623,666,640],{"class":633},[623,668,670],{"class":625,"line":669},5,[623,671,647],{"emptyLinePlaceholder":646},[623,673,675],{"class":625,"line":674},6,[623,676,677],{"class":653},"# Run the warp-cli registration token again\n",[623,679,681,684,687,690,693,697,700],{"class":625,"line":680},7,[623,682,683],{"class":629},"warp-cli",[623,685,686],{"class":633}," --accept-tos",[623,688,689],{"class":633}," registration",[623,691,692],{"class":633}," token",[623,694,696],{"class":695},"sMK4o","   \"",[623,698,699],{"class":633},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>",[623,701,702],{"class":695},"\"\n",[468,704,705,706],{},"Volte ao painel do Cloudflare Zero Trust e clique em 'Devices' (Dispositivos). O dispositivo do seu VPS deve ser exibido agora.\n",[516,707],{"alt":708,"src":709},"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",[479,711,713],{"id":712},"passo-3-configurar-o-roteamento-de-tráfego","Passo 3: Configurar o roteamento de tráfego",[465,715,716,723,730,737],{},[468,717,718,719],{},"Clique no perfil do seu VPS no painel de Dispositivos.\n",[516,720],{"alt":721,"src":722},"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",[468,724,725,726],{},"Role para baixo até a seção 'Split Tunnels' (Túneis divididos).\n",[516,727],{"alt":728,"src":729},"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",[468,731,732,733],{},"Clique no botão 'Manage' (Gerenciar) e defina as configurações conforme mostrado abaixo. Substitua o endereço IP, se necessário.\n",[516,734],{"alt":735,"src":736},"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",[468,738,739,740,743,744,747],{},"Expor o ",[524,741,742],{},"address"," (endereço) e o ",[524,745,746],{},"host"," roteará o tráfego para seus serviços pela mesma rede privada.",[479,749,751],{"id":750},"passo-4-configurar-o-firewall-no-vps","Passo 4: Configurar o Firewall no VPS",[429,753,754],{},"Habilite o firewall para permitir apenas a sub-rede '100.96.0.0\u002F12', bloqueando qualquer outro acesso público de entrada.",[615,756,758],{"className":617,"code":757,"language":619,"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",[524,759,760,774,791,805],{"__ignoreMap":424},[623,761,762,764,767,770],{"class":625,"line":626},[623,763,630],{"class":629},[623,765,766],{"class":633}," ufw",[623,768,769],{"class":633}," enable",[623,771,773],{"class":772},"sTEyZ"," \n",[623,775,776,778,780,783,786,789],{"class":625,"line":643},[623,777,630],{"class":629},[623,779,766],{"class":633},[623,781,782],{"class":633}," default",[623,784,785],{"class":633}," allow",[623,787,788],{"class":633}," outgoing",[623,790,773],{"class":772},[623,792,793,795,797,799,802],{"class":625,"line":650},[623,794,630],{"class":629},[623,796,766],{"class":633},[623,798,782],{"class":633},[623,800,801],{"class":633}," deny",[623,803,804],{"class":633}," incoming\n",[623,806,807,809,811,813,816,819],{"class":625,"line":657},[623,808,630],{"class":629},[623,810,766],{"class":633},[623,812,785],{"class":633},[623,814,815],{"class":633}," in",[623,817,818],{"class":633}," from",[623,820,821],{"class":633}," 100.96.0.0\u002F12\n",[429,823,824],{},"Permita o tráfego de loopback para evitar a interrupção de serviços locais:",[615,826,828],{"className":617,"code":827,"language":619,"meta":424,"style":424},"sudo ufw allow in on lo\nsudo ufw allow out on lo\n",[524,829,830,846],{"__ignoreMap":424},[623,831,832,834,836,838,840,843],{"class":625,"line":626},[623,833,630],{"class":629},[623,835,766],{"class":633},[623,837,785],{"class":633},[623,839,815],{"class":633},[623,841,842],{"class":633}," on",[623,844,845],{"class":633}," lo\n",[623,847,848,850,852,854,857,859],{"class":625,"line":643},[623,849,630],{"class":629},[623,851,766],{"class":633},[623,853,785],{"class":633},[623,855,856],{"class":633}," out",[623,858,842],{"class":633},[623,860,845],{"class":633},[429,862,863],{},"Recarregue o firewall e verifique o status:",[615,865,867],{"className":617,"code":866,"language":619,"meta":424,"style":424},"sudo ufw reload \nsudo ufw status verbose\n",[524,868,869,880],{"__ignoreMap":424},[623,870,871,873,875,878],{"class":625,"line":626},[623,872,630],{"class":629},[623,874,766],{"class":633},[623,876,877],{"class":633}," reload",[623,879,773],{"class":772},[623,881,882,884,886,888],{"class":625,"line":643},[623,883,630],{"class":629},[623,885,766],{"class":633},[623,887,664],{"class":633},[623,889,890],{"class":633}," verbose\n",[479,892,894],{"id":893},"passo-5-expor-o-hermes-agent-à-rede-privada","Passo 5: Expor o Hermes Agent à Rede Privada",[429,896,897,898,901,902,511],{},"Vamos expor o ",[433,899,900],{},"Hermes Agent Web Dashboard"," à nossa rede privada e usar o provedor de autenticação padrão, ",[433,903,904],{},"Nous Research",[906,907,909],"h4",{"id":908},"configurar-o-provedor-de-autenticação","Configurar o provedor de autenticação",[465,911,912,921,928,935,942],{},[468,913,914,915,920],{},"Vá até ",[449,916,919],{"href":917,"rel":918},"https:\u002F\u002Fportal.nousresearch.com",[509],"portal.nousresearch.com"," para registrar uma conta.",[468,922,923,924],{},"Selecione 'Local Dashboards' (Painéis locais).\n",[516,925],{"alt":926,"src":927},"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",[468,929,930,931],{},"Clique em 'Register Dashboard' (Registrar painel).\n",[516,932],{"alt":933,"src":934},"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",[468,936,937,938],{},"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",[516,939],{"alt":940,"src":941},"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",[468,943,944,945,948],{},"Copie o 'OAuth client ID' e cole-o em seu arquivo ",[524,946,947],{},"config.yaml",":",[615,950,954],{"className":951,"code":952,"language":953,"meta":424,"style":424},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","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","yaml",[524,955,956,965,975,986,993,1003,1013,1020,1031],{"__ignoreMap":424},[623,957,958,962],{"class":625,"line":626},[623,959,961],{"class":960},"swJcz","dashboard",[623,963,964],{"class":695},":\n",[623,966,967,970,972],{"class":625,"line":643},[623,968,969],{"class":960},"  theme",[623,971,948],{"class":695},[623,973,974],{"class":633}," default\n",[623,976,977,980,982],{"class":625,"line":650},[623,978,979],{"class":960},"  show_token_analytics",[623,981,948],{"class":695},[623,983,985],{"class":984},"sfNiH"," false\n",[623,987,988,991],{"class":625,"line":657},[623,989,990],{"class":960},"  oauth",[623,992,964],{"class":695},[623,994,995,998,1000],{"class":625,"line":669},[623,996,997],{"class":960},"    client_id",[623,999,948],{"class":695},[623,1001,1002],{"class":633}," agent:cmq02x7ha0002jk0ba3kfnb\n",[623,1004,1005,1008,1010],{"class":625,"line":674},[623,1006,1007],{"class":960},"    portal_url",[623,1009,948],{"class":695},[623,1011,1012],{"class":633}," https:\u002F\u002Fportal.nousresearch.com\n",[623,1014,1015,1018],{"class":625,"line":680},[623,1016,1017],{"class":960},"  basic_auth",[623,1019,964],{"class":695},[623,1021,1023,1026,1028],{"class":625,"line":1022},8,[623,1024,1025],{"class":960},"    username",[623,1027,948],{"class":695},[623,1029,1030],{"class":695}," ''\n",[623,1032,1034,1037,1039],{"class":625,"line":1033},9,[623,1035,1036],{"class":960},"    password_hash",[623,1038,948],{"class":695},[623,1040,1030],{"class":695},[906,1042,1044],{"id":1043},"configurar-o-systemd-para-iniciar-automaticamente-o-painel-do-hermes","Configurar o Systemd para Iniciar Automaticamente o Painel do Hermes",[465,1046,1047],{},[468,1048,1049],{},"Crie um arquivo de serviço:",[615,1051,1055],{"className":1052,"code":1053,"language":1054,"meta":424,"style":424},"language-shell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n","shell",[524,1056,1057],{"__ignoreMap":424},[623,1058,1059,1061,1064],{"class":625,"line":626},[623,1060,630],{"class":629},[623,1062,1063],{"class":633}," nano",[623,1065,1066],{"class":633}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[465,1068,1069],{"start":643},[468,1070,1071,1072,1075],{},"Cole a seguinte configuração, garantindo que ",[524,1073,1074],{},"--host 0.0.0.0"," faça parte do comando:",[615,1077,1081],{"className":1078,"code":1079,"language":1080,"meta":424,"style":424},"language-ini shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[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","ini",[524,1082,1083,1088,1093,1098,1102,1107,1112,1117,1122,1127,1133,1139,1144,1150],{"__ignoreMap":424},[623,1084,1085],{"class":625,"line":626},[623,1086,1087],{},"[Unit]\n",[623,1089,1090],{"class":625,"line":643},[623,1091,1092],{},"Description=Hermes Dashboard\n",[623,1094,1095],{"class":625,"line":650},[623,1096,1097],{},"After=network.target\n",[623,1099,1100],{"class":625,"line":657},[623,1101,647],{"emptyLinePlaceholder":646},[623,1103,1104],{"class":625,"line":669},[623,1105,1106],{},"[Service]\n",[623,1108,1109],{"class":625,"line":674},[623,1110,1111],{},"User=hermes\n",[623,1113,1114],{"class":625,"line":680},[623,1115,1116],{},"WorkingDirectory=\u002Fhome\u002Fhermes\n",[623,1118,1119],{"class":625,"line":1022},[623,1120,1121],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes dashboard --host 0.0.0.0\n",[623,1123,1124],{"class":625,"line":1033},[623,1125,1126],{},"Restart=always\n",[623,1128,1130],{"class":625,"line":1129},10,[623,1131,1132],{},"RestartSec=10\n",[623,1134,1136],{"class":625,"line":1135},11,[623,1137,1138],{},"Environment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n",[623,1140,1142],{"class":625,"line":1141},12,[623,1143,647],{"emptyLinePlaceholder":646},[623,1145,1147],{"class":625,"line":1146},13,[623,1148,1149],{},"[Install]\n",[623,1151,1153],{"class":625,"line":1152},14,[623,1154,1155],{},"WantedBy=multi-user.target\n",[465,1157,1158],{"start":650},[468,1159,1160],{},"Habilite e inicie o serviço:",[615,1162,1164],{"className":1052,"code":1163,"language":1054,"meta":424,"style":424},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-dashboard\nsudo systemctl start hermes-dashboard\nsudo systemctl status hermes-dashboard\n",[524,1165,1166,1175,1186,1197],{"__ignoreMap":424},[623,1167,1168,1170,1172],{"class":625,"line":626},[623,1169,630],{"class":629},[623,1171,634],{"class":633},[623,1173,1174],{"class":633}," daemon-reload\n",[623,1176,1177,1179,1181,1183],{"class":625,"line":643},[623,1178,630],{"class":629},[623,1180,634],{"class":633},[623,1182,769],{"class":633},[623,1184,1185],{"class":633}," hermes-dashboard\n",[623,1187,1188,1190,1192,1195],{"class":625,"line":650},[623,1189,630],{"class":629},[623,1191,634],{"class":633},[623,1193,1194],{"class":633}," start",[623,1196,1185],{"class":633},[623,1198,1199,1201,1203,1205],{"class":625,"line":657},[623,1200,630],{"class":629},[623,1202,634],{"class":633},[623,1204,664],{"class":633},[623,1206,1185],{"class":633},[479,1208,1210],{"id":1209},"passo-6-instalar-o-cliente-cloudflare-warp-no-desktop","Passo 6: Instalar o cliente Cloudflare WARP no Desktop",[465,1212,1213,1221,1224,1231,1238,1245],{},[468,1214,1215,1216,511],{},"Baixe o cliente Cloudflare WARP pelo ",[449,1217,1220],{"href":1218,"rel":1219},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fwarp-client\u002Fget-started\u002F",[509],"portal da Cloudflare",[468,1222,1223],{},"Abra e inicie o cliente Cloudflare WARP após a instalação.",[468,1225,1226,1227],{},"Faça login quando solicitado.\n",[516,1228],{"alt":1229,"src":1230},"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",[468,1232,1233,1234],{},"Uma página de 'Success' (Sucesso) será exibida após o login.\n",[516,1235],{"alt":1236,"src":1237},"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",[468,1239,1240,1241],{},"O cliente WARP agora deve mostrar que está conectado à sua equipe do Zero Trust.\n",[516,1242],{"alt":1243,"src":1244},"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",[468,1246,1247,1248,1251,1252],{},"Navegue até o seu navegador e insira o seu IP privado (ex., ",[524,1249,1250],{},"100.96.0.3","). O Hermes Web Dashboard deve ser carregado com sucesso.\n",[516,1253],{"alt":1254,"src":1255},"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",[1257,1258,1259],"blockquote",{},[429,1260,1261,1264,1265,1270],{},[433,1262,1263],{},"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 ",[433,1266,1267],{},[449,1268,1269],{"href":399},"Alternar entre múltiplos perfis do Cloudflare WARP no macOS"," para alternar entre as contas sem problemas.",[479,1272,1274],{"id":1273},"passo-7-instalar-o-cliente-cloudflare-warp-em-dispositivos-ios","Passo 7: Instalar o cliente Cloudflare WARP em Dispositivos iOS",[465,1276,1277,1284,1292,1300,1308],{},[468,1278,1279,1280,1283],{},"Instale o ",[433,1281,1282],{},"Cloudflare One"," através da App Store.",[468,1285,1286,1287],{},"Abra o aplicativo Cloudflare One e insira o nome da sua equipe quando solicitado.\n",[516,1288],{"alt":1289,"src":1290,"width":1291},"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,[468,1293,1294,1295],{},"Faça login usando o mesmo endereço de e-mail que foi configurado na regra de política acima.\n",[516,1296],{"alt":1297,"src":1298,"width":1299},"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,[468,1301,1302,1303],{},"Assim que estiver conectado, a tela deve ficar parecida com isto:\n",[516,1304],{"alt":1305,"src":1306,"width":1307},"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,[468,1309,1310,1311,1313,1314],{},"Navegue até o seu navegador e insira o IP privado ",[524,1312,1250],{}," para acessar o Hermes Web Dashboard no seu dispositivo móvel.\n",[516,1315],{"alt":1316,"src":1317,"width":1318},"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,[457,1320,1322],{"id":1321},"conclusão","Conclusão",[429,1324,1325,1326,1328,1329,1332],{},"Com o ",[433,1327,443],{}," gerenciando as políticas de identidade e o cliente ",[433,1330,1331],{},"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.",[1334,1335,1336],"style",{},"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":643,"depth":650,"links":1338},[1339,1342,1354],{"id":459,"depth":643,"text":460,"children":1340},[1341],{"id":481,"depth":650,"text":482},{"id":494,"depth":643,"text":495,"children":1343},[1344,1345,1346,1347,1348,1352,1353],{"id":498,"depth":650,"text":499},{"id":555,"depth":650,"text":556},{"id":712,"depth":650,"text":713},{"id":750,"depth":650,"text":751},{"id":893,"depth":650,"text":894,"children":1349},[1350,1351],{"id":908,"depth":657,"text":909},{"id":1043,"depth":657,"text":1044},{"id":1209,"depth":650,"text":1210},{"id":1273,"depth":650,"text":1274},{"id":1321,"depth":643,"text":1322},[1356,1357],"ai-agents","security","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.","md","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":1364,"robots":1367,"sitemap":1368},[1365],{"@type":1366,"headline":423,"description":1359,"name":423,"image":1361},"HowTo","index, follow",{"lastmod":1369},"2026-09-28",{"title":1371,"description":1359,"ogTitle":423,"ogDescription":1359,"twitterTitle":423,"twitterDescription":1359},"Acesso seguro ao Hermes Agent com Cloudflare Zero Trust","pt\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",[439,1374,435,1375,1376],"Zero Trust","Rede privada","Tutorial","YSMA4-lqPipX1pmOP069tbQJepC0q97hwEJOym2fqzI",{"surround":1379,"related":4072},[1380,2844],{"id":1381,"title":1382,"author":424,"body":1383,"category":2822,"date":2824,"description":2825,"extension":1360,"image":2826,"imageAlt":2827,"isPublished":646,"meta":2828,"minRead":2095,"navigation":646,"path":239,"seo":2835,"stem":2837,"tags":2838,"updatedAt":2842,"__hash__":2843},"article\u002Fpt\u002Farticle\u002Fsync-obsidian-across-devices.md","Sincronizar cofres do Obsidian entre dispositivos",{"type":426,"value":1384,"toc":2800},[1385,1388,1393,1402,1411,1429,1434,1443,1447,1453,1467,1483,1486,1490,1494,1501,1506,1510,1515,1573,1580,1612,1616,1623,1631,1638,1700,1703,1722,1729,1741,1745,1749,1760,1765,1775,1797,1802,1816,1821,1827,1832,1847,1850,1855,1858,1863,1867,1872,1887,1891,1905,1915,1919,1924,1927,1937,1970,1974,1981,2125,2159,2164,2185,2196,2201,2205,2215,2286,2290,2296,2333,2464,2471,2477,2483,2489,2492,2498,2504,2518,2529,2536,2542,2549,2678,2684,2689,2692,2697,2700,2704,2709,2714,2720,2731,2741,2745,2756,2761,2767,2770,2774,2797],[429,1386,1387],{},"O Obsidian é uma aplicação de gestão de conhecimento que prioriza o armazenamento local (local-first). Cada nota é um ficheiro markdown no seu dispositivo e permanece inteiramente sob o seu controlo. No entanto, muitas vezes pretendemos ter o mesmo cofre (vault) no portátil, no telemóvel e noutros dispositivos, ou poder aceder-lhe remotamente através de um navegador web.",[516,1389],{"src":1390,"alt":1391,"style":1392},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-multi-device-sync-illustration.webp","Ilustração do cofre do Obsidian sincronizado em vários dispositivos","max-width: 667px; width: 100%; height: auto;",[429,1394,1395,1396,1401],{},"Existem várias soluções de sincronização disponíveis para o Obsidian, mas todas elas implicam cedências no que toca à gestão de conflitos, encriptação ou soberania dos dados. O ",[449,1397,1400],{"href":1398,"rel":1399},"https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch",[509],"Synch"," é uma aplicação de código aberto que sincroniza o seu cofre do Obsidian com encriptação de ponta a ponta e gestão automática de conflitos num servidor auto-hospedado.",[429,1403,1404,1405,1410],{},"Embora a abordagem local-first do Obsidian funcione perfeitamente na maior parte do tempo, podemos ainda necessitar de aceder ao nosso cofre remotamente através de um navegador web em certas ocasiões. O ",[449,1406,1409],{"href":1407,"rel":1408},"https:\u002F\u002Fgithub.com\u002FNystik-gh\u002Fignis",[509],"Ignis"," é uma aplicação de código aberto que executa o Obsidian dentro de um navegador web num formato muito próximo do nativo, permitindo-lhe ler e editar o seu cofre a partir de qualquer lugar.",[429,1412,1413,1414,1416,1417,1419,1420,1423,1424,1428],{},"Neste guia, iremos configurar o ",[433,1415,1400],{}," e o ",[433,1418,1409],{}," num ",[433,1421,1422],{},"VPS"," (Servidor Privado Virtual), alojando-os de forma segura dentro de uma rede privada ",[433,1425,1426],{},[449,1427,443],{"href":363},", em vez de os expor à internet aberta.",[516,1430],{"src":1431,"alt":1432,"style":1433},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-sync-cloudflare-zero-trust-architecture.webp","Diagrama de arquitetura da sincronização do Obsidian usando Cloudflare Zero Trust","max-width: 671px; width: 100%; height: auto;",[1435,1436],"article-card",{"description":1437,"image":1438,"image-alt":1439,"label":1440,"min-read":1441,"title":1442,"to":363},"Saiba como expor e aceder ao seu Hermes Agent globalmente de forma segura usando o Cloudflare WARP e Zero Trust sem abrir portas de entrada no firewall.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002FEN-Exposing-Hermes-Agent-to-Private-Network-Using-Cloudflare-WARP.webp","Exposição segura do Hermes Agent a uma rede privada usando o túnel Cloudflare Zero Trust e WARP","Guia relacionado","8","Como expor o Hermes Agent de forma privada com o Cloudflare WARP",[457,1444,1446],{"id":1445},"sincronização-segura-de-cofres-do-obsidian-com-o-synch","Sincronização segura de cofres do Obsidian com o Synch",[429,1448,1449,1450,1452],{},"O ",[433,1451,1400],{}," oferece as seguintes funcionalidades:",[484,1454,1455,1458,1461,1464],{},[468,1456,1457],{},"Sincroniza o seu cofre assim que são detetadas alterações",[468,1459,1460],{},"Encripta os dados do cofre antes do carregamento",[468,1462,1463],{},"Permite a restauração a partir do histórico de versões",[468,1465,1466],{},"Inclui gestão automática de conflitos",[429,1468,1449,1469,1471,1472,1475,1476,1479,1480,1482],{},[433,1470,1400],{}," gera uma ",[433,1473,1474],{},"chave de cofre"," aleatória de 32 bytes no seu dispositivo, que é utilizada para encriptar os dados do cofre. Quando cria um cofre remoto, escolhe uma ",[433,1477,1478],{},"palavra-passe do cofre","; esta palavra-passe é utilizada para proteger a ",[433,1481,1474],{},", permitindo que esta seja armazenada de forma segura no servidor e desbloqueada noutros dispositivos.",[429,1484,1485],{},"Note que a resolução de conflitos é gerida nos seus dispositivos de cliente e não no servidor. Se dois dispositivos editarem a mesma nota simultaneamente, o servidor mantém a versão que chegar primeiro e marca o outro dispositivo como desatualizado. O dispositivo desatualizado junta automaticamente a versão mais recente com as suas alterações locais antes de enviar a nota final combinada.",[479,1487,1489],{"id":1488},"configurar-o-synch-no-seu-vps","Configurar o Synch no seu VPS",[906,1491,1493],{"id":1492},"criar-um-nome-de-domínio","Criar um nome de domínio",[429,1495,1496,1497,1500],{},"Crie um registo A no Cloudflare e defina o estado do proxy para ",[433,1498,1499],{},"Apenas DNS"," (ignorando o CDN do Cloudflare).",[516,1502],{"src":1503,"alt":1504,"style":1505},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fcloudflare-dns-a-record-synch-server.webp","Configurando um registro A de DNS para o servidor Synch no Cloudflare","max-width: 538px; width: 100%; height: auto;",[906,1507,1509],{"id":1508},"instalar-o-synch-com-docker-no-ubuntu","Instalar o Synch com Docker no Ubuntu",[1511,1512,1514],"h5",{"id":1513},"clonar-o-repositório","Clonar o repositório",[615,1516,1518],{"className":617,"code":1517,"language":619,"meta":424,"style":424},"git clone https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch.git       \n        \n# Navegar para a pasta da API\ncd synch\u002Fapps\u002Fapi\n        \n# Copiar o ficheiro de ambiente de exemplo:\ncp .env.example .env\n",[524,1519,1520,1534,1539,1544,1553,1557,1562],{"__ignoreMap":424},[623,1521,1522,1525,1528,1531],{"class":625,"line":626},[623,1523,1524],{"class":629},"git",[623,1526,1527],{"class":633}," clone",[623,1529,1530],{"class":633}," https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch.git",[623,1532,1533],{"class":772},"       \n",[623,1535,1536],{"class":625,"line":643},[623,1537,1538],{"class":772},"        \n",[623,1540,1541],{"class":625,"line":650},[623,1542,1543],{"class":653},"# Navegar para a pasta da API\n",[623,1545,1546,1550],{"class":625,"line":657},[623,1547,1549],{"class":1548},"s2Zo4","cd",[623,1551,1552],{"class":633}," synch\u002Fapps\u002Fapi\n",[623,1554,1555],{"class":625,"line":669},[623,1556,1538],{"class":772},[623,1558,1559],{"class":625,"line":674},[623,1560,1561],{"class":653},"# Copiar o ficheiro de ambiente de exemplo:\n",[623,1563,1564,1567,1570],{"class":625,"line":680},[623,1565,1566],{"class":629},"cp",[623,1568,1569],{"class":633}," .env.example",[623,1571,1572],{"class":633}," .env\n",[1511,1574,1576,1577],{"id":1575},"editar-os-valores-do-env","Editar os valores do ",[524,1578,1579],{},".env",[484,1581,1582,1588,1606],{},[468,1583,1584,1587],{},[524,1585,1586],{},"PUBLIC_URL=synch.pafor.me",": Introduza o nome de domínio público do seu servidor Synch (o nome de domínio criado no passo anterior).",[468,1589,1590,565,1593,1596,1597,1601,1602,1605],{},[524,1591,1592],{},"BETTER_AUTH_SECRET",[524,1594,1595],{},"SYNC_TOKEN_SECRET",": Gere chaves seguras utilizando esta ",[449,1598,1600],{"href":1599},"\u002Fpt\u002Ftools\u002Fsecret-key-hex","ferramenta online de chaves secretas"," ou executando ",[524,1603,1604],{},"openssl rand -hex 32"," duas vezes no seu terminal.",[468,1607,1608,1611],{},[524,1609,1610],{},"AUTH_ALLOWED_EMAILS",": Uma lista separada por vírgulas dos endereços de e-mail autorizados a registar-se e criar contas.",[1511,1613,1615],{"id":1614},"adicionar-o-domínio-ao-caddyfile","Adicionar o domínio ao Caddyfile",[429,1617,1618,1619,511],{},"Os detalhes sobre como o módulo DNS do Cloudflare é integrado com o Caddy e iniciado num contentor podem ser consultados no nosso ",[449,1620,1622],{"href":1621},"\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#_4-enable-https-with-caddy","artigo sobre a auto-hospedagem do Buzz",[1435,1624],{"description":1625,"image":1626,"image-alt":1627,"label":1628,"min-read":1629,"title":1630,"to":1621},"Saiba como configurar o Caddy para fornecer automaticamente certificados SSL\u002FTLS utilizando desafios DNS do Cloudflare em contentores Docker.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002FEN-Self-Hosting-Buzz-As-The-Workspace-Where-AI-Agents-Become-Colleagues.webp","Configuração do Caddy com token de API do Cloudflare DNS para geração automática de certificados SSL\u002FTLS num espaço de trabalho auto-hospedado","Guia de auto-hospedagem","12","Como auto-hospedar o Buzz do Block: Espaço para agentes de IA",[429,1632,1633,1634,1637],{},"Inclua a diretiva ",[524,1635,1636],{},"SYNCH_DOMAIN"," no seu Caddyfile, apontando para a porta 8787 (a porta utilizada pelo contentor do Synch):",[615,1639,1643],{"className":1640,"code":1641,"language":1642,"meta":424,"style":424},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}\n}\n\n{$SYNCH_DOMAIN} {\n  encode zstd gzip\n  reverse_proxy host.docker.internal:8787\n}\n","json",[524,1644,1645,1650,1658,1662,1666,1680,1685,1696],{"__ignoreMap":424},[623,1646,1647],{"class":625,"line":626},[623,1648,1649],{"class":695},"{\n",[623,1651,1652,1655],{"class":625,"line":643},[623,1653,1654],{"class":772},"  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN",[623,1656,1657],{"class":695},"}\n",[623,1659,1660],{"class":625,"line":650},[623,1661,1657],{"class":772},[623,1663,1664],{"class":625,"line":657},[623,1665,647],{"emptyLinePlaceholder":646},[623,1667,1668,1671,1674,1677],{"class":625,"line":669},[623,1669,1670],{"class":695},"{",[623,1672,1673],{"class":772},"$SYNCH_DOMAIN",[623,1675,1676],{"class":695},"}",[623,1678,1679],{"class":695}," {\n",[623,1681,1682],{"class":625,"line":674},[623,1683,1684],{"class":772},"  encode zstd gzip\n",[623,1686,1687,1690,1692],{"class":625,"line":680},[623,1688,1689],{"class":772},"  reverse_proxy host.docker.internal",[623,1691,948],{"class":695},[623,1693,1695],{"class":1694},"sbssI","8787\n",[623,1697,1698],{"class":625,"line":1022},[623,1699,1657],{"class":695},[429,1701,1702],{},"Inicie o contentor:",[615,1704,1706],{"className":617,"code":1705,"language":619,"meta":424,"style":424},"docker compose up -d\n",[524,1707,1708],{"__ignoreMap":424},[623,1709,1710,1713,1716,1719],{"class":625,"line":626},[623,1711,1712],{"class":629},"docker",[623,1714,1715],{"class":633}," compose",[623,1717,1718],{"class":633}," up",[623,1720,1721],{"class":633}," -d\n",[429,1723,1724,1725,1728],{},"Execute o seguinte comando ",[524,1726,1727],{},"curl"," para verificar a sua disponibilidade:",[615,1730,1732],{"className":617,"code":1731,"language":619,"meta":424,"style":424},"curl https:\u002F\u002Fsynch.pafor.me\u002Fhealth\n",[524,1733,1734],{"__ignoreMap":424},[623,1735,1736,1738],{"class":625,"line":626},[623,1737,1727],{"class":629},[623,1739,1740],{"class":633}," https:\u002F\u002Fsynch.pafor.me\u002Fhealth\n",[479,1742,1744],{"id":1743},"ligar-o-obsidian-ao-seu-servidor-synch","Ligar o Obsidian ao seu servidor Synch",[906,1746,1748],{"id":1747},"instalar-o-plug-in-synch-no-obsidian","Instalar o plug-in Synch no Obsidian",[429,1750,1751,1752,1755,1756,1759],{},"Abra as Definições do Obsidian, navegue para ",[433,1753,1754],{},"Community plugins"," (Plug-ins da comunidade) e clique no botão ",[433,1757,1758],{},"'Browse'"," (Procurar):",[516,1761],{"src":1762,"alt":1763,"style":1764},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-community-plugins-browse.webp","Explorando plugins da comunidade nas configurações do Obsidian","max-width: 523px; width: 100%; height: auto;",[429,1766,1767,1768,964,1771],{},"Procure e instale ",[433,1769,1770],{},"'Synchrun'",[516,1772],{"src":1773,"alt":1774,"style":1505},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-install-synchrun-plugin.webp","Instalando o plugin Synchrun no Obsidian",[429,1776,1777,1778,1780,1781,1784,1785,1788,1789,1792,1793,1796],{},"Assim que o ",[433,1779,1770],{}," estiver instalado, abra as definições do plug-in e ative ",[433,1782,1783],{},"'Use a self-hosted server'"," (Utilizar um servidor auto-hospedado). Em seguida, introduza ",[524,1786,1787],{},"https:\u002F\u002Fsynch.pafor.me"," no campo ",[433,1790,1791],{},"'Server URL'"," (URL do Servidor) e clique em ",[433,1794,1795],{},"'Save'"," (Guardar).",[516,1798],{"src":1799,"alt":1800,"style":1801},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-plugin-settings-self-hosted.webp","Configurando a URL do servidor auto-hospedado no Synchrun","max-width: 525px; width: 100%; height: auto;",[429,1803,1804,1805,1808,1809,1812,1813,1815],{},"Clique no botão ",[433,1806,1807],{},"'Sign in on this device'"," (Iniciar sessão neste dispositivo) sob ",[433,1810,1811],{},"'Account'"," (Conta). A seguir, registe-se para obter uma conta utilizando o endereço de e-mail especificado na sua lista ",[524,1814,1610],{},"; será então redirecionado para a seguinte página de autorização:",[516,1817],{"src":1818,"alt":1819,"style":1820},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-account-authorization-page.webp","Página de autorização de conta para o Synchrun","max-width: 494px; width: 100%; height: auto;",[429,1822,1804,1823,1826],{},[433,1824,1825],{},"'Allow Obsidian sign-in'"," (Permitir início de sessão no Obsidian):",[516,1828],{"src":1829,"alt":1830,"style":1831},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-allow-obsidian-signin.webp","Permitindo o login do Obsidian para o Synch","max-width: 498px; width: 100%; height: auto;",[429,1833,1804,1834,1837,1838,1841,1842],{},[433,1835,1836],{},"'Return to Obsidian'"," (Voltar ao Obsidian) e, em seguida, clique em ",[433,1839,1840],{},"'Create vault'"," (Criar cofre):\n",[516,1843],{"src":1844,"alt":1845,"style":1846},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-create-remote-vault.webp","Criando um novo cofre remoto no Synchrun","max-width: 496px; width: 100%; height: auto;",[429,1848,1849],{},"Introduza um nome e uma palavra-passe segura para criar o seu cofre remoto.",[516,1851],{"src":1852,"alt":1853,"style":1854},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-vault-password-setup.webp","Configurando uma senha segura para o cofre remoto do Obsidian","max-width: 500px; width: 100%; height: auto;",[429,1856,1857],{},"O processo de sincronização será iniciado de imediato e poderá demorar algum tempo, dependendo do tamanho do seu cofre. Uma vez concluído, será exibida a sua utilização total de armazenamento.",[516,1859],{"src":1860,"alt":1861,"style":1862},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-sync-completed-storage.webp","Sincronização concluída no Synchrun mostrando o armazenamento total utilizado","max-width: 508px; width: 100%; height: auto;",[457,1864,1866],{"id":1865},"acesso-ao-obsidian-no-navegador-com-o-ignis","Acesso ao Obsidian no navegador com o Ignis",[429,1868,1449,1869,1871],{},[433,1870,1409],{}," substitui as APIs Electron do Obsidian por APIs Web, o que permite que o código JavaScript do Obsidian seja executado diretamente num navegador web normal. Todos os seus ficheiros markdown e anexos são guardados diretamente no sistema de ficheiros do servidor anfitrião.",[429,1873,1874,1875,1880,1881,1886],{},"Contudo, existem algumas limitações em comparação com a aplicação nativa de ambiente de trabalho do Obsidian. Algumas funcionalidades ou plug-ins que requerem APIs do Electron ou Node.js (que não têm equivalente direto num ambiente de navegador) não irão funcionar. Consulte os guias de ",[449,1876,1879],{"href":1877,"rel":1878},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fusing\u002Flimitations\u002F",[509],"Limitações"," e de ",[449,1882,1885],{"href":1883,"rel":1884},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fusing\u002Fplugin-compatibility\u002F",[509],"Compatibilidade de plug-ins"," do Ignis para obter listagens detalhadas de compatibilidade.",[479,1888,1890],{"id":1889},"configuração-do-ignis","Configuração do Ignis",[429,1892,1893,1894,1896,1897,1900,1901,1904],{},"Iremos instalar o ",[433,1895,1409],{}," no nosso VPS utilizando o Docker, montando-o na pasta local ",[524,1898,1899],{},".\u002Fvaults",". Este diretório do cofre será sincronizado utilizando a ",[433,1902,1903],{},"Synch CLI"," para descarregar as atualizações das notas a partir do cofre remoto que configurámos anteriormente.",[429,1906,1907,1908,1910,1911,511],{},"Como o ",[433,1909,1409],{}," não possui autenticação integrada, deve ser protegido por trás de uma rede privada ",[433,1912,1913],{},[449,1914,443],{"href":363},[906,1916,1918],{"id":1917},"criar-registo-dns","Criar registo DNS",[516,1920],{"src":1921,"alt":1922,"style":1923},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fcloudflare-dns-a-record-ignis.webp","Configurando um registro A de DNS para o cliente web Ignis no Cloudflare","max-width: 552px; width: 100%; height: auto;",[906,1925,1615],{"id":1926},"adicionar-o-domínio-ao-caddyfile-1",[429,1928,1929,1930,1933,1934,948],{},"Adicione ",[524,1931,1932],{},"obsidian.pafor.me"," ao seu Caddyfile da mesma forma que ",[524,1935,1936],{},"synch.pafor.me",[615,1938,1940],{"className":1640,"code":1939,"language":1642,"meta":424,"style":424},"{$OBSIDIAN_DOMAIN} {\n  encode zstd gzip\n  reverse_proxy host.docker.internal:9898\n}\n",[524,1941,1942,1953,1957,1966],{"__ignoreMap":424},[623,1943,1944,1946,1949,1951],{"class":625,"line":626},[623,1945,1670],{"class":695},[623,1947,1948],{"class":772},"$OBSIDIAN_DOMAIN",[623,1950,1676],{"class":695},[623,1952,1679],{"class":695},[623,1954,1955],{"class":625,"line":643},[623,1956,1684],{"class":772},[623,1958,1959,1961,1963],{"class":625,"line":650},[623,1960,1689],{"class":772},[623,1962,948],{"class":695},[623,1964,1965],{"class":1694},"9898\n",[623,1967,1968],{"class":625,"line":657},[623,1969,1657],{"class":695},[906,1971,1973],{"id":1972},"iniciar-o-ignis-utilizando-o-docker","Iniciar o Ignis utilizando o Docker",[429,1975,1976,1977,1980],{},"Guarde o seguinte ficheiro docker compose yml como ",[524,1978,1979],{},"ignis-docker-compose.yml"," no VPS:",[615,1982,1986],{"className":1983,"code":1984,"language":1985,"meta":424,"style":424},"language-yml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","services:\n  ignis:\n    image: nobbe\u002Fignis:latest\n    ports:\n      - \"9898:8080\"\n    environment:\n      # coincidir com o utilizador do seu host (executar: id)\n      - PUID=1000\n      - PGID=1000\n      - WS_ORIGINS=https:\u002F\u002Fobsidian.pafor.me\n    volumes:\n      - .\u002Fvaults:\u002Fvaults\n      - .\u002Fdata:\u002Fapp\u002Fdata\n      - obsidian-app:\u002Fapp\u002Fobsidian-app\n    restart: unless-stopped\n\nvolumes:\n  obsidian-app:\n","yml",[524,1987,1988,1995,2002,2012,2019,2032,2039,2044,2051,2058,2065,2072,2079,2086,2093,2104,2109,2117],{"__ignoreMap":424},[623,1989,1990,1993],{"class":625,"line":626},[623,1991,1992],{"class":960},"services",[623,1994,964],{"class":695},[623,1996,1997,2000],{"class":625,"line":643},[623,1998,1999],{"class":960},"  ignis",[623,2001,964],{"class":695},[623,2003,2004,2007,2009],{"class":625,"line":650},[623,2005,2006],{"class":960},"    image",[623,2008,948],{"class":695},[623,2010,2011],{"class":633}," nobbe\u002Fignis:latest\n",[623,2013,2014,2017],{"class":625,"line":657},[623,2015,2016],{"class":960},"    ports",[623,2018,964],{"class":695},[623,2020,2021,2024,2027,2030],{"class":625,"line":669},[623,2022,2023],{"class":695},"      -",[623,2025,2026],{"class":695}," \"",[623,2028,2029],{"class":633},"9898:8080",[623,2031,702],{"class":695},[623,2033,2034,2037],{"class":625,"line":674},[623,2035,2036],{"class":960},"    environment",[623,2038,964],{"class":695},[623,2040,2041],{"class":625,"line":680},[623,2042,2043],{"class":653},"      # coincidir com o utilizador do seu host (executar: id)\n",[623,2045,2046,2048],{"class":625,"line":1022},[623,2047,2023],{"class":695},[623,2049,2050],{"class":633}," PUID=1000\n",[623,2052,2053,2055],{"class":625,"line":1033},[623,2054,2023],{"class":695},[623,2056,2057],{"class":633}," PGID=1000\n",[623,2059,2060,2062],{"class":625,"line":1129},[623,2061,2023],{"class":695},[623,2063,2064],{"class":633}," WS_ORIGINS=https:\u002F\u002Fobsidian.pafor.me\n",[623,2066,2067,2070],{"class":625,"line":1135},[623,2068,2069],{"class":960},"    volumes",[623,2071,964],{"class":695},[623,2073,2074,2076],{"class":625,"line":1141},[623,2075,2023],{"class":695},[623,2077,2078],{"class":633}," .\u002Fvaults:\u002Fvaults\n",[623,2080,2081,2083],{"class":625,"line":1146},[623,2082,2023],{"class":695},[623,2084,2085],{"class":633}," .\u002Fdata:\u002Fapp\u002Fdata\n",[623,2087,2088,2090],{"class":625,"line":1152},[623,2089,2023],{"class":695},[623,2091,2092],{"class":633}," obsidian-app:\u002Fapp\u002Fobsidian-app\n",[623,2094,2096,2099,2101],{"class":625,"line":2095},15,[623,2097,2098],{"class":960},"    restart",[623,2100,948],{"class":695},[623,2102,2103],{"class":633}," unless-stopped\n",[623,2105,2107],{"class":625,"line":2106},16,[623,2108,647],{"emptyLinePlaceholder":646},[623,2110,2112,2115],{"class":625,"line":2111},17,[623,2113,2114],{"class":960},"volumes",[623,2116,964],{"class":695},[623,2118,2120,2123],{"class":625,"line":2119},18,[623,2121,2122],{"class":960},"  obsidian-app",[623,2124,964],{"class":695},[484,2126,2127,2138,2152],{},[468,2128,2129,2130,2133,2134,2137],{},"Utilize a porta ",[524,2131,2132],{},"9898"," no host, visto que a ",[524,2135,2136],{},"8080"," é habitualmente utilizada por outros serviços.",[468,2139,2140,2141,2144,2145,1416,2148,2151],{},"Execute o comando ",[524,2142,2143],{},"id"," no seu VPS para verificar o ",[524,2146,2147],{},"UID",[524,2149,2150],{},"GID"," do utilizador do seu host para garantir as permissões corretas do sistema de ficheiros.",[468,2153,2154,2155,2158],{},"Defina ",[524,2156,2157],{},"WS_ORIGINS"," para permitir apenas ligações WebSocket originárias do seu nome de domínio específico.",[429,2160,2161,2162,948],{},"Inicie o Docker do ",[433,2163,1409],{},[615,2165,2167],{"className":617,"code":2166,"language":619,"meta":424,"style":424},"docker compose -f ignis-docker-compose.yml up -d\n",[524,2168,2169],{"__ignoreMap":424},[623,2170,2171,2173,2175,2178,2181,2183],{"class":625,"line":626},[623,2172,1712],{"class":629},[623,2174,1715],{"class":633},[623,2176,2177],{"class":633}," -f",[623,2179,2180],{"class":633}," ignis-docker-compose.yml",[623,2182,1718],{"class":633},[623,2184,1721],{"class":633},[429,2186,2187,2188,2191,2192,2195],{},"Ao aceder ao seu domínio num navegador web, surgirá o ",[433,2189,2190],{},"'Vault Manager'"," (Gestor de Cofres). Estará vazio, uma vez que ainda não configurou nenhum cofre. Iremos configurar a ",[433,2193,2194],{},"'Synch CLI'"," na próxima secção para sincronizar os conteúdos do nosso cofre remoto.",[516,2197],{"src":2198,"alt":2199,"style":2200},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-vault-manager-empty.webp","Interface vazia do Gerenciador de Cofres no cliente web Ignis","max-width: 466px; width: 100%; height: auto;",[906,2202,2204],{"id":2203},"questão-de-firewall","Questão de Firewall",[429,2206,2207,2208,2211,2212,948],{},"Por predefinição, o Docker insere automaticamente as suas próprias regras DNAT e FORWARD, que encaminham o tráfego público diretamente para os contentores ativos. Isto contorna a cadeia ",[524,2209,2210],{},"INPUT"," padrão do Ubuntu UFW\u002Fiptables. Para bloquear o tráfego público externo e manter os contentores privados, adicione manualmente as seguintes regras ao ",[524,2213,2214],{},"iptables",[615,2216,2218],{"className":617,"code":2217,"language":619,"meta":424,"style":424},"# Bloquear todo o tráfego público externo\nsudo iptables -I DOCKER-USER -i ext_if -j DROP \n\n# Permitir tráfego apenas do IP privado do seu cliente Cloudflare WARP\nsudo iptables -I DOCKER-USER -i ext_if -s 100.96.0.10 -j ACCEPT\n",[524,2219,2220,2225,2252,2256,2261],{"__ignoreMap":424},[623,2221,2222],{"class":625,"line":626},[623,2223,2224],{"class":653},"# Bloquear todo o tráfego público externo\n",[623,2226,2227,2229,2232,2235,2238,2241,2244,2247,2250],{"class":625,"line":643},[623,2228,630],{"class":629},[623,2230,2231],{"class":633}," iptables",[623,2233,2234],{"class":633}," -I",[623,2236,2237],{"class":633}," DOCKER-USER",[623,2239,2240],{"class":633}," -i",[623,2242,2243],{"class":633}," ext_if",[623,2245,2246],{"class":633}," -j",[623,2248,2249],{"class":633}," DROP",[623,2251,773],{"class":772},[623,2253,2254],{"class":625,"line":650},[623,2255,647],{"emptyLinePlaceholder":646},[623,2257,2258],{"class":625,"line":657},[623,2259,2260],{"class":653},"# Permitir tráfego apenas do IP privado do seu cliente Cloudflare WARP\n",[623,2262,2263,2265,2267,2269,2271,2273,2275,2278,2281,2283],{"class":625,"line":669},[623,2264,630],{"class":629},[623,2266,2231],{"class":633},[623,2268,2234],{"class":633},[623,2270,2237],{"class":633},[623,2272,2240],{"class":633},[623,2274,2243],{"class":633},[623,2276,2277],{"class":633}," -s",[623,2279,2280],{"class":1694}," 100.96.0.10",[623,2282,2246],{"class":633},[623,2284,2285],{"class":633}," ACCEPT\n",[906,2287,2289],{"id":2288},"configuração-da-synch-cli","Configuração da Synch CLI",[429,2291,2292,2293,2295],{},"A ",[433,2294,1903],{}," é uma ferramenta sem interface gráfica (headless) que permite sincronizar o diretório de um cofre do Obsidian diretamente em servidores remotos, sem exigir a instalação da aplicação de ambiente de trabalho completa.",[429,2297,2298,2299,2301,2302,2305,2306,2309,2310,2313,2314,2317,2318,565,2321,2324,2325,2328,2329,2332],{},"Compile a ",[433,2300,1903],{}," a partir do seu repositório ",[524,2303,2304],{},"synch"," clonado. A compilação requer o ",[433,2307,2308],{},"Node.js >= 22.5"," (pois a CLI depende do ",[524,2311,2312],{},"node:sqlite"," e de APIs globais do navegador como ",[524,2315,2316],{},"fetch",", ",[524,2319,2320],{},"WebSocket",[524,2322,2323],{},"WebCrypto",") e o ",[433,2326,2327],{},"pnpm"," (dado que o repositório está estruturado como um espaço de trabalho de pnpm utilizando a versão ",[524,2330,2331],{},"10.33.0","):",[615,2334,2336],{"className":617,"code":2335,"language":619,"meta":424,"style":424},"# Verificar versões\nnode --version   # deve ser >= 22.5\npnpm --version\n\n# Na raiz do repositório\npnpm install\n\n# Compilar o pacote da CLI\npnpm -C apps\u002Fcli build\n\n# Após uma compilação bem-sucedida, terá o ficheiro `apps\u002Fcli\u002Fdist\u002Fsynch.js`. Torne-o executável e coloque-o no seu PATH\nchmod +x apps\u002Fcli\u002Fdist\u002Fsynch.js\nln -sf \"$PWD\u002Fapps\u002Fcli\u002Fdist\u002Fsynch.js\" \"$HOME\u002F.local\u002Fbin\u002Fsynch\"\n\n# Verificação\nsynch --help\n",[524,2337,2338,2343,2354,2361,2365,2370,2377,2381,2386,2399,2403,2408,2419,2448,2452,2457],{"__ignoreMap":424},[623,2339,2340],{"class":625,"line":626},[623,2341,2342],{"class":653},"# Verificar versões\n",[623,2344,2345,2348,2351],{"class":625,"line":643},[623,2346,2347],{"class":629},"node",[623,2349,2350],{"class":633}," --version",[623,2352,2353],{"class":653},"   # deve ser >= 22.5\n",[623,2355,2356,2358],{"class":625,"line":650},[623,2357,2327],{"class":629},[623,2359,2360],{"class":633}," --version\n",[623,2362,2363],{"class":625,"line":657},[623,2364,647],{"emptyLinePlaceholder":646},[623,2366,2367],{"class":625,"line":669},[623,2368,2369],{"class":653},"# Na raiz do repositório\n",[623,2371,2372,2374],{"class":625,"line":674},[623,2373,2327],{"class":629},[623,2375,2376],{"class":633}," install\n",[623,2378,2379],{"class":625,"line":680},[623,2380,647],{"emptyLinePlaceholder":646},[623,2382,2383],{"class":625,"line":1022},[623,2384,2385],{"class":653},"# Compilar o pacote da CLI\n",[623,2387,2388,2390,2393,2396],{"class":625,"line":1033},[623,2389,2327],{"class":629},[623,2391,2392],{"class":633}," -C",[623,2394,2395],{"class":633}," apps\u002Fcli",[623,2397,2398],{"class":633}," build\n",[623,2400,2401],{"class":625,"line":1129},[623,2402,647],{"emptyLinePlaceholder":646},[623,2404,2405],{"class":625,"line":1135},[623,2406,2407],{"class":653},"# Após uma compilação bem-sucedida, terá o ficheiro `apps\u002Fcli\u002Fdist\u002Fsynch.js`. Torne-o executável e coloque-o no seu PATH\n",[623,2409,2410,2413,2416],{"class":625,"line":1141},[623,2411,2412],{"class":629},"chmod",[623,2414,2415],{"class":633}," +x",[623,2417,2418],{"class":633}," apps\u002Fcli\u002Fdist\u002Fsynch.js\n",[623,2420,2421,2424,2427,2429,2432,2435,2438,2440,2443,2446],{"class":625,"line":1146},[623,2422,2423],{"class":629},"ln",[623,2425,2426],{"class":633}," -sf",[623,2428,2026],{"class":695},[623,2430,2431],{"class":772},"$PWD",[623,2433,2434],{"class":633},"\u002Fapps\u002Fcli\u002Fdist\u002Fsynch.js",[623,2436,2437],{"class":695},"\"",[623,2439,2026],{"class":695},[623,2441,2442],{"class":772},"$HOME",[623,2444,2445],{"class":633},"\u002F.local\u002Fbin\u002Fsynch",[623,2447,702],{"class":695},[623,2449,2450],{"class":625,"line":1152},[623,2451,647],{"emptyLinePlaceholder":646},[623,2453,2454],{"class":625,"line":2095},[623,2455,2456],{"class":653},"# Verificação\n",[623,2458,2459,2461],{"class":625,"line":2106},[623,2460,2304],{"class":629},[623,2462,2463],{"class":633}," --help\n",[429,2465,2466,2467,2470],{},"Visto que a Synch CLI é executada no mesmo VPS que o seu cofre remoto do Synch, esta pode ligar-se diretamente ao servidor local da API. Se estiver a configurar um servidor diferente, execute ",[524,2468,2469],{},"synch login --api-url \u003Curl-da-api-synch-remota>"," para definir o seu endpoint de destino da API.",[429,2472,2473],{},[516,2474],{"alt":2475,"src":2476},"Executando o synch login com URL de API personalizada no terminal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-login-api-url-terminal.webp",[429,2478,561,2479,2482],{},[524,2480,2481],{},"synch login"," no seu terminal e receberá um URL de autenticação:",[429,2484,2485],{},[516,2486],{"alt":2487,"src":2488},"Saída do terminal mostrando a URL de autenticação para o Synch CLI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-login-auth-url-terminal.webp",[429,2490,2491],{},"Inicie sessão através da página web utilizando o mesmo endereço de e-mail registado com o plug-in Synchrun do seu Obsidian desktop.",[429,2493,2494],{},[516,2495],{"alt":2496,"src":2497},"Login web bem-sucedido para autorização do Synch CLI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-web-login-success.webp",[429,2499,561,2500,2503],{},[524,2501,2502],{},"synch vault connect --vault ~\u002Fvaults\u002F\u003Cnome_do_cofre> --vault-id asadqe-7b29-4677-fsad-234asdafasd"," para ligar o seu diretório de cofre local no VPS ao cofre remoto.",[429,2505,2506,2507,2510,2511,2514,2515,2332],{},"O ID do cofre remoto pode ser encontrado nas definições do plug-in ",[433,2508,2509],{},"Synchrun",", clicando em ",[433,2512,2513],{},"'Manage remote vaults'"," (Gerir cofres remotos). Isto irá exibir uma página web com a lista dos seus cofres remotos, cada um identificado por um GUID exclusivo (por exemplo, ",[524,2516,2517],{},"123e4567-e89b-12d3-a456-426614174000",[429,2519,2520,2525],{},[516,2521],{"src":2522,"alt":2523,"style":2524},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-manage-remote-vaults.webp","Gerenciando cofres remotos no plugin Synchrun","max-width: 582px; width: 100%; height: auto;",[516,2526],{"alt":2527,"src":2528},"Localizando o ID exclusivo do cofre remoto no Synchrun","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-remote-vault-id.webp",[429,2530,2531,2532,2535],{},"Introduza a palavra-passe do seu cofre quando solicitado para estabelecer a ligação. Assim que estiver ligado, execute ",[524,2533,2534],{},"synch sync --vault ~\u002Fvaults\u002F\u003Cnome-do-cofre>"," para efetuar a sua sincronização inicial. Esta primeira execução poderá demorar algum tempo, dependendo do tamanho do seu cofre.",[429,2537,2538],{},[516,2539],{"alt":2540,"src":2541},"Progresso inicial de sincronização do cofre no Synch CLI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-cli-initial-sync-progress.webp",[429,2543,2544,2545,2548],{},"Para automatizar este processo, configure e ative um serviço systemd para executar o ",[524,2546,2547],{},"synch watch"," continuamente, garantindo que as alterações sejam sincronizadas instantaneamente no arranque:",[615,2550,2552],{"className":617,"code":2551,"language":619,"meta":424,"style":424},"sudo tee \u002Fetc\u002Fsystemd\u002Fsystem\u002Fsynch-watch.service \u003C\u003C'EOF'\n[Unit]\nDescription=Synch vault watcher\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nType=simple\nUser=\u003Cusername>\nExecStart=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin\u002Fsynch watch --vault \u002Fhome\u002F\u003Cusername>\u002Fvaults\u002F\u003Cvault-name>\nWorkingDirectory=\u002Fhome\u002F\u003Cusername>\u002Fvaults\nEnvironment=\"PATH=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin:\u002Fhome\u002F\u003Cusername>\u002F.cargo\u002Fbin:\u002Fusr\u002Flocal\u002Fsbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fsbin:\u002Fusr\u002Fbin:\u002Fsbin:\u002Fbin\"\nEnvironment=\"HOME=\u002Fhome\u002F\u003Cusername>\"\nRestart=always\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target\nEOF\nsudo systemctl daemon-reload\nsudo systemctl enable --now synch-watch.service\n",[524,2553,2554,2570,2574,2579,2584,2589,2593,2597,2602,2607,2612,2617,2622,2627,2631,2636,2640,2644,2648,2654,2663],{"__ignoreMap":424},[623,2555,2556,2558,2561,2564,2567],{"class":625,"line":626},[623,2557,630],{"class":629},[623,2559,2560],{"class":633}," tee",[623,2562,2563],{"class":633}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fsynch-watch.service",[623,2565,2566],{"class":695}," \u003C\u003C",[623,2568,2569],{"class":695},"'EOF'\n",[623,2571,2572],{"class":625,"line":643},[623,2573,1087],{"class":633},[623,2575,2576],{"class":625,"line":650},[623,2577,2578],{"class":633},"Description=Synch vault watcher\n",[623,2580,2581],{"class":625,"line":657},[623,2582,2583],{"class":633},"After=network-online.target\n",[623,2585,2586],{"class":625,"line":669},[623,2587,2588],{"class":633},"Wants=network-online.target\n",[623,2590,2591],{"class":625,"line":674},[623,2592,647],{"emptyLinePlaceholder":646},[623,2594,2595],{"class":625,"line":680},[623,2596,1106],{"class":633},[623,2598,2599],{"class":625,"line":1022},[623,2600,2601],{"class":633},"Type=simple\n",[623,2603,2604],{"class":625,"line":1033},[623,2605,2606],{"class":633},"User=\u003Cusername>\n",[623,2608,2609],{"class":625,"line":1129},[623,2610,2611],{"class":633},"ExecStart=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin\u002Fsynch watch --vault \u002Fhome\u002F\u003Cusername>\u002Fvaults\u002F\u003Cvault-name>\n",[623,2613,2614],{"class":625,"line":1135},[623,2615,2616],{"class":633},"WorkingDirectory=\u002Fhome\u002F\u003Cusername>\u002Fvaults\n",[623,2618,2619],{"class":625,"line":1141},[623,2620,2621],{"class":633},"Environment=\"PATH=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin:\u002Fhome\u002F\u003Cusername>\u002F.cargo\u002Fbin:\u002Fusr\u002Flocal\u002Fsbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fsbin:\u002Fusr\u002Fbin:\u002Fsbin:\u002Fbin\"\n",[623,2623,2624],{"class":625,"line":1146},[623,2625,2626],{"class":633},"Environment=\"HOME=\u002Fhome\u002F\u003Cusername>\"\n",[623,2628,2629],{"class":625,"line":1152},[623,2630,1126],{"class":633},[623,2632,2633],{"class":625,"line":2095},[623,2634,2635],{"class":633},"RestartSec=5\n",[623,2637,2638],{"class":625,"line":2106},[623,2639,647],{"emptyLinePlaceholder":646},[623,2641,2642],{"class":625,"line":2111},[623,2643,1149],{"class":633},[623,2645,2646],{"class":625,"line":2119},[623,2647,1155],{"class":633},[623,2649,2651],{"class":625,"line":2650},19,[623,2652,2653],{"class":695},"EOF\n",[623,2655,2657,2659,2661],{"class":625,"line":2656},20,[623,2658,630],{"class":629},[623,2660,634],{"class":633},[623,2662,1174],{"class":633},[623,2664,2666,2668,2670,2672,2675],{"class":625,"line":2665},21,[623,2667,630],{"class":629},[623,2669,634],{"class":633},[623,2671,769],{"class":633},[623,2673,2674],{"class":633}," --now",[623,2676,2677],{"class":633}," synch-watch.service\n",[429,2679,2680,2681,2683],{},"Abra ",[524,2682,1932],{}," no seu navegador web. Irá constatar que a interface do utilizador e o layout são praticamente idênticos aos da aplicação de ambiente de trabalho:",[516,2685],{"src":2686,"alt":2687,"style":2688},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-web-interface-desktop-view.webp","Interface web do Ignis exibindo o cofre do Obsidian no desktop","max-width: 593px; width: 100%; height: auto;",[429,2690,2691],{},"Clicar no ícone de definições revela que quase todas as configurações essenciais se mantêm intactas, embora seja necessário reinstalar os seus plug-ins da comunidade:",[516,2693],{"src":2694,"alt":2695,"style":2696},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-settings-community-plugins.webp","Configurações de plugins da comunidade na interface web do Ignis","max-width: 597px; width: 100%; height: auto;",[429,2698,2699],{},"Para testar a configuração, pode adicionar uma nova nota através da interface web:",[516,2701],{"src":2702,"alt":2703,"style":2696},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-create-new-note-web.webp","Criando uma nova nota markdown através da interface web do Ignis",[429,2705,2706,2707,511],{},"A nota é sincronizada imediatamente de volta para a sua aplicação de ambiente de trabalho do Obsidian. Note que as pastas vazias não aparecem no ",[433,2708,1409],{},[516,2710],{"src":2711,"alt":2712,"style":2713},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-desktop-synced-note.webp","Nova nota criada e sincronizada com sucesso no aplicativo de desktop do Obsidian","max-width: 502px; width: 100%; height: auto;",[429,2715,2716,2717,2719],{},"Visualizar o ",[524,2718,1932],{}," num navegador web móvel:",[429,2721,2722,2727],{},[516,2723],{"src":2724,"alt":2725,"style":2726},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-mobile-view-sidebar.webp","Navegação da barra lateral do cliente web Ignis em um dispositivo móvel","max-width: 269px; width: 100%; height: auto;",[516,2728],{"src":2729,"alt":2730,"style":2726},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-mobile-view-editor.webp","Editor de notas markdown do cliente web Ignis em um dispositivo móvel",[429,2732,2733,2734,2736,2737,2740],{},"Quando elimina uma nota no ",[433,2735,1409],{},", esta é movida em segurança para a pasta ",[524,2738,2739],{},"~\u002Fvaults\u002F\u003Cnome-do-cofre>\u002F.trash"," do seu cofre local.",[457,2742,2744],{"id":2743},"considerações-finais-sobre-cofres-auto-hospedados","Considerações finais sobre cofres auto-hospedados",[429,2746,2747,2748,1416,2750,2752,2753,2755],{},"Juntos, o ",[433,2749,1400],{},[433,2751,1409],{}," disponibilizam o seu cofre principal do Obsidian de forma fluida em todos os seus dispositivos, inteiramente alojado numa infraestrutura sob o seu controlo direto. Posicionar estes serviços no interior de uma rede privada ",[433,2754,443],{}," garante que as suas notas pessoais fiquem completamente protegidas da internet pública.",[429,2757,1449,2758,2760],{},[433,2759,1409],{}," não se destina a substituir na totalidade a aplicação nativa de ambiente de trabalho do Obsidian. Em vez disso, atua como um cliente web leve e temporário para aceder e editar o seu cofre quando se encontra afastado do seu computador principal. Para a escrita diária e gestão detalhada do cofre, a aplicação nativa do Obsidian continua a ser a escolha mais confortável.",[429,2762,2763,2764,2766],{},"Como o Synch utiliza encriptação de ponta a ponta, a palavra-passe do seu cofre remoto tem de ser extremamente segura para proteger contra ataques de adivinhação por força bruta. É crítico que nunca perca esta palavra-passe — o servidor não armazena a ",[433,2765,1474],{}," desencriptada e, se a esquecer, os seus dados serão totalmente irrecuperáveis. Adicionalmente, certifique-se de que a sua instância de VPS, a par de quaisquer instantâneos ou cópias de segurança automatizadas, é devidamente mantida e mantida em segurança.",[429,2768,2769],{},"Embora o histórico de versões encriptado do Synch e as ferramentas de recuperação de ficheiros eliminados previnam a maioria das perdas acidentais, a manutenção de uma cópia de segurança independente e separada do seu cofre do Obsidian continua a ser fortemente recomendada.",[457,2771,2773],{"id":2772},"referências","Referências",[484,2775,2776,2783,2790],{},[468,2777,2778],{},[449,2779,2782],{"href":2780,"rel":2781},"https:\u002F\u002Fsynch.run\u002Fself-hosting-docker\u002F",[509],"Implementação do Synch com Docker Compose",[468,2784,2785],{},[449,2786,2789],{"href":2787,"rel":2788},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fserver\u002Fdeploy\u002F",[509],"Implementação do Ignis com Docker",[468,2791,2792],{},[449,2793,2796],{"href":2794,"rel":2795},"https:\u002F\u002Fsynch.run\u002Fblog\u002Fencryption-and-decryption\u002F",[509],"Como funciona a encriptação de ponta a ponta no Synch?",[1334,2798,2799],{},"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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":424,"searchDepth":643,"depth":650,"links":2801},[2802,2811,2820,2821],{"id":1445,"depth":643,"text":1446,"children":2803},[2804,2808],{"id":1488,"depth":650,"text":1489,"children":2805},[2806,2807],{"id":1492,"depth":657,"text":1493},{"id":1508,"depth":657,"text":1509},{"id":1743,"depth":650,"text":1744,"children":2809},[2810],{"id":1747,"depth":657,"text":1748},{"id":1865,"depth":643,"text":1866,"children":2812},[2813],{"id":1889,"depth":650,"text":1890,"children":2814},[2815,2816,2817,2818,2819],{"id":1917,"depth":657,"text":1918},{"id":1926,"depth":657,"text":1615},{"id":1972,"depth":657,"text":1973},{"id":2203,"depth":657,"text":2204},{"id":2288,"depth":657,"text":2289},{"id":2743,"depth":643,"text":2744},{"id":2772,"depth":643,"text":2773},[2823],"productivity","2026-09-15","Sincronize cofres do Obsidian entre dispositivos e aceda às notas na web usando Synch e Ignis auto-hospedados com o Cloudflare Zero Trust de forma segura.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002FPT-Sync-Obsidian-Across-Devices.webp","Sincronização segura de cofres do Obsidian entre múltiplos dispositivos usando as ferramentas auto-hospedadas Synch e Ignis no Cloudflare Zero Trust",{"schemaOrg":2829,"robots":1367,"sitemap":2833},[2830,2832],{"@type":2831,"headline":1382,"description":2825,"image":2826},"Article",{"@type":1366,"name":1382,"description":2825,"image":2826},{"lastmod":2834},"2026-09-16",{"title":2836,"description":2825,"ogTitle":1382,"ogDescription":2825,"twitterTitle":1382,"twitterDescription":2825},"Sincronização segura do Obsidian com Synch e Ignis","pt\u002Farticle\u002Fsync-obsidian-across-devices",[2839,2840,2841,1374],"Self-hosting","Obsidian","Sync",null,"w9q-i3XBW-a7XzDtUq653w4_WENAorcI_0Z65GRHL2g",{"id":2845,"title":2846,"author":424,"body":2847,"category":4032,"date":4035,"description":4036,"extension":1360,"image":4037,"imageAlt":4038,"isPublished":646,"meta":4039,"minRead":1135,"navigation":646,"path":215,"seo":4065,"stem":4067,"tags":4068,"updatedAt":2842,"__hash__":4071},"article\u002Fpt\u002Farticle\u002Fbringing-buzz-to-deepseek-harness.md","Conectar DeepSeek Harness ao Buzz: O Gateway de Nostr",{"type":426,"value":2848,"toc":4016},[2849,2855,2875,2881,2884,2888,2894,2936,2939,2997,3001,3007,3274,3277,3281,3285,3291,3295,3309,3313,3322,3368,3375,3379,3382,3414,3418,3423,3464,3472,3478,3487,3493,3524,3537,3541,3550,3579,3601,3649,3656,3661,3667,3674,3680,3685,3692,3706,3712,3721,3756,3759,3765,3772,3778,3782,3785,3936,3940,3974,3978,3984,3987,4013],[429,2850,2851],{},[516,2852],{"alt":2853,"src":2854},"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",[429,2856,2857,2858,2865,2866,2870,2871,511],{},"O plugin do DeepSeek Harness (DSH), ",[433,2859,2860],{},[449,2861,2864],{"href":2862,"rel":2863},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway",[509],"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 ",[433,2867,2868],{},[449,2869,1630],{"href":383}," à lista. O repositório bifurcado está disponível no GitHub em ",[449,2872,2873],{"href":2873,"rel":2874},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway",[509],[1435,2876],{"description":2877,"image":2878,"image-alt":2879,"label":2880,"min-read":1629,"title":1630,"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",[429,2882,2883],{},"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.",[457,2885,2887],{"id":2886},"arquitetura-do-plugin-dsh-message-gateway","Arquitetura do plugin dsh-message-gateway",[429,2889,2890,2891,2893],{},"A arquitetura do plugin ",[433,2892,2864],{}," é dividida em duas camadas principais:",[484,2895,2896,2926],{},[468,2897,2898,2901,2902,2905,2906,2909,2910,2913,2914,2917,2918,2921,2922,2925],{},[433,2899,2900],{},"Host"," (Node): ",[524,2903,2904],{},"gateway-store"," (credenciais em ",[524,2907,2908],{},"~\u002F.dsh\u002Fgateway.json","), ",[524,2911,2912],{},"platforms.ts"," (definições de plataformas e testes de conexão), ",[524,2915,2916],{},"routes.ts"," (endpoints ",[524,2919,2920],{},"\u002Fgateway\u002F*",") e ",[524,2923,2924],{},"bridge-manager.ts"," (as pontes residentes: sessões de agentes independentes por chat e respostas em streaming).",[468,2927,2928,2931,2932,2935],{},[433,2929,2930],{},"Cliente"," (navegador): a página \"",[433,2933,2934],{},"Message platforms","\" na barra lateral, onde você salva credenciais, testa conexões e monitora o status do serviço.",[429,2937,2938],{},"Adicionar uma nova plataforma envolve as seguintes etapas:",[465,2940,2941,2958,2972],{},[468,2942,2943,2946,2947,2950,2951,2954,2955,511],{},[433,2944,2945],{},"Uma classe de ponte (bridge)",": implementando os métodos ",[524,2948,2949],{},"start\u002Fstop\u002Fstatus"," e o callback ",[524,2952,2953],{},"onText(text, frame)",", espelhando o padrão de ",[524,2956,2957],{},"wecom-bridge.ts",[468,2959,2960,2963,2964,2967,2968,2971],{},[433,2961,2962],{},"Integração no bridge-manager",": reaproveitar o pipeline existente por conversa (",[524,2965,2966],{},"ensureAgentForKey"," + ",[524,2969,2970],{},"pendingMap",") e conectar o coletor de respostas da plataforma.",[468,2973,2974,2977,2978,565,2981,2984,2985,2988,2989,2992,2993,2996],{},[433,2975,2976],{},"Persistência e rotas",": em ",[524,2979,2980],{},"\u002Fgateway\u002Fsave",[524,2982,2983],{},"\u002Fgateway\u002Fdelete",": ",[433,2986,2987],{},"salvar credenciais inicia a ponte, excluí-las a encerra"," — complementado por uma flag ",[524,2990,2991],{},"autoStartXxx"," para que o ",[524,2994,2995],{},"dsh web"," reconecte automaticamente no boot.",[457,2998,3000],{"id":2999},"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",[429,3002,1449,3003,3006],{},[433,3004,3005],{},"DeepSeek Harness"," foi utilizado para implementar a ponte do Buzz. A implementação atende rigorosamente às seguintes especificações do protocolo Nostr:",[3008,3009,3010,3036],"table",{},[3011,3012,3013],"thead",{},[3014,3015,3016,3022],"tr",{},[3017,3018,3019],"th",{},[433,3020,3021],{},"Transporte",[3017,3023,3024,3025,3028,3029,3032,3033],{},"Um único WebSocket autenticado via NIP-42; padrão ",[524,3026,3027],{},"ws:\u002F\u002Flocalhost:3000","; ",[524,3030,3031],{},"http(s):\u002F\u002F"," é normalizado para ",[524,3034,3035],{},"ws(s):\u002F\u002F",[3037,3038,3039,3058,3086,3103,3126,3149,3174,3187,3200,3219,3236,3250],"tbody",{},[3014,3040,3041,3047],{},[3042,3043,3044],"td",{},[433,3045,3046],{},"Autenticação",[3042,3048,3049,3050,3053,3054,3057],{},"Evento AUTH ",[524,3051,3052],{},"kind 22242",", tags ",[524,3055,3056],{},"[[\"relay\", url], [\"challenge\", challenge]]",", conteúdo vazio, assinado com a chave do agente",[3014,3059,3060,3065],{},[3042,3061,3062],{},[433,3063,3064],{},"Inscrições",[3042,3066,3067,2984,3070,3073,3074,3077,3078,3081,3082,3085],{},[433,3068,3069],{},"Por canal",[524,3071,3072],{},"REQ {\"kinds\":[9], \"#h\":[\u003Cuuid>]}"," — um REQ por canal. Um REQ global ",[524,3075,3076],{},"kinds:[9]"," recebe EOSE mas nunca distribui eventos; filtro ",[524,3079,3080],{},"#h"," multivalorado ",[433,3083,3084],{},"não"," funciona",[3014,3087,3088,3093],{},[3042,3089,3090],{},[433,3091,3092],{},"Descoberta",[3042,3094,3095,3098,3099,3102],{},[524,3096,3097],{},"REQ {kinds:[39000]}"," histórico para metadados de canal (",[524,3100,3101],{},"type == \"dm\""," marca canal de mensagem direta)",[3014,3104,3105,3110],{},[3042,3106,3107],{},[433,3108,3109],{},"Associação",[3042,3111,3112,3115,3116,3118,3119,3122,3123],{},[524,3113,3114],{},"REQ {kinds:[44100,44101], \"#p\":[nossa pubkey], since: now-60s}"," ao vivo — 44100 = adição, 44101 = remoção, com ",[524,3117,429],{},"+",[524,3120,3121],{},"h","; atualiza inscrições ",[433,3124,3125],{},"sem reconectar",[3014,3127,3128,3133],{},[3042,3129,3130],{},[433,3131,3132],{},"Eventos de chat",[3042,3134,3135,3138,3139,3142,3143,2317,3146],{},[524,3136,3137],{},"kind 9"," com tags ",[524,3140,3141],{},"[\"h\", canal]",", opcional ",[524,3144,3145],{},"[\"e\", replyTo]",[524,3147,3148],{},"[\"p\", menção]",[3014,3150,3151,3156],{},[3042,3152,3153],{},[433,3154,3155],{},"Edições in-place",[3042,3157,3158,3161,3162,2967,3164,3167,3168,3170,3171,3173],{},[524,3159,3160],{},"kind 40003"," com ",[524,3163,3121],{},[524,3165,3166],{},"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 ",[524,3169,3137],{}," encadeadas (",[524,3172,3166],{},"→raiz)",[3014,3175,3176,3181],{},[3042,3177,3178],{},[433,3179,3180],{},"Quadros CLOSED",[3042,3182,3183,3186],{},[524,3184,3185],{},"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",[3014,3188,3189,3194],{},[3042,3190,3191],{},[433,3192,3193],{},"Limites do relay",[3042,3195,3196,3197],{},"≤ 2000 eventos históricos por inscrição, ordenados do mais recente para o mais antigo, mesmo utilizando ",[524,3198,3199],{},"since",[3014,3201,3202,3207],{},[3042,3203,3204],{},[433,3205,3206],{},"Filtro de menções",[3042,3208,3209,3210,3212,3213,3215,3216,3218],{},"Processa ",[524,3211,3137],{}," de entrada apenas quando: (a) tag ",[524,3214,429],{}," inclui nossa pubkey, (b) o canal é DM, ou (c) a raiz ",[524,3217,3166],{}," pertence ao nosso agente. Ignora a própria pubkey (anti-loop)",[3014,3220,3221,3226],{},[3042,3222,3223],{},[433,3224,3225],{},"Menções de saída",[3042,3227,3228,3229,3232,3233,3235],{},"Texto publicado sem alterações — o relay não valida tokens ",[524,3230,3231],{},"@","; tags ",[524,3234,429],{}," incluem o autor de origem mais até 7 outras pubkeys mencionadas (máx. 8)",[3014,3237,3238,3243],{},[3042,3239,3240],{},[433,3241,3242],{},"Mensagens diretas",[3042,3244,3245,3246,3249],{},"Canais de texto simples no escopo do relay (metadados ",[524,3247,3248],{},"type: \"dm\"",") — sem criptografia NIP-04\u002F44 nesta ponte",[3014,3251,3252,3257],{},[3042,3253,3254],{},[433,3255,3256],{},"Anexos (entrada)",[3042,3258,3259,3260,3263,3264,2317,3267,2317,3270,3273],{},"NIP-92 ",[524,3261,3262],{},"imeta"," (",[524,3265,3266],{},"url",[524,3268,3269],{},"sha256",[524,3271,3272],{},"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",[429,3275,3276],{},"O diagrama abaixo ilustra o fluxo de inicialização (bootstrap) da ponte do Buzz:",[516,3278],{"src":3279,"alt":3280},"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",[479,3282,3284],{"id":3283},"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)",[429,3286,3287,3288,948],{},"Como o Nostr não possui indicador nativo de digitação e seus eventos são estritamente cumulativos (append-only), a ponte do Buzz ",[433,3289,3290],{},"simula streaming por meio de edições in-place",[516,3292],{"src":3293,"alt":3294},"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",[484,3296,3297],{},[468,3298,3299],{},[3300,3301,3302,3303,3305,3306,3308],"em",{},"A ponte do Buzz publica primeiro um evento placeholder ",[524,3304,3137],{},", depois o reescreve progressivamente com edições in-place ",[524,3307,3160],{}," 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.",[479,3310,3312],{"id":3311},"conexão-de-workspaces-do-deepseek-harness-via-comandos-de-chat","Conexão de workspaces do DeepSeek Harness via comandos de chat",[429,3314,3315,3316,3263,3319,2332],{},"O recurso de \"Workspaces\" na interface Web do DSH é gerenciado pelo serviço ",[524,3317,3318],{},"workspaceRegistry",[524,3320,3321],{},"@deepseek-ai\u002Fdsh-workspace",[615,3323,3327],{"className":3324,"code":3325,"language":3326,"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",[524,3328,3329],{"__ignoreMap":424},[623,3330,3331,3335,3338,3341,3345,3348,3350,3352,3354,3357,3360,3362,3365],{"class":625,"line":626},[623,3332,3334],{"class":3333},"spNyl","const",[623,3336,3337],{"class":772}," existing ",[623,3339,3340],{"class":695},"=",[623,3342,3344],{"class":3343},"s7zQu"," await",[623,3346,3347],{"class":772}," ctx",[623,3349,511],{"class":695},[623,3351,3318],{"class":772},[623,3353,511],{"class":695},[623,3355,3356],{"class":1548},"resolveByPath",[623,3358,3359],{"class":772},"(request",[623,3361,511],{"class":695},[623,3363,3364],{"class":772},"path)",[623,3366,3367],{"class":695},";\n",[429,3369,3370,3371,3374],{},"A ponte do Buzz disponibiliza o comando de chat ",[524,3372,3373],{},"\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.",[516,3376],{"src":3377,"alt":3378},"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",[429,3380,3381],{},"Três regras de projeto essenciais:",[484,3383,3384,3394,3404],{},[468,3385,3386,3389,3390,3393],{},[433,3387,3388],{},"Mudar de pasta = nova sessão."," O valor de ",[524,3391,3392],{},"cwd"," é gravado no cabeçalho da sessão no momento da criação e não pode ser alterado posteriormente.",[468,3395,3396,3399,3400,3403],{},[433,3397,3398],{},"A pasta deve existir previamente."," O método ",[524,3401,3402],{},"create"," rejeita caminhos inexistentes.",[468,3405,3406,3409,3410,3413],{},[433,3407,3408],{},"Comando com sensibilidade de segurança."," Toda sessão opera sob uma política de ",[433,3411,3412],{},"auto-aprovação",", concedendo acesso aos arquivos da pasta de destino.",[457,3415,3417],{"id":3416},"guia-passo-a-passo-de-instalação-e-configuração","Guia passo a passo de instalação e configuração",[465,3419,3420],{},[468,3421,3422],{},"Execute os seguintes comandos no terminal:",[615,3424,3426],{"className":617,"code":3425,"language":619,"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",[524,3427,3428,3448,3452,3457],{"__ignoreMap":424},[623,3429,3430,3433,3436,3439,3442,3445],{"class":625,"line":626},[623,3431,3432],{"class":629},"dsh",[623,3434,3435],{"class":633}," plugin",[623,3437,3438],{"class":633}," --profile",[623,3440,3441],{"class":633}," web",[623,3443,3444],{"class":633}," add",[623,3446,3447],{"class":633}," https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway.git\n",[623,3449,3450],{"class":625,"line":643},[623,3451,647],{"emptyLinePlaceholder":646},[623,3453,3454],{"class":625,"line":650},[623,3455,3456],{"class":653},"# Start DSH web\n",[623,3458,3459,3461],{"class":625,"line":657},[623,3460,3432],{"class":629},[623,3462,3463],{"class":633}," web\n",[465,3465,3466],{"start":643},[468,3467,3468,3469,3471],{},"Assim que a interface Web do DSH abrir no navegador, clique no ícone \"",[433,3470,2934],{},"\":",[429,3473,3474],{},[516,3475],{"alt":3476,"src":3477},"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",[465,3479,3480],{"start":650},[468,3481,3482,3483,3486],{},"Selecione \"",[433,3484,3485],{},"Buzz","\" no painel esquerdo:",[429,3488,3489],{},[516,3490],{"alt":3491,"src":3492},"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",[465,3494,3495,3506,3517],{"start":657},[468,3496,3497,3498,3501,3502,3505],{},"Clique em \"",[433,3499,3500],{},"Generate keypair","\" para gerar o par de chaves Nostr. Guarde a chave pública ",[524,3503,3504],{},"npub"," em local seguro.",[468,3507,3508,3509,3512,3513,3516],{},"Preencha a ",[433,3510,3511],{},"Relay URL"," e os ",[433,3514,3515],{},"Channels"," (a lista autorizada de UUIDs dos canais que serão assinados).",[468,3518,3519,3520,3523],{},"Clique no botão \"",[433,3521,3522],{},"Save","\".",[429,3525,3526,3527,3530,3531,3534,3535,511],{},"Ao salvar o formulário, as credenciais são armazenadas e ",[433,3528,3529],{},"a ponte é iniciada",". A chave privada ",[524,3532,3533],{},"nsec"," é protegida como segredo e gravada exclusivamente em ",[524,3536,2908],{},[479,3538,3540],{"id":3539},"registro-do-par-de-chaves-do-agente-no-relay-nostr-do-buzz","Registro do par de chaves do agente no relay Nostr do Buzz",[429,3542,3543,3546,3547,3549],{},[433,3544,3545],{},"Adicione o assistente DSH ao relay como membro."," Utilize a chave ",[524,3548,3504],{}," gerada na etapa anterior:",[615,3551,3553],{"className":617,"code":3552,"language":619,"meta":424,"style":424},"docker compose exec relay buzz-admin add-member --pubkey npub123123123\n",[524,3554,3555],{"__ignoreMap":424},[623,3556,3557,3559,3561,3564,3567,3570,3573,3576],{"class":625,"line":626},[623,3558,1712],{"class":629},[623,3560,1715],{"class":633},[623,3562,3563],{"class":633}," exec",[623,3565,3566],{"class":633}," relay",[623,3568,3569],{"class":633}," buzz-admin",[623,3571,3572],{"class":633}," add-member",[623,3574,3575],{"class":633}," --pubkey",[623,3577,3578],{"class":633}," npub123123123\n",[429,3580,3581,3584,3585,3588,3589,3592,3593,3596,3597,3600],{},[433,3582,3583],{},"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 ",[524,3586,3587],{},"buzz-cli",", lembre-se de que o parâmetro ",[524,3590,3591],{},"--pubkey"," deve estar no formato ",[433,3594,3595],{},"HEX",", e não npub (o comando ",[524,3598,3599],{},"buzz-admin add-member"," exibe a chave HEX correspondente):",[615,3602,3604],{"className":617,"code":3603,"language":619,"meta":424,"style":424},"buzz channels add-member --channel \u003CCHANNEL_UUID> --pubkey \u003CAGENT_HEX> --role member\n",[524,3605,3606],{"__ignoreMap":424},[623,3607,3608,3611,3614,3616,3619,3622,3625,3628,3631,3633,3635,3638,3641,3643,3646],{"class":625,"line":626},[623,3609,3610],{"class":629},"buzz",[623,3612,3613],{"class":633}," channels",[623,3615,3572],{"class":633},[623,3617,3618],{"class":633}," --channel",[623,3620,3621],{"class":695}," \u003C",[623,3623,3624],{"class":633},"CHANNEL_UUI",[623,3626,3627],{"class":772},"D",[623,3629,3630],{"class":695},">",[623,3632,3575],{"class":633},[623,3634,3621],{"class":695},[623,3636,3637],{"class":633},"AGENT_HE",[623,3639,3640],{"class":772},"X",[623,3642,3630],{"class":695},[623,3644,3645],{"class":633}," --role",[623,3647,3648],{"class":633}," member\n",[1435,3650],{"description":3651,"image":2878,"image-alt":2879,"label":3652,"min-read":3653,"title":3654,"to":3655},"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",[429,3657,3658,3659,948],{},"Atualize o perfil do assistente no relay Nostr definindo um nome amigável com o ",[524,3660,3587],{},[429,3662,3663],{},[516,3664],{"alt":3665,"src":3666},"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",[429,3668,3669,3670,3673],{},"Envie uma saudação ",[433,3671,3672],{},"Wave"," (a saudação padrão de DM do Buzz) para o assistente. O retorno confirma a operação:",[429,3675,3676],{},[516,3677],{"alt":3678,"src":3679},"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",[429,3681,3682],{},[3300,3683,3684],{},"Enviando uma Wave por mensagem direta para o assistente DSH — a ponte está ativa.",[479,3686,3688,3689],{"id":3687},"habilitando-o-acesso-a-pastas-locais-com-workspace","Habilitando o acesso a pastas locais com ",[524,3690,3691],{},"\u002Fworkspace",[429,3693,3694,3695,3698,3699,3702,3703,3705],{},"Como a configuração ",[524,3696,3697],{},"allowWorkspace"," vem desativada (",[524,3700,3701],{},"false",") por padrão, o comando ",[524,3704,3691],{}," será inicialmente recusado:",[429,3707,3708],{},[516,3709],{"alt":3710,"src":3711},"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",[429,3713,3714,3715,3718,3719,948],{},"Ative a funcionalidade em ",[524,3716,3717],{},"~\u002F.dsh\u002Fprofiles\u002Fweb\u002Fcordis.patch.yml"," e reinicie o ",[524,3720,2995],{},[615,3722,3724],{"className":1983,"code":3723,"language":1985,"meta":424,"style":424},"- id: ui-message-gateway\n  config:\n    allowWorkspace: true\n",[524,3725,3726,3739,3746],{"__ignoreMap":424},[623,3727,3728,3731,3734,3736],{"class":625,"line":626},[623,3729,3730],{"class":695},"-",[623,3732,3733],{"class":960}," id",[623,3735,948],{"class":695},[623,3737,3738],{"class":633}," ui-message-gateway\n",[623,3740,3741,3744],{"class":625,"line":643},[623,3742,3743],{"class":960},"  config",[623,3745,964],{"class":695},[623,3747,3748,3751,3753],{"class":625,"line":650},[623,3749,3750],{"class":960},"    allowWorkspace",[623,3752,948],{"class":695},[623,3754,3755],{"class":984}," true\n",[429,3757,3758],{},"Após reiniciar:",[429,3760,3761],{},[516,3762],{"alt":3763,"src":3764},"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",[429,3766,3767,3768,3771],{},"Dica importante: o sistema presume que a pasta do workspace (",[524,3769,3770],{},"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.",[429,3773,3774],{},[516,3775],{"alt":3776,"src":3777},"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",[479,3779,3781],{"id":3780},"comandos-disponíveis-no-buzz","Comandos disponíveis no Buzz",[429,3783,3784],{},"Todos os comandos disponíveis nas demais plataformas suportadas funcionam normalmente no Buzz:",[3008,3786,3787,3797],{},[3011,3788,3789],{},[3014,3790,3791,3794],{},[3017,3792,3793],{},"Comando",[3017,3795,3796],{},"O que faz",[3037,3798,3799,3809,3819,3829,3839,3849,3859,3869,3879,3899,3919],{},[3014,3800,3801,3806],{},[3042,3802,3803],{},[524,3804,3805],{},"\u002Fworkspace \u003Cfolder>",[3042,3807,3808],{},"Registra uma pasta existente como o workspace da conversa (requer habilitação nas configurações)",[3014,3810,3811,3816],{},[3042,3812,3813],{},[524,3814,3815],{},"\u002Fhelp",[3042,3817,3818],{},"Lista os comandos disponíveis",[3014,3820,3821,3826],{},[3042,3822,3823],{},[524,3824,3825],{},"\u002Ftime",[3042,3827,3828],{},"Mostra a hora atual do sistema",[3014,3830,3831,3836],{},[3042,3832,3833],{},[524,3834,3835],{},"\u002Fnew",[3042,3837,3838],{},"Inicia uma nova sessão de conversa limpa",[3014,3840,3841,3846],{},[3042,3842,3843],{},[524,3844,3845],{},"\u002Fclear",[3042,3847,3848],{},"Limpa o histórico da conversa atual",[3014,3850,3851,3856],{},[3042,3852,3853],{},[524,3854,3855],{},"\u002Fstatus",[3042,3857,3858],{},"Exibe o status operacional da ponte",[3014,3860,3861,3866],{},[3042,3862,3863],{},[524,3864,3865],{},"\u002Fstats",[3042,3867,3868],{},"Mostra a contagem de conversas e linhas de status por ponte (todas as plataformas, incluindo Buzz)",[3014,3870,3871,3876],{},[3042,3872,3873],{},[524,3874,3875],{},"\u002Fcommands",[3042,3877,3878],{},"Lista descritiva com todos os comandos",[3014,3880,3881,3886],{},[3042,3882,3883],{},[524,3884,3885],{},"@path\u002Fto\u002Ffile",[3042,3887,3888,3889,2317,3891,3894,3895,3898],{},"Funciona exatamente como menções de arquivos na Web: o modelo lê o arquivo relativo ao workspace; ",[524,3890,3231],{},[524,3892,3893],{},"@prefixo"," ou ",[524,3896,3897],{},"\u002Ffiles \u003Cprefixo>"," retornam arquivos e pastas correspondentes",[3014,3900,3901,3906],{},[3042,3902,3903],{},[524,3904,3905],{},"\u002Fmodel",[3042,3907,3908,3911,3912,3914,3915,3918],{},[524,3909,3910],{},"[provider model effort]"," — valida contra o catálogo ativo de LLMs; ",[524,3913,3905],{}," lista as opções disponíveis e ",[524,3916,3917],{},"\u002Fmodel reset"," restaura os padrões",[3014,3920,3921,3926],{},[3042,3922,3923],{},[524,3924,3925],{},"\u002Feffort",[3042,3927,3928,3931,3932,3935],{},[524,3929,3930],{},"\u003Cid>"," ajusta apenas o esforço de raciocínio do modelo; ",[524,3933,3934],{},"\u002Feffort reset"," restaura o valor padrão",[479,3937,3939],{"id":3938},"resumo-das-medidas-de-segurança","Resumo das medidas de segurança",[484,3941,3942,3955,3965],{},[468,3943,3944,3945,3947,3948,3950,3951,3954],{},"A chave privada ",[433,3946,3533],{}," reside unicamente em ",[524,3949,2908],{}," (permissões 0600, gravação atômica) — nunca sendo exposta em ",[524,3952,3953],{},"\u002Fgateway\u002Flist"," nem em logs.",[468,3956,3957,3958,3263,3961,3964],{},"Todo evento de entrada passa por ",[433,3959,3960],{},"validação de assinatura criptográfica",[524,3962,3963],{},"verifyEvent","), desduplicação, filtro de mensagens próprias e controle de menções antes de alcançar o agente.",[468,3966,3967,3263,3970,3973],{},[433,3968,3969],{},"O registro de workspaces é bloqueado por configuração",[524,3971,3972],{},"allowWorkspace: false"," por padrão), garantindo controle total contra acesso indevido aos arquivos da máquina.",[457,3975,3977],{"id":3976},"conclusão-colaboração-com-agentes-de-ia-descentralizados-no-buzz","Conclusão: Colaboração com agentes de IA descentralizados no Buzz",[429,3979,3980,3981,3983],{},"O maior desafio ao incorporar o Buzz ao ",[524,3982,2864],{}," 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.",[457,3985,3986],{"id":2772},"Referências:",[484,3988,3989,3997,4005],{},[468,3990,3991,3996],{},[449,3992,3995],{"href":3993,"rel":3994},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway\u002Fblob\u002Fmain\u002Fdocs\u002Farchitecture.md",[509],"dsh-message-gateway architecture guide"," — guia de arquitetura, receitas de extensão e notas de segurança",[468,3998,3999,4004],{},[449,4000,4003],{"href":4001,"rel":4002},"https:\u002F\u002Fgithub.com\u002Fnbd-wtf\u002Fnostr-tools",[509],"nostr-tools"," — biblioteca Nostr utilizada sob o capô",[468,4006,4007,4012],{},[449,4008,4011],{"href":4009,"rel":4010},"https:\u002F\u002Fgithub.com\u002Fbytedance\u002Fdeer-flow\u002Fblob\u002Fmain\u002Fbackend\u002Fdocs\u002FIM_CHANNEL_CONNECTIONS.md",[509],"deer-flow IM channel connections"," — referências para arquiteturas de conexão em canais de mensageria",[1334,4014,4015],{},"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":643,"depth":650,"links":4017},[4018,4019,4023,4030,4031],{"id":2886,"depth":643,"text":2887},{"id":2999,"depth":643,"text":3000,"children":4020},[4021,4022],{"id":3283,"depth":650,"text":3284},{"id":3311,"depth":650,"text":3312},{"id":3416,"depth":643,"text":3417,"children":4024},[4025,4026,4028,4029],{"id":3539,"depth":650,"text":3540},{"id":3687,"depth":650,"text":4027},"Habilitando o acesso a pastas locais com \u002Fworkspace",{"id":3780,"depth":650,"text":3781},{"id":3938,"depth":650,"text":3939},{"id":3976,"depth":643,"text":3977},{"id":2772,"depth":643,"text":3986},[1356,4033,3610,4034],"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":4040,"robots":1367,"sitemap":4064},[4041,4043],{"@type":4042,"headline":2846,"description":4036,"image":4037},"TechArticle",{"@type":1366,"name":2846,"description":4036,"image":4037,"step":4044},[4045,4049,4052,4055,4058,4061],{"@type":4046,"name":4047,"text":4048},"HowToStep","Fase 1: Instalar o plugin de gateway","Instale o plugin dsh-message-gateway e inicie o serviço dsh web.",{"@type":4046,"name":4050,"text":4051},"Fase 2: Acessar Message platforms","Abra a interface Web do DSH e navegue até as configurações de Message platforms.",{"@type":4046,"name":4053,"text":4054},"Fase 3: Configurar a ponte Buzz","Gere um par de chaves Nostr, insira a URL do relay e os canais.",{"@type":4046,"name":4056,"text":4057},"Fase 4: Registrar o agente no relay","Adicione o assistente DSH ao relay Nostr do Buzz usando buzz-admin.",{"@type":4046,"name":4059,"text":4060},"Fase 5: Adicionar o agente ao canal","Vincule a chave HEX do agente aos canais usando buzz-cli.",{"@type":4046,"name":4062,"text":4063},"Fase 6: Habilitar acesso a workspaces","Configure allowWorkspace em cordis.patch.yml para permitir comandos de pastas locais.",{"lastmod":4035},{"title":4066,"description":4036,"ogTitle":2846,"ogDescription":4036,"twitterTitle":2846,"twitterDescription":4036},"Plugin Buzz para DeepSeek Harness: Criar Ponte Nostr","pt\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",[3005,3485,4069,4070,2864],"Nostr","Agentes IA","c3DZPaQeg7cLpNEOnZ4JMkgdCZ3xrLJOL0NosdV2XnI",[4073,4620,5253],{"id":4074,"title":1269,"author":424,"body":4075,"category":4604,"date":4606,"description":4607,"extension":1360,"image":4608,"imageAlt":4609,"isPublished":646,"meta":4610,"minRead":657,"navigation":646,"path":399,"seo":4614,"stem":4615,"tags":4616,"updatedAt":2842,"__hash__":4619},"article\u002Fpt\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac.md",{"type":426,"value":4076,"toc":4597},[4077,4081,4084,4091,4095,4101,4104,4107,4111,4114,4121,4137,4443,4557,4559,4562,4564,4594],[457,4078,4080],{"id":4079},"o-que-é-o-cloudflare-warp","O que é o Cloudflare WARP?",[429,4082,4083],{},"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.",[429,4085,4086,4087,4090],{},"Ele cria um túnel criptografado baseado no protocolo ",[433,4088,4089],{},"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.",[457,4092,4094],{"id":4093},"por-que-precisamos-do-cloudflare-warp","Por que precisamos do Cloudflare WARP?",[429,4096,4097,4098,511],{},"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 ",[433,4099,4100],{},"Acesso à Rede de Confiança Zero (ZTNA)",[429,4102,4103],{},"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.",[429,4105,4106],{},"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.",[457,4108,4110],{"id":4109},"suporte-a-múltiplos-perfis-do-warp-em-um-único-dispositivo","Suporte a múltiplos perfis do WARP em um único dispositivo",[429,4112,4113],{},"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.",[429,4115,4116,4117,4120],{},"Para conseguir isso no macOS, podemos usar um arquivo de perfil MDM ",[524,4118,4119],{},".mobileconfig"," para definir e registrar os diferentes ambientes do WARP.",[484,4122,4123,4134],{},[468,4124,4125,4133],{},[449,4126,4129,4130,4132],{"href":4127,"rel":4128},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fstatic\u002Fmdm\u002Fmultiple-orgs\u002FCloudflareWARP.mobileconfig",[509],"Download a sample ",[524,4131,4119],{}," file"," diretamente da Cloudflare.",[468,4135,4136],{},"Abaixo está um exemplo de como essa configuração se parece:",[615,4138,4142],{"className":4139,"code":4140,"language":4141,"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",[524,4143,4144,4149,4154,4159,4164,4169,4174,4179,4184,4189,4194,4199,4204,4209,4214,4219,4224,4229,4234,4239,4244,4249,4255,4261,4267,4273,4279,4285,4290,4295,4301,4306,4312,4317,4323,4329,4335,4341,4347,4353,4359,4365,4371,4377,4383,4389,4395,4401,4407,4413,4419,4425,4431,4437],{"__ignoreMap":424},[623,4145,4146],{"class":625,"line":626},[623,4147,4148],{},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",[623,4150,4151],{"class":625,"line":643},[623,4152,4153],{},"\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\" \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n",[623,4155,4156],{"class":625,"line":650},[623,4157,4158],{},"\u003Cplist version=\"1.0\">\n",[623,4160,4161],{"class":625,"line":657},[623,4162,4163],{},"\u003Cdict>\n",[623,4165,4166],{"class":625,"line":669},[623,4167,4168],{},"  \u003Ckey>PayloadContent\u003C\u002Fkey>\n",[623,4170,4171],{"class":625,"line":674},[623,4172,4173],{},"  \u003Carray>\n",[623,4175,4176],{"class":625,"line":680},[623,4177,4178],{},"    \u003Cdict>\n",[623,4180,4181],{"class":625,"line":1022},[623,4182,4183],{},"      \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[623,4185,4186],{"class":625,"line":1033},[623,4187,4188],{},"      \u003Cstring>Warp Configuration\u003C\u002Fstring>\n",[623,4190,4191],{"class":625,"line":1129},[623,4192,4193],{},"      \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[623,4195,4196],{"class":625,"line":1135},[623,4197,4198],{},"      \u003Cstring>com.cloudflare.warp.CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[623,4200,4201],{"class":625,"line":1141},[623,4202,4203],{},"      \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[623,4205,4206],{"class":625,"line":1146},[623,4207,4208],{},"      \u003Cstring>Cloudflare Ltd.\u003C\u002Fstring>\n",[623,4210,4211],{"class":625,"line":1152},[623,4212,4213],{},"      \u003Ckey>PayloadType\u003C\u002Fkey>\n",[623,4215,4216],{"class":625,"line":2095},[623,4217,4218],{},"      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n",[623,4220,4221],{"class":625,"line":2106},[623,4222,4223],{},"      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[623,4225,4226],{"class":625,"line":2111},[623,4227,4228],{},"      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[623,4230,4231],{"class":625,"line":2119},[623,4232,4233],{},"      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[623,4235,4236],{"class":625,"line":2650},[623,4237,4238],{},"      \u003Cinteger>1\u003C\u002Finteger>\n",[623,4240,4241],{"class":625,"line":2656},[623,4242,4243],{},"      \u003Ckey>configs\u003C\u002Fkey>\n",[623,4245,4246],{"class":625,"line":2665},[623,4247,4248],{},"      \u003Carray>\n",[623,4250,4252],{"class":625,"line":4251},22,[623,4253,4254],{},"        \u003Cdict>\n",[623,4256,4258],{"class":625,"line":4257},23,[623,4259,4260],{},"          \u003Ckey>organization\u003C\u002Fkey>\n",[623,4262,4264],{"class":625,"line":4263},24,[623,4265,4266],{},"          \u003Cstring>your-team-name-1\u003C\u002Fstring>\n",[623,4268,4270],{"class":625,"line":4269},25,[623,4271,4272],{},"          \u003Ckey>display_name\u003C\u002Fkey>\n",[623,4274,4276],{"class":625,"line":4275},26,[623,4277,4278],{},"          \u003Cstring>Team 1\u003C\u002Fstring>\n",[623,4280,4282],{"class":625,"line":4281},27,[623,4283,4284],{},"        \u003C\u002Fdict>\n",[623,4286,4288],{"class":625,"line":4287},28,[623,4289,4254],{},[623,4291,4293],{"class":625,"line":4292},29,[623,4294,4260],{},[623,4296,4298],{"class":625,"line":4297},30,[623,4299,4300],{},"          \u003Cstring>your-team-name-2\u003C\u002Fstring>\n",[623,4302,4304],{"class":625,"line":4303},31,[623,4305,4272],{},[623,4307,4309],{"class":625,"line":4308},32,[623,4310,4311],{},"          \u003Cstring>Team 2\u003C\u002Fstring>\n",[623,4313,4315],{"class":625,"line":4314},33,[623,4316,4284],{},[623,4318,4320],{"class":625,"line":4319},34,[623,4321,4322],{},"      \u003C\u002Farray>\n",[623,4324,4326],{"class":625,"line":4325},35,[623,4327,4328],{},"    \u003C\u002Fdict>\n",[623,4330,4332],{"class":625,"line":4331},36,[623,4333,4334],{},"  \u003C\u002Farray>\n",[623,4336,4338],{"class":625,"line":4337},37,[623,4339,4340],{},"  \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[623,4342,4344],{"class":625,"line":4343},38,[623,4345,4346],{},"  \u003Cstring>Cloudflare WARP\u003C\u002Fstring>\n",[623,4348,4350],{"class":625,"line":4349},39,[623,4351,4352],{},"  \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[623,4354,4356],{"class":625,"line":4355},40,[623,4357,4358],{},"  \u003Cstring>cloudflare_warp\u003C\u002Fstring>\n",[623,4360,4362],{"class":625,"line":4361},41,[623,4363,4364],{},"  \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[623,4366,4368],{"class":625,"line":4367},42,[623,4369,4370],{},"  \u003Cstring>Cloudflare, Ltd.\u003C\u002Fstring>\n",[623,4372,4374],{"class":625,"line":4373},43,[623,4375,4376],{},"  \u003Ckey>PayloadRemovalDisallowed\u003C\u002Fkey>\n",[623,4378,4380],{"class":625,"line":4379},44,[623,4381,4382],{},"  \u003Cfalse\u002F>\n",[623,4384,4386],{"class":625,"line":4385},45,[623,4387,4388],{},"  \u003Ckey>PayloadScope\u003C\u002Fkey>\n",[623,4390,4392],{"class":625,"line":4391},46,[623,4393,4394],{},"  \u003Cstring>System\u003C\u002Fstring>\n",[623,4396,4398],{"class":625,"line":4397},47,[623,4399,4400],{},"  \u003Ckey>PayloadType\u003C\u002Fkey>\n",[623,4402,4404],{"class":625,"line":4403},48,[623,4405,4406],{},"  \u003Cstring>Configuration\u003C\u002Fstring>\n",[623,4408,4410],{"class":625,"line":4409},49,[623,4411,4412],{},"  \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[623,4414,4416],{"class":625,"line":4415},50,[623,4417,4418],{},"  \u003Cstring>2B7763B8-64F6-41EB-AA5E-7761651B8131\u003C\u002Fstring>\n",[623,4420,4422],{"class":625,"line":4421},51,[623,4423,4424],{},"  \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[623,4426,4428],{"class":625,"line":4427},52,[623,4429,4430],{},"  \u003Cinteger>1\u003C\u002Finteger>\n",[623,4432,4434],{"class":625,"line":4433},53,[623,4435,4436],{},"\u003C\u002Fdict>\n",[623,4438,4440],{"class":625,"line":4439},54,[623,4441,4442],{},"\u003C\u002Fplist>\n",[484,4444,4445,4455,4467,4477,4483,4500,4513,4532,4548],{},[468,4446,4447,4448,565,4451,4454],{},"Substitua ",[524,4449,4450],{},"your-team-name-1",[524,4452,4453],{},"your-team-name-2"," pelos seus respectivos nomes de equipe do Cloudflare Zero Trust.",[468,4456,2140,4457,4460,4461,4464,4465,511],{},[524,4458,4459],{},"uuidgen"," no seu Terminal para gerar UUIDs exclusivos e use-os para substituir os valores de espaço reservado ",[524,4462,4463],{},"PayloadUUID"," no arquivo ",[524,4466,4119],{},[468,4468,4469,4470,4473,4474,4476],{},"Certifique-se de que a string ",[524,4471,4472],{},"PayloadIdentifier"," também contenha o ",[524,4475,4463],{}," atualizado para manter o perfil distinto.",[468,4478,4479,4480,4482],{},"Salve o arquivo ",[524,4481,4119],{}," editado.",[468,4484,4485,4486,4489,4490,4493,4494,4496],{},"Abra as ",[433,4487,4488],{},"Ajustes do Sistema"," no seu Mac, pesquise por ",[433,4491,4492],{},"Perfis"," e selecione-o.",[611,4495],{},[516,4497],{"alt":4498,"src":4499},"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",[468,4501,4502,4503,4506,4507,4509],{},"Clique em ",[433,4504,4505],{},"Instalar, visualizar ou remover..."," para começar a adicionar o seu novo perfil de configuração.",[611,4508],{},[516,4510],{"alt":4511,"src":4512},"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",[468,4514,4515,4516,4518,4519,4521,4522,4524,4528],{},"Clique no ícone ",[433,4517,3118],{}," (mais) no canto primeiro esquerdo e selecione o arquivo ",[524,4520,4119],{}," salvo.",[611,4523],{},[516,4525],{"alt":4526,"src":4527},"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",[516,4529],{"alt":4530,"src":4531},"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",[468,4533,4534,4535,4537,4538,4541,4542,4544],{},"Selecione ",[433,4536,439],{}," e clique em ",[433,4539,4540],{},"Instalar"," para aplicar la configuração.",[611,4543],{},[516,4545],{"alt":4546,"src":4547},"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",[468,4549,4550,4551,4553],{},"Reinicie o cliente Cloudflare WARP. Agora você deverá ver o alternador de múltiplos perfis na interface do usuário:",[611,4552],{},[516,4554],{"alt":4555,"src":4556},"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",[457,4558,1322],{"id":1321},[429,4560,4561],{},"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.",[457,4563,2773],{"id":2772},[484,4565,4566,4573,4580,4587],{},[468,4567,4568],{},[449,4569,4572],{"href":4570,"rel":4571},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002F#prepare-file-for-mdm-deployment",[509],"Managed Deployment Preparation",[468,4574,4575],{},[449,4576,4579],{"href":4577,"rel":4578},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002Fswitch-organizations\u002F",[509],"Switch Between Zero Trust Organizations",[468,4581,4582],{},[449,4583,4586],{"href":4584,"rel":4585},"https:\u002F\u002Fblog.cloudflare.com\u002Fintroducing-warp-connector-paving-the-path-to-any-to-any-connectivity-2\u002F",[509],"Introducing WARP Connector: Paving the Path to Any-to-Any Connectivity",[468,4588,4589],{},[449,4590,4593],{"href":4591,"rel":4592},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002F",[509],"Cloudflare One Client Documentation",[1334,4595,4596],{},"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":643,"depth":650,"links":4598},[4599,4600,4601,4602,4603],{"id":4079,"depth":643,"text":4080},{"id":4093,"depth":643,"text":4094},{"id":4109,"depth":643,"text":4110},{"id":1321,"depth":643,"text":1322},{"id":2772,"depth":643,"text":2773},[1357,4605],"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":4611,"robots":1367,"sitemap":4613},[4612],{"@type":1366,"headline":1269,"description":4607},{"lastmod":4606},{"title":4609,"description":4607,"ogTitle":1269,"ogDescription":4607,"twitterTitle":1269,"twitterDescription":4607},"pt\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",[4617,439,4618,1374],"macOS","MDM","EwH2jVxo0k3L6vZD6bfnIxGUBZQQEsBLKPw_paSz3AA",{"id":4621,"title":451,"author":424,"body":4622,"category":5225,"date":5226,"description":5227,"extension":1360,"image":5228,"imageAlt":5229,"isPublished":646,"meta":5230,"minRead":674,"navigation":646,"path":375,"seo":5244,"stem":5246,"tags":5247,"updatedAt":2842,"__hash__":5252},"article\u002Fpt\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server.md",{"type":426,"value":4623,"toc":5214},[4624,4628,4631,4634,4638,4642,4645,4658,4664,4667,4696,4703,4730,4736,4741,4755,4767,4775,4780,4796,4800,4803,4824,4830,4833,4844,4854,4865,4895,4899,4909,4919,4929,4942,4949,4959,4965,4994,5010,5014,5020,5032,5037,5070,5074,5077,5091,5097,5160,5162,5206,5208,5211],[457,4625,4627],{"id":4626},"por-que-hospedar-o-hermes-agent-em-um-vps-remoto","Por que hospedar o Hermes Agent em um VPS remoto?",[429,4629,4630],{},"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.",[429,4632,4633],{},"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.",[457,4635,4637],{"id":4636},"como-configurar-o-hermes-agent-em-um-vps-linux","Como configurar o Hermes Agent em um VPS Linux",[479,4639,4641],{"id":4640},"passo-1-conectar-se-ao-seu-vps","Passo 1: Conectar-se ao seu VPS",[429,4643,4644],{},"Abra o terminal e conecte-se via SSH à sua máquina remota:",[615,4646,4648],{"className":617,"code":4647,"language":619,"meta":424,"style":424},"ssh root@your_server_ip\n",[524,4649,4650],{"__ignoreMap":424},[623,4651,4652,4655],{"class":625,"line":626},[623,4653,4654],{"class":629},"ssh",[623,4656,4657],{"class":633}," root@your_server_ip\n",[429,4659,4660],{},[516,4661],{"alt":4662,"src":4663},"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",[429,4665,4666],{},"Certifique-se de que os pacotes do seu servidor estejam atualizados:",[615,4668,4670],{"className":617,"code":4669,"language":619,"meta":424,"style":424},"sudo apt update && sudo apt upgrade -y\n",[524,4671,4672],{"__ignoreMap":424},[623,4673,4674,4676,4679,4682,4685,4688,4690,4693],{"class":625,"line":626},[623,4675,630],{"class":629},[623,4677,4678],{"class":633}," apt",[623,4680,4681],{"class":633}," update",[623,4683,4684],{"class":695}," &&",[623,4686,4687],{"class":629}," sudo",[623,4689,4678],{"class":633},[623,4691,4692],{"class":633}," upgrade",[623,4694,4695],{"class":633}," -y\n",[429,4697,4698,4699,4702],{},"Adicione um novo usuário, ",[524,4700,4701],{},"hermes",", ou o seu nome de usuário de preferência:",[615,4704,4706],{"className":617,"code":4705,"language":619,"meta":424,"style":424},"sudo adduser hermes \nsudo passwd hermes\n",[524,4707,4708,4720],{"__ignoreMap":424},[623,4709,4710,4712,4715,4718],{"class":625,"line":626},[623,4711,630],{"class":629},[623,4713,4714],{"class":633}," adduser",[623,4716,4717],{"class":633}," hermes",[623,4719,773],{"class":772},[623,4721,4722,4724,4727],{"class":625,"line":643},[623,4723,630],{"class":629},[623,4725,4726],{"class":633}," passwd",[623,4728,4729],{"class":633}," hermes\n",[429,4731,4732,4733,948],{},"Desative o login por senha para o usuário ",[524,4734,4735],{},"root",[465,4737,4738],{},[468,4739,4740],{},"Abra o arquivo de configuração do SSH:",[615,4742,4744],{"className":617,"code":4743,"language":619,"meta":424,"style":424},"sudo nano \u002Fetc\u002Fssh\u002Fsshd_config\n",[524,4745,4746],{"__ignoreMap":424},[623,4747,4748,4750,4752],{"class":625,"line":626},[623,4749,630],{"class":629},[623,4751,1063],{"class":633},[623,4753,4754],{"class":633}," \u002Fetc\u002Fssh\u002Fsshd_config\n",[465,4756,4757],{"start":643},[468,4758,4759,4760,4763,4764,948],{},"Localize a linha ",[524,4761,4762],{},"PermitRootLogin"," e altere seu valor para ",[524,4765,4766],{},"no",[615,4768,4773],{"className":4769,"code":4771,"language":4772,"meta":424},[4770],"language-text","PermitRootLogin no\n","text",[524,4774,4771],{"__ignoreMap":424},[465,4776,4777],{"start":650},[468,4778,4779],{},"Salve o arquivo e reinicie o serviço SSH:",[615,4781,4783],{"className":617,"code":4782,"language":619,"meta":424,"style":424},"sudo systemctl restart ssh\n",[524,4784,4785],{"__ignoreMap":424},[623,4786,4787,4789,4791,4793],{"class":625,"line":626},[623,4788,630],{"class":629},[623,4790,634],{"class":633},[623,4792,637],{"class":633},[623,4794,4795],{"class":633}," ssh\n",[479,4797,4799],{"id":4798},"passo-2-instalar-o-hermes-agent","Passo 2: Instalar o Hermes Agent",[429,4801,4802],{},"Execute o seguinte comando:",[615,4804,4806],{"className":617,"code":4805,"language":619,"meta":424,"style":424},"curl -fsSL https:\u002F\u002Fhermes-agent.nousresearch.com\u002Finstall.sh | bash\n",[524,4807,4808],{"__ignoreMap":424},[623,4809,4810,4812,4815,4818,4821],{"class":625,"line":626},[623,4811,1727],{"class":629},[623,4813,4814],{"class":633}," -fsSL",[623,4816,4817],{"class":633}," https:\u002F\u002Fhermes-agent.nousresearch.com\u002Finstall.sh",[623,4819,4820],{"class":695}," |",[623,4822,4823],{"class":629}," bash\n",[429,4825,4826],{},[516,4827],{"alt":4828,"src":4829},"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",[429,4831,4832],{},"Depois de instalado, verifique a instalação digitando:",[615,4834,4836],{"className":617,"code":4835,"language":619,"meta":424,"style":424},"hermes --version\n",[524,4837,4838],{"__ignoreMap":424},[623,4839,4840,4842],{"class":625,"line":626},[623,4841,4701],{"class":629},[623,4843,2360],{"class":633},[429,4845,561,4846,4849,4850],{},[524,4847,4848],{},"hermes setup"," para configurar o Hermes Agent:\n",[516,4851],{"alt":4852,"src":4853},"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",[429,4855,4856,4857,4860,4861],{},"Selecione um provedor de LLM, comece com o ",[524,4858,4859],{},"DeepSeek"," e adicione outros mais tarde.\n",[516,4862],{"alt":4863,"src":4864},"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",[429,4866,4867,4868,964,4870,4874,4878,4879,4882,4883,4878,4887,4890,4891],{},"Insira a chave de API do ",[524,4869,4859],{},[516,4871],{"alt":4872,"src":4873},"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",[516,4875],{"alt":4876,"src":4877},"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 ",[524,4880,4881],{},"local machine"," para executar o Hermes Agent:\n",[516,4884],{"alt":4885,"src":4886},"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",[524,4888,4889],{},"Telegram"," nos canais de comunicação. Outros canais podem ser configurados posteriormente.\n",[516,4892],{"alt":4893,"src":4894},"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",[479,4896,4898],{"id":4897},"passo-3-integração-com-o-telegram","Passo 3: Integração com o Telegram",[429,4900,4534,4901,4904,4905],{},[524,4902,4903],{},"[2]"," para usar o bot do Telegram.\n",[516,4906],{"alt":4907,"src":4908},"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",[429,4910,4911,4912,4914,4915],{},"Acesse o ",[524,4913,4889],{}," e pesquise por 'BotFather'.\n",[516,4916],{"alt":4917,"src":4918},"Pesquisando por BotFather no aplicativo Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-search-botfather.webp",[429,4920,4502,4921,4924,4925],{},[524,4922,4923],{},"Open"," para abrir o 'BotFather'.\n",[516,4926],{"alt":4927,"src":4928},"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",[429,4930,4502,4931,4934,4935,527,4938],{},[524,4932,4933],{},"Create a New Bot"," (ou envie o comando ",[524,4936,4937],{},"\u002Fnewbot",[516,4939],{"alt":4940,"src":4941},"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",[429,4943,4944,4945],{},"Preencha os nomes requeridos e crie o bot.\n",[516,4946],{"alt":4947,"src":4948},"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",[429,4950,4502,4951,4954,4955],{},[524,4952,4953],{},"Copy"," para copiar o token e cole-o de volta no terminal.\n",[516,4956],{"alt":4957,"src":4958},"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",[429,4960,4961,4962,4964],{},"Encontre o ID da sua conta de usuário do ",[524,4963,4889],{}," e adicione-o à lista de usuários permitidos ('Allowed user list'):",[484,4966,4967,4977,4991],{},[468,4968,4969,4970,4972,4973],{},"Pesquise por '@raw_data_bot' no ",[524,4971,4889],{},".\n",[516,4974],{"alt":4975,"src":4976},"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",[468,4978,4979,4980,4983,4984,4972,4987],{},"Clique no ",[524,4981,4982],{},"RawDataBot"," e depois no botão Start (Começar). O ID do usuário será exibido após ",[524,4985,4986],{},"P.S. Your ID:",[516,4988],{"alt":4989,"src":4990},"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",[468,4992,4993],{},"Copie o ID de usuário e cole-o no terminal.",[429,4995,4996,4997,5001,5002,5006],{},"Como estamos executando na nuvem, queremos que o serviço seja iniciado automaticamente.\n",[516,4998],{"alt":4999,"src":5000},"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",[516,5003],{"alt":5004,"src":5005},"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",[516,5007],{"alt":5008,"src":5009},"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",[457,5011,5013],{"id":5012},"testando-seu-hermes-agent-com-o-bot-do-telegram","Testando seu Hermes Agent com o bot do Telegram",[429,5015,5016,5017,948],{},"Execute o seguinte comando para iniciar o ",[524,5018,5019],{},"hermes gateway",[615,5021,5023],{"className":617,"code":5022,"language":619,"meta":424,"style":424},"hermes gateway\n",[524,5024,5025],{"__ignoreMap":424},[623,5026,5027,5029],{"class":625,"line":626},[623,5028,4701],{"class":629},[623,5030,5031],{"class":633}," gateway\n",[429,5033,4911,5034,5036],{},[524,5035,4889],{}," e adicione o bot criado, '@tech_cloud_hermes_bot', às suas conversas.",[484,5038,5039,5051,5061],{},[468,5040,5041,5042,5044,5045,4972,5047],{},"Digite '\u002Fnew' no ",[524,5043,4889],{}," para iniciar uma nova sessão do ",[524,5046,435],{},[516,5048],{"alt":5049,"src":5050},"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",[468,5052,5053,5054,5056,5057],{},"Digitar ",[524,5055,3875],{}," listará todos os comandos disponíveis.\n",[516,5058],{"alt":5059,"src":5060},"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",[468,5062,5053,5063,5065,5066],{},[524,5064,3905],{}," exibirá uma lista com os LLMs disponíveis.\n",[516,5067],{"alt":5068,"src":5069},"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",[457,5071,5073],{"id":5072},"executando-o-hermes-gateway-como-um-serviço-em-segundo-plano","Executando o Hermes Gateway como um serviço em segundo plano",[429,5075,5076],{},"Crie o arquivo de serviço:",[615,5078,5080],{"className":1052,"code":5079,"language":1054,"meta":424,"style":424},"sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-gateway.service\n",[524,5081,5082],{"__ignoreMap":424},[623,5083,5084,5086,5088],{"class":625,"line":626},[623,5085,630],{"class":629},[623,5087,1063],{"class":633},[623,5089,5090],{"class":633}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-gateway.service\n",[429,5092,5093,5094,5096],{},"Cole o seguinte conteúdo, substituindo ",[524,5095,4701],{}," em '\u002Fhome\u002Fhermes' pelo seu nome de usuário preferido:",[615,5098,5100],{"className":1078,"code":5099,"language":1080,"meta":424,"style":424},"[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",[524,5101,5102,5106,5111,5115,5119,5123,5127,5131,5136,5140,5144,5148,5152,5156],{"__ignoreMap":424},[623,5103,5104],{"class":625,"line":626},[623,5105,1087],{},[623,5107,5108],{"class":625,"line":643},[623,5109,5110],{},"Description=Hermes Gateway\n",[623,5112,5113],{"class":625,"line":650},[623,5114,1097],{},[623,5116,5117],{"class":625,"line":657},[623,5118,647],{"emptyLinePlaceholder":646},[623,5120,5121],{"class":625,"line":669},[623,5122,1106],{},[623,5124,5125],{"class":625,"line":674},[623,5126,1111],{},[623,5128,5129],{"class":625,"line":680},[623,5130,1116],{},[623,5132,5133],{"class":625,"line":1022},[623,5134,5135],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes gateway\n",[623,5137,5138],{"class":625,"line":1033},[623,5139,1126],{},[623,5141,5142],{"class":625,"line":1129},[623,5143,1132],{},[623,5145,5146],{"class":625,"line":1135},[623,5147,1138],{},[623,5149,5150],{"class":625,"line":1141},[623,5151,647],{"emptyLinePlaceholder":646},[623,5153,5154],{"class":625,"line":1146},[623,5155,1149],{},[623,5157,5158],{"class":625,"line":1152},[623,5159,1155],{},[429,5161,1160],{},[615,5163,5165],{"className":1052,"code":5164,"language":1054,"meta":424,"style":424},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-gateway\nsudo systemctl start hermes-gateway\nsudo systemctl status hermes-gateway\n",[524,5166,5167,5175,5186,5196],{"__ignoreMap":424},[623,5168,5169,5171,5173],{"class":625,"line":626},[623,5170,630],{"class":629},[623,5172,634],{"class":633},[623,5174,1174],{"class":633},[623,5176,5177,5179,5181,5183],{"class":625,"line":643},[623,5178,630],{"class":629},[623,5180,634],{"class":633},[623,5182,769],{"class":633},[623,5184,5185],{"class":633}," hermes-gateway\n",[623,5187,5188,5190,5192,5194],{"class":625,"line":650},[623,5189,630],{"class":629},[623,5191,634],{"class":633},[623,5193,1194],{"class":633},[623,5195,5185],{"class":633},[623,5197,5198,5200,5202,5204],{"class":625,"line":657},[623,5199,630],{"class":629},[623,5201,634],{"class":633},[623,5203,664],{"class":633},[623,5205,5185],{"class":633},[457,5207,1322],{"id":1321},[429,5209,5210],{},"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.",[1334,5212,5213],{},"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":643,"depth":650,"links":5215},[5216,5217,5222,5223,5224],{"id":4626,"depth":643,"text":4627},{"id":4636,"depth":643,"text":4637,"children":5218},[5219,5220,5221],{"id":4640,"depth":650,"text":4641},{"id":4798,"depth":650,"text":4799},{"id":4897,"depth":650,"text":4898},{"id":5012,"depth":643,"text":5013},{"id":5072,"depth":643,"text":5073},{"id":1321,"depth":643,"text":1322},[1356],"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":5231,"robots":1367,"sitemap":5243},[5232],{"@type":1366,"name":451,"description":5227,"image":5228,"step":5233},[5234,5237,5240],{"@type":4046,"name":4641,"text":5235,"image":4663,"url":5236},"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":4046,"name":4799,"text":5238,"image":4829,"url":5239},"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":4046,"name":4898,"text":5241,"image":4908,"url":5242},"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":5226},{"title":5245,"description":5227,"ogTitle":451,"ogDescription":5227,"twitterTitle":451,"twitterDescription":5227},"Configuração do Hermes Agent no VPS: Guia de Bot do Telegram","pt\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",[435,5248,5249,5250,5251],"VPS Setup","Telegram Bot","Linux VPS","AI Agent","kFF1oLcXZtGj8Oh10ngzAGRuWJX_j9kzta_KDeDZSEY",{"id":2845,"title":2846,"author":424,"body":2847,"category":4032,"date":4035,"description":4036,"extension":1360,"image":4037,"imageAlt":4038,"isPublished":646,"meta":4039,"minRead":1135,"navigation":646,"path":355,"seo":4065,"stem":4067,"tags":4068,"updatedAt":2842,"__hash__":4071},1792489983570]