[{"data":1,"prerenderedAt":6396},["ShallowReactive",2],{"published-article-paths":3,"search-navigation":348,"\u002Fes\u002Farticle\u002Fsync-obsidian-across-devices":421,"\u002Fes\u002Farticle\u002Fsync-obsidian-across-devices-surround":1947},[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":1921,"date":1923,"description":1924,"extension":1925,"image":1926,"imageAlt":1927,"isPublished":739,"meta":1928,"minRead":1180,"navigation":739,"path":99,"seo":1937,"stem":1939,"tags":1940,"updatedAt":1945,"__hash__":1946},"article\u002Fes\u002Farticle\u002Fsync-obsidian-across-devices.md","Cómo sincronizar bóvedas de Obsidian entre dispositivos","",{"type":426,"value":427,"toc":1899},"minimark",[428,432,438,449,458,478,483,492,497,502,518,534,537,542,547,554,559,563,568,643,650,683,687,695,703,710,777,780,799,806,818,822,826,837,842,853,875,880,894,899,905,910,925,928,933,936,941,945,950,964,968,982,992,996,1001,1004,1014,1047,1051,1058,1210,1245,1250,1271,1282,1287,1291,1301,1374,1378,1384,1421,1552,1559,1565,1572,1578,1581,1587,1593,1607,1618,1625,1631,1638,1775,1781,1786,1789,1794,1797,1801,1806,1811,1817,1828,1838,1842,1853,1858,1865,1868,1872,1895],[429,430,431],"p",{},"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.",[433,434],"img",{"src":435,"alt":436,"style":437},"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,439,440,441,448],{},"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. ",[442,443,447],"a",{"href":444,"rel":445},"https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch",[446],"nofollow","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,450,451,452,457],{},"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. ",[442,453,456],{"href":454,"rel":455},"https:\u002F\u002Fgithub.com\u002FNystik-gh\u002Fignis",[446],"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,459,460,461,464,465,467,468,471,472,477],{},"En esta guía, configuraremos ",[462,463,447],"strong",{}," e ",[462,466,456],{}," en un ",[462,469,470],{},"VPS"," (Servidor Privado Virtual), alojándolos de forma segura dentro de una red privada de ",[462,473,474],{},[442,475,476],{"href":363},"Cloudflare Zero Trust"," en lugar de exponerlos al internet abierto.",[433,479],{"src":480,"alt":481,"style":482},"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;",[484,485],"article-card",{"description":486,"image":487,"image-alt":488,"label":489,"min-read":490,"title":491,"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",[493,494,496],"h2",{"id":495},"sincronización-segura-de-bóvedas-de-obsidian-con-synch","Sincronización segura de bóvedas de Obsidian con Synch",[429,498,499,501],{},[462,500,447],{}," ofrece las siguientes características:",[503,504,505,509,512,515],"ul",{},[506,507,508],"li",{},"Sincroniza su bóveda tan pronto como se detectan cambios",[506,510,511],{},"Cifra los datos de la bóveda antes de subirlos",[506,513,514],{},"Permite la restauración desde el historial de versiones",[506,516,517],{},"Incluye gestión automática de conflictos",[429,519,520,522,523,526,527,530,531,533],{},[462,521,447],{}," genera una ",[462,524,525],{},"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 ",[462,528,529],{},"contraseña de bóveda","; esta contraseña se utiliza para proteger la ",[462,532,525],{}," para que la clave se pueda almacenar de forma segura en el servidor y desbloquearse en otros dispositivos.",[429,535,536],{},"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.",[538,539,541],"h3",{"id":540},"configurar-synch-en-su-vps","Configurar Synch en su VPS",[543,544,546],"h4",{"id":545},"crear-un-nombre-de-dominio","Crear un nombre de dominio",[429,548,549,550,553],{},"Cree un registro A en Cloudflare y establezca su estado de proxy en ",[462,551,552],{},"Solo DNS"," (omitir la CDN de Cloudflare).",[433,555],{"src":556,"alt":557,"style":558},"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;",[543,560,562],{"id":561},"instalar-synch-docker-en-ubuntu","Instalar Synch Docker en Ubuntu",[564,565,567],"h5",{"id":566},"clonar-el-repositorio","Clonar el repositorio",[569,570,574],"pre",{"className":571,"code":572,"language":573,"meta":424,"style":424},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","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","bash",[575,576,577,597,603,610,620,625,631],"code",{"__ignoreMap":424},[578,579,582,586,590,593],"span",{"class":580,"line":581},"line",1,[578,583,585],{"class":584},"sBMFI","git",[578,587,589],{"class":588},"sfazB"," clone",[578,591,592],{"class":588}," https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch.git",[578,594,596],{"class":595},"sTEyZ","       \n",[578,598,600],{"class":580,"line":599},2,[578,601,602],{"class":595},"        \n",[578,604,606],{"class":580,"line":605},3,[578,607,609],{"class":608},"sHwdD","# Navegar a la carpeta de la API\n",[578,611,613,617],{"class":580,"line":612},4,[578,614,616],{"class":615},"s2Zo4","cd",[578,618,619],{"class":588}," synch\u002Fapps\u002Fapi\n",[578,621,623],{"class":580,"line":622},5,[578,624,602],{"class":595},[578,626,628],{"class":580,"line":627},6,[578,629,630],{"class":608},"# Copiar el archivo de entorno de ejemplo:\n",[578,632,634,637,640],{"class":580,"line":633},7,[578,635,636],{"class":584},"cp",[578,638,639],{"class":588}," .env.example",[578,641,642],{"class":588}," .env\n",[564,644,646,647],{"id":645},"editar-valores-de-env","Editar valores de ",[575,648,649],{},".env",[503,651,652,658,677],{},[506,653,654,657],{},[575,655,656],{},"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).",[506,659,660,663,664,667,668,672,673,676],{},[575,661,662],{},"BETTER_AUTH_SECRET"," y ",[575,665,666],{},"SYNC_TOKEN_SECRET",": Genere claves seguras utilizando esta ",[442,669,671],{"href":670},"\u002Fes\u002Ftools\u002Fsecret-key-hex","herramienta de clave secreta en línea"," o ejecutando ",[575,674,675],{},"openssl rand -hex 32"," dos veces en su terminal.",[506,678,679,682],{},[575,680,681],{},"AUTH_ALLOWED_EMAILS",": Una lista separada por comas de las direcciones de correo electrónico autorizadas para registrarse y crear cuentas.",[564,684,686],{"id":685},"agregar-el-dominio-a-caddyfile","Agregar el dominio a Caddyfile",[429,688,689,690,694],{},"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 ",[442,691,693],{"href":692},"\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#_4-enable-https-with-caddy","artículo sobre cómo autoalojar Buzz",".",[484,696],{"description":697,"image":698,"image-alt":699,"label":700,"min-read":701,"title":702,"to":692},"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,704,705,706,709],{},"Incluya la directiva ",[575,707,708],{},"SYNCH_DOMAIN"," en su Caddyfile, apuntando al puerto 8787 (el puerto utilizado por el contenedor de Synch):",[569,711,715],{"className":712,"code":713,"language":714,"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",[575,716,717,723,731,735,741,755,760,772],{"__ignoreMap":424},[578,718,719],{"class":580,"line":581},[578,720,722],{"class":721},"sMK4o","{\n",[578,724,725,728],{"class":580,"line":599},[578,726,727],{"class":595},"  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN",[578,729,730],{"class":721},"}\n",[578,732,733],{"class":580,"line":605},[578,734,730],{"class":595},[578,736,737],{"class":580,"line":612},[578,738,740],{"emptyLinePlaceholder":739},true,"\n",[578,742,743,746,749,752],{"class":580,"line":622},[578,744,745],{"class":721},"{",[578,747,748],{"class":595},"$SYNCH_DOMAIN",[578,750,751],{"class":721},"}",[578,753,754],{"class":721}," {\n",[578,756,757],{"class":580,"line":627},[578,758,759],{"class":595},"  encode zstd gzip\n",[578,761,762,765,768],{"class":580,"line":633},[578,763,764],{"class":595},"  reverse_proxy host.docker.internal",[578,766,767],{"class":721},":",[578,769,771],{"class":770},"sbssI","8787\n",[578,773,775],{"class":580,"line":774},8,[578,776,730],{"class":721},[429,778,779],{},"Inicie el contenedor:",[569,781,783],{"className":571,"code":782,"language":573,"meta":424,"style":424},"docker compose up -d\n",[575,784,785],{"__ignoreMap":424},[578,786,787,790,793,796],{"class":580,"line":581},[578,788,789],{"class":584},"docker",[578,791,792],{"class":588}," compose",[578,794,795],{"class":588}," up",[578,797,798],{"class":588}," -d\n",[429,800,801,802,805],{},"Ejecute el siguiente comando ",[575,803,804],{},"curl"," para verificar su disponibilidad:",[569,807,809],{"className":571,"code":808,"language":573,"meta":424,"style":424},"curl https:\u002F\u002Fsynch.pafor.me\u002Fhealth\n",[575,810,811],{"__ignoreMap":424},[578,812,813,815],{"class":580,"line":581},[578,814,804],{"class":584},[578,816,817],{"class":588}," https:\u002F\u002Fsynch.pafor.me\u002Fhealth\n",[538,819,821],{"id":820},"conectar-obsidian-a-su-servidor-synch","Conectar Obsidian a su servidor Synch",[543,823,825],{"id":824},"instalar-el-complemento-synch-en-obsidian","Instalar el complemento Synch en Obsidian",[429,827,828,829,832,833,836],{},"Abra la configuración de Obsidian, navegue a ",[462,830,831],{},"Community plugins"," (Complementos de la comunidad) y haga clic en el botón ",[462,834,835],{},"'Browse'"," (Examinar):",[433,838],{"src":839,"alt":840,"style":841},"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,843,844,845,848,849],{},"Busque e instale ",[462,846,847],{},"'Synchrun'",":\n",[433,850],{"src":851,"alt":852,"style":558},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-install-synchrun-plugin.webp","Instalando el plugin Synchrun en Obsidian",[429,854,855,856,858,859,862,863,866,867,870,871,874],{},"Una vez instalado ",[462,857,847],{},", abra la configuración del complemento y habilite ",[462,860,861],{},"'Use a self-hosted server'"," (Usar un servidor autoalojado). Luego, ingrese ",[575,864,865],{},"https:\u002F\u002Fsynch.pafor.me"," en el campo ",[462,868,869],{},"'Server URL'"," (URL del servidor) y haga clic en ",[462,872,873],{},"'Save'"," (Guardar).",[433,876],{"src":877,"alt":878,"style":879},"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,881,882,883,886,887,890,891,893],{},"Haga clic en el botón ",[462,884,885],{},"'Sign in on this device'"," (Iniciar sesión en este dispositivo) debajo de ",[462,888,889],{},"'Account'"," (Cuenta). A continuación, regístrese para obtener una cuenta utilizando la dirección de correo electrónico que especificó en su lista ",[575,892,681],{},"; luego será redirigido a la siguiente página de autorización:",[433,895],{"src":896,"alt":897,"style":898},"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,900,882,901,904],{},[462,902,903],{},"'Allow Obsidian sign-in'"," (Permitir inicio de sesión en Obsidian):",[433,906],{"src":907,"alt":908,"style":909},"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,911,882,912,915,916,919,920],{},[462,913,914],{},"'Return to Obsidian'"," (Volver a Obsidian) y luego haga clic en ",[462,917,918],{},"'Create vault'"," (Crear bóveda):\n",[433,921],{"src":922,"alt":923,"style":924},"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,926,927],{},"Ingrese un nombre y una contraseña segura para crear su bóveda remota.",[433,929],{"src":930,"alt":931,"style":932},"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,934,935],{},"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.",[433,937],{"src":938,"alt":939,"style":940},"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;",[493,942,944],{"id":943},"acceso-a-obsidian-basado-en-navegador-con-ignis","Acceso a Obsidian basado en navegador con Ignis",[429,946,947,949],{},[462,948,456],{}," 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,951,952,953,663,958,963],{},"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 ",[442,954,957],{"href":955,"rel":956},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fusing\u002Flimitations\u002F",[446],"Limitaciones",[442,959,962],{"href":960,"rel":961},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fusing\u002Fplugin-compatibility\u002F",[446],"Compatibilidad de complementos"," de Ignis para obtener listados de compatibilidad detallados.",[538,965,967],{"id":966},"configuración-de-ignis","Configuración de Ignis",[429,969,970,971,973,974,977,978,981],{},"Instalaremos ",[462,972,456],{}," en nuestro VPS usando Docker, montándolo en la carpeta local ",[575,975,976],{},".\u002Fvaults",". Este directorio de bóveda se sincronizará utilizando la ",[462,979,980],{},"CLI de Synch"," para extraer las actualizaciones de notas de la bóveda remota que configuramos anteriormente.",[429,983,984,985,987,988,694],{},"Dado que ",[462,986,456],{}," no tiene autenticación integrada, debe protegerse detrás de una red privada de ",[462,989,990],{},[442,991,476],{"href":363},[543,993,995],{"id":994},"crear-registro-dns","Crear registro DNS",[433,997],{"src":998,"alt":999,"style":1000},"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;",[543,1002,686],{"id":1003},"agregar-el-dominio-a-caddyfile-1",[429,1005,1006,1007,1010,1011,767],{},"Agregue ",[575,1008,1009],{},"obsidian.pafor.me"," a su Caddyfile de la misma manera que ",[575,1012,1013],{},"synch.pafor.me",[569,1015,1017],{"className":712,"code":1016,"language":714,"meta":424,"style":424},"{$OBSIDIAN_DOMAIN} {\n  encode zstd gzip\n  reverse_proxy host.docker.internal:9898\n}\n",[575,1018,1019,1030,1034,1043],{"__ignoreMap":424},[578,1020,1021,1023,1026,1028],{"class":580,"line":581},[578,1022,745],{"class":721},[578,1024,1025],{"class":595},"$OBSIDIAN_DOMAIN",[578,1027,751],{"class":721},[578,1029,754],{"class":721},[578,1031,1032],{"class":580,"line":599},[578,1033,759],{"class":595},[578,1035,1036,1038,1040],{"class":580,"line":605},[578,1037,764],{"class":595},[578,1039,767],{"class":721},[578,1041,1042],{"class":770},"9898\n",[578,1044,1045],{"class":580,"line":612},[578,1046,730],{"class":721},[543,1048,1050],{"id":1049},"iniciar-ignis-usando-docker","Iniciar Ignis usando Docker",[429,1052,1053,1054,1057],{},"Guarde el siguiente archivo docker compose yml como ",[575,1055,1056],{},"ignis-docker-compose.yml"," en el VPS:",[569,1059,1063],{"className":1060,"code":1061,"language":1062,"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",[575,1064,1065,1073,1080,1090,1097,1111,1118,1123,1130,1138,1146,1154,1162,1170,1178,1189,1194,1202],{"__ignoreMap":424},[578,1066,1067,1071],{"class":580,"line":581},[578,1068,1070],{"class":1069},"swJcz","services",[578,1072,848],{"class":721},[578,1074,1075,1078],{"class":580,"line":599},[578,1076,1077],{"class":1069},"  ignis",[578,1079,848],{"class":721},[578,1081,1082,1085,1087],{"class":580,"line":605},[578,1083,1084],{"class":1069},"    image",[578,1086,767],{"class":721},[578,1088,1089],{"class":588}," nobbe\u002Fignis:latest\n",[578,1091,1092,1095],{"class":580,"line":612},[578,1093,1094],{"class":1069},"    ports",[578,1096,848],{"class":721},[578,1098,1099,1102,1105,1108],{"class":580,"line":622},[578,1100,1101],{"class":721},"      -",[578,1103,1104],{"class":721}," \"",[578,1106,1107],{"class":588},"9898:8080",[578,1109,1110],{"class":721},"\"\n",[578,1112,1113,1116],{"class":580,"line":627},[578,1114,1115],{"class":1069},"    environment",[578,1117,848],{"class":721},[578,1119,1120],{"class":580,"line":633},[578,1121,1122],{"class":608},"      # coincidir con su usuario host (ejecutar: id)\n",[578,1124,1125,1127],{"class":580,"line":774},[578,1126,1101],{"class":721},[578,1128,1129],{"class":588}," PUID=1000\n",[578,1131,1133,1135],{"class":580,"line":1132},9,[578,1134,1101],{"class":721},[578,1136,1137],{"class":588}," PGID=1000\n",[578,1139,1141,1143],{"class":580,"line":1140},10,[578,1142,1101],{"class":721},[578,1144,1145],{"class":588}," WS_ORIGINS=https:\u002F\u002Fobsidian.pafor.me\n",[578,1147,1149,1152],{"class":580,"line":1148},11,[578,1150,1151],{"class":1069},"    volumes",[578,1153,848],{"class":721},[578,1155,1157,1159],{"class":580,"line":1156},12,[578,1158,1101],{"class":721},[578,1160,1161],{"class":588}," .\u002Fvaults:\u002Fvaults\n",[578,1163,1165,1167],{"class":580,"line":1164},13,[578,1166,1101],{"class":721},[578,1168,1169],{"class":588}," .\u002Fdata:\u002Fapp\u002Fdata\n",[578,1171,1173,1175],{"class":580,"line":1172},14,[578,1174,1101],{"class":721},[578,1176,1177],{"class":588}," obsidian-app:\u002Fapp\u002Fobsidian-app\n",[578,1179,1181,1184,1186],{"class":580,"line":1180},15,[578,1182,1183],{"class":1069},"    restart",[578,1185,767],{"class":721},[578,1187,1188],{"class":588}," unless-stopped\n",[578,1190,1192],{"class":580,"line":1191},16,[578,1193,740],{"emptyLinePlaceholder":739},[578,1195,1197,1200],{"class":580,"line":1196},17,[578,1198,1199],{"class":1069},"volumes",[578,1201,848],{"class":721},[578,1203,1205,1208],{"class":580,"line":1204},18,[578,1206,1207],{"class":1069},"  obsidian-app",[578,1209,848],{"class":721},[503,1211,1212,1223,1238],{},[506,1213,1214,1215,1218,1219,1222],{},"Utilice el puerto ",[575,1216,1217],{},"9898"," en el host, ya que el ",[575,1220,1221],{},"8080"," suele ser utilizado por otros servicios.",[506,1224,1225,1226,1229,1230,1233,1234,1237],{},"Ejecute el comando ",[575,1227,1228],{},"id"," en su VPS para verificar el ",[575,1231,1232],{},"UID"," y el ",[575,1235,1236],{},"GID"," de su usuario host para garantizar los permisos correctos del sistema de archivos.",[506,1239,1240,1241,1244],{},"Establezca ",[575,1242,1243],{},"WS_ORIGINS"," para permitir únicamente conexiones WebSocket originadas desde su nombre de dominio específico.",[429,1246,1247,1248,767],{},"Inicie el contenedor de ",[462,1249,456],{},[569,1251,1253],{"className":571,"code":1252,"language":573,"meta":424,"style":424},"docker compose -f ignis-docker-compose.yml up -d\n",[575,1254,1255],{"__ignoreMap":424},[578,1256,1257,1259,1261,1264,1267,1269],{"class":580,"line":581},[578,1258,789],{"class":584},[578,1260,792],{"class":588},[578,1262,1263],{"class":588}," -f",[578,1265,1266],{"class":588}," ignis-docker-compose.yml",[578,1268,795],{"class":588},[578,1270,798],{"class":588},[429,1272,1273,1274,1277,1278,1281],{},"Cuando navegue a su dominio en un navegador web, aparecerá el ",[462,1275,1276],{},"'Vault Manager'"," (Administrador de bóvedas). Estará vacío ya que aún no se ha configurado ninguna bóveda. Configuraremos la ",[462,1279,1280],{},"'Synch CLI'"," en la siguiente sección para sincronizar los contenidos de nuestra bóveda remota.",[433,1283],{"src":1284,"alt":1285,"style":1286},"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;",[543,1288,1290],{"id":1289},"problema-con-el-cortafuegos","Problema con el cortafuegos",[429,1292,1293,1294,1297,1298,767],{},"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 ",[575,1295,1296],{},"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 ",[575,1299,1300],{},"iptables",[569,1302,1304],{"className":571,"code":1303,"language":573,"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",[575,1305,1306,1311,1340,1344,1349],{"__ignoreMap":424},[578,1307,1308],{"class":580,"line":581},[578,1309,1310],{"class":608},"# Bloquear todo el tráfico público externo\n",[578,1312,1313,1316,1319,1322,1325,1328,1331,1334,1337],{"class":580,"line":599},[578,1314,1315],{"class":584},"sudo",[578,1317,1318],{"class":588}," iptables",[578,1320,1321],{"class":588}," -I",[578,1323,1324],{"class":588}," DOCKER-USER",[578,1326,1327],{"class":588}," -i",[578,1329,1330],{"class":588}," ext_if",[578,1332,1333],{"class":588}," -j",[578,1335,1336],{"class":588}," DROP",[578,1338,1339],{"class":595}," \n",[578,1341,1342],{"class":580,"line":605},[578,1343,740],{"emptyLinePlaceholder":739},[578,1345,1346],{"class":580,"line":612},[578,1347,1348],{"class":608},"# Permitir tráfico únicamente desde la IP privada de su cliente Cloudflare WARP\n",[578,1350,1351,1353,1355,1357,1359,1361,1363,1366,1369,1371],{"class":580,"line":622},[578,1352,1315],{"class":584},[578,1354,1318],{"class":588},[578,1356,1321],{"class":588},[578,1358,1324],{"class":588},[578,1360,1327],{"class":588},[578,1362,1330],{"class":588},[578,1364,1365],{"class":588}," -s",[578,1367,1368],{"class":770}," 100.96.0.10",[578,1370,1333],{"class":588},[578,1372,1373],{"class":588}," ACCEPT\n",[543,1375,1377],{"id":1376},"configuración-de-la-cli-de-synch","Configuración de la CLI de Synch",[429,1379,1380,1381,1383],{},"La ",[462,1382,980],{}," 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,1385,1386,1387,1389,1390,1393,1394,1397,1398,1401,1402,1405,1406,663,1409,1412,1413,1416,1417,1420],{},"Compile la ",[462,1388,980],{}," desde su repositorio ",[575,1391,1392],{},"synch"," clonado. La compilación requiere ",[462,1395,1396],{},"Node.js >= 22.5"," (ya que la CLI depende de ",[575,1399,1400],{},"node:sqlite"," y de API de navegador globales como ",[575,1403,1404],{},"fetch",", ",[575,1407,1408],{},"WebSocket",[575,1410,1411],{},"WebCrypto",") y ",[462,1414,1415],{},"pnpm"," (dado que el repositorio está estructurado como un espacio de trabajo de pnpm que utiliza la versión ",[575,1418,1419],{},"10.33.0","):",[569,1422,1424],{"className":571,"code":1423,"language":573,"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",[575,1425,1426,1431,1442,1449,1453,1458,1465,1469,1474,1487,1491,1496,1507,1536,1540,1545],{"__ignoreMap":424},[578,1427,1428],{"class":580,"line":581},[578,1429,1430],{"class":608},"# Verificar versiones\n",[578,1432,1433,1436,1439],{"class":580,"line":599},[578,1434,1435],{"class":584},"node",[578,1437,1438],{"class":588}," --version",[578,1440,1441],{"class":608},"   # debe ser >= 22.5\n",[578,1443,1444,1446],{"class":580,"line":605},[578,1445,1415],{"class":584},[578,1447,1448],{"class":588}," --version\n",[578,1450,1451],{"class":580,"line":612},[578,1452,740],{"emptyLinePlaceholder":739},[578,1454,1455],{"class":580,"line":622},[578,1456,1457],{"class":608},"# En la raíz del repositorio\n",[578,1459,1460,1462],{"class":580,"line":627},[578,1461,1415],{"class":584},[578,1463,1464],{"class":588}," install\n",[578,1466,1467],{"class":580,"line":633},[578,1468,740],{"emptyLinePlaceholder":739},[578,1470,1471],{"class":580,"line":774},[578,1472,1473],{"class":608},"# Compilar el paquete de la CLI\n",[578,1475,1476,1478,1481,1484],{"class":580,"line":1132},[578,1477,1415],{"class":584},[578,1479,1480],{"class":588}," -C",[578,1482,1483],{"class":588}," apps\u002Fcli",[578,1485,1486],{"class":588}," build\n",[578,1488,1489],{"class":580,"line":1140},[578,1490,740],{"emptyLinePlaceholder":739},[578,1492,1493],{"class":580,"line":1148},[578,1494,1495],{"class":608},"# Después de una compilación exitosa, tendrá `apps\u002Fcli\u002Fdist\u002Fsynch.js`. Hágalo ejecutable y colóquelo en su PATH\n",[578,1497,1498,1501,1504],{"class":580,"line":1156},[578,1499,1500],{"class":584},"chmod",[578,1502,1503],{"class":588}," +x",[578,1505,1506],{"class":588}," apps\u002Fcli\u002Fdist\u002Fsynch.js\n",[578,1508,1509,1512,1515,1517,1520,1523,1526,1528,1531,1534],{"class":580,"line":1164},[578,1510,1511],{"class":584},"ln",[578,1513,1514],{"class":588}," -sf",[578,1516,1104],{"class":721},[578,1518,1519],{"class":595},"$PWD",[578,1521,1522],{"class":588},"\u002Fapps\u002Fcli\u002Fdist\u002Fsynch.js",[578,1524,1525],{"class":721},"\"",[578,1527,1104],{"class":721},[578,1529,1530],{"class":595},"$HOME",[578,1532,1533],{"class":588},"\u002F.local\u002Fbin\u002Fsynch",[578,1535,1110],{"class":721},[578,1537,1538],{"class":580,"line":1172},[578,1539,740],{"emptyLinePlaceholder":739},[578,1541,1542],{"class":580,"line":1180},[578,1543,1544],{"class":608},"# Verificación\n",[578,1546,1547,1549],{"class":580,"line":1191},[578,1548,1392],{"class":584},[578,1550,1551],{"class":588}," --help\n",[429,1553,1554,1555,1558],{},"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 ",[575,1556,1557],{},"synch login --api-url \u003Curl-api-synch-remota>"," para definir su endpoint de API de destino.",[429,1560,1561],{},[433,1562],{"alt":1563,"src":1564},"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,1566,1567,1568,1571],{},"Ejecute ",[575,1569,1570],{},"synch login"," en su terminal y recibirá una URL de autenticación:",[429,1573,1574],{},[433,1575],{"alt":1576,"src":1577},"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,1579,1580],{},"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,1582,1583],{},[433,1584],{"alt":1585,"src":1586},"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,1588,1567,1589,1592],{},[575,1590,1591],{},"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,1594,1595,1596,1599,1600,1603,1604,1420],{},"El ID de la bóveda remota se puede encontrar dentro de la configuración del complemento ",[462,1597,1598],{},"Synchrun"," haciendo clic en ",[462,1601,1602],{},"'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, ",[575,1605,1606],{},"123e4567-e89b-12d3-a456-426614174000",[429,1608,1609,1614],{},[433,1610],{"src":1611,"alt":1612,"style":1613},"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;",[433,1615],{"alt":1616,"src":1617},"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,1619,1620,1621,1624],{},"Ingrese la contraseña de su bóveda cuando se le solicite para establecer el vínculo. Una vez conectado, ejecute ",[575,1622,1623],{},"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,1626,1627],{},[433,1628],{"alt":1629,"src":1630},"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,1632,1633,1634,1637],{},"Para automatizar esto, configure y habilite un servicio systemd para ejecutar ",[575,1635,1636],{},"synch watch"," de forma continua, asegurando que los cambios se sincronicen instantáneamente al arrancar:",[569,1639,1641],{"className":571,"code":1640,"language":573,"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",[575,1642,1643,1659,1664,1669,1674,1679,1683,1688,1693,1698,1703,1708,1713,1718,1723,1728,1732,1737,1742,1748,1759],{"__ignoreMap":424},[578,1644,1645,1647,1650,1653,1656],{"class":580,"line":581},[578,1646,1315],{"class":584},[578,1648,1649],{"class":588}," tee",[578,1651,1652],{"class":588}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fsynch-watch.service",[578,1654,1655],{"class":721}," \u003C\u003C",[578,1657,1658],{"class":721},"'EOF'\n",[578,1660,1661],{"class":580,"line":599},[578,1662,1663],{"class":588},"[Unit]\n",[578,1665,1666],{"class":580,"line":605},[578,1667,1668],{"class":588},"Description=Synch vault watcher\n",[578,1670,1671],{"class":580,"line":612},[578,1672,1673],{"class":588},"After=network-online.target\n",[578,1675,1676],{"class":580,"line":622},[578,1677,1678],{"class":588},"Wants=network-online.target\n",[578,1680,1681],{"class":580,"line":627},[578,1682,740],{"emptyLinePlaceholder":739},[578,1684,1685],{"class":580,"line":633},[578,1686,1687],{"class":588},"[Service]\n",[578,1689,1690],{"class":580,"line":774},[578,1691,1692],{"class":588},"Type=simple\n",[578,1694,1695],{"class":580,"line":1132},[578,1696,1697],{"class":588},"User=\u003Cusername>\n",[578,1699,1700],{"class":580,"line":1140},[578,1701,1702],{"class":588},"ExecStart=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin\u002Fsynch watch --vault \u002Fhome\u002F\u003Cusername>\u002Fvaults\u002F\u003Cvault-name>\n",[578,1704,1705],{"class":580,"line":1148},[578,1706,1707],{"class":588},"WorkingDirectory=\u002Fhome\u002F\u003Cusername>\u002Fvaults\n",[578,1709,1710],{"class":580,"line":1156},[578,1711,1712],{"class":588},"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",[578,1714,1715],{"class":580,"line":1164},[578,1716,1717],{"class":588},"Environment=\"HOME=\u002Fhome\u002F\u003Cusername>\"\n",[578,1719,1720],{"class":580,"line":1172},[578,1721,1722],{"class":588},"Restart=always\n",[578,1724,1725],{"class":580,"line":1180},[578,1726,1727],{"class":588},"RestartSec=5\n",[578,1729,1730],{"class":580,"line":1191},[578,1731,740],{"emptyLinePlaceholder":739},[578,1733,1734],{"class":580,"line":1196},[578,1735,1736],{"class":588},"[Install]\n",[578,1738,1739],{"class":580,"line":1204},[578,1740,1741],{"class":588},"WantedBy=multi-user.target\n",[578,1743,1745],{"class":580,"line":1744},19,[578,1746,1747],{"class":721},"EOF\n",[578,1749,1751,1753,1756],{"class":580,"line":1750},20,[578,1752,1315],{"class":584},[578,1754,1755],{"class":588}," systemctl",[578,1757,1758],{"class":588}," daemon-reload\n",[578,1760,1762,1764,1766,1769,1772],{"class":580,"line":1761},21,[578,1763,1315],{"class":584},[578,1765,1755],{"class":588},[578,1767,1768],{"class":588}," enable",[578,1770,1771],{"class":588}," --now",[578,1773,1774],{"class":588}," synch-watch.service\n",[429,1776,1777,1778,1780],{},"Abra ",[575,1779,1009],{}," 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:",[433,1782],{"src":1783,"alt":1784,"style":1785},"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,1787,1788],{},"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:",[433,1790],{"src":1791,"alt":1792,"style":1793},"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,1795,1796],{},"Para probar la configuración, puede agregar una nueva nota a través de la interfaz web:",[433,1798],{"src":1799,"alt":1800,"style":1793},"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,1802,1803,1804,694],{},"La nota se sincroniza inmediatamente con su aplicación de escritorio Obsidian. Tenga en cuenta que las carpetas vacías no aparecen en ",[462,1805,456],{},[433,1807],{"src":1808,"alt":1809,"style":1810},"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,1812,1813,1814,1816],{},"Visualización de ",[575,1815,1009],{}," en un navegador web móvil:",[429,1818,1819,1824],{},[433,1820],{"src":1821,"alt":1822,"style":1823},"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;",[433,1825],{"src":1826,"alt":1827,"style":1823},"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,1829,1830,1831,1833,1834,1837],{},"Cuando elimina una nota en ",[462,1832,456],{},", se mueve de manera segura a la carpeta ",[575,1835,1836],{},"~\u002Fvaults\u002F\u003Cnombre-boveda>\u002F.trash"," de su bóveda local.",[493,1839,1841],{"id":1840},"reflexiones-finales-sobre-las-bóvedas-autoalojadas","Reflexiones finales sobre las bóvedas autoalojadas",[429,1843,1844,1845,464,1847,1849,1850,1852],{},"Juntos, ",[462,1846,447],{},[462,1848,456],{}," 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 ",[462,1851,476],{}," garantiza que sus notas personales estén completamente protegidas del internet público.",[429,1854,1855,1857],{},[462,1856,456],{}," 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,1859,1860,1861,1864],{},"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 ",[462,1862,1863],{},"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,1866,1867],{},"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.",[493,1869,1871],{"id":1870},"referencias","Referencias",[503,1873,1874,1881,1888],{},[506,1875,1876],{},[442,1877,1880],{"href":1878,"rel":1879},"https:\u002F\u002Fsynch.run\u002Fself-hosting-docker\u002F",[446],"Despliegue de Synch con Docker Compose",[506,1882,1883],{},[442,1884,1887],{"href":1885,"rel":1886},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fserver\u002Fdeploy\u002F",[446],"Despliegue de Ignis con Docker",[506,1889,1890],{},[442,1891,1894],{"href":1892,"rel":1893},"https:\u002F\u002Fsynch.run\u002Fblog\u002Fencryption-and-decryption\u002F",[446],"¿Cómo funciona el cifrado de extremo a extremo en Synch?",[1896,1897,1898],"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 .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":599,"depth":605,"links":1900},[1901,1910,1919,1920],{"id":495,"depth":599,"text":496,"children":1902},[1903,1907],{"id":540,"depth":605,"text":541,"children":1904},[1905,1906],{"id":545,"depth":612,"text":546},{"id":561,"depth":612,"text":562},{"id":820,"depth":605,"text":821,"children":1908},[1909],{"id":824,"depth":612,"text":825},{"id":943,"depth":599,"text":944,"children":1911},[1912],{"id":966,"depth":605,"text":967,"children":1913},[1914,1915,1916,1917,1918],{"id":994,"depth":612,"text":995},{"id":1003,"depth":612,"text":686},{"id":1049,"depth":612,"text":1050},{"id":1289,"depth":612,"text":1290},{"id":1376,"depth":612,"text":1377},{"id":1840,"depth":599,"text":1841},{"id":1870,"depth":599,"text":1871},[1922],"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.","md","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":1929,"robots":1934,"sitemap":1935},[1930,1932],{"@type":1931,"headline":423,"description":1924,"image":1926},"Article",{"@type":1933,"name":423,"description":1924,"image":1926},"HowTo","index, follow",{"lastmod":1936},"2026-09-16",{"title":1938,"description":1924,"ogTitle":423,"ogDescription":1924,"twitterTitle":423,"twitterDescription":1924},"Sincronización segura de Obsidian con Synch e Ignis","es\u002Farticle\u002Fsync-obsidian-across-devices",[1941,1942,1943,1944],"Self-hosting","Obsidian","Sincronización","Zero Trust",null,"1bLUKdbBHHyQSSGPS9lahZpDD7ywYDXxUteonIIvop8",{"surround":1948,"related":5060},[1949,4140],{"id":1950,"title":702,"author":424,"body":1951,"category":4100,"date":4103,"description":4104,"extension":1925,"image":4105,"imageAlt":4106,"isPublished":739,"meta":4107,"minRead":1204,"navigation":739,"path":89,"seo":4131,"stem":4133,"tags":4134,"updatedAt":1945,"__hash__":4139},"article\u002Fes\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues.md",{"type":426,"value":1952,"toc":4070},[1953,1956,1962,1968,1972,1975,2013,2017,2023,2061,2065,2069,2083,2090,2095,2099,2103,2119,2125,2173,2199,2203,2211,2217,2221,2224,2434,2438,2478,2484,2491,2499,2548,2554,2582,2586,2590,2617,2643,2648,2690,2699,2971,2975,3018,3023,3030,3034,3038,3062,3065,3071,3074,3078,3086,3092,3095,3101,3107,3136,3142,3148,3151,3157,3161,3164,3167,3170,3176,3179,3185,3191,3197,3202,3206,3217,3224,3230,3233,3239,3243,3250,3256,3263,3267,3274,3338,3351,3406,3409,3480,3486,3502,3508,3512,3558,3564,3567,3573,3576,3582,3586,3602,3618,3624,3722,3725,3731,3742,3791,3797,3803,3815,3831,3834,3840,3844,3851,3873,3882,3980,3991,3997,4004,4010,4013,4019,4022,4028,4032,4035,4037,4067],[429,1954,1955],{},"La fragmentación del contexto es un obstáculo frustrante cuando se trabaja con múltiples agentes de IA. Con conversaciones dispersas en diferentes herramientas, terminas actuando como un enrutador humano copiando conversaciones de Claude Code para pegarlas en Gemini CLI, luego copiando de Gemini CLI para pegarlas en Hermes Agent. Esta fricción aumenta cuando hay colegas humanos en el mismo equipo.",[429,1957,1958],{},[433,1959],{"alt":1960,"src":1961},"La interfaz de usuario del espacio de trabajo colaborativo Buzz mostrando canales de chat y agentes de IA activos","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-workspace-interface.webp",[429,1963,1964,1967],{},[462,1965,1966],{},"Buzz",", un espacio de trabajo colaborativo de código abierto, reúne a equipos humanos y agentes de IA en un entorno único y unificado. Aquí, los colegas humanos y los agentes de IA comparten el mismo historial de tareas y proyectos, delegando el trabajo entre sí de manera fluida.",[493,1969,1971],{"id":1970},"qué-es-blocks-buzz-el-espacio-de-trabajo-colaborativo-para-agentes-de-ia","¿Qué es Block's Buzz? El espacio de trabajo colaborativo para agentes de IA",[429,1973,1974],{},"Buzz es un espacio de trabajo colaborativo de código abierto de Block (la empresa de Jack Dorsey) donde los humanos y los agentes de IA comparten los mismos canales y proyectos. Ofrece las siguientes características clave:",[503,1976,1977,1983,1989,1995,2001,2007],{},[506,1978,1979,1982],{},[462,1980,1981],{},"Contexto compartido:"," Los canales son el lugar donde los humanos y los agentes colaboran entre sí. Todo el historial de conversaciones y proyectos se encuentra dentro del canal.",[506,1984,1985,1988],{},[462,1986,1987],{},"Comunicación entre agentes:"," Los agentes pueden comunicarse entre sí, incluso en diferentes máquinas. Un agente puede @-mencionar a otro agente para delegar trabajo o verificar código.",[506,1990,1991,1994],{},[462,1992,1993],{},"Activación guiada por menciones:"," Los agentes solo actúan cuando se les @-menciona; de lo contrario, permanecen en silencio. Al ser mencionado, un agente lee el contexto relevante en el canal y comienza a trabajar.",[506,1996,1997,2000],{},[462,1998,1999],{},"Sistema de identidad unificado:"," Los humanos y los agentes utilizan el mismo sistema de identidad, autenticado mediante claves criptográficas.",[506,2002,2003,2006],{},[462,2004,2005],{},"Comandos delegados:"," Puedes otorgar permisos a tus colegas humanos para controlar a tus agentes, lo que permite a todo el equipo dar instrucciones y aprovechar los asistentes digitales de los demás.",[506,2008,2009,2012],{},[462,2010,2011],{},"Servidores autoalojados:"," Al alojar tú mismo el servidor, tus datos permanecen completamente bajo tu control. Tú eliges quién se une y defines tus propias reglas de funcionamiento.",[493,2014,2016],{"id":2015},"la-arquitectura-criptográfica-basada-en-nostr-de-buzz","La arquitectura criptográfica basada en Nostr de Buzz",[429,2018,2019],{},[433,2020],{"alt":2021,"src":2022},"Diagrama arquitectónico criptográfico basado en Nostr del espacio de trabajo de colaboración Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-nostr-cryptographic-architecture.webp",[503,2024,2025,2031,2037,2043,2049,2055],{},[506,2026,2027,2030],{},[462,2028,2029],{},"El relay de Nostr actúa como servidor:"," Los mensajes, flujos de trabajo, repositorios y otros eventos se firman criptográficamente, se verifican y se almacenan en un servidor relay de Nostr. El protocolo Nostr admite de forma nativa la comunicación a través de WebSockets y API REST.",[506,2032,2033,2036],{},[462,2034,2035],{},"Identidad criptográfica unificada:"," Tanto los humanos como los agentes se autentican utilizando sus propias claves criptográficas. Esta identidad permanece en el lado del cliente y nunca se almacena en el servidor.",[506,2038,2039,2042],{},[462,2040,2041],{},"Membresía de agentes de primer nivel:"," Cada agente posee su propia identidad, membresía en canales e historial de auditoría. Los agentes se conectan al espacio de trabajo utilizando el Protocolo de Comunicación de Agentes (ACP).",[506,2044,2045,2048],{},[462,2046,2047],{},"Repositorios Git descentralizados:"," Los repositorios de código se almacenan en un almacenamiento de objetos compatible con S3, mientras que las tareas, pull requests y revisiones de código se rastrean dentro del registro de eventos de Nostr. En consecuencia, un repositorio Git de Buzz se aloja en el relay de Nostr en lugar de GitHub.",[506,2050,2051,2054],{},[462,2052,2053],{},"La aplicación Buzz es un cliente Nostr:"," Buzz es independiente del relay de Nostr; es una aplicación de cliente móvil o de escritorio que se conecta a la URL del relay.",[506,2056,2057,2060],{},[462,2058,2059],{},"Pila de infraestructura:"," Una base de datos PostgreSQL maneja el almacenamiento de eventos y la búsqueda de texto completo, Redis gestiona la mensajería pub\u002Fsub y MinIO compatible con S3 se utiliza para el almacenamiento de archivos multimedia.",[493,2062,2064],{"id":2063},"cómo-autoalojar-el-relay-de-buzz-de-block-en-un-vps-linux","Cómo autoalojar el relay de Buzz de Block en un VPS Linux",[538,2066,2068],{"id":2067},"_0-requisitos-previos","0. Requisitos previos",[503,2070,2071,2074,2077,2080],{},[506,2072,2073],{},"Un VPS Linux",[506,2075,2076],{},"Un dominio que apunte a tu servidor",[506,2078,2079],{},"Docker y el plugin Docker Compose",[506,2081,2082],{},"Cuenta de Cloudflare (plan gratuito)",[429,2084,2085,2086,2089],{},"En esta guía, ejecutaremos el relay de Nostr en un VPS con Ubuntu detrás de una red privada de ",[442,2087,2088],{"href":363},"Cómo exponer Hermes Agent de forma privada con WARP",". La pila consta de cuatro servicios en Docker Compose (relay, PostgreSQL, Redis y MinIO) además de Caddy para HTTPS.",[484,2091],{"description":2092,"image":2093,"image-alt":2094,"label":489,"min-read":490,"title":2088,"to":363},"Aprende a exponer y acceder de forma segura a tu Hermes Agent globalmente usando Cloudflare WARP y Zero Trust sin abrir puertos entrantes en el firewall.","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","Exposición segura de Hermes Agent a una red privada mediante Cloudflare Zero Trust y túnel WARP",[538,2096,2098],{"id":2097},"_1-dns-de-cloudflare-y-token-de-api","1. DNS de Cloudflare y token de API",[543,2100,2102],{"id":2101},"crear-un-token-de-api-de-cloudflare","Crear un token de API de Cloudflare",[2104,2105,2106,2113],"ol",{},[506,2107,2108,2109,2112],{},"Haz clic en el botón ",[462,2110,2111],{},"Profile"," en la esquina superior derecha desde el menú desplegable del icono de usuario.",[506,2114,2115,2116,694],{},"Haz clic en ",[462,2117,2118],{},"API Tokens",[429,2120,2121],{},[433,2122],{"alt":2123,"src":2124},"Página de perfil de usuario de Cloudflare mostrando el menú de creación de tokens de API","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fcloudflare-profile-api-tokens.webp",[2104,2126,2127,2132,2138,2158,2163,2167,2170],{"start":605},[506,2128,2115,2129,694],{},[462,2130,2131],{},"Create Token",[506,2133,2134,2135,694],{},"Usa la plantilla ",[462,2136,2137],{},"Edit zone DNS",[506,2139,2140,2141],{},"Configura la plantilla de la siguiente manera:\n",[503,2142,2143,2149],{},[506,2144,2145,2148],{},[462,2146,2147],{},"Permissions",": Zone — DNS — Edit",[506,2150,2151,2154,2155],{},[462,2152,2153],{},"Zone Resources",": Include — Specific zone — ",[575,2156,2157],{},"example.com",[506,2159,2115,2160,694],{},[462,2161,2162],{},"Continue to summary",[506,2164,2115,2165,694],{},[462,2166,2131],{},[506,2168,2169],{},"Copia el token generado, ya que no se volverá a mostrar una vez cerrada la página.",[506,2171,2172],{},"Prueba el token generado en tu terminal para asegurarte de que funciona correctamente:",[569,2174,2176],{"className":571,"code":2175,"language":573,"meta":424,"style":424},"curl \"https:\u002F\u002Fapi.cloudflare.com\u002Fclient\u002Fv4\u002Fuser\u002Ftokens\u002Fverify\" -H \"Authorization: Bearer YOUR_TOKEN_HERE\"\n",[575,2177,2178],{"__ignoreMap":424},[578,2179,2180,2182,2184,2187,2189,2192,2194,2197],{"class":580,"line":581},[578,2181,804],{"class":584},[578,2183,1104],{"class":721},[578,2185,2186],{"class":588},"https:\u002F\u002Fapi.cloudflare.com\u002Fclient\u002Fv4\u002Fuser\u002Ftokens\u002Fverify",[578,2188,1525],{"class":721},[578,2190,2191],{"class":588}," -H",[578,2193,1104],{"class":721},[578,2195,2196],{"class":588},"Authorization: Bearer YOUR_TOKEN_HERE",[578,2198,1110],{"class":721},[543,2200,2202],{"id":2201},"registros-dns","Registros DNS",[503,2204,2205],{},[506,2206,2207,2208,694],{},"Crea un registro A y establécelo como ",[462,2209,2210],{},"DNS only",[429,2212,2213],{},[433,2214],{"alt":2215,"src":2216},"Configurando un registro DNS A para el dominio de Buzz en el panel de Cloudflare con estado de proxy como solo DNS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fcloudflare-dns-a-record-configuration.webp",[538,2218,2220],{"id":2219},"_2-instalar-docker-en-ubuntu","2. Instalar Docker en Ubuntu",[429,2222,2223],{},"Ejecuta los siguientes comandos para instalar Docker en Ubuntu:",[569,2225,2227],{"className":571,"code":2226,"language":573,"meta":424,"style":424},"# Add Docker's official GPG key and set up the Docker repository\ncurl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg\n\n# Add the official Docker repository\necho \"deb [arch=amd64 signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu $(lsb_release -cs) stable\" | sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list > \u002Fdev\u002Fnull\n\n# Update package list\nsudo apt update\n\n# Install Docker Engine, Docker Community Edition, and containerd runtime\nsudo apt install docker-ce docker-ce-cli containerd.io -y\n\n# Start automatically when the system boots\nsudo systemctl enable docker\n\n# Verify docker is installed\ndocker --version\n\nsudo apt install -y docker-compose-plugin\n\n# Verify the compose plugin is installed\ndocker compose version\n\n",[575,2228,2229,2234,2262,2266,2271,2313,2317,2322,2332,2336,2341,2362,2366,2371,2382,2386,2391,2397,2401,2415,2419,2424],{"__ignoreMap":424},[578,2230,2231],{"class":580,"line":581},[578,2232,2233],{"class":608},"# Add Docker's official GPG key and set up the Docker repository\n",[578,2235,2236,2238,2241,2244,2247,2250,2253,2256,2259],{"class":580,"line":599},[578,2237,804],{"class":584},[578,2239,2240],{"class":588}," -fsSL",[578,2242,2243],{"class":588}," https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg",[578,2245,2246],{"class":721}," |",[578,2248,2249],{"class":584}," sudo",[578,2251,2252],{"class":588}," gpg",[578,2254,2255],{"class":588}," --dearmor",[578,2257,2258],{"class":588}," -o",[578,2260,2261],{"class":588}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg\n",[578,2263,2264],{"class":580,"line":605},[578,2265,740],{"emptyLinePlaceholder":739},[578,2267,2268],{"class":580,"line":612},[578,2269,2270],{"class":608},"# Add the official Docker repository\n",[578,2272,2273,2276,2278,2281,2284,2287,2290,2293,2296,2298,2300,2302,2304,2307,2310],{"class":580,"line":622},[578,2274,2275],{"class":615},"echo",[578,2277,1104],{"class":721},[578,2279,2280],{"class":588},"deb [arch=amd64 signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu ",[578,2282,2283],{"class":721},"$(",[578,2285,2286],{"class":584},"lsb_release",[578,2288,2289],{"class":588}," -cs",[578,2291,2292],{"class":721},")",[578,2294,2295],{"class":588}," stable",[578,2297,1525],{"class":721},[578,2299,2246],{"class":721},[578,2301,2249],{"class":584},[578,2303,1649],{"class":588},[578,2305,2306],{"class":588}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[578,2308,2309],{"class":721}," >",[578,2311,2312],{"class":588}," \u002Fdev\u002Fnull\n",[578,2314,2315],{"class":580,"line":627},[578,2316,740],{"emptyLinePlaceholder":739},[578,2318,2319],{"class":580,"line":633},[578,2320,2321],{"class":608},"# Update package list\n",[578,2323,2324,2326,2329],{"class":580,"line":774},[578,2325,1315],{"class":584},[578,2327,2328],{"class":588}," apt",[578,2330,2331],{"class":588}," update\n",[578,2333,2334],{"class":580,"line":1132},[578,2335,740],{"emptyLinePlaceholder":739},[578,2337,2338],{"class":580,"line":1140},[578,2339,2340],{"class":608},"# Install Docker Engine, Docker Community Edition, and containerd runtime\n",[578,2342,2343,2345,2347,2350,2353,2356,2359],{"class":580,"line":1148},[578,2344,1315],{"class":584},[578,2346,2328],{"class":588},[578,2348,2349],{"class":588}," install",[578,2351,2352],{"class":588}," docker-ce",[578,2354,2355],{"class":588}," docker-ce-cli",[578,2357,2358],{"class":588}," containerd.io",[578,2360,2361],{"class":588}," -y\n",[578,2363,2364],{"class":580,"line":1156},[578,2365,740],{"emptyLinePlaceholder":739},[578,2367,2368],{"class":580,"line":1164},[578,2369,2370],{"class":608},"# Start automatically when the system boots\n",[578,2372,2373,2375,2377,2379],{"class":580,"line":1172},[578,2374,1315],{"class":584},[578,2376,1755],{"class":588},[578,2378,1768],{"class":588},[578,2380,2381],{"class":588}," docker\n",[578,2383,2384],{"class":580,"line":1180},[578,2385,740],{"emptyLinePlaceholder":739},[578,2387,2388],{"class":580,"line":1191},[578,2389,2390],{"class":608},"# Verify docker is installed\n",[578,2392,2393,2395],{"class":580,"line":1196},[578,2394,789],{"class":584},[578,2396,1448],{"class":588},[578,2398,2399],{"class":580,"line":1204},[578,2400,740],{"emptyLinePlaceholder":739},[578,2402,2403,2405,2407,2409,2412],{"class":580,"line":1744},[578,2404,1315],{"class":584},[578,2406,2328],{"class":588},[578,2408,2349],{"class":588},[578,2410,2411],{"class":588}," -y",[578,2413,2414],{"class":588}," docker-compose-plugin\n",[578,2416,2417],{"class":580,"line":1750},[578,2418,740],{"emptyLinePlaceholder":739},[578,2420,2421],{"class":580,"line":1761},[578,2422,2423],{"class":608},"# Verify the compose plugin is installed\n",[578,2425,2427,2429,2431],{"class":580,"line":2426},22,[578,2428,789],{"class":584},[578,2430,792],{"class":588},[578,2432,2433],{"class":588}," version\n",[538,2435,2437],{"id":2436},"_3-clonar-y-configurar","3. Clonar y configurar",[569,2439,2441],{"className":571,"code":2440,"language":573,"meta":424,"style":424},"git clone https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz.git\n\ncd buzz\u002Fdeploy\u002Fcompose\ncp .env.example .env\nnano .env\n",[575,2442,2443,2452,2456,2463,2471],{"__ignoreMap":424},[578,2444,2445,2447,2449],{"class":580,"line":581},[578,2446,585],{"class":584},[578,2448,589],{"class":588},[578,2450,2451],{"class":588}," https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz.git\n",[578,2453,2454],{"class":580,"line":599},[578,2455,740],{"emptyLinePlaceholder":739},[578,2457,2458,2460],{"class":580,"line":605},[578,2459,616],{"class":615},[578,2461,2462],{"class":588}," buzz\u002Fdeploy\u002Fcompose\n",[578,2464,2465,2467,2469],{"class":580,"line":612},[578,2466,636],{"class":584},[578,2468,639],{"class":588},[578,2470,642],{"class":588},[578,2472,2473,2476],{"class":580,"line":622},[578,2474,2475],{"class":584},"nano",[578,2477,642],{"class":588},[429,2479,2480,2481,2483],{},"Edita ",[575,2482,649],{}," en grupos:",[503,2485,2486],{},[506,2487,2488],{},[462,2489,2490],{},"Dominio:",[569,2492,2497],{"className":2493,"code":2495,"language":2496},[2494],"language-text","BUZZ_DOMAIN=buzz.pafor.me\nRELAY_URL=wss:\u002F\u002Fbuzz.pafor.me\nBUZZ_PAIRING_RELAY_URL=wss:\u002F\u002Fbuzz.pafor.me\u002Fpair\nBUZZ_MEDIA_BASE_URL=https:\u002F\u002Fbuzz.pafor.me\u002Fmedia\nBUZZ_MEDIA_SERVER_DOMAIN=buzz.pafor.me\nBUZZ_CORS_ORIGINS=https:\u002F\u002Fbuzz.pafor.me\n","text",[575,2498,2495],{"__ignoreMap":424},[503,2500,2501,2511],{},[506,2502,2503,2506,2507,2510],{},[462,2504,2505],{},"Clave del propietario:"," ",[575,2508,2509],{},"RELAY_OWNER_PUBKEY"," requiere tu clave pública hexadecimal de 64 caracteres. Genera una identidad en la aplicación de escritorio primero ('Create a new identity key' → copia tu ID público, que está en formato npub), luego conviértela a hexadecimal.",[506,2512,2513,2516],{},[462,2514,2515],{},"Secretos (Secrets):",[503,2517,2518,2528,2542],{},[506,2519,2520,2521,2524,2525,2527],{},"Genera secretos usando esta ",[442,2522,2523],{"href":670},"herramienta en línea"," o con ",[575,2526,675],{}," (ejecútalo siete veces)",[506,2529,2530,2531,2534,2535,1405,2538,2541],{},"Reemplaza cada marcador ",[575,2532,2533],{},"CHANGE_ME",": ",[575,2536,2537],{},"BUZZ_RELAY_PRIVATE_KEY",[575,2539,2540],{},"BUZZ_GIT_HOOK_HMAC_SECRET",", las contraseñas de Postgres\u002FRedis\u002FTypesense y las claves de acceso\u002Fsecretas de S3.",[506,2543,2544,2545,694],{},"Los marcadores sobrantes son la causa más común de bucles de reinicio de contenedores; verifica los tuyos con ",[575,2546,2547],{},"grep CHANGE_ME .env",[569,2549,2552],{"className":2550,"code":2551,"language":2496},[2494],"    BUZZ_RELAY_PRIVATE_KEY=CHANGE_ME_64_HEX_PRIVATE_KEY\n    BUZZ_GIT_HOOK_HMAC_SECRET=CHANGE_ME_RANDOM_64_HEX\n    POSTGRES_PASSWORD=CHANGE_ME_RANDOM_PASSWORD\n    REDIS_PASSWORD=CHANGE_ME_RANDOM_PASSWORD\n    TYPESENSE_API_KEY=CHANGE_ME_RANDOM_API_KEY\n    BUZZ_S3_ACCESS_KEY=CHANGE_ME_RANDOM_ACCESS_KEY\n    BUZZ_S3_SECRET_KEY=CHANGE_ME_RANDOM_SECRET_KEY\n",[575,2553,2551],{"__ignoreMap":424},[503,2555,2556],{},[506,2557,2558,2561],{},[462,2559,2560],{},"Otros:",[503,2562,2563,2570],{},[506,2564,2565,2566,2569],{},"Agrega ",[575,2567,2568],{},"CLOUDFLARE_API_TOKEN"," como una variable de entorno y asígnale el token de API generado anteriormente. Esto es obligatorio para Caddy.",[506,2571,2572,2573,1405,2575,2578,2579,694],{},"Buzz se distribuye con valores predeterminados abiertos: cualquiera que conozca la URL de tu relay puede autenticarse y unirse. Configura ",[575,2574,2509],{},[575,2576,2577],{},"BUZZ_REQUIRE_RELAY_MEMBERSHIP=true",", y ",[575,2580,2581],{},"BUZZ_REQUIRE_AUTH_TOKEN=true",[538,2583,2585],{"id":2584},"_4-habilitar-https-con-caddy","4. Habilitar HTTPS con Caddy",[543,2587,2589],{"id":2588},"construir-una-imagen-personalizada-de-caddy-con-el-módulo-dns-de-cloudflare","Construir una imagen personalizada de Caddy con el módulo DNS de Cloudflare",[503,2591,2592,2603,2614],{},[506,2593,2594,2595,2598,2599,2602],{},"Configuramos DNS-01 con Cloudflare para Caddy. DNS-01 funciona haciendo que el complemento escriba un registro TXT ",[575,2596,2597],{},"_acme-challenge.buzz.pafor.me"," en el ",[462,2600,2601],{},"DNS público",";",[506,2604,2605,2606,2609,2610,2613],{},"Let's Encrypt luego busca el registro en el internet público para verificar el control del dominio. Esto significa que ",[575,2607,2608],{},"pafor.me"," debe ser una zona pública en tu cuenta de Cloudflare, no solo un nombre de host privado que solo existe en el DNS privado de Zero Trust \u002F WARP. Si ",[575,2611,2612],{},"buzz.pafor.me"," solo se resuelve de forma privada y no hay una zona pública, DNS-01 fallará, lo que requerirá un enfoque diferente.",[506,2615,2616],{},"Agrega lo siguiente al Caddyfile:",[569,2618,2620],{"className":1060,"code":2619,"language":1062,"meta":424,"style":424},"{\n  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}\n}\n",[575,2621,2622,2626,2639],{"__ignoreMap":424},[578,2623,2624],{"class":580,"line":581},[578,2625,722],{"class":721},[578,2627,2628,2631,2634,2637],{"class":580,"line":599},[578,2629,2630],{"class":588},"  acme_dns cloudflare",[578,2632,2633],{"class":721}," {",[578,2635,2636],{"class":588},"env.CLOUDFLARE_API_TOKEN",[578,2638,730],{"class":721},[578,2640,2641],{"class":580,"line":605},[578,2642,730],{"class":721},[503,2644,2645],{},[506,2646,2647],{},"Crea un Dockerfile.caddy con el siguiente contenido, el cual es requerido por compose.caddy.yml:",[569,2649,2651],{"className":1060,"code":2650,"language":1062,"meta":424,"style":424},"FROM caddy:2-builder AS builder\n\nRUN xcaddy build \\\n    --with github.com\u002Fcaddy-dns\u002Fcloudflare\n\nFROM caddy:2-alpine\n\nCOPY --from=builder \u002Fusr\u002Fbin\u002Fcaddy \u002Fusr\u002Fbin\u002Fcaddy\n",[575,2652,2653,2658,2662,2667,2672,2676,2681,2685],{"__ignoreMap":424},[578,2654,2655],{"class":580,"line":581},[578,2656,2657],{"class":588},"FROM caddy:2-builder AS builder\n",[578,2659,2660],{"class":580,"line":599},[578,2661,740],{"emptyLinePlaceholder":739},[578,2663,2664],{"class":580,"line":605},[578,2665,2666],{"class":588},"RUN xcaddy build \\\n",[578,2668,2669],{"class":580,"line":612},[578,2670,2671],{"class":588},"    --with github.com\u002Fcaddy-dns\u002Fcloudflare\n",[578,2673,2674],{"class":580,"line":622},[578,2675,740],{"emptyLinePlaceholder":739},[578,2677,2678],{"class":580,"line":627},[578,2679,2680],{"class":588},"FROM caddy:2-alpine\n",[578,2682,2683],{"class":580,"line":633},[578,2684,740],{"emptyLinePlaceholder":739},[578,2686,2687],{"class":580,"line":774},[578,2688,2689],{"class":588},"COPY --from=builder \u002Fusr\u002Fbin\u002Fcaddy \u002Fusr\u002Fbin\u002Fcaddy\n",[503,2691,2692],{},[506,2693,2694,2695,2698],{},"Modifica ",[575,2696,2697],{},"compose.caddy.yml"," para usar la imagen con el módulo de Cloudflare y pasar el token de API de Cloudflare:",[569,2700,2702],{"className":1060,"code":2701,"language":1062,"meta":424,"style":424},"services:\n  relay:\n    ports: !reset []\n\n  caddy:\n    build:\n      context: .\n      dockerfile: Dockerfile.caddy\n    image: buzz-caddy:cloudflare\n    depends_on:\n      relay:\n        condition: service_healthy\n    environment:\n      BUZZ_DOMAIN: ${BUZZ_DOMAIN:?set BUZZ_DOMAIN}\n      CLOUDFLARE_API_TOKEN: ${CLOUDFLARE_API_TOKEN:?set CLOUDFLARE_API_TOKEN}\n    ports:\n      - \"${CADDY_HTTP_PORT:-80}:80\"\n      - \"${CADDY_HTTPS_PORT:-443}:443\"\n    volumes:\n      - .\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile:ro\n      - buzz-caddy-data:\u002Fdata\n      - buzz-caddy-config:\u002Fconfig\n    restart: unless-stopped\n    networks:\n      - buzz-net\n\nvolumes:\n  buzz-caddy-data:\n    labels:\n      com.buzz.volume: caddy-data\n  buzz-caddy-config:\n    labels:\n      com.buzz.volume: caddy-config\n",[575,2703,2704,2710,2717,2730,2734,2741,2748,2758,2768,2777,2784,2791,2801,2807,2817,2827,2833,2844,2855,2861,2868,2875,2882,2891,2899,2907,2912,2919,2927,2935,2946,2954,2961],{"__ignoreMap":424},[578,2705,2706,2708],{"class":580,"line":581},[578,2707,1070],{"class":1069},[578,2709,848],{"class":721},[578,2711,2712,2715],{"class":580,"line":599},[578,2713,2714],{"class":1069},"  relay",[578,2716,848],{"class":721},[578,2718,2719,2721,2723,2727],{"class":580,"line":605},[578,2720,1094],{"class":1069},[578,2722,767],{"class":721},[578,2724,2726],{"class":2725},"spNyl"," !reset",[578,2728,2729],{"class":721}," []\n",[578,2731,2732],{"class":580,"line":612},[578,2733,740],{"emptyLinePlaceholder":739},[578,2735,2736,2739],{"class":580,"line":622},[578,2737,2738],{"class":1069},"  caddy",[578,2740,848],{"class":721},[578,2742,2743,2746],{"class":580,"line":627},[578,2744,2745],{"class":1069},"    build",[578,2747,848],{"class":721},[578,2749,2750,2753,2755],{"class":580,"line":633},[578,2751,2752],{"class":1069},"      context",[578,2754,767],{"class":721},[578,2756,2757],{"class":770}," .\n",[578,2759,2760,2763,2765],{"class":580,"line":774},[578,2761,2762],{"class":1069},"      dockerfile",[578,2764,767],{"class":721},[578,2766,2767],{"class":588}," Dockerfile.caddy\n",[578,2769,2770,2772,2774],{"class":580,"line":1132},[578,2771,1084],{"class":1069},[578,2773,767],{"class":721},[578,2775,2776],{"class":588}," buzz-caddy:cloudflare\n",[578,2778,2779,2782],{"class":580,"line":1140},[578,2780,2781],{"class":1069},"    depends_on",[578,2783,848],{"class":721},[578,2785,2786,2789],{"class":580,"line":1148},[578,2787,2788],{"class":1069},"      relay",[578,2790,848],{"class":721},[578,2792,2793,2796,2798],{"class":580,"line":1156},[578,2794,2795],{"class":1069},"        condition",[578,2797,767],{"class":721},[578,2799,2800],{"class":588}," service_healthy\n",[578,2802,2803,2805],{"class":580,"line":1164},[578,2804,1115],{"class":1069},[578,2806,848],{"class":721},[578,2808,2809,2812,2814],{"class":580,"line":1172},[578,2810,2811],{"class":1069},"      BUZZ_DOMAIN",[578,2813,767],{"class":721},[578,2815,2816],{"class":588}," ${BUZZ_DOMAIN:?set BUZZ_DOMAIN}\n",[578,2818,2819,2822,2824],{"class":580,"line":1180},[578,2820,2821],{"class":1069},"      CLOUDFLARE_API_TOKEN",[578,2823,767],{"class":721},[578,2825,2826],{"class":588}," ${CLOUDFLARE_API_TOKEN:?set CLOUDFLARE_API_TOKEN}\n",[578,2828,2829,2831],{"class":580,"line":1191},[578,2830,1094],{"class":1069},[578,2832,848],{"class":721},[578,2834,2835,2837,2839,2842],{"class":580,"line":1196},[578,2836,1101],{"class":721},[578,2838,1104],{"class":721},[578,2840,2841],{"class":588},"${CADDY_HTTP_PORT:-80}:80",[578,2843,1110],{"class":721},[578,2845,2846,2848,2850,2853],{"class":580,"line":1204},[578,2847,1101],{"class":721},[578,2849,1104],{"class":721},[578,2851,2852],{"class":588},"${CADDY_HTTPS_PORT:-443}:443",[578,2854,1110],{"class":721},[578,2856,2857,2859],{"class":580,"line":1744},[578,2858,1151],{"class":1069},[578,2860,848],{"class":721},[578,2862,2863,2865],{"class":580,"line":1750},[578,2864,1101],{"class":721},[578,2866,2867],{"class":588}," .\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile:ro\n",[578,2869,2870,2872],{"class":580,"line":1761},[578,2871,1101],{"class":721},[578,2873,2874],{"class":588}," buzz-caddy-data:\u002Fdata\n",[578,2876,2877,2879],{"class":580,"line":2426},[578,2878,1101],{"class":721},[578,2880,2881],{"class":588}," buzz-caddy-config:\u002Fconfig\n",[578,2883,2885,2887,2889],{"class":580,"line":2884},23,[578,2886,1183],{"class":1069},[578,2888,767],{"class":721},[578,2890,1188],{"class":588},[578,2892,2894,2897],{"class":580,"line":2893},24,[578,2895,2896],{"class":1069},"    networks",[578,2898,848],{"class":721},[578,2900,2902,2904],{"class":580,"line":2901},25,[578,2903,1101],{"class":721},[578,2905,2906],{"class":588}," buzz-net\n",[578,2908,2910],{"class":580,"line":2909},26,[578,2911,740],{"emptyLinePlaceholder":739},[578,2913,2915,2917],{"class":580,"line":2914},27,[578,2916,1199],{"class":1069},[578,2918,848],{"class":721},[578,2920,2922,2925],{"class":580,"line":2921},28,[578,2923,2924],{"class":1069},"  buzz-caddy-data",[578,2926,848],{"class":721},[578,2928,2930,2933],{"class":580,"line":2929},29,[578,2931,2932],{"class":1069},"    labels",[578,2934,848],{"class":721},[578,2936,2938,2941,2943],{"class":580,"line":2937},30,[578,2939,2940],{"class":1069},"      com.buzz.volume",[578,2942,767],{"class":721},[578,2944,2945],{"class":588}," caddy-data\n",[578,2947,2949,2952],{"class":580,"line":2948},31,[578,2950,2951],{"class":1069},"  buzz-caddy-config",[578,2953,848],{"class":721},[578,2955,2957,2959],{"class":580,"line":2956},32,[578,2958,2932],{"class":1069},[578,2960,848],{"class":721},[578,2962,2964,2966,2968],{"class":580,"line":2963},33,[578,2965,2940],{"class":1069},[578,2967,767],{"class":721},[578,2969,2970],{"class":588}," caddy-config\n",[543,2972,2974],{"id":2973},"iniciar-los-contenedores-de-docker","Iniciar los contenedores de Docker",[569,2976,2978],{"className":571,"code":2977,"language":573,"meta":424,"style":424},"docker compose -f compose.yml -f compose.caddy.yml up -d\n\n#Check the Docker status\ndocker compose ps\n",[575,2979,2980,3000,3004,3009],{"__ignoreMap":424},[578,2981,2982,2984,2986,2988,2991,2993,2996,2998],{"class":580,"line":581},[578,2983,789],{"class":584},[578,2985,792],{"class":588},[578,2987,1263],{"class":588},[578,2989,2990],{"class":588}," compose.yml",[578,2992,1263],{"class":588},[578,2994,2995],{"class":588}," compose.caddy.yml",[578,2997,795],{"class":588},[578,2999,798],{"class":588},[578,3001,3002],{"class":580,"line":599},[578,3003,740],{"emptyLinePlaceholder":739},[578,3005,3006],{"class":580,"line":605},[578,3007,3008],{"class":608},"#Check the Docker status\n",[578,3010,3011,3013,3015],{"class":580,"line":612},[578,3012,789],{"class":584},[578,3014,792],{"class":588},[578,3016,3017],{"class":588}," ps\n",[433,3019],{"src":3020,"alt":3021,"style":3022},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fdocker-compose-ps-status-terminal.webp","Ventana de terminal mostrando los contenedores en ejecución para los servicios de Buzz mediante docker compose ps","max-width: 700px; width: 100%; height: auto;",[429,3024,3025,3026,3029],{},"Abre tu navegador web y navega a ",[575,3027,3028],{},"http:\u002F\u002Fbuzz.pafor.me"," para verificar que el relay esté funcionando.",[433,3031],{"src":3032,"alt":3033,"style":932},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-relay-running-browser-verification.webp","Verificación en el navegador mostrando respuesta exitosa del relay autoalojado de Buzz de Block",[538,3035,3037],{"id":3036},"paso-5-copias-de-seguridad-desde-el-primer-día","Paso 5: Copias de seguridad desde el primer día",[569,3039,3041],{"className":571,"code":3040,"language":573,"meta":424,"style":424},"mkdir -p \u002Fbuzz_backups\ncrontab -e\n",[575,3042,3043,3054],{"__ignoreMap":424},[578,3044,3045,3048,3051],{"class":580,"line":581},[578,3046,3047],{"class":584},"mkdir",[578,3049,3050],{"class":588}," -p",[578,3052,3053],{"class":588}," \u002Fbuzz_backups\n",[578,3055,3056,3059],{"class":580,"line":599},[578,3057,3058],{"class":584},"crontab",[578,3060,3061],{"class":588}," -e\n",[429,3063,3064],{},"Agrega una tarea cron nocturna para el volcado de la base de datos:",[569,3066,3069],{"className":3067,"code":3068,"language":2496},[2494],"0 3 * * * cd \u002Fhome\u002F\u003Cuser>\u002Fbuzz\u002Fdeploy\u002Fcompose && docker compose exec -T postgres pg_dump -U buzz buzz > \u002Fbuzz_backups\u002Fbuzz-$(date +\\%Y\\%m\\%d).sql\n",[575,3070,3068],{"__ignoreMap":424},[429,3072,3073],{},"Nota: Trata BUZZ_RELAY_PRIVATE_KEY como permanente. Los eventos firmados por ella fallarán en la verificación si la clave cambia; una base de datos restaurada emparejada con una clave nueva no se tratará como el mismo relay.",[493,3075,3077],{"id":3076},"configuración-del-cliente-de-escritorio-buzz-y-las-identidades-de-nostr","Configuración del cliente de escritorio Buzz y las identidades de Nostr",[429,3079,3080,3081,3085],{},"Descarga la aplicación de escritorio Buzz desde ",[442,3082,3083],{"href":3083,"rel":3084},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Freleases",[446]," e iníciala. Completa los detalles del perfil hasta llegar a la página \"Join or create a community\".",[429,3087,3088],{},[433,3089],{"alt":3090,"src":3091},"Pantalla de configuración inicial del cliente de escritorio Buzz para unirse o crear una comunidad","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-setup-community.webp",[429,3093,3094],{},"Haz clic en \"Join a community\" y copia tu clave pública.",[429,3096,3097],{},[433,3098],{"alt":3099,"src":3100},"Visualización del cliente Buzz mostrando la identidad de clave pública antes de unirse a la comunidad","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-join-community-public-key.webp",[429,3102,3103,3104,3106],{},"Ejecuta el siguiente comando en el ",[462,3105,470],{}," para agregarte como primer miembro:",[569,3108,3110],{"className":571,"code":3109,"language":573,"meta":424,"style":424},"docker compose exec relay buzz-admin add-member --pubkey npub1yourkeyhere\n",[575,3111,3112],{"__ignoreMap":424},[578,3113,3114,3116,3118,3121,3124,3127,3130,3133],{"class":580,"line":581},[578,3115,789],{"class":584},[578,3117,792],{"class":588},[578,3119,3120],{"class":588}," exec",[578,3122,3123],{"class":588}," relay",[578,3125,3126],{"class":588}," buzz-admin",[578,3128,3129],{"class":588}," add-member",[578,3131,3132],{"class":588}," --pubkey",[578,3134,3135],{"class":588}," npub1yourkeyhere\n",[429,3137,2565,3138,3141],{},[575,3139,3140],{},"wss:\u002F\u002Fbuzz.pafor.me"," como la URL de la comunidad y haz clic en \"Next\".",[429,3143,3144],{},[433,3145],{"alt":3146,"src":3147},"Ingresando la URL del relay de la comunidad autoalojada en la aplicación de escritorio Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-input-community-url.webp",[429,3149,3150],{},"Ingresa un nombre y haz clic en el botón Next.",[429,3152,3153],{},[433,3154],{"alt":3155,"src":3156},"Pantalla de configuración de perfil en la aplicación Buzz para ingresar el nombre de pantalla","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-profile-name-input.webp",[538,3158,3160],{"id":3159},"canales-y-agentes","Canales y agentes",[429,3162,3163],{},"Los canales son grupos de tareas o grupos de proyectos. Crea un canal por tarea o proyecto e incorpora a los humanos y agentes.",[429,3165,3166],{},"Todo lo que está dentro de un canal se comparte automáticamente, lo que elimina la necesidad de instruir a cada miembro individualmente. Cada agente se puede mencionar usando @ y lee los mensajes relevantes. Además, los agentes pueden @-mencionarse entre sí.",[429,3168,3169],{},"Enviemos un mensaje directo a un agente preconfigurado",[429,3171,3172],{},[433,3173],{"alt":3174,"src":3175},"Enviando mensaje directo a un agente de IA en el cliente de escritorio colaborativo Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-dm-agent.webp",[429,3177,3178],{},"Creemos un canal y agreguemos algunos agentes a él",[429,3180,3181],{},[433,3182],{"alt":3183,"src":3184},"Creando un nuevo canal de tarea o proyecto dentro de la aplicación de escritorio Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-create-channel-dialog.webp",[429,3186,3187],{},[433,3188],{"alt":3189,"src":3190},"Agregando miembros humanos y agentes de IA al canal recién creado","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-add-agents-to-channel.webp",[429,3192,3193],{},[433,3194],{"alt":3195,"src":3196},"Vista de canal activo que muestra el historial de chat unificado y las tareas del proyecto","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-channel-view.webp",[433,3198],{"src":3199,"alt":3200,"style":3201},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-channel-active-agents.webp","Vista detallada de los agentes de IA activos integrados en el canal del proyecto colaborativo","max-width: 367px; width: 100%; height: auto;",[538,3203,3205],{"id":3204},"habilitar-runtimes-de-agentes","Habilitar runtimes de agentes",[429,3207,3208,3209,3212,3213,3216],{},"Los runtimes predeterminados dependen de la autodetección que busca binarios de ejecución (como ",[575,3210,3211],{},"hermes-acp",") en directorios estándar como ",[575,3214,3215],{},"~\u002F.local\u002Fbin",". Si una herramienta se instaló en una ubicación no estándar, Buzz no podrá resolverla.",[429,3218,3219,3220,3223],{},"Para Kimi Code, el ID del agente es kimi, y Buzz busca su binario en ",[575,3221,3222],{},"~\u002F.local\u002Fbin\u002Fkimi",". Un enlace simbólico servirá:",[569,3225,3228],{"className":3226,"code":3227,"language":2496},[2494],"ln -s kimi-cli \u002FUsers\u002F\u003Cuser>\u002F.local\u002Fbin\u002Fkimi\n",[575,3229,3227],{"__ignoreMap":424},[429,3231,3232],{},"Kimi Code ahora aparece en los runtimes de agentes.",[429,3234,3235],{},[433,3236],{"alt":3237,"src":3238},"Configuración de la aplicación Buzz mostrando los runtimes de agentes de IA configurados, incluyendo Kimi","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-agent-runtimes-list.webp",[538,3240,3242],{"id":3241},"proyectos-y-repositorios","Proyectos y repositorios",[429,3244,3245,3246,3249],{},"Habilita primero la función '",[462,3247,3248],{},"Projects","' en Settings → Experiments:",[429,3251,3252],{},[433,3253],{"alt":3254,"src":3255},"Habilitando la función experimental Projects en la pestaña de configuración de Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-experiments-projects.webp",[429,3257,3258,3259,3262],{},"Actualmente, un proyecto debe crearse utilizando la herramienta ",[575,3260,3261],{},"buzz-cli"," (aunque se planea la creación directa de proyectos desde la interfaz de usuario para una versión futura).",[543,3264,3266],{"id":3265},"instalar-buzz-cli","Instalar buzz-cli",[429,3268,3269,3270,2598,3272,767],{},"Ejecuta los siguientes comandos para instalar ",[575,3271,3261],{},[462,3273,470],{},[569,3275,3277],{"className":571,"code":3276,"language":573,"meta":424,"style":424},"sudo apt install cargo\ncd ~\u002Fbuzz\ncargo install --path crates\u002Fbuzz-cli\necho 'export PATH=\"$HOME\u002F.cargo\u002Fbin:$PATH\"' >> ~\u002F.bashrc && source ~\u002F.bashrc\n",[575,3278,3279,3290,3297,3310],{"__ignoreMap":424},[578,3280,3281,3283,3285,3287],{"class":580,"line":581},[578,3282,1315],{"class":584},[578,3284,2328],{"class":588},[578,3286,2349],{"class":588},[578,3288,3289],{"class":588}," cargo\n",[578,3291,3292,3294],{"class":580,"line":599},[578,3293,616],{"class":615},[578,3295,3296],{"class":588}," ~\u002Fbuzz\n",[578,3298,3299,3302,3304,3307],{"class":580,"line":605},[578,3300,3301],{"class":584},"cargo",[578,3303,2349],{"class":588},[578,3305,3306],{"class":588}," --path",[578,3308,3309],{"class":588}," crates\u002Fbuzz-cli\n",[578,3311,3312,3314,3317,3320,3323,3326,3329,3332,3335],{"class":580,"line":612},[578,3313,2275],{"class":615},[578,3315,3316],{"class":721}," '",[578,3318,3319],{"class":588},"export PATH=\"$HOME\u002F.cargo\u002Fbin:$PATH\"",[578,3321,3322],{"class":721},"'",[578,3324,3325],{"class":721}," >>",[578,3327,3328],{"class":588}," ~\u002F.bashrc",[578,3330,3331],{"class":721}," &&",[578,3333,3334],{"class":615}," source",[578,3336,3337],{"class":588}," ~\u002F.bashrc\n",[429,3339,3340,3341,3344,3345,3347,3348,3350],{},"Genera un par de claves privada y pública usando la ",[442,3342,2523],{"href":3343},"\u002Fes\u002Ftools\u002Fnostr-key-generator"," o ",[575,3346,3261],{},". Este par constituirá la identidad de ",[575,3349,3261],{}," en el relay de Nostr.",[569,3352,3354],{"className":571,"code":3353,"language":573,"meta":424,"style":424},"docker run --rm --entrypoint \u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-admin ghcr.io\u002Fblock\u002Fbuzz:main generate-key\n\n# Use the generated Public Key\ndocker compose exec relay buzz-admin add-member --pubkey generated_Public_key\n",[575,3355,3356,3378,3382,3387],{"__ignoreMap":424},[578,3357,3358,3360,3363,3366,3369,3372,3375],{"class":580,"line":581},[578,3359,789],{"class":584},[578,3361,3362],{"class":588}," run",[578,3364,3365],{"class":588}," --rm",[578,3367,3368],{"class":588}," --entrypoint",[578,3370,3371],{"class":588}," \u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-admin",[578,3373,3374],{"class":588}," ghcr.io\u002Fblock\u002Fbuzz:main",[578,3376,3377],{"class":588}," generate-key\n",[578,3379,3380],{"class":580,"line":599},[578,3381,740],{"emptyLinePlaceholder":739},[578,3383,3384],{"class":580,"line":605},[578,3385,3386],{"class":608},"# Use the generated Public Key\n",[578,3388,3389,3391,3393,3395,3397,3399,3401,3403],{"class":580,"line":612},[578,3390,789],{"class":584},[578,3392,792],{"class":588},[578,3394,3120],{"class":588},[578,3396,3123],{"class":588},[578,3398,3126],{"class":588},[578,3400,3129],{"class":588},[578,3402,3132],{"class":588},[578,3404,3405],{"class":588}," generated_Public_key\n",[429,3407,3408],{},"Configura la CLI:",[569,3410,3412],{"className":571,"code":3411,"language":573,"meta":424,"style":424},"# Copy the Secret key as the BUZZ_PRIVATE_KEY\necho 'export BUZZ_PRIVATE_KEY=\"nsec1...\"'  >> \u002Fhome\u002F\u003Cuser>\u002F.bashrc\n\necho 'export BUZZ_RELAY_URL=\"wss:\u002F\u002Fbuzz.pafor.me\"'  >> \u002Fhome\u002F\u003Cuser>\u002F.bashrc\n",[575,3413,3414,3419,3451,3455],{"__ignoreMap":424},[578,3415,3416],{"class":580,"line":581},[578,3417,3418],{"class":608},"# Copy the Secret key as the BUZZ_PRIVATE_KEY\n",[578,3420,3421,3423,3425,3428,3430,3433,3436,3439,3442,3445,3448],{"class":580,"line":599},[578,3422,2275],{"class":615},[578,3424,3316],{"class":721},[578,3426,3427],{"class":588},"export BUZZ_PRIVATE_KEY=\"nsec1...\"",[578,3429,3322],{"class":721},[578,3431,3432],{"class":721},"  >>",[578,3434,3435],{"class":588}," \u002Fhome\u002F",[578,3437,3438],{"class":721},"\u003C",[578,3440,3441],{"class":588},"use",[578,3443,3444],{"class":595},"r",[578,3446,3447],{"class":721},">",[578,3449,3450],{"class":588},"\u002F.bashrc\n",[578,3452,3453],{"class":580,"line":605},[578,3454,740],{"emptyLinePlaceholder":739},[578,3456,3457,3459,3461,3464,3466,3468,3470,3472,3474,3476,3478],{"class":580,"line":612},[578,3458,2275],{"class":615},[578,3460,3316],{"class":721},[578,3462,3463],{"class":588},"export BUZZ_RELAY_URL=\"wss:\u002F\u002Fbuzz.pafor.me\"",[578,3465,3322],{"class":721},[578,3467,3432],{"class":721},[578,3469,3435],{"class":588},[578,3471,3438],{"class":721},[578,3473,3441],{"class":588},[578,3475,3444],{"class":595},[578,3477,3447],{"class":721},[578,3479,3450],{"class":588},[429,3481,3482,3483,3485],{},"Ejecuta el siguiente comando para verificar que ",[575,3484,3261],{}," esté configurado correctamente:",[569,3487,3489],{"className":571,"code":3488,"language":573,"meta":424,"style":424},"buzz channels list\n",[575,3490,3491],{"__ignoreMap":424},[578,3492,3493,3496,3499],{"class":580,"line":581},[578,3494,3495],{"class":584},"buzz",[578,3497,3498],{"class":588}," channels",[578,3500,3501],{"class":588}," list\n",[429,3503,3504],{},[433,3505],{"alt":3506,"src":3507},"Ejecución de comando en terminal verificando la configuración de buzz-cli al listar los canales activos","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-cli-channels-list-terminal.webp",[543,3509,3511],{"id":3510},"crear-un-proyecto-con-buzz-cli","Crear un proyecto con buzz-cli",[569,3513,3515],{"className":571,"code":3514,"language":573,"meta":424,"style":424},"# --channel refers to the UUID of the channel\nbuzz repos create --id TestKOA --name 'Display Name' --channel \"bd92b3d1-8fac-441c-a9ac-2b2f3aac5c5b\"\n",[575,3516,3517,3522],{"__ignoreMap":424},[578,3518,3519],{"class":580,"line":581},[578,3520,3521],{"class":608},"# --channel refers to the UUID of the channel\n",[578,3523,3524,3526,3529,3532,3535,3538,3541,3543,3546,3548,3551,3553,3556],{"class":580,"line":599},[578,3525,3495],{"class":584},[578,3527,3528],{"class":588}," repos",[578,3530,3531],{"class":588}," create",[578,3533,3534],{"class":588}," --id",[578,3536,3537],{"class":588}," TestKOA",[578,3539,3540],{"class":588}," --name",[578,3542,3316],{"class":721},[578,3544,3545],{"class":588},"Display Name",[578,3547,3322],{"class":721},[578,3549,3550],{"class":588}," --channel",[578,3552,1104],{"class":721},[578,3554,3555],{"class":588},"bd92b3d1-8fac-441c-a9ac-2b2f3aac5c5b",[578,3557,1110],{"class":721},[429,3559,3560,3561,3563],{},"Un proyecto solo puede ser eliminado por su propietario. Dado que el proyecto \"Display Name\" fue creado por ",[575,3562,3261],{},", que carece de un comando de eliminación, no se puede borrar de esta manera.",[429,3565,3566],{},"Vuelve a consultar la aplicación de escritorio Buzz para verificar que el proyecto se haya creado.",[429,3568,3569],{},[433,3570],{"alt":3571,"src":3572},"Vista de proyectos de la aplicación Buzz confirmando la creación exitosa del proyecto","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-project-view.webp",[429,3574,3575],{},"Una vez que un proyecto está disponible en Projects, se pueden agregar más proyectos usando el botón \"+\" en la esquina superior derecha.",[429,3577,3578],{},[433,3579],{"alt":3580,"src":3581},"Agregando nuevos proyectos de desarrollador usando el icono más en el cliente Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-add-project-button.webp",[543,3583,3585],{"id":3584},"vincular-repositorios-git-existentes","Vincular repositorios Git existentes",[429,3587,3588,3589,3592,3593,3596,3597,767],{},"Instala ",[575,3590,3591],{},"git-credential-nostr"," en la máquina donde están los repositorios de git. Requiere ",[462,3594,3595],{},"git 2.46+"," y el conjunto de herramientas Rust. Consulta este archivo ",[442,3598,3601],{"href":3599,"rel":3600},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Ftree\u002Fmain\u002Fcrates\u002Fgit-credential-nostr",[446],"Readme",[569,3603,3605],{"className":571,"code":3604,"language":573,"meta":424,"style":424},"cargo install --path crates\u002Fgit-credential-nostr\n",[575,3606,3607],{"__ignoreMap":424},[578,3608,3609,3611,3613,3615],{"class":580,"line":581},[578,3610,3301],{"class":584},[578,3612,2349],{"class":588},[578,3614,3306],{"class":588},[578,3616,3617],{"class":588}," crates\u002Fgit-credential-nostr\n",[429,3619,3620,3621,3623],{},"Configura ",[575,3622,3591],{}," para la autorización del relay de Buzz:",[569,3625,3627],{"className":571,"code":3626,"language":573,"meta":424,"style":424},"# 1. Register the helper and enable per-path credentials.\ngit config --global credential.helper nostr\ngit config --global credential.useHttpPath true\n\n# 2. Store your nsec in a key file (must be 0600). Replace \"nsec1...\" with your private key\nmkdir -p ~\u002F.nostr\necho \"nsec1...\" > ~\u002F.nostr\u002Fkey && chmod 600 ~\u002F.nostr\u002Fkey\ngit config --global nostr.keyfile ~\u002F.nostr\u002Fkey\n",[575,3628,3629,3634,3650,3664,3668,3673,3682,3709],{"__ignoreMap":424},[578,3630,3631],{"class":580,"line":581},[578,3632,3633],{"class":608},"# 1. Register the helper and enable per-path credentials.\n",[578,3635,3636,3638,3641,3644,3647],{"class":580,"line":599},[578,3637,585],{"class":584},[578,3639,3640],{"class":588}," config",[578,3642,3643],{"class":588}," --global",[578,3645,3646],{"class":588}," credential.helper",[578,3648,3649],{"class":588}," nostr\n",[578,3651,3652,3654,3656,3658,3661],{"class":580,"line":605},[578,3653,585],{"class":584},[578,3655,3640],{"class":588},[578,3657,3643],{"class":588},[578,3659,3660],{"class":588}," credential.useHttpPath",[578,3662,3663],{"class":721}," true\n",[578,3665,3666],{"class":580,"line":612},[578,3667,740],{"emptyLinePlaceholder":739},[578,3669,3670],{"class":580,"line":622},[578,3671,3672],{"class":608},"# 2. Store your nsec in a key file (must be 0600). Replace \"nsec1...\" with your private key\n",[578,3674,3675,3677,3679],{"class":580,"line":627},[578,3676,3047],{"class":584},[578,3678,3050],{"class":588},[578,3680,3681],{"class":588}," ~\u002F.nostr\n",[578,3683,3684,3686,3688,3691,3693,3695,3698,3700,3703,3706],{"class":580,"line":633},[578,3685,2275],{"class":615},[578,3687,1104],{"class":721},[578,3689,3690],{"class":588},"nsec1...",[578,3692,1525],{"class":721},[578,3694,2309],{"class":721},[578,3696,3697],{"class":588}," ~\u002F.nostr\u002Fkey",[578,3699,3331],{"class":721},[578,3701,3702],{"class":584}," chmod",[578,3704,3705],{"class":770}," 600",[578,3707,3708],{"class":588}," ~\u002F.nostr\u002Fkey\n",[578,3710,3711,3713,3715,3717,3720],{"class":580,"line":774},[578,3712,585],{"class":584},[578,3714,3640],{"class":588},[578,3716,3643],{"class":588},[578,3718,3719],{"class":588}," nostr.keyfile",[578,3721,3708],{"class":588},[429,3723,3724],{},"Crea un repositorio en el relay de Buzz:",[569,3726,3729],{"className":3727,"code":3728,"language":2496},[2494],"buzz repos create --id koa-email-routing --name \"KOA Email Routing\" --clone \"https:\u002F\u002Fbuzz.pafor.me\u002Fgit\u002F\u003Cpub_key>\u002Fkoa-email-routing\" --nostr-relay \"wss:\u002F\u002Fbuzz.pafor.me\"\n",[575,3730,3728],{"__ignoreMap":424},[429,3732,3733,3734,3737,3738,3741],{},"En tu primer ",[575,3735,3736],{},"git push",", te encontrarás con un error ",[575,3739,3740],{},"remote: missing Authorization header",". Para resolver esto, debes vincular el ID del repositorio a un canal de Buzz, ya que la membresía del canal determina los permisos de escritura de Git (ACL):",[569,3743,3745],{"className":571,"code":3744,"language":573,"meta":424,"style":424},"buzz repos bind --id koa-email-routing --channel \u003CCHANNEL_UUID>\n\n# push the code again\ngit push\n",[575,3746,3747,3775,3779,3784],{"__ignoreMap":424},[578,3748,3749,3751,3753,3756,3758,3761,3763,3766,3769,3772],{"class":580,"line":581},[578,3750,3495],{"class":584},[578,3752,3528],{"class":588},[578,3754,3755],{"class":588}," bind",[578,3757,3534],{"class":588},[578,3759,3760],{"class":588}," koa-email-routing",[578,3762,3550],{"class":588},[578,3764,3765],{"class":721}," \u003C",[578,3767,3768],{"class":588},"CHANNEL_UUI",[578,3770,3771],{"class":595},"D",[578,3773,3774],{"class":721},">\n",[578,3776,3777],{"class":580,"line":599},[578,3778,740],{"emptyLinePlaceholder":739},[578,3780,3781],{"class":580,"line":605},[578,3782,3783],{"class":608},"# push the code again\n",[578,3785,3786,3788],{"class":580,"line":612},[578,3787,585],{"class":584},[578,3789,3790],{"class":588}," push\n",[429,3792,3793,3794,3796],{},"Al verificar el proyecto en la aplicación de escritorio Buzz se muestra lo siguiente, porque la aplicación necesita ",[462,3795,3595],{}," — al iniciar la aplicación directamente puede que se use una versión anterior de Git:",[429,3798,3799],{},[433,3800],{"alt":3801,"src":3802},"El cliente Buzz muestra error de carga de Git debido a una versión local de Git desactualizada inferior a 2.46","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-git-version-error.webp",[429,3804,3805,3806,3809,3810,694],{},"Exporta el PATH mediante ",[575,3807,3808],{},"launchctl setenv PATH \"\u002Fopt\u002Fhomebrew\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin:\u002Fusr\u002Fsbin:\u002Fsbin\""," en el perfil de la shell e inicia la aplicación Buzz desde la shell. Consulta esta ",[442,3811,3814],{"href":3812,"rel":3813},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Fissues\u002F5348",[446],"incidencia",[569,3816,3818],{"className":571,"code":3817,"language":573,"meta":424,"style":424},"open -a Buzz\n",[575,3819,3820],{"__ignoreMap":424},[578,3821,3822,3825,3828],{"class":580,"line":581},[578,3823,3824],{"class":584},"open",[578,3826,3827],{"class":588}," -a",[578,3829,3830],{"class":588}," Buzz\n",[429,3832,3833],{},"Vuelve a consultar los Proyectos en la aplicación Buzz, los detalles del repositorio ahora están cargados.",[429,3835,3836],{},[433,3837],{"alt":3838,"src":3839},"Interfaz de escritorio Buzz con detalles del repositorio Git y registros de commits cargados correctamente","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-repository-details-loaded.webp",[493,3841,3843],{"id":3842},"sincronización-de-agentes-de-ia-con-la-aplicación-móvil-buzz-mediante-código-qr","Sincronización de agentes de IA con la aplicación móvil Buzz mediante código QR",[429,3845,3846,3847,3850],{},"El emparejamiento de la aplicación móvil Buzz solo acepta el protocolo HTTPS y el servicio ",[575,3848,3849],{},"buzz-pair-relay"," no se inicia de forma predeterminada en el VPS.",[569,3852,3854],{"className":571,"code":3853,"language":573,"meta":424,"style":424},"cd ~\u002Fbuzz\ncargo install --path crates\u002Fbuzz-pair-relay\n",[575,3855,3856,3862],{"__ignoreMap":424},[578,3857,3858,3860],{"class":580,"line":581},[578,3859,616],{"class":615},[578,3861,3296],{"class":588},[578,3863,3864,3866,3868,3870],{"class":580,"line":599},[578,3865,3301],{"class":584},[578,3867,2349],{"class":588},[578,3869,3306],{"class":588},[578,3871,3872],{"class":588}," crates\u002Fbuzz-pair-relay\n",[429,3874,3875,3876,3879,3880,767],{},"Agrega lo siguiente a ",[575,3877,3878],{},"compose.yml"," para iniciar el servicio ",[575,3881,3849],{},[569,3883,3885],{"className":1060,"code":3884,"language":1062,"meta":424,"style":424},"  pair:\n    image: ${BUZZ_IMAGE:-ghcr.io\u002Fblock\u002Fbuzz:main}\n    entrypoint: [\"\u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-pair-relay\"]\n    environment:\n      BUZZ_PAIR_RELAY_BIND_ADDR: 0.0.0.0:5000\n    ports:\n      - \"${BUZZ_PAIR_RELAY_PORT:-5000}:5000\"\n    restart: unless-stopped\n    networks:\n      [buzz-net]\n",[575,3886,3887,3894,3903,3923,3929,3939,3945,3956,3964,3970],{"__ignoreMap":424},[578,3888,3889,3892],{"class":580,"line":581},[578,3890,3891],{"class":1069},"  pair",[578,3893,848],{"class":721},[578,3895,3896,3898,3900],{"class":580,"line":599},[578,3897,1084],{"class":1069},[578,3899,767],{"class":721},[578,3901,3902],{"class":588}," ${BUZZ_IMAGE:-ghcr.io\u002Fblock\u002Fbuzz:main}\n",[578,3904,3905,3908,3910,3913,3915,3918,3920],{"class":580,"line":605},[578,3906,3907],{"class":1069},"    entrypoint",[578,3909,767],{"class":721},[578,3911,3912],{"class":721}," [",[578,3914,1525],{"class":721},[578,3916,3917],{"class":588},"\u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-pair-relay",[578,3919,1525],{"class":721},[578,3921,3922],{"class":721},"]\n",[578,3924,3925,3927],{"class":580,"line":612},[578,3926,1115],{"class":1069},[578,3928,848],{"class":721},[578,3930,3931,3934,3936],{"class":580,"line":622},[578,3932,3933],{"class":1069},"      BUZZ_PAIR_RELAY_BIND_ADDR",[578,3935,767],{"class":721},[578,3937,3938],{"class":588}," 0.0.0.0:5000\n",[578,3940,3941,3943],{"class":580,"line":627},[578,3942,1094],{"class":1069},[578,3944,848],{"class":721},[578,3946,3947,3949,3951,3954],{"class":580,"line":633},[578,3948,1101],{"class":721},[578,3950,1104],{"class":721},[578,3952,3953],{"class":588},"${BUZZ_PAIR_RELAY_PORT:-5000}:5000",[578,3955,1110],{"class":721},[578,3957,3958,3960,3962],{"class":580,"line":774},[578,3959,1183],{"class":1069},[578,3961,767],{"class":721},[578,3963,1188],{"class":588},[578,3965,3966,3968],{"class":580,"line":1132},[578,3967,2896],{"class":1069},[578,3969,848],{"class":721},[578,3971,3972,3975,3978],{"class":580,"line":1140},[578,3973,3974],{"class":721},"      [",[578,3976,3977],{"class":588},"buzz-net",[578,3979,3922],{"class":721},[429,3981,2565,3982,663,3985,3988,3989,767],{},[575,3983,3984],{},"BUZZ_PAIRING_RELAY_URL",[575,3986,3987],{},"BUZZ_PAIR_RELAY_PORT"," al archivo ",[575,3990,649],{},[569,3992,3995],{"className":3993,"code":3994,"language":2496},[2494],"BUZZ_PAIRING_RELAY_URL=wss:\u002F\u002Fbuzz.pafor.me\u002Fpair\nBUZZ_PAIR_RELAY_PORT=5000\n",[575,3996,3994],{"__ignoreMap":424},[429,3998,3999,4000,4003],{},"Dirígete a '",[462,4001,4002],{},"Mobile","' en la configuración de la aplicación de escritorio Buzz:",[429,4005,4006],{},[433,4007],{"alt":4008,"src":4009},"Diálogo de configuración en la aplicación Buzz mostrando la pestaña de configuración de dispositivos móviles","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-mobile-tab.webp",[429,4011,4012],{},"Haz clic en \"Start pairing\": se generará un código QR; escanea este código QR con la aplicación Buzz en el dispositivo móvil. Se emparejará después de hacer clic en \"Code Match\".",[429,4014,4015],{},[433,4016],{"alt":4017,"src":4018},"Generando código QR de emparejamiento seguro en el cliente de escritorio para sincronización móvil Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-pairing-qr-code.webp",[429,4020,4021],{},"Los agentes en la aplicación móvil de Buzz solo están disponibles si se están ejecutando en la aplicación de escritorio de Buzz. La máquina de escritorio debe estar encendida para que los agentes funcionen.",[429,4023,4024],{},[433,4025],{"alt":4026,"src":4027},"Interfaz de la aplicación móvil Buzz mostrando los agentes de IA activos sincronizados","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-mobile-app-active-agents.webp",[493,4029,4031],{"id":4030},"reflexión-final","Reflexión final",[429,4033,4034],{},"Aunque Buzz todavía se encuentra en una etapa muy temprana para entornos de producción a gran escala, con varios errores y limitaciones en la interfaz de usuario, es una experiencia emocionante para equipos pequeños y desarrolladores individuales. Ofrece un adelanto de cómo se siente realmente un espacio de trabajo colaborativo diseñado especialmente para la inteligencia artificial.",[493,4036,1871],{"id":1870},[503,4038,4039,4046,4053,4060],{},[506,4040,4041],{},[442,4042,4045],{"href":4043,"rel":4044},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz",[446],"Buzz releases",[506,4047,4048],{},[442,4049,4052],{"href":4050,"rel":4051},"https:\u002F\u002Fblock.xyz\u002Finside\u002Fintroducing-buzz-where-humans-and-agents-work-together",[446],"Introducing Buzz",[506,4054,4055],{},[442,4056,4059],{"href":4057,"rel":4058},"https:\u002F\u002Fwww.hostinger.com\u002Ftutorials\u002Fwhat-is-buzz",[446],"What is buzz",[506,4061,4062],{},[442,4063,4066],{"href":4064,"rel":4065},"https:\u002F\u002Fmiget.com\u002Fblog\u002Fhow-to-self-host-buzz",[446],"How to self-host Buzz (Miget)",[1896,4068,4069],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":424,"searchDepth":599,"depth":605,"links":4071},[4072,4073,4074,4088,4097,4098,4099],{"id":1970,"depth":599,"text":1971},{"id":2015,"depth":599,"text":2016},{"id":2063,"depth":599,"text":2064,"children":4075},[4076,4077,4081,4082,4083,4087],{"id":2067,"depth":605,"text":2068},{"id":2097,"depth":605,"text":2098,"children":4078},[4079,4080],{"id":2101,"depth":612,"text":2102},{"id":2201,"depth":612,"text":2202},{"id":2219,"depth":605,"text":2220},{"id":2436,"depth":605,"text":2437},{"id":2584,"depth":605,"text":2585,"children":4084},[4085,4086],{"id":2588,"depth":612,"text":2589},{"id":2973,"depth":612,"text":2974},{"id":3036,"depth":605,"text":3037},{"id":3076,"depth":599,"text":3077,"children":4089},[4090,4091,4092],{"id":3159,"depth":605,"text":3160},{"id":3204,"depth":605,"text":3205},{"id":3241,"depth":605,"text":3242,"children":4093},[4094,4095,4096],{"id":3265,"depth":612,"text":3266},{"id":3510,"depth":612,"text":3511},{"id":3584,"depth":612,"text":3585},{"id":3842,"depth":599,"text":3843},{"id":4030,"depth":599,"text":4031},{"id":1870,"depth":599,"text":1871},[4101,4102,3495],"collaboration","ai-agents","2026-09-08","Aprende 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.",{"schemaOrg":4108,"robots":1934,"sitemap":4129},[4109,4111],{"@type":4110,"headline":702,"description":4104,"image":4105},"TechArticle",{"@type":1933,"name":702,"description":4104,"image":4105,"step":4112},[4113,4117,4120,4123,4126],{"@type":4114,"name":4115,"text":4116},"HowToStep","Fase 1: Configuración de Cloudflare","Crear un token de API de Cloudflare y configurar los ajustes de DNS.",{"@type":4114,"name":4118,"text":4119},"Fase 2: Instalar Docker","Configurar e instalar Docker Engine en el VPS Ubuntu.",{"@type":4114,"name":4121,"text":4122},"Fase 3: Clonar y configurar","Clonar el repositorio y configurar las variables de compose.",{"@type":4114,"name":4124,"text":4125},"Fase 4: Integración de Caddy","Compilar un Caddy personalizado con el módulo de desafío de DNS de Cloudflare.",{"@type":4114,"name":4127,"text":4128},"Fase 5: Copia de seguridad automatizada","Configurar una tarea cron para respaldar automáticamente PostgreSQL.",{"lastmod":4130},"2026-09-03",{"title":4132,"description":4104,"ogTitle":702,"ogDescription":4104,"twitterTitle":702,"twitterDescription":4104},"Cómo instalar y autoalojar el relay de Buzz de Block en VPS","es\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",[4135,4136,1966,4137,4138],"Nostr","Docker","Caddy","Cloudflare","lURqc67rsxryYNK-aIxLymy3oKyalHndZyE0VbcVtWc",{"id":4141,"title":2088,"author":424,"body":4142,"category":5014,"date":5016,"description":5017,"extension":1925,"image":2093,"imageAlt":5018,"isPublished":739,"meta":5019,"minRead":1132,"navigation":739,"path":79,"seo":5053,"stem":5055,"tags":5056,"updatedAt":5052,"__hash__":5059},"article\u002Fes\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp.md",{"type":426,"value":4143,"toc":4996},[4144,4158,4168,4172,4175,4187,4191,4199,4203,4207,4256,4260,4390,4394,4428,4432,4435,4499,4502,4538,4541,4568,4572,4582,4586,4624,4712,4716,4721,4738,4747,4817,4822,4867,4871,4916,4931,4935,4979,4983,4993],[429,4145,4146,4147,4150,4151,4154,4155,4157],{},"Un desafío común surge cuando desea acceder a su ",[462,4148,4149],{},"Hermes Agent"," desde otros dispositivos como portátiles, tabletas o teléfonos sin exponerlo a la Internet pública. El uso de ",[462,4152,4153],{},"Cloudflare WARP"," junto con ",[462,4156,476],{}," le permite exponer el Hermes Agent a nivel mundial sin necesidad de abrir un solo puerto de entrada en su firewall.",[429,4159,4160,4161,4164,4165,4167],{},"Si siguió nuestra guía anterior, '",[442,4162,4163],{"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 ",[462,4166,4153],{}," para exponer el Hermes Agent a una red privada a través de Internet.",[493,4169,4171],{"id":4170},"comprender-la-arquitectura","Comprender la arquitectura",[429,4173,4174],{},"Los componentes en juego:",[2104,4176,4177,4182],{},[506,4178,4179,4181],{},[462,4180,476],{},": El panel de control en Cloudflare donde define reglas de enrutamiento y políticas de acceso.",[506,4183,4184,4186],{},[462,4185,4153],{},": 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.",[538,4188,4190],{"id":4189},"requisitos-previos","Requisitos previos",[503,4192,4193,4196],{},[506,4194,4195],{},"Un Hermes Agent en ejecución en su VPS.",[506,4197,4198],{},"Una cuenta gratuita de Cloudflare.",[493,4200,4202],{"id":4201},"guía-paso-a-paso","Guía paso a paso",[538,4204,4206],{"id":4205},"paso-1-configurar-cloudflare-zero-trust","Paso 1: Configurar Cloudflare Zero Trust",[2104,4208,4209,4217,4224,4235,4242,4249],{},[506,4210,4211,4212,694],{},"Inicie sesión en su ",[442,4213,4216],{"href":4214,"rel":4215},"https:\u002F\u002Fdash.cloudflare.com\u002F",[446],"Panel de Cloudflare",[506,4218,4219,4220],{},"Haga clic en 'Zero Trust' en el menú de la izquierda.\n",[433,4221],{"alt":4222,"src":4223},"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",[506,4225,4226,4227,4230,4231],{},"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, ",[575,4228,4229],{},"ai-team",").\n",[433,4232],{"alt":4233,"src":4234},"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",[506,4236,4237,4238],{},"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",[433,4239],{"alt":4240,"src":4241},"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",[506,4243,4244,4245],{},"Haga clic en 'Create new policy'.\n",[433,4246],{"alt":4247,"src":4248},"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",[506,4250,4251,4252],{},"Seleccione 'Emails' e introduzca su correo electrónico en 'Policy rules'.\n",[433,4253],{"alt":4254,"src":4255},"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",[538,4257,4259],{"id":4258},"paso-2-configurar-el-cliente-cloudflare-warp-en-el-vps","Paso 2: Configurar el cliente Cloudflare WARP en el VPS",[2104,4261,4262,4271,4277,4284,4287,4302,4305,4383],{},[506,4263,1567,4264,663,4267,4270],{},[575,4265,4266],{},"sudo apt update",[575,4268,4269],{},"sudo apt install cloudflare-warp"," en la terminal de su VPS.",[506,4272,1567,4273,4276],{},[575,4274,4275],{},"warp-cli registration new \u003CTEAM-NAME>"," en la terminal de su VPS, lo cual imprimirá una URL.",[506,4278,4279,4280,4283],{},"Copie la URL impresa, que se verá como ",[575,4281,4282],{},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fwarp",", y péguela en su navegador para la autenticación.",[506,4285,4286],{},"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.",[506,4288,4289,4290,4293,4294,4297,4298,4301],{},"En la página de '",[462,4291,4292],{},"Success","' (Éxito) en el navegador, haga clic derecho y seleccione '",[462,4295,4296],{},"Inspect","' (Inspeccionar) en el botón azul '",[462,4299,4300],{},"Open Cloudflare WARP","'.",[506,4303,4304],{},"Copie el token largo que se muestra en el enlace del botón.",[506,4306,1567,4307,4310,4311,4314,4315],{},[575,4308,4309],{},"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.",[4312,4313],"br",{},"Si encuentra el error 'Error: Failed to communicate with the WARP API' en Ubuntu 26, ejecute los siguientes comandos:",[569,4316,4318],{"className":571,"code":4317,"language":573,"meta":424,"style":424},"sudo systemctl restart warp-svc.service\n\n# Check status\nsudo systemctl status warp-svc.service\n\n# Run the warp-cli registration token again\nwarp-cli --accept-tos registration token   \"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>\"\n",[575,4319,4320,4332,4336,4341,4352,4356,4361],{"__ignoreMap":424},[578,4321,4322,4324,4326,4329],{"class":580,"line":581},[578,4323,1315],{"class":584},[578,4325,1755],{"class":588},[578,4327,4328],{"class":588}," restart",[578,4330,4331],{"class":588}," warp-svc.service\n",[578,4333,4334],{"class":580,"line":599},[578,4335,740],{"emptyLinePlaceholder":739},[578,4337,4338],{"class":580,"line":605},[578,4339,4340],{"class":608},"# Check status\n",[578,4342,4343,4345,4347,4350],{"class":580,"line":612},[578,4344,1315],{"class":584},[578,4346,1755],{"class":588},[578,4348,4349],{"class":588}," status",[578,4351,4331],{"class":588},[578,4353,4354],{"class":580,"line":622},[578,4355,740],{"emptyLinePlaceholder":739},[578,4357,4358],{"class":580,"line":627},[578,4359,4360],{"class":608},"# Run the warp-cli registration token again\n",[578,4362,4363,4366,4369,4372,4375,4378,4381],{"class":580,"line":633},[578,4364,4365],{"class":584},"warp-cli",[578,4367,4368],{"class":588}," --accept-tos",[578,4370,4371],{"class":588}," registration",[578,4373,4374],{"class":588}," token",[578,4376,4377],{"class":721},"   \"",[578,4379,4380],{"class":588},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>",[578,4382,1110],{"class":721},[506,4384,4385,4386],{},"Vuelva al panel de Cloudflare Zero Trust y haga clic en 'Devices' (Dispositivos). Su dispositivo VPS debería aparecer ahora.\n",[433,4387],{"alt":4388,"src":4389},"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",[538,4391,4393],{"id":4392},"paso-3-configurar-el-enrutamiento-del-tráfico","Paso 3: Configurar el enrutamiento del tráfico",[2104,4395,4396,4403,4410,4417],{},[506,4397,4398,4399],{},"Haga clic en el perfil de su VPS en el panel de Dispositivos.\n",[433,4400],{"alt":4401,"src":4402},"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",[506,4404,4405,4406],{},"Desplácese hacia abajo hasta la sección 'Split Tunnels' (Túneles divididos).\n",[433,4407],{"alt":4408,"src":4409},"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",[506,4411,4412,4413],{},"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",[433,4414],{"alt":4415,"src":4416},"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",[506,4418,4419,4420,4423,4424,4427],{},"Exponer la ",[575,4421,4422],{},"address"," (dirección) y el ",[575,4425,4426],{},"host"," enrutará el tráfico a sus servicios a través de la misma red privada.",[538,4429,4431],{"id":4430},"paso-4-configurar-el-firewall-en-el-vps","Paso 4: Configurar el firewall en el VPS",[429,4433,4434],{},"Habilite el firewall para permitir únicamente la subred '100.96.0.0\u002F12', bloqueando el resto del acceso público entrante.",[569,4436,4438],{"className":571,"code":4437,"language":573,"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",[575,4439,4440,4451,4468,4482],{"__ignoreMap":424},[578,4441,4442,4444,4447,4449],{"class":580,"line":581},[578,4443,1315],{"class":584},[578,4445,4446],{"class":588}," ufw",[578,4448,1768],{"class":588},[578,4450,1339],{"class":595},[578,4452,4453,4455,4457,4460,4463,4466],{"class":580,"line":599},[578,4454,1315],{"class":584},[578,4456,4446],{"class":588},[578,4458,4459],{"class":588}," default",[578,4461,4462],{"class":588}," allow",[578,4464,4465],{"class":588}," outgoing",[578,4467,1339],{"class":595},[578,4469,4470,4472,4474,4476,4479],{"class":580,"line":605},[578,4471,1315],{"class":584},[578,4473,4446],{"class":588},[578,4475,4459],{"class":588},[578,4477,4478],{"class":588}," deny",[578,4480,4481],{"class":588}," incoming\n",[578,4483,4484,4486,4488,4490,4493,4496],{"class":580,"line":612},[578,4485,1315],{"class":584},[578,4487,4446],{"class":588},[578,4489,4462],{"class":588},[578,4491,4492],{"class":588}," in",[578,4494,4495],{"class":588}," from",[578,4497,4498],{"class":588}," 100.96.0.0\u002F12\n",[429,4500,4501],{},"Permita el tráfico loopback para evitar interrumpir los servicios locales:",[569,4503,4505],{"className":571,"code":4504,"language":573,"meta":424,"style":424},"sudo ufw allow in on lo\nsudo ufw allow out on lo\n",[575,4506,4507,4523],{"__ignoreMap":424},[578,4508,4509,4511,4513,4515,4517,4520],{"class":580,"line":581},[578,4510,1315],{"class":584},[578,4512,4446],{"class":588},[578,4514,4462],{"class":588},[578,4516,4492],{"class":588},[578,4518,4519],{"class":588}," on",[578,4521,4522],{"class":588}," lo\n",[578,4524,4525,4527,4529,4531,4534,4536],{"class":580,"line":599},[578,4526,1315],{"class":584},[578,4528,4446],{"class":588},[578,4530,4462],{"class":588},[578,4532,4533],{"class":588}," out",[578,4535,4519],{"class":588},[578,4537,4522],{"class":588},[429,4539,4540],{},"Recargue el firewall y verifique el estado:",[569,4542,4544],{"className":571,"code":4543,"language":573,"meta":424,"style":424},"sudo ufw reload \nsudo ufw status verbose\n",[575,4545,4546,4557],{"__ignoreMap":424},[578,4547,4548,4550,4552,4555],{"class":580,"line":581},[578,4549,1315],{"class":584},[578,4551,4446],{"class":588},[578,4553,4554],{"class":588}," reload",[578,4556,1339],{"class":595},[578,4558,4559,4561,4563,4565],{"class":580,"line":599},[578,4560,1315],{"class":584},[578,4562,4446],{"class":588},[578,4564,4349],{"class":588},[578,4566,4567],{"class":588}," verbose\n",[538,4569,4571],{"id":4570},"paso-5-exponer-hermes-agent-a-la-red-privada","Paso 5: Exponer Hermes Agent a la red privada",[429,4573,4574,4575,4578,4579,694],{},"Expondremos el ",[462,4576,4577],{},"Hermes Agent Web Dashboard"," a nuestra red privada y usaremos el proveedor de autenticación predeterminado, ",[462,4580,4581],{},"Nous Research",[543,4583,4585],{"id":4584},"configurar-el-proveedor-de-autenticación","Configurar el proveedor de autenticación",[2104,4587,4588,4597,4604,4611,4618],{},[506,4589,4590,4591,4596],{},"Diríjase a ",[442,4592,4595],{"href":4593,"rel":4594},"https:\u002F\u002Fportal.nousresearch.com",[446],"portal.nousresearch.com"," para registrar una cuenta.",[506,4598,4599,4600],{},"Seleccione 'Local Dashboards' (Paneles locales).\n",[433,4601],{"alt":4602,"src":4603},"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",[506,4605,4606,4607],{},"Haga clic en 'Register Dashboard' (Registrar panel).\n",[433,4608],{"alt":4609,"src":4610},"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",[506,4612,4613,4614],{},"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",[433,4615],{"alt":4616,"src":4617},"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",[506,4619,4620,4621,767],{},"Copie el 'OAuth client ID' y péguelo en su archivo ",[575,4622,4623],{},"config.yaml",[569,4625,4629],{"className":4626,"code":4627,"language":4628,"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",[575,4630,4631,4638,4648,4659,4666,4676,4686,4693,4703],{"__ignoreMap":424},[578,4632,4633,4636],{"class":580,"line":581},[578,4634,4635],{"class":1069},"dashboard",[578,4637,848],{"class":721},[578,4639,4640,4643,4645],{"class":580,"line":599},[578,4641,4642],{"class":1069},"  theme",[578,4644,767],{"class":721},[578,4646,4647],{"class":588}," default\n",[578,4649,4650,4653,4655],{"class":580,"line":605},[578,4651,4652],{"class":1069},"  show_token_analytics",[578,4654,767],{"class":721},[578,4656,4658],{"class":4657},"sfNiH"," false\n",[578,4660,4661,4664],{"class":580,"line":612},[578,4662,4663],{"class":1069},"  oauth",[578,4665,848],{"class":721},[578,4667,4668,4671,4673],{"class":580,"line":622},[578,4669,4670],{"class":1069},"    client_id",[578,4672,767],{"class":721},[578,4674,4675],{"class":588}," agent:cmq02x7ha0002jk0ba3kfnb\n",[578,4677,4678,4681,4683],{"class":580,"line":627},[578,4679,4680],{"class":1069},"    portal_url",[578,4682,767],{"class":721},[578,4684,4685],{"class":588}," https:\u002F\u002Fportal.nousresearch.com\n",[578,4687,4688,4691],{"class":580,"line":633},[578,4689,4690],{"class":1069},"  basic_auth",[578,4692,848],{"class":721},[578,4694,4695,4698,4700],{"class":580,"line":774},[578,4696,4697],{"class":1069},"    username",[578,4699,767],{"class":721},[578,4701,4702],{"class":721}," ''\n",[578,4704,4705,4708,4710],{"class":580,"line":1132},[578,4706,4707],{"class":1069},"    password_hash",[578,4709,767],{"class":721},[578,4711,4702],{"class":721},[543,4713,4715],{"id":4714},"configurar-systemd-para-iniciar-automáticamente-el-panel-de-hermes","Configurar Systemd para iniciar automáticamente el panel de Hermes",[2104,4717,4718],{},[506,4719,4720],{},"Cree un archivo de servicio:",[569,4722,4726],{"className":4723,"code":4724,"language":4725,"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",[575,4727,4728],{"__ignoreMap":424},[578,4729,4730,4732,4735],{"class":580,"line":581},[578,4731,1315],{"class":584},[578,4733,4734],{"class":588}," nano",[578,4736,4737],{"class":588}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[2104,4739,4740],{"start":599},[506,4741,4742,4743,4746],{},"Pegue la siguiente configuración, asegurándose de que ",[575,4744,4745],{},"--host 0.0.0.0"," sea parte del comando:",[569,4748,4752],{"className":4749,"code":4750,"language":4751,"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",[575,4753,4754,4758,4763,4768,4772,4776,4781,4786,4791,4795,4800,4805,4809,4813],{"__ignoreMap":424},[578,4755,4756],{"class":580,"line":581},[578,4757,1663],{},[578,4759,4760],{"class":580,"line":599},[578,4761,4762],{},"Description=Hermes Dashboard\n",[578,4764,4765],{"class":580,"line":605},[578,4766,4767],{},"After=network.target\n",[578,4769,4770],{"class":580,"line":612},[578,4771,740],{"emptyLinePlaceholder":739},[578,4773,4774],{"class":580,"line":622},[578,4775,1687],{},[578,4777,4778],{"class":580,"line":627},[578,4779,4780],{},"User=hermes\n",[578,4782,4783],{"class":580,"line":633},[578,4784,4785],{},"WorkingDirectory=\u002Fhome\u002Fhermes\n",[578,4787,4788],{"class":580,"line":774},[578,4789,4790],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes dashboard --host 0.0.0.0\n",[578,4792,4793],{"class":580,"line":1132},[578,4794,1722],{},[578,4796,4797],{"class":580,"line":1140},[578,4798,4799],{},"RestartSec=10\n",[578,4801,4802],{"class":580,"line":1148},[578,4803,4804],{},"Environment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n",[578,4806,4807],{"class":580,"line":1156},[578,4808,740],{"emptyLinePlaceholder":739},[578,4810,4811],{"class":580,"line":1164},[578,4812,1736],{},[578,4814,4815],{"class":580,"line":1172},[578,4816,1741],{},[2104,4818,4819],{"start":605},[506,4820,4821],{},"Habilite e inicie el servicio:",[569,4823,4825],{"className":4723,"code":4824,"language":4725,"meta":424,"style":424},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-dashboard\nsudo systemctl start hermes-dashboard\nsudo systemctl status hermes-dashboard\n",[575,4826,4827,4835,4846,4857],{"__ignoreMap":424},[578,4828,4829,4831,4833],{"class":580,"line":581},[578,4830,1315],{"class":584},[578,4832,1755],{"class":588},[578,4834,1758],{"class":588},[578,4836,4837,4839,4841,4843],{"class":580,"line":599},[578,4838,1315],{"class":584},[578,4840,1755],{"class":588},[578,4842,1768],{"class":588},[578,4844,4845],{"class":588}," hermes-dashboard\n",[578,4847,4848,4850,4852,4855],{"class":580,"line":605},[578,4849,1315],{"class":584},[578,4851,1755],{"class":588},[578,4853,4854],{"class":588}," start",[578,4856,4845],{"class":588},[578,4858,4859,4861,4863,4865],{"class":580,"line":612},[578,4860,1315],{"class":584},[578,4862,1755],{"class":588},[578,4864,4349],{"class":588},[578,4866,4845],{"class":588},[538,4868,4870],{"id":4869},"paso-6-instalar-el-cliente-cloudflare-warp-en-el-escritorio","Paso 6: Instalar el cliente Cloudflare WARP en el escritorio",[2104,4872,4873,4881,4884,4891,4898,4905],{},[506,4874,4875,4876,694],{},"Descargue el cliente Cloudflare WARP desde el ",[442,4877,4880],{"href":4878,"rel":4879},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fwarp-client\u002Fget-started\u002F",[446],"portal de Cloudflare",[506,4882,4883],{},"Abra e inicie el cliente Cloudflare WARP después de la instalación.",[506,4885,4886,4887],{},"Inicie sesión cuando se le solicite.\n",[433,4888],{"alt":4889,"src":4890},"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",[506,4892,4893,4894],{},"Se mostrará una página de 'Success' (Éxito) después de un inicio de sesión exitoso.\n",[433,4895],{"alt":4896,"src":4897},"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",[506,4899,4900,4901],{},"El cliente WARP ahora debería mostrar que está conectado a su equipo de Zero Trust.\n",[433,4902],{"alt":4903,"src":4904},"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",[506,4906,4907,4908,4911,4912],{},"Navegue a su navegador web e introduzca su IP privada (por ejemplo, ",[575,4909,4910],{},"100.96.0.3","). El Hermes Web Dashboard debería cargarse con éxito.\n",[433,4913],{"alt":4914,"src":4915},"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",[4917,4918,4919],"blockquote",{},[429,4920,4921,4924,4925,4930],{},[462,4922,4923],{},"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 ",[462,4926,4927],{},[442,4928,4929],{"href":399},"Cambiar entre múltiples perfiles de Cloudflare WARP en macOS"," para cambiar de cuenta sin problemas.",[538,4932,4934],{"id":4933},"paso-7-instalar-el-cliente-cloudflare-warp-en-dispositivos-ios","Paso 7: Instalar el cliente Cloudflare WARP en dispositivos iOS",[2104,4936,4937,4944,4952,4960,4968],{},[506,4938,4939,4940,4943],{},"Instale ",[462,4941,4942],{},"Cloudflare One"," desde la App Store.",[506,4945,4946,4947],{},"Abra la aplicación Cloudflare One e introduzca el nombre de su equipo cuando se le solicite.\n",[433,4948],{"alt":4949,"src":4950,"width":4951},"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,[506,4953,4954,4955],{},"Inicie sesión utilizando la misma dirección de correo electrónico que se configuró en la regla de política anterior.\n",[433,4956],{"alt":4957,"src":4958,"width":4959},"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,[506,4961,4962,4963],{},"Una vez conectado, debería verse así:\n",[433,4964],{"alt":4965,"src":4966,"width":4967},"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,[506,4969,4970,4971,4973,4974],{},"Navegue a su navegador web e introduzca la IP privada ",[575,4972,4910],{}," para acceder al Hermes Web Dashboard en su dispositivo móvil.\n",[433,4975],{"alt":4976,"src":4977,"width":4978},"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,[493,4980,4982],{"id":4981},"conclusión","Conclusión",[429,4984,4985,4986,4988,4989,4992],{},"Con ",[462,4987,476],{}," manejando las políticas de identidad y el cliente ",[462,4990,4991],{},"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.",[1896,4994,4995],{},"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":599,"depth":605,"links":4997},[4998,5001,5013],{"id":4170,"depth":599,"text":4171,"children":4999},[5000],{"id":4189,"depth":605,"text":4190},{"id":4201,"depth":599,"text":4202,"children":5002},[5003,5004,5005,5006,5007,5011,5012],{"id":4205,"depth":605,"text":4206},{"id":4258,"depth":605,"text":4259},{"id":4392,"depth":605,"text":4393},{"id":4430,"depth":605,"text":4431},{"id":4570,"depth":605,"text":4571,"children":5008},[5009,5010],{"id":4584,"depth":612,"text":4585},{"id":4714,"depth":612,"text":4715},{"id":4869,"depth":605,"text":4870},{"id":4933,"depth":605,"text":4934},{"id":4981,"depth":599,"text":4982},[4102,5015],"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.","Exponer de forma segura Hermes Agent a una red privada mediante Cloudflare Zero Trust y el túnel WARP",{"schemaOrg":5020,"robots":1934,"sitemap":5051},[5021],{"@type":1933,"headline":2088,"description":5017,"name":2088,"image":2093,"step":5022},[5023,5027,5031,5035,5039,5043,5047],{"@type":4114,"name":5024,"text":5025,"url":5026,"image":4223},"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":4114,"name":5028,"text":5029,"url":5030,"image":4389},"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":4114,"name":5032,"text":5033,"url":5034,"image":4402},"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":4114,"name":5036,"text":5037,"url":5038},"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":4114,"name":5040,"text":5041,"url":5042},"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":4114,"name":5044,"text":5045,"url":5046,"image":4890},"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":4114,"name":5048,"text":5049,"url":5050,"image":4950},"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",{"lastmod":5052},"2026-09-28",{"title":5054,"description":5017,"ogTitle":2088,"ogDescription":5017,"twitterTitle":2088,"twitterDescription":5017},"Acceso seguro a Hermes Agent con Cloudflare Zero Trust","es\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",[4153,1944,4149,5057,5058],"Red privada","Tutorial","1Uqqvv_e2EG_KJYm_QsykKctzltK62Y5p8j4IVF9puk",[5061,5062,5862],{"id":4141,"title":2088,"author":424,"body":4142,"category":5014,"date":5016,"description":5017,"extension":1925,"image":2093,"imageAlt":5018,"isPublished":739,"meta":5019,"minRead":1132,"navigation":739,"path":363,"seo":5053,"stem":5055,"tags":5056,"updatedAt":5052,"__hash__":5059},{"id":5063,"title":5064,"author":1945,"body":5065,"category":5845,"date":5847,"description":5848,"extension":1925,"image":5849,"imageAlt":5850,"isPublished":739,"meta":5851,"minRead":774,"navigation":739,"path":415,"seo":5856,"stem":5857,"tags":5858,"updatedAt":1945,"__hash__":5861},"article\u002Fes\u002Farticle\u002Fuse-cloudflare-as-ai-memory.md","Construir memoria persistente de IA con Cloudflare y MCP",{"type":426,"value":5066,"toc":5827},[5067,5071,5074,5077,5081,5084,5098,5102,5109,5123,5126,5129,5173,5177,5259,5263,5289,5397,5408,5412,5417,5458,5482,5486,5491,5562,5567,5571,5605,5611,5650,5654,5686,5690,5698,5702,5732,5736,5776,5778,5781,5784,5787,5790,5824],[493,5068,5070],{"id":5069},"la-importancia-de-la-memoria-persistente-de-ia-para-los-agentes","La importancia de la memoria persistente de IA para los agentes",[429,5072,5073],{},"A medida que los asistentes de IA se integran en nuestro día a día, nos encontramos con frecuencia con el problema del contexto en blanco. Las decisiones tomadas la semana pasada se olvidan, lo que nos obliga a introducir los mismos detalles del stack tecnológico y configurar las preferencias del usuario una y otra vez.",[429,5075,5076],{},"En lugar de empezar de cero cada vez, necesitamos construir un sistema de memoria que evolucione, comprenda continuamente las decisiones del usuario y elimine la necesidad de repetir el contexto.",[493,5078,5080],{"id":5079},"sistemas-de-memoria-autohospedados-frente-a-integrados","Sistemas de memoria autohospedados frente a integrados",[429,5082,5083],{},"Muchos agentes de IA vienen con memoria integrada, pero no usamos solo un agente para todo. Usamos Claude para diseñar y estructurar un proyecto, Kimi para programar y ChatGPT para investigar. El contexto no se comparte entre estos agentes; permanece aislado en cada uno de ellos.",[429,5085,5086,5087,5092,5093,5097],{},"Desde el punto de vista de la ingeniería de software, no confiamos en las cajas negras. Necesitamos un sistema de memoria de IA que sea observable, auditable y que esté bajo nuestro control. El proyecto de código abierto ",[442,5088,5091],{"href":5089,"rel":5090},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fsecond-brain-cloudflare\u002Ftree\u002Fmain",[446],"Second Brain",", un fork de ",[442,5094,5095],{"href":5095,"rel":5096},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare",[446],", proporciona un sistema de memoria persistente y autoalojado con soporte para Model Context Protocol (MCP). Cualquier agente de IA compatible, como Claude, ChatGPT o Kimi Code, puede compartir el mismo contexto.",[493,5099,5101],{"id":5100},"cómo-construir-un-second-brain-de-memoria-de-ia-en-cloudflare","Cómo construir un Second Brain de memoria de IA en Cloudflare",[429,5103,5104,5105,5108],{},"El sistema de memoria Second Brain se despliega en ",[462,5106,5107],{},"Cloudflare Workers",", lo que proporciona una infraestructura de servidores de ejecución de baja latencia y distribución global. Esto permite que la recuperación de memoria y otras operaciones se ejecuten con una latencia mínima para el bucle de razonamiento de la IA.",[429,5110,5111,5112,5115,5116,5119,5120,5122],{},"Se utiliza el modelo de embeddings de ",[462,5113,5114],{},"Workers AI"," para generar los vectores. Estos embeddings se almacenan en ",[462,5117,5118],{},"Cloudflare Vectorize",", que es una base de datos vectorial distribuida globalmente. ",[462,5121,5118],{}," realiza la búsqueda de similitud de coseno para encontrar memorias relacionadas semánticamente.",[429,5124,5125],{},"En Second Brain se implementan mecanismos de detección de duplicados y fusión inteligente. Se almacena el contenido con menos de un 85% de similitud; de lo contrario, se bloquea o se marca como candidato a duplicado. El texto que supera los 1.600 caracteres se divide en los límites de las oraciones o saltos de línea con un solapamiento de 200 caracteres para evitar la pérdida de contexto. Luego, cada fragmento se incrusta como un vector, lo que permite una coincidencia precisa.",[429,5127,5128],{},"Las siguientes herramientas se exponen como interfaces MCP para ser utilizadas en agentes de IA:",[503,5130,5131,5137,5143,5149,5155,5161,5167],{},[506,5132,5133,5136],{},[575,5134,5135],{},"remember",": Almacena ideas, decisiones, preferencias y contexto del proyecto.",[506,5138,5139,5142],{},[575,5140,5141],{},"append",": Añade una actualización a una memoria existente.",[506,5144,5145,5148],{},[575,5146,5147],{},"update",": Reemplaza una memoria existente.",[506,5150,5151,5154],{},[575,5152,5153],{},"recall",": Busca memorias por significado en lugar de por redacción exacta.",[506,5156,5157,5160],{},[575,5158,5159],{},"list_recent",": Explora las memorias guardadas recientemente.",[506,5162,5163,5166],{},[575,5164,5165],{},"forget",": Elimina permanentemente una memoria.",[506,5168,5169,5172],{},[575,5170,5171],{},"link\u002Fconnections",": Conecta memorias relacionadas (función de grafo de la v2).",[538,5174,5176],{"id":5175},"configuración-de-second-brain-en-cloudflare","Configuración de Second Brain en Cloudflare",[2104,5178,5179,5196,5203,5210,5217,5224,5235,5242,5245,5252],{},[506,5180,2115,5181,5184,5185,5190,5191,5195],{},[575,5182,5183],{},"Deploy to Cloudflare"," en la página del ",[442,5186,5189],{"href":5187,"rel":5188},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fsecond-brain-cloudflare",[446],"Github repo",". [[",[433,5192],{"alt":5193,"src":5194},"Página de GitHub con el botón Deploy to Cloudflare destacado","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fdeploy-to-cloudflare-button.webp","]]",[506,5197,5198,5199],{},"Completa el formulario de Cloudflare Worker.\n",[433,5200],{"alt":5201,"src":5202},"Formulario de configuración de despliegue de Cloudflare Workers","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-deployment-form.webp",[506,5204,5205,5206],{},"Introduce '384' para Dimensions, selecciona 'cosine' para Metric y haz clic en el botón Deploy.\n",[433,5207],{"alt":5208,"src":5209},"Pantalla de configuración para la creación de base de datos de Cloudflare Vectorize","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-vectorize-configuration.webp",[506,5211,5212,5213],{},"A continuación se muestra la vista general de Second Brain en Cloudflare Worker:\n",[433,5214],{"alt":5215,"src":5216},"Panel de control general del worker de Second Brain desplegado","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-second-brain-overview.webp",[506,5218,5219,5220],{},"Haz clic en 'Settings' y luego en el icono de edición de 'AUTH_TOKEN' para crear un token:\n",[433,5221],{"alt":5222,"src":5223},"Configuración de variables de Cloudflare Worker destacando AUTH_TOKEN","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-settings.webp",[506,5225,5226,5227,5231],{},"Haz clic en el enlace 'Rotate' para introducir un nuevo valor: ",[433,5228],{"alt":5229,"src":5230},"Pantalla de modificación y rotación de la variable AUTH_TOKEN","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-rotate.webp",[433,5232],{"alt":5233,"src":5234},"Introduciendo la cadena aleatoria generada en el campo de valor AUTH_TOKEN","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-value-input.webp",[506,5236,5237,5238,5241],{},"Ejecuta el comando ",[575,5239,5240],{},"openssl rand -base64 32"," en la terminal de macOS para crear un valor aleatorio y pégalo en el campo de entrada 'Value'.",[506,5243,5244],{},"Haz clic en el botón 'Deploy' para actualizar el nuevo valor de 'AUTH_TOKEN'.",[506,5246,5247,5248],{},"Abre la URL del worker de Second Brain en el navegador web:\n",[433,5249],{"alt":5250,"src":5251},"Pantalla de inicio de sesión de la interfaz web de Second Brain con entrada de token Bearer","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-login.webp",[506,5253,5254,5255,5258],{},"Introduce el 'AUTH_TOKEN' creado en el campo de entrada ",[575,5256,5257],{},"Bearer token"," y haz clic en el botón 'Connect' para iniciar sesión en la interfaz web.",[538,5260,5262],{"id":5261},"integración-de-claude-desktop-a-través-de-mcp","Integración de Claude Desktop a través de MCP",[2104,5264,5265,5272,5279],{},[506,5266,5267,5268],{},"Haz clic en 'Customize' en Claude Desktop.\n",[433,5269],{"alt":5270,"src":5271},"Interfaz de Claude Desktop señalando el botón Customize","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-customize-button.webp",[506,5273,5274,5275],{},"Haz clic en 'Developer' para editar manualmente el archivo de configuración de los servidores MCP:\n",[433,5276],{"alt":5277,"src":5278},"Menú de configuración de desarrollador de Claude Desktop para acceder a la configuración de MCP","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-developer-menu.webp",[506,5280,5281,5282,5285,5286,767],{},"Añade el siguiente código a la sección ",[575,5283,5284],{},"mcpServers"," en ",[575,5287,5288],{},"claude_desktop_config.json",[569,5290,5292],{"className":712,"code":5291,"language":714,"meta":424,"style":424},"    \"second-brain\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"mcp-remote\",\n        \"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\",\n        \"--header\",\n        \"Authorization: Bearer \u003Cyour-token>\"\n      ]\n    }\n",[575,5293,5294,5308,5330,5344,5356,5367,5378,5387,5392],{"__ignoreMap":424},[578,5295,5296,5299,5302,5304,5306],{"class":580,"line":581},[578,5297,5298],{"class":721},"    \"",[578,5300,5301],{"class":588},"second-brain",[578,5303,1525],{"class":721},[578,5305,2534],{"class":595},[578,5307,722],{"class":721},[578,5309,5310,5313,5316,5318,5320,5322,5325,5327],{"class":580,"line":599},[578,5311,5312],{"class":721},"      \"",[578,5314,5315],{"class":2725},"command",[578,5317,1525],{"class":721},[578,5319,767],{"class":721},[578,5321,1104],{"class":721},[578,5323,5324],{"class":588},"npx",[578,5326,1525],{"class":721},[578,5328,5329],{"class":721},",\n",[578,5331,5332,5334,5337,5339,5341],{"class":580,"line":605},[578,5333,5312],{"class":721},[578,5335,5336],{"class":2725},"args",[578,5338,1525],{"class":721},[578,5340,767],{"class":721},[578,5342,5343],{"class":721}," [\n",[578,5345,5346,5349,5352,5354],{"class":580,"line":612},[578,5347,5348],{"class":721},"        \"",[578,5350,5351],{"class":588},"mcp-remote",[578,5353,1525],{"class":721},[578,5355,5329],{"class":721},[578,5357,5358,5360,5363,5365],{"class":580,"line":622},[578,5359,5348],{"class":721},[578,5361,5362],{"class":588},"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp",[578,5364,1525],{"class":721},[578,5366,5329],{"class":721},[578,5368,5369,5371,5374,5376],{"class":580,"line":627},[578,5370,5348],{"class":721},[578,5372,5373],{"class":588},"--header",[578,5375,1525],{"class":721},[578,5377,5329],{"class":721},[578,5379,5380,5382,5385],{"class":580,"line":633},[578,5381,5348],{"class":721},[578,5383,5384],{"class":588},"Authorization: Bearer \u003Cyour-token>",[578,5386,1110],{"class":721},[578,5388,5389],{"class":580,"line":774},[578,5390,5391],{"class":721},"      ]\n",[578,5393,5394],{"class":580,"line":1132},[578,5395,5396],{"class":721},"    }\n",[429,5398,5399,5403,5404],{},[433,5400],{"alt":5401,"src":5402},"JSON de configuración de MCP de Claude Desktop que contiene el servidor de Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-mcp-config-json.webp","\n4. Reinicia Claude Desktop y verifica los 'Local MCP servers'. El estado debería ser 'running':\n",[433,5405],{"alt":5406,"src":5407},"Claude Desktop mostrando el estado activo para el servidor MCP de Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-mcp-status-running.webp",[538,5409,5411],{"id":5410},"integración-de-claude-code-a-través-de-mcp","Integración de Claude Code a través de MCP",[503,5413,5414],{},[506,5415,5416],{},"Ejecuta el siguiente comando para añadir el MCP:",[569,5418,5420],{"className":4723,"code":5419,"language":4725,"meta":424,"style":424},"claude mcp add --transport http second-brain https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\n",[575,5421,5422],{"__ignoreMap":424},[578,5423,5424,5427,5430,5433,5436,5439,5442,5445,5447,5450,5453,5455],{"class":580,"line":581},[578,5425,5426],{"class":584},"claude",[578,5428,5429],{"class":588}," mcp",[578,5431,5432],{"class":588}," add",[578,5434,5435],{"class":588}," --transport",[578,5437,5438],{"class":588}," http",[578,5440,5441],{"class":588}," second-brain",[578,5443,5444],{"class":588}," https:\u002F\u002F",[578,5446,3438],{"class":721},[578,5448,5449],{"class":588},"your-worker-ur",[578,5451,5452],{"class":595},"l",[578,5454,3447],{"class":721},[578,5456,5457],{"class":588},"\u002Fmcp\n",[503,5459,5460,5466],{},[506,5461,5462,5463,694],{},"Claude Code detectará que el endpoint requiere OAuth y abrirá la página de inicio de sesión en el navegador web para introducir el ",[575,5464,5465],{},"AUTH_TOKEN",[506,5467,5468,5469,5472,5473,5476,5477,694],{},"Crea el archivo ",[575,5470,5471],{},"CLAUDE.md"," en la carpeta ",[575,5474,5475],{},"~\u002F.claude"," con las instrucciones de ",[442,5478,5481],{"href":5479,"rel":5480},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fblob\u002Fmain\u002FAI_Instructions\u002FCLAUDE_INSTRUCTIONS.md",[446],"CLAUDE_INSTRUCTIONS.md",[538,5483,5485],{"id":5484},"integración-de-gemini-cli-a-través-de-mcp","Integración de Gemini CLI a través de MCP",[2104,5487,5488],{},[506,5489,5490],{},"Añade los siguientes ajustes del servidor MCP a '.\u002F.gemini\u002Fsettings.json':",[569,5492,5494],{"className":712,"code":5493,"language":714,"meta":424,"style":424},"    \"second-brain\": {\n      \"httpUrl\": \"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\",\n      \"oauth\": {\n        \"enabled\": true\n      }\n    }\n",[575,5495,5496,5508,5527,5540,5553,5558],{"__ignoreMap":424},[578,5497,5498,5500,5502,5504,5506],{"class":580,"line":581},[578,5499,5298],{"class":721},[578,5501,5301],{"class":588},[578,5503,1525],{"class":721},[578,5505,2534],{"class":595},[578,5507,722],{"class":721},[578,5509,5510,5512,5515,5517,5519,5521,5523,5525],{"class":580,"line":599},[578,5511,5312],{"class":721},[578,5513,5514],{"class":2725},"httpUrl",[578,5516,1525],{"class":721},[578,5518,767],{"class":721},[578,5520,1104],{"class":721},[578,5522,5362],{"class":588},[578,5524,1525],{"class":721},[578,5526,5329],{"class":721},[578,5528,5529,5531,5534,5536,5538],{"class":580,"line":605},[578,5530,5312],{"class":721},[578,5532,5533],{"class":2725},"oauth",[578,5535,1525],{"class":721},[578,5537,767],{"class":721},[578,5539,754],{"class":721},[578,5541,5542,5544,5547,5549,5551],{"class":580,"line":612},[578,5543,5348],{"class":721},[578,5545,5546],{"class":584},"enabled",[578,5548,1525],{"class":721},[578,5550,767],{"class":721},[578,5552,3663],{"class":721},[578,5554,5555],{"class":580,"line":622},[578,5556,5557],{"class":721},"      }\n",[578,5559,5560],{"class":580,"line":627},[578,5561,5396],{"class":721},[2104,5563,5564],{"start":599},[506,5565,5566],{},"Inicia Gemini CLI.",[538,5568,5570],{"id":5569},"prueba-de-second-brain-en-agentes-de-ia","Prueba de Second Brain en agentes de IA",[2104,5572,5573,5584,5598],{},[506,5574,5575,5576,5579,5580],{},"Al empezar con una configuración sencilla de paleta de colores de marca en ",[462,5577,5578],{},"Claude Desktop",", no se llama a Second Brain.\n",[433,5581],{"alt":5582,"src":5583},"Primera prueba en Claude Desktop sin la capa de memoria de Second Brain activa","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-first-run-brand-palette.webp",[506,5585,5586,5587,5590,5591,5593,5594],{},"Al probar con la palabra clave 'remember', solo se utilizan las herramientas ",[575,5588,5589],{},"memory_user-edits"," integradas en ",[462,5592,5578],{},", pero no Second Brain.\n",[433,5595],{"alt":5596,"src":5597},"Claude Desktop recurriendo a las ediciones de usuario integradas locales en lugar de Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-remember-built-in-tool-fallback.webp",[506,5599,5600,5601,5604],{},"Al probar el siguiente prompt en ",[462,5602,5603],{},"Claude Code",", se llamó a Second Brain:",[569,5606,5609],{"className":5607,"code":5608,"language":2496},[2494],"Remember Our brand palette uses `#1a1a2e` as primary, `#16213e` as secondary, and `#e94560` as accent. Never use pure black.\"\n",[575,5610,5608],{"__ignoreMap":424},[429,5612,5613,5617,5618,848,5621,5625,5626,5630,5631,5633,5634,5638,5639,5642,5643,5625,5647],{},[433,5614],{"alt":5615,"src":5616},"Ventana de terminal de Claude Code mostrando el activador exitoso de Second Brain MCP","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-code-second-brain-mcp-called.webp","\n4. Se verificó la configuración de colores en ",[462,5619,5620],{},"Second Brain en Cloudflare",[433,5622],{"alt":5623,"src":5624},"Verificando los códigos de color de marca guardados en la interfaz web de la base de datos de Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-color-verification.webp","\n- ",[5627,5628,5629],"em",{},"La razón por la que funcionó en Claude Code fue porque CLAUDE_INSTRUCTIONS.md contiene las palabras clave de 'Second Brain'.","\n5. Al incluir 'Second Brain' como palabras clave en ",[462,5632,5578],{},", es necesario especificarlas explícitamente para almacenar y recuperar de la capa de memoria de Second Brain.\n",[433,5635],{"alt":5636,"src":5637},"Activando Second Brain en Claude Desktop mencionando explícitamente palabras clave","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-second-brain-explicit-trigger.webp","\n6. También es necesario mencionar las palabras clave 'Second Brain' en ",[462,5640,5641],{},"Gemini CLI"," para activar el MCP de Second Brain.\n",[433,5644],{"alt":5645,"src":5646},"Ventana de terminal de Gemini CLI demostrando llamadas exitosas a Second Brain MCP","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fgemini-cli-second-brain-trigger.webp",[5627,5648,5649],{},"Añadir instrucciones similares a GEMINI.md, al igual que se hizo en CLAUDE_INSTRUCTIONS.md, activará Second Brain sin necesidad de mencionar las palabras clave de forma explícita.",[538,5651,5653],{"id":5652},"extensiones-para-navegadores-web","Extensiones para navegadores web",[503,5655,5656,5659],{},[506,5657,5658],{},"Hay extensiones disponibles para los navegadores Chrome, Firefox y Microsoft Edge.",[506,5660,5661,5662],{},"Estas extensiones sirven para:\n",[503,5663,5664,5670,5676],{},[506,5665,5666,5669],{},[462,5667,5668],{},"Capturar la página actual",": guarda el título y la URL en Second Brain.",[506,5671,5672,5675],{},[462,5673,5674],{},"Capturar texto resaltado",": selecciona cualquier texto en una página antes de hacer clic en capturar; el fragmento se guarda junto con el título y la URL.",[506,5677,5678,5681,5682,5685],{},[462,5679,5680],{},"Añadir una nota",": escribe contexto o ",[575,5683,5684],{},"#hashtags"," en la ventana emergente antes de guardar; los hashtags se extraen automáticamente como etiquetas.",[538,5687,5689],{"id":5688},"sincronización-del-conocimiento-personal-con-el-plugin-de-obsidian","Sincronización del conocimiento personal con el plugin de Obsidian",[503,5691,5692,5695],{},[506,5693,5694],{},"Existe un plugin de Obsidian disponible para sincronizar las notas de tu Obsidian Vault con tu Second Brain en Cloudflare.",[506,5696,5697],{},"Las notas pueden ser etiquetadas para su sincronización con Second Brain.",[543,5699,5701],{"id":5700},"instalar-el-plugin-de-obsidian","Instalar el plugin de Obsidian",[2104,5703,5704,5711,5718,5725],{},[506,5705,5706,5707],{},"Abre Obsidian → Settings → Community Plugins\n",[433,5708],{"alt":5709,"src":5710},"Panel de configuración de Obsidian navegando a la sección Community Plugins","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-settings-community-plugins.webp",[506,5712,5713,5714],{},"Haz clic en el botón 'Browse'.\n",[433,5715],{"alt":5716,"src":5717},"Página de búsqueda de plugins de comunidad de Obsidian mostrando el botón Browse","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-community-plugins-browse.webp",[506,5719,5720,5721],{},"Busca 'Second Brain Sync'.\n",[433,5722],{"alt":5723,"src":5724},"Buscando el plugin Second Brain Sync en la tienda de plugins de Obsidian","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-community-plugins-search-second-brain.webp",[506,5726,5727,5728],{},"Haz clic en el botón 'Install' y luego en 'Enable'.\n",[433,5729],{"alt":5730,"src":5731},"Instalando y activando el plugin Second Brain Sync en Obsidian","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-install-and-enable.webp",[543,5733,5735],{"id":5734},"configurar-el-plugin-de-obsidian","Configurar el plugin de Obsidian",[2104,5737,5738,5741,5748,5755,5762,5769],{},[506,5739,5740],{},"Abre Obsidian → Settings → Second Brain Sync",[506,5742,5743,5744],{},"Introduce la 'URL' y el 'Auth token'.\n",[433,5745],{"alt":5746,"src":5747},"Introduciendo la URL del Worker y el Token de autorización en la configuración de Obsidian","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-configuration-credentials.webp",[506,5749,5750,5751],{},"Haz clic en el botón 'Test' para verificar la conexión.\n",[433,5752],{"alt":5753,"src":5754},"Prueba de conexión del plugin de Obsidian mostrando una verificación exitosa","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-connection-test-success.webp",[506,5756,5757,5758],{},"Configura los comportamientos de sincronización. Establece la 'Sync tag' y habilita 'Auto-sync on save'.\n",[433,5759],{"alt":5760,"src":5761},"Configurando el Sync Tag y activando Auto-sync on save en Obsidian","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-sync-behavior-settings.webp",[506,5763,5764,5765],{},"Crea una nota en Obsidian con la etiqueta 'second-brain', tal como se configuró en 'Sync tag'.\n",[433,5766],{"alt":5767,"src":5768},"Creando una nueva nota en Obsidian etiquetada con second-brain para su sincronización","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-note-with-sync-tag.webp",[506,5770,5771,5772],{},"La nota se ha guardado y sincronizado con el Second Brain desplegado en Cloudflare.\n",[433,5773],{"alt":5774,"src":5775},"Verificando la nota de Obsidian sincronizada con éxito en la interfaz web de Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-synced-note-verification.webp",[493,5777,4982],{"id":4981},[429,5779,5780],{},"Second Brain proporciona una solución de código abierto a uno de los problemas más frustrantes de la IA: la memoria persistente. Al combinarlo con la infraestructura de Cloudflare, ofrece una capa de memoria totalmente autoalojada y distribuida globalmente con baja latencia. Las herramientas MCP integradas en Second Brain hacen que esta memoria sea portátil entre todos los agentes de IA.",[429,5782,5783],{},"El plugin de Obsidian extiende Second Brain a la gestión del conocimiento personal. Las notas de un vault de Obsidian se pueden sincronizar de forma selectiva con Second Brain, transformando notas sin procesar en un contexto estructurado que los agentes de IA pueden comprender y recuperar semánticamente.",[429,5785,5786],{},"Al combinar autohospedaje, búsqueda semántica e integración MCP basada en estándares, Second Brain demuestra ser más que una simple capa de memoria: es una base práctica para construir un ecosistema de IA.",[493,5788,5789],{"id":1870},"Referencias:",[503,5791,5792,5798,5804,5811,5818],{},[506,5793,5794],{},[442,5795,5796],{"href":5796,"rel":5797},"https:\u002F\u002Fwww.thesecondbrain.dev\u002F",[446],[506,5799,5800],{},[442,5801,5802],{"href":5802,"rel":5803},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FHow-It-Works",[446],[506,5805,5806],{},[442,5807,5810],{"href":5808,"rel":5809},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FConnect-to-AI-Clients",[446],"Connect to AI Clients",[506,5812,5813],{},[442,5814,5817],{"href":5815,"rel":5816},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FObsidian-Plugin",[446],"Second Brain Obsidian Plugin",[506,5819,5820],{},[442,5821,5822],{"href":5822,"rel":5823},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-obsidian-plugin",[446],[1896,5825,5826],{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":424,"searchDepth":599,"depth":605,"links":5828},[5829,5830,5831,5843,5844],{"id":5069,"depth":599,"text":5070},{"id":5079,"depth":599,"text":5080},{"id":5100,"depth":599,"text":5101,"children":5832},[5833,5834,5835,5836,5837,5838,5839],{"id":5175,"depth":605,"text":5176},{"id":5261,"depth":605,"text":5262},{"id":5410,"depth":605,"text":5411},{"id":5484,"depth":605,"text":5485},{"id":5569,"depth":605,"text":5570},{"id":5652,"depth":605,"text":5653},{"id":5688,"depth":605,"text":5689,"children":5840},[5841,5842],{"id":5700,"depth":612,"text":5701},{"id":5734,"depth":612,"text":5735},{"id":4981,"depth":599,"text":4982},{"id":1870,"depth":599,"text":5789},[5846,4102],"cloudflare","2026-08-07","Crea un sistema de memoria IA persistente y autoalojado en Cloudflare con Second Brain y MCP. Comparte el contexto entre Claude, Gemini y Obsidian hoy mismo.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002FES-Use-Cloudflare-as-AI-memory.webp","Un sistema de memoria de IA persistente y autoalojado en Cloudflare Workers y Vectorize con soporte de MCP y sincronización de Obsidian.",{"schemaOrg":5852,"robots":1934,"sitemap":5855},[5853],{"@type":4110,"headline":5854,"description":5848},"Sistema de memoria persistente de IA con Cloudflare y MCP",{"lastmod":5847},{"title":5854,"description":5848,"ogTitle":5064,"ogDescription":5848,"twitterTitle":5064,"twitterDescription":5848},"es\u002Farticle\u002Fuse-cloudflare-as-ai-memory",[4138,5859,5860,5091,1942],"MCP","Memoria de IA","-wBuyPnmI3SkMsaQHsQngMepodb3zL1KLOZkrSblLew",{"id":5863,"title":4929,"author":424,"body":5864,"category":6381,"date":6382,"description":6383,"extension":1925,"image":6384,"imageAlt":6385,"isPublished":739,"meta":6386,"minRead":612,"navigation":739,"path":399,"seo":6390,"stem":6391,"tags":6392,"updatedAt":1945,"__hash__":6395},"article\u002Fes\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac.md",{"type":426,"value":5865,"toc":6374},[5866,5870,5873,5880,5884,5890,5893,5896,5900,5903,5910,5926,6220,6334,6336,6339,6341,6371],[493,5867,5869],{"id":5868},"qué-es-cloudflare-warp","¿Qué es Cloudflare WARP?",[429,5871,5872],{},"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,5874,5875,5876,5879],{},"Crea un túnel cifrado basado en el protocolo ",[462,5877,5878],{},"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.",[493,5881,5883],{"id":5882},"por-qué-necesitamos-cloudflare-warp","¿Por qué necesitamos Cloudflare WARP?",[429,5885,5886,5887,694],{},"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 ",[462,5888,5889],{},"Acceso a la Red de Confianza Cero (ZTNA)",[429,5891,5892],{},"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,5894,5895],{},"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.",[493,5897,5899],{"id":5898},"soporte-de-múltiples-perfiles-warp-en-un-dispositivo","Soporte de múltiples perfiles WARP en un dispositivo",[429,5901,5902],{},"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,5904,5905,5906,5909],{},"Para lograr esto en macOS, podemos utilizar un archivo de perfil MDM ",[575,5907,5908],{},".mobileconfig"," para definir y registrar los diferentes entornos WARP.",[503,5911,5912,5923],{},[506,5913,5914,5922],{},[442,5915,5918,5919,5921],{"href":5916,"rel":5917},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fstatic\u002Fmdm\u002Fmultiple-orgs\u002FCloudflareWARP.mobileconfig",[446],"Download a sample ",[575,5920,5908],{}," file"," directamente desde Cloudflare.",[506,5924,5925],{},"A continuación se muestra un ejemplo de cómo se ve esta configuración:",[569,5927,5931],{"className":5928,"code":5929,"language":5930,"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",[575,5932,5933,5938,5943,5948,5953,5958,5963,5968,5973,5978,5983,5988,5993,5998,6003,6008,6013,6018,6023,6028,6033,6038,6043,6048,6053,6058,6063,6068,6072,6076,6081,6085,6090,6094,6100,6106,6112,6118,6124,6130,6136,6142,6148,6154,6160,6166,6172,6178,6184,6190,6196,6202,6208,6214],{"__ignoreMap":424},[578,5934,5935],{"class":580,"line":581},[578,5936,5937],{},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",[578,5939,5940],{"class":580,"line":599},[578,5941,5942],{},"\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\" \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n",[578,5944,5945],{"class":580,"line":605},[578,5946,5947],{},"\u003Cplist version=\"1.0\">\n",[578,5949,5950],{"class":580,"line":612},[578,5951,5952],{},"\u003Cdict>\n",[578,5954,5955],{"class":580,"line":622},[578,5956,5957],{},"  \u003Ckey>PayloadContent\u003C\u002Fkey>\n",[578,5959,5960],{"class":580,"line":627},[578,5961,5962],{},"  \u003Carray>\n",[578,5964,5965],{"class":580,"line":633},[578,5966,5967],{},"    \u003Cdict>\n",[578,5969,5970],{"class":580,"line":774},[578,5971,5972],{},"      \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[578,5974,5975],{"class":580,"line":1132},[578,5976,5977],{},"      \u003Cstring>Warp Configuration\u003C\u002Fstring>\n",[578,5979,5980],{"class":580,"line":1140},[578,5981,5982],{},"      \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[578,5984,5985],{"class":580,"line":1148},[578,5986,5987],{},"      \u003Cstring>com.cloudflare.warp.CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[578,5989,5990],{"class":580,"line":1156},[578,5991,5992],{},"      \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[578,5994,5995],{"class":580,"line":1164},[578,5996,5997],{},"      \u003Cstring>Cloudflare Ltd.\u003C\u002Fstring>\n",[578,5999,6000],{"class":580,"line":1172},[578,6001,6002],{},"      \u003Ckey>PayloadType\u003C\u002Fkey>\n",[578,6004,6005],{"class":580,"line":1180},[578,6006,6007],{},"      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n",[578,6009,6010],{"class":580,"line":1191},[578,6011,6012],{},"      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[578,6014,6015],{"class":580,"line":1196},[578,6016,6017],{},"      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[578,6019,6020],{"class":580,"line":1204},[578,6021,6022],{},"      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[578,6024,6025],{"class":580,"line":1744},[578,6026,6027],{},"      \u003Cinteger>1\u003C\u002Finteger>\n",[578,6029,6030],{"class":580,"line":1750},[578,6031,6032],{},"      \u003Ckey>configs\u003C\u002Fkey>\n",[578,6034,6035],{"class":580,"line":1761},[578,6036,6037],{},"      \u003Carray>\n",[578,6039,6040],{"class":580,"line":2426},[578,6041,6042],{},"        \u003Cdict>\n",[578,6044,6045],{"class":580,"line":2884},[578,6046,6047],{},"          \u003Ckey>organization\u003C\u002Fkey>\n",[578,6049,6050],{"class":580,"line":2893},[578,6051,6052],{},"          \u003Cstring>your-team-name-1\u003C\u002Fstring>\n",[578,6054,6055],{"class":580,"line":2901},[578,6056,6057],{},"          \u003Ckey>display_name\u003C\u002Fkey>\n",[578,6059,6060],{"class":580,"line":2909},[578,6061,6062],{},"          \u003Cstring>Team 1\u003C\u002Fstring>\n",[578,6064,6065],{"class":580,"line":2914},[578,6066,6067],{},"        \u003C\u002Fdict>\n",[578,6069,6070],{"class":580,"line":2921},[578,6071,6042],{},[578,6073,6074],{"class":580,"line":2929},[578,6075,6047],{},[578,6077,6078],{"class":580,"line":2937},[578,6079,6080],{},"          \u003Cstring>your-team-name-2\u003C\u002Fstring>\n",[578,6082,6083],{"class":580,"line":2948},[578,6084,6057],{},[578,6086,6087],{"class":580,"line":2956},[578,6088,6089],{},"          \u003Cstring>Team 2\u003C\u002Fstring>\n",[578,6091,6092],{"class":580,"line":2963},[578,6093,6067],{},[578,6095,6097],{"class":580,"line":6096},34,[578,6098,6099],{},"      \u003C\u002Farray>\n",[578,6101,6103],{"class":580,"line":6102},35,[578,6104,6105],{},"    \u003C\u002Fdict>\n",[578,6107,6109],{"class":580,"line":6108},36,[578,6110,6111],{},"  \u003C\u002Farray>\n",[578,6113,6115],{"class":580,"line":6114},37,[578,6116,6117],{},"  \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[578,6119,6121],{"class":580,"line":6120},38,[578,6122,6123],{},"  \u003Cstring>Cloudflare WARP\u003C\u002Fstring>\n",[578,6125,6127],{"class":580,"line":6126},39,[578,6128,6129],{},"  \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[578,6131,6133],{"class":580,"line":6132},40,[578,6134,6135],{},"  \u003Cstring>cloudflare_warp\u003C\u002Fstring>\n",[578,6137,6139],{"class":580,"line":6138},41,[578,6140,6141],{},"  \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[578,6143,6145],{"class":580,"line":6144},42,[578,6146,6147],{},"  \u003Cstring>Cloudflare, Ltd.\u003C\u002Fstring>\n",[578,6149,6151],{"class":580,"line":6150},43,[578,6152,6153],{},"  \u003Ckey>PayloadRemovalDisallowed\u003C\u002Fkey>\n",[578,6155,6157],{"class":580,"line":6156},44,[578,6158,6159],{},"  \u003Cfalse\u002F>\n",[578,6161,6163],{"class":580,"line":6162},45,[578,6164,6165],{},"  \u003Ckey>PayloadScope\u003C\u002Fkey>\n",[578,6167,6169],{"class":580,"line":6168},46,[578,6170,6171],{},"  \u003Cstring>System\u003C\u002Fstring>\n",[578,6173,6175],{"class":580,"line":6174},47,[578,6176,6177],{},"  \u003Ckey>PayloadType\u003C\u002Fkey>\n",[578,6179,6181],{"class":580,"line":6180},48,[578,6182,6183],{},"  \u003Cstring>Configuration\u003C\u002Fstring>\n",[578,6185,6187],{"class":580,"line":6186},49,[578,6188,6189],{},"  \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[578,6191,6193],{"class":580,"line":6192},50,[578,6194,6195],{},"  \u003Cstring>2B7763B8-64F6-41EB-AA5E-7761651B8131\u003C\u002Fstring>\n",[578,6197,6199],{"class":580,"line":6198},51,[578,6200,6201],{},"  \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[578,6203,6205],{"class":580,"line":6204},52,[578,6206,6207],{},"  \u003Cinteger>1\u003C\u002Finteger>\n",[578,6209,6211],{"class":580,"line":6210},53,[578,6212,6213],{},"\u003C\u002Fdict>\n",[578,6215,6217],{"class":580,"line":6216},54,[578,6218,6219],{},"\u003C\u002Fplist>\n",[503,6221,6222,6232,6244,6254,6260,6276,6289,6309,6325],{},[506,6223,6224,6225,663,6228,6231],{},"Reemplace ",[575,6226,6227],{},"your-team-name-1",[575,6229,6230],{},"your-team-name-2"," con sus respectivos nombres de equipo de Cloudflare Zero Trust.",[506,6233,1225,6234,6237,6238,6241,6242,694],{},[575,6235,6236],{},"uuidgen"," en su Terminal para generar UUID únicos y utilícelos para reemplazar los valores de marcador de posición ",[575,6239,6240],{},"PayloadUUID"," en el archivo ",[575,6243,5908],{},[506,6245,6246,6247,6250,6251,6253],{},"Asegúrese de que la cadena ",[575,6248,6249],{},"PayloadIdentifier"," también contenga el ",[575,6252,6240],{}," actualizado para mantener el perfil diferenciado.",[506,6255,6256,6257,6259],{},"Guarde su archivo ",[575,6258,5908],{}," editado.",[506,6261,1777,6262,6265,6266,6269,6270,6272],{},[462,6263,6264],{},"Ajustes del Sistema"," en su Mac, busque ",[462,6267,6268],{},"Perfiles"," y selecciónelo.",[4312,6271],{},[433,6273],{"alt":6274,"src":6275},"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",[506,6277,6278,6279,6282,6283,6285],{},"Haga clic en ",[462,6280,6281],{},"Instalar, ver o eliminar..."," para comenzar a agregar su nuevo perfil de configuración.",[4312,6284],{},[433,6286],{"alt":6287,"src":6288},"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",[506,6290,6291,6292,6295,6296,6298,6299,6301,6305],{},"Haga clic en el icono ",[462,6293,6294],{},"+"," (más) en la esquina inferior izquierda y seleccione su archivo ",[575,6297,5908],{}," guardado.",[4312,6300],{},[433,6302],{"alt":6303,"src":6304},"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",[433,6306],{"alt":6307,"src":6308},"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",[506,6310,6311,6312,6314,6315,6318,6319,6321],{},"Seleccione ",[462,6313,4153],{}," y haga clic en ",[462,6316,6317],{},"Instalar"," para aplicar la configuración.",[4312,6320],{},[433,6322],{"alt":6323,"src":6324},"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",[506,6326,6327,6328,6330],{},"Reinicie su cliente Cloudflare WARP. Ahora debería ver el conmutador de múltiples perfiles en la interfaz de usuario:",[4312,6329],{},[433,6331],{"alt":6332,"src":6333},"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",[493,6335,4982],{"id":4981},[429,6337,6338],{},"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.",[493,6340,1871],{"id":1870},[503,6342,6343,6350,6357,6364],{},[506,6344,6345],{},[442,6346,6349],{"href":6347,"rel":6348},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002F#prepare-file-for-mdm-deployment",[446],"Managed Deployment Preparation",[506,6351,6352],{},[442,6353,6356],{"href":6354,"rel":6355},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002Fswitch-organizations\u002F",[446],"Switch Between Zero Trust Organizations",[506,6358,6359],{},[442,6360,6363],{"href":6361,"rel":6362},"https:\u002F\u002Fblog.cloudflare.com\u002Fintroducing-warp-connector-paving-the-path-to-any-to-any-connectivity-2\u002F",[446],"Introducing WARP Connector: Paving the Path to Any-to-Any Connectivity",[506,6365,6366],{},[442,6367,6370],{"href":6368,"rel":6369},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002F",[446],"Cloudflare One Client Documentation",[1896,6372,6373],{},"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":599,"depth":605,"links":6375},[6376,6377,6378,6379,6380],{"id":5868,"depth":599,"text":5869},{"id":5882,"depth":599,"text":5883},{"id":5898,"depth":599,"text":5899},{"id":4981,"depth":599,"text":4982},{"id":1870,"depth":599,"text":1871},[5015,5846],"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":6387,"robots":1934,"sitemap":6389},[6388],{"@type":1933,"headline":4929,"description":6383},{"lastmod":6382},{"title":6385,"description":6383,"ogTitle":4929,"ogDescription":6383,"twitterTitle":4929,"twitterDescription":6383},"es\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",[6393,4153,6394,1944],"macOS","MDM","aj2L0bjhdmy_g2uOsHqYyd8bbtwlwGp1vCLs4OV9J8U",1792490010192]