[{"data":1,"prerenderedAt":5279},["ShallowReactive",2],{"published-article-paths":3,"search-navigation":348,"\u002Fes\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp":421,"\u002Fes\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp-surround":1408},[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":79,"seo":1400,"stem":1402,"tags":1403,"updatedAt":1399,"__hash__":1407},"article\u002Fes\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp.md","Cómo exponer Hermes Agent de forma privada con 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",{},"Un desafío común surge cuando desea acceder a su ",[433,434,435],"strong",{},"Hermes Agent"," desde otros dispositivos como portátiles, tabletas o teléfonos sin exponerlo a la Internet pública. El uso de ",[433,438,439],{},"Cloudflare WARP"," junto con ",[433,442,443],{},"Cloudflare Zero Trust"," le permite exponer el Hermes Agent a nivel mundial sin necesidad de abrir un solo puerto de entrada en su firewall.",[429,446,447,448,452,453,455],{},"Si siguió nuestra guía anterior, '",[449,450,451],"a",{"href":375},"Cómo desplegar Hermes Agent en un servidor VPS con Linux","', ya tendrá un Hermes Agent funcionando 24\u002F7. En lugar de lidiar con la sobrecarga de las VPN tradicionales, usaremos el cliente ",[433,454,439],{}," para exponer el Hermes Agent a una red privada a través de Internet.",[457,458,460],"h2",{"id":459},"comprender-la-arquitectura","Comprender la arquitectura",[429,462,463],{},"Los componentes en juego:",[465,466,467,473],"ol",{},[468,469,470,472],"li",{},[433,471,443],{},": El panel de control en Cloudflare donde define reglas de enrutamiento y políticas de acceso.",[468,474,475,477],{},[433,476,439],{},": La aplicación cliente instalada en sus dispositivos (VPS, portátiles, teléfonos). Intercepta el tráfico destinado a su red privada y lo enruta de forma segura.",[479,480,482],"h3",{"id":481},"requisitos-previos","Requisitos previos",[484,485,486,489],"ul",{},[468,487,488],{},"Un Hermes Agent en ejecución en su VPS.",[468,490,491],{},"Una cuenta gratuita de Cloudflare.",[457,493,495],{"id":494},"guía-paso-a-paso","Guía paso a paso",[479,497,499],{"id":498},"paso-1-configurar-cloudflare-zero-trust","Paso 1: Configurar Cloudflare Zero Trust",[465,501,502,512,520,532,539,546],{},[468,503,504,505,511],{},"Inicie sesión en su ",[449,506,510],{"href":507,"rel":508},"https:\u002F\u002Fdash.cloudflare.com\u002F",[509],"nofollow","Panel de Cloudflare",".",[468,513,514,515],{},"Haga clic en 'Zero Trust' en el menú de la izquierda.\n",[516,517],"img",{"alt":518,"src":519},"Menú de navegación de la barra lateral izquierda del panel de Cloudflare con la opción 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],{},"Si es su primera vez, se le pedirá que elija un plan (el nivel Gratuito es perfectamente válido para esta configuración) y que asigne un nombre a su equipo (por ejemplo, ",[524,525,526],"code",{},"ai-team",").\n",[516,529],{"alt":530,"src":531},"Configuración inicial de la cuenta de Cloudflare Zero Trust y asignación del nombre del equipo","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],{},"Haga clic en 'Access' y luego en 'Policies' para crear una política de acceso que defina quién tiene acceso a la red.\n",[516,536],{"alt":537,"src":538},"Página de políticas de Cloudflare Zero Trust Access que muestra las reglas de acceso recién 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],{},"Haga clic en '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],{},"Seleccione 'Emails' e introduzca su correo electrónico en '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},"paso-2-configurar-el-cliente-cloudflare-warp-en-el-vps","Paso 2: Configurar el cliente Cloudflare WARP en el VPS",[465,558,559,570,576,583,586,601,604,703],{},[468,560,561,562,565,566,569],{},"Ejecute ",[524,563,564],{},"sudo apt update"," y ",[524,567,568],{},"sudo apt install cloudflare-warp"," en la terminal de su VPS.",[468,571,561,572,575],{},[524,573,574],{},"warp-cli registration new \u003CTEAM-NAME>"," en la terminal de su VPS, lo cual imprimirá una URL.",[468,577,578,579,582],{},"Copie la URL impresa, que se verá como ",[524,580,581],{},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fwarp",", y péguela en su navegador para la autenticación.",[468,584,585],{},"Dado que se utiliza la autenticación por correo electrónico en la configuración de la política anterior, introduzca su correo para autenticarse.",[468,587,588,589,592,593,596,597,600],{},"En la página de '",[433,590,591],{},"Success","' (Éxito) en el navegador, haga clic derecho y seleccione '",[433,594,595],{},"Inspect","' (Inspeccionar) en el botón azul '",[433,598,599],{},"Open Cloudflare WARP","'.",[468,602,603],{},"Copie el token largo que se muestra en el enlace del botón.",[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>\""," en la terminal de su VPS para conectarlo a Cloudflare Zero Trust.",[611,612],"br",{},"Si encuentra el error 'Error: Failed to communicate with the WARP API' en Ubuntu 26, ejecute los siguientes 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],{},"Vuelva al panel de Cloudflare Zero Trust y haga clic en 'Devices' (Dispositivos). Su dispositivo VPS debería aparecer ahora.\n",[516,707],{"alt":708,"src":709},"Panel de dispositivos de Zero Trust que confirma que el 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},"paso-3-configurar-el-enrutamiento-del-tráfico","Paso 3: Configurar el enrutamiento del tráfico",[465,715,716,723,730,737],{},[468,717,718,719],{},"Haga clic en el perfil de su VPS en el panel de Dispositivos.\n",[516,720],{"alt":721,"src":722},"Acceso a los detalles y configuraciones del túnel dividido para el dispositivo 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],{},"Desplácese hacia abajo hasta la sección 'Split Tunnels' (Túneles divididos).\n",[516,727],{"alt":728,"src":729},"Sección de túneles divididos en las configuraciones de perfil del 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],{},"Haga clic en el botón 'Manage' (Administrar) y configure los ajustes como se muestra a continuación. Reemplace la dirección IP si es necesario.\n",[516,734],{"alt":735,"src":736},"Administración de exclusiones de host y direcciones IP en túneles divididos de 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],{},"Exponer la ",[524,741,742],{},"address"," (dirección) y el ",[524,745,746],{},"host"," enrutará el tráfico a sus servicios a través de la misma red privada.",[479,749,751],{"id":750},"paso-4-configurar-el-firewall-en-el-vps","Paso 4: Configurar el firewall en el VPS",[429,753,754],{},"Habilite el firewall para permitir únicamente la subred '100.96.0.0\u002F12', bloqueando el resto del acceso público entrante.",[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 el tráfico loopback para evitar interrumpir los servicios locales:",[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],{},"Recargue el firewall y verifique el estado:",[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},"paso-5-exponer-hermes-agent-a-la-red-privada","Paso 5: Exponer Hermes Agent a la red privada",[429,896,897,898,901,902,511],{},"Expondremos el ",[433,899,900],{},"Hermes Agent Web Dashboard"," a nuestra red privada y usaremos el proveedor de autenticación predeterminado, ",[433,903,904],{},"Nous Research",[906,907,909],"h4",{"id":908},"configurar-el-proveedor-de-autenticación","Configurar el proveedor de autenticación",[465,911,912,921,928,935,942],{},[468,913,914,915,920],{},"Diríjase a ",[449,916,919],{"href":917,"rel":918},"https:\u002F\u002Fportal.nousresearch.com",[509],"portal.nousresearch.com"," para registrar una cuenta.",[468,922,923,924],{},"Seleccione 'Local Dashboards' (Paneles locales).\n",[516,925],{"alt":926,"src":927},"Selección de la opción Local Dashboards en el portal de 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],{},"Haga clic en 'Register Dashboard' (Registrar panel).\n",[516,932],{"alt":933,"src":934},"Hacer clic en el botón de registrar panel para crear una nueva entrada de panel","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-register-dashboard.webp",[468,936,937,938],{},"Introduzca la dirección IP de la red privada de su VPS como la 'Dashboard redirect URI' (URI de redireccionamiento del panel) y haga clic en 'Save' (Guardar).\n",[516,939],{"alt":940,"src":941},"Registro de la dirección IP de red privada del VPS como URI de redireccionamiento en 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 el 'OAuth client ID' y péguelo en su archivo ",[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-systemd-para-iniciar-automáticamente-el-panel-de-hermes","Configurar Systemd para iniciar automáticamente el panel de Hermes",[465,1046,1047],{},[468,1048,1049],{},"Cree un archivo de servicio:",[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],{},"Pegue la siguiente configuración, asegurándose de que ",[524,1073,1074],{},"--host 0.0.0.0"," sea parte del 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 el servicio:",[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},"paso-6-instalar-el-cliente-cloudflare-warp-en-el-escritorio","Paso 6: Instalar el cliente Cloudflare WARP en el escritorio",[465,1212,1213,1221,1224,1231,1238,1245],{},[468,1214,1215,1216,511],{},"Descargue el cliente Cloudflare WARP desde el ",[449,1217,1220],{"href":1218,"rel":1219},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fwarp-client\u002Fget-started\u002F",[509],"portal de Cloudflare",[468,1222,1223],{},"Abra e inicie el cliente Cloudflare WARP después de la instalación.",[468,1225,1226,1227],{},"Inicie sesión cuando se le solicite.\n",[516,1228],{"alt":1229,"src":1230},"Aviso de inicio de sesión del cliente de Cloudflare WARP en el ordenador de escritorio","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],{},"Se mostrará una página de 'Success' (Éxito) después de un inicio de sesión exitoso.\n",[516,1235],{"alt":1236,"src":1237},"Página web de éxito de autenticación tras iniciar sesión en Cloudflare Zero Trust en escritorio","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],{},"El cliente WARP ahora debería mostrar que está conectado a su equipo de Zero Trust.\n",[516,1242],{"alt":1243,"src":1244},"Cliente de Cloudflare WARP de escritorio que confirma la conexión activa a la red privada","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 a su navegador web e introduzca su IP privada (por ejemplo, ",[524,1249,1250],{},"100.96.0.3","). El Hermes Web Dashboard debería cargarse con éxito.\n",[516,1253],{"alt":1254,"src":1255},"Acceso al panel web de Hermes Agent privado desde el navegador del ordenador de escritorio","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],{},"Consejo profesional para usuarios de macOS:"," Si está utilizando el cliente WARP para acceder a varias cuentas de Cloudflare, consulte nuestra guía rápida sobre ",[433,1266,1267],{},[449,1268,1269],{"href":399},"Cambiar entre múltiples perfiles de Cloudflare WARP en macOS"," para cambiar de cuenta sin problemas.",[479,1272,1274],{"id":1273},"paso-7-instalar-el-cliente-cloudflare-warp-en-dispositivos-ios","Paso 7: Instalar el cliente Cloudflare WARP en dispositivos iOS",[465,1276,1277,1284,1292,1300,1308],{},[468,1278,1279,1280,1283],{},"Instale ",[433,1281,1282],{},"Cloudflare One"," desde la App Store.",[468,1285,1286,1287],{},"Abra la aplicación Cloudflare One e introduzca el nombre de su equipo cuando se le solicite.\n",[516,1288],{"alt":1289,"src":1290,"width":1291},"Introducir el nombre de equipo de Cloudflare Zero Trust en la aplicación Cloudflare One en 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],{},"Inicie sesión utilizando la misma dirección de correo electrónico que se configuró en la regla de política anterior.\n",[516,1296],{"alt":1297,"src":1298,"width":1299},"Aviso de autenticación por correo electrónico para Cloudflare Zero Trust en 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],{},"Una vez conectado, debería verse así:\n",[516,1304],{"alt":1305,"src":1306,"width":1307},"Aplicación Cloudflare One que muestra el estado de conexión activa en el dispositivo 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 a su navegador web e introduzca la IP privada ",[524,1312,1250],{}," para acceder al Hermes Web Dashboard en su dispositivo móvil.\n",[516,1315],{"alt":1316,"src":1317,"width":1318},"Acceso a la interfaz del panel web de Hermes Agent desde el navegador móvil del teléfono","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},"conclusión","Conclusión",[429,1324,1325,1326,1328,1329,1332],{},"Con ",[433,1327,443],{}," manejando las políticas de identidad y el cliente ",[433,1330,1331],{},"WARP"," enrutando el tráfico a través de un túnel cifrado, su Hermes Agent es accesible de forma segura desde sus dispositivos en todo el mundo. Esta configuración establece una base segura y robusta para construir y acceder a una infraestructura de IA privada y 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 exponer y acceder globalmente a su Hermes Agent de forma segura con Cloudflare WARP y Zero Trust, sin abrir puertos de entrada en el firewall.","md","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002FES-Exposing-Hermes-Agent-to-Private-Network-Using-Cloudflare-WARP.webp","Exponer de forma segura Hermes Agent a una red privada mediante Cloudflare Zero Trust y el túnel WARP",{"schemaOrg":1364,"robots":1397,"sitemap":1398},[1365],{"@type":1366,"headline":423,"description":1359,"name":423,"image":1361,"step":1367},"HowTo",[1368,1373,1377,1381,1385,1389,1393],{"@type":1369,"name":1370,"text":1371,"url":1372,"image":519},"HowToStep","Configurar Cloudflare Zero Trust","Inicie sesión en su Panel de Cloudflare. Haga clic en 'Zero Trust' en el menú de la izquierda. Si es su primera vez, se le pedirá que elija un plan (el nivel Gratuito es perfectamente válido para esta configuración) y que asigne un nombre a su equipo","#step-1",{"@type":1369,"name":1374,"text":1375,"url":1376,"image":709},"Configurar el cliente Cloudflare WARP en el VPS","Ejecute sudo apt update y sudo apt install cloudflare-warp en la terminal de su VPS. Ejecute warp-cli registration new \u003CTEAM-NAME> en la terminal de su VPS, lo cual imprimirá una URL. Copie la URL impresa, que se verá como https:\u002F\u002F\u003Cteam>.cloudflareac","#step-2",{"@type":1369,"name":1378,"text":1379,"url":1380,"image":722},"Configurar el enrutamiento del tráfico","Haga clic en el perfil de su VPS en el panel de Dispositivos. Desplácese hacia abajo hasta la sección 'Split Tunnels' (Túneles divididos). Haga clic en el botón 'Manage' (Administrar) y configure los ajustes como se muestra a continuación. Reemplace","#step-3",{"@type":1369,"name":1382,"text":1383,"url":1384},"Configurar el firewall en el VPS","Habilite el firewall para permitir únicamente la subred '100.96.0.0\u002F12', bloqueando el resto del acceso público entrante. bash Permita el tráfico loopback para evitar interrumpir los servicios locales: bash Recargue el firewall y verifique el estado:","#step-4",{"@type":1369,"name":1386,"text":1387,"url":1388},"Exponer Hermes Agent a la red privada","Expondremos el Hermes Agent Web Dashboard a nuestra red privada y usaremos el proveedor de autenticación predeterminado, Nous Research.","#step-5",{"@type":1369,"name":1390,"text":1391,"url":1392,"image":1230},"Instalar el cliente Cloudflare WARP en el escritorio","Descargue el cliente Cloudflare WARP desde el portal de Cloudflare. Abra e inicie el cliente Cloudflare WARP después de la instalación. Inicie sesión cuando se le solicite. Se mostrará una página de 'Success' (Éxito) después de un inicio de sesión ex","#step-6",{"@type":1369,"name":1394,"text":1395,"url":1396,"image":1290},"Instalar el cliente Cloudflare WARP en dispositivos iOS","Instale Cloudflare One desde la App Store. Abra la aplicación Cloudflare One e introduzca el nombre de su equipo cuando se le solicite. Inicie sesión utilizando la misma dirección de correo electrónico que se configuró en la regla de política anterio","#step-7","index, follow",{"lastmod":1399},"2026-09-28",{"title":1401,"description":1359,"ogTitle":423,"ogDescription":1359,"twitterTitle":423,"twitterDescription":1359},"Acceso seguro a Hermes Agent con Cloudflare Zero Trust","es\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",[439,1404,435,1405,1406],"Zero Trust","Red privada","Tutorial","1Uqqvv_e2EG_KJYm_QsykKctzltK62Y5p8j4IVF9puk",{"surround":1409,"related":4101},[1410,2874],{"id":1411,"title":1412,"author":424,"body":1413,"category":2852,"date":2854,"description":2855,"extension":1360,"image":2856,"imageAlt":2857,"isPublished":646,"meta":2858,"minRead":2123,"navigation":646,"path":99,"seo":2865,"stem":2867,"tags":2868,"updatedAt":2872,"__hash__":2873},"article\u002Fes\u002Farticle\u002Fsync-obsidian-across-devices.md","Cómo sincronizar bóvedas de Obsidian entre dispositivos",{"type":426,"value":1414,"toc":2830},[1415,1418,1423,1432,1441,1459,1464,1473,1477,1482,1496,1512,1515,1519,1523,1530,1535,1539,1544,1602,1609,1641,1645,1652,1660,1667,1729,1732,1751,1758,1770,1774,1778,1789,1794,1804,1826,1831,1845,1850,1856,1861,1876,1879,1884,1887,1892,1896,1901,1915,1919,1933,1943,1947,1952,1955,1965,1998,2002,2009,2153,2188,2193,2214,2225,2230,2234,2244,2315,2319,2325,2362,2493,2500,2506,2512,2518,2521,2527,2533,2547,2558,2565,2571,2578,2707,2713,2718,2721,2726,2729,2733,2738,2743,2749,2760,2770,2774,2785,2790,2797,2800,2804,2827],[429,1416,1417],{},"Obsidian es una aplicación de gestión de conocimientos que funciona de forma local (local-first). Cada nota es un archivo markdown en su dispositivo y permanece completamente bajo su control. Sin embargo, a menudo queremos tener la misma bóveda (vault) en nuestra computadora portátil, teléfono y otros dispositivos, o poder acceder a ella a través de un navegador web de forma remota.",[516,1419],{"src":1420,"alt":1421,"style":1422},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-multi-device-sync-illustration.webp","Ilustración de la bóveda de Obsidian sincronizada en varios dispositivos","max-width: 667px; width: 100%; height: auto;",[429,1424,1425,1426,1431],{},"Existen varias soluciones de sincronización para Obsidian, pero todas implican concesiones en cuanto al manejo de conflictos, el cifrado o la soberanía de los datos. ",[449,1427,1430],{"href":1428,"rel":1429},"https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch",[509],"Synch"," es una aplicación de código abierto que sincroniza su bóveda de Obsidian con cifrado de extremo a extremo y gestión automática de conflictos en un servidor autoalojado.",[429,1433,1434,1435,1440],{},"Aunque el enfoque local de Obsidian funciona perfectamente la mayor parte del tiempo, es posible que en algunas ocasiones necesitemos acceder a nuestra bóveda de forma remota a través de un navegador web. ",[449,1436,1439],{"href":1437,"rel":1438},"https:\u002F\u002Fgithub.com\u002FNystik-gh\u002Fignis",[509],"Ignis"," es una aplicación de código abierto que ejecuta Obsidian dentro de un navegador web en un formato muy cercano al nativo, lo que le permite leer y editar su bóveda desde cualquier lugar.",[429,1442,1443,1444,1446,1447,1449,1450,1453,1454,1458],{},"En esta guía, configuraremos ",[433,1445,1430],{}," e ",[433,1448,1439],{}," en un ",[433,1451,1452],{},"VPS"," (Servidor Privado Virtual), alojándolos de forma segura dentro de una red privada de ",[433,1455,1456],{},[449,1457,443],{"href":363}," en lugar de exponerlos al internet abierto.",[516,1460],{"src":1461,"alt":1462,"style":1463},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-sync-cloudflare-zero-trust-architecture.webp","Diagrama de arquitectura de la sincronización de Obsidian mediante Cloudflare Zero Trust","max-width: 671px; width: 100%; height: auto;",[1465,1466],"article-card",{"description":1467,"image":1468,"image-alt":1469,"label":1470,"min-read":1471,"title":1472,"to":363},"Aprenda a exponer y acceder de forma segura a su Hermes Agent a nivel global utilizando Cloudflare WARP y Zero Trust sin abrir puertos de entrada en el cortafuegos.","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","Exposición segura de Hermes Agent a una red privada mediante el túnel Cloudflare Zero Trust y WARP","Guía relacionada","8","Cómo exponer Hermes Agent de forma privada con Cloudflare WARP",[457,1474,1476],{"id":1475},"sincronización-segura-de-bóvedas-de-obsidian-con-synch","Sincronización segura de bóvedas de Obsidian con Synch",[429,1478,1479,1481],{},[433,1480,1430],{}," ofrece las siguientes características:",[484,1483,1484,1487,1490,1493],{},[468,1485,1486],{},"Sincroniza su bóveda tan pronto como se detectan cambios",[468,1488,1489],{},"Cifra los datos de la bóveda antes de subirlos",[468,1491,1492],{},"Permite la restauración desde el historial de versiones",[468,1494,1495],{},"Incluye gestión automática de conflictos",[429,1497,1498,1500,1501,1504,1505,1508,1509,1511],{},[433,1499,1430],{}," genera una ",[433,1502,1503],{},"clave de bóveda"," aleatoria de 32 bytes en su dispositivo, que se utiliza para cifrar los datos de su bóveda. Cuando crea una bóveda remota, elige una ",[433,1506,1507],{},"contraseña de bóveda","; esta contraseña se utiliza para proteger la ",[433,1510,1503],{}," para que la clave se pueda almacenar de forma segura en el servidor y desbloquearse en otros dispositivos.",[429,1513,1514],{},"Tenga en cuenta que la resolución de conflictos se gestiona en sus dispositivos cliente en lugar de en el servidor. Si dos dispositivos editan la misma nota simultáneamente, el servidor conserva la versión que llegue primero e identifica al otro dispositivo como desactualizado. El dispositivo desactualizado luego fusiona automáticamente la versión más nueva con sus cambios locales antes de subir la nota final fusionada.",[479,1516,1518],{"id":1517},"configurar-synch-en-su-vps","Configurar Synch en su VPS",[906,1520,1522],{"id":1521},"crear-un-nombre-de-dominio","Crear un nombre de dominio",[429,1524,1525,1526,1529],{},"Cree un registro A en Cloudflare y establezca su estado de proxy en ",[433,1527,1528],{},"Solo DNS"," (omitir la CDN de Cloudflare).",[516,1531],{"src":1532,"alt":1533,"style":1534},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fcloudflare-dns-a-record-synch-server.webp","Configurando un registro A de DNS para el servidor Synch en Cloudflare","max-width: 538px; width: 100%; height: auto;",[906,1536,1538],{"id":1537},"instalar-synch-docker-en-ubuntu","Instalar Synch Docker en Ubuntu",[1540,1541,1543],"h5",{"id":1542},"clonar-el-repositorio","Clonar el repositorio",[615,1545,1547],{"className":617,"code":1546,"language":619,"meta":424,"style":424},"git clone https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch.git       \n        \n# Navegar a la carpeta de la API\ncd synch\u002Fapps\u002Fapi\n        \n# Copiar el archivo de entorno de ejemplo:\ncp .env.example .env\n",[524,1548,1549,1563,1568,1573,1582,1586,1591],{"__ignoreMap":424},[623,1550,1551,1554,1557,1560],{"class":625,"line":626},[623,1552,1553],{"class":629},"git",[623,1555,1556],{"class":633}," clone",[623,1558,1559],{"class":633}," https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch.git",[623,1561,1562],{"class":772},"       \n",[623,1564,1565],{"class":625,"line":643},[623,1566,1567],{"class":772},"        \n",[623,1569,1570],{"class":625,"line":650},[623,1571,1572],{"class":653},"# Navegar a la carpeta de la API\n",[623,1574,1575,1579],{"class":625,"line":657},[623,1576,1578],{"class":1577},"s2Zo4","cd",[623,1580,1581],{"class":633}," synch\u002Fapps\u002Fapi\n",[623,1583,1584],{"class":625,"line":669},[623,1585,1567],{"class":772},[623,1587,1588],{"class":625,"line":674},[623,1589,1590],{"class":653},"# Copiar el archivo de entorno de ejemplo:\n",[623,1592,1593,1596,1599],{"class":625,"line":680},[623,1594,1595],{"class":629},"cp",[623,1597,1598],{"class":633}," .env.example",[623,1600,1601],{"class":633}," .env\n",[1540,1603,1605,1606],{"id":1604},"editar-valores-de-env","Editar valores de ",[524,1607,1608],{},".env",[484,1610,1611,1617,1635],{},[468,1612,1613,1616],{},[524,1614,1615],{},"PUBLIC_URL=synch.pafor.me",": Ingrese el nombre de dominio público de su servidor Synch (el nombre de dominio creado en el paso anterior).",[468,1618,1619,565,1622,1625,1626,1630,1631,1634],{},[524,1620,1621],{},"BETTER_AUTH_SECRET",[524,1623,1624],{},"SYNC_TOKEN_SECRET",": Genere claves seguras utilizando esta ",[449,1627,1629],{"href":1628},"\u002Fes\u002Ftools\u002Fsecret-key-hex","herramienta de clave secreta en línea"," o ejecutando ",[524,1632,1633],{},"openssl rand -hex 32"," dos veces en su terminal.",[468,1636,1637,1640],{},[524,1638,1639],{},"AUTH_ALLOWED_EMAILS",": Una lista separada por comas de las direcciones de correo electrónico autorizadas para registrarse y crear cuentas.",[1540,1642,1644],{"id":1643},"agregar-el-dominio-a-caddyfile","Agregar el dominio a Caddyfile",[429,1646,1647,1648,511],{},"Los detalles de cómo se integra el módulo DNS de Cloudflare con Caddy y se inicia dentro de un contenedor se pueden encontrar en nuestro ",[449,1649,1651],{"href":1650},"\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#_4-enable-https-with-caddy","artículo sobre cómo autoalojar Buzz",[1465,1653],{"description":1654,"image":1655,"image-alt":1656,"label":1657,"min-read":1658,"title":1659,"to":1650},"Aprenda a configurar Caddy para aprovisionar automáticamente certificados SSL\u002FTLS utilizando desafíos DNS de Cloudflare en contenedores 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","Configuración de Caddy con token de API DNS de Cloudflare para la generación automatizada de certificados SSL\u002FTLS en un espacio de trabajo autoalojado","Guía de autoalojamiento","12","Cómo autoalojar Buzz de Block: Espacio de trabajo para agentes IA",[429,1661,1662,1663,1666],{},"Incluya la directiva ",[524,1664,1665],{},"SYNCH_DOMAIN"," en su Caddyfile, apuntando al puerto 8787 (el puerto utilizado por el contenedor de Synch):",[615,1668,1672],{"className":1669,"code":1670,"language":1671,"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,1673,1674,1679,1687,1691,1695,1709,1714,1725],{"__ignoreMap":424},[623,1675,1676],{"class":625,"line":626},[623,1677,1678],{"class":695},"{\n",[623,1680,1681,1684],{"class":625,"line":643},[623,1682,1683],{"class":772},"  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN",[623,1685,1686],{"class":695},"}\n",[623,1688,1689],{"class":625,"line":650},[623,1690,1686],{"class":772},[623,1692,1693],{"class":625,"line":657},[623,1694,647],{"emptyLinePlaceholder":646},[623,1696,1697,1700,1703,1706],{"class":625,"line":669},[623,1698,1699],{"class":695},"{",[623,1701,1702],{"class":772},"$SYNCH_DOMAIN",[623,1704,1705],{"class":695},"}",[623,1707,1708],{"class":695}," {\n",[623,1710,1711],{"class":625,"line":674},[623,1712,1713],{"class":772},"  encode zstd gzip\n",[623,1715,1716,1719,1721],{"class":625,"line":680},[623,1717,1718],{"class":772},"  reverse_proxy host.docker.internal",[623,1720,948],{"class":695},[623,1722,1724],{"class":1723},"sbssI","8787\n",[623,1726,1727],{"class":625,"line":1022},[623,1728,1686],{"class":695},[429,1730,1731],{},"Inicie el contenedor:",[615,1733,1735],{"className":617,"code":1734,"language":619,"meta":424,"style":424},"docker compose up -d\n",[524,1736,1737],{"__ignoreMap":424},[623,1738,1739,1742,1745,1748],{"class":625,"line":626},[623,1740,1741],{"class":629},"docker",[623,1743,1744],{"class":633}," compose",[623,1746,1747],{"class":633}," up",[623,1749,1750],{"class":633}," -d\n",[429,1752,1753,1754,1757],{},"Ejecute el siguiente comando ",[524,1755,1756],{},"curl"," para verificar su disponibilidad:",[615,1759,1761],{"className":617,"code":1760,"language":619,"meta":424,"style":424},"curl https:\u002F\u002Fsynch.pafor.me\u002Fhealth\n",[524,1762,1763],{"__ignoreMap":424},[623,1764,1765,1767],{"class":625,"line":626},[623,1766,1756],{"class":629},[623,1768,1769],{"class":633}," https:\u002F\u002Fsynch.pafor.me\u002Fhealth\n",[479,1771,1773],{"id":1772},"conectar-obsidian-a-su-servidor-synch","Conectar Obsidian a su servidor Synch",[906,1775,1777],{"id":1776},"instalar-el-complemento-synch-en-obsidian","Instalar el complemento Synch en Obsidian",[429,1779,1780,1781,1784,1785,1788],{},"Abra la configuración de Obsidian, navegue a ",[433,1782,1783],{},"Community plugins"," (Complementos de la comunidad) y haga clic en el botón ",[433,1786,1787],{},"'Browse'"," (Examinar):",[516,1790],{"src":1791,"alt":1792,"style":1793},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-community-plugins-browse.webp","Explorando plugins de la comunidad en la configuración de Obsidian","max-width: 523px; width: 100%; height: auto;",[429,1795,1796,1797,964,1800],{},"Busque e instale ",[433,1798,1799],{},"'Synchrun'",[516,1801],{"src":1802,"alt":1803,"style":1534},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-install-synchrun-plugin.webp","Instalando el plugin Synchrun en Obsidian",[429,1805,1806,1807,1809,1810,1813,1814,1817,1818,1821,1822,1825],{},"Una vez instalado ",[433,1808,1799],{},", abra la configuración del complemento y habilite ",[433,1811,1812],{},"'Use a self-hosted server'"," (Usar un servidor autoalojado). Luego, ingrese ",[524,1815,1816],{},"https:\u002F\u002Fsynch.pafor.me"," en el campo ",[433,1819,1820],{},"'Server URL'"," (URL del servidor) y haga clic en ",[433,1823,1824],{},"'Save'"," (Guardar).",[516,1827],{"src":1828,"alt":1829,"style":1830},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-plugin-settings-self-hosted.webp","Configurando la URL del servidor autoalojado en Synchrun","max-width: 525px; width: 100%; height: auto;",[429,1832,1833,1834,1837,1838,1841,1842,1844],{},"Haga clic en el botón ",[433,1835,1836],{},"'Sign in on this device'"," (Iniciar sesión en este dispositivo) debajo de ",[433,1839,1840],{},"'Account'"," (Cuenta). A continuación, regístrese para obtener una cuenta utilizando la dirección de correo electrónico que especificó en su lista ",[524,1843,1639],{},"; luego será redirigido a la siguiente página de autorización:",[516,1846],{"src":1847,"alt":1848,"style":1849},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-account-authorization-page.webp","Página de autorización de cuenta para Synchrun","max-width: 494px; width: 100%; height: auto;",[429,1851,1833,1852,1855],{},[433,1853,1854],{},"'Allow Obsidian sign-in'"," (Permitir inicio de sesión en Obsidian):",[516,1857],{"src":1858,"alt":1859,"style":1860},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-allow-obsidian-signin.webp","Permitiendo el inicio de sesión de Obsidian para Synch","max-width: 498px; width: 100%; height: auto;",[429,1862,1833,1863,1866,1867,1870,1871],{},[433,1864,1865],{},"'Return to Obsidian'"," (Volver a Obsidian) y luego haga clic en ",[433,1868,1869],{},"'Create vault'"," (Crear bóveda):\n",[516,1872],{"src":1873,"alt":1874,"style":1875},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-create-remote-vault.webp","Creando una nueva bóveda remota en Synchrun","max-width: 496px; width: 100%; height: auto;",[429,1877,1878],{},"Ingrese un nombre y una contraseña segura para crear su bóveda remota.",[516,1880],{"src":1881,"alt":1882,"style":1883},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-vault-password-setup.webp","Estableciendo una contraseña segura para la bóveda remota de Obsidian","max-width: 500px; width: 100%; height: auto;",[429,1885,1886],{},"El proceso de sincronización comenzará de inmediato y puede llevar un tiempo según el tamaño de su bóveda. Una vez completado, se mostrará su uso total de almacenamiento.",[516,1888],{"src":1889,"alt":1890,"style":1891},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-sync-completed-storage.webp","Sincronización completada en Synchrun mostrando el almacenamiento total usado","max-width: 508px; width: 100%; height: auto;",[457,1893,1895],{"id":1894},"acceso-a-obsidian-basado-en-navegador-con-ignis","Acceso a Obsidian basado en navegador con Ignis",[429,1897,1898,1900],{},[433,1899,1439],{}," reemplaza las API Electron de Obsidian con API web, lo que permite que el código JavaScript de Obsidian se ejecute directamente en un navegador web estándar. Todos sus archivos markdown y archivos adjuntos se almacenan directamente en el sistema de archivos del servidor host.",[429,1902,1903,1904,565,1909,1914],{},"Sin embargo, existen algunas limitaciones en comparación con la aplicación de escritorio independiente de Obsidian. Ciertas características o complementos que requieren las API Electron o Node.js, que no tienen un equivalente directo en un entorno de navegador, no funcionarán. Consulte las guías de ",[449,1905,1908],{"href":1906,"rel":1907},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fusing\u002Flimitations\u002F",[509],"Limitaciones",[449,1910,1913],{"href":1911,"rel":1912},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fusing\u002Fplugin-compatibility\u002F",[509],"Compatibilidad de complementos"," de Ignis para obtener listados de compatibilidad detallados.",[479,1916,1918],{"id":1917},"configuración-de-ignis","Configuración de Ignis",[429,1920,1921,1922,1924,1925,1928,1929,1932],{},"Instalaremos ",[433,1923,1439],{}," en nuestro VPS usando Docker, montándolo en la carpeta local ",[524,1926,1927],{},".\u002Fvaults",". Este directorio de bóveda se sincronizará utilizando la ",[433,1930,1931],{},"CLI de Synch"," para extraer las actualizaciones de notas de la bóveda remota que configuramos anteriormente.",[429,1934,1935,1936,1938,1939,511],{},"Dado que ",[433,1937,1439],{}," no tiene autenticación integrada, debe protegerse detrás de una red privada de ",[433,1940,1941],{},[449,1942,443],{"href":363},[906,1944,1946],{"id":1945},"crear-registro-dns","Crear registro DNS",[516,1948],{"src":1949,"alt":1950,"style":1951},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fcloudflare-dns-a-record-ignis.webp","Configurando un registro A de DNS para el cliente web Ignis en Cloudflare","max-width: 552px; width: 100%; height: auto;",[906,1953,1644],{"id":1954},"agregar-el-dominio-a-caddyfile-1",[429,1956,1957,1958,1961,1962,948],{},"Agregue ",[524,1959,1960],{},"obsidian.pafor.me"," a su Caddyfile de la misma manera que ",[524,1963,1964],{},"synch.pafor.me",[615,1966,1968],{"className":1669,"code":1967,"language":1671,"meta":424,"style":424},"{$OBSIDIAN_DOMAIN} {\n  encode zstd gzip\n  reverse_proxy host.docker.internal:9898\n}\n",[524,1969,1970,1981,1985,1994],{"__ignoreMap":424},[623,1971,1972,1974,1977,1979],{"class":625,"line":626},[623,1973,1699],{"class":695},[623,1975,1976],{"class":772},"$OBSIDIAN_DOMAIN",[623,1978,1705],{"class":695},[623,1980,1708],{"class":695},[623,1982,1983],{"class":625,"line":643},[623,1984,1713],{"class":772},[623,1986,1987,1989,1991],{"class":625,"line":650},[623,1988,1718],{"class":772},[623,1990,948],{"class":695},[623,1992,1993],{"class":1723},"9898\n",[623,1995,1996],{"class":625,"line":657},[623,1997,1686],{"class":695},[906,1999,2001],{"id":2000},"iniciar-ignis-usando-docker","Iniciar Ignis usando Docker",[429,2003,2004,2005,2008],{},"Guarde el siguiente archivo docker compose yml como ",[524,2006,2007],{},"ignis-docker-compose.yml"," en el VPS:",[615,2010,2014],{"className":2011,"code":2012,"language":2013,"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 con su usuario host (ejecutar: 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,2015,2016,2023,2030,2040,2047,2060,2067,2072,2079,2086,2093,2100,2107,2114,2121,2132,2137,2145],{"__ignoreMap":424},[623,2017,2018,2021],{"class":625,"line":626},[623,2019,2020],{"class":960},"services",[623,2022,964],{"class":695},[623,2024,2025,2028],{"class":625,"line":643},[623,2026,2027],{"class":960},"  ignis",[623,2029,964],{"class":695},[623,2031,2032,2035,2037],{"class":625,"line":650},[623,2033,2034],{"class":960},"    image",[623,2036,948],{"class":695},[623,2038,2039],{"class":633}," nobbe\u002Fignis:latest\n",[623,2041,2042,2045],{"class":625,"line":657},[623,2043,2044],{"class":960},"    ports",[623,2046,964],{"class":695},[623,2048,2049,2052,2055,2058],{"class":625,"line":669},[623,2050,2051],{"class":695},"      -",[623,2053,2054],{"class":695}," \"",[623,2056,2057],{"class":633},"9898:8080",[623,2059,702],{"class":695},[623,2061,2062,2065],{"class":625,"line":674},[623,2063,2064],{"class":960},"    environment",[623,2066,964],{"class":695},[623,2068,2069],{"class":625,"line":680},[623,2070,2071],{"class":653},"      # coincidir con su usuario host (ejecutar: id)\n",[623,2073,2074,2076],{"class":625,"line":1022},[623,2075,2051],{"class":695},[623,2077,2078],{"class":633}," PUID=1000\n",[623,2080,2081,2083],{"class":625,"line":1033},[623,2082,2051],{"class":695},[623,2084,2085],{"class":633}," PGID=1000\n",[623,2087,2088,2090],{"class":625,"line":1129},[623,2089,2051],{"class":695},[623,2091,2092],{"class":633}," WS_ORIGINS=https:\u002F\u002Fobsidian.pafor.me\n",[623,2094,2095,2098],{"class":625,"line":1135},[623,2096,2097],{"class":960},"    volumes",[623,2099,964],{"class":695},[623,2101,2102,2104],{"class":625,"line":1141},[623,2103,2051],{"class":695},[623,2105,2106],{"class":633}," .\u002Fvaults:\u002Fvaults\n",[623,2108,2109,2111],{"class":625,"line":1146},[623,2110,2051],{"class":695},[623,2112,2113],{"class":633}," .\u002Fdata:\u002Fapp\u002Fdata\n",[623,2115,2116,2118],{"class":625,"line":1152},[623,2117,2051],{"class":695},[623,2119,2120],{"class":633}," obsidian-app:\u002Fapp\u002Fobsidian-app\n",[623,2122,2124,2127,2129],{"class":625,"line":2123},15,[623,2125,2126],{"class":960},"    restart",[623,2128,948],{"class":695},[623,2130,2131],{"class":633}," unless-stopped\n",[623,2133,2135],{"class":625,"line":2134},16,[623,2136,647],{"emptyLinePlaceholder":646},[623,2138,2140,2143],{"class":625,"line":2139},17,[623,2141,2142],{"class":960},"volumes",[623,2144,964],{"class":695},[623,2146,2148,2151],{"class":625,"line":2147},18,[623,2149,2150],{"class":960},"  obsidian-app",[623,2152,964],{"class":695},[484,2154,2155,2166,2181],{},[468,2156,2157,2158,2161,2162,2165],{},"Utilice el puerto ",[524,2159,2160],{},"9898"," en el host, ya que el ",[524,2163,2164],{},"8080"," suele ser utilizado por otros servicios.",[468,2167,2168,2169,2172,2173,2176,2177,2180],{},"Ejecute el comando ",[524,2170,2171],{},"id"," en su VPS para verificar el ",[524,2174,2175],{},"UID"," y el ",[524,2178,2179],{},"GID"," de su usuario host para garantizar los permisos correctos del sistema de archivos.",[468,2182,2183,2184,2187],{},"Establezca ",[524,2185,2186],{},"WS_ORIGINS"," para permitir únicamente conexiones WebSocket originadas desde su nombre de dominio específico.",[429,2189,2190,2191,948],{},"Inicie el contenedor de ",[433,2192,1439],{},[615,2194,2196],{"className":617,"code":2195,"language":619,"meta":424,"style":424},"docker compose -f ignis-docker-compose.yml up -d\n",[524,2197,2198],{"__ignoreMap":424},[623,2199,2200,2202,2204,2207,2210,2212],{"class":625,"line":626},[623,2201,1741],{"class":629},[623,2203,1744],{"class":633},[623,2205,2206],{"class":633}," -f",[623,2208,2209],{"class":633}," ignis-docker-compose.yml",[623,2211,1747],{"class":633},[623,2213,1750],{"class":633},[429,2215,2216,2217,2220,2221,2224],{},"Cuando navegue a su dominio en un navegador web, aparecerá el ",[433,2218,2219],{},"'Vault Manager'"," (Administrador de bóvedas). Estará vacío ya que aún no se ha configurado ninguna bóveda. Configuraremos la ",[433,2222,2223],{},"'Synch CLI'"," en la siguiente sección para sincronizar los contenidos de nuestra bóveda remota.",[516,2226],{"src":2227,"alt":2228,"style":2229},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-vault-manager-empty.webp","Interfaz vacía del Administrador de Bóvedas en el cliente web Ignis","max-width: 466px; width: 100%; height: auto;",[906,2231,2233],{"id":2232},"problema-con-el-cortafuegos","Problema con el cortafuegos",[429,2235,2236,2237,2240,2241,948],{},"Por defecto, Docker inserta automáticamente sus propias reglas DNAT y FORWARD, que enrutan el tráfico público directamente a los contenedores activos. Esto elude la cadena ",[524,2238,2239],{},"INPUT"," estándar de UFW\u002Fiptables de Ubuntu. Para bloquear el tráfico público externo y mantener los contenedores privados, agregue manualmente las siguientes reglas a ",[524,2242,2243],{},"iptables",[615,2245,2247],{"className":617,"code":2246,"language":619,"meta":424,"style":424},"# Bloquear todo el tráfico público externo\nsudo iptables -I DOCKER-USER -i ext_if -j DROP \n\n# Permitir tráfico únicamente desde la IP privada de su cliente Cloudflare WARP\nsudo iptables -I DOCKER-USER -i ext_if -s 100.96.0.10 -j ACCEPT\n",[524,2248,2249,2254,2281,2285,2290],{"__ignoreMap":424},[623,2250,2251],{"class":625,"line":626},[623,2252,2253],{"class":653},"# Bloquear todo el tráfico público externo\n",[623,2255,2256,2258,2261,2264,2267,2270,2273,2276,2279],{"class":625,"line":643},[623,2257,630],{"class":629},[623,2259,2260],{"class":633}," iptables",[623,2262,2263],{"class":633}," -I",[623,2265,2266],{"class":633}," DOCKER-USER",[623,2268,2269],{"class":633}," -i",[623,2271,2272],{"class":633}," ext_if",[623,2274,2275],{"class":633}," -j",[623,2277,2278],{"class":633}," DROP",[623,2280,773],{"class":772},[623,2282,2283],{"class":625,"line":650},[623,2284,647],{"emptyLinePlaceholder":646},[623,2286,2287],{"class":625,"line":657},[623,2288,2289],{"class":653},"# Permitir tráfico únicamente desde la IP privada de su cliente Cloudflare WARP\n",[623,2291,2292,2294,2296,2298,2300,2302,2304,2307,2310,2312],{"class":625,"line":669},[623,2293,630],{"class":629},[623,2295,2260],{"class":633},[623,2297,2263],{"class":633},[623,2299,2266],{"class":633},[623,2301,2269],{"class":633},[623,2303,2272],{"class":633},[623,2305,2306],{"class":633}," -s",[623,2308,2309],{"class":1723}," 100.96.0.10",[623,2311,2275],{"class":633},[623,2313,2314],{"class":633}," ACCEPT\n",[906,2316,2318],{"id":2317},"configuración-de-la-cli-de-synch","Configuración de la CLI de Synch",[429,2320,2321,2322,2324],{},"La ",[433,2323,1931],{}," es una herramienta sin cabecera (headless) que permite sincronizar un directorio de bóveda de Obsidian directamente en servidores remotos sin necesidad de instalar la aplicación de escritorio completa.",[429,2326,2327,2328,2330,2331,2334,2335,2338,2339,2342,2343,2346,2347,565,2350,2353,2354,2357,2358,2361],{},"Compile la ",[433,2329,1931],{}," desde su repositorio ",[524,2332,2333],{},"synch"," clonado. La compilación requiere ",[433,2336,2337],{},"Node.js >= 22.5"," (ya que la CLI depende de ",[524,2340,2341],{},"node:sqlite"," y de API de navegador globales como ",[524,2344,2345],{},"fetch",", ",[524,2348,2349],{},"WebSocket",[524,2351,2352],{},"WebCrypto",") y ",[433,2355,2356],{},"pnpm"," (dado que el repositorio está estructurado como un espacio de trabajo de pnpm que utiliza la versión ",[524,2359,2360],{},"10.33.0","):",[615,2363,2365],{"className":617,"code":2364,"language":619,"meta":424,"style":424},"# Verificar versiones\nnode --version   # debe ser >= 22.5\npnpm --version\n\n# En la raíz del repositorio\npnpm install\n\n# Compilar el paquete de la CLI\npnpm -C apps\u002Fcli build\n\n# Después de una compilación exitosa, tendrá `apps\u002Fcli\u002Fdist\u002Fsynch.js`. Hágalo ejecutable y colóquelo en su PATH\nchmod +x apps\u002Fcli\u002Fdist\u002Fsynch.js\nln -sf \"$PWD\u002Fapps\u002Fcli\u002Fdist\u002Fsynch.js\" \"$HOME\u002F.local\u002Fbin\u002Fsynch\"\n\n# Verificación\nsynch --help\n",[524,2366,2367,2372,2383,2390,2394,2399,2406,2410,2415,2428,2432,2437,2448,2477,2481,2486],{"__ignoreMap":424},[623,2368,2369],{"class":625,"line":626},[623,2370,2371],{"class":653},"# Verificar versiones\n",[623,2373,2374,2377,2380],{"class":625,"line":643},[623,2375,2376],{"class":629},"node",[623,2378,2379],{"class":633}," --version",[623,2381,2382],{"class":653},"   # debe ser >= 22.5\n",[623,2384,2385,2387],{"class":625,"line":650},[623,2386,2356],{"class":629},[623,2388,2389],{"class":633}," --version\n",[623,2391,2392],{"class":625,"line":657},[623,2393,647],{"emptyLinePlaceholder":646},[623,2395,2396],{"class":625,"line":669},[623,2397,2398],{"class":653},"# En la raíz del repositorio\n",[623,2400,2401,2403],{"class":625,"line":674},[623,2402,2356],{"class":629},[623,2404,2405],{"class":633}," install\n",[623,2407,2408],{"class":625,"line":680},[623,2409,647],{"emptyLinePlaceholder":646},[623,2411,2412],{"class":625,"line":1022},[623,2413,2414],{"class":653},"# Compilar el paquete de la CLI\n",[623,2416,2417,2419,2422,2425],{"class":625,"line":1033},[623,2418,2356],{"class":629},[623,2420,2421],{"class":633}," -C",[623,2423,2424],{"class":633}," apps\u002Fcli",[623,2426,2427],{"class":633}," build\n",[623,2429,2430],{"class":625,"line":1129},[623,2431,647],{"emptyLinePlaceholder":646},[623,2433,2434],{"class":625,"line":1135},[623,2435,2436],{"class":653},"# Después de una compilación exitosa, tendrá `apps\u002Fcli\u002Fdist\u002Fsynch.js`. Hágalo ejecutable y colóquelo en su PATH\n",[623,2438,2439,2442,2445],{"class":625,"line":1141},[623,2440,2441],{"class":629},"chmod",[623,2443,2444],{"class":633}," +x",[623,2446,2447],{"class":633}," apps\u002Fcli\u002Fdist\u002Fsynch.js\n",[623,2449,2450,2453,2456,2458,2461,2464,2467,2469,2472,2475],{"class":625,"line":1146},[623,2451,2452],{"class":629},"ln",[623,2454,2455],{"class":633}," -sf",[623,2457,2054],{"class":695},[623,2459,2460],{"class":772},"$PWD",[623,2462,2463],{"class":633},"\u002Fapps\u002Fcli\u002Fdist\u002Fsynch.js",[623,2465,2466],{"class":695},"\"",[623,2468,2054],{"class":695},[623,2470,2471],{"class":772},"$HOME",[623,2473,2474],{"class":633},"\u002F.local\u002Fbin\u002Fsynch",[623,2476,702],{"class":695},[623,2478,2479],{"class":625,"line":1152},[623,2480,647],{"emptyLinePlaceholder":646},[623,2482,2483],{"class":625,"line":2123},[623,2484,2485],{"class":653},"# Verificación\n",[623,2487,2488,2490],{"class":625,"line":2134},[623,2489,2333],{"class":629},[623,2491,2492],{"class":633}," --help\n",[429,2494,2495,2496,2499],{},"Dado que la CLI de Synch se está ejecutando en el mismo VPS que su bóveda remota de Synch, puede conectarse directamente al servidor de la API local. Si está configurando un servidor diferente, ejecute ",[524,2497,2498],{},"synch login --api-url \u003Curl-api-synch-remota>"," para definir su endpoint de API de destino.",[429,2501,2502],{},[516,2503],{"alt":2504,"src":2505},"Ejecutando synch login con una URL de API personalizada en el terminal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-login-api-url-terminal.webp",[429,2507,561,2508,2511],{},[524,2509,2510],{},"synch login"," en su terminal y recibirá una URL de autenticación:",[429,2513,2514],{},[516,2515],{"alt":2516,"src":2517},"Salida del terminal mostrando la URL de autenticación para Synch CLI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-login-auth-url-terminal.webp",[429,2519,2520],{},"Inicie sesión a través de la página web utilizando la misma dirección de correo electrónico registrada con el complemento Synchrun de su aplicación de escritorio Obsidian.",[429,2522,2523],{},[516,2524],{"alt":2525,"src":2526},"Inicio de sesión web exitoso para la autorización de Synch CLI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-web-login-success.webp",[429,2528,561,2529,2532],{},[524,2530,2531],{},"synch vault connect --vault ~\u002Fvaults\u002F\u003Cnombreboveda> --vault-id asadqe-7b29-4677-fsad-234asdafasd"," para vincular su directorio de bóveda local en el VPS a la bóveda remota.",[429,2534,2535,2536,2539,2540,2543,2544,2361],{},"El ID de la bóveda remota se puede encontrar dentro de la configuración del complemento ",[433,2537,2538],{},"Synchrun"," haciendo clic en ",[433,2541,2542],{},"'Manage remote vaults'"," (Administrar bóvedas remotas). Esto mostrará una página web con una lista de sus bóvedas remotas, cada una identificada por un GUID único (por ejemplo, ",[524,2545,2546],{},"123e4567-e89b-12d3-a456-426614174000",[429,2548,2549,2554],{},[516,2550],{"src":2551,"alt":2552,"style":2553},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-manage-remote-vaults.webp","Administrando bóvedas remotas en el plugin Synchrun","max-width: 582px; width: 100%; height: auto;",[516,2555],{"alt":2556,"src":2557},"Localizando el ID único de la bóveda remota en Synchrun","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-remote-vault-id.webp",[429,2559,2560,2561,2564],{},"Ingrese la contraseña de su bóveda cuando se le solicite para establecer el vínculo. Una vez conectado, ejecute ",[524,2562,2563],{},"synch sync --vault ~\u002Fvaults\u002F\u003Cnombre-boveda>"," para realizar su sincronización inicial. Esta primera ejecución puede llevar algún tiempo según el tamaño de su bóveda.",[429,2566,2567],{},[516,2568],{"alt":2569,"src":2570},"Progreso inicial de sincronización de la bóveda en Synch CLI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-cli-initial-sync-progress.webp",[429,2572,2573,2574,2577],{},"Para automatizar esto, configure y habilite un servicio systemd para ejecutar ",[524,2575,2576],{},"synch watch"," de forma continua, asegurando que los cambios se sincronicen instantáneamente al arrancar:",[615,2579,2581],{"className":617,"code":2580,"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,2582,2583,2599,2603,2608,2613,2618,2622,2626,2631,2636,2641,2646,2651,2656,2660,2665,2669,2673,2677,2683,2692],{"__ignoreMap":424},[623,2584,2585,2587,2590,2593,2596],{"class":625,"line":626},[623,2586,630],{"class":629},[623,2588,2589],{"class":633}," tee",[623,2591,2592],{"class":633}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fsynch-watch.service",[623,2594,2595],{"class":695}," \u003C\u003C",[623,2597,2598],{"class":695},"'EOF'\n",[623,2600,2601],{"class":625,"line":643},[623,2602,1087],{"class":633},[623,2604,2605],{"class":625,"line":650},[623,2606,2607],{"class":633},"Description=Synch vault watcher\n",[623,2609,2610],{"class":625,"line":657},[623,2611,2612],{"class":633},"After=network-online.target\n",[623,2614,2615],{"class":625,"line":669},[623,2616,2617],{"class":633},"Wants=network-online.target\n",[623,2619,2620],{"class":625,"line":674},[623,2621,647],{"emptyLinePlaceholder":646},[623,2623,2624],{"class":625,"line":680},[623,2625,1106],{"class":633},[623,2627,2628],{"class":625,"line":1022},[623,2629,2630],{"class":633},"Type=simple\n",[623,2632,2633],{"class":625,"line":1033},[623,2634,2635],{"class":633},"User=\u003Cusername>\n",[623,2637,2638],{"class":625,"line":1129},[623,2639,2640],{"class":633},"ExecStart=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin\u002Fsynch watch --vault \u002Fhome\u002F\u003Cusername>\u002Fvaults\u002F\u003Cvault-name>\n",[623,2642,2643],{"class":625,"line":1135},[623,2644,2645],{"class":633},"WorkingDirectory=\u002Fhome\u002F\u003Cusername>\u002Fvaults\n",[623,2647,2648],{"class":625,"line":1141},[623,2649,2650],{"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,2652,2653],{"class":625,"line":1146},[623,2654,2655],{"class":633},"Environment=\"HOME=\u002Fhome\u002F\u003Cusername>\"\n",[623,2657,2658],{"class":625,"line":1152},[623,2659,1126],{"class":633},[623,2661,2662],{"class":625,"line":2123},[623,2663,2664],{"class":633},"RestartSec=5\n",[623,2666,2667],{"class":625,"line":2134},[623,2668,647],{"emptyLinePlaceholder":646},[623,2670,2671],{"class":625,"line":2139},[623,2672,1149],{"class":633},[623,2674,2675],{"class":625,"line":2147},[623,2676,1155],{"class":633},[623,2678,2680],{"class":625,"line":2679},19,[623,2681,2682],{"class":695},"EOF\n",[623,2684,2686,2688,2690],{"class":625,"line":2685},20,[623,2687,630],{"class":629},[623,2689,634],{"class":633},[623,2691,1174],{"class":633},[623,2693,2695,2697,2699,2701,2704],{"class":625,"line":2694},21,[623,2696,630],{"class":629},[623,2698,634],{"class":633},[623,2700,769],{"class":633},[623,2702,2703],{"class":633}," --now",[623,2705,2706],{"class":633}," synch-watch.service\n",[429,2708,2709,2710,2712],{},"Abra ",[524,2711,1960],{}," en su navegador web. Encontrará que la interfaz de usuario y el diseño son prácticamente idénticos a los de la aplicación de escritorio:",[516,2714],{"src":2715,"alt":2716,"style":2717},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-web-interface-desktop-view.webp","Interfaz web de Ignis mostrando la bóveda de Obsidian en escritorio","max-width: 593px; width: 100%; height: auto;",[429,2719,2720],{},"Hacer clic en el icono de configuración revela que casi todas las configuraciones principales están intactas, aunque sus complementos de la comunidad deberán reinstalarse:",[516,2722],{"src":2723,"alt":2724,"style":2725},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-settings-community-plugins.webp","Configuración de plugins de la comunidad en la interfaz web de Ignis","max-width: 597px; width: 100%; height: auto;",[429,2727,2728],{},"Para probar la configuración, puede agregar una nueva nota a través de la interfaz web:",[516,2730],{"src":2731,"alt":2732,"style":2725},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-create-new-note-web.webp","Creando una nueva nota markdown mediante la interfaz web de Ignis",[429,2734,2735,2736,511],{},"La nota se sincroniza inmediatamente con su aplicación de escritorio Obsidian. Tenga en cuenta que las carpetas vacías no aparecen en ",[433,2737,1439],{},[516,2739],{"src":2740,"alt":2741,"style":2742},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-desktop-synced-note.webp","Nota recién creada sincronizada con éxito a la aplicación de escritorio de Obsidian","max-width: 502px; width: 100%; height: auto;",[429,2744,2745,2746,2748],{},"Visualización de ",[524,2747,1960],{}," en un navegador web móvil:",[429,2750,2751,2756],{},[516,2752],{"src":2753,"alt":2754,"style":2755},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-mobile-view-sidebar.webp","Navegación de la barra lateral del cliente web de Ignis en un dispositivo móvil","max-width: 269px; width: 100%; height: auto;",[516,2757],{"src":2758,"alt":2759,"style":2755},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-mobile-view-editor.webp","Editor de notas markdown del cliente web de Ignis en un dispositivo móvil",[429,2761,2762,2763,2765,2766,2769],{},"Cuando elimina una nota en ",[433,2764,1439],{},", se mueve de manera segura a la carpeta ",[524,2767,2768],{},"~\u002Fvaults\u002F\u003Cnombre-boveda>\u002F.trash"," de su bóveda local.",[457,2771,2773],{"id":2772},"reflexiones-finales-sobre-las-bóvedas-autoalojadas","Reflexiones finales sobre las bóvedas autoalojadas",[429,2775,2776,2777,1446,2779,2781,2782,2784],{},"Juntos, ",[433,2778,1430],{},[433,2780,1439],{}," hacen que su bóveda principal de Obsidian esté disponible sin problemas en todos sus dispositivos, alojada por completo en una infraestructura bajo su control directo. Ubicar estos servicios dentro de una red privada de ",[433,2783,443],{}," garantiza que sus notas personales estén completamente protegidas del internet público.",[429,2786,2787,2789],{},[433,2788,1439],{}," no está diseñado para reemplazar por completo la aplicación nativa de escritorio de Obsidian. En cambio, sirve como un cliente web ligero y temporal para acceder y editar su bóveda cuando está lejos de su computadora principal. Para la escritura diaria y la gestión exhaustiva de bóvedas, la aplicación nativa de Obsidian sigue siendo la opción más cómoda.",[429,2791,2792,2793,2796],{},"Debido a que Synch utiliza cifrado de extremo a extremo, la contraseña de su bóveda remota debe ser altamente segura para protegerla contra ataques de adivinación por fuerza bruta. Es fundamental que nunca pierda esta contraseña: el servidor no almacena la ",[433,2794,2795],{},"clave de la bóveda"," sin cifrar y, si la olvida, sus datos serán completamente irrecuperables. Además, asegúrese de que su instancia de VPS, junto con cualquier instantánea o copia de seguridad automatizada, esté debidamente protegida y mantenida.",[429,2798,2799],{},"Aunque el historial de versiones cifrado de Synch y las herramientas de recuperación de archivos eliminados cubren la mayoría de las pérdidas accidentales, se sigue recomendando realizar una copia de seguridad independiente y separada de su bóveda de Obsidian.",[457,2801,2803],{"id":2802},"referencias","Referencias",[484,2805,2806,2813,2820],{},[468,2807,2808],{},[449,2809,2812],{"href":2810,"rel":2811},"https:\u002F\u002Fsynch.run\u002Fself-hosting-docker\u002F",[509],"Despliegue de Synch con Docker Compose",[468,2814,2815],{},[449,2816,2819],{"href":2817,"rel":2818},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fserver\u002Fdeploy\u002F",[509],"Despliegue de Ignis con Docker",[468,2821,2822],{},[449,2823,2826],{"href":2824,"rel":2825},"https:\u002F\u002Fsynch.run\u002Fblog\u002Fencryption-and-decryption\u002F",[509],"¿Cómo funciona el cifrado de extremo a extremo en Synch?",[1334,2828,2829],{},"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":2831},[2832,2841,2850,2851],{"id":1475,"depth":643,"text":1476,"children":2833},[2834,2838],{"id":1517,"depth":650,"text":1518,"children":2835},[2836,2837],{"id":1521,"depth":657,"text":1522},{"id":1537,"depth":657,"text":1538},{"id":1772,"depth":650,"text":1773,"children":2839},[2840],{"id":1776,"depth":657,"text":1777},{"id":1894,"depth":643,"text":1895,"children":2842},[2843],{"id":1917,"depth":650,"text":1918,"children":2844},[2845,2846,2847,2848,2849],{"id":1945,"depth":657,"text":1946},{"id":1954,"depth":657,"text":1644},{"id":2000,"depth":657,"text":2001},{"id":2232,"depth":657,"text":2233},{"id":2317,"depth":657,"text":2318},{"id":2772,"depth":643,"text":2773},{"id":2802,"depth":643,"text":2803},[2853],"productivity","2026-09-15","Sincronice sus bóvedas de Obsidian entre dispositivos y acceda a sus notas en la web de forma segura con Synch e Ignis dentro de Cloudflare Zero Trust.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002FES-Sync-Obsidian-Across-Devices.webp","Sincronización segura de bóvedas de Obsidian entre múltiples dispositivos usando Synch e Ignis dentro de la red privada de Cloudflare Zero Trust",{"schemaOrg":2859,"robots":1397,"sitemap":2863},[2860,2862],{"@type":2861,"headline":1412,"description":2855,"image":2856},"Article",{"@type":1366,"name":1412,"description":2855,"image":2856},{"lastmod":2864},"2026-09-16",{"title":2866,"description":2855,"ogTitle":1412,"ogDescription":2855,"twitterTitle":1412,"twitterDescription":2855},"Sincronización segura de Obsidian con Synch e Ignis","es\u002Farticle\u002Fsync-obsidian-across-devices",[2869,2870,2871,1404],"Self-hosting","Obsidian","Sincronización",null,"1bLUKdbBHHyQSSGPS9lahZpDD7ywYDXxUteonIIvop8",{"id":2875,"title":2876,"author":424,"body":2877,"category":4062,"date":4065,"description":4066,"extension":1360,"image":4067,"imageAlt":4068,"isPublished":646,"meta":4069,"minRead":1135,"navigation":646,"path":75,"seo":4094,"stem":4096,"tags":4097,"updatedAt":2872,"__hash__":4100},"article\u002Fes\u002Farticle\u002Fbringing-buzz-to-deepseek-harness.md","Conectar DeepSeek Harness a Buzz: Pasarela de Nostr",{"type":426,"value":2878,"toc":4046},[2879,2885,2905,2911,2914,2918,2924,2965,2968,3026,3030,3037,3304,3307,3311,3315,3321,3325,3339,3343,3352,3398,3405,3409,3412,3444,3448,3453,3494,3502,3508,3517,3523,3554,3567,3571,3580,3609,3631,3679,3686,3691,3697,3704,3710,3715,3722,3736,3742,3751,3786,3789,3795,3802,3808,3812,3815,3966,3970,4004,4008,4014,4017,4043],[429,2880,2881],{},[516,2882],{"alt":2883,"src":2884},"Vista general de la pasarela de mensajes DeepSeek Harness conectada a un canal de Block Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-nostr-gateway-overview.webp",[429,2886,2887,2888,2895,2896,2900,2901,511],{},"El plugin de DeepSeek Harness (DSH), ",[433,2889,2890],{},[449,2891,2894],{"href":2892,"rel":2893},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway",[509],"dsh-message-gateway",", extiende el asistente de DeepSeek Harness a múltiples plataformas de mensajería como Discord, Telegram y WeChat. El repositorio del plugin fue bifurcado y ampliado para incorporar la plataforma ",[433,2897,2898],{},[449,2899,1659],{"href":383}," a la lista. El repositorio bifurcado está disponible en GitHub en ",[449,2902,2903],{"href":2903,"rel":2904},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway",[509],[1465,2906],{"description":2907,"image":2908,"image-alt":2909,"label":2910,"min-read":1658,"title":1659,"to":383},"Aprenda a autoalojar el relay de Buzz en un VPS con Ubuntu detrás de Cloudflare. Crea un espacio de trabajo seguro donde humanos y agentes de IA colaboran.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002FES-Self-Hosting-Buzz-As-The-Workspace-Where-AI-Agents-Become-Colleagues.webp","Tarjeta tecnológica premium de 16:9 con detalles en azul profundo y naranja que ilustra cómo autoalojar el relay de Buzz de Block en un VPS Ubuntu, con un panel de estilo glassmorphic limpio con tipografía centrada.","Guía de requisitos previos",[429,2912,2913],{},"El asistente de DSH se une a un relay de Buzz como miembro, recibe mensajes directos (DM) y mensajes de canal en los que se le @menciona, y responde mediante el mismo pipeline de agentes por chat que utiliza la interfaz web.",[457,2915,2917],{"id":2916},"arquitectura-del-plugin-dsh-message-gateway","Arquitectura del plugin dsh-message-gateway",[429,2919,2920,2921,2923],{},"La arquitectura del plugin ",[433,2922,2894],{}," se divide en dos componentes principales:",[484,2925,2926,2955],{},[468,2927,2928,2931,2932,2935,2936,2939,2940,2943,2944,2947,2948,2353,2951,2954],{},[433,2929,2930],{},"Host"," (Node): ",[524,2933,2934],{},"gateway-store"," (credenciales, ",[524,2937,2938],{},"~\u002F.dsh\u002Fgateway.json","), ",[524,2941,2942],{},"platforms.ts"," (definiciones de plataformas y pruebas de conectividad), ",[524,2945,2946],{},"routes.ts"," (endpoints ",[524,2949,2950],{},"\u002Fgateway\u002F*",[524,2952,2953],{},"bridge-manager.ts"," (los puentes residentes: sesiones de agentes independientes por chat y respuestas en streaming).",[468,2956,2957,2960,2961,2964],{},[433,2958,2959],{},"Cliente"," (navegador): la página \"",[433,2962,2963],{},"Message platforms","\" en la barra lateral, donde se guardan credenciales, se prueban conexiones y se monitoriza el estado del servicio.",[429,2966,2967],{},"Añadir una nueva plataforma implica los siguientes pasos:",[465,2969,2970,2987,3001],{},[468,2971,2972,2975,2976,2979,2980,2983,2984,511],{},[433,2973,2974],{},"Una clase de puente (bridge)",": métodos ",[524,2977,2978],{},"start\u002Fstop\u002Fstatus"," junto con un callback ",[524,2981,2982],{},"onText(text, frame)",", reflejando la estructura de ",[524,2985,2986],{},"wecom-bridge.ts",[468,2988,2989,2992,2993,2996,2997,3000],{},[433,2990,2991],{},"Conexión en bridge-manager",": reutilizar el pipeline por chat existente (",[524,2994,2995],{},"ensureAgentForKey"," + ",[524,2998,2999],{},"pendingMap",") e integrar el receptor de respuestas de la plataforma.",[468,3002,3003,3006,3007,565,3010,3013,3014,3017,3018,3021,3022,3025],{},[433,3004,3005],{},"Persistencia y rutas",": en ",[524,3008,3009],{},"\u002Fgateway\u002Fsave",[524,3011,3012],{},"\u002Fgateway\u002Fdelete",": ",[433,3015,3016],{},"guardar credenciales inicia el puente, eliminarlas lo detiene",", además de una bandera ",[524,3019,3020],{},"autoStartXxx"," para que ",[524,3023,3024],{},"dsh web"," reconecte automáticamente al arrancar.",[457,3027,3029],{"id":3028},"implementación-del-puente-buzz-protocolo-nostr-y-ciclo-de-vida-de-eventos","Implementación del puente Buzz: Protocolo Nostr y ciclo de vida de eventos",[429,3031,3032,3033,3036],{},"Se utilizó ",[433,3034,3035],{},"DeepSeek Harness"," para implementar el puente hacia Buzz. La implementación se ajusta a las siguientes especificaciones del protocolo Nostr:",[3038,3039,3040,3066],"table",{},[3041,3042,3043],"thead",{},[3044,3045,3046,3052],"tr",{},[3047,3048,3049],"th",{},[433,3050,3051],{},"Transporte",[3047,3053,3054,3055,3058,3059,3062,3063],{},"Un WebSocket autenticado mediante NIP-42; por defecto ",[524,3056,3057],{},"ws:\u002F\u002Flocalhost:3000","; ",[524,3060,3061],{},"http(s):\u002F\u002F"," se normaliza a ",[524,3064,3065],{},"ws(s):\u002F\u002F",[3067,3068,3069,3088,3116,3133,3156,3179,3204,3217,3230,3249,3266,3280],"tbody",{},[3044,3070,3071,3077],{},[3072,3073,3074],"td",{},[433,3075,3076],{},"Autenticación",[3072,3078,3079,3080,3083,3084,3087],{},"Evento AUTH ",[524,3081,3082],{},"kind 22242",", etiquetas ",[524,3085,3086],{},"[[\"relay\", url], [\"challenge\", challenge]]",", contenido vacío, firmado con la clave privada del agente",[3044,3089,3090,3095],{},[3072,3091,3092],{},[433,3093,3094],{},"Suscripciones",[3072,3096,3097,3013,3100,3103,3104,3107,3108,3111,3112,3115],{},[433,3098,3099],{},"Por canal",[524,3101,3102],{},"REQ {\"kinds\":[9], \"#h\":[\u003Cuuid>]}"," — un REQ por canal. Un REQ global ",[524,3105,3106],{},"kinds:[9]"," recibe EOSE pero nunca difunde eventos; el filtro ",[524,3109,3110],{},"#h"," con múltiples valores ",[433,3113,3114],{},"no"," funciona",[3044,3117,3118,3123],{},[3072,3119,3120],{},[433,3121,3122],{},"Descubrimiento",[3072,3124,3125,3128,3129,3132],{},[524,3126,3127],{},"REQ {kinds:[39000]}"," histórico para metadatos de canal (",[524,3130,3131],{},"type == \"dm\""," identifica canales de mensajes directos)",[3044,3134,3135,3140],{},[3072,3136,3137],{},[433,3138,3139],{},"Membresía",[3072,3141,3142,3145,3146,3148,3149,3152,3153],{},[524,3143,3144],{},"REQ {kinds:[44100,44101], \"#p\":[nuestra pubkey], since: now-60s}"," en tiempo real — 44100 = añadido, 44101 = eliminado, portando ",[524,3147,429],{},"+",[524,3150,3151],{},"h","; actualiza suscripciones ",[433,3154,3155],{},"sin reconectar",[3044,3157,3158,3163],{},[3072,3159,3160],{},[433,3161,3162],{},"Eventos de chat",[3072,3164,3165,3168,3169,3172,3173,2346,3176],{},[524,3166,3167],{},"kind 9"," con etiquetas ",[524,3170,3171],{},"[\"h\", canal]",", opcional ",[524,3174,3175],{},"[\"e\", replyTo]",[524,3177,3178],{},"[\"p\", mención]",[3044,3180,3181,3186],{},[3072,3182,3183],{},[433,3184,3185],{},"Ediciones in situ",[3072,3187,3188,3191,3192,2996,3194,3197,3198,3200,3201,3203],{},[524,3189,3190],{},"kind 40003"," con ",[524,3193,3151],{},[524,3195,3196],{},"e","→objetivo; sustituye contenido; límite de 64 KB en relay → mantener payloads ≤ 60.000 B; respuestas grandes se fragmentan — el fragmento 0 viaja en la edición y los sobrantes se añaden como mensajes ",[524,3199,3167],{}," en hilo (",[524,3202,3196],{},"→raíz)",[3044,3205,3206,3211],{},[3072,3207,3208],{},[433,3209,3210],{},"Tramas CLOSED",[3072,3212,3213,3216],{},[524,3214,3215],{},"auth-required"," antes de AUTH es normal durante el arranque (completar AUTH y reabrir subs); tras AUTH → reintento delimitado (3 intentos, backoff 0\u002F1\u002F2 s); reconectar reconstruye todo",[3044,3218,3219,3224],{},[3072,3220,3221],{},[433,3222,3223],{},"Límites de relay",[3072,3225,3226,3227],{},"≤ 2000 eventos históricos por suscripción, ordenados del más reciente al más antiguo incluso usando ",[524,3228,3229],{},"since",[3044,3231,3232,3237],{},[3072,3233,3234],{},[433,3235,3236],{},"Control de menciones",[3072,3238,3239,3240,3242,3243,3245,3246,3248],{},"Procesa ",[524,3241,3167],{}," entrantes solo cuando: (a) la etiqueta ",[524,3244,429],{}," incluye nuestra pubkey, (b) el canal es DM, o (c) la raíz ",[524,3247,3196],{}," es nuestro propio evento. Ignora nuestra pubkey (anti-bucle)",[3044,3250,3251,3256],{},[3072,3252,3253],{},[433,3254,3255],{},"Menciones salientes",[3072,3257,3258,3259,3262,3263,3265],{},"El texto saliente se publica tal cual — el relay no valida tokens ",[524,3260,3261],{},"@","; las etiquetas ",[524,3264,429],{}," incluyen al autor entrante más hasta 7 pubkeys adicionales mencionadas (máx. 8)",[3044,3267,3268,3273],{},[3072,3269,3270],{},[433,3271,3272],{},"Mensajes directos",[3072,3274,3275,3276,3279],{},"Canales de texto plano delimitados al relay (metadatos ",[524,3277,3278],{},"type: \"dm\"",") — sin cifrado NIP-04\u002F44 en este puente",[3044,3281,3282,3287],{},[3072,3283,3284],{},[433,3285,3286],{},"Archivos adjuntos",[3072,3288,3289,3290,3293,3294,2346,3297,2346,3300,3303],{},"NIP-92 ",[524,3291,3292],{},"imeta"," (",[524,3295,3296],{},"url",[524,3298,3299],{},"sha256",[524,3301,3302],{},"m",") → descarga http(s) estándar, verificación de SHA-256, límite de 20 MB, máx. 4 por mensaje; las imágenes salientes no están soportadas",[429,3305,3306],{},"El siguiente diagrama ilustra el proceso de inicialización (bootstrap) del puente hacia Buzz:",[516,3308],{"src":3309,"alt":3310},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-bootstrap.webp","Diagrama de secuencia que ilustra el proceso de arranque y autenticación NIP-42 del puente Buzz",[479,3312,3314],{"id":3313},"streaming-en-tiempo-real-mediante-ediciones-in-situ-de-nostr-kind-40003","Streaming en tiempo real mediante ediciones in situ de Nostr (Kind 40003)",[429,3316,3317,3318,948],{},"Nostr no cuenta con indicador nativo de escritura y sus eventos son de solo adición. Para ofrecer una experiencia interactiva y dinámica, el puente de Buzz ",[433,3319,3320],{},"simula streaming mediante ediciones in situ",[516,3322],{"src":3323,"alt":3324},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-reply.webp","Diagrama del flujo de edición in situ que simula respuestas en streaming con eventos kind 40003",[484,3326,3327],{},[468,3328,3329],{},[3330,3331,3332,3333,3335,3336,3338],"em",{},"El puente de Buzz publica primero un evento marcador de posición ",[524,3334,3167],{},", luego lo reescribe progresivamente con ediciones in situ ",[524,3337,3190],{}," limitadas por frecuencia, y finalmente asienta la edición definitiva cuando el agente concluye su respuesta. Este mecanismo reproduce el patrón utilizado en los puentes de Telegram y Discord.",[479,3340,3342],{"id":3341},"vinculación-de-espacios-de-trabajo-de-deepseek-harness-mediante-comandos-de-chat","Vinculación de espacios de trabajo de DeepSeek Harness mediante comandos de chat",[429,3344,3345,3346,3293,3349,2361],{},"La funcionalidad de \"Workspaces\" en la interfaz web de DSH está respaldada por el servicio ",[524,3347,3348],{},"workspaceRegistry",[524,3350,3351],{},"@deepseek-ai\u002Fdsh-workspace",[615,3353,3357],{"className":3354,"code":3355,"language":3356,"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,3358,3359],{"__ignoreMap":424},[623,3360,3361,3365,3368,3371,3375,3378,3380,3382,3384,3387,3390,3392,3395],{"class":625,"line":626},[623,3362,3364],{"class":3363},"spNyl","const",[623,3366,3367],{"class":772}," existing ",[623,3369,3370],{"class":695},"=",[623,3372,3374],{"class":3373},"s7zQu"," await",[623,3376,3377],{"class":772}," ctx",[623,3379,511],{"class":695},[623,3381,3348],{"class":772},[623,3383,511],{"class":695},[623,3385,3386],{"class":1577},"resolveByPath",[623,3388,3389],{"class":772},"(request",[623,3391,511],{"class":695},[623,3393,3394],{"class":772},"path)",[623,3396,3397],{"class":695},";\n",[429,3399,3400,3401,3404],{},"El puente de Buzz ofrece el comando de chat ",[524,3402,3403],{},"\u002Fworkspace \u003Ccarpeta>",", que registra un directorio existente en DSH. Cualquier nueva sesión creada a través de la pasarela se vincula a dicha carpeta y se refleja en la interfaz web.",[516,3406],{"src":3407,"alt":3408},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace.webp","Arquitectura del registro de espacios de trabajo de DeepSeek Harness desde comandos de chat",[429,3410,3411],{},"Tres consideraciones de diseño relevantes:",[484,3413,3414,3424,3434],{},[468,3415,3416,3419,3420,3423],{},[433,3417,3418],{},"Cambiar de carpeta implica una nueva sesión."," El valor ",[524,3421,3422],{},"cwd"," se fija en la cabecera de la sesión al crearse y no puede modificarse posteriormente.",[468,3425,3426,3429,3430,3433],{},[433,3427,3428],{},"La carpeta debe existir previamente."," El método ",[524,3431,3432],{},"create"," rechaza rutas inexistentes.",[468,3435,3436,3439,3440,3443],{},[433,3437,3438],{},"Comando sensible a la seguridad."," Cada sesión opera con una directiva de ",[433,3441,3442],{},"auto-aprobación",", otorgando acceso de lectura y ejecución en el directorio indicado.",[457,3445,3447],{"id":3446},"guía-paso-a-paso-de-instalación-y-configuración","Guía paso a paso de instalación y configuración",[465,3449,3450],{},[468,3451,3452],{},"Ejecute los siguientes comandos en la terminal:",[615,3454,3456],{"className":617,"code":3455,"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,3457,3458,3478,3482,3487],{"__ignoreMap":424},[623,3459,3460,3463,3466,3469,3472,3475],{"class":625,"line":626},[623,3461,3462],{"class":629},"dsh",[623,3464,3465],{"class":633}," plugin",[623,3467,3468],{"class":633}," --profile",[623,3470,3471],{"class":633}," web",[623,3473,3474],{"class":633}," add",[623,3476,3477],{"class":633}," https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway.git\n",[623,3479,3480],{"class":625,"line":643},[623,3481,647],{"emptyLinePlaceholder":646},[623,3483,3484],{"class":625,"line":650},[623,3485,3486],{"class":653},"# Start DSH web\n",[623,3488,3489,3491],{"class":625,"line":657},[623,3490,3462],{"class":629},[623,3492,3493],{"class":633}," web\n",[465,3495,3496],{"start":643},[468,3497,3498,3499,3501],{},"Una vez que la interfaz web de DSH se abra en el navegador, haga clic en el icono \"",[433,3500,2963],{},"\":",[429,3503,3504],{},[516,3505],{"alt":3506,"src":3507},"Barra lateral de la interfaz web de DeepSeek Harness destacando el menú Message platforms","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-web-ui-message-platforms-sidebar-icon.webp",[465,3509,3510],{"start":650},[468,3511,3512,3513,3516],{},"Seleccione \"",[433,3514,3515],{},"Buzz","\" en el panel lateral izquierdo:",[429,3518,3519],{},[516,3520],{"alt":3521,"src":3522},"Panel de configuración del puente Buzz en la pasarela de mensajes de DeepSeek Harness","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-message-gateway-buzz-config-panel.webp",[465,3524,3525,3536,3547],{"start":657},[468,3526,3527,3528,3531,3532,3535],{},"Haga clic en \"",[433,3529,3530],{},"Generate keypair","\" para generar un par de claves Nostr. Copie la clave pública ",[524,3533,3534],{},"npub"," en un lugar seguro para los pasos siguientes.",[468,3537,3538,3539,3542,3543,3546],{},"Ingrese la ",[433,3540,3541],{},"Relay URL"," y los ",[433,3544,3545],{},"Channels"," (la lista de UUIDs de canales permitidos para suscribirse).",[468,3548,3549,3550,3553],{},"Presione el botón \"",[433,3551,3552],{},"Save","\".",[429,3555,3556,3557,3560,3561,3564,3565,511],{},"Al guardar el formulario se almacenan las credenciales y ",[433,3558,3559],{},"se inicia el puente",". La clave privada ",[524,3562,3563],{},"nsec"," se trata como un secreto estricto y se guarda exclusivamente en ",[524,3566,2938],{},[479,3568,3570],{"id":3569},"registro-del-par-de-claves-del-agente-en-el-relay-nostr-de-buzz","Registro del par de claves del agente en el relay Nostr de Buzz",[429,3572,3573,3576,3577,3579],{},[433,3574,3575],{},"Añada el asistente de DSH al relay como miembro."," Utilice la clave ",[524,3578,3534],{}," generada previamente:",[615,3581,3583],{"className":617,"code":3582,"language":619,"meta":424,"style":424},"docker compose exec relay buzz-admin add-member --pubkey npub123123123\n",[524,3584,3585],{"__ignoreMap":424},[623,3586,3587,3589,3591,3594,3597,3600,3603,3606],{"class":625,"line":626},[623,3588,1741],{"class":629},[623,3590,1744],{"class":633},[623,3592,3593],{"class":633}," exec",[623,3595,3596],{"class":633}," relay",[623,3598,3599],{"class":633}," buzz-admin",[623,3601,3602],{"class":633}," add-member",[623,3604,3605],{"class":633}," --pubkey",[623,3607,3608],{"class":633}," npub123123123\n",[429,3610,3611,3614,3615,3618,3619,3622,3623,3626,3627,3630],{},[433,3612,3613],{},"Incorpore el asistente a un canal específico."," Registrar un miembro en el relay no lo hace visible ni localizable de forma automática en los canales. Para agregarlo mediante ",[524,3616,3617],{},"buzz-cli",", tenga en cuenta que el parámetro ",[524,3620,3621],{},"--pubkey"," debe especificarse en formato ",[433,3624,3625],{},"HEX",", no npub (el comando ",[524,3628,3629],{},"buzz-admin add-member"," imprime la clave HEX correspondiente):",[615,3632,3634],{"className":617,"code":3633,"language":619,"meta":424,"style":424},"buzz channels add-member --channel \u003CCHANNEL_UUID> --pubkey \u003CAGENT_HEX> --role member\n",[524,3635,3636],{"__ignoreMap":424},[623,3637,3638,3641,3644,3646,3649,3652,3655,3658,3661,3663,3665,3668,3671,3673,3676],{"class":625,"line":626},[623,3639,3640],{"class":629},"buzz",[623,3642,3643],{"class":633}," channels",[623,3645,3602],{"class":633},[623,3647,3648],{"class":633}," --channel",[623,3650,3651],{"class":695}," \u003C",[623,3653,3654],{"class":633},"CHANNEL_UUI",[623,3656,3657],{"class":772},"D",[623,3659,3660],{"class":695},">",[623,3662,3605],{"class":633},[623,3664,3651],{"class":695},[623,3666,3667],{"class":633},"AGENT_HE",[623,3669,3670],{"class":772},"X",[623,3672,3660],{"class":695},[623,3674,3675],{"class":633}," --role",[623,3677,3678],{"class":633}," member\n",[1465,3680],{"description":3681,"image":2908,"image-alt":2909,"label":3682,"min-read":3683,"title":3684,"to":3685},"Instrucciones paso a paso para instalar y configurar buzz-cli para gestionar canales de Nostr, claves de miembros y permisos de agentes de IA.","Guía de CLI","5","Cómo instalar y usar buzz-cli","\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#install-buzz-cli",[429,3687,3688,3689,948],{},"Actualice el perfil del asistente en el relay Nostr asignándole un nombre descriptivo con ",[524,3690,3617],{},[429,3692,3693],{},[516,3694],{"alt":3695,"src":3696},"Actualización del nombre del asistente DeepSeek Harness en el relay Nostr mediante buzz-cli","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-assistant-buzz-cli-profile-update.webp",[429,3698,3699,3700,3703],{},"Envíe un saludo ",[433,3701,3702],{},"Wave"," (el saludo inicial de Buzz para mensajes directos) al asistente. La respuesta confirma la conexión:",[429,3705,3706],{},[516,3707],{"alt":3708,"src":3709},"Prueba de conexión enviando un saludo Wave como DM al asistente DeepSeek Harness en Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-dm-wave-greeting-reply.webp",[429,3711,3712],{},[3330,3713,3714],{},"Envío de un Wave como mensaje directo al asistente de DSH: el puente está operativo.",[479,3716,3718,3719],{"id":3717},"habilitación-del-acceso-a-carpetas-locales-con-workspace","Habilitación del acceso a carpetas locales con ",[524,3720,3721],{},"\u002Fworkspace",[429,3723,3724,3725,3728,3729,3732,3733,3735],{},"Debido a que el parámetro ",[524,3726,3727],{},"allowWorkspace"," está deshabilitado (",[524,3730,3731],{},"false",") por defecto, el comando ",[524,3734,3721],{}," será rechazado inicialmente:",[429,3737,3738],{},[516,3739],{"alt":3740,"src":3741},"Notificación de error mostrando el rechazo del comando workspace con allowWorkspace desactivado","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace-command-rejected-error.webp",[429,3743,3744,3745,3748,3749,948],{},"Habilítelo en ",[524,3746,3747],{},"~\u002F.dsh\u002Fprofiles\u002Fweb\u002Fcordis.patch.yml"," y reinicie ",[524,3750,3024],{},[615,3752,3754],{"className":2011,"code":3753,"language":2013,"meta":424,"style":424},"- id: ui-message-gateway\n  config:\n    allowWorkspace: true\n",[524,3755,3756,3769,3776],{"__ignoreMap":424},[623,3757,3758,3761,3764,3766],{"class":625,"line":626},[623,3759,3760],{"class":695},"-",[623,3762,3763],{"class":960}," id",[623,3765,948],{"class":695},[623,3767,3768],{"class":633}," ui-message-gateway\n",[623,3770,3771,3774],{"class":625,"line":643},[623,3772,3773],{"class":960},"  config",[623,3775,964],{"class":695},[623,3777,3778,3781,3783],{"class":625,"line":650},[623,3779,3780],{"class":960},"    allowWorkspace",[623,3782,948],{"class":695},[623,3784,3785],{"class":984}," true\n",[429,3787,3788],{},"Tras reiniciar el servicio:",[429,3790,3791],{},[516,3792],{"alt":3793,"src":3794},"Mensaje de confirmación exitosa tras ejecutar el comando de registro de workspace en Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace-command-success-confirmation.webp",[429,3796,3797,3798,3801],{},"Nota importante: este comando asume que el directorio del workspace (",[524,3799,3800],{},"TechVoyage"," en las capturas) reside dentro del directorio predeterminado del usuario. De lo contrario, indique la ruta absoluta completa. Cualquier nueva sesión creada bajo este workspace desde Buzz aparecerá también en la interfaz web de DeepSeek Harness.",[429,3803,3804],{},[516,3805],{"alt":3806,"src":3807},"Interfaz web de DeepSeek Harness mostrando la sesión de workspace sincronizada desde Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-web-ui-synced-workspace-session.webp",[479,3809,3811],{"id":3810},"comandos-disponibles-en-buzz","Comandos disponibles en Buzz",[429,3813,3814],{},"Todas las funcionalidades y comandos disponibles en las demás plataformas están plenamente soportados en Buzz:",[3038,3816,3817,3827],{},[3041,3818,3819],{},[3044,3820,3821,3824],{},[3047,3822,3823],{},"Comando",[3047,3825,3826],{},"Descripción",[3067,3828,3829,3839,3849,3859,3869,3879,3889,3899,3909,3929,3949],{},[3044,3830,3831,3836],{},[3072,3832,3833],{},[524,3834,3835],{},"\u002Fworkspace \u003Cfolder>",[3072,3837,3838],{},"Registra una carpeta existente como espacio de trabajo del chat (requiere habilitación en configuración)",[3044,3840,3841,3846],{},[3072,3842,3843],{},[524,3844,3845],{},"\u002Fhelp",[3072,3847,3848],{},"Muestra la lista de comandos disponibles",[3044,3850,3851,3856],{},[3072,3852,3853],{},[524,3854,3855],{},"\u002Ftime",[3072,3857,3858],{},"Informa la hora actual del sistema",[3044,3860,3861,3866],{},[3072,3862,3863],{},[524,3864,3865],{},"\u002Fnew",[3072,3867,3868],{},"Inicia una nueva sesión de conversación limpia",[3044,3870,3871,3876],{},[3072,3872,3873],{},[524,3874,3875],{},"\u002Fclear",[3072,3877,3878],{},"Limpia el historial de la conversación actual",[3044,3880,3881,3886],{},[3072,3882,3883],{},[524,3884,3885],{},"\u002Fstatus",[3072,3887,3888],{},"Muestra el estado operativo del puente",[3044,3890,3891,3896],{},[3072,3892,3893],{},[524,3894,3895],{},"\u002Fstats",[3072,3897,3898],{},"Muestra estadísticas de chats activos y estado de puentes en todas las plataformas (incluido Buzz)",[3044,3900,3901,3906],{},[3072,3902,3903],{},[524,3904,3905],{},"\u002Fcommands",[3072,3907,3908],{},"Lista descriptiva de cada comando soportado",[3044,3910,3911,3916],{},[3072,3912,3913],{},[524,3914,3915],{},"@path\u002Fto\u002Ffile",[3072,3917,3918,3919,2346,3921,3924,3925,3928],{},"Funciona como las menciones web de archivos: el modelo lee el archivo relativo al workspace; ",[524,3920,3261],{},[524,3922,3923],{},"@prefijo"," o ",[524,3926,3927],{},"\u002Ffiles \u003Cprefijo>"," devuelven archivos y carpetas coincidentes",[3044,3930,3931,3936],{},[3072,3932,3933],{},[524,3934,3935],{},"\u002Fmodel",[3072,3937,3938,3941,3942,3944,3945,3948],{},[524,3939,3940],{},"[provider model effort]"," — validado frente al catálogo de modelos LLM activos; ",[524,3943,3935],{}," lista opciones disponibles y ",[524,3946,3947],{},"\u002Fmodel reset"," restablece valores predeterminados",[3044,3950,3951,3956],{},[3072,3952,3953],{},[524,3954,3955],{},"\u002Feffort",[3072,3957,3958,3961,3962,3965],{},[524,3959,3960],{},"\u003Cid>"," modifica exclusivamente el esfuerzo de razonamiento del modelo; ",[524,3963,3964],{},"\u002Feffort reset"," restablece el valor por defecto",[479,3967,3969],{"id":3968},"aspectos-clave-de-seguridad","Aspectos clave de seguridad",[484,3971,3972,3985,3995],{},[468,3973,3974,3975,3977,3978,3980,3981,3984],{},"La clave privada ",[433,3976,3563],{}," reside únicamente en ",[524,3979,2938],{}," (permisos 0600, escritura atómica) — nunca se expone en endpoints como ",[524,3982,3983],{},"\u002Fgateway\u002Flist"," ni en registros de depuración.",[468,3986,3987,3988,3293,3991,3994],{},"Cada evento entrante es ",[433,3989,3990],{},"verificado criptográficamente",[524,3992,3993],{},"verifyEvent","), deduplicado, filtrado contra mensajes propios y evaluado por reglas de mención antes de llegar al agente.",[468,3996,3997,3293,4000,4003],{},[433,3998,3999],{},"El registro de workspaces está restringido por configuración",[524,4001,4002],{},"allowWorkspace: false"," por defecto), garantizando control estricto sobre sesiones automáticas con acceso a archivos locales.",[457,4005,4007],{"id":4006},"conclusión-colaboración-descentralizada-con-agentes-ia-en-buzz","Conclusión: Colaboración descentralizada con agentes IA en Buzz",[429,4009,4010,4011,4013],{},"El desafío central al integrar Buzz en ",[524,4012,2894],{}," radicó en implementar fielmente el contrato de eventos del protocolo Nostr. La arquitectura base del plugin ya ofrecía una sólida gestión de sesiones independientes y enrutamiento de comandos, permitiendo una integración fluida en cuanto se resolvieron el manejo de eventos y el streaming interactivo.",[457,4015,4016],{"id":2802},"Referencias:",[484,4018,4019,4027,4035],{},[468,4020,4021,4026],{},[449,4022,4025],{"href":4023,"rel":4024},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway\u002Fblob\u002Fmain\u002Fdocs\u002Farchitecture.md",[509],"dsh-message-gateway architecture guide"," — guía de arquitectura, extensiones y notas de seguridad",[468,4028,4029,4034],{},[449,4030,4033],{"href":4031,"rel":4032},"https:\u002F\u002Fgithub.com\u002Fnbd-wtf\u002Fnostr-tools",[509],"nostr-tools"," — librería Nostr utilizada internamente",[468,4036,4037,4042],{},[449,4038,4041],{"href":4039,"rel":4040},"https:\u002F\u002Fgithub.com\u002Fbytedance\u002Fdeer-flow\u002Fblob\u002Fmain\u002Fbackend\u002Fdocs\u002FIM_CHANNEL_CONNECTIONS.md",[509],"deer-flow IM channel connections"," — patrones de referencia para conexiones de canales de mensajería instantánea",[1334,4044,4045],{},"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":4047},[4048,4049,4053,4060,4061],{"id":2916,"depth":643,"text":2917},{"id":3028,"depth":643,"text":3029,"children":4050},[4051,4052],{"id":3313,"depth":650,"text":3314},{"id":3341,"depth":650,"text":3342},{"id":3446,"depth":643,"text":3447,"children":4054},[4055,4056,4058,4059],{"id":3569,"depth":650,"text":3570},{"id":3717,"depth":650,"text":4057},"Habilitación del acceso a carpetas locales con \u002Fworkspace",{"id":3810,"depth":650,"text":3811},{"id":3968,"depth":650,"text":3969},{"id":4006,"depth":643,"text":4007},{"id":2802,"depth":643,"text":4016},[1356,4063,3640,4064],"collaboration","deepseek-harness","2026-09-30","Integre DeepSeek Harness con Block Buzz mediante un puente Nostr. Configure auth NIP-42, streaming de mensajes in situ y espacios de trabajo para agentes IA.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002FES-Bringing-Buzz-to-DeepSeek-Harness.webp","Una tarjeta tecnológica premium en formato 16:9 con detalles en índigo profundo y ámbar que ilustra cómo conectar DeepSeek Harness a Block Buzz mediante un puente Nostr, con un panel glassmorphic limpio y tipografía centrada.",{"schemaOrg":4070,"robots":1397,"sitemap":4093},[4071,4073],{"@type":4072,"headline":2876,"description":4066,"image":4067},"TechArticle",{"@type":1366,"name":2876,"description":4066,"image":4067,"step":4074},[4075,4078,4081,4084,4087,4090],{"@type":1369,"name":4076,"text":4077},"Fase 1: Instalar el plugin de pasarela","Instale el plugin dsh-message-gateway e inicie el servicio dsh web.",{"@type":1369,"name":4079,"text":4080},"Fase 2: Acceder a Message platforms","Abra la interfaz web de DSH y navegue a la configuración de Message platforms.",{"@type":1369,"name":4082,"text":4083},"Fase 3: Configurar el puente Buzz","Genere un par de claves Nostr, introduzca la URL del relay y los canales.",{"@type":1369,"name":4085,"text":4086},"Fase 4: Registrar el agente en el relay","Añada el asistente DSH al relay Nostr de Buzz mediante buzz-admin.",{"@type":1369,"name":4088,"text":4089},"Fase 5: Asignar el agente al canal","Incorpore la clave HEX del agente a los canales con buzz-cli.",{"@type":1369,"name":4091,"text":4092},"Fase 6: Habilitar acceso a workspaces","Configure allowWorkspace en cordis.patch.yml para permitir comandos de carpetas locales.",{"lastmod":4065},{"title":4095,"description":4066,"ogTitle":2876,"ogDescription":4066,"twitterTitle":2876,"twitterDescription":4066},"Plugin Buzz para DeepSeek Harness: Puente con Nostr","es\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",[3035,3515,4098,4099,2894],"Nostr","Agentes IA","5pRM58gceZkJcX7vzlrrURk_t3UoxsYGJRDW8QoBesI",[4102,4648,5278],{"id":4103,"title":1269,"author":424,"body":4104,"category":4632,"date":4634,"description":4635,"extension":1360,"image":4636,"imageAlt":4637,"isPublished":646,"meta":4638,"minRead":657,"navigation":646,"path":399,"seo":4642,"stem":4643,"tags":4644,"updatedAt":2872,"__hash__":4647},"article\u002Fes\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac.md",{"type":426,"value":4105,"toc":4625},[4106,4110,4113,4120,4124,4130,4133,4136,4140,4143,4150,4166,4472,4585,4587,4590,4592,4622],[457,4107,4109],{"id":4108},"qué-es-cloudflare-warp","¿Qué es Cloudflare WARP?",[429,4111,4112],{},"Cloudflare WARP es una aplicación de cliente que enruta el tráfico específico de los dispositivos a través de la red global de Cloudflare, en lugar de enviarlo directamente a la internet pública.",[429,4114,4115,4116,4119],{},"Crea un túnel cifrado basado en el protocolo ",[433,4117,4118],{},"WireGuard",", protegiendo el tráfico desde el dispositivo hasta el centro de datos de Cloudflare más cercano. A continuación, se pueden crear políticas en el panel de control de Cloudflare para filtrar, registrar, inspeccionar o enrutar este tráfico entrante.",[457,4121,4123],{"id":4122},"por-qué-necesitamos-cloudflare-warp","¿Por qué necesitamos Cloudflare WARP?",[429,4125,4126,4127,511],{},"Para exponer de forma segura recursos internos (como servicios web privados o aplicaciones SaaS) a empleados, contratistas y otras partes interesadas, el cliente Cloudflare WARP se utiliza como el punto de aplicación del lado del cliente para el ",[433,4128,4129],{},"Acceso a la Red de Confianza Cero (ZTNA)",[429,4131,4132],{},"El cliente de Cloudflare WARP se instala en la computadora portátil o el teléfono del usuario. Requiere que los usuarios se autentiquen y cumplan con comprobaciones específicas de estado de seguridad (como provenir de un rango de IP aprobado, usar un dominio de correo electrónico registrado o ejecutar un firewall activo) antes de conceder el acceso.",[429,4134,4135],{},"Al tunelizar el tráfico del dispositivo directamente a Cloudflare, la identidad del usuario, el dispositivo y las políticas se verifican antes de que las solicitudes lleguen a los recursos internos. Como resultado, los recursos internos nunca se exponen a la internet pública, y cada solicitud se registra y audita por completo.",[457,4137,4139],{"id":4138},"soporte-de-múltiples-perfiles-warp-en-un-dispositivo","Soporte de múltiples perfiles WARP en un dispositivo",[429,4141,4142],{},"Cuando los usuarios necesitan cambiar entre cuentas corporativas y personales de Cloudflare, o cuando los administradores de sistemas gestionan múltiples inquilinos (tenants), dar soporte a varios perfiles WARP en un solo dispositivo se vuelve fundamental.",[429,4144,4145,4146,4149],{},"Para lograr esto en macOS, podemos utilizar un archivo de perfil MDM ",[524,4147,4148],{},".mobileconfig"," para definir y registrar los diferentes entornos WARP.",[484,4151,4152,4163],{},[468,4153,4154,4162],{},[449,4155,4158,4159,4161],{"href":4156,"rel":4157},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fstatic\u002Fmdm\u002Fmultiple-orgs\u002FCloudflareWARP.mobileconfig",[509],"Download a sample ",[524,4160,4148],{}," file"," directamente desde Cloudflare.",[468,4164,4165],{},"A continuación se muestra un ejemplo de cómo se ve esta configuración:",[615,4167,4171],{"className":4168,"code":4169,"language":4170,"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,4172,4173,4178,4183,4188,4193,4198,4203,4208,4213,4218,4223,4228,4233,4238,4243,4248,4253,4258,4263,4268,4273,4278,4284,4290,4296,4302,4308,4314,4319,4324,4330,4335,4341,4346,4352,4358,4364,4370,4376,4382,4388,4394,4400,4406,4412,4418,4424,4430,4436,4442,4448,4454,4460,4466],{"__ignoreMap":424},[623,4174,4175],{"class":625,"line":626},[623,4176,4177],{},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",[623,4179,4180],{"class":625,"line":643},[623,4181,4182],{},"\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,4184,4185],{"class":625,"line":650},[623,4186,4187],{},"\u003Cplist version=\"1.0\">\n",[623,4189,4190],{"class":625,"line":657},[623,4191,4192],{},"\u003Cdict>\n",[623,4194,4195],{"class":625,"line":669},[623,4196,4197],{},"  \u003Ckey>PayloadContent\u003C\u002Fkey>\n",[623,4199,4200],{"class":625,"line":674},[623,4201,4202],{},"  \u003Carray>\n",[623,4204,4205],{"class":625,"line":680},[623,4206,4207],{},"    \u003Cdict>\n",[623,4209,4210],{"class":625,"line":1022},[623,4211,4212],{},"      \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[623,4214,4215],{"class":625,"line":1033},[623,4216,4217],{},"      \u003Cstring>Warp Configuration\u003C\u002Fstring>\n",[623,4219,4220],{"class":625,"line":1129},[623,4221,4222],{},"      \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[623,4224,4225],{"class":625,"line":1135},[623,4226,4227],{},"      \u003Cstring>com.cloudflare.warp.CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[623,4229,4230],{"class":625,"line":1141},[623,4231,4232],{},"      \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[623,4234,4235],{"class":625,"line":1146},[623,4236,4237],{},"      \u003Cstring>Cloudflare Ltd.\u003C\u002Fstring>\n",[623,4239,4240],{"class":625,"line":1152},[623,4241,4242],{},"      \u003Ckey>PayloadType\u003C\u002Fkey>\n",[623,4244,4245],{"class":625,"line":2123},[623,4246,4247],{},"      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n",[623,4249,4250],{"class":625,"line":2134},[623,4251,4252],{},"      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[623,4254,4255],{"class":625,"line":2139},[623,4256,4257],{},"      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[623,4259,4260],{"class":625,"line":2147},[623,4261,4262],{},"      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[623,4264,4265],{"class":625,"line":2679},[623,4266,4267],{},"      \u003Cinteger>1\u003C\u002Finteger>\n",[623,4269,4270],{"class":625,"line":2685},[623,4271,4272],{},"      \u003Ckey>configs\u003C\u002Fkey>\n",[623,4274,4275],{"class":625,"line":2694},[623,4276,4277],{},"      \u003Carray>\n",[623,4279,4281],{"class":625,"line":4280},22,[623,4282,4283],{},"        \u003Cdict>\n",[623,4285,4287],{"class":625,"line":4286},23,[623,4288,4289],{},"          \u003Ckey>organization\u003C\u002Fkey>\n",[623,4291,4293],{"class":625,"line":4292},24,[623,4294,4295],{},"          \u003Cstring>your-team-name-1\u003C\u002Fstring>\n",[623,4297,4299],{"class":625,"line":4298},25,[623,4300,4301],{},"          \u003Ckey>display_name\u003C\u002Fkey>\n",[623,4303,4305],{"class":625,"line":4304},26,[623,4306,4307],{},"          \u003Cstring>Team 1\u003C\u002Fstring>\n",[623,4309,4311],{"class":625,"line":4310},27,[623,4312,4313],{},"        \u003C\u002Fdict>\n",[623,4315,4317],{"class":625,"line":4316},28,[623,4318,4283],{},[623,4320,4322],{"class":625,"line":4321},29,[623,4323,4289],{},[623,4325,4327],{"class":625,"line":4326},30,[623,4328,4329],{},"          \u003Cstring>your-team-name-2\u003C\u002Fstring>\n",[623,4331,4333],{"class":625,"line":4332},31,[623,4334,4301],{},[623,4336,4338],{"class":625,"line":4337},32,[623,4339,4340],{},"          \u003Cstring>Team 2\u003C\u002Fstring>\n",[623,4342,4344],{"class":625,"line":4343},33,[623,4345,4313],{},[623,4347,4349],{"class":625,"line":4348},34,[623,4350,4351],{},"      \u003C\u002Farray>\n",[623,4353,4355],{"class":625,"line":4354},35,[623,4356,4357],{},"    \u003C\u002Fdict>\n",[623,4359,4361],{"class":625,"line":4360},36,[623,4362,4363],{},"  \u003C\u002Farray>\n",[623,4365,4367],{"class":625,"line":4366},37,[623,4368,4369],{},"  \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[623,4371,4373],{"class":625,"line":4372},38,[623,4374,4375],{},"  \u003Cstring>Cloudflare WARP\u003C\u002Fstring>\n",[623,4377,4379],{"class":625,"line":4378},39,[623,4380,4381],{},"  \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[623,4383,4385],{"class":625,"line":4384},40,[623,4386,4387],{},"  \u003Cstring>cloudflare_warp\u003C\u002Fstring>\n",[623,4389,4391],{"class":625,"line":4390},41,[623,4392,4393],{},"  \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[623,4395,4397],{"class":625,"line":4396},42,[623,4398,4399],{},"  \u003Cstring>Cloudflare, Ltd.\u003C\u002Fstring>\n",[623,4401,4403],{"class":625,"line":4402},43,[623,4404,4405],{},"  \u003Ckey>PayloadRemovalDisallowed\u003C\u002Fkey>\n",[623,4407,4409],{"class":625,"line":4408},44,[623,4410,4411],{},"  \u003Cfalse\u002F>\n",[623,4413,4415],{"class":625,"line":4414},45,[623,4416,4417],{},"  \u003Ckey>PayloadScope\u003C\u002Fkey>\n",[623,4419,4421],{"class":625,"line":4420},46,[623,4422,4423],{},"  \u003Cstring>System\u003C\u002Fstring>\n",[623,4425,4427],{"class":625,"line":4426},47,[623,4428,4429],{},"  \u003Ckey>PayloadType\u003C\u002Fkey>\n",[623,4431,4433],{"class":625,"line":4432},48,[623,4434,4435],{},"  \u003Cstring>Configuration\u003C\u002Fstring>\n",[623,4437,4439],{"class":625,"line":4438},49,[623,4440,4441],{},"  \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[623,4443,4445],{"class":625,"line":4444},50,[623,4446,4447],{},"  \u003Cstring>2B7763B8-64F6-41EB-AA5E-7761651B8131\u003C\u002Fstring>\n",[623,4449,4451],{"class":625,"line":4450},51,[623,4452,4453],{},"  \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[623,4455,4457],{"class":625,"line":4456},52,[623,4458,4459],{},"  \u003Cinteger>1\u003C\u002Finteger>\n",[623,4461,4463],{"class":625,"line":4462},53,[623,4464,4465],{},"\u003C\u002Fdict>\n",[623,4467,4469],{"class":625,"line":4468},54,[623,4470,4471],{},"\u003C\u002Fplist>\n",[484,4473,4474,4484,4496,4506,4512,4528,4541,4560,4576],{},[468,4475,4476,4477,565,4480,4483],{},"Reemplace ",[524,4478,4479],{},"your-team-name-1",[524,4481,4482],{},"your-team-name-2"," con sus respectivos nombres de equipo de Cloudflare Zero Trust.",[468,4485,2168,4486,4489,4490,4493,4494,511],{},[524,4487,4488],{},"uuidgen"," en su Terminal para generar UUID únicos y utilícelos para reemplazar los valores de marcador de posición ",[524,4491,4492],{},"PayloadUUID"," en el archivo ",[524,4495,4148],{},[468,4497,4498,4499,4502,4503,4505],{},"Asegúrese de que la cadena ",[524,4500,4501],{},"PayloadIdentifier"," también contenga el ",[524,4504,4492],{}," actualizado para mantener el perfil diferenciado.",[468,4507,4508,4509,4511],{},"Guarde su archivo ",[524,4510,4148],{}," editado.",[468,4513,2709,4514,4517,4518,4521,4522,4524],{},[433,4515,4516],{},"Ajustes del Sistema"," en su Mac, busque ",[433,4519,4520],{},"Perfiles"," y selecciónelo.",[611,4523],{},[516,4525],{"alt":4526,"src":4527},"Panel de Perfiles en la Configuración del Sistema de macOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-system-settings-profiles.webp",[468,4529,4530,4531,4534,4535,4537],{},"Haga clic en ",[433,4532,4533],{},"Instalar, ver o eliminar..."," para comenzar a agregar su nuevo perfil de configuración.",[611,4536],{},[516,4538],{"alt":4539,"src":4540},"Botón para instalar, ver o eliminar perfiles en macOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-profiles-view-remove.webp",[468,4542,4543,4544,4546,4547,4549,4550,4552,4556],{},"Haga clic en el icono ",[433,4545,3148],{}," (más) en la esquina inferior izquierda y seleccione su archivo ",[524,4548,4148],{}," guardado.",[611,4551],{},[516,4553],{"alt":4554,"src":4555},"Botón más (+) de perfiles de macOS para añadir un nuevo perfil","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-profiles-add-profile.webp",[516,4557],{"alt":4558,"src":4559},"Selección del archivo .mobileconfig en macOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-select-mobileconfig-file.webp",[468,4561,4562,4563,4565,4566,4569,4570,4572],{},"Seleccione ",[433,4564,439],{}," y haga clic en ",[433,4567,4568],{},"Instalar"," para aplicar la configuración.",[611,4571],{},[516,4573],{"alt":4574,"src":4575},"Confirmación de la instalación del perfil de Cloudflare WARP en macOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-install-cloudflare-warp-profile.webp",[468,4577,4578,4579,4581],{},"Reinicie su cliente Cloudflare WARP. Ahora debería ver el conmutador de múltiples perfiles en la interfaz de usuario:",[611,4580],{},[516,4582],{"alt":4583,"src":4584},"Cliente de Cloudflare WARP con selector de múltiples perfiles en macOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fcloudflare-warp-multi-profile-switcher.webp",[457,4586,1322],{"id":1321},[429,4588,4589],{},"El cliente Cloudflare WARP actúa como un punto de seguridad crítico en los dispositivos de los usuarios, lo que hace que el Acceso a la Red de Confianza Cero sea sólido y muy práctico. Mantener los recursos internos aislados de la internet pública garantiza que cada intento de conexión se autentique, evalúe y audite de forma segura.",[457,4591,2803],{"id":2802},[484,4593,4594,4601,4608,4615],{},[468,4595,4596],{},[449,4597,4600],{"href":4598,"rel":4599},"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,4602,4603],{},[449,4604,4607],{"href":4605,"rel":4606},"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,4609,4610],{},[449,4611,4614],{"href":4612,"rel":4613},"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,4616,4617],{},[449,4618,4621],{"href":4619,"rel":4620},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002F",[509],"Cloudflare One Client Documentation",[1334,4623,4624],{},"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":4626},[4627,4628,4629,4630,4631],{"id":4108,"depth":643,"text":4109},{"id":4122,"depth":643,"text":4123},{"id":4138,"depth":643,"text":4139},{"id":1321,"depth":643,"text":1322},{"id":2802,"depth":643,"text":2803},[1357,4633],"cloudflare","2026-07-04","Configura y cambia entre múltiples organizaciones de Cloudflare WARP en macOS utilizando un archivo .mobileconfig. Guía de MDM completa para administradores.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002FES-Switch-Between-Multiple-Cloudflare-WARP-Orgs-on-Mac.webp","Configurar múltiples perfiles Cloudflare WARP en macOS",{"schemaOrg":4639,"robots":1397,"sitemap":4641},[4640],{"@type":1366,"headline":1269,"description":4635},{"lastmod":4634},{"title":4637,"description":4635,"ogTitle":1269,"ogDescription":4635,"twitterTitle":1269,"twitterDescription":4635},"es\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",[4645,439,4646,1404],"macOS","MDM","aj2L0bjhdmy_g2uOsHqYyd8bbtwlwGp1vCLs4OV9J8U",{"id":4649,"title":451,"author":424,"body":4650,"category":5250,"date":5251,"description":5252,"extension":1360,"image":5253,"imageAlt":5254,"isPublished":646,"meta":5255,"minRead":674,"navigation":646,"path":375,"seo":5269,"stem":5271,"tags":5272,"updatedAt":2872,"__hash__":5277},"article\u002Fes\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server.md",{"type":426,"value":4651,"toc":5239},[4652,4656,4659,4662,4666,4670,4673,4686,4692,4695,4724,4731,4758,4764,4769,4783,4794,4802,4807,4823,4827,4830,4851,4857,4860,4871,4881,4892,4922,4926,4936,4945,4955,4968,4975,4985,4991,5019,5035,5039,5045,5057,5062,5095,5099,5102,5116,5122,5185,5187,5231,5233,5236],[457,4653,4655],{"id":4654},"por-qué-alojar-hermes-agent-en-un-vps-remoto","¿Por qué alojar Hermes Agent en un VPS remoto?",[429,4657,4658],{},"Dado que Hermes Agent es capaz de ejecutar tareas en segundo plano, programar tareas y responder a llamadas de webhooks, necesitamos una máquina que esté activa las 24 horas, los 7 días de la semana. Las computadoras locales pueden sufrir cortes de energía, desconectarse de Internet o agotar sus recursos de hardware. Un servidor remoto garantiza un 99% de disponibilidad y facilita la escalabilidad de los recursos de cómputo cuando sea necesario.",[429,4660,4661],{},"Existen varios proveedores de servidores privados virtuales (VPS) económicos en el mercado, como Hetzner, Hostinger y Contabo. Hemos estado utilizando Contabo por un tiempo y, hasta ahora, todo ha funcionado de maravilla.",[457,4663,4665],{"id":4664},"cómo-configurar-hermes-agent-en-un-vps-linux","Cómo configurar Hermes Agent en un VPS Linux",[479,4667,4669],{"id":4668},"paso-1-conectarse-al-vps","Paso 1: Conectarse al VPS",[429,4671,4672],{},"Abra la terminal y conéctese por SSH a su servidor remoto:",[615,4674,4676],{"className":617,"code":4675,"language":619,"meta":424,"style":424},"ssh root@your_server_ip\n",[524,4677,4678],{"__ignoreMap":424},[623,4679,4680,4683],{"class":625,"line":626},[623,4681,4682],{"class":629},"ssh",[623,4684,4685],{"class":633}," root@your_server_ip\n",[429,4687,4688],{},[516,4689],{"alt":4690,"src":4691},"Conexión SSH al servidor Linux VPS en la terminal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fvps-terminal-ssh-connection.webp",[429,4693,4694],{},"Asegúrese de que los paquetes de su servidor estén actualizados:",[615,4696,4698],{"className":617,"code":4697,"language":619,"meta":424,"style":424},"sudo apt update && sudo apt upgrade -y\n",[524,4699,4700],{"__ignoreMap":424},[623,4701,4702,4704,4707,4710,4713,4716,4718,4721],{"class":625,"line":626},[623,4703,630],{"class":629},[623,4705,4706],{"class":633}," apt",[623,4708,4709],{"class":633}," update",[623,4711,4712],{"class":695}," &&",[623,4714,4715],{"class":629}," sudo",[623,4717,4706],{"class":633},[623,4719,4720],{"class":633}," upgrade",[623,4722,4723],{"class":633}," -y\n",[429,4725,4726,4727,4730],{},"Añada un nuevo usuario, ",[524,4728,4729],{},"hermes",", o el nombre de usuario de su preferencia:",[615,4732,4734],{"className":617,"code":4733,"language":619,"meta":424,"style":424},"sudo adduser hermes \nsudo passwd hermes\n",[524,4735,4736,4748],{"__ignoreMap":424},[623,4737,4738,4740,4743,4746],{"class":625,"line":626},[623,4739,630],{"class":629},[623,4741,4742],{"class":633}," adduser",[623,4744,4745],{"class":633}," hermes",[623,4747,773],{"class":772},[623,4749,4750,4752,4755],{"class":625,"line":643},[623,4751,630],{"class":629},[623,4753,4754],{"class":633}," passwd",[623,4756,4757],{"class":633}," hermes\n",[429,4759,4760,4761,948],{},"Desactive el inicio de sesión con contraseña para el usuario ",[524,4762,4763],{},"root",[465,4765,4766],{},[468,4767,4768],{},"Abra el archivo de configuración de SSH:",[615,4770,4772],{"className":617,"code":4771,"language":619,"meta":424,"style":424},"sudo nano \u002Fetc\u002Fssh\u002Fsshd_config\n",[524,4773,4774],{"__ignoreMap":424},[623,4775,4776,4778,4780],{"class":625,"line":626},[623,4777,630],{"class":629},[623,4779,1063],{"class":633},[623,4781,4782],{"class":633}," \u002Fetc\u002Fssh\u002Fsshd_config\n",[465,4784,4785],{"start":643},[468,4786,4787,4788,4791,4792,948],{},"Busque la línea ",[524,4789,4790],{},"PermitRootLogin"," y cambie su valor a ",[524,4793,3114],{},[615,4795,4800],{"className":4796,"code":4798,"language":4799,"meta":424},[4797],"language-text","PermitRootLogin no\n","text",[524,4801,4798],{"__ignoreMap":424},[465,4803,4804],{"start":650},[468,4805,4806],{},"Guarde el archivo y reinicie el servicio SSH:",[615,4808,4810],{"className":617,"code":4809,"language":619,"meta":424,"style":424},"sudo systemctl restart ssh\n",[524,4811,4812],{"__ignoreMap":424},[623,4813,4814,4816,4818,4820],{"class":625,"line":626},[623,4815,630],{"class":629},[623,4817,634],{"class":633},[623,4819,637],{"class":633},[623,4821,4822],{"class":633}," ssh\n",[479,4824,4826],{"id":4825},"paso-2-instalar-hermes-agent","Paso 2: Instalar Hermes Agent",[429,4828,4829],{},"Ejecute el siguiente comando:",[615,4831,4833],{"className":617,"code":4832,"language":619,"meta":424,"style":424},"curl -fsSL https:\u002F\u002Fhermes-agent.nousresearch.com\u002Finstall.sh | bash\n",[524,4834,4835],{"__ignoreMap":424},[623,4836,4837,4839,4842,4845,4848],{"class":625,"line":626},[623,4838,1756],{"class":629},[623,4840,4841],{"class":633}," -fsSL",[623,4843,4844],{"class":633}," https:\u002F\u002Fhermes-agent.nousresearch.com\u002Finstall.sh",[623,4846,4847],{"class":695}," |",[623,4849,4850],{"class":629}," bash\n",[429,4852,4853],{},[516,4854],{"alt":4855,"src":4856},"Ejecución del script de instalación de Hermes Agent en la terminal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-agent-installation-terminal.webp",[429,4858,4859],{},"Una vez instalado, verifique la instalación escribiendo:",[615,4861,4863],{"className":617,"code":4862,"language":619,"meta":424,"style":424},"hermes --version\n",[524,4864,4865],{"__ignoreMap":424},[623,4866,4867,4869],{"class":625,"line":626},[623,4868,4729],{"class":629},[623,4870,2389],{"class":633},[429,4872,561,4873,4876,4877],{},[524,4874,4875],{},"hermes setup"," para configurar el agente Hermes:\n",[516,4878],{"alt":4879,"src":4880},"Ejecución del comando hermes setup en la terminal para iniciar la configuración","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-agent-setup-wizard.webp",[429,4882,4883,4884,4887,4888],{},"Seleccione un proveedor de LLM, comience con ",[524,4885,4886],{},"DeepSeek"," y añada otros más tarde.\n",[516,4889],{"alt":4890,"src":4891},"Selección de DeepSeek como proveedor de LLM en la configuración de Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-llm-provider-selection.webp",[429,4893,4894,4895,964,4897,4901,4905,4906,4909,4910,4905,4914,4917,4918],{},"Introduzca la clave de API de ",[524,4896,4886],{},[516,4898],{"alt":4899,"src":4900},"Introducción de la clave de API de DeepSeek en la terminal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-enter-api-key.webp",[516,4902],{"alt":4903,"src":4904},"Confirmación exitosa de la clave de API del proveedor de LLM","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-api-key-success.webp","\nSeleccione ",[524,4907,4908],{},"local machine"," para ejecutar Hermes Agent:\n",[516,4911],{"alt":4912,"src":4913},"Selección de local machine para el entorno de ejecución de Hermes Agent","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-select-local-machine.webp",[524,4915,4916],{},"Telegram"," en los canales de comunicación. Se pueden configurar otros canales más adelante.\n",[516,4919],{"alt":4920,"src":4921},"Selección de Telegram como canal de comunicación en la configuración de Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-select-telegram-channel.webp",[479,4923,4925],{"id":4924},"paso-3-integración-con-telegram","Paso 3: Integración con Telegram",[429,4927,4562,4928,4931,4932],{},[524,4929,4930],{},"[2]"," para usar el bot de Telegram.\n",[516,4933],{"alt":4934,"src":4935},"Selección de la opción para configurar la integración del bot de Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-bot-integration-option.webp",[429,4937,914,4938,4940,4941],{},[524,4939,4916],{}," y busque 'BotFather'.\n",[516,4942],{"alt":4943,"src":4944},"Búsqueda de BotFather en la aplicación Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-search-botfather.webp",[429,4946,4530,4947,4950,4951],{},[524,4948,4949],{},"Open"," para abrir 'BotFather'.\n",[516,4952],{"alt":4953,"src":4954},"Apertura de la interfaz de chat con BotFather en Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-open-botfather-chat.webp",[429,4956,4530,4957,4960,4961,527,4964],{},[524,4958,4959],{},"Create a New Bot"," (o use ",[524,4962,4963],{},"\u002Fnewbot",[516,4965],{"alt":4966,"src":4967},"Envío del comando newbot a BotFather para crear un nuevo bot de Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-create-new-bot.webp",[429,4969,4970,4971],{},"Complete los nombres y cree el bot.\n",[516,4972],{"alt":4973,"src":4974},"Configuración del nombre y nombre de usuario para el nuevo bot de Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-bot-details-configured.webp",[429,4976,4530,4977,4980,4981],{},[524,4978,4979],{},"Copy"," para copiar el token y péguelo de nuevo en la terminal.\n",[516,4982],{"alt":4983,"src":4984},"Copia del token de la API HTTP del bot de Telegram recién creado","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-copy-http-api-token.webp",[429,4986,4987,4988,4990],{},"Busque el ID de su cuenta de usuario de ",[524,4989,4916],{}," y agréguelo a la lista de usuarios permitidos ('Allowed user list'):",[484,4992,4993,5003,5016],{},[468,4994,4995,4996,4998,4999],{},"Busque '@raw_data_bot' en ",[524,4997,4916],{},".\n",[516,5000],{"alt":5001,"src":5002},"Búsqueda de raw data bot en Telegram para obtener el ID de usuario","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-search-raw-data-bot.webp",[468,5004,4530,5005,5008,5009,4998,5012],{},[524,5006,5007],{},"RawDataBot"," y luego en el botón Start (Iniciar). El ID de usuario se mostrará después de ",[524,5010,5011],{},"P.S. Your ID:",[516,5013],{"alt":5014,"src":5015},"Inicio de RawDataBot para ver el ID de la cuenta de usuario","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-raw-data-bot-user-id.webp",[468,5017,5018],{},"Copie el ID de usuario y péguelo en la terminal.",[429,5020,5021,5022,5026,5027,5031],{},"Dado que estamos ejecutando esto en la nube, queremos que el servicio se inicie automáticamente.\n",[516,5023],{"alt":5024,"src":5025},"Configuración de la opción de inicio automático para el servicio systemd de Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-autostart-service-option.webp","\nDeje todo con los valores predeterminados:\n",[516,5028],{"alt":5029,"src":5030},"Mantenimiento de las configuraciones de instalación por defecto en la terminal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-leave-defaults-1.webp",[516,5032],{"alt":5033,"src":5034},"Finalización de las opciones de configuración por defecto de Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-leave-defaults-2.webp",[457,5036,5038],{"id":5037},"prueba-de-hermes-agent-con-el-bot-de-telegram","Prueba de Hermes Agent con el bot de Telegram",[429,5040,5041,5042,948],{},"Ejecute el siguiente comando para iniciar ",[524,5043,5044],{},"hermes gateway",[615,5046,5048],{"className":617,"code":5047,"language":619,"meta":424,"style":424},"hermes gateway\n",[524,5049,5050],{"__ignoreMap":424},[623,5051,5052,5054],{"class":625,"line":626},[623,5053,4729],{"class":629},[623,5055,5056],{"class":633}," gateway\n",[429,5058,914,5059,5061],{},[524,5060,4916],{}," y añada el bot creado, '@tech_cloud_hermes_bot', a sus chats.",[484,5063,5064,5076,5086],{},[468,5065,5066,5067,5069,5070,4998,5072],{},"Escriba '\u002Fnew' en ",[524,5068,4916],{}," para iniciar una nueva sesión de ",[524,5071,435],{},[516,5073],{"alt":5074,"src":5075},"Escritura del comando new en Telegram para iniciar una nueva sesión de Hermes Agent","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-new-session.webp",[468,5077,5078,5079,5081,5082],{},"Escribir ",[524,5080,3905],{}," listará todos los comandos disponibles.\n",[516,5083],{"alt":5084,"src":5085},"Escritura de commands en Telegram para ver las instrucciones disponibles de Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-commands-list.webp",[468,5087,5078,5088,5090,5091],{},[524,5089,3935],{}," le mostrará una lista de los LLM disponibles.\n",[516,5092],{"alt":5093,"src":5094},"Escritura de model en Telegram para ver la lista de LLM activos","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-model-selection.webp",[457,5096,5098],{"id":5097},"ejecución-de-hermes-gateway-como-un-servicio-en-segundo-plano","Ejecución de Hermes Gateway como un servicio en segundo plano",[429,5100,5101],{},"Cree el archivo de servicio:",[615,5103,5105],{"className":1052,"code":5104,"language":1054,"meta":424,"style":424},"sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-gateway.service\n",[524,5106,5107],{"__ignoreMap":424},[623,5108,5109,5111,5113],{"class":625,"line":626},[623,5110,630],{"class":629},[623,5112,1063],{"class":633},[623,5114,5115],{"class":633}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-gateway.service\n",[429,5117,5118,5119,5121],{},"Pegue lo siguiente, reemplazando ",[524,5120,4729],{}," en '\u002Fhome\u002Fhermes' con su nombre de usuario preferido:",[615,5123,5125],{"className":1078,"code":5124,"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,5126,5127,5131,5136,5140,5144,5148,5152,5156,5161,5165,5169,5173,5177,5181],{"__ignoreMap":424},[623,5128,5129],{"class":625,"line":626},[623,5130,1087],{},[623,5132,5133],{"class":625,"line":643},[623,5134,5135],{},"Description=Hermes Gateway\n",[623,5137,5138],{"class":625,"line":650},[623,5139,1097],{},[623,5141,5142],{"class":625,"line":657},[623,5143,647],{"emptyLinePlaceholder":646},[623,5145,5146],{"class":625,"line":669},[623,5147,1106],{},[623,5149,5150],{"class":625,"line":674},[623,5151,1111],{},[623,5153,5154],{"class":625,"line":680},[623,5155,1116],{},[623,5157,5158],{"class":625,"line":1022},[623,5159,5160],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes gateway\n",[623,5162,5163],{"class":625,"line":1033},[623,5164,1126],{},[623,5166,5167],{"class":625,"line":1129},[623,5168,1132],{},[623,5170,5171],{"class":625,"line":1135},[623,5172,1138],{},[623,5174,5175],{"class":625,"line":1141},[623,5176,647],{"emptyLinePlaceholder":646},[623,5178,5179],{"class":625,"line":1146},[623,5180,1149],{},[623,5182,5183],{"class":625,"line":1152},[623,5184,1155],{},[429,5186,1160],{},[615,5188,5190],{"className":1052,"code":5189,"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,5191,5192,5200,5211,5221],{"__ignoreMap":424},[623,5193,5194,5196,5198],{"class":625,"line":626},[623,5195,630],{"class":629},[623,5197,634],{"class":633},[623,5199,1174],{"class":633},[623,5201,5202,5204,5206,5208],{"class":625,"line":643},[623,5203,630],{"class":629},[623,5205,634],{"class":633},[623,5207,769],{"class":633},[623,5209,5210],{"class":633}," hermes-gateway\n",[623,5212,5213,5215,5217,5219],{"class":625,"line":650},[623,5214,630],{"class":629},[623,5216,634],{"class":633},[623,5218,1194],{"class":633},[623,5220,5210],{"class":633},[623,5222,5223,5225,5227,5229],{"class":625,"line":657},[623,5224,630],{"class":629},[623,5226,634],{"class":633},[623,5228,664],{"class":633},[623,5230,5210],{"class":633},[457,5232,1322],{"id":1321},[429,5234,5235],{},"En este artículo, nos enfocamos en cómo configurar Hermes Agent y usar Telegram para comunicarnos con él. Tener Hermes Agent ejecutándose en un servidor remoto le proporciona un verdadero asistente digital que funciona las 24 horas del día, los 7 días de la semana.",[1334,5237,5238],{},"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":5240},[5241,5242,5247,5248,5249],{"id":4654,"depth":643,"text":4655},{"id":4664,"depth":643,"text":4665,"children":5243},[5244,5245,5246],{"id":4668,"depth":650,"text":4669},{"id":4825,"depth":650,"text":4826},{"id":4924,"depth":650,"text":4925},{"id":5037,"depth":643,"text":5038},{"id":5097,"depth":643,"text":5098},{"id":1321,"depth":643,"text":1322},[1356],"2026-06-19","Despliega Hermes Agent en un VPS remoto para garantizar un soporte 24\u002F7. Sigue nuestra guía paso a paso para integrarlo con tu propio bot de Telegram.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002FES-How%20to%20Setup%20Hermes%20on%20Remote%20Server.webp","Guía paso a paso para desplegar Hermes Agent en un servidor VPS con Linux y conectarlo con un bot de Telegram.",{"schemaOrg":5256,"robots":1397,"sitemap":5268},[5257],{"@type":1366,"name":451,"description":5252,"image":5253,"step":5258},[5259,5262,5265],{"@type":1369,"name":4669,"text":5260,"image":4691,"url":5261},"Abra la terminal y conéctese por SSH a su servidor remoto: Asegúrese de que los paquetes de su servidor estén actualizados: Añada un nuevo usuario,...","#paso-1-conectarse-al-vps",{"@type":1369,"name":4826,"text":5263,"image":4856,"url":5264},"Ejecute el siguiente comando: Una vez instalado, verifique la instalación escribiendo: Ejecute `hermes setup` para configurar el agente Hermes: Sel...","#paso-2-instalar-hermes-agent",{"@type":1369,"name":4925,"text":5266,"image":4935,"url":5267},"Seleccione `[2]` para usar el bot de Telegram. Diríjase a `Telegram` y busque 'BotFather'. Haga clic en `Open` para abrir 'BotFather'. Haga clic en...","#paso-3-integracin-con-telegram",{"lastmod":5251},{"title":5270,"description":5252,"ogTitle":451,"ogDescription":5252,"twitterTitle":451,"twitterDescription":5252},"Instalación de Hermes Agent en VPS: Guía de Telegram Bot","es\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",[435,5273,5274,5275,5276],"VPS Setup","Telegram Bot","Linux VPS","AI Agent","6D3TvpHyVIeT1fnENGL0sutqYqvCavDEqdOo10qI2fY",{"id":2875,"title":2876,"author":424,"body":2877,"category":4062,"date":4065,"description":4066,"extension":1360,"image":4067,"imageAlt":4068,"isPublished":646,"meta":4069,"minRead":1135,"navigation":646,"path":355,"seo":4094,"stem":4096,"tags":4097,"updatedAt":2872,"__hash__":4100},1792489987932]