[{"data":1,"prerenderedAt":14241},["ShallowReactive",2],{"published-article-paths":3,"search-navigation":348,"category-articles-es-security":421},[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",[422,1704,2649,4100,6263,8147,8719,9497,10030,10423,11044,11503,11712,11935,12273,12966,13398,13651],{"id":423,"title":424,"author":425,"body":426,"category":1658,"date":1662,"description":1663,"extension":1664,"image":1665,"imageAlt":1666,"isPublished":1064,"meta":1667,"minRead":1695,"navigation":1064,"path":75,"seo":1696,"stem":1698,"tags":1699,"updatedAt":1702,"__hash__":1703},"article\u002Fes\u002Farticle\u002Fbringing-buzz-to-deepseek-harness.md","Conectar DeepSeek Harness a Buzz: Pasarela de Nostr","",{"type":427,"value":428,"toc":1642},"minimark",[429,437,462,470,473,478,484,529,532,592,596,603,871,874,878,883,890,894,908,912,922,975,982,986,989,1021,1025,1030,1081,1089,1095,1104,1110,1141,1154,1158,1167,1198,1220,1268,1275,1280,1286,1293,1299,1304,1311,1325,1331,1340,1380,1383,1389,1396,1402,1406,1409,1560,1564,1598,1602,1608,1612,1638],[430,431,432],"p",{},[433,434],"img",{"alt":435,"src":436},"Vista general de la pasarela de mensajes DeepSeek Harness conectada a un canal de Block Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-nostr-gateway-overview.webp",[430,438,439,440,450,451,456,457,461],{},"El plugin de DeepSeek Harness (DSH), ",[441,442,443],"strong",{},[444,445,449],"a",{"href":446,"rel":447},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway",[448],"nofollow","dsh-message-gateway",", extiende el asistente de DeepSeek Harness a múltiples plataformas de mensajería como Discord, Telegram y WeChat. El repositorio del plugin fue bifurcado y ampliado para incorporar la plataforma ",[441,452,453],{},[444,454,455],{"href":383},"Cómo autoalojar Buzz de Block: Espacio de trabajo para agentes IA"," a la lista. El repositorio bifurcado está disponible en GitHub en ",[444,458,459],{"href":459,"rel":460},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway",[448],".",[463,464],"article-card",{"description":465,"image":466,"image-alt":467,"label":468,"min-read":469,"title":455,"to":383},"Aprenda a autoalojar el relay de Buzz en un VPS con Ubuntu detrás de Cloudflare. Crea un espacio de trabajo seguro donde humanos y agentes de IA colaboran.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002FES-Self-Hosting-Buzz-As-The-Workspace-Where-AI-Agents-Become-Colleagues.webp","Tarjeta tecnológica premium de 16:9 con detalles en azul profundo y naranja que ilustra cómo autoalojar el relay de Buzz de Block en un VPS Ubuntu, con un panel de estilo glassmorphic limpio con tipografía centrada.","Guía de requisitos previos","12",[430,471,472],{},"El asistente de DSH se une a un relay de Buzz como miembro, recibe mensajes directos (DM) y mensajes de canal en los que se le @menciona, y responde mediante el mismo pipeline de agentes por chat que utiliza la interfaz web.",[474,475,477],"h2",{"id":476},"arquitectura-del-plugin-dsh-message-gateway","Arquitectura del plugin dsh-message-gateway",[430,479,480,481,483],{},"La arquitectura del plugin ",[441,482,449],{}," se divide en dos componentes principales:",[485,486,487,519],"ul",{},[488,489,490,493,494,498,499,502,503,506,507,510,511,514,515,518],"li",{},[441,491,492],{},"Host"," (Node): ",[495,496,497],"code",{},"gateway-store"," (credenciales, ",[495,500,501],{},"~\u002F.dsh\u002Fgateway.json","), ",[495,504,505],{},"platforms.ts"," (definiciones de plataformas y pruebas de conectividad), ",[495,508,509],{},"routes.ts"," (endpoints ",[495,512,513],{},"\u002Fgateway\u002F*",") y ",[495,516,517],{},"bridge-manager.ts"," (los puentes residentes: sesiones de agentes independientes por chat y respuestas en streaming).",[488,520,521,524,525,528],{},[441,522,523],{},"Cliente"," (navegador): la página \"",[441,526,527],{},"Message platforms","\" en la barra lateral, donde se guardan credenciales, se prueban conexiones y se monitoriza el estado del servicio.",[430,530,531],{},"Añadir una nueva plataforma implica los siguientes pasos:",[533,534,535,552,566],"ol",{},[488,536,537,540,541,544,545,548,549,461],{},[441,538,539],{},"Una clase de puente (bridge)",": métodos ",[495,542,543],{},"start\u002Fstop\u002Fstatus"," junto con un callback ",[495,546,547],{},"onText(text, frame)",", reflejando la estructura de ",[495,550,551],{},"wecom-bridge.ts",[488,553,554,557,558,561,562,565],{},[441,555,556],{},"Conexión en bridge-manager",": reutilizar el pipeline por chat existente (",[495,559,560],{},"ensureAgentForKey"," + ",[495,563,564],{},"pendingMap",") e integrar el receptor de respuestas de la plataforma.",[488,567,568,571,572,575,576,579,580,583,584,587,588,591],{},[441,569,570],{},"Persistencia y rutas",": en ",[495,573,574],{},"\u002Fgateway\u002Fsave"," y ",[495,577,578],{},"\u002Fgateway\u002Fdelete",": ",[441,581,582],{},"guardar credenciales inicia el puente, eliminarlas lo detiene",", además de una bandera ",[495,585,586],{},"autoStartXxx"," para que ",[495,589,590],{},"dsh web"," reconecte automáticamente al arrancar.",[474,593,595],{"id":594},"implementación-del-puente-buzz-protocolo-nostr-y-ciclo-de-vida-de-eventos","Implementación del puente Buzz: Protocolo Nostr y ciclo de vida de eventos",[430,597,598,599,602],{},"Se utilizó ",[441,600,601],{},"DeepSeek Harness"," para implementar el puente hacia Buzz. La implementación se ajusta a las siguientes especificaciones del protocolo Nostr:",[604,605,606,632],"table",{},[607,608,609],"thead",{},[610,611,612,618],"tr",{},[613,614,615],"th",{},[441,616,617],{},"Transporte",[613,619,620,621,624,625,628,629],{},"Un WebSocket autenticado mediante NIP-42; por defecto ",[495,622,623],{},"ws:\u002F\u002Flocalhost:3000","; ",[495,626,627],{},"http(s):\u002F\u002F"," se normaliza a ",[495,630,631],{},"ws(s):\u002F\u002F",[633,634,635,654,682,699,722,746,771,784,797,816,833,847],"tbody",{},[610,636,637,643],{},[638,639,640],"td",{},[441,641,642],{},"Autenticación",[638,644,645,646,649,650,653],{},"Evento AUTH ",[495,647,648],{},"kind 22242",", etiquetas ",[495,651,652],{},"[[\"relay\", url], [\"challenge\", challenge]]",", contenido vacío, firmado con la clave privada del agente",[610,655,656,661],{},[638,657,658],{},[441,659,660],{},"Suscripciones",[638,662,663,579,666,669,670,673,674,677,678,681],{},[441,664,665],{},"Por canal",[495,667,668],{},"REQ {\"kinds\":[9], \"#h\":[\u003Cuuid>]}"," — un REQ por canal. Un REQ global ",[495,671,672],{},"kinds:[9]"," recibe EOSE pero nunca difunde eventos; el filtro ",[495,675,676],{},"#h"," con múltiples valores ",[441,679,680],{},"no"," funciona",[610,683,684,689],{},[638,685,686],{},[441,687,688],{},"Descubrimiento",[638,690,691,694,695,698],{},[495,692,693],{},"REQ {kinds:[39000]}"," histórico para metadatos de canal (",[495,696,697],{},"type == \"dm\""," identifica canales de mensajes directos)",[610,700,701,706],{},[638,702,703],{},[441,704,705],{},"Membresía",[638,707,708,711,712,714,715,718,719],{},[495,709,710],{},"REQ {kinds:[44100,44101], \"#p\":[nuestra pubkey], since: now-60s}"," en tiempo real — 44100 = añadido, 44101 = eliminado, portando ",[495,713,430],{},"+",[495,716,717],{},"h","; actualiza suscripciones ",[441,720,721],{},"sin reconectar",[610,723,724,729],{},[638,725,726],{},[441,727,728],{},"Eventos de chat",[638,730,731,734,735,738,739,742,743],{},[495,732,733],{},"kind 9"," con etiquetas ",[495,736,737],{},"[\"h\", canal]",", opcional ",[495,740,741],{},"[\"e\", replyTo]",", ",[495,744,745],{},"[\"p\", mención]",[610,747,748,753],{},[638,749,750],{},[441,751,752],{},"Ediciones in situ",[638,754,755,758,759,561,761,764,765,767,768,770],{},[495,756,757],{},"kind 40003"," con ",[495,760,717],{},[495,762,763],{},"e","→objetivo; sustituye contenido; límite de 64 KB en relay → mantener payloads ≤ 60.000 B; respuestas grandes se fragmentan — el fragmento 0 viaja en la edición y los sobrantes se añaden como mensajes ",[495,766,733],{}," en hilo (",[495,769,763],{},"→raíz)",[610,772,773,778],{},[638,774,775],{},[441,776,777],{},"Tramas CLOSED",[638,779,780,783],{},[495,781,782],{},"auth-required"," antes de AUTH es normal durante el arranque (completar AUTH y reabrir subs); tras AUTH → reintento delimitado (3 intentos, backoff 0\u002F1\u002F2 s); reconectar reconstruye todo",[610,785,786,791],{},[638,787,788],{},[441,789,790],{},"Límites de relay",[638,792,793,794],{},"≤ 2000 eventos históricos por suscripción, ordenados del más reciente al más antiguo incluso usando ",[495,795,796],{},"since",[610,798,799,804],{},[638,800,801],{},[441,802,803],{},"Control de menciones",[638,805,806,807,809,810,812,813,815],{},"Procesa ",[495,808,733],{}," entrantes solo cuando: (a) la etiqueta ",[495,811,430],{}," incluye nuestra pubkey, (b) el canal es DM, o (c) la raíz ",[495,814,763],{}," es nuestro propio evento. Ignora nuestra pubkey (anti-bucle)",[610,817,818,823],{},[638,819,820],{},[441,821,822],{},"Menciones salientes",[638,824,825,826,829,830,832],{},"El texto saliente se publica tal cual — el relay no valida tokens ",[495,827,828],{},"@","; las etiquetas ",[495,831,430],{}," incluyen al autor entrante más hasta 7 pubkeys adicionales mencionadas (máx. 8)",[610,834,835,840],{},[638,836,837],{},[441,838,839],{},"Mensajes directos",[638,841,842,843,846],{},"Canales de texto plano delimitados al relay (metadatos ",[495,844,845],{},"type: \"dm\"",") — sin cifrado NIP-04\u002F44 en este puente",[610,848,849,854],{},[638,850,851],{},[441,852,853],{},"Archivos adjuntos",[638,855,856,857,860,861,742,864,742,867,870],{},"NIP-92 ",[495,858,859],{},"imeta"," (",[495,862,863],{},"url",[495,865,866],{},"sha256",[495,868,869],{},"m",") → descarga http(s) estándar, verificación de SHA-256, límite de 20 MB, máx. 4 por mensaje; las imágenes salientes no están soportadas",[430,872,873],{},"El siguiente diagrama ilustra el proceso de inicialización (bootstrap) del puente hacia Buzz:",[433,875],{"src":876,"alt":877},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-bootstrap.webp","Diagrama de secuencia que ilustra el proceso de arranque y autenticación NIP-42 del puente Buzz",[879,880,882],"h3",{"id":881},"streaming-en-tiempo-real-mediante-ediciones-in-situ-de-nostr-kind-40003","Streaming en tiempo real mediante ediciones in situ de Nostr (Kind 40003)",[430,884,885,886,889],{},"Nostr no cuenta con indicador nativo de escritura y sus eventos son de solo adición. Para ofrecer una experiencia interactiva y dinámica, el puente de Buzz ",[441,887,888],{},"simula streaming mediante ediciones in situ",":",[433,891],{"src":892,"alt":893},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-reply.webp","Diagrama del flujo de edición in situ que simula respuestas en streaming con eventos kind 40003",[485,895,896],{},[488,897,898],{},[899,900,901,902,904,905,907],"em",{},"El puente de Buzz publica primero un evento marcador de posición ",[495,903,733],{},", luego lo reescribe progresivamente con ediciones in situ ",[495,906,757],{}," limitadas por frecuencia, y finalmente asienta la edición definitiva cuando el agente concluye su respuesta. Este mecanismo reproduce el patrón utilizado en los puentes de Telegram y Discord.",[879,909,911],{"id":910},"vinculación-de-espacios-de-trabajo-de-deepseek-harness-mediante-comandos-de-chat","Vinculación de espacios de trabajo de DeepSeek Harness mediante comandos de chat",[430,913,914,915,860,918,921],{},"La funcionalidad de \"Workspaces\" en la interfaz web de DSH está respaldada por el servicio ",[495,916,917],{},"workspaceRegistry",[495,919,920],{},"@deepseek-ai\u002Fdsh-workspace","):",[923,924,928],"pre",{"className":925,"code":926,"language":927,"meta":425,"style":425},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const existing = await ctx.workspaceRegistry.resolveByPath(request.path);\n","typescript",[495,929,930],{"__ignoreMap":425},[931,932,935,939,943,947,951,954,956,958,960,964,967,969,972],"span",{"class":933,"line":934},"line",1,[931,936,938],{"class":937},"spNyl","const",[931,940,942],{"class":941},"sTEyZ"," existing ",[931,944,946],{"class":945},"sMK4o","=",[931,948,950],{"class":949},"s7zQu"," await",[931,952,953],{"class":941}," ctx",[931,955,461],{"class":945},[931,957,917],{"class":941},[931,959,461],{"class":945},[931,961,963],{"class":962},"s2Zo4","resolveByPath",[931,965,966],{"class":941},"(request",[931,968,461],{"class":945},[931,970,971],{"class":941},"path)",[931,973,974],{"class":945},";\n",[430,976,977,978,981],{},"El puente de Buzz ofrece el comando de chat ",[495,979,980],{},"\u002Fworkspace \u003Ccarpeta>",", que registra un directorio existente en DSH. Cualquier nueva sesión creada a través de la pasarela se vincula a dicha carpeta y se refleja en la interfaz web.",[433,983],{"src":984,"alt":985},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace.webp","Arquitectura del registro de espacios de trabajo de DeepSeek Harness desde comandos de chat",[430,987,988],{},"Tres consideraciones de diseño relevantes:",[485,990,991,1001,1011],{},[488,992,993,996,997,1000],{},[441,994,995],{},"Cambiar de carpeta implica una nueva sesión."," El valor ",[495,998,999],{},"cwd"," se fija en la cabecera de la sesión al crearse y no puede modificarse posteriormente.",[488,1002,1003,1006,1007,1010],{},[441,1004,1005],{},"La carpeta debe existir previamente."," El método ",[495,1008,1009],{},"create"," rechaza rutas inexistentes.",[488,1012,1013,1016,1017,1020],{},[441,1014,1015],{},"Comando sensible a la seguridad."," Cada sesión opera con una directiva de ",[441,1018,1019],{},"auto-aprobación",", otorgando acceso de lectura y ejecución en el directorio indicado.",[474,1022,1024],{"id":1023},"guía-paso-a-paso-de-instalación-y-configuración","Guía paso a paso de instalación y configuración",[533,1026,1027],{},[488,1028,1029],{},"Ejecute los siguientes comandos en la terminal:",[923,1031,1035],{"className":1032,"code":1033,"language":1034,"meta":425,"style":425},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","dsh plugin --profile web add https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway.git\n\n# Start DSH web\ndsh web\n","bash",[495,1036,1037,1059,1066,1073],{"__ignoreMap":425},[931,1038,1039,1043,1047,1050,1053,1056],{"class":933,"line":934},[931,1040,1042],{"class":1041},"sBMFI","dsh",[931,1044,1046],{"class":1045},"sfazB"," plugin",[931,1048,1049],{"class":1045}," --profile",[931,1051,1052],{"class":1045}," web",[931,1054,1055],{"class":1045}," add",[931,1057,1058],{"class":1045}," https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway.git\n",[931,1060,1062],{"class":933,"line":1061},2,[931,1063,1065],{"emptyLinePlaceholder":1064},true,"\n",[931,1067,1069],{"class":933,"line":1068},3,[931,1070,1072],{"class":1071},"sHwdD","# Start DSH web\n",[931,1074,1076,1078],{"class":933,"line":1075},4,[931,1077,1042],{"class":1041},[931,1079,1080],{"class":1045}," web\n",[533,1082,1083],{"start":1061},[488,1084,1085,1086,1088],{},"Una vez que la interfaz web de DSH se abra en el navegador, haga clic en el icono \"",[441,1087,527],{},"\":",[430,1090,1091],{},[433,1092],{"alt":1093,"src":1094},"Barra lateral de la interfaz web de DeepSeek Harness destacando el menú Message platforms","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-web-ui-message-platforms-sidebar-icon.webp",[533,1096,1097],{"start":1068},[488,1098,1099,1100,1103],{},"Seleccione \"",[441,1101,1102],{},"Buzz","\" en el panel lateral izquierdo:",[430,1105,1106],{},[433,1107],{"alt":1108,"src":1109},"Panel de configuración del puente Buzz en la pasarela de mensajes de DeepSeek Harness","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-message-gateway-buzz-config-panel.webp",[533,1111,1112,1123,1134],{"start":1075},[488,1113,1114,1115,1118,1119,1122],{},"Haga clic en \"",[441,1116,1117],{},"Generate keypair","\" para generar un par de claves Nostr. Copie la clave pública ",[495,1120,1121],{},"npub"," en un lugar seguro para los pasos siguientes.",[488,1124,1125,1126,1129,1130,1133],{},"Ingrese la ",[441,1127,1128],{},"Relay URL"," y los ",[441,1131,1132],{},"Channels"," (la lista de UUIDs de canales permitidos para suscribirse).",[488,1135,1136,1137,1140],{},"Presione el botón \"",[441,1138,1139],{},"Save","\".",[430,1142,1143,1144,1147,1148,1151,1152,461],{},"Al guardar el formulario se almacenan las credenciales y ",[441,1145,1146],{},"se inicia el puente",". La clave privada ",[495,1149,1150],{},"nsec"," se trata como un secreto estricto y se guarda exclusivamente en ",[495,1153,501],{},[879,1155,1157],{"id":1156},"registro-del-par-de-claves-del-agente-en-el-relay-nostr-de-buzz","Registro del par de claves del agente en el relay Nostr de Buzz",[430,1159,1160,1163,1164,1166],{},[441,1161,1162],{},"Añada el asistente de DSH al relay como miembro."," Utilice la clave ",[495,1165,1121],{}," generada previamente:",[923,1168,1170],{"className":1032,"code":1169,"language":1034,"meta":425,"style":425},"docker compose exec relay buzz-admin add-member --pubkey npub123123123\n",[495,1171,1172],{"__ignoreMap":425},[931,1173,1174,1177,1180,1183,1186,1189,1192,1195],{"class":933,"line":934},[931,1175,1176],{"class":1041},"docker",[931,1178,1179],{"class":1045}," compose",[931,1181,1182],{"class":1045}," exec",[931,1184,1185],{"class":1045}," relay",[931,1187,1188],{"class":1045}," buzz-admin",[931,1190,1191],{"class":1045}," add-member",[931,1193,1194],{"class":1045}," --pubkey",[931,1196,1197],{"class":1045}," npub123123123\n",[430,1199,1200,1203,1204,1207,1208,1211,1212,1215,1216,1219],{},[441,1201,1202],{},"Incorpore el asistente a un canal específico."," Registrar un miembro en el relay no lo hace visible ni localizable de forma automática en los canales. Para agregarlo mediante ",[495,1205,1206],{},"buzz-cli",", tenga en cuenta que el parámetro ",[495,1209,1210],{},"--pubkey"," debe especificarse en formato ",[441,1213,1214],{},"HEX",", no npub (el comando ",[495,1217,1218],{},"buzz-admin add-member"," imprime la clave HEX correspondiente):",[923,1221,1223],{"className":1032,"code":1222,"language":1034,"meta":425,"style":425},"buzz channels add-member --channel \u003CCHANNEL_UUID> --pubkey \u003CAGENT_HEX> --role member\n",[495,1224,1225],{"__ignoreMap":425},[931,1226,1227,1230,1233,1235,1238,1241,1244,1247,1250,1252,1254,1257,1260,1262,1265],{"class":933,"line":934},[931,1228,1229],{"class":1041},"buzz",[931,1231,1232],{"class":1045}," channels",[931,1234,1191],{"class":1045},[931,1236,1237],{"class":1045}," --channel",[931,1239,1240],{"class":945}," \u003C",[931,1242,1243],{"class":1045},"CHANNEL_UUI",[931,1245,1246],{"class":941},"D",[931,1248,1249],{"class":945},">",[931,1251,1194],{"class":1045},[931,1253,1240],{"class":945},[931,1255,1256],{"class":1045},"AGENT_HE",[931,1258,1259],{"class":941},"X",[931,1261,1249],{"class":945},[931,1263,1264],{"class":1045}," --role",[931,1266,1267],{"class":1045}," member\n",[463,1269],{"description":1270,"image":466,"image-alt":467,"label":1271,"min-read":1272,"title":1273,"to":1274},"Instrucciones paso a paso para instalar y configurar buzz-cli para gestionar canales de Nostr, claves de miembros y permisos de agentes de IA.","Guía de CLI","5","Cómo instalar y usar buzz-cli","\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#install-buzz-cli",[430,1276,1277,1278,889],{},"Actualice el perfil del asistente en el relay Nostr asignándole un nombre descriptivo con ",[495,1279,1206],{},[430,1281,1282],{},[433,1283],{"alt":1284,"src":1285},"Actualización del nombre del asistente DeepSeek Harness en el relay Nostr mediante buzz-cli","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-assistant-buzz-cli-profile-update.webp",[430,1287,1288,1289,1292],{},"Envíe un saludo ",[441,1290,1291],{},"Wave"," (el saludo inicial de Buzz para mensajes directos) al asistente. La respuesta confirma la conexión:",[430,1294,1295],{},[433,1296],{"alt":1297,"src":1298},"Prueba de conexión enviando un saludo Wave como DM al asistente DeepSeek Harness en Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-dm-wave-greeting-reply.webp",[430,1300,1301],{},[899,1302,1303],{},"Envío de un Wave como mensaje directo al asistente de DSH: el puente está operativo.",[879,1305,1307,1308],{"id":1306},"habilitación-del-acceso-a-carpetas-locales-con-workspace","Habilitación del acceso a carpetas locales con ",[495,1309,1310],{},"\u002Fworkspace",[430,1312,1313,1314,1317,1318,1321,1322,1324],{},"Debido a que el parámetro ",[495,1315,1316],{},"allowWorkspace"," está deshabilitado (",[495,1319,1320],{},"false",") por defecto, el comando ",[495,1323,1310],{}," será rechazado inicialmente:",[430,1326,1327],{},[433,1328],{"alt":1329,"src":1330},"Notificación de error mostrando el rechazo del comando workspace con allowWorkspace desactivado","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace-command-rejected-error.webp",[430,1332,1333,1334,1337,1338,889],{},"Habilítelo en ",[495,1335,1336],{},"~\u002F.dsh\u002Fprofiles\u002Fweb\u002Fcordis.patch.yml"," y reinicie ",[495,1339,590],{},[923,1341,1345],{"className":1342,"code":1343,"language":1344,"meta":425,"style":425},"language-yml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","- id: ui-message-gateway\n  config:\n    allowWorkspace: true\n","yml",[495,1346,1347,1361,1369],{"__ignoreMap":425},[931,1348,1349,1352,1356,1358],{"class":933,"line":934},[931,1350,1351],{"class":945},"-",[931,1353,1355],{"class":1354},"swJcz"," id",[931,1357,889],{"class":945},[931,1359,1360],{"class":1045}," ui-message-gateway\n",[931,1362,1363,1366],{"class":933,"line":1061},[931,1364,1365],{"class":1354},"  config",[931,1367,1368],{"class":945},":\n",[931,1370,1371,1374,1376],{"class":933,"line":1068},[931,1372,1373],{"class":1354},"    allowWorkspace",[931,1375,889],{"class":945},[931,1377,1379],{"class":1378},"sfNiH"," true\n",[430,1381,1382],{},"Tras reiniciar el servicio:",[430,1384,1385],{},[433,1386],{"alt":1387,"src":1388},"Mensaje de confirmación exitosa tras ejecutar el comando de registro de workspace en Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace-command-success-confirmation.webp",[430,1390,1391,1392,1395],{},"Nota importante: este comando asume que el directorio del workspace (",[495,1393,1394],{},"TechVoyage"," en las capturas) reside dentro del directorio predeterminado del usuario. De lo contrario, indique la ruta absoluta completa. Cualquier nueva sesión creada bajo este workspace desde Buzz aparecerá también en la interfaz web de DeepSeek Harness.",[430,1397,1398],{},[433,1399],{"alt":1400,"src":1401},"Interfaz web de DeepSeek Harness mostrando la sesión de workspace sincronizada desde Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-web-ui-synced-workspace-session.webp",[879,1403,1405],{"id":1404},"comandos-disponibles-en-buzz","Comandos disponibles en Buzz",[430,1407,1408],{},"Todas las funcionalidades y comandos disponibles en las demás plataformas están plenamente soportados en Buzz:",[604,1410,1411,1421],{},[607,1412,1413],{},[610,1414,1415,1418],{},[613,1416,1417],{},"Comando",[613,1419,1420],{},"Descripción",[633,1422,1423,1433,1443,1453,1463,1473,1483,1493,1503,1523,1543],{},[610,1424,1425,1430],{},[638,1426,1427],{},[495,1428,1429],{},"\u002Fworkspace \u003Cfolder>",[638,1431,1432],{},"Registra una carpeta existente como espacio de trabajo del chat (requiere habilitación en configuración)",[610,1434,1435,1440],{},[638,1436,1437],{},[495,1438,1439],{},"\u002Fhelp",[638,1441,1442],{},"Muestra la lista de comandos disponibles",[610,1444,1445,1450],{},[638,1446,1447],{},[495,1448,1449],{},"\u002Ftime",[638,1451,1452],{},"Informa la hora actual del sistema",[610,1454,1455,1460],{},[638,1456,1457],{},[495,1458,1459],{},"\u002Fnew",[638,1461,1462],{},"Inicia una nueva sesión de conversación limpia",[610,1464,1465,1470],{},[638,1466,1467],{},[495,1468,1469],{},"\u002Fclear",[638,1471,1472],{},"Limpia el historial de la conversación actual",[610,1474,1475,1480],{},[638,1476,1477],{},[495,1478,1479],{},"\u002Fstatus",[638,1481,1482],{},"Muestra el estado operativo del puente",[610,1484,1485,1490],{},[638,1486,1487],{},[495,1488,1489],{},"\u002Fstats",[638,1491,1492],{},"Muestra estadísticas de chats activos y estado de puentes en todas las plataformas (incluido Buzz)",[610,1494,1495,1500],{},[638,1496,1497],{},[495,1498,1499],{},"\u002Fcommands",[638,1501,1502],{},"Lista descriptiva de cada comando soportado",[610,1504,1505,1510],{},[638,1506,1507],{},[495,1508,1509],{},"@path\u002Fto\u002Ffile",[638,1511,1512,1513,742,1515,1518,1519,1522],{},"Funciona como las menciones web de archivos: el modelo lee el archivo relativo al workspace; ",[495,1514,828],{},[495,1516,1517],{},"@prefijo"," o ",[495,1520,1521],{},"\u002Ffiles \u003Cprefijo>"," devuelven archivos y carpetas coincidentes",[610,1524,1525,1530],{},[638,1526,1527],{},[495,1528,1529],{},"\u002Fmodel",[638,1531,1532,1535,1536,1538,1539,1542],{},[495,1533,1534],{},"[provider model effort]"," — validado frente al catálogo de modelos LLM activos; ",[495,1537,1529],{}," lista opciones disponibles y ",[495,1540,1541],{},"\u002Fmodel reset"," restablece valores predeterminados",[610,1544,1545,1550],{},[638,1546,1547],{},[495,1548,1549],{},"\u002Feffort",[638,1551,1552,1555,1556,1559],{},[495,1553,1554],{},"\u003Cid>"," modifica exclusivamente el esfuerzo de razonamiento del modelo; ",[495,1557,1558],{},"\u002Feffort reset"," restablece el valor por defecto",[879,1561,1563],{"id":1562},"aspectos-clave-de-seguridad","Aspectos clave de seguridad",[485,1565,1566,1579,1589],{},[488,1567,1568,1569,1571,1572,1574,1575,1578],{},"La clave privada ",[441,1570,1150],{}," reside únicamente en ",[495,1573,501],{}," (permisos 0600, escritura atómica) — nunca se expone en endpoints como ",[495,1576,1577],{},"\u002Fgateway\u002Flist"," ni en registros de depuración.",[488,1580,1581,1582,860,1585,1588],{},"Cada evento entrante es ",[441,1583,1584],{},"verificado criptográficamente",[495,1586,1587],{},"verifyEvent","), deduplicado, filtrado contra mensajes propios y evaluado por reglas de mención antes de llegar al agente.",[488,1590,1591,860,1594,1597],{},[441,1592,1593],{},"El registro de workspaces está restringido por configuración",[495,1595,1596],{},"allowWorkspace: false"," por defecto), garantizando control estricto sobre sesiones automáticas con acceso a archivos locales.",[474,1599,1601],{"id":1600},"conclusión-colaboración-descentralizada-con-agentes-ia-en-buzz","Conclusión: Colaboración descentralizada con agentes IA en Buzz",[430,1603,1604,1605,1607],{},"El desafío central al integrar Buzz en ",[495,1606,449],{}," radicó en implementar fielmente el contrato de eventos del protocolo Nostr. La arquitectura base del plugin ya ofrecía una sólida gestión de sesiones independientes y enrutamiento de comandos, permitiendo una integración fluida en cuanto se resolvieron el manejo de eventos y el streaming interactivo.",[474,1609,1611],{"id":1610},"referencias","Referencias:",[485,1613,1614,1622,1630],{},[488,1615,1616,1621],{},[444,1617,1620],{"href":1618,"rel":1619},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway\u002Fblob\u002Fmain\u002Fdocs\u002Farchitecture.md",[448],"dsh-message-gateway architecture guide"," — guía de arquitectura, extensiones y notas de seguridad",[488,1623,1624,1629],{},[444,1625,1628],{"href":1626,"rel":1627},"https:\u002F\u002Fgithub.com\u002Fnbd-wtf\u002Fnostr-tools",[448],"nostr-tools"," — librería Nostr utilizada internamente",[488,1631,1632,1637],{},[444,1633,1636],{"href":1634,"rel":1635},"https:\u002F\u002Fgithub.com\u002Fbytedance\u002Fdeer-flow\u002Fblob\u002Fmain\u002Fbackend\u002Fdocs\u002FIM_CHANNEL_CONNECTIONS.md",[448],"deer-flow IM channel connections"," — patrones de referencia para conexiones de canales de mensajería instantánea",[1639,1640,1641],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":425,"searchDepth":1061,"depth":1068,"links":1643},[1644,1645,1649,1656,1657],{"id":476,"depth":1061,"text":477},{"id":594,"depth":1061,"text":595,"children":1646},[1647,1648],{"id":881,"depth":1068,"text":882},{"id":910,"depth":1068,"text":911},{"id":1023,"depth":1061,"text":1024,"children":1650},[1651,1652,1654,1655],{"id":1156,"depth":1068,"text":1157},{"id":1306,"depth":1068,"text":1653},"Habilitación del acceso a carpetas locales con \u002Fworkspace",{"id":1404,"depth":1068,"text":1405},{"id":1562,"depth":1068,"text":1563},{"id":1600,"depth":1061,"text":1601},{"id":1610,"depth":1061,"text":1611},[1659,1660,1229,1661],"ai-agents","collaboration","deepseek-harness","2026-09-30","Integre DeepSeek Harness con Block Buzz mediante un puente Nostr. Configure auth NIP-42, streaming de mensajes in situ y espacios de trabajo para agentes IA.","md","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002FES-Bringing-Buzz-to-DeepSeek-Harness.webp","Una tarjeta tecnológica premium en formato 16:9 con detalles en índigo profundo y ámbar que ilustra cómo conectar DeepSeek Harness a Block Buzz mediante un puente Nostr, con un panel glassmorphic limpio y tipografía centrada.",{"schemaOrg":1668,"robots":1693,"sitemap":1694},[1669,1671],{"@type":1670,"headline":424,"description":1663,"image":1665},"TechArticle",{"@type":1672,"name":424,"description":1663,"image":1665,"step":1673},"HowTo",[1674,1678,1681,1684,1687,1690],{"@type":1675,"name":1676,"text":1677},"HowToStep","Fase 1: Instalar el plugin de pasarela","Instale el plugin dsh-message-gateway e inicie el servicio dsh web.",{"@type":1675,"name":1679,"text":1680},"Fase 2: Acceder a Message platforms","Abra la interfaz web de DSH y navegue a la configuración de Message platforms.",{"@type":1675,"name":1682,"text":1683},"Fase 3: Configurar el puente Buzz","Genere un par de claves Nostr, introduzca la URL del relay y los canales.",{"@type":1675,"name":1685,"text":1686},"Fase 4: Registrar el agente en el relay","Añada el asistente DSH al relay Nostr de Buzz mediante buzz-admin.",{"@type":1675,"name":1688,"text":1689},"Fase 5: Asignar el agente al canal","Incorpore la clave HEX del agente a los canales con buzz-cli.",{"@type":1675,"name":1691,"text":1692},"Fase 6: Habilitar acceso a workspaces","Configure allowWorkspace en cordis.patch.yml para permitir comandos de carpetas locales.","index, follow",{"lastmod":1662},11,{"title":1697,"description":1663,"ogTitle":424,"ogDescription":1663,"twitterTitle":424,"twitterDescription":1663},"Plugin Buzz para DeepSeek Harness: Puente con Nostr","es\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",[601,1102,1700,1701,449],"Nostr","Agentes IA",null,"5pRM58gceZkJcX7vzlrrURk_t3UoxsYGJRDW8QoBesI",{"id":1705,"title":1706,"author":425,"body":1707,"category":2601,"date":2603,"description":2604,"extension":1664,"image":2605,"imageAlt":2606,"isPublished":1064,"meta":2607,"minRead":2281,"navigation":1064,"path":79,"seo":2641,"stem":2643,"tags":2644,"updatedAt":2640,"__hash__":2648},"article\u002Fes\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp.md","Cómo exponer Hermes Agent de forma privada con WARP",{"type":427,"value":1708,"toc":2583},[1709,1724,1734,1738,1741,1753,1757,1765,1769,1773,1822,1826,1963,1967,2001,2005,2008,2074,2077,2113,2116,2143,2147,2157,2162,2200,2289,2293,2298,2315,2324,2403,2408,2454,2458,2503,2518,2522,2566,2570,2580],[430,1710,1711,1712,1715,1716,1719,1720,1723],{},"Un desafío común surge cuando desea acceder a su ",[441,1713,1714],{},"Hermes Agent"," desde otros dispositivos como portátiles, tabletas o teléfonos sin exponerlo a la Internet pública. El uso de ",[441,1717,1718],{},"Cloudflare WARP"," junto con ",[441,1721,1722],{},"Cloudflare Zero Trust"," le permite exponer el Hermes Agent a nivel mundial sin necesidad de abrir un solo puerto de entrada en su firewall.",[430,1725,1726,1727,1730,1731,1733],{},"Si siguió nuestra guía anterior, '",[444,1728,1729],{"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 ",[441,1732,1718],{}," para exponer el Hermes Agent a una red privada a través de Internet.",[474,1735,1737],{"id":1736},"comprender-la-arquitectura","Comprender la arquitectura",[430,1739,1740],{},"Los componentes en juego:",[533,1742,1743,1748],{},[488,1744,1745,1747],{},[441,1746,1722],{},": El panel de control en Cloudflare donde define reglas de enrutamiento y políticas de acceso.",[488,1749,1750,1752],{},[441,1751,1718],{},": 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.",[879,1754,1756],{"id":1755},"requisitos-previos","Requisitos previos",[485,1758,1759,1762],{},[488,1760,1761],{},"Un Hermes Agent en ejecución en su VPS.",[488,1763,1764],{},"Una cuenta gratuita de Cloudflare.",[474,1766,1768],{"id":1767},"guía-paso-a-paso","Guía paso a paso",[879,1770,1772],{"id":1771},"paso-1-configurar-cloudflare-zero-trust","Paso 1: Configurar Cloudflare Zero Trust",[533,1774,1775,1783,1790,1801,1808,1815],{},[488,1776,1777,1778,461],{},"Inicie sesión en su ",[444,1779,1782],{"href":1780,"rel":1781},"https:\u002F\u002Fdash.cloudflare.com\u002F",[448],"Panel de Cloudflare",[488,1784,1785,1786],{},"Haga clic en 'Zero Trust' en el menú de la izquierda.\n",[433,1787],{"alt":1788,"src":1789},"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",[488,1791,1792,1793,1796,1797],{},"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, ",[495,1794,1795],{},"ai-team",").\n",[433,1798],{"alt":1799,"src":1800},"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",[488,1802,1803,1804],{},"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,1805],{"alt":1806,"src":1807},"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",[488,1809,1810,1811],{},"Haga clic en 'Create new policy'.\n",[433,1812],{"alt":1813,"src":1814},"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",[488,1816,1817,1818],{},"Seleccione 'Emails' e introduzca su correo electrónico en 'Policy rules'.\n",[433,1819],{"alt":1820,"src":1821},"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",[879,1823,1825],{"id":1824},"paso-2-configurar-el-cliente-cloudflare-warp-en-el-vps","Paso 2: Configurar el cliente Cloudflare WARP en el VPS",[533,1827,1828,1838,1844,1851,1854,1869,1872,1956],{},[488,1829,1830,1831,575,1834,1837],{},"Ejecute ",[495,1832,1833],{},"sudo apt update",[495,1835,1836],{},"sudo apt install cloudflare-warp"," en la terminal de su VPS.",[488,1839,1830,1840,1843],{},[495,1841,1842],{},"warp-cli registration new \u003CTEAM-NAME>"," en la terminal de su VPS, lo cual imprimirá una URL.",[488,1845,1846,1847,1850],{},"Copie la URL impresa, que se verá como ",[495,1848,1849],{},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fwarp",", y péguela en su navegador para la autenticación.",[488,1852,1853],{},"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.",[488,1855,1856,1857,1860,1861,1864,1865,1868],{},"En la página de '",[441,1858,1859],{},"Success","' (Éxito) en el navegador, haga clic derecho y seleccione '",[441,1862,1863],{},"Inspect","' (Inspeccionar) en el botón azul '",[441,1866,1867],{},"Open Cloudflare WARP","'.",[488,1870,1871],{},"Copie el token largo que se muestra en el enlace del botón.",[488,1873,1830,1874,1877,1878,1881,1882],{},[495,1875,1876],{},"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.",[1879,1880],"br",{},"Si encuentra el error 'Error: Failed to communicate with the WARP API' en Ubuntu 26, ejecute los siguientes comandos:",[923,1883,1885],{"className":1032,"code":1884,"language":1034,"meta":425,"style":425},"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",[495,1886,1887,1901,1905,1910,1921,1926,1932],{"__ignoreMap":425},[931,1888,1889,1892,1895,1898],{"class":933,"line":934},[931,1890,1891],{"class":1041},"sudo",[931,1893,1894],{"class":1045}," systemctl",[931,1896,1897],{"class":1045}," restart",[931,1899,1900],{"class":1045}," warp-svc.service\n",[931,1902,1903],{"class":933,"line":1061},[931,1904,1065],{"emptyLinePlaceholder":1064},[931,1906,1907],{"class":933,"line":1068},[931,1908,1909],{"class":1071},"# Check status\n",[931,1911,1912,1914,1916,1919],{"class":933,"line":1075},[931,1913,1891],{"class":1041},[931,1915,1894],{"class":1045},[931,1917,1918],{"class":1045}," status",[931,1920,1900],{"class":1045},[931,1922,1924],{"class":933,"line":1923},5,[931,1925,1065],{"emptyLinePlaceholder":1064},[931,1927,1929],{"class":933,"line":1928},6,[931,1930,1931],{"class":1071},"# Run the warp-cli registration token again\n",[931,1933,1935,1938,1941,1944,1947,1950,1953],{"class":933,"line":1934},7,[931,1936,1937],{"class":1041},"warp-cli",[931,1939,1940],{"class":1045}," --accept-tos",[931,1942,1943],{"class":1045}," registration",[931,1945,1946],{"class":1045}," token",[931,1948,1949],{"class":945},"   \"",[931,1951,1952],{"class":1045},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>",[931,1954,1955],{"class":945},"\"\n",[488,1957,1958,1959],{},"Vuelva al panel de Cloudflare Zero Trust y haga clic en 'Devices' (Dispositivos). Su dispositivo VPS debería aparecer ahora.\n",[433,1960],{"alt":1961,"src":1962},"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",[879,1964,1966],{"id":1965},"paso-3-configurar-el-enrutamiento-del-tráfico","Paso 3: Configurar el enrutamiento del tráfico",[533,1968,1969,1976,1983,1990],{},[488,1970,1971,1972],{},"Haga clic en el perfil de su VPS en el panel de Dispositivos.\n",[433,1973],{"alt":1974,"src":1975},"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",[488,1977,1978,1979],{},"Desplácese hacia abajo hasta la sección 'Split Tunnels' (Túneles divididos).\n",[433,1980],{"alt":1981,"src":1982},"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",[488,1984,1985,1986],{},"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,1987],{"alt":1988,"src":1989},"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",[488,1991,1992,1993,1996,1997,2000],{},"Exponer la ",[495,1994,1995],{},"address"," (dirección) y el ",[495,1998,1999],{},"host"," enrutará el tráfico a sus servicios a través de la misma red privada.",[879,2002,2004],{"id":2003},"paso-4-configurar-el-firewall-en-el-vps","Paso 4: Configurar el firewall en el VPS",[430,2006,2007],{},"Habilite el firewall para permitir únicamente la subred '100.96.0.0\u002F12', bloqueando el resto del acceso público entrante.",[923,2009,2011],{"className":1032,"code":2010,"language":1034,"meta":425,"style":425},"sudo ufw enable \nsudo ufw default allow outgoing \nsudo ufw default deny incoming\nsudo ufw allow in from 100.96.0.0\u002F12\n",[495,2012,2013,2026,2043,2057],{"__ignoreMap":425},[931,2014,2015,2017,2020,2023],{"class":933,"line":934},[931,2016,1891],{"class":1041},[931,2018,2019],{"class":1045}," ufw",[931,2021,2022],{"class":1045}," enable",[931,2024,2025],{"class":941}," \n",[931,2027,2028,2030,2032,2035,2038,2041],{"class":933,"line":1061},[931,2029,1891],{"class":1041},[931,2031,2019],{"class":1045},[931,2033,2034],{"class":1045}," default",[931,2036,2037],{"class":1045}," allow",[931,2039,2040],{"class":1045}," outgoing",[931,2042,2025],{"class":941},[931,2044,2045,2047,2049,2051,2054],{"class":933,"line":1068},[931,2046,1891],{"class":1041},[931,2048,2019],{"class":1045},[931,2050,2034],{"class":1045},[931,2052,2053],{"class":1045}," deny",[931,2055,2056],{"class":1045}," incoming\n",[931,2058,2059,2061,2063,2065,2068,2071],{"class":933,"line":1075},[931,2060,1891],{"class":1041},[931,2062,2019],{"class":1045},[931,2064,2037],{"class":1045},[931,2066,2067],{"class":1045}," in",[931,2069,2070],{"class":1045}," from",[931,2072,2073],{"class":1045}," 100.96.0.0\u002F12\n",[430,2075,2076],{},"Permita el tráfico loopback para evitar interrumpir los servicios locales:",[923,2078,2080],{"className":1032,"code":2079,"language":1034,"meta":425,"style":425},"sudo ufw allow in on lo\nsudo ufw allow out on lo\n",[495,2081,2082,2098],{"__ignoreMap":425},[931,2083,2084,2086,2088,2090,2092,2095],{"class":933,"line":934},[931,2085,1891],{"class":1041},[931,2087,2019],{"class":1045},[931,2089,2037],{"class":1045},[931,2091,2067],{"class":1045},[931,2093,2094],{"class":1045}," on",[931,2096,2097],{"class":1045}," lo\n",[931,2099,2100,2102,2104,2106,2109,2111],{"class":933,"line":1061},[931,2101,1891],{"class":1041},[931,2103,2019],{"class":1045},[931,2105,2037],{"class":1045},[931,2107,2108],{"class":1045}," out",[931,2110,2094],{"class":1045},[931,2112,2097],{"class":1045},[430,2114,2115],{},"Recargue el firewall y verifique el estado:",[923,2117,2119],{"className":1032,"code":2118,"language":1034,"meta":425,"style":425},"sudo ufw reload \nsudo ufw status verbose\n",[495,2120,2121,2132],{"__ignoreMap":425},[931,2122,2123,2125,2127,2130],{"class":933,"line":934},[931,2124,1891],{"class":1041},[931,2126,2019],{"class":1045},[931,2128,2129],{"class":1045}," reload",[931,2131,2025],{"class":941},[931,2133,2134,2136,2138,2140],{"class":933,"line":1061},[931,2135,1891],{"class":1041},[931,2137,2019],{"class":1045},[931,2139,1918],{"class":1045},[931,2141,2142],{"class":1045}," verbose\n",[879,2144,2146],{"id":2145},"paso-5-exponer-hermes-agent-a-la-red-privada","Paso 5: Exponer Hermes Agent a la red privada",[430,2148,2149,2150,2153,2154,461],{},"Expondremos el ",[441,2151,2152],{},"Hermes Agent Web Dashboard"," a nuestra red privada y usaremos el proveedor de autenticación predeterminado, ",[441,2155,2156],{},"Nous Research",[2158,2159,2161],"h4",{"id":2160},"configurar-el-proveedor-de-autenticación","Configurar el proveedor de autenticación",[533,2163,2164,2173,2180,2187,2194],{},[488,2165,2166,2167,2172],{},"Diríjase a ",[444,2168,2171],{"href":2169,"rel":2170},"https:\u002F\u002Fportal.nousresearch.com",[448],"portal.nousresearch.com"," para registrar una cuenta.",[488,2174,2175,2176],{},"Seleccione 'Local Dashboards' (Paneles locales).\n",[433,2177],{"alt":2178,"src":2179},"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",[488,2181,2182,2183],{},"Haga clic en 'Register Dashboard' (Registrar panel).\n",[433,2184],{"alt":2185,"src":2186},"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",[488,2188,2189,2190],{},"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,2191],{"alt":2192,"src":2193},"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",[488,2195,2196,2197,889],{},"Copie el 'OAuth client ID' y péguelo en su archivo ",[495,2198,2199],{},"config.yaml",[923,2201,2205],{"className":2202,"code":2203,"language":2204,"meta":425,"style":425},"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",[495,2206,2207,2214,2224,2234,2241,2251,2261,2268,2279],{"__ignoreMap":425},[931,2208,2209,2212],{"class":933,"line":934},[931,2210,2211],{"class":1354},"dashboard",[931,2213,1368],{"class":945},[931,2215,2216,2219,2221],{"class":933,"line":1061},[931,2217,2218],{"class":1354},"  theme",[931,2220,889],{"class":945},[931,2222,2223],{"class":1045}," default\n",[931,2225,2226,2229,2231],{"class":933,"line":1068},[931,2227,2228],{"class":1354},"  show_token_analytics",[931,2230,889],{"class":945},[931,2232,2233],{"class":1378}," false\n",[931,2235,2236,2239],{"class":933,"line":1075},[931,2237,2238],{"class":1354},"  oauth",[931,2240,1368],{"class":945},[931,2242,2243,2246,2248],{"class":933,"line":1923},[931,2244,2245],{"class":1354},"    client_id",[931,2247,889],{"class":945},[931,2249,2250],{"class":1045}," agent:cmq02x7ha0002jk0ba3kfnb\n",[931,2252,2253,2256,2258],{"class":933,"line":1928},[931,2254,2255],{"class":1354},"    portal_url",[931,2257,889],{"class":945},[931,2259,2260],{"class":1045}," https:\u002F\u002Fportal.nousresearch.com\n",[931,2262,2263,2266],{"class":933,"line":1934},[931,2264,2265],{"class":1354},"  basic_auth",[931,2267,1368],{"class":945},[931,2269,2271,2274,2276],{"class":933,"line":2270},8,[931,2272,2273],{"class":1354},"    username",[931,2275,889],{"class":945},[931,2277,2278],{"class":945}," ''\n",[931,2280,2282,2285,2287],{"class":933,"line":2281},9,[931,2283,2284],{"class":1354},"    password_hash",[931,2286,889],{"class":945},[931,2288,2278],{"class":945},[2158,2290,2292],{"id":2291},"configurar-systemd-para-iniciar-automáticamente-el-panel-de-hermes","Configurar Systemd para iniciar automáticamente el panel de Hermes",[533,2294,2295],{},[488,2296,2297],{},"Cree un archivo de servicio:",[923,2299,2303],{"className":2300,"code":2301,"language":2302,"meta":425,"style":425},"language-shell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n","shell",[495,2304,2305],{"__ignoreMap":425},[931,2306,2307,2309,2312],{"class":933,"line":934},[931,2308,1891],{"class":1041},[931,2310,2311],{"class":1045}," nano",[931,2313,2314],{"class":1045}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[533,2316,2317],{"start":1061},[488,2318,2319,2320,2323],{},"Pegue la siguiente configuración, asegurándose de que ",[495,2321,2322],{},"--host 0.0.0.0"," sea parte del comando:",[923,2325,2329],{"className":2326,"code":2327,"language":2328,"meta":425,"style":425},"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",[495,2330,2331,2336,2341,2346,2350,2355,2360,2365,2370,2375,2381,2386,2391,2397],{"__ignoreMap":425},[931,2332,2333],{"class":933,"line":934},[931,2334,2335],{},"[Unit]\n",[931,2337,2338],{"class":933,"line":1061},[931,2339,2340],{},"Description=Hermes Dashboard\n",[931,2342,2343],{"class":933,"line":1068},[931,2344,2345],{},"After=network.target\n",[931,2347,2348],{"class":933,"line":1075},[931,2349,1065],{"emptyLinePlaceholder":1064},[931,2351,2352],{"class":933,"line":1923},[931,2353,2354],{},"[Service]\n",[931,2356,2357],{"class":933,"line":1928},[931,2358,2359],{},"User=hermes\n",[931,2361,2362],{"class":933,"line":1934},[931,2363,2364],{},"WorkingDirectory=\u002Fhome\u002Fhermes\n",[931,2366,2367],{"class":933,"line":2270},[931,2368,2369],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes dashboard --host 0.0.0.0\n",[931,2371,2372],{"class":933,"line":2281},[931,2373,2374],{},"Restart=always\n",[931,2376,2378],{"class":933,"line":2377},10,[931,2379,2380],{},"RestartSec=10\n",[931,2382,2383],{"class":933,"line":1695},[931,2384,2385],{},"Environment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n",[931,2387,2389],{"class":933,"line":2388},12,[931,2390,1065],{"emptyLinePlaceholder":1064},[931,2392,2394],{"class":933,"line":2393},13,[931,2395,2396],{},"[Install]\n",[931,2398,2400],{"class":933,"line":2399},14,[931,2401,2402],{},"WantedBy=multi-user.target\n",[533,2404,2405],{"start":1068},[488,2406,2407],{},"Habilite e inicie el servicio:",[923,2409,2411],{"className":2300,"code":2410,"language":2302,"meta":425,"style":425},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-dashboard\nsudo systemctl start hermes-dashboard\nsudo systemctl status hermes-dashboard\n",[495,2412,2413,2422,2433,2444],{"__ignoreMap":425},[931,2414,2415,2417,2419],{"class":933,"line":934},[931,2416,1891],{"class":1041},[931,2418,1894],{"class":1045},[931,2420,2421],{"class":1045}," daemon-reload\n",[931,2423,2424,2426,2428,2430],{"class":933,"line":1061},[931,2425,1891],{"class":1041},[931,2427,1894],{"class":1045},[931,2429,2022],{"class":1045},[931,2431,2432],{"class":1045}," hermes-dashboard\n",[931,2434,2435,2437,2439,2442],{"class":933,"line":1068},[931,2436,1891],{"class":1041},[931,2438,1894],{"class":1045},[931,2440,2441],{"class":1045}," start",[931,2443,2432],{"class":1045},[931,2445,2446,2448,2450,2452],{"class":933,"line":1075},[931,2447,1891],{"class":1041},[931,2449,1894],{"class":1045},[931,2451,1918],{"class":1045},[931,2453,2432],{"class":1045},[879,2455,2457],{"id":2456},"paso-6-instalar-el-cliente-cloudflare-warp-en-el-escritorio","Paso 6: Instalar el cliente Cloudflare WARP en el escritorio",[533,2459,2460,2468,2471,2478,2485,2492],{},[488,2461,2462,2463,461],{},"Descargue el cliente Cloudflare WARP desde el ",[444,2464,2467],{"href":2465,"rel":2466},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fwarp-client\u002Fget-started\u002F",[448],"portal de Cloudflare",[488,2469,2470],{},"Abra e inicie el cliente Cloudflare WARP después de la instalación.",[488,2472,2473,2474],{},"Inicie sesión cuando se le solicite.\n",[433,2475],{"alt":2476,"src":2477},"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",[488,2479,2480,2481],{},"Se mostrará una página de 'Success' (Éxito) después de un inicio de sesión exitoso.\n",[433,2482],{"alt":2483,"src":2484},"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",[488,2486,2487,2488],{},"El cliente WARP ahora debería mostrar que está conectado a su equipo de Zero Trust.\n",[433,2489],{"alt":2490,"src":2491},"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",[488,2493,2494,2495,2498,2499],{},"Navegue a su navegador web e introduzca su IP privada (por ejemplo, ",[495,2496,2497],{},"100.96.0.3","). El Hermes Web Dashboard debería cargarse con éxito.\n",[433,2500],{"alt":2501,"src":2502},"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",[2504,2505,2506],"blockquote",{},[430,2507,2508,2511,2512,2517],{},[441,2509,2510],{},"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 ",[441,2513,2514],{},[444,2515,2516],{"href":399},"Cambiar entre múltiples perfiles de Cloudflare WARP en macOS"," para cambiar de cuenta sin problemas.",[879,2519,2521],{"id":2520},"paso-7-instalar-el-cliente-cloudflare-warp-en-dispositivos-ios","Paso 7: Instalar el cliente Cloudflare WARP en dispositivos iOS",[533,2523,2524,2531,2539,2547,2555],{},[488,2525,2526,2527,2530],{},"Instale ",[441,2528,2529],{},"Cloudflare One"," desde la App Store.",[488,2532,2533,2534],{},"Abra la aplicación Cloudflare One e introduzca el nombre de su equipo cuando se le solicite.\n",[433,2535],{"alt":2536,"src":2537,"width":2538},"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,[488,2540,2541,2542],{},"Inicie sesión utilizando la misma dirección de correo electrónico que se configuró en la regla de política anterior.\n",[433,2543],{"alt":2544,"src":2545,"width":2546},"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,[488,2548,2549,2550],{},"Una vez conectado, debería verse así:\n",[433,2551],{"alt":2552,"src":2553,"width":2554},"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,[488,2556,2557,2558,2560,2561],{},"Navegue a su navegador web e introduzca la IP privada ",[495,2559,2497],{}," para acceder al Hermes Web Dashboard en su dispositivo móvil.\n",[433,2562],{"alt":2563,"src":2564,"width":2565},"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,[474,2567,2569],{"id":2568},"conclusión","Conclusión",[430,2571,2572,2573,2575,2576,2579],{},"Con ",[441,2574,1722],{}," manejando las políticas de identidad y el cliente ",[441,2577,2578],{},"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.",[1639,2581,2582],{},"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":425,"searchDepth":1061,"depth":1068,"links":2584},[2585,2588,2600],{"id":1736,"depth":1061,"text":1737,"children":2586},[2587],{"id":1755,"depth":1068,"text":1756},{"id":1767,"depth":1061,"text":1768,"children":2589},[2590,2591,2592,2593,2594,2598,2599],{"id":1771,"depth":1068,"text":1772},{"id":1824,"depth":1068,"text":1825},{"id":1965,"depth":1068,"text":1966},{"id":2003,"depth":1068,"text":2004},{"id":2145,"depth":1068,"text":2146,"children":2595},[2596,2597],{"id":2160,"depth":1075,"text":2161},{"id":2291,"depth":1075,"text":2292},{"id":2456,"depth":1068,"text":2457},{"id":2520,"depth":1068,"text":2521},{"id":2568,"depth":1061,"text":2569},[1659,2602],"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.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002FES-Exposing-Hermes-Agent-to-Private-Network-Using-Cloudflare-WARP.webp","Exponer de forma segura Hermes Agent a una red privada mediante Cloudflare Zero Trust y el túnel WARP",{"schemaOrg":2608,"robots":1693,"sitemap":2639},[2609],{"@type":1672,"headline":1706,"description":2604,"name":1706,"image":2605,"step":2610},[2611,2615,2619,2623,2627,2631,2635],{"@type":1675,"name":2612,"text":2613,"url":2614,"image":1789},"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":1675,"name":2616,"text":2617,"url":2618,"image":1962},"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":1675,"name":2620,"text":2621,"url":2622,"image":1975},"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":1675,"name":2624,"text":2625,"url":2626},"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":1675,"name":2628,"text":2629,"url":2630},"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":1675,"name":2632,"text":2633,"url":2634,"image":2477},"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":1675,"name":2636,"text":2637,"url":2638,"image":2537},"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":2640},"2026-09-28",{"title":2642,"description":2604,"ogTitle":1706,"ogDescription":2604,"twitterTitle":1706,"twitterDescription":2604},"Acceso seguro a Hermes Agent con Cloudflare Zero Trust","es\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",[1718,2645,1714,2646,2647],"Zero Trust","Red privada","Tutorial","1Uqqvv_e2EG_KJYm_QsykKctzltK62Y5p8j4IVF9puk",{"id":2650,"title":2651,"author":425,"body":2652,"category":4079,"date":4081,"description":4082,"extension":1664,"image":4083,"imageAlt":4084,"isPublished":1064,"meta":4085,"minRead":3354,"navigation":1064,"path":99,"seo":4092,"stem":4094,"tags":4095,"updatedAt":1702,"__hash__":4099},"article\u002Fes\u002Farticle\u002Fsync-obsidian-across-devices.md","Cómo sincronizar bóvedas de Obsidian entre dispositivos",{"type":427,"value":2653,"toc":4057},[2654,2657,2662,2671,2680,2698,2703,2711,2715,2720,2734,2750,2753,2757,2761,2768,2773,2777,2782,2839,2846,2878,2882,2889,2895,2902,2964,2967,2984,2991,3003,3007,3011,3022,3027,3037,3059,3064,3078,3083,3089,3094,3109,3112,3117,3120,3125,3129,3134,3148,3152,3166,3176,3180,3185,3188,3198,3231,3235,3242,3384,3419,3424,3445,3456,3461,3465,3475,3546,3550,3556,3590,3721,3728,3734,3740,3746,3749,3755,3761,3775,3786,3793,3799,3806,3935,3941,3946,3949,3954,3957,3961,3966,3971,3977,3988,3998,4002,4013,4018,4025,4028,4031,4054],[430,2655,2656],{},"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,2658],{"src":2659,"alt":2660,"style":2661},"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;",[430,2663,2664,2665,2670],{},"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. ",[444,2666,2669],{"href":2667,"rel":2668},"https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch",[448],"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.",[430,2672,2673,2674,2679],{},"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. ",[444,2675,2678],{"href":2676,"rel":2677},"https:\u002F\u002Fgithub.com\u002FNystik-gh\u002Fignis",[448],"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.",[430,2681,2682,2683,2685,2686,2688,2689,2692,2693,2697],{},"En esta guía, configuraremos ",[441,2684,2669],{}," e ",[441,2687,2678],{}," en un ",[441,2690,2691],{},"VPS"," (Servidor Privado Virtual), alojándolos de forma segura dentro de una red privada de ",[441,2694,2695],{},[444,2696,1722],{"href":363}," en lugar de exponerlos al internet abierto.",[433,2699],{"src":2700,"alt":2701,"style":2702},"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;",[463,2704],{"description":2705,"image":2706,"image-alt":2707,"label":2708,"min-read":2709,"title":2710,"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",[474,2712,2714],{"id":2713},"sincronización-segura-de-bóvedas-de-obsidian-con-synch","Sincronización segura de bóvedas de Obsidian con Synch",[430,2716,2717,2719],{},[441,2718,2669],{}," ofrece las siguientes características:",[485,2721,2722,2725,2728,2731],{},[488,2723,2724],{},"Sincroniza su bóveda tan pronto como se detectan cambios",[488,2726,2727],{},"Cifra los datos de la bóveda antes de subirlos",[488,2729,2730],{},"Permite la restauración desde el historial de versiones",[488,2732,2733],{},"Incluye gestión automática de conflictos",[430,2735,2736,2738,2739,2742,2743,2746,2747,2749],{},[441,2737,2669],{}," genera una ",[441,2740,2741],{},"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 ",[441,2744,2745],{},"contraseña de bóveda","; esta contraseña se utiliza para proteger la ",[441,2748,2741],{}," para que la clave se pueda almacenar de forma segura en el servidor y desbloquearse en otros dispositivos.",[430,2751,2752],{},"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.",[879,2754,2756],{"id":2755},"configurar-synch-en-su-vps","Configurar Synch en su VPS",[2158,2758,2760],{"id":2759},"crear-un-nombre-de-dominio","Crear un nombre de dominio",[430,2762,2763,2764,2767],{},"Cree un registro A en Cloudflare y establezca su estado de proxy en ",[441,2765,2766],{},"Solo DNS"," (omitir la CDN de Cloudflare).",[433,2769],{"src":2770,"alt":2771,"style":2772},"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;",[2158,2774,2776],{"id":2775},"instalar-synch-docker-en-ubuntu","Instalar Synch Docker en Ubuntu",[2778,2779,2781],"h5",{"id":2780},"clonar-el-repositorio","Clonar el repositorio",[923,2783,2785],{"className":1032,"code":2784,"language":1034,"meta":425,"style":425},"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",[495,2786,2787,2801,2806,2811,2819,2823,2828],{"__ignoreMap":425},[931,2788,2789,2792,2795,2798],{"class":933,"line":934},[931,2790,2791],{"class":1041},"git",[931,2793,2794],{"class":1045}," clone",[931,2796,2797],{"class":1045}," https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch.git",[931,2799,2800],{"class":941},"       \n",[931,2802,2803],{"class":933,"line":1061},[931,2804,2805],{"class":941},"        \n",[931,2807,2808],{"class":933,"line":1068},[931,2809,2810],{"class":1071},"# Navegar a la carpeta de la API\n",[931,2812,2813,2816],{"class":933,"line":1075},[931,2814,2815],{"class":962},"cd",[931,2817,2818],{"class":1045}," synch\u002Fapps\u002Fapi\n",[931,2820,2821],{"class":933,"line":1923},[931,2822,2805],{"class":941},[931,2824,2825],{"class":933,"line":1928},[931,2826,2827],{"class":1071},"# Copiar el archivo de entorno de ejemplo:\n",[931,2829,2830,2833,2836],{"class":933,"line":1934},[931,2831,2832],{"class":1041},"cp",[931,2834,2835],{"class":1045}," .env.example",[931,2837,2838],{"class":1045}," .env\n",[2778,2840,2842,2843],{"id":2841},"editar-valores-de-env","Editar valores de ",[495,2844,2845],{},".env",[485,2847,2848,2854,2872],{},[488,2849,2850,2853],{},[495,2851,2852],{},"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).",[488,2855,2856,575,2859,2862,2863,2867,2868,2871],{},[495,2857,2858],{},"BETTER_AUTH_SECRET",[495,2860,2861],{},"SYNC_TOKEN_SECRET",": Genere claves seguras utilizando esta ",[444,2864,2866],{"href":2865},"\u002Fes\u002Ftools\u002Fsecret-key-hex","herramienta de clave secreta en línea"," o ejecutando ",[495,2869,2870],{},"openssl rand -hex 32"," dos veces en su terminal.",[488,2873,2874,2877],{},[495,2875,2876],{},"AUTH_ALLOWED_EMAILS",": Una lista separada por comas de las direcciones de correo electrónico autorizadas para registrarse y crear cuentas.",[2778,2879,2881],{"id":2880},"agregar-el-dominio-a-caddyfile","Agregar el dominio a Caddyfile",[430,2883,2884,2885,461],{},"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 ",[444,2886,2888],{"href":2887},"\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#_4-enable-https-with-caddy","artículo sobre cómo autoalojar Buzz",[463,2890],{"description":2891,"image":2892,"image-alt":2893,"label":2894,"min-read":469,"title":455,"to":2887},"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",[430,2896,2897,2898,2901],{},"Incluya la directiva ",[495,2899,2900],{},"SYNCH_DOMAIN"," en su Caddyfile, apuntando al puerto 8787 (el puerto utilizado por el contenedor de Synch):",[923,2903,2907],{"className":2904,"code":2905,"language":2906,"meta":425,"style":425},"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",[495,2908,2909,2914,2922,2926,2930,2944,2949,2960],{"__ignoreMap":425},[931,2910,2911],{"class":933,"line":934},[931,2912,2913],{"class":945},"{\n",[931,2915,2916,2919],{"class":933,"line":1061},[931,2917,2918],{"class":941},"  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN",[931,2920,2921],{"class":945},"}\n",[931,2923,2924],{"class":933,"line":1068},[931,2925,2921],{"class":941},[931,2927,2928],{"class":933,"line":1075},[931,2929,1065],{"emptyLinePlaceholder":1064},[931,2931,2932,2935,2938,2941],{"class":933,"line":1923},[931,2933,2934],{"class":945},"{",[931,2936,2937],{"class":941},"$SYNCH_DOMAIN",[931,2939,2940],{"class":945},"}",[931,2942,2943],{"class":945}," {\n",[931,2945,2946],{"class":933,"line":1928},[931,2947,2948],{"class":941},"  encode zstd gzip\n",[931,2950,2951,2954,2956],{"class":933,"line":1934},[931,2952,2953],{"class":941},"  reverse_proxy host.docker.internal",[931,2955,889],{"class":945},[931,2957,2959],{"class":2958},"sbssI","8787\n",[931,2961,2962],{"class":933,"line":2270},[931,2963,2921],{"class":945},[430,2965,2966],{},"Inicie el contenedor:",[923,2968,2970],{"className":1032,"code":2969,"language":1034,"meta":425,"style":425},"docker compose up -d\n",[495,2971,2972],{"__ignoreMap":425},[931,2973,2974,2976,2978,2981],{"class":933,"line":934},[931,2975,1176],{"class":1041},[931,2977,1179],{"class":1045},[931,2979,2980],{"class":1045}," up",[931,2982,2983],{"class":1045}," -d\n",[430,2985,2986,2987,2990],{},"Ejecute el siguiente comando ",[495,2988,2989],{},"curl"," para verificar su disponibilidad:",[923,2992,2994],{"className":1032,"code":2993,"language":1034,"meta":425,"style":425},"curl https:\u002F\u002Fsynch.pafor.me\u002Fhealth\n",[495,2995,2996],{"__ignoreMap":425},[931,2997,2998,3000],{"class":933,"line":934},[931,2999,2989],{"class":1041},[931,3001,3002],{"class":1045}," https:\u002F\u002Fsynch.pafor.me\u002Fhealth\n",[879,3004,3006],{"id":3005},"conectar-obsidian-a-su-servidor-synch","Conectar Obsidian a su servidor Synch",[2158,3008,3010],{"id":3009},"instalar-el-complemento-synch-en-obsidian","Instalar el complemento Synch en Obsidian",[430,3012,3013,3014,3017,3018,3021],{},"Abra la configuración de Obsidian, navegue a ",[441,3015,3016],{},"Community plugins"," (Complementos de la comunidad) y haga clic en el botón ",[441,3019,3020],{},"'Browse'"," (Examinar):",[433,3023],{"src":3024,"alt":3025,"style":3026},"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;",[430,3028,3029,3030,1368,3033],{},"Busque e instale ",[441,3031,3032],{},"'Synchrun'",[433,3034],{"src":3035,"alt":3036,"style":2772},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-install-synchrun-plugin.webp","Instalando el plugin Synchrun en Obsidian",[430,3038,3039,3040,3042,3043,3046,3047,3050,3051,3054,3055,3058],{},"Una vez instalado ",[441,3041,3032],{},", abra la configuración del complemento y habilite ",[441,3044,3045],{},"'Use a self-hosted server'"," (Usar un servidor autoalojado). Luego, ingrese ",[495,3048,3049],{},"https:\u002F\u002Fsynch.pafor.me"," en el campo ",[441,3052,3053],{},"'Server URL'"," (URL del servidor) y haga clic en ",[441,3056,3057],{},"'Save'"," (Guardar).",[433,3060],{"src":3061,"alt":3062,"style":3063},"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;",[430,3065,3066,3067,3070,3071,3074,3075,3077],{},"Haga clic en el botón ",[441,3068,3069],{},"'Sign in on this device'"," (Iniciar sesión en este dispositivo) debajo de ",[441,3072,3073],{},"'Account'"," (Cuenta). A continuación, regístrese para obtener una cuenta utilizando la dirección de correo electrónico que especificó en su lista ",[495,3076,2876],{},"; luego será redirigido a la siguiente página de autorización:",[433,3079],{"src":3080,"alt":3081,"style":3082},"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;",[430,3084,3066,3085,3088],{},[441,3086,3087],{},"'Allow Obsidian sign-in'"," (Permitir inicio de sesión en Obsidian):",[433,3090],{"src":3091,"alt":3092,"style":3093},"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;",[430,3095,3066,3096,3099,3100,3103,3104],{},[441,3097,3098],{},"'Return to Obsidian'"," (Volver a Obsidian) y luego haga clic en ",[441,3101,3102],{},"'Create vault'"," (Crear bóveda):\n",[433,3105],{"src":3106,"alt":3107,"style":3108},"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;",[430,3110,3111],{},"Ingrese un nombre y una contraseña segura para crear su bóveda remota.",[433,3113],{"src":3114,"alt":3115,"style":3116},"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;",[430,3118,3119],{},"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,3121],{"src":3122,"alt":3123,"style":3124},"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;",[474,3126,3128],{"id":3127},"acceso-a-obsidian-basado-en-navegador-con-ignis","Acceso a Obsidian basado en navegador con Ignis",[430,3130,3131,3133],{},[441,3132,2678],{}," 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.",[430,3135,3136,3137,575,3142,3147],{},"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 ",[444,3138,3141],{"href":3139,"rel":3140},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fusing\u002Flimitations\u002F",[448],"Limitaciones",[444,3143,3146],{"href":3144,"rel":3145},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fusing\u002Fplugin-compatibility\u002F",[448],"Compatibilidad de complementos"," de Ignis para obtener listados de compatibilidad detallados.",[879,3149,3151],{"id":3150},"configuración-de-ignis","Configuración de Ignis",[430,3153,3154,3155,3157,3158,3161,3162,3165],{},"Instalaremos ",[441,3156,2678],{}," en nuestro VPS usando Docker, montándolo en la carpeta local ",[495,3159,3160],{},".\u002Fvaults",". Este directorio de bóveda se sincronizará utilizando la ",[441,3163,3164],{},"CLI de Synch"," para extraer las actualizaciones de notas de la bóveda remota que configuramos anteriormente.",[430,3167,3168,3169,3171,3172,461],{},"Dado que ",[441,3170,2678],{}," no tiene autenticación integrada, debe protegerse detrás de una red privada de ",[441,3173,3174],{},[444,3175,1722],{"href":363},[2158,3177,3179],{"id":3178},"crear-registro-dns","Crear registro DNS",[433,3181],{"src":3182,"alt":3183,"style":3184},"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;",[2158,3186,2881],{"id":3187},"agregar-el-dominio-a-caddyfile-1",[430,3189,3190,3191,3194,3195,889],{},"Agregue ",[495,3192,3193],{},"obsidian.pafor.me"," a su Caddyfile de la misma manera que ",[495,3196,3197],{},"synch.pafor.me",[923,3199,3201],{"className":2904,"code":3200,"language":2906,"meta":425,"style":425},"{$OBSIDIAN_DOMAIN} {\n  encode zstd gzip\n  reverse_proxy host.docker.internal:9898\n}\n",[495,3202,3203,3214,3218,3227],{"__ignoreMap":425},[931,3204,3205,3207,3210,3212],{"class":933,"line":934},[931,3206,2934],{"class":945},[931,3208,3209],{"class":941},"$OBSIDIAN_DOMAIN",[931,3211,2940],{"class":945},[931,3213,2943],{"class":945},[931,3215,3216],{"class":933,"line":1061},[931,3217,2948],{"class":941},[931,3219,3220,3222,3224],{"class":933,"line":1068},[931,3221,2953],{"class":941},[931,3223,889],{"class":945},[931,3225,3226],{"class":2958},"9898\n",[931,3228,3229],{"class":933,"line":1075},[931,3230,2921],{"class":945},[2158,3232,3234],{"id":3233},"iniciar-ignis-usando-docker","Iniciar Ignis usando Docker",[430,3236,3237,3238,3241],{},"Guarde el siguiente archivo docker compose yml como ",[495,3239,3240],{},"ignis-docker-compose.yml"," en el VPS:",[923,3243,3245],{"className":1342,"code":3244,"language":1344,"meta":425,"style":425},"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",[495,3246,3247,3254,3261,3271,3278,3291,3298,3303,3310,3317,3324,3331,3338,3345,3352,3363,3368,3376],{"__ignoreMap":425},[931,3248,3249,3252],{"class":933,"line":934},[931,3250,3251],{"class":1354},"services",[931,3253,1368],{"class":945},[931,3255,3256,3259],{"class":933,"line":1061},[931,3257,3258],{"class":1354},"  ignis",[931,3260,1368],{"class":945},[931,3262,3263,3266,3268],{"class":933,"line":1068},[931,3264,3265],{"class":1354},"    image",[931,3267,889],{"class":945},[931,3269,3270],{"class":1045}," nobbe\u002Fignis:latest\n",[931,3272,3273,3276],{"class":933,"line":1075},[931,3274,3275],{"class":1354},"    ports",[931,3277,1368],{"class":945},[931,3279,3280,3283,3286,3289],{"class":933,"line":1923},[931,3281,3282],{"class":945},"      -",[931,3284,3285],{"class":945}," \"",[931,3287,3288],{"class":1045},"9898:8080",[931,3290,1955],{"class":945},[931,3292,3293,3296],{"class":933,"line":1928},[931,3294,3295],{"class":1354},"    environment",[931,3297,1368],{"class":945},[931,3299,3300],{"class":933,"line":1934},[931,3301,3302],{"class":1071},"      # coincidir con su usuario host (ejecutar: id)\n",[931,3304,3305,3307],{"class":933,"line":2270},[931,3306,3282],{"class":945},[931,3308,3309],{"class":1045}," PUID=1000\n",[931,3311,3312,3314],{"class":933,"line":2281},[931,3313,3282],{"class":945},[931,3315,3316],{"class":1045}," PGID=1000\n",[931,3318,3319,3321],{"class":933,"line":2377},[931,3320,3282],{"class":945},[931,3322,3323],{"class":1045}," WS_ORIGINS=https:\u002F\u002Fobsidian.pafor.me\n",[931,3325,3326,3329],{"class":933,"line":1695},[931,3327,3328],{"class":1354},"    volumes",[931,3330,1368],{"class":945},[931,3332,3333,3335],{"class":933,"line":2388},[931,3334,3282],{"class":945},[931,3336,3337],{"class":1045}," .\u002Fvaults:\u002Fvaults\n",[931,3339,3340,3342],{"class":933,"line":2393},[931,3341,3282],{"class":945},[931,3343,3344],{"class":1045}," .\u002Fdata:\u002Fapp\u002Fdata\n",[931,3346,3347,3349],{"class":933,"line":2399},[931,3348,3282],{"class":945},[931,3350,3351],{"class":1045}," obsidian-app:\u002Fapp\u002Fobsidian-app\n",[931,3353,3355,3358,3360],{"class":933,"line":3354},15,[931,3356,3357],{"class":1354},"    restart",[931,3359,889],{"class":945},[931,3361,3362],{"class":1045}," unless-stopped\n",[931,3364,3366],{"class":933,"line":3365},16,[931,3367,1065],{"emptyLinePlaceholder":1064},[931,3369,3371,3374],{"class":933,"line":3370},17,[931,3372,3373],{"class":1354},"volumes",[931,3375,1368],{"class":945},[931,3377,3379,3382],{"class":933,"line":3378},18,[931,3380,3381],{"class":1354},"  obsidian-app",[931,3383,1368],{"class":945},[485,3385,3386,3397,3412],{},[488,3387,3388,3389,3392,3393,3396],{},"Utilice el puerto ",[495,3390,3391],{},"9898"," en el host, ya que el ",[495,3394,3395],{},"8080"," suele ser utilizado por otros servicios.",[488,3398,3399,3400,3403,3404,3407,3408,3411],{},"Ejecute el comando ",[495,3401,3402],{},"id"," en su VPS para verificar el ",[495,3405,3406],{},"UID"," y el ",[495,3409,3410],{},"GID"," de su usuario host para garantizar los permisos correctos del sistema de archivos.",[488,3413,3414,3415,3418],{},"Establezca ",[495,3416,3417],{},"WS_ORIGINS"," para permitir únicamente conexiones WebSocket originadas desde su nombre de dominio específico.",[430,3420,3421,3422,889],{},"Inicie el contenedor de ",[441,3423,2678],{},[923,3425,3427],{"className":1032,"code":3426,"language":1034,"meta":425,"style":425},"docker compose -f ignis-docker-compose.yml up -d\n",[495,3428,3429],{"__ignoreMap":425},[931,3430,3431,3433,3435,3438,3441,3443],{"class":933,"line":934},[931,3432,1176],{"class":1041},[931,3434,1179],{"class":1045},[931,3436,3437],{"class":1045}," -f",[931,3439,3440],{"class":1045}," ignis-docker-compose.yml",[931,3442,2980],{"class":1045},[931,3444,2983],{"class":1045},[430,3446,3447,3448,3451,3452,3455],{},"Cuando navegue a su dominio en un navegador web, aparecerá el ",[441,3449,3450],{},"'Vault Manager'"," (Administrador de bóvedas). Estará vacío ya que aún no se ha configurado ninguna bóveda. Configuraremos la ",[441,3453,3454],{},"'Synch CLI'"," en la siguiente sección para sincronizar los contenidos de nuestra bóveda remota.",[433,3457],{"src":3458,"alt":3459,"style":3460},"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;",[2158,3462,3464],{"id":3463},"problema-con-el-cortafuegos","Problema con el cortafuegos",[430,3466,3467,3468,3471,3472,889],{},"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 ",[495,3469,3470],{},"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 ",[495,3473,3474],{},"iptables",[923,3476,3478],{"className":1032,"code":3477,"language":1034,"meta":425,"style":425},"# 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",[495,3479,3480,3485,3512,3516,3521],{"__ignoreMap":425},[931,3481,3482],{"class":933,"line":934},[931,3483,3484],{"class":1071},"# Bloquear todo el tráfico público externo\n",[931,3486,3487,3489,3492,3495,3498,3501,3504,3507,3510],{"class":933,"line":1061},[931,3488,1891],{"class":1041},[931,3490,3491],{"class":1045}," iptables",[931,3493,3494],{"class":1045}," -I",[931,3496,3497],{"class":1045}," DOCKER-USER",[931,3499,3500],{"class":1045}," -i",[931,3502,3503],{"class":1045}," ext_if",[931,3505,3506],{"class":1045}," -j",[931,3508,3509],{"class":1045}," DROP",[931,3511,2025],{"class":941},[931,3513,3514],{"class":933,"line":1068},[931,3515,1065],{"emptyLinePlaceholder":1064},[931,3517,3518],{"class":933,"line":1075},[931,3519,3520],{"class":1071},"# Permitir tráfico únicamente desde la IP privada de su cliente Cloudflare WARP\n",[931,3522,3523,3525,3527,3529,3531,3533,3535,3538,3541,3543],{"class":933,"line":1923},[931,3524,1891],{"class":1041},[931,3526,3491],{"class":1045},[931,3528,3494],{"class":1045},[931,3530,3497],{"class":1045},[931,3532,3500],{"class":1045},[931,3534,3503],{"class":1045},[931,3536,3537],{"class":1045}," -s",[931,3539,3540],{"class":2958}," 100.96.0.10",[931,3542,3506],{"class":1045},[931,3544,3545],{"class":1045}," ACCEPT\n",[2158,3547,3549],{"id":3548},"configuración-de-la-cli-de-synch","Configuración de la CLI de Synch",[430,3551,3552,3553,3555],{},"La ",[441,3554,3164],{}," 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.",[430,3557,3558,3559,3561,3562,3565,3566,3569,3570,3573,3574,742,3577,575,3580,514,3583,3586,3587,921],{},"Compile la ",[441,3560,3164],{}," desde su repositorio ",[495,3563,3564],{},"synch"," clonado. La compilación requiere ",[441,3567,3568],{},"Node.js >= 22.5"," (ya que la CLI depende de ",[495,3571,3572],{},"node:sqlite"," y de API de navegador globales como ",[495,3575,3576],{},"fetch",[495,3578,3579],{},"WebSocket",[495,3581,3582],{},"WebCrypto",[441,3584,3585],{},"pnpm"," (dado que el repositorio está estructurado como un espacio de trabajo de pnpm que utiliza la versión ",[495,3588,3589],{},"10.33.0",[923,3591,3593],{"className":1032,"code":3592,"language":1034,"meta":425,"style":425},"# 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",[495,3594,3595,3600,3611,3618,3622,3627,3634,3638,3643,3656,3660,3665,3676,3705,3709,3714],{"__ignoreMap":425},[931,3596,3597],{"class":933,"line":934},[931,3598,3599],{"class":1071},"# Verificar versiones\n",[931,3601,3602,3605,3608],{"class":933,"line":1061},[931,3603,3604],{"class":1041},"node",[931,3606,3607],{"class":1045}," --version",[931,3609,3610],{"class":1071},"   # debe ser >= 22.5\n",[931,3612,3613,3615],{"class":933,"line":1068},[931,3614,3585],{"class":1041},[931,3616,3617],{"class":1045}," --version\n",[931,3619,3620],{"class":933,"line":1075},[931,3621,1065],{"emptyLinePlaceholder":1064},[931,3623,3624],{"class":933,"line":1923},[931,3625,3626],{"class":1071},"# En la raíz del repositorio\n",[931,3628,3629,3631],{"class":933,"line":1928},[931,3630,3585],{"class":1041},[931,3632,3633],{"class":1045}," install\n",[931,3635,3636],{"class":933,"line":1934},[931,3637,1065],{"emptyLinePlaceholder":1064},[931,3639,3640],{"class":933,"line":2270},[931,3641,3642],{"class":1071},"# Compilar el paquete de la CLI\n",[931,3644,3645,3647,3650,3653],{"class":933,"line":2281},[931,3646,3585],{"class":1041},[931,3648,3649],{"class":1045}," -C",[931,3651,3652],{"class":1045}," apps\u002Fcli",[931,3654,3655],{"class":1045}," build\n",[931,3657,3658],{"class":933,"line":2377},[931,3659,1065],{"emptyLinePlaceholder":1064},[931,3661,3662],{"class":933,"line":1695},[931,3663,3664],{"class":1071},"# Después de una compilación exitosa, tendrá `apps\u002Fcli\u002Fdist\u002Fsynch.js`. Hágalo ejecutable y colóquelo en su PATH\n",[931,3666,3667,3670,3673],{"class":933,"line":2388},[931,3668,3669],{"class":1041},"chmod",[931,3671,3672],{"class":1045}," +x",[931,3674,3675],{"class":1045}," apps\u002Fcli\u002Fdist\u002Fsynch.js\n",[931,3677,3678,3681,3684,3686,3689,3692,3695,3697,3700,3703],{"class":933,"line":2393},[931,3679,3680],{"class":1041},"ln",[931,3682,3683],{"class":1045}," -sf",[931,3685,3285],{"class":945},[931,3687,3688],{"class":941},"$PWD",[931,3690,3691],{"class":1045},"\u002Fapps\u002Fcli\u002Fdist\u002Fsynch.js",[931,3693,3694],{"class":945},"\"",[931,3696,3285],{"class":945},[931,3698,3699],{"class":941},"$HOME",[931,3701,3702],{"class":1045},"\u002F.local\u002Fbin\u002Fsynch",[931,3704,1955],{"class":945},[931,3706,3707],{"class":933,"line":2399},[931,3708,1065],{"emptyLinePlaceholder":1064},[931,3710,3711],{"class":933,"line":3354},[931,3712,3713],{"class":1071},"# Verificación\n",[931,3715,3716,3718],{"class":933,"line":3365},[931,3717,3564],{"class":1041},[931,3719,3720],{"class":1045}," --help\n",[430,3722,3723,3724,3727],{},"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 ",[495,3725,3726],{},"synch login --api-url \u003Curl-api-synch-remota>"," para definir su endpoint de API de destino.",[430,3729,3730],{},[433,3731],{"alt":3732,"src":3733},"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",[430,3735,1830,3736,3739],{},[495,3737,3738],{},"synch login"," en su terminal y recibirá una URL de autenticación:",[430,3741,3742],{},[433,3743],{"alt":3744,"src":3745},"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",[430,3747,3748],{},"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.",[430,3750,3751],{},[433,3752],{"alt":3753,"src":3754},"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",[430,3756,1830,3757,3760],{},[495,3758,3759],{},"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.",[430,3762,3763,3764,3767,3768,3771,3772,921],{},"El ID de la bóveda remota se puede encontrar dentro de la configuración del complemento ",[441,3765,3766],{},"Synchrun"," haciendo clic en ",[441,3769,3770],{},"'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, ",[495,3773,3774],{},"123e4567-e89b-12d3-a456-426614174000",[430,3776,3777,3782],{},[433,3778],{"src":3779,"alt":3780,"style":3781},"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,3783],{"alt":3784,"src":3785},"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",[430,3787,3788,3789,3792],{},"Ingrese la contraseña de su bóveda cuando se le solicite para establecer el vínculo. Una vez conectado, ejecute ",[495,3790,3791],{},"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.",[430,3794,3795],{},[433,3796],{"alt":3797,"src":3798},"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",[430,3800,3801,3802,3805],{},"Para automatizar esto, configure y habilite un servicio systemd para ejecutar ",[495,3803,3804],{},"synch watch"," de forma continua, asegurando que los cambios se sincronicen instantáneamente al arrancar:",[923,3807,3809],{"className":1032,"code":3808,"language":1034,"meta":425,"style":425},"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",[495,3810,3811,3827,3831,3836,3841,3846,3850,3854,3859,3864,3869,3874,3879,3884,3888,3893,3897,3901,3905,3911,3920],{"__ignoreMap":425},[931,3812,3813,3815,3818,3821,3824],{"class":933,"line":934},[931,3814,1891],{"class":1041},[931,3816,3817],{"class":1045}," tee",[931,3819,3820],{"class":1045}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fsynch-watch.service",[931,3822,3823],{"class":945}," \u003C\u003C",[931,3825,3826],{"class":945},"'EOF'\n",[931,3828,3829],{"class":933,"line":1061},[931,3830,2335],{"class":1045},[931,3832,3833],{"class":933,"line":1068},[931,3834,3835],{"class":1045},"Description=Synch vault watcher\n",[931,3837,3838],{"class":933,"line":1075},[931,3839,3840],{"class":1045},"After=network-online.target\n",[931,3842,3843],{"class":933,"line":1923},[931,3844,3845],{"class":1045},"Wants=network-online.target\n",[931,3847,3848],{"class":933,"line":1928},[931,3849,1065],{"emptyLinePlaceholder":1064},[931,3851,3852],{"class":933,"line":1934},[931,3853,2354],{"class":1045},[931,3855,3856],{"class":933,"line":2270},[931,3857,3858],{"class":1045},"Type=simple\n",[931,3860,3861],{"class":933,"line":2281},[931,3862,3863],{"class":1045},"User=\u003Cusername>\n",[931,3865,3866],{"class":933,"line":2377},[931,3867,3868],{"class":1045},"ExecStart=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin\u002Fsynch watch --vault \u002Fhome\u002F\u003Cusername>\u002Fvaults\u002F\u003Cvault-name>\n",[931,3870,3871],{"class":933,"line":1695},[931,3872,3873],{"class":1045},"WorkingDirectory=\u002Fhome\u002F\u003Cusername>\u002Fvaults\n",[931,3875,3876],{"class":933,"line":2388},[931,3877,3878],{"class":1045},"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",[931,3880,3881],{"class":933,"line":2393},[931,3882,3883],{"class":1045},"Environment=\"HOME=\u002Fhome\u002F\u003Cusername>\"\n",[931,3885,3886],{"class":933,"line":2399},[931,3887,2374],{"class":1045},[931,3889,3890],{"class":933,"line":3354},[931,3891,3892],{"class":1045},"RestartSec=5\n",[931,3894,3895],{"class":933,"line":3365},[931,3896,1065],{"emptyLinePlaceholder":1064},[931,3898,3899],{"class":933,"line":3370},[931,3900,2396],{"class":1045},[931,3902,3903],{"class":933,"line":3378},[931,3904,2402],{"class":1045},[931,3906,3908],{"class":933,"line":3907},19,[931,3909,3910],{"class":945},"EOF\n",[931,3912,3914,3916,3918],{"class":933,"line":3913},20,[931,3915,1891],{"class":1041},[931,3917,1894],{"class":1045},[931,3919,2421],{"class":1045},[931,3921,3923,3925,3927,3929,3932],{"class":933,"line":3922},21,[931,3924,1891],{"class":1041},[931,3926,1894],{"class":1045},[931,3928,2022],{"class":1045},[931,3930,3931],{"class":1045}," --now",[931,3933,3934],{"class":1045}," synch-watch.service\n",[430,3936,3937,3938,3940],{},"Abra ",[495,3939,3193],{}," 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,3942],{"src":3943,"alt":3944,"style":3945},"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;",[430,3947,3948],{},"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,3950],{"src":3951,"alt":3952,"style":3953},"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;",[430,3955,3956],{},"Para probar la configuración, puede agregar una nueva nota a través de la interfaz web:",[433,3958],{"src":3959,"alt":3960,"style":3953},"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",[430,3962,3963,3964,461],{},"La nota se sincroniza inmediatamente con su aplicación de escritorio Obsidian. Tenga en cuenta que las carpetas vacías no aparecen en ",[441,3965,2678],{},[433,3967],{"src":3968,"alt":3969,"style":3970},"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;",[430,3972,3973,3974,3976],{},"Visualización de ",[495,3975,3193],{}," en un navegador web móvil:",[430,3978,3979,3984],{},[433,3980],{"src":3981,"alt":3982,"style":3983},"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,3985],{"src":3986,"alt":3987,"style":3983},"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",[430,3989,3990,3991,3993,3994,3997],{},"Cuando elimina una nota en ",[441,3992,2678],{},", se mueve de manera segura a la carpeta ",[495,3995,3996],{},"~\u002Fvaults\u002F\u003Cnombre-boveda>\u002F.trash"," de su bóveda local.",[474,3999,4001],{"id":4000},"reflexiones-finales-sobre-las-bóvedas-autoalojadas","Reflexiones finales sobre las bóvedas autoalojadas",[430,4003,4004,4005,2685,4007,4009,4010,4012],{},"Juntos, ",[441,4006,2669],{},[441,4008,2678],{}," 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 ",[441,4011,1722],{}," garantiza que sus notas personales estén completamente protegidas del internet público.",[430,4014,4015,4017],{},[441,4016,2678],{}," 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.",[430,4019,4020,4021,4024],{},"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 ",[441,4022,4023],{},"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.",[430,4026,4027],{},"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.",[474,4029,4030],{"id":1610},"Referencias",[485,4032,4033,4040,4047],{},[488,4034,4035],{},[444,4036,4039],{"href":4037,"rel":4038},"https:\u002F\u002Fsynch.run\u002Fself-hosting-docker\u002F",[448],"Despliegue de Synch con Docker Compose",[488,4041,4042],{},[444,4043,4046],{"href":4044,"rel":4045},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fserver\u002Fdeploy\u002F",[448],"Despliegue de Ignis con Docker",[488,4048,4049],{},[444,4050,4053],{"href":4051,"rel":4052},"https:\u002F\u002Fsynch.run\u002Fblog\u002Fencryption-and-decryption\u002F",[448],"¿Cómo funciona el cifrado de extremo a extremo en Synch?",[1639,4055,4056],{},"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":425,"searchDepth":1061,"depth":1068,"links":4058},[4059,4068,4077,4078],{"id":2713,"depth":1061,"text":2714,"children":4060},[4061,4065],{"id":2755,"depth":1068,"text":2756,"children":4062},[4063,4064],{"id":2759,"depth":1075,"text":2760},{"id":2775,"depth":1075,"text":2776},{"id":3005,"depth":1068,"text":3006,"children":4066},[4067],{"id":3009,"depth":1075,"text":3010},{"id":3127,"depth":1061,"text":3128,"children":4069},[4070],{"id":3150,"depth":1068,"text":3151,"children":4071},[4072,4073,4074,4075,4076],{"id":3178,"depth":1075,"text":3179},{"id":3187,"depth":1075,"text":2881},{"id":3233,"depth":1075,"text":3234},{"id":3463,"depth":1075,"text":3464},{"id":3548,"depth":1075,"text":3549},{"id":4000,"depth":1061,"text":4001},{"id":1610,"depth":1061,"text":4030},[4080],"productivity","2026-09-15","Sincronice sus bóvedas de Obsidian entre dispositivos y acceda a sus notas en la web de forma segura con Synch e Ignis dentro de Cloudflare Zero Trust.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002FES-Sync-Obsidian-Across-Devices.webp","Sincronización segura de bóvedas de Obsidian entre múltiples dispositivos usando Synch e Ignis dentro de la red privada de Cloudflare Zero Trust",{"schemaOrg":4086,"robots":1693,"sitemap":4090},[4087,4089],{"@type":4088,"headline":2651,"description":4082,"image":4083},"Article",{"@type":1672,"name":2651,"description":4082,"image":4083},{"lastmod":4091},"2026-09-16",{"title":4093,"description":4082,"ogTitle":2651,"ogDescription":4082,"twitterTitle":2651,"twitterDescription":4082},"Sincronización segura de Obsidian con Synch e Ignis","es\u002Farticle\u002Fsync-obsidian-across-devices",[4096,4097,4098,2645],"Self-hosting","Obsidian","Sincronización","1bLUKdbBHHyQSSGPS9lahZpDD7ywYDXxUteonIIvop8",{"id":4101,"title":455,"author":425,"body":4102,"category":6230,"date":6231,"description":6232,"extension":1664,"image":466,"imageAlt":467,"isPublished":1064,"meta":6233,"minRead":3378,"navigation":1064,"path":89,"seo":6255,"stem":6257,"tags":6258,"updatedAt":1702,"__hash__":6262},"article\u002Fes\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues.md",{"type":427,"value":4103,"toc":6200},[4104,4107,4113,4118,4122,4125,4163,4167,4173,4211,4215,4219,4233,4239,4243,4247,4251,4266,4272,4320,4346,4350,4358,4364,4368,4371,4581,4585,4625,4631,4638,4646,4694,4700,4728,4732,4736,4763,4789,4794,4836,4845,5116,5120,5163,5168,5175,5179,5183,5207,5210,5216,5219,5223,5231,5237,5240,5246,5252,5276,5282,5288,5291,5297,5301,5304,5307,5310,5316,5319,5325,5331,5337,5342,5346,5357,5364,5370,5373,5379,5383,5390,5396,5402,5406,5413,5477,5489,5544,5547,5617,5623,5637,5643,5647,5692,5698,5701,5707,5710,5716,5720,5736,5752,5758,5855,5858,5864,5875,5921,5927,5933,5945,5961,5964,5970,5974,5981,6003,6012,6110,6121,6127,6134,6140,6143,6149,6152,6158,6162,6165,6167,6197],[430,4105,4106],{},"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.",[430,4108,4109],{},[433,4110],{"alt":4111,"src":4112},"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",[430,4114,4115,4117],{},[441,4116,1102],{},", 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.",[474,4119,4121],{"id":4120},"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",[430,4123,4124],{},"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:",[485,4126,4127,4133,4139,4145,4151,4157],{},[488,4128,4129,4132],{},[441,4130,4131],{},"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.",[488,4134,4135,4138],{},[441,4136,4137],{},"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.",[488,4140,4141,4144],{},[441,4142,4143],{},"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.",[488,4146,4147,4150],{},[441,4148,4149],{},"Sistema de identidad unificado:"," Los humanos y los agentes utilizan el mismo sistema de identidad, autenticado mediante claves criptográficas.",[488,4152,4153,4156],{},[441,4154,4155],{},"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.",[488,4158,4159,4162],{},[441,4160,4161],{},"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.",[474,4164,4166],{"id":4165},"la-arquitectura-criptográfica-basada-en-nostr-de-buzz","La arquitectura criptográfica basada en Nostr de Buzz",[430,4168,4169],{},[433,4170],{"alt":4171,"src":4172},"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",[485,4174,4175,4181,4187,4193,4199,4205],{},[488,4176,4177,4180],{},[441,4178,4179],{},"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.",[488,4182,4183,4186],{},[441,4184,4185],{},"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.",[488,4188,4189,4192],{},[441,4190,4191],{},"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).",[488,4194,4195,4198],{},[441,4196,4197],{},"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.",[488,4200,4201,4204],{},[441,4202,4203],{},"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.",[488,4206,4207,4210],{},[441,4208,4209],{},"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.",[474,4212,4214],{"id":4213},"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",[879,4216,4218],{"id":4217},"_0-requisitos-previos","0. Requisitos previos",[485,4220,4221,4224,4227,4230],{},[488,4222,4223],{},"Un VPS Linux",[488,4225,4226],{},"Un dominio que apunte a tu servidor",[488,4228,4229],{},"Docker y el plugin Docker Compose",[488,4231,4232],{},"Cuenta de Cloudflare (plan gratuito)",[430,4234,4235,4236,4238],{},"En esta guía, ejecutaremos el relay de Nostr en un VPS con Ubuntu detrás de una red privada de ",[444,4237,1706],{"href":363},". La pila consta de cuatro servicios en Docker Compose (relay, PostgreSQL, Redis y MinIO) además de Caddy para HTTPS.",[463,4240],{"description":4241,"image":2605,"image-alt":4242,"label":2708,"min-read":2709,"title":1706,"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.","Exposición segura de Hermes Agent a una red privada mediante Cloudflare Zero Trust y túnel WARP",[879,4244,4246],{"id":4245},"_1-dns-de-cloudflare-y-token-de-api","1. DNS de Cloudflare y token de API",[2158,4248,4250],{"id":4249},"crear-un-token-de-api-de-cloudflare","Crear un token de API de Cloudflare",[533,4252,4253,4260],{},[488,4254,4255,4256,4259],{},"Haz clic en el botón ",[441,4257,4258],{},"Profile"," en la esquina superior derecha desde el menú desplegable del icono de usuario.",[488,4261,4262,4263,461],{},"Haz clic en ",[441,4264,4265],{},"API Tokens",[430,4267,4268],{},[433,4269],{"alt":4270,"src":4271},"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",[533,4273,4274,4279,4285,4305,4310,4314,4317],{"start":1068},[488,4275,4262,4276,461],{},[441,4277,4278],{},"Create Token",[488,4280,4281,4282,461],{},"Usa la plantilla ",[441,4283,4284],{},"Edit zone DNS",[488,4286,4287,4288],{},"Configura la plantilla de la siguiente manera:\n",[485,4289,4290,4296],{},[488,4291,4292,4295],{},[441,4293,4294],{},"Permissions",": Zone — DNS — Edit",[488,4297,4298,4301,4302],{},[441,4299,4300],{},"Zone Resources",": Include — Specific zone — ",[495,4303,4304],{},"example.com",[488,4306,4262,4307,461],{},[441,4308,4309],{},"Continue to summary",[488,4311,4262,4312,461],{},[441,4313,4278],{},[488,4315,4316],{},"Copia el token generado, ya que no se volverá a mostrar una vez cerrada la página.",[488,4318,4319],{},"Prueba el token generado en tu terminal para asegurarte de que funciona correctamente:",[923,4321,4323],{"className":1032,"code":4322,"language":1034,"meta":425,"style":425},"curl \"https:\u002F\u002Fapi.cloudflare.com\u002Fclient\u002Fv4\u002Fuser\u002Ftokens\u002Fverify\" -H \"Authorization: Bearer YOUR_TOKEN_HERE\"\n",[495,4324,4325],{"__ignoreMap":425},[931,4326,4327,4329,4331,4334,4336,4339,4341,4344],{"class":933,"line":934},[931,4328,2989],{"class":1041},[931,4330,3285],{"class":945},[931,4332,4333],{"class":1045},"https:\u002F\u002Fapi.cloudflare.com\u002Fclient\u002Fv4\u002Fuser\u002Ftokens\u002Fverify",[931,4335,3694],{"class":945},[931,4337,4338],{"class":1045}," -H",[931,4340,3285],{"class":945},[931,4342,4343],{"class":1045},"Authorization: Bearer YOUR_TOKEN_HERE",[931,4345,1955],{"class":945},[2158,4347,4349],{"id":4348},"registros-dns","Registros DNS",[485,4351,4352],{},[488,4353,4354,4355,461],{},"Crea un registro A y establécelo como ",[441,4356,4357],{},"DNS only",[430,4359,4360],{},[433,4361],{"alt":4362,"src":4363},"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",[879,4365,4367],{"id":4366},"_2-instalar-docker-en-ubuntu","2. Instalar Docker en Ubuntu",[430,4369,4370],{},"Ejecuta los siguientes comandos para instalar Docker en Ubuntu:",[923,4372,4374],{"className":1032,"code":4373,"language":1034,"meta":425,"style":425},"# 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",[495,4375,4376,4381,4409,4413,4418,4460,4464,4469,4479,4483,4488,4509,4513,4518,4529,4533,4538,4544,4548,4562,4566,4571],{"__ignoreMap":425},[931,4377,4378],{"class":933,"line":934},[931,4379,4380],{"class":1071},"# Add Docker's official GPG key and set up the Docker repository\n",[931,4382,4383,4385,4388,4391,4394,4397,4400,4403,4406],{"class":933,"line":1061},[931,4384,2989],{"class":1041},[931,4386,4387],{"class":1045}," -fsSL",[931,4389,4390],{"class":1045}," https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg",[931,4392,4393],{"class":945}," |",[931,4395,4396],{"class":1041}," sudo",[931,4398,4399],{"class":1045}," gpg",[931,4401,4402],{"class":1045}," --dearmor",[931,4404,4405],{"class":1045}," -o",[931,4407,4408],{"class":1045}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg\n",[931,4410,4411],{"class":933,"line":1068},[931,4412,1065],{"emptyLinePlaceholder":1064},[931,4414,4415],{"class":933,"line":1075},[931,4416,4417],{"class":1071},"# Add the official Docker repository\n",[931,4419,4420,4423,4425,4428,4431,4434,4437,4440,4443,4445,4447,4449,4451,4454,4457],{"class":933,"line":1923},[931,4421,4422],{"class":962},"echo",[931,4424,3285],{"class":945},[931,4426,4427],{"class":1045},"deb [arch=amd64 signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu ",[931,4429,4430],{"class":945},"$(",[931,4432,4433],{"class":1041},"lsb_release",[931,4435,4436],{"class":1045}," -cs",[931,4438,4439],{"class":945},")",[931,4441,4442],{"class":1045}," stable",[931,4444,3694],{"class":945},[931,4446,4393],{"class":945},[931,4448,4396],{"class":1041},[931,4450,3817],{"class":1045},[931,4452,4453],{"class":1045}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[931,4455,4456],{"class":945}," >",[931,4458,4459],{"class":1045}," \u002Fdev\u002Fnull\n",[931,4461,4462],{"class":933,"line":1928},[931,4463,1065],{"emptyLinePlaceholder":1064},[931,4465,4466],{"class":933,"line":1934},[931,4467,4468],{"class":1071},"# Update package list\n",[931,4470,4471,4473,4476],{"class":933,"line":2270},[931,4472,1891],{"class":1041},[931,4474,4475],{"class":1045}," apt",[931,4477,4478],{"class":1045}," update\n",[931,4480,4481],{"class":933,"line":2281},[931,4482,1065],{"emptyLinePlaceholder":1064},[931,4484,4485],{"class":933,"line":2377},[931,4486,4487],{"class":1071},"# Install Docker Engine, Docker Community Edition, and containerd runtime\n",[931,4489,4490,4492,4494,4497,4500,4503,4506],{"class":933,"line":1695},[931,4491,1891],{"class":1041},[931,4493,4475],{"class":1045},[931,4495,4496],{"class":1045}," install",[931,4498,4499],{"class":1045}," docker-ce",[931,4501,4502],{"class":1045}," docker-ce-cli",[931,4504,4505],{"class":1045}," containerd.io",[931,4507,4508],{"class":1045}," -y\n",[931,4510,4511],{"class":933,"line":2388},[931,4512,1065],{"emptyLinePlaceholder":1064},[931,4514,4515],{"class":933,"line":2393},[931,4516,4517],{"class":1071},"# Start automatically when the system boots\n",[931,4519,4520,4522,4524,4526],{"class":933,"line":2399},[931,4521,1891],{"class":1041},[931,4523,1894],{"class":1045},[931,4525,2022],{"class":1045},[931,4527,4528],{"class":1045}," docker\n",[931,4530,4531],{"class":933,"line":3354},[931,4532,1065],{"emptyLinePlaceholder":1064},[931,4534,4535],{"class":933,"line":3365},[931,4536,4537],{"class":1071},"# Verify docker is installed\n",[931,4539,4540,4542],{"class":933,"line":3370},[931,4541,1176],{"class":1041},[931,4543,3617],{"class":1045},[931,4545,4546],{"class":933,"line":3378},[931,4547,1065],{"emptyLinePlaceholder":1064},[931,4549,4550,4552,4554,4556,4559],{"class":933,"line":3907},[931,4551,1891],{"class":1041},[931,4553,4475],{"class":1045},[931,4555,4496],{"class":1045},[931,4557,4558],{"class":1045}," -y",[931,4560,4561],{"class":1045}," docker-compose-plugin\n",[931,4563,4564],{"class":933,"line":3913},[931,4565,1065],{"emptyLinePlaceholder":1064},[931,4567,4568],{"class":933,"line":3922},[931,4569,4570],{"class":1071},"# Verify the compose plugin is installed\n",[931,4572,4574,4576,4578],{"class":933,"line":4573},22,[931,4575,1176],{"class":1041},[931,4577,1179],{"class":1045},[931,4579,4580],{"class":1045}," version\n",[879,4582,4584],{"id":4583},"_3-clonar-y-configurar","3. Clonar y configurar",[923,4586,4588],{"className":1032,"code":4587,"language":1034,"meta":425,"style":425},"git clone https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz.git\n\ncd buzz\u002Fdeploy\u002Fcompose\ncp .env.example .env\nnano .env\n",[495,4589,4590,4599,4603,4610,4618],{"__ignoreMap":425},[931,4591,4592,4594,4596],{"class":933,"line":934},[931,4593,2791],{"class":1041},[931,4595,2794],{"class":1045},[931,4597,4598],{"class":1045}," https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz.git\n",[931,4600,4601],{"class":933,"line":1061},[931,4602,1065],{"emptyLinePlaceholder":1064},[931,4604,4605,4607],{"class":933,"line":1068},[931,4606,2815],{"class":962},[931,4608,4609],{"class":1045}," buzz\u002Fdeploy\u002Fcompose\n",[931,4611,4612,4614,4616],{"class":933,"line":1075},[931,4613,2832],{"class":1041},[931,4615,2835],{"class":1045},[931,4617,2838],{"class":1045},[931,4619,4620,4623],{"class":933,"line":1923},[931,4621,4622],{"class":1041},"nano",[931,4624,2838],{"class":1045},[430,4626,4627,4628,4630],{},"Edita ",[495,4629,2845],{}," en grupos:",[485,4632,4633],{},[488,4634,4635],{},[441,4636,4637],{},"Dominio:",[923,4639,4644],{"className":4640,"code":4642,"language":4643},[4641],"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",[495,4645,4642],{"__ignoreMap":425},[485,4647,4648,4658],{},[488,4649,4650,4653,4654,4657],{},[441,4651,4652],{},"Clave del propietario:"," ",[495,4655,4656],{},"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.",[488,4659,4660,4663],{},[441,4661,4662],{},"Secretos (Secrets):",[485,4664,4665,4675,4688],{},[488,4666,4667,4668,4671,4672,4674],{},"Genera secretos usando esta ",[444,4669,4670],{"href":2865},"herramienta en línea"," o con ",[495,4673,2870],{}," (ejecútalo siete veces)",[488,4676,4677,4678,579,4681,742,4684,4687],{},"Reemplaza cada marcador ",[495,4679,4680],{},"CHANGE_ME",[495,4682,4683],{},"BUZZ_RELAY_PRIVATE_KEY",[495,4685,4686],{},"BUZZ_GIT_HOOK_HMAC_SECRET",", las contraseñas de Postgres\u002FRedis\u002FTypesense y las claves de acceso\u002Fsecretas de S3.",[488,4689,4690,4691,461],{},"Los marcadores sobrantes son la causa más común de bucles de reinicio de contenedores; verifica los tuyos con ",[495,4692,4693],{},"grep CHANGE_ME .env",[923,4695,4698],{"className":4696,"code":4697,"language":4643},[4641],"    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",[495,4699,4697],{"__ignoreMap":425},[485,4701,4702],{},[488,4703,4704,4707],{},[441,4705,4706],{},"Otros:",[485,4708,4709,4716],{},[488,4710,4711,4712,4715],{},"Agrega ",[495,4713,4714],{},"CLOUDFLARE_API_TOKEN"," como una variable de entorno y asígnale el token de API generado anteriormente. Esto es obligatorio para Caddy.",[488,4717,4718,4719,742,4721,4724,4725,461],{},"Buzz se distribuye con valores predeterminados abiertos: cualquiera que conozca la URL de tu relay puede autenticarse y unirse. Configura ",[495,4720,4656],{},[495,4722,4723],{},"BUZZ_REQUIRE_RELAY_MEMBERSHIP=true",", y ",[495,4726,4727],{},"BUZZ_REQUIRE_AUTH_TOKEN=true",[879,4729,4731],{"id":4730},"_4-habilitar-https-con-caddy","4. Habilitar HTTPS con Caddy",[2158,4733,4735],{"id":4734},"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",[485,4737,4738,4749,4760],{},[488,4739,4740,4741,4744,4745,4748],{},"Configuramos DNS-01 con Cloudflare para Caddy. DNS-01 funciona haciendo que el complemento escriba un registro TXT ",[495,4742,4743],{},"_acme-challenge.buzz.pafor.me"," en el ",[441,4746,4747],{},"DNS público",";",[488,4750,4751,4752,4755,4756,4759],{},"Let's Encrypt luego busca el registro en el internet público para verificar el control del dominio. Esto significa que ",[495,4753,4754],{},"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 ",[495,4757,4758],{},"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.",[488,4761,4762],{},"Agrega lo siguiente al Caddyfile:",[923,4764,4766],{"className":1342,"code":4765,"language":1344,"meta":425,"style":425},"{\n  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}\n}\n",[495,4767,4768,4772,4785],{"__ignoreMap":425},[931,4769,4770],{"class":933,"line":934},[931,4771,2913],{"class":945},[931,4773,4774,4777,4780,4783],{"class":933,"line":1061},[931,4775,4776],{"class":1045},"  acme_dns cloudflare",[931,4778,4779],{"class":945}," {",[931,4781,4782],{"class":1045},"env.CLOUDFLARE_API_TOKEN",[931,4784,2921],{"class":945},[931,4786,4787],{"class":933,"line":1068},[931,4788,2921],{"class":945},[485,4790,4791],{},[488,4792,4793],{},"Crea un Dockerfile.caddy con el siguiente contenido, el cual es requerido por compose.caddy.yml:",[923,4795,4797],{"className":1342,"code":4796,"language":1344,"meta":425,"style":425},"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",[495,4798,4799,4804,4808,4813,4818,4822,4827,4831],{"__ignoreMap":425},[931,4800,4801],{"class":933,"line":934},[931,4802,4803],{"class":1045},"FROM caddy:2-builder AS builder\n",[931,4805,4806],{"class":933,"line":1061},[931,4807,1065],{"emptyLinePlaceholder":1064},[931,4809,4810],{"class":933,"line":1068},[931,4811,4812],{"class":1045},"RUN xcaddy build \\\n",[931,4814,4815],{"class":933,"line":1075},[931,4816,4817],{"class":1045},"    --with github.com\u002Fcaddy-dns\u002Fcloudflare\n",[931,4819,4820],{"class":933,"line":1923},[931,4821,1065],{"emptyLinePlaceholder":1064},[931,4823,4824],{"class":933,"line":1928},[931,4825,4826],{"class":1045},"FROM caddy:2-alpine\n",[931,4828,4829],{"class":933,"line":1934},[931,4830,1065],{"emptyLinePlaceholder":1064},[931,4832,4833],{"class":933,"line":2270},[931,4834,4835],{"class":1045},"COPY --from=builder \u002Fusr\u002Fbin\u002Fcaddy \u002Fusr\u002Fbin\u002Fcaddy\n",[485,4837,4838],{},[488,4839,4840,4841,4844],{},"Modifica ",[495,4842,4843],{},"compose.caddy.yml"," para usar la imagen con el módulo de Cloudflare y pasar el token de API de Cloudflare:",[923,4846,4848],{"className":1342,"code":4847,"language":1344,"meta":425,"style":425},"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",[495,4849,4850,4856,4863,4875,4879,4886,4893,4903,4913,4922,4929,4936,4946,4952,4962,4972,4978,4989,5000,5006,5013,5020,5027,5036,5044,5052,5057,5064,5072,5080,5091,5099,5106],{"__ignoreMap":425},[931,4851,4852,4854],{"class":933,"line":934},[931,4853,3251],{"class":1354},[931,4855,1368],{"class":945},[931,4857,4858,4861],{"class":933,"line":1061},[931,4859,4860],{"class":1354},"  relay",[931,4862,1368],{"class":945},[931,4864,4865,4867,4869,4872],{"class":933,"line":1068},[931,4866,3275],{"class":1354},[931,4868,889],{"class":945},[931,4870,4871],{"class":937}," !reset",[931,4873,4874],{"class":945}," []\n",[931,4876,4877],{"class":933,"line":1075},[931,4878,1065],{"emptyLinePlaceholder":1064},[931,4880,4881,4884],{"class":933,"line":1923},[931,4882,4883],{"class":1354},"  caddy",[931,4885,1368],{"class":945},[931,4887,4888,4891],{"class":933,"line":1928},[931,4889,4890],{"class":1354},"    build",[931,4892,1368],{"class":945},[931,4894,4895,4898,4900],{"class":933,"line":1934},[931,4896,4897],{"class":1354},"      context",[931,4899,889],{"class":945},[931,4901,4902],{"class":2958}," .\n",[931,4904,4905,4908,4910],{"class":933,"line":2270},[931,4906,4907],{"class":1354},"      dockerfile",[931,4909,889],{"class":945},[931,4911,4912],{"class":1045}," Dockerfile.caddy\n",[931,4914,4915,4917,4919],{"class":933,"line":2281},[931,4916,3265],{"class":1354},[931,4918,889],{"class":945},[931,4920,4921],{"class":1045}," buzz-caddy:cloudflare\n",[931,4923,4924,4927],{"class":933,"line":2377},[931,4925,4926],{"class":1354},"    depends_on",[931,4928,1368],{"class":945},[931,4930,4931,4934],{"class":933,"line":1695},[931,4932,4933],{"class":1354},"      relay",[931,4935,1368],{"class":945},[931,4937,4938,4941,4943],{"class":933,"line":2388},[931,4939,4940],{"class":1354},"        condition",[931,4942,889],{"class":945},[931,4944,4945],{"class":1045}," service_healthy\n",[931,4947,4948,4950],{"class":933,"line":2393},[931,4949,3295],{"class":1354},[931,4951,1368],{"class":945},[931,4953,4954,4957,4959],{"class":933,"line":2399},[931,4955,4956],{"class":1354},"      BUZZ_DOMAIN",[931,4958,889],{"class":945},[931,4960,4961],{"class":1045}," ${BUZZ_DOMAIN:?set BUZZ_DOMAIN}\n",[931,4963,4964,4967,4969],{"class":933,"line":3354},[931,4965,4966],{"class":1354},"      CLOUDFLARE_API_TOKEN",[931,4968,889],{"class":945},[931,4970,4971],{"class":1045}," ${CLOUDFLARE_API_TOKEN:?set CLOUDFLARE_API_TOKEN}\n",[931,4973,4974,4976],{"class":933,"line":3365},[931,4975,3275],{"class":1354},[931,4977,1368],{"class":945},[931,4979,4980,4982,4984,4987],{"class":933,"line":3370},[931,4981,3282],{"class":945},[931,4983,3285],{"class":945},[931,4985,4986],{"class":1045},"${CADDY_HTTP_PORT:-80}:80",[931,4988,1955],{"class":945},[931,4990,4991,4993,4995,4998],{"class":933,"line":3378},[931,4992,3282],{"class":945},[931,4994,3285],{"class":945},[931,4996,4997],{"class":1045},"${CADDY_HTTPS_PORT:-443}:443",[931,4999,1955],{"class":945},[931,5001,5002,5004],{"class":933,"line":3907},[931,5003,3328],{"class":1354},[931,5005,1368],{"class":945},[931,5007,5008,5010],{"class":933,"line":3913},[931,5009,3282],{"class":945},[931,5011,5012],{"class":1045}," .\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile:ro\n",[931,5014,5015,5017],{"class":933,"line":3922},[931,5016,3282],{"class":945},[931,5018,5019],{"class":1045}," buzz-caddy-data:\u002Fdata\n",[931,5021,5022,5024],{"class":933,"line":4573},[931,5023,3282],{"class":945},[931,5025,5026],{"class":1045}," buzz-caddy-config:\u002Fconfig\n",[931,5028,5030,5032,5034],{"class":933,"line":5029},23,[931,5031,3357],{"class":1354},[931,5033,889],{"class":945},[931,5035,3362],{"class":1045},[931,5037,5039,5042],{"class":933,"line":5038},24,[931,5040,5041],{"class":1354},"    networks",[931,5043,1368],{"class":945},[931,5045,5047,5049],{"class":933,"line":5046},25,[931,5048,3282],{"class":945},[931,5050,5051],{"class":1045}," buzz-net\n",[931,5053,5055],{"class":933,"line":5054},26,[931,5056,1065],{"emptyLinePlaceholder":1064},[931,5058,5060,5062],{"class":933,"line":5059},27,[931,5061,3373],{"class":1354},[931,5063,1368],{"class":945},[931,5065,5067,5070],{"class":933,"line":5066},28,[931,5068,5069],{"class":1354},"  buzz-caddy-data",[931,5071,1368],{"class":945},[931,5073,5075,5078],{"class":933,"line":5074},29,[931,5076,5077],{"class":1354},"    labels",[931,5079,1368],{"class":945},[931,5081,5083,5086,5088],{"class":933,"line":5082},30,[931,5084,5085],{"class":1354},"      com.buzz.volume",[931,5087,889],{"class":945},[931,5089,5090],{"class":1045}," caddy-data\n",[931,5092,5094,5097],{"class":933,"line":5093},31,[931,5095,5096],{"class":1354},"  buzz-caddy-config",[931,5098,1368],{"class":945},[931,5100,5102,5104],{"class":933,"line":5101},32,[931,5103,5077],{"class":1354},[931,5105,1368],{"class":945},[931,5107,5109,5111,5113],{"class":933,"line":5108},33,[931,5110,5085],{"class":1354},[931,5112,889],{"class":945},[931,5114,5115],{"class":1045}," caddy-config\n",[2158,5117,5119],{"id":5118},"iniciar-los-contenedores-de-docker","Iniciar los contenedores de Docker",[923,5121,5123],{"className":1032,"code":5122,"language":1034,"meta":425,"style":425},"docker compose -f compose.yml -f compose.caddy.yml up -d\n\n#Check the Docker status\ndocker compose ps\n",[495,5124,5125,5145,5149,5154],{"__ignoreMap":425},[931,5126,5127,5129,5131,5133,5136,5138,5141,5143],{"class":933,"line":934},[931,5128,1176],{"class":1041},[931,5130,1179],{"class":1045},[931,5132,3437],{"class":1045},[931,5134,5135],{"class":1045}," compose.yml",[931,5137,3437],{"class":1045},[931,5139,5140],{"class":1045}," compose.caddy.yml",[931,5142,2980],{"class":1045},[931,5144,2983],{"class":1045},[931,5146,5147],{"class":933,"line":1061},[931,5148,1065],{"emptyLinePlaceholder":1064},[931,5150,5151],{"class":933,"line":1068},[931,5152,5153],{"class":1071},"#Check the Docker status\n",[931,5155,5156,5158,5160],{"class":933,"line":1075},[931,5157,1176],{"class":1041},[931,5159,1179],{"class":1045},[931,5161,5162],{"class":1045}," ps\n",[433,5164],{"src":5165,"alt":5166,"style":5167},"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;",[430,5169,5170,5171,5174],{},"Abre tu navegador web y navega a ",[495,5172,5173],{},"http:\u002F\u002Fbuzz.pafor.me"," para verificar que el relay esté funcionando.",[433,5176],{"src":5177,"alt":5178,"style":3116},"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",[879,5180,5182],{"id":5181},"paso-5-copias-de-seguridad-desde-el-primer-día","Paso 5: Copias de seguridad desde el primer día",[923,5184,5186],{"className":1032,"code":5185,"language":1034,"meta":425,"style":425},"mkdir -p \u002Fbuzz_backups\ncrontab -e\n",[495,5187,5188,5199],{"__ignoreMap":425},[931,5189,5190,5193,5196],{"class":933,"line":934},[931,5191,5192],{"class":1041},"mkdir",[931,5194,5195],{"class":1045}," -p",[931,5197,5198],{"class":1045}," \u002Fbuzz_backups\n",[931,5200,5201,5204],{"class":933,"line":1061},[931,5202,5203],{"class":1041},"crontab",[931,5205,5206],{"class":1045}," -e\n",[430,5208,5209],{},"Agrega una tarea cron nocturna para el volcado de la base de datos:",[923,5211,5214],{"className":5212,"code":5213,"language":4643},[4641],"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",[495,5215,5213],{"__ignoreMap":425},[430,5217,5218],{},"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.",[474,5220,5222],{"id":5221},"configuración-del-cliente-de-escritorio-buzz-y-las-identidades-de-nostr","Configuración del cliente de escritorio Buzz y las identidades de Nostr",[430,5224,5225,5226,5230],{},"Descarga la aplicación de escritorio Buzz desde ",[444,5227,5228],{"href":5228,"rel":5229},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Freleases",[448]," e iníciala. Completa los detalles del perfil hasta llegar a la página \"Join or create a community\".",[430,5232,5233],{},[433,5234],{"alt":5235,"src":5236},"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",[430,5238,5239],{},"Haz clic en \"Join a community\" y copia tu clave pública.",[430,5241,5242],{},[433,5243],{"alt":5244,"src":5245},"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",[430,5247,5248,5249,5251],{},"Ejecuta el siguiente comando en el ",[441,5250,2691],{}," para agregarte como primer miembro:",[923,5253,5255],{"className":1032,"code":5254,"language":1034,"meta":425,"style":425},"docker compose exec relay buzz-admin add-member --pubkey npub1yourkeyhere\n",[495,5256,5257],{"__ignoreMap":425},[931,5258,5259,5261,5263,5265,5267,5269,5271,5273],{"class":933,"line":934},[931,5260,1176],{"class":1041},[931,5262,1179],{"class":1045},[931,5264,1182],{"class":1045},[931,5266,1185],{"class":1045},[931,5268,1188],{"class":1045},[931,5270,1191],{"class":1045},[931,5272,1194],{"class":1045},[931,5274,5275],{"class":1045}," npub1yourkeyhere\n",[430,5277,4711,5278,5281],{},[495,5279,5280],{},"wss:\u002F\u002Fbuzz.pafor.me"," como la URL de la comunidad y haz clic en \"Next\".",[430,5283,5284],{},[433,5285],{"alt":5286,"src":5287},"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",[430,5289,5290],{},"Ingresa un nombre y haz clic en el botón Next.",[430,5292,5293],{},[433,5294],{"alt":5295,"src":5296},"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",[879,5298,5300],{"id":5299},"canales-y-agentes","Canales y agentes",[430,5302,5303],{},"Los canales son grupos de tareas o grupos de proyectos. Crea un canal por tarea o proyecto e incorpora a los humanos y agentes.",[430,5305,5306],{},"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í.",[430,5308,5309],{},"Enviemos un mensaje directo a un agente preconfigurado",[430,5311,5312],{},[433,5313],{"alt":5314,"src":5315},"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",[430,5317,5318],{},"Creemos un canal y agreguemos algunos agentes a él",[430,5320,5321],{},[433,5322],{"alt":5323,"src":5324},"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",[430,5326,5327],{},[433,5328],{"alt":5329,"src":5330},"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",[430,5332,5333],{},[433,5334],{"alt":5335,"src":5336},"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,5338],{"src":5339,"alt":5340,"style":5341},"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;",[879,5343,5345],{"id":5344},"habilitar-runtimes-de-agentes","Habilitar runtimes de agentes",[430,5347,5348,5349,5352,5353,5356],{},"Los runtimes predeterminados dependen de la autodetección que busca binarios de ejecución (como ",[495,5350,5351],{},"hermes-acp",") en directorios estándar como ",[495,5354,5355],{},"~\u002F.local\u002Fbin",". Si una herramienta se instaló en una ubicación no estándar, Buzz no podrá resolverla.",[430,5358,5359,5360,5363],{},"Para Kimi Code, el ID del agente es kimi, y Buzz busca su binario en ",[495,5361,5362],{},"~\u002F.local\u002Fbin\u002Fkimi",". Un enlace simbólico servirá:",[923,5365,5368],{"className":5366,"code":5367,"language":4643},[4641],"ln -s kimi-cli \u002FUsers\u002F\u003Cuser>\u002F.local\u002Fbin\u002Fkimi\n",[495,5369,5367],{"__ignoreMap":425},[430,5371,5372],{},"Kimi Code ahora aparece en los runtimes de agentes.",[430,5374,5375],{},[433,5376],{"alt":5377,"src":5378},"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",[879,5380,5382],{"id":5381},"proyectos-y-repositorios","Proyectos y repositorios",[430,5384,5385,5386,5389],{},"Habilita primero la función '",[441,5387,5388],{},"Projects","' en Settings → Experiments:",[430,5391,5392],{},[433,5393],{"alt":5394,"src":5395},"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",[430,5397,5398,5399,5401],{},"Actualmente, un proyecto debe crearse utilizando la herramienta ",[495,5400,1206],{}," (aunque se planea la creación directa de proyectos desde la interfaz de usuario para una versión futura).",[2158,5403,5405],{"id":5404},"instalar-buzz-cli","Instalar buzz-cli",[430,5407,5408,5409,4744,5411,889],{},"Ejecuta los siguientes comandos para instalar ",[495,5410,1206],{},[441,5412,2691],{},[923,5414,5416],{"className":1032,"code":5415,"language":1034,"meta":425,"style":425},"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",[495,5417,5418,5429,5436,5449],{"__ignoreMap":425},[931,5419,5420,5422,5424,5426],{"class":933,"line":934},[931,5421,1891],{"class":1041},[931,5423,4475],{"class":1045},[931,5425,4496],{"class":1045},[931,5427,5428],{"class":1045}," cargo\n",[931,5430,5431,5433],{"class":933,"line":1061},[931,5432,2815],{"class":962},[931,5434,5435],{"class":1045}," ~\u002Fbuzz\n",[931,5437,5438,5441,5443,5446],{"class":933,"line":1068},[931,5439,5440],{"class":1041},"cargo",[931,5442,4496],{"class":1045},[931,5444,5445],{"class":1045}," --path",[931,5447,5448],{"class":1045}," crates\u002Fbuzz-cli\n",[931,5450,5451,5453,5456,5459,5462,5465,5468,5471,5474],{"class":933,"line":1075},[931,5452,4422],{"class":962},[931,5454,5455],{"class":945}," '",[931,5457,5458],{"class":1045},"export PATH=\"$HOME\u002F.cargo\u002Fbin:$PATH\"",[931,5460,5461],{"class":945},"'",[931,5463,5464],{"class":945}," >>",[931,5466,5467],{"class":1045}," ~\u002F.bashrc",[931,5469,5470],{"class":945}," &&",[931,5472,5473],{"class":962}," source",[931,5475,5476],{"class":1045}," ~\u002F.bashrc\n",[430,5478,5479,5480,1518,5483,5485,5486,5488],{},"Genera un par de claves privada y pública usando la ",[444,5481,4670],{"href":5482},"\u002Fes\u002Ftools\u002Fnostr-key-generator",[495,5484,1206],{},". Este par constituirá la identidad de ",[495,5487,1206],{}," en el relay de Nostr.",[923,5490,5492],{"className":1032,"code":5491,"language":1034,"meta":425,"style":425},"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",[495,5493,5494,5516,5520,5525],{"__ignoreMap":425},[931,5495,5496,5498,5501,5504,5507,5510,5513],{"class":933,"line":934},[931,5497,1176],{"class":1041},[931,5499,5500],{"class":1045}," run",[931,5502,5503],{"class":1045}," --rm",[931,5505,5506],{"class":1045}," --entrypoint",[931,5508,5509],{"class":1045}," \u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-admin",[931,5511,5512],{"class":1045}," ghcr.io\u002Fblock\u002Fbuzz:main",[931,5514,5515],{"class":1045}," generate-key\n",[931,5517,5518],{"class":933,"line":1061},[931,5519,1065],{"emptyLinePlaceholder":1064},[931,5521,5522],{"class":933,"line":1068},[931,5523,5524],{"class":1071},"# Use the generated Public Key\n",[931,5526,5527,5529,5531,5533,5535,5537,5539,5541],{"class":933,"line":1075},[931,5528,1176],{"class":1041},[931,5530,1179],{"class":1045},[931,5532,1182],{"class":1045},[931,5534,1185],{"class":1045},[931,5536,1188],{"class":1045},[931,5538,1191],{"class":1045},[931,5540,1194],{"class":1045},[931,5542,5543],{"class":1045}," generated_Public_key\n",[430,5545,5546],{},"Configura la CLI:",[923,5548,5550],{"className":1032,"code":5549,"language":1034,"meta":425,"style":425},"# 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",[495,5551,5552,5557,5588,5592],{"__ignoreMap":425},[931,5553,5554],{"class":933,"line":934},[931,5555,5556],{"class":1071},"# Copy the Secret key as the BUZZ_PRIVATE_KEY\n",[931,5558,5559,5561,5563,5566,5568,5571,5574,5577,5580,5583,5585],{"class":933,"line":1061},[931,5560,4422],{"class":962},[931,5562,5455],{"class":945},[931,5564,5565],{"class":1045},"export BUZZ_PRIVATE_KEY=\"nsec1...\"",[931,5567,5461],{"class":945},[931,5569,5570],{"class":945},"  >>",[931,5572,5573],{"class":1045}," \u002Fhome\u002F",[931,5575,5576],{"class":945},"\u003C",[931,5578,5579],{"class":1045},"use",[931,5581,5582],{"class":941},"r",[931,5584,1249],{"class":945},[931,5586,5587],{"class":1045},"\u002F.bashrc\n",[931,5589,5590],{"class":933,"line":1068},[931,5591,1065],{"emptyLinePlaceholder":1064},[931,5593,5594,5596,5598,5601,5603,5605,5607,5609,5611,5613,5615],{"class":933,"line":1075},[931,5595,4422],{"class":962},[931,5597,5455],{"class":945},[931,5599,5600],{"class":1045},"export BUZZ_RELAY_URL=\"wss:\u002F\u002Fbuzz.pafor.me\"",[931,5602,5461],{"class":945},[931,5604,5570],{"class":945},[931,5606,5573],{"class":1045},[931,5608,5576],{"class":945},[931,5610,5579],{"class":1045},[931,5612,5582],{"class":941},[931,5614,1249],{"class":945},[931,5616,5587],{"class":1045},[430,5618,5619,5620,5622],{},"Ejecuta el siguiente comando para verificar que ",[495,5621,1206],{}," esté configurado correctamente:",[923,5624,5626],{"className":1032,"code":5625,"language":1034,"meta":425,"style":425},"buzz channels list\n",[495,5627,5628],{"__ignoreMap":425},[931,5629,5630,5632,5634],{"class":933,"line":934},[931,5631,1229],{"class":1041},[931,5633,1232],{"class":1045},[931,5635,5636],{"class":1045}," list\n",[430,5638,5639],{},[433,5640],{"alt":5641,"src":5642},"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",[2158,5644,5646],{"id":5645},"crear-un-proyecto-con-buzz-cli","Crear un proyecto con buzz-cli",[923,5648,5650],{"className":1032,"code":5649,"language":1034,"meta":425,"style":425},"# --channel refers to the UUID of the channel\nbuzz repos create --id TestKOA --name 'Display Name' --channel \"bd92b3d1-8fac-441c-a9ac-2b2f3aac5c5b\"\n",[495,5651,5652,5657],{"__ignoreMap":425},[931,5653,5654],{"class":933,"line":934},[931,5655,5656],{"class":1071},"# --channel refers to the UUID of the channel\n",[931,5658,5659,5661,5664,5667,5670,5673,5676,5678,5681,5683,5685,5687,5690],{"class":933,"line":1061},[931,5660,1229],{"class":1041},[931,5662,5663],{"class":1045}," repos",[931,5665,5666],{"class":1045}," create",[931,5668,5669],{"class":1045}," --id",[931,5671,5672],{"class":1045}," TestKOA",[931,5674,5675],{"class":1045}," --name",[931,5677,5455],{"class":945},[931,5679,5680],{"class":1045},"Display Name",[931,5682,5461],{"class":945},[931,5684,1237],{"class":1045},[931,5686,3285],{"class":945},[931,5688,5689],{"class":1045},"bd92b3d1-8fac-441c-a9ac-2b2f3aac5c5b",[931,5691,1955],{"class":945},[430,5693,5694,5695,5697],{},"Un proyecto solo puede ser eliminado por su propietario. Dado que el proyecto \"Display Name\" fue creado por ",[495,5696,1206],{},", que carece de un comando de eliminación, no se puede borrar de esta manera.",[430,5699,5700],{},"Vuelve a consultar la aplicación de escritorio Buzz para verificar que el proyecto se haya creado.",[430,5702,5703],{},[433,5704],{"alt":5705,"src":5706},"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",[430,5708,5709],{},"Una vez que un proyecto está disponible en Projects, se pueden agregar más proyectos usando el botón \"+\" en la esquina superior derecha.",[430,5711,5712],{},[433,5713],{"alt":5714,"src":5715},"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",[2158,5717,5719],{"id":5718},"vincular-repositorios-git-existentes","Vincular repositorios Git existentes",[430,5721,5722,5723,5726,5727,5730,5731,889],{},"Instala ",[495,5724,5725],{},"git-credential-nostr"," en la máquina donde están los repositorios de git. Requiere ",[441,5728,5729],{},"git 2.46+"," y el conjunto de herramientas Rust. Consulta este archivo ",[444,5732,5735],{"href":5733,"rel":5734},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Ftree\u002Fmain\u002Fcrates\u002Fgit-credential-nostr",[448],"Readme",[923,5737,5739],{"className":1032,"code":5738,"language":1034,"meta":425,"style":425},"cargo install --path crates\u002Fgit-credential-nostr\n",[495,5740,5741],{"__ignoreMap":425},[931,5742,5743,5745,5747,5749],{"class":933,"line":934},[931,5744,5440],{"class":1041},[931,5746,4496],{"class":1045},[931,5748,5445],{"class":1045},[931,5750,5751],{"class":1045}," crates\u002Fgit-credential-nostr\n",[430,5753,5754,5755,5757],{},"Configura ",[495,5756,5725],{}," para la autorización del relay de Buzz:",[923,5759,5761],{"className":1032,"code":5760,"language":1034,"meta":425,"style":425},"# 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",[495,5762,5763,5768,5784,5797,5801,5806,5815,5842],{"__ignoreMap":425},[931,5764,5765],{"class":933,"line":934},[931,5766,5767],{"class":1071},"# 1. Register the helper and enable per-path credentials.\n",[931,5769,5770,5772,5775,5778,5781],{"class":933,"line":1061},[931,5771,2791],{"class":1041},[931,5773,5774],{"class":1045}," config",[931,5776,5777],{"class":1045}," --global",[931,5779,5780],{"class":1045}," credential.helper",[931,5782,5783],{"class":1045}," nostr\n",[931,5785,5786,5788,5790,5792,5795],{"class":933,"line":1068},[931,5787,2791],{"class":1041},[931,5789,5774],{"class":1045},[931,5791,5777],{"class":1045},[931,5793,5794],{"class":1045}," credential.useHttpPath",[931,5796,1379],{"class":945},[931,5798,5799],{"class":933,"line":1075},[931,5800,1065],{"emptyLinePlaceholder":1064},[931,5802,5803],{"class":933,"line":1923},[931,5804,5805],{"class":1071},"# 2. Store your nsec in a key file (must be 0600). Replace \"nsec1...\" with your private key\n",[931,5807,5808,5810,5812],{"class":933,"line":1928},[931,5809,5192],{"class":1041},[931,5811,5195],{"class":1045},[931,5813,5814],{"class":1045}," ~\u002F.nostr\n",[931,5816,5817,5819,5821,5824,5826,5828,5831,5833,5836,5839],{"class":933,"line":1934},[931,5818,4422],{"class":962},[931,5820,3285],{"class":945},[931,5822,5823],{"class":1045},"nsec1...",[931,5825,3694],{"class":945},[931,5827,4456],{"class":945},[931,5829,5830],{"class":1045}," ~\u002F.nostr\u002Fkey",[931,5832,5470],{"class":945},[931,5834,5835],{"class":1041}," chmod",[931,5837,5838],{"class":2958}," 600",[931,5840,5841],{"class":1045}," ~\u002F.nostr\u002Fkey\n",[931,5843,5844,5846,5848,5850,5853],{"class":933,"line":2270},[931,5845,2791],{"class":1041},[931,5847,5774],{"class":1045},[931,5849,5777],{"class":1045},[931,5851,5852],{"class":1045}," nostr.keyfile",[931,5854,5841],{"class":1045},[430,5856,5857],{},"Crea un repositorio en el relay de Buzz:",[923,5859,5862],{"className":5860,"code":5861,"language":4643},[4641],"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",[495,5863,5861],{"__ignoreMap":425},[430,5865,5866,5867,5870,5871,5874],{},"En tu primer ",[495,5868,5869],{},"git push",", te encontrarás con un error ",[495,5872,5873],{},"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):",[923,5876,5878],{"className":1032,"code":5877,"language":1034,"meta":425,"style":425},"buzz repos bind --id koa-email-routing --channel \u003CCHANNEL_UUID>\n\n# push the code again\ngit push\n",[495,5879,5880,5905,5909,5914],{"__ignoreMap":425},[931,5881,5882,5884,5886,5889,5891,5894,5896,5898,5900,5902],{"class":933,"line":934},[931,5883,1229],{"class":1041},[931,5885,5663],{"class":1045},[931,5887,5888],{"class":1045}," bind",[931,5890,5669],{"class":1045},[931,5892,5893],{"class":1045}," koa-email-routing",[931,5895,1237],{"class":1045},[931,5897,1240],{"class":945},[931,5899,1243],{"class":1045},[931,5901,1246],{"class":941},[931,5903,5904],{"class":945},">\n",[931,5906,5907],{"class":933,"line":1061},[931,5908,1065],{"emptyLinePlaceholder":1064},[931,5910,5911],{"class":933,"line":1068},[931,5912,5913],{"class":1071},"# push the code again\n",[931,5915,5916,5918],{"class":933,"line":1075},[931,5917,2791],{"class":1041},[931,5919,5920],{"class":1045}," push\n",[430,5922,5923,5924,5926],{},"Al verificar el proyecto en la aplicación de escritorio Buzz se muestra lo siguiente, porque la aplicación necesita ",[441,5925,5729],{}," — al iniciar la aplicación directamente puede que se use una versión anterior de Git:",[430,5928,5929],{},[433,5930],{"alt":5931,"src":5932},"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",[430,5934,5935,5936,5939,5940,461],{},"Exporta el PATH mediante ",[495,5937,5938],{},"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 ",[444,5941,5944],{"href":5942,"rel":5943},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Fissues\u002F5348",[448],"incidencia",[923,5946,5948],{"className":1032,"code":5947,"language":1034,"meta":425,"style":425},"open -a Buzz\n",[495,5949,5950],{"__ignoreMap":425},[931,5951,5952,5955,5958],{"class":933,"line":934},[931,5953,5954],{"class":1041},"open",[931,5956,5957],{"class":1045}," -a",[931,5959,5960],{"class":1045}," Buzz\n",[430,5962,5963],{},"Vuelve a consultar los Proyectos en la aplicación Buzz, los detalles del repositorio ahora están cargados.",[430,5965,5966],{},[433,5967],{"alt":5968,"src":5969},"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",[474,5971,5973],{"id":5972},"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",[430,5975,5976,5977,5980],{},"El emparejamiento de la aplicación móvil Buzz solo acepta el protocolo HTTPS y el servicio ",[495,5978,5979],{},"buzz-pair-relay"," no se inicia de forma predeterminada en el VPS.",[923,5982,5984],{"className":1032,"code":5983,"language":1034,"meta":425,"style":425},"cd ~\u002Fbuzz\ncargo install --path crates\u002Fbuzz-pair-relay\n",[495,5985,5986,5992],{"__ignoreMap":425},[931,5987,5988,5990],{"class":933,"line":934},[931,5989,2815],{"class":962},[931,5991,5435],{"class":1045},[931,5993,5994,5996,5998,6000],{"class":933,"line":1061},[931,5995,5440],{"class":1041},[931,5997,4496],{"class":1045},[931,5999,5445],{"class":1045},[931,6001,6002],{"class":1045}," crates\u002Fbuzz-pair-relay\n",[430,6004,6005,6006,6009,6010,889],{},"Agrega lo siguiente a ",[495,6007,6008],{},"compose.yml"," para iniciar el servicio ",[495,6011,5979],{},[923,6013,6015],{"className":1342,"code":6014,"language":1344,"meta":425,"style":425},"  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",[495,6016,6017,6024,6033,6053,6059,6069,6075,6086,6094,6100],{"__ignoreMap":425},[931,6018,6019,6022],{"class":933,"line":934},[931,6020,6021],{"class":1354},"  pair",[931,6023,1368],{"class":945},[931,6025,6026,6028,6030],{"class":933,"line":1061},[931,6027,3265],{"class":1354},[931,6029,889],{"class":945},[931,6031,6032],{"class":1045}," ${BUZZ_IMAGE:-ghcr.io\u002Fblock\u002Fbuzz:main}\n",[931,6034,6035,6038,6040,6043,6045,6048,6050],{"class":933,"line":1068},[931,6036,6037],{"class":1354},"    entrypoint",[931,6039,889],{"class":945},[931,6041,6042],{"class":945}," [",[931,6044,3694],{"class":945},[931,6046,6047],{"class":1045},"\u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-pair-relay",[931,6049,3694],{"class":945},[931,6051,6052],{"class":945},"]\n",[931,6054,6055,6057],{"class":933,"line":1075},[931,6056,3295],{"class":1354},[931,6058,1368],{"class":945},[931,6060,6061,6064,6066],{"class":933,"line":1923},[931,6062,6063],{"class":1354},"      BUZZ_PAIR_RELAY_BIND_ADDR",[931,6065,889],{"class":945},[931,6067,6068],{"class":1045}," 0.0.0.0:5000\n",[931,6070,6071,6073],{"class":933,"line":1928},[931,6072,3275],{"class":1354},[931,6074,1368],{"class":945},[931,6076,6077,6079,6081,6084],{"class":933,"line":1934},[931,6078,3282],{"class":945},[931,6080,3285],{"class":945},[931,6082,6083],{"class":1045},"${BUZZ_PAIR_RELAY_PORT:-5000}:5000",[931,6085,1955],{"class":945},[931,6087,6088,6090,6092],{"class":933,"line":2270},[931,6089,3357],{"class":1354},[931,6091,889],{"class":945},[931,6093,3362],{"class":1045},[931,6095,6096,6098],{"class":933,"line":2281},[931,6097,5041],{"class":1354},[931,6099,1368],{"class":945},[931,6101,6102,6105,6108],{"class":933,"line":2377},[931,6103,6104],{"class":945},"      [",[931,6106,6107],{"class":1045},"buzz-net",[931,6109,6052],{"class":945},[430,6111,4711,6112,575,6115,6118,6119,889],{},[495,6113,6114],{},"BUZZ_PAIRING_RELAY_URL",[495,6116,6117],{},"BUZZ_PAIR_RELAY_PORT"," al archivo ",[495,6120,2845],{},[923,6122,6125],{"className":6123,"code":6124,"language":4643},[4641],"BUZZ_PAIRING_RELAY_URL=wss:\u002F\u002Fbuzz.pafor.me\u002Fpair\nBUZZ_PAIR_RELAY_PORT=5000\n",[495,6126,6124],{"__ignoreMap":425},[430,6128,6129,6130,6133],{},"Dirígete a '",[441,6131,6132],{},"Mobile","' en la configuración de la aplicación de escritorio Buzz:",[430,6135,6136],{},[433,6137],{"alt":6138,"src":6139},"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",[430,6141,6142],{},"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\".",[430,6144,6145],{},[433,6146],{"alt":6147,"src":6148},"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",[430,6150,6151],{},"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.",[430,6153,6154],{},[433,6155],{"alt":6156,"src":6157},"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",[474,6159,6161],{"id":6160},"reflexión-final","Reflexión final",[430,6163,6164],{},"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.",[474,6166,4030],{"id":1610},[485,6168,6169,6176,6183,6190],{},[488,6170,6171],{},[444,6172,6175],{"href":6173,"rel":6174},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz",[448],"Buzz releases",[488,6177,6178],{},[444,6179,6182],{"href":6180,"rel":6181},"https:\u002F\u002Fblock.xyz\u002Finside\u002Fintroducing-buzz-where-humans-and-agents-work-together",[448],"Introducing Buzz",[488,6184,6185],{},[444,6186,6189],{"href":6187,"rel":6188},"https:\u002F\u002Fwww.hostinger.com\u002Ftutorials\u002Fwhat-is-buzz",[448],"What is buzz",[488,6191,6192],{},[444,6193,6196],{"href":6194,"rel":6195},"https:\u002F\u002Fmiget.com\u002Fblog\u002Fhow-to-self-host-buzz",[448],"How to self-host Buzz (Miget)",[1639,6198,6199],{},"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":425,"searchDepth":1061,"depth":1068,"links":6201},[6202,6203,6204,6218,6227,6228,6229],{"id":4120,"depth":1061,"text":4121},{"id":4165,"depth":1061,"text":4166},{"id":4213,"depth":1061,"text":4214,"children":6205},[6206,6207,6211,6212,6213,6217],{"id":4217,"depth":1068,"text":4218},{"id":4245,"depth":1068,"text":4246,"children":6208},[6209,6210],{"id":4249,"depth":1075,"text":4250},{"id":4348,"depth":1075,"text":4349},{"id":4366,"depth":1068,"text":4367},{"id":4583,"depth":1068,"text":4584},{"id":4730,"depth":1068,"text":4731,"children":6214},[6215,6216],{"id":4734,"depth":1075,"text":4735},{"id":5118,"depth":1075,"text":5119},{"id":5181,"depth":1068,"text":5182},{"id":5221,"depth":1061,"text":5222,"children":6219},[6220,6221,6222],{"id":5299,"depth":1068,"text":5300},{"id":5344,"depth":1068,"text":5345},{"id":5381,"depth":1068,"text":5382,"children":6223},[6224,6225,6226],{"id":5404,"depth":1075,"text":5405},{"id":5645,"depth":1075,"text":5646},{"id":5718,"depth":1075,"text":5719},{"id":5972,"depth":1061,"text":5973},{"id":6160,"depth":1061,"text":6161},{"id":1610,"depth":1061,"text":4030},[1660,1659,1229],"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.",{"schemaOrg":6234,"robots":1693,"sitemap":6253},[6235,6236],{"@type":1670,"headline":455,"description":6232,"image":466},{"@type":1672,"name":455,"description":6232,"image":466,"step":6237},[6238,6241,6244,6247,6250],{"@type":1675,"name":6239,"text":6240},"Fase 1: Configuración de Cloudflare","Crear un token de API de Cloudflare y configurar los ajustes de DNS.",{"@type":1675,"name":6242,"text":6243},"Fase 2: Instalar Docker","Configurar e instalar Docker Engine en el VPS Ubuntu.",{"@type":1675,"name":6245,"text":6246},"Fase 3: Clonar y configurar","Clonar el repositorio y configurar las variables de compose.",{"@type":1675,"name":6248,"text":6249},"Fase 4: Integración de Caddy","Compilar un Caddy personalizado con el módulo de desafío de DNS de Cloudflare.",{"@type":1675,"name":6251,"text":6252},"Fase 5: Copia de seguridad automatizada","Configurar una tarea cron para respaldar automáticamente PostgreSQL.",{"lastmod":6254},"2026-09-03",{"title":6256,"description":6232,"ogTitle":455,"ogDescription":6232,"twitterTitle":455,"twitterDescription":6232},"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",[1700,6259,1102,6260,6261],"Docker","Caddy","Cloudflare","lURqc67rsxryYNK-aIxLymy3oKyalHndZyE0VbcVtWc",{"id":6264,"title":6265,"author":1702,"body":6266,"category":8130,"date":8132,"description":8133,"extension":1664,"image":8134,"imageAlt":8135,"isPublished":1064,"meta":8136,"minRead":5046,"navigation":1064,"path":87,"seo":8142,"stem":8143,"tags":8144,"updatedAt":6254,"__hash__":8146},"article\u002Fes\u002Farticle\u002Fself-hosted-travel-planner-trek.md","Aloja tus propios itinerarios de viaje con TREK y Docker",{"type":427,"value":6267,"toc":8089},[6268,6271,6274,6277,6281,6285,6427,6431,6437,6456,6459,6463,6567,6578,6581,6586,6589,6600,6604,6608,6611,6614,6647,6651,6654,6688,6691,6731,6734,6739,6750,6754,6761,6765,6768,6861,6865,6870,6874,6881,6885,6888,6906,6916,6920,6923,6933,6937,6941,6949,6953,6957,6960,6964,6968,6971,6976,6979,6984,6990,6994,6998,7001,7005,7019,7024,7030,7035,7039,7042,7047,7052,7055,7062,7066,7069,7072,7082,7089,7094,7100,7105,7109,7114,7119,7122,7127,7131,7137,7141,7146,7150,7153,7156,7161,7166,7171,7175,7182,7187,7192,7197,7202,7206,7211,7216,7222,7226,7229,7233,7239,7244,7249,7255,7260,7265,7270,7282,7286,7291,7312,7317,7320,7324,7327,7332,7335,7382,7386,7393,7399,7404,7410,7415,7421,7426,7432,7435,7440,7446,7451,7457,7461,7467,7472,7477,7481,7485,7488,7492,7495,7502,7506,7513,7517,7528,7531,7535,7539,7549,7558,7563,7570,7575,7582,7586,7589,7753,7759,7763,7766,7771,7774,7780,7784,7791,7795,7798,7803,7810,7815,7819,7829,7900,7916,7919,7924,7928,7932,7942,8018,8028,8031,8035,8039,8042,8046,8049,8052,8061,8063,8086],[430,6269,6270],{},"La parte más tediosa de planificar un viaje es que los PDFs de las reservas de vuelos, las confirmaciones de hoteles, las conversaciones con los compañeros de viaje y las listas de lugares para visitar suelen estar dispersos por todas partes. Y cuando llega el momento de calcular el gasto total y dividir las cuentas, se requiere un esfuerzo enorme para revisar todo ese historial de datos.",[430,6272,6273],{},"TREK es un planificador de viajes de código abierto que puedes autohospedar, reuniendo tu itinerario, reservas, presupuesto y listas de equipaje en un solo lugar. Su servidor MCP integrado permite que los agentes de IA (como Claude Desktop) gestionen directamente los datos de tus viajes.",[430,6275,6276],{},"Esta guía te acompañará paso a paso, desde el despliegue hasta la gestión completa de un viaje real de principio a fin.",[879,6278,6280],{"id":6279},"_1-cómo-desplegar-el-planificador-de-viajes-trek-usando-docker","1. Cómo desplegar el planificador de viajes TREK usando Docker",[2158,6282,6284],{"id":6283},"instalar-docker-en-un-vps-ubuntu","Instalar Docker en un VPS Ubuntu",[923,6286,6288],{"className":1032,"code":6287,"language":1034,"meta":425,"style":425},"# Add Docker's official GPG key and set up the Docker repository\ncurl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg\n\n# Add the official Docker repository\necho \"deb [arch=amd64 signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu $(lsb_release -cs) stable\" | sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list > \u002Fdev\u002Fnull\n\n# Update package list\nsudo apt update\n\n# Install Docker Engine, Docker Community Edition, and containerd runtime\nsudo apt install docker-ce docker-ce-cli containerd.io -y\n\n# Verify docker is installed\ndocker --version\n\n# Starts automatically when your system boots\nsudo systemctl enable docker\n",[495,6289,6290,6294,6314,6318,6322,6354,6358,6362,6370,6374,6378,6394,6398,6402,6408,6412,6417],{"__ignoreMap":425},[931,6291,6292],{"class":933,"line":934},[931,6293,4380],{"class":1071},[931,6295,6296,6298,6300,6302,6304,6306,6308,6310,6312],{"class":933,"line":1061},[931,6297,2989],{"class":1041},[931,6299,4387],{"class":1045},[931,6301,4390],{"class":1045},[931,6303,4393],{"class":945},[931,6305,4396],{"class":1041},[931,6307,4399],{"class":1045},[931,6309,4402],{"class":1045},[931,6311,4405],{"class":1045},[931,6313,4408],{"class":1045},[931,6315,6316],{"class":933,"line":1068},[931,6317,1065],{"emptyLinePlaceholder":1064},[931,6319,6320],{"class":933,"line":1075},[931,6321,4417],{"class":1071},[931,6323,6324,6326,6328,6330,6332,6334,6336,6338,6340,6342,6344,6346,6348,6350,6352],{"class":933,"line":1923},[931,6325,4422],{"class":962},[931,6327,3285],{"class":945},[931,6329,4427],{"class":1045},[931,6331,4430],{"class":945},[931,6333,4433],{"class":1041},[931,6335,4436],{"class":1045},[931,6337,4439],{"class":945},[931,6339,4442],{"class":1045},[931,6341,3694],{"class":945},[931,6343,4393],{"class":945},[931,6345,4396],{"class":1041},[931,6347,3817],{"class":1045},[931,6349,4453],{"class":1045},[931,6351,4456],{"class":945},[931,6353,4459],{"class":1045},[931,6355,6356],{"class":933,"line":1928},[931,6357,1065],{"emptyLinePlaceholder":1064},[931,6359,6360],{"class":933,"line":1934},[931,6361,4468],{"class":1071},[931,6363,6364,6366,6368],{"class":933,"line":2270},[931,6365,1891],{"class":1041},[931,6367,4475],{"class":1045},[931,6369,4478],{"class":1045},[931,6371,6372],{"class":933,"line":2281},[931,6373,1065],{"emptyLinePlaceholder":1064},[931,6375,6376],{"class":933,"line":2377},[931,6377,4487],{"class":1071},[931,6379,6380,6382,6384,6386,6388,6390,6392],{"class":933,"line":1695},[931,6381,1891],{"class":1041},[931,6383,4475],{"class":1045},[931,6385,4496],{"class":1045},[931,6387,4499],{"class":1045},[931,6389,4502],{"class":1045},[931,6391,4505],{"class":1045},[931,6393,4508],{"class":1045},[931,6395,6396],{"class":933,"line":2388},[931,6397,1065],{"emptyLinePlaceholder":1064},[931,6399,6400],{"class":933,"line":2393},[931,6401,4537],{"class":1071},[931,6403,6404,6406],{"class":933,"line":2399},[931,6405,1176],{"class":1041},[931,6407,3617],{"class":1045},[931,6409,6410],{"class":933,"line":3354},[931,6411,1065],{"emptyLinePlaceholder":1064},[931,6413,6414],{"class":933,"line":3365},[931,6415,6416],{"class":1071},"# Starts automatically when your system boots\n",[931,6418,6419,6421,6423,6425],{"class":933,"line":3370},[931,6420,1891],{"class":1041},[931,6422,1894],{"class":1045},[931,6424,2022],{"class":1045},[931,6426,4528],{"class":1045},[2158,6428,6430],{"id":6429},"generar-la-clave-de-cifrado","Generar la clave de cifrado",[430,6432,6433,6434,6436],{},"TREK utiliza una clave para cifrar datos confidenciales. Usa el siguiente comando o esta ",[444,6435,4670],{"href":2865}," para generar tu clave de cifrado:",[923,6438,6440],{"className":1032,"code":6439,"language":1034,"meta":425,"style":425},"openssl rand -hex 32\n",[495,6441,6442],{"__ignoreMap":425},[931,6443,6444,6447,6450,6453],{"class":933,"line":934},[931,6445,6446],{"class":1041},"openssl",[931,6448,6449],{"class":1045}," rand",[931,6451,6452],{"class":1045}," -hex",[931,6454,6455],{"class":2958}," 32\n",[430,6457,6458],{},"Guárdala en un lugar seguro; si la pierdes, no podrás acceder a los datos cifrados.",[2158,6460,6462],{"id":6461},"iniciar-el-contenedor","Iniciar el contenedor",[923,6464,6466],{"className":1032,"code":6465,"language":1034,"meta":425,"style":425},"docker run -d \\\n  --name trek \\\n  -p 3000:3000 \\\n  -e ENCRYPTION_KEY=\"\u003Cgenerated_key>\" \\\n  -e APP_URL=\"https:\u002F\u002Ftrek.pafor.me\" \\\n  -v .\u002Fdata:\u002Fapp\u002Fdata \\\n  -v .\u002Fuploads:\u002Fapp\u002Fuploads \\\n  --restart unless-stopped \\\n  mauriceboe\u002Ftrek:latest\n",[495,6467,6468,6480,6490,6500,6517,6533,6543,6552,6562],{"__ignoreMap":425},[931,6469,6470,6472,6474,6477],{"class":933,"line":934},[931,6471,1176],{"class":1041},[931,6473,5500],{"class":1045},[931,6475,6476],{"class":1045}," -d",[931,6478,6479],{"class":941}," \\\n",[931,6481,6482,6485,6488],{"class":933,"line":1061},[931,6483,6484],{"class":1045},"  --name",[931,6486,6487],{"class":1045}," trek",[931,6489,6479],{"class":941},[931,6491,6492,6495,6498],{"class":933,"line":1068},[931,6493,6494],{"class":1045},"  -p",[931,6496,6497],{"class":1045}," 3000:3000",[931,6499,6479],{"class":941},[931,6501,6502,6505,6508,6510,6513,6515],{"class":933,"line":1075},[931,6503,6504],{"class":1045},"  -e",[931,6506,6507],{"class":1045}," ENCRYPTION_KEY=",[931,6509,3694],{"class":945},[931,6511,6512],{"class":1045},"\u003Cgenerated_key>",[931,6514,3694],{"class":945},[931,6516,6479],{"class":941},[931,6518,6519,6521,6524,6526,6529,6531],{"class":933,"line":1923},[931,6520,6504],{"class":1045},[931,6522,6523],{"class":1045}," APP_URL=",[931,6525,3694],{"class":945},[931,6527,6528],{"class":1045},"https:\u002F\u002Ftrek.pafor.me",[931,6530,3694],{"class":945},[931,6532,6479],{"class":941},[931,6534,6535,6538,6541],{"class":933,"line":1928},[931,6536,6537],{"class":1045},"  -v",[931,6539,6540],{"class":1045}," .\u002Fdata:\u002Fapp\u002Fdata",[931,6542,6479],{"class":941},[931,6544,6545,6547,6550],{"class":933,"line":1934},[931,6546,6537],{"class":1045},[931,6548,6549],{"class":1045}," .\u002Fuploads:\u002Fapp\u002Fuploads",[931,6551,6479],{"class":941},[931,6553,6554,6557,6560],{"class":933,"line":2270},[931,6555,6556],{"class":1045},"  --restart",[931,6558,6559],{"class":1045}," unless-stopped",[931,6561,6479],{"class":941},[931,6563,6564],{"class":933,"line":2281},[931,6565,6566],{"class":1045},"  mauriceboe\u002Ftrek:latest\n",[485,6568,6569],{},[488,6570,6571,6577],{},[441,6572,6573,6576],{},[495,6574,6575],{},"APP_URL"," debe estar configurado correctamente"," — el flujo de descubrimiento OAuth del servidor MCP depende de ello. Establécelo con tu dirección HTTPS pública definitiva desde el principio.",[430,6579,6580],{},"La primera ejecución tardará un poco mientras descarga la imagen:",[433,6582],{"src":6583,"alt":6584,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-docker-pull-image.webp","Logs de docker pull y run para TREK","max-width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,6587,6588],{},"Verifica que esté funcionando:",[923,6590,6592],{"className":1032,"code":6591,"language":1034,"meta":425,"style":425},"docker ps\n",[495,6593,6594],{"__ignoreMap":425},[931,6595,6596,6598],{"class":933,"line":934},[931,6597,1176],{"class":1041},[931,6599,5162],{"class":1045},[433,6601],{"src":6602,"alt":6603,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-docker-ps-status.webp","Verificación del estado del contenedor en ejecución mediante docker ps",[879,6605,6607],{"id":6606},"_2-configuración-de-enrutamiento-de-dominio-y-ssl-con-caddy-reverse-proxy","2. Configuración de enrutamiento de dominio y SSL con Caddy Reverse Proxy",[430,6609,6610],{},"Se requiere HTTPS para las llaves de acceso (passkeys) y OAuth para MCP. El nombre de dominio se aloja en Cloudflare, que incluye un certificado SSL gratuito y protección contra DDoS.",[430,6612,6613],{},"Caddy se configura como el servidor proxy inverso seguro apuntando al puerto 3000. Un ejemplo de Caddyfile es el siguiente:",[923,6615,6617],{"className":2904,"code":6616,"language":2906,"meta":425,"style":425},"{$TREK_DOMAIN} {\n  encode zstd gzip\n  reverse_proxy host.docker.internal:3000\n}\n",[495,6618,6619,6630,6634,6643],{"__ignoreMap":425},[931,6620,6621,6623,6626,6628],{"class":933,"line":934},[931,6622,2934],{"class":945},[931,6624,6625],{"class":941},"$TREK_DOMAIN",[931,6627,2940],{"class":945},[931,6629,2943],{"class":945},[931,6631,6632],{"class":933,"line":1061},[931,6633,2948],{"class":941},[931,6635,6636,6638,6640],{"class":933,"line":1068},[931,6637,2953],{"class":941},[931,6639,889],{"class":945},[931,6641,6642],{"class":2958},"3000\n",[931,6644,6645],{"class":933,"line":1075},[931,6646,2921],{"class":945},[879,6648,6650],{"id":6649},"_3-configuración-inicial-y-creación-del-administrador-seguro","3. Configuración inicial y creación del administrador seguro",[430,6652,6653],{},"Hay dos formas de crear la cuenta de administrador:",[485,6655,6656,6667],{},[488,6657,6658,6666],{},[441,6659,6660,575,6663],{},[495,6661,6662],{},"ADMIN_EMAIL",[495,6664,6665],{},"ADMIN_PASSWORD"," se configuran como variables de entorno; estos valores se usarán directamente.",[488,6668,6669],{},[441,6670,6671,6672,6675,6676,6679,6680,6683,6684,6687],{},"TREK crea el correo ",[495,6673,6674],{},"admin@trek.local",", el usuario ",[495,6677,6678],{},"admin"," y una ",[495,6681,6682],{},"contraseña generada aleatoriamente que se imprime en los registros del contenedor",". Ejecuta ",[495,6685,6686],{},"docker logs trek"," para obtenerla.",[430,6689,6690],{},"Si no puedes encontrar la contraseña en los registros, puedes restablecerla con:",[923,6692,6694],{"className":1032,"code":6693,"language":1034,"meta":425,"style":425},"docker exec -it -e RESET_ADMIN_EMAIL=admin@trek.local -e RESET_ADMIN_PASSWORD='YourNewPassword' trek node server\u002Freset-admin.js\n",[495,6695,6696],{"__ignoreMap":425},[931,6697,6698,6700,6702,6705,6708,6711,6713,6716,6718,6721,6723,6725,6728],{"class":933,"line":934},[931,6699,1176],{"class":1041},[931,6701,1182],{"class":1045},[931,6703,6704],{"class":1045}," -it",[931,6706,6707],{"class":1045}," -e",[931,6709,6710],{"class":1045}," RESET_ADMIN_EMAIL=admin@trek.local",[931,6712,6707],{"class":1045},[931,6714,6715],{"class":1045}," RESET_ADMIN_PASSWORD=",[931,6717,5461],{"class":945},[931,6719,6720],{"class":1045},"YourNewPassword",[931,6722,5461],{"class":945},[931,6724,6487],{"class":1045},[931,6726,6727],{"class":1045}," node",[931,6729,6730],{"class":1045}," server\u002Freset-admin.js\n",[430,6732,6733],{},"Se te pedirá que cambies la contraseña la primera vez que inicies sesión.",[433,6735],{"src":6736,"alt":6737,"style":6738},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-initial-login-password-prompt.webp","Solicitud de inicio de sesión inicial y restablecimiento de contraseña de administrador","max-width: 215px; width:100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,6740,4262,6741,6744,6745],{},[441,6742,6743],{},"Admin"," y actualiza el correo electrónico:",[433,6746],{"src":6747,"alt":6748,"style":6749},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-admin-email-update-panel.webp","Configuración de correo electrónico personalizado en los ajustes de administración de TREK","max-width: 700px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[2158,6751,6753],{"id":6752},"_31-copias-de-seguridad-backups","3.1 Copias de seguridad (Backups)",[430,6755,6756,6757],{},"Configura las copias de seguridad automáticas con una política de retención en el panel de administración:\n",[433,6758],{"src":6759,"alt":6760,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-admin-backup-retention-policy.webp","Configuración de programaciones de respaldo automatizadas y reglas de retención",[2158,6762,6764],{"id":6763},"_32-almacenar-archivos-subidos-en-cloudflare-r2","3.2 Almacenar archivos subidos en Cloudflare R2",[430,6766,6767],{},"Almacenar archivos subidos, fotos y copias de seguridad en Cloudflare R2 mantiene el disco del VPS limpio y ligero. TREK admite backends compatibles con S3, y Cloudflare R2 se adapta a esto a la perfección.",[533,6769,6770,6776,6789,6799,6810,6824,6835,6850],{},[488,6771,6772,6773,461],{},"Crea un cubo (bucket) R2 llamado ",[495,6774,6775],{},"trek",[488,6777,6778,6779,6782,6783,6784],{},"En la sección ",[441,6780,6781],{},"Account Details",", busca tu ID de cuenta:","\n  ",[433,6785],{"src":6786,"alt":6787,"style":6788},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fcloudflare-r2-account-details-id.webp","Localización del ID de cuenta de Cloudflare en el portal","max-width: 325px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[488,6790,4262,6791,889,6783,6794],{},[441,6792,6793],{},"Manage API Tokens",[433,6795],{"src":6796,"alt":6797,"style":6798},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fcloudflare-r2-manage-api-tokens-button.webp","Pantalla de administración de tokens de API en el portal de Cloudflare","max-width: 282px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[488,6800,4262,6801,6804,6783,6805],{},[441,6802,6803],{},"Create Account API token"," con permisos de lectura\u002Fescrita para el bucket:",[433,6806],{"src":6807,"alt":6808,"style":6809},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fcloudflare-r2-create-token-permissions.webp","Creación de un token de acceso R2 con permisos de lectura y escritura","max-width: 360px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[488,6811,4262,6812,6815,6816,889,6783,6819],{},[441,6813,6814],{},"Storage"," en el panel de ",[441,6817,6818],{},"ADMINISTRATION",[433,6820],{"src":6821,"alt":6822,"style":6823},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-administration-storage-menu.webp","Navegación a los ajustes de almacenamiento en el panel de control de TREK","max-width: 539px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[488,6825,4255,6826,6829,6783,6830],{},[441,6827,6828],{},"Add Backend"," y rellena el endpoint, el bucket y las credenciales:",[433,6831],{"src":6832,"alt":6833,"style":6834},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-add-storage-backend-credentials.webp","Configuración del backend de almacenamiento Cloudflare R2 compatible con S3","max-width: 445px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[488,6836,4262,6837,6840,6841,6844,6783,6845],{},[441,6838,6839],{},"Apply",", y luego en el botón ",[441,6842,6843],{},"Test",". Deberías ver \"Connection OK\":",[433,6846],{"src":6847,"alt":6848,"style":6849},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-test-storage-backend-connection-ok.webp","Prueba de conexión de almacenamiento exitosa que muestra Connection OK","max-width: 677px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[488,6851,6852,6853,889,6783,6856],{},"Cambia todas las categorías de almacenamiento a Cloudflare R2 y haz clic en ",[441,6854,6855],{},"Save changes",[433,6857],{"src":6858,"alt":6859,"style":6860},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-switch-storage-categories-r2.webp","Enrutamiento de todas las categorías de almacenamiento de archivos a Cloudflare R2","max-width: 653px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[2158,6862,6864],{"id":6863},"_33-inicio-de-sesión-con-llaves-de-acceso-passkeys","3.3 Inicio de sesión con llaves de acceso (Passkeys)",[430,6866,6867,6868,889],{},"TREK admite llaves de acceso, autenticación de dos factores (2FA) y SSO mediante OIDC. Para las llaves de acceso, introduce tu nombre de dominio y los orígenes permitidos en la configuración, y luego haz clic en ",[441,6869,1139],{},[433,6871],{"src":6872,"alt":6873,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-passkey-allowed-origins-settings.webp","Registro de orígenes permitidos para la autenticación segura mediante llave de acceso",[430,6875,6876,6877,6880],{},"Si no configuras los ",[441,6878,6879],{},"allowed origins",", el registro de las llaves de acceso fallará.",[2158,6882,6884],{"id":6883},"_34-clave-de-api-de-google-maps","3.4 Clave de API de Google Maps",[430,6886,6887],{},"Una clave de Google Maps enriquece la búsqueda de lugares con calificaciones, horarios de apertura y fotos. Si no tienes una, TREK usará OpenStreetMap automáticamente sin coste alguno, aunque no mostrará calificaciones ni fotos.",[430,6889,6890,6891,6896,6897,6900,6901],{},"Sigue este ",[444,6892,6895],{"href":6893,"rel":6894},"https:\u002F\u002Fmapsplatform.google.com\u002Fmaps-demo-key\u002F",[448],"enlace"," y haz clic en ",[441,6898,6899],{},"Get demo key"," para solicitar una:                                                  ",[433,6902],{"src":6903,"alt":6904,"style":6905},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fgoogle-maps-get-demo-api-key.webp","Solicitud de clave de API de Google Maps Platform","max-width: 176px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,6907,6908,6909,6911,6912],{},"Pega la clave en la configuración y haz clic en ",[441,6910,6843],{}," para confirmar la conexión:\n",[433,6913],{"src":6914,"alt":6915,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-google-maps-key-test-connection.webp","Verificación de la conectividad de la clave de API de Google Maps en los ajustes",[2158,6917,6919],{"id":6918},"_35-integración-de-ia","3.5 Integración de IA",[430,6921,6922],{},"El modelo de IA se utiliza para analizar correos de confirmación y PDFs de reservas, transformándolos en reservas estructuradas.",[430,6924,4262,6925,6928,6929,6932],{},[441,6926,6927],{},"Addons"," en el menú de la izquierda y activa ",[441,6930,6931],{},"AI Parsing",". Selecciona \"OpenAI\" (u otro proveedor compatible) y rellena los datos correspondientes:",[433,6934],{"src":6935,"alt":6936,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-addons-enable-ai-parsing-openai.webp","Habilitación del complemento de análisis de IA con integración de OpenAI",[2158,6938,6940],{"id":6939},"_36-acceso-mcp","3.6 Acceso MCP",[430,6942,6778,6943,6945,6946,889],{},[441,6944,6927],{},", activa ",[441,6947,6948],{},"MCP",[433,6950],{"src":6951,"alt":6952,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-addons-enable-mcp.webp","Activación del complemento de servidor MCP de Model Context Protocol",[2158,6954,6956],{"id":6955},"_37-plugins","3.7 Plugins",[430,6958,6959],{},"Se recomienda activar los siguientes plugins:",[433,6961],{"src":6962,"alt":6963,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-recommended-addons-plugins-activation.webp","Lista de complementos y extensiones recomendados activos",[2158,6965,6967],{"id":6966},"_38-crear-tu-usuario-de-uso-diario","3.8 Crear tu usuario de uso diario",[430,6969,6970],{},"Planifica tus viajes como un usuario estándar, no como administrador. Crea un usuario normal e inicia sesión con él:",[433,6972],{"src":6973,"alt":6974,"style":6975},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-create-regular-user-form.webp","Creación de una cuenta de usuario normal en el panel de TREK","max-width: 420px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,6977,6978],{},"Una vez dentro, añade una llave de acceso o configura 2FA para proteger tu cuenta:",[433,6980],{"src":6981,"alt":6982,"style":6983},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-user-security-passkey-2fa-setup.webp","Configuración de los ajustes de seguridad del usuario con llaves de acceso y 2FA","max-width: 381px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,6985,4262,6986,6989],{},[441,6987,6988],{},"+ Add a passkey",", escribe tu contraseña actual y confirma:",[433,6991],{"src":6992,"alt":6993,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-add-passkey-confirm-password.webp","Confirmación de la contraseña para registrar una nueva llave de acceso de hardware",[879,6995,6997],{"id":6996},"_4-probar-el-despliegue-importar-datos-de-viajes-pasados","4. Probar el despliegue: importar datos de viajes pasados",[430,6999,7000],{},"Una excelente forma de familiarizarse con TREK es registrar tu historial de viajes.",[2158,7002,7004],{"id":7003},"_41-crear-el-viaje","4.1 Crear el viaje",[430,7006,4262,7007,7010,7011,7014,7015,7018],{},[441,7008,7009],{},"+ New Trip"," y define la fecha de inicio (",[441,7012,7013],{},"Start Date",") y finalización (",[441,7016,7017],{},"End Date",") con las fechas pasadas de tu viaje:",[433,7020],{"src":7021,"alt":7022,"style":7023},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-create-new-trip-details.webp","Creación de un nuevo viaje con rangos de fechas personalizados","max-width: 334px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7025,7026,7027,889],{},"Añade una foto de portada (arrastrándola o pegándola desde el portapapeles) y haz clic en ",[441,7028,7029],{},"Create New Trip",[433,7031],{"src":7032,"alt":7033,"style":7034},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-cover-image-upload.webp","Configuración de una imagen de portada de viaje de alta calidad","max-width: 608px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[2158,7036,7038],{"id":7037},"_42-importar-las-reservas","4.2 Importar las reservas",[430,7040,7041],{},"Arrastra y suelta todos los archivos de tus vuelos, trenes y transportes:",[433,7043],{"src":7044,"alt":7045,"style":7046},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-import-travel-booking-files.webp","Área de arrastrar y soltar para importar PDF de viajes y reservas","max-width: 570px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[433,7048],{"src":7049,"alt":7050,"style":7051},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-import-booking-pdf-processing-status.webp","Ventana de procesamiento de la reserva cargada que muestra la extracción","max-width: 377px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7053,7054],{},"Con el modelo de IA activado, los PDFs de confirmación de reserva se analizan y extraen de forma estructurada.",[430,7056,7057,7058,7061],{},"Revisa el resultado del análisis y haz clic en ",[441,7059,7060],{},"Add"," para registrar los detalles de la reserva:",[433,7063],{"src":7064,"alt":7065,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-review-parsed-booking-details.webp","Revisión de los detalles de reserva estructurados extraídos por la IA",[430,7067,7068],{},"Si la reserva solo está en un correo electrónico, expórtalo como PDF y súbelo; se aplicará el mismo proceso de extracción automática.",[430,7070,7071],{},"Las siguientes capturas de pantalla muestran cómo se presentan las reservas:",[430,7073,7074,7078],{},[433,7075],{"src":7076,"alt":7077,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-bookings-timeline-view.webp","Visualización completa de la línea de tiempo de las reservas de viaje",[433,7079],{"src":7080,"alt":7081,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-booking-confirmation-details.webp","Vista detallada de una reserva de transporte confirmada",[430,7083,7084,7085,7088],{},"En la página ",[441,7086,7087],{},"Plan",", todos los alojamientos se mostrarán en el mapa:",[433,7090],{"src":7091,"alt":7092,"style":7093},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-plan-accommodations-map-display.webp","Mapa interactivo que representa todos los alojamientos hoteleros","max-width: 546px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7095,4262,7096,7099],{},[441,7097,7098],{},"Atlas"," en la barra de menú superior para ver la lista y el mapa de todos los países que has visitado:",[433,7101],{"src":7102,"alt":7103,"style":7104},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-atlas-countries-visited-summary.webp","Resumen del historial de viajes en el rastreador personal del Atlas","max-width: 407px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[2158,7106,7108],{"id":7107},"_43-añadir-compañeros-de-viaje","4.3 Añadir compañeros de viaje",[430,7110,4255,7111,889],{},[441,7112,7113],{},"Share",[433,7115],{"src":7116,"alt":7117,"style":7118},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-share-options-button.webp","Apertura del diálogo para compartir viajes en TREK","max-width: 224px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7120,7121],{},"En la parte inferior de la ventana, puedes añadir invitados:",[433,7123],{"src":7124,"alt":7125,"style":7126},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-add-companions-guests.webp","Adición de acompañantes de viaje y huéspedes personalizados","max-width: 635px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[2158,7128,7130],{"id":7129},"_44-registrar-los-gastos","4.4 Registrar los gastos",[430,7132,4262,7133,7136],{},[441,7134,7135],{},"Add expense"," para añadir gastos distintos a las reservas, como seguro médico, transporte local o tarjetas SIM:",[433,7138],{"src":7139,"alt":7140,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-add-custom-expense-form.webp","Introducción de datos de gastos detallados en el formulario de gastos",[433,7142],{"src":7143,"alt":7144,"style":7145},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-expenses-list-billing-split.webp","Desglose de factura dividida y libro de seguimiento de costes","max-width: 526px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[2158,7147,7149],{"id":7148},"_45-segmentos-del-viaje","4.5 Segmentos del viaje",[430,7151,7152],{},"Esta función requiere que el plugin Trip Segment esté instalado.",[430,7154,7155],{},"Los viajes largos se dividen de forma ordenada en segmentos, mostrando para cada etapa sus propias reservas, lugares y gastos:",[433,7157],{"src":7158,"alt":7159,"style":7160},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-segments-overview-display.webp","Desglose de un itinerario complejo en segmentos de viaje","max-width: 465px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[433,7162],{"src":7163,"alt":7164,"style":7165},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-segment-itinerary-details.webp","Segmento de viaje activo que muestra lugares y horarios","max-width: 596px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[433,7167],{"src":7168,"alt":7169,"style":7170},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-segments-interactive-map.webp","Mapeo de distintos trayectos de viaje en la línea de tiempo","max-width: 605px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[2158,7172,7174],{"id":7173},"_46-crear-un-diario-de-viaje-journey-y-consultar-tu-atlas","4.6 Crear un diario de viaje (Journey) y consultar tu atlas",[430,7176,7177,7178,7181],{},"Agrupa varios viajes en un ",[441,7179,7180],{},"Journey"," (diario de ruta) y redacta relatos para compartir la aventura con tus amigos:",[433,7183],{"src":7184,"alt":7185,"style":7186},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-create-new-journey-group.webp","Consolidación de múltiples viajes en un viaje visual (Journey)","max-width: 441px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[433,7188],{"src":7189,"alt":7190,"style":7191},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-journey-timeline-story-writing.webp","Redacción de historias visuales en el panel de viajes (Journey)","max-width: 443px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[433,7193],{"src":7194,"alt":7195,"style":7196},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-journey-gallery-media-grid.webp","Colección de medios y cuadrícula de galería dentro de un viaje (Journey)","max-width: 440px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[433,7198],{"src":7199,"alt":7200,"style":7201},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-journey-public-share-link.webp","Generación de enlaces públicos para compartir viajes colaborativos","max-width: 532px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[879,7203,7205],{"id":7204},"_5-diseñar-itinerarios-personalizados-y-listas-de-equipaje","5. Diseñar itinerarios personalizados y listas de equipaje",[430,7207,4262,7208,7210],{},[441,7209,7009],{},", introduce un nombre y define las fechas:",[433,7212],{"src":7213,"alt":7214,"style":7215},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-planning-new-trip-setup.webp","Diálogo de solicitud inicial para crear un viaje sin fecha","max-width: 432px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7217,7218,7221],{},[441,7219,7220],{},"Si aún no tienes las fechas confirmadas, déjalas vacías."," Aparecerá un campo de \"número de días\" (hasta 365). Planifica primero, programa las fechas después.",[2158,7223,7225],{"id":7224},"_51-añadir-lugares","5.1 Añadir lugares",[430,7227,7228],{},"Este suele ser el paso que más tiempo toma al planificar, y TREK ofrece varias formas de agilizarlo:",[433,7230],{"src":7231,"alt":7232,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-add-places-methods-overview.webp","Métodos multicanal para agregar nuevos lugares a los itinerarios",[430,7234,7235,7238],{},[441,7236,7237],{},"1. Clic derecho en el mapa"," para crear un lugar en esa ubicación exacta (la dirección se geocodifica a la inversa de forma automática):",[433,7240],{"src":7241,"alt":7242,"style":7243},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-right-click-map-location.webp","Hacer clic derecho en el mapa para ubicar ubicaciones","max-width: 632px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[433,7245],{"src":7246,"alt":7247,"style":7248},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-right-click-reverse-geocode-address.webp","Geocodificación inversa automática de las coordenadas del mapa seleccionadas","max-width: 628px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7250,7251,7254],{},[441,7252,7253],{},"2. Haz clic en + Add Place\u002FActivity"," y busca por nombre:",[433,7256],{"src":7257,"alt":7258,"style":7259},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-search-place-by-name-input.webp","Búsqueda de lugares del mundo real mediante entradas de texto","max-width: 642px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[433,7261],{"src":7262,"alt":7263,"style":7264},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-select-place-search-results-list.webp","Visualización de resultados de búsqueda de lugares con capas de dirección","max-width: 594px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[433,7266],{"src":7267,"alt":7268,"style":7269},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-place-details-rich-info-card.webp","Tarjeta de información del lugar completa con reseñas y calificaciones","max-width: 568px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7271,7272,860,7275,1518,7278,7281],{},[441,7273,7274],{},"3. Pega una URL de Google Maps",[495,7276,7277],{},"maps.app.goo.gl\u002F…",[495,7279,7280],{},"maps.google.com\u002F…",") en el campo de búsqueda. TREK extraerá automáticamente el nombre, la dirección y las coordenadas:",[433,7283],{"src":7284,"alt":7285,"style":6849},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-paste-google-maps-share-link.webp","Análisis de ubicaciones directamente desde enlaces para compartir de Google Maps pegados",[433,7287],{"src":7288,"alt":7289,"style":7290},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-google-maps-parsed-location.webp","Extracción exitosa de coordenadas de la URL de mapas","max-width: 543px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7292,7293,7296,7297,7300,7301,575,7304,7307,7308,7311],{},[441,7294,7295],{},"4. Importación masiva"," — la opción más sencilla de todas. Si ya tienes una lista de lugares pendientes en Google Maps, expórtala como ",[495,7298,7299],{},".gpx"," (también sirven ",[495,7302,7303],{},".kml",[495,7305,7306],{},".kmz",") y haz clic en ",[441,7309,7310],{},"Import file"," en el panel derecho para importarlo todo de golpe:",[433,7313],{"src":7314,"alt":7315,"style":7316},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-bulk-import-places-gpx-file.webp","Realización de importaciones masivas de lugares utilizando archivos GPX o KML","max-width: 389px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7318,7319],{},"Añade primero todos los lugares interesantes, sin preocuparte de si encajan en tu calendario. Ya los asignarás a días específicos más adelante.",[2158,7321,7323],{"id":7322},"_52-planes-diarios-y-notas","5.2 Planes diarios y notas",[430,7325,7326],{},"El plan diario organiza los lugares por días en orden secuencial. Es una lista desplegable para cada día y todo funciona arrastrando y soltando:",[433,7328],{"src":7329,"alt":7330,"style":7331},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-day-plan-drag-drop-ordering.webp","Personalización de rutas diarias con acciones de arrastrar y soltar","max-width: 496px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7333,7334],{},"Los detalles que marcan la diferencia:",[485,7336,7337,7347,7357,7367],{},[488,7338,7339,7342,7343],{},[441,7340,7341],{},"Transporte entre paradas",": el icono de autobús en la esquina superior izquierda de un día permite añadir transportes intermedios (trenes, autobuses o vuelos en el mismo día):\n",[433,7344],{"src":7345,"alt":7346,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-day-plan-commuting-transport-button.webp","Registro de transporte de enlace entre segmentos del día",[488,7348,7349,7352,7353],{},[441,7350,7351],{},"Notas del día",": el icono de notas en la esquina inferior izquierda añade comentarios etiquetados con un icono, como \"madrugar hoy\" o \"este museo requiere reserva previa\":\n",[433,7354],{"src":7355,"alt":7356,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-day-plan-icon-tagged-notes-button.webp","Adición de notas personalizadas marcadas con iconos y muy visibles a los días",[488,7358,7359,7362,7363],{},[441,7360,7361],{},"Horarios asignados",": arrastra un lugar del panel derecho a un día y asígnale una hora. Los lugares con hora fija se conectan automáticamente en el mapa:\n",[433,7364],{"src":7365,"alt":7366,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-day-plan-timed-places-routing.webp","Rutas de tránsito calculadas automáticamente entre ubicaciones programadas",[488,7368,7369,7370,7375,7376,3407,7379,461],{},"Consulta la ",[444,7371,7374],{"href":7372,"rel":7373},"https:\u002F\u002Fgithub.com\u002Fliketrek\u002FTREK\u002Fwiki\u002FDay-Plans-and-Notes",[448],"página wiki de Planes Diarios y Notas"," para saber más sobre ",[441,7377,7378],{},"Optimización de rutas",[441,7380,7381],{},"Clima",[2158,7383,7385],{"id":7384},"_53-colecciones-listas-de-lugares-reutilizables","5.3 Colecciones: listas de lugares reutilizables",[430,7387,7388,7389,7392],{},"Las Colecciones permiten guardar listas de lugares de forma independiente a cualquier viaje. Se pueden compartir con amigos y tener listas para la próxima aventura. Los lugares se ",[441,7390,7391],{},"copian"," al añadirse a un viaje, por lo que editar un punto en un viaje no alterará tu colección ni viceversa.",[430,7394,4262,7395,7398],{},[441,7396,7397],{},"Collections"," en la barra de menú superior:",[433,7400],{"src":7401,"alt":7402,"style":7403},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-dashboard-view.webp","Acceso a las colecciones de usuario personalizadas de lugares guardados","max-width: 495px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7405,4262,7406,7409],{},[441,7407,7408],{},"+ New list"," para crear una nueva:",[433,7411],{"src":7412,"alt":7413,"style":7414},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-create-new-list.webp","Creación de listas personalizadas en las colecciones del usuario","max-width: 269px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7416,4262,7417,7420],{},[441,7418,7419],{},"+ Add a place"," y rellena los datos:",[433,7422],{"src":7423,"alt":7424,"style":7425},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-add-place-manually-form.webp","Entrada de formulario manual para completar las listas de colección","max-width: 271px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7427,7428,7431],{},[441,7429,7430],{},"Nota:"," el buscador del diálogo \"Add a place\" parece no funcionar, por lo que deberás introducir los detalles de forma manual.",[430,7433,7434],{},"Si las coordenadas geográficas de los lugares están disponibles, aparecerán en el mapa:",[433,7436],{"src":7437,"alt":7438,"style":7439},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-map-places-display.webp","Visualización de lugares de colecciones personalizadas en un mapa interactivo","max-width: 592px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7441,7442,7443,889],{},"Para organizar los lugares mediante etiquetas, haz clic en el icono de la ",[441,7444,7445],{},"casilla de verificación",[433,7447],{"src":7448,"alt":7449,"style":7450},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-select-places-tickbox.webp","Modo de selección para el etiquetado masivo de lugares guardados","max-width: 662px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7452,7453,7454,889],{},"Selecciona los lugares que quieres agrupar y haz clic en ",[441,7455,7456],{},"Assign label",[433,7458],{"src":7459,"alt":7460,"style":7290},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-group-assign-label.webp","Asignación de etiquetas descriptivas a los lugares de la colección seleccionados",[430,7462,4262,7463,7466],{},[441,7464,7465],{},"Manage labels"," para crear las etiquetas de antemano:",[433,7468],{"src":7469,"alt":7470,"style":7471},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-manage-custom-labels.webp","Creación y gestión de etiquetas personalizadas","max-width: 411px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7473,7474,7475,889],{},"Selecciona una etiqueta y haz clic en ",[441,7476,7456],{},[433,7478],{"src":7479,"alt":7480,"style":7104},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-confirm-label-selection.webp","Aplicación de etiquetas personalizadas a lugares agrupados",[2158,7482,7484],{"id":7483},"_54-costes-y-presupuesto","5.4 Costes y presupuesto",[430,7486,7487],{},"Podemos registrar el resto de gastos del viaje en la pestaña 'Costs'.",[433,7489],{"src":7490,"alt":7491,"style":7331},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-costs-budget-overall-expenses-list.webp","Tabla de gastos completa y libro de liquidación de saldos",[430,7493,7494],{},"Los pagos realizados por tus compañeros de viaje se pueden añadir y dividir en esta misma página.",[430,7496,7497,7498,7501],{},"El panel de liquidación ejecuta un algoritmo voraz (greedy) para calcular el ",[441,7499,7500],{},"número mínimo de transferencias"," necesarias para saldar las cuentas entre los miembros.",[879,7503,7505],{"id":7504},"_6-aprovechar-model-context-protocol-mcp-para-planificar-viajes-con-ia","6. Aprovechar Model Context Protocol (MCP) para planificar viajes con IA",[430,7507,7508,7509,7512],{},"TREK dispone de un ",[441,7510,7511],{},"servidor MCP integrado",", lo que permite a agentes de IA leer y escribir directamente tus datos de viaje a través de más de 150 herramientas y 30 recursos que cubren itinerarios, lugares, presupuestos, equipaje, reservas y colaboración.",[2158,7514,7516],{"id":7515},"_61-cloudflare-zero-trust","6.1 Cloudflare Zero Trust",[430,7518,7519,7520,7522,7523,461],{},"Dado que TREK se ejecuta detrás de una red de ",[444,7521,1722],{"href":363},", tendrás que añadir el dominio a la lista de inclusión de Split Tunnels. De lo contrario, tendrás problemas con la autorización OAuth. Puedes consultar este problema de GitHub: ",[444,7524,7527],{"href":7525,"rel":7526},"https:\u002F\u002Fgithub.com\u002Fliketrek\u002FTREK\u002Fissues\u002F1463",[448],"issue de github",[463,7529],{"description":2604,"image":2605,"image-alt":2606,"label":2708,"min-read":7530,"title":1706,"to":363},"9",[433,7532],{"src":7533,"alt":7534,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fcloudflare-zero-trust-split-tunnels-domain.webp","Adición de dominios personalizados a Cloudflare Warp Split Tunnels",[2158,7536,7538],{"id":7537},"_62-claude-desktop","6.2 Claude Desktop",[430,7540,4262,7541,7544,7545],{},[441,7542,7543],{},"+ New Client"," para crear un nuevo cliente de agente de IA:\n",[433,7546],{"src":7547,"alt":7548,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-register-new-mcp-client.webp","Registro de un nuevo token de cliente personalizado en los ajustes",[430,7550,7551,7552,6896,7555,889],{},"Selecciona la pestaña ",[441,7553,7554],{},"Claude Desktop",[441,7556,7557],{},"Register Client",[433,7559],{"src":7560,"alt":7561,"style":7562},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-mcp-claude-desktop-client-credentials.webp","Generación de credenciales de cliente para Claude Desktop","max-width: 354px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7564,7565,7566,7569],{},"Se mostrará un par de ID de cliente y secreto de cliente. Cópialos en un lugar seguro. A continuación, haz clic en ",[441,7567,7568],{},"Client Configuration"," para ver la configuración de MCP:",[433,7571],{"src":7572,"alt":7573,"style":7574},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-mcp-client-configuration-block.webp","Recuperación del bloque de configuración formateado del servidor MCP","max-width: 508px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7576,7577,7578,7581],{},"En Claude Desktop, haz clic en ",[441,7579,7580],{},"Edit Config"," para abrir el archivo local de configuración de servidores MCP:",[433,7583],{"src":7584,"alt":7585,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fclaude-desktop-mcp-config-json.webp","Edición del archivo json de configuración local de MCP de Claude Desktop",[430,7587,7588],{},"Pega la configuración de TREK, sustituyendo los marcadores por tus credenciales:",[923,7590,7592],{"className":2904,"code":7591,"language":2906,"meta":425,"style":425},"  \"mcpServers\": {\n    \"trek\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"mcp-remote\",\n        \"https:\u002F\u002Ftrek.pafor.me\u002Fmcp\",\n        \"--static-oauth-client-info\",\n        \"{\\\"client_id\\\": \\\"\u003Cyour_client_id>\\\", \\\"client_secret\\\": \\\"\u003Cyour_client_secret>\\\"}\"\n      ]\n    }\n  },\n",[495,7593,7594,7608,7621,7643,7657,7669,7680,7691,7736,7741,7746],{"__ignoreMap":425},[931,7595,7596,7599,7602,7604,7606],{"class":933,"line":934},[931,7597,7598],{"class":945},"  \"",[931,7600,7601],{"class":1045},"mcpServers",[931,7603,3694],{"class":945},[931,7605,579],{"class":941},[931,7607,2913],{"class":945},[931,7609,7610,7613,7615,7617,7619],{"class":933,"line":1061},[931,7611,7612],{"class":945},"    \"",[931,7614,6775],{"class":937},[931,7616,3694],{"class":945},[931,7618,889],{"class":945},[931,7620,2943],{"class":945},[931,7622,7623,7626,7629,7631,7633,7635,7638,7640],{"class":933,"line":1068},[931,7624,7625],{"class":945},"      \"",[931,7627,7628],{"class":1041},"command",[931,7630,3694],{"class":945},[931,7632,889],{"class":945},[931,7634,3285],{"class":945},[931,7636,7637],{"class":1045},"npx",[931,7639,3694],{"class":945},[931,7641,7642],{"class":945},",\n",[931,7644,7645,7647,7650,7652,7654],{"class":933,"line":1075},[931,7646,7625],{"class":945},[931,7648,7649],{"class":1041},"args",[931,7651,3694],{"class":945},[931,7653,889],{"class":945},[931,7655,7656],{"class":945}," [\n",[931,7658,7659,7662,7665,7667],{"class":933,"line":1923},[931,7660,7661],{"class":945},"        \"",[931,7663,7664],{"class":1045},"mcp-remote",[931,7666,3694],{"class":945},[931,7668,7642],{"class":945},[931,7670,7671,7673,7676,7678],{"class":933,"line":1928},[931,7672,7661],{"class":945},[931,7674,7675],{"class":1045},"https:\u002F\u002Ftrek.pafor.me\u002Fmcp",[931,7677,3694],{"class":945},[931,7679,7642],{"class":945},[931,7681,7682,7684,7687,7689],{"class":933,"line":1934},[931,7683,7661],{"class":945},[931,7685,7686],{"class":1045},"--static-oauth-client-info",[931,7688,3694],{"class":945},[931,7690,7642],{"class":945},[931,7692,7693,7695,7697,7700,7703,7705,7707,7709,7712,7714,7716,7718,7721,7723,7725,7727,7730,7732,7734],{"class":933,"line":2270},[931,7694,7661],{"class":945},[931,7696,2934],{"class":1045},[931,7698,7699],{"class":941},"\\\"",[931,7701,7702],{"class":1045},"client_id",[931,7704,7699],{"class":941},[931,7706,579],{"class":1045},[931,7708,7699],{"class":941},[931,7710,7711],{"class":1045},"\u003Cyour_client_id>",[931,7713,7699],{"class":941},[931,7715,742],{"class":1045},[931,7717,7699],{"class":941},[931,7719,7720],{"class":1045},"client_secret",[931,7722,7699],{"class":941},[931,7724,579],{"class":1045},[931,7726,7699],{"class":941},[931,7728,7729],{"class":1045},"\u003Cyour_client_secret>",[931,7731,7699],{"class":941},[931,7733,2940],{"class":1045},[931,7735,1955],{"class":945},[931,7737,7738],{"class":933,"line":2281},[931,7739,7740],{"class":945},"      ]\n",[931,7742,7743],{"class":933,"line":2377},[931,7744,7745],{"class":945},"    }\n",[931,7747,7748,7751],{"class":933,"line":1695},[931,7749,7750],{"class":945},"  }",[931,7752,7642],{"class":941},[430,7754,7755,7756,889],{},"Reinicia Claude Desktop y el servidor de TREK aparecerá conectado bajo la sección de ",[441,7757,7758],{},"Local MCP servers",[433,7760],{"src":7761,"alt":7762,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fclaude-desktop-mcp-trek-server-connected.webp","Verificación del estado de conexión activa de TREK en la interfaz de Claude",[430,7764,7765],{},"Ahora prueba con una instrucción (prompt):",[433,7767],{"src":7768,"alt":7769,"style":7770},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fclaude-desktop-mcp-natural-language-prompt.webp","Dar indicaciones a Claude en lenguaje natural para manipular datos de viajes","max-width: 550px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7772,7773],{},"Añadamos un gasto usando lenguaje natural:",[923,7775,7778],{"className":7776,"code":7777,"language":4643,"meta":425},[4641],"For the West Europe trip, the Grab from KLIA1 to the hotel cost RM115.90 on 26\u002F4\u002F2025. Please add it as an expense without split to the trip.\n",[495,7779,7777],{"__ignoreMap":425},[433,7781],{"src":7782,"alt":7783,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fclaude-desktop-mcp-add-expense-response.webp","Claude utiliza herramientas para registrar un gasto de forma automática",[430,7785,7786,7787,7790],{},"Al revisar la pestaña de ",[441,7788,7789],{},"Costs",", se comprueba que el gasto se ha creado indicando que \"nadie ha pagado aún\", ya que no se especificó un pagador en la orden:",[433,7792],{"src":7793,"alt":7794,"style":6749},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-costs-page-mcp-parsed-expense.webp","Confirmación del gasto de IA recién analizado en la vista de Costes",[430,7796,7797],{},"Añadir elementos a la lista de equipaje funciona exactamente igual:",[433,7799],{"src":7800,"alt":7801,"style":7802},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fclaude-desktop-mcp-add-packing-items.webp","Claude agrega artículos de empaque usando indicaciones en lenguaje natural","max-width: 631px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7804,7805,7806,7809],{},"Actualiza la página ",[441,7807,7808],{},"Packing List"," y verás que los tres elementos ya están registrados:",[433,7811],{"src":7812,"alt":7813,"style":7814},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-packing-list-mcp-parsed-items.webp","Confirmación de los artículos de empaque recién analizados en la página de lista de empaque","max-width: 312px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[2158,7816,7818],{"id":7817},"_63-gemini-cli-registro-dinámico","6.3 Gemini CLI (registro dinámico)",[430,7820,7821,7822,7825,7826,889],{},"Gemini CLI admite ",[441,7823,7824],{},"registro dinámico",", lo que significa que no necesitas crear un cliente con antelación. Añade esto a ",[495,7827,7828],{},".gemini\u002Fsettings.json",[923,7830,7832],{"className":2904,"code":7831,"language":2906,"meta":425,"style":425},"    \"trek\": {\n      \"httpUrl\": \"https:\u002F\u002Ftrek.pafor.me\u002Fmcp\",\n      \"oauth\": {\n        \"enabled\": true\n      }\n    }\n",[495,7833,7834,7846,7865,7878,7891,7896],{"__ignoreMap":425},[931,7835,7836,7838,7840,7842,7844],{"class":933,"line":934},[931,7837,7612],{"class":945},[931,7839,6775],{"class":1045},[931,7841,3694],{"class":945},[931,7843,579],{"class":941},[931,7845,2913],{"class":945},[931,7847,7848,7850,7853,7855,7857,7859,7861,7863],{"class":933,"line":1061},[931,7849,7625],{"class":945},[931,7851,7852],{"class":937},"httpUrl",[931,7854,3694],{"class":945},[931,7856,889],{"class":945},[931,7858,3285],{"class":945},[931,7860,7675],{"class":1045},[931,7862,3694],{"class":945},[931,7864,7642],{"class":945},[931,7866,7867,7869,7872,7874,7876],{"class":933,"line":1068},[931,7868,7625],{"class":945},[931,7870,7871],{"class":937},"oauth",[931,7873,3694],{"class":945},[931,7875,889],{"class":945},[931,7877,2943],{"class":945},[931,7879,7880,7882,7885,7887,7889],{"class":933,"line":1075},[931,7881,7661],{"class":945},[931,7883,7884],{"class":1041},"enabled",[931,7886,3694],{"class":945},[931,7888,889],{"class":945},[931,7890,1379],{"class":945},[931,7892,7893],{"class":933,"line":1923},[931,7894,7895],{"class":945},"      }\n",[931,7897,7898],{"class":933,"line":1928},[931,7899,7745],{"class":945},[430,7901,7902,7903,7906,7907,7910,7911],{},"Ejecuta ",[495,7904,7905],{},"gemini"," en la terminal y haz clic en ",[441,7908,7909],{},"Approve"," cuando aparezca la solicitud de autorización:\n",[433,7912],{"src":7913,"alt":7914,"style":7915},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fmcp-client-oauth-authorization-prompt.webp","Aprobación del acceso OAuth para el servidor MCP de TREK","max-width: 488px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7917,7918],{},"Luego, empieza con una instrucción simple:",[433,7920],{"src":7921,"alt":7922,"style":7923},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fgemini-cli-mcp-prompt-itinerary.webp","Dar indicaciones a Gemini CLI para recuperar itinerarios de viaje","max-width: 415px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[433,7925],{"src":7926,"alt":7927,"style":7196},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fgemini-cli-mcp-display-itinerary.webp","Gemini CLI muestra con éxito información estructurada del viaje",[2158,7929,7931],{"id":7930},"_64-kimi-cli-registro-dinámico","6.4 Kimi CLI (registro dinámico)",[430,7933,7934,7935,7938,7939,889],{},"El mismo enfoque — añade a ",[495,7936,7937],{},"mcp.json"," en la carpeta ",[495,7940,7941],{},"\u002FUsers\u002F\u003Cuser>\u002F.kimi\u002F",[923,7943,7945],{"className":2904,"code":7944,"language":2906,"meta":425,"style":425},"    \"trek\": {\n      \"type\": \"http\",\n      \"url\": \"https:\u002F\u002Ftrek.pafor.me\u002Fmcp\",\n      \"auth\": \"oauth\"\n    }\n",[495,7946,7947,7959,7979,7997,8014],{"__ignoreMap":425},[931,7948,7949,7951,7953,7955,7957],{"class":933,"line":934},[931,7950,7612],{"class":945},[931,7952,6775],{"class":1045},[931,7954,3694],{"class":945},[931,7956,579],{"class":941},[931,7958,2913],{"class":945},[931,7960,7961,7963,7966,7968,7970,7972,7975,7977],{"class":933,"line":1061},[931,7962,7625],{"class":945},[931,7964,7965],{"class":937},"type",[931,7967,3694],{"class":945},[931,7969,889],{"class":945},[931,7971,3285],{"class":945},[931,7973,7974],{"class":1045},"http",[931,7976,3694],{"class":945},[931,7978,7642],{"class":945},[931,7980,7981,7983,7985,7987,7989,7991,7993,7995],{"class":933,"line":1068},[931,7982,7625],{"class":945},[931,7984,863],{"class":937},[931,7986,3694],{"class":945},[931,7988,889],{"class":945},[931,7990,3285],{"class":945},[931,7992,7675],{"class":1045},[931,7994,3694],{"class":945},[931,7996,7642],{"class":945},[931,7998,7999,8001,8004,8006,8008,8010,8012],{"class":933,"line":1075},[931,8000,7625],{"class":945},[931,8002,8003],{"class":937},"auth",[931,8005,3694],{"class":945},[931,8007,889],{"class":945},[931,8009,3285],{"class":945},[931,8011,7871],{"class":1045},[931,8013,1955],{"class":945},[931,8015,8016],{"class":933,"line":1923},[931,8017,7745],{"class":945},[430,8019,7902,8020,7906,8023,1368,8025],{},[495,8021,8022],{},"kimi mcp auth trek",[441,8024,7909],{},[433,8026],{"src":7913,"alt":7914,"style":8027},"max-width: 453px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,8029,8030],{},"Una vez autorizado, se mostrarán las herramientas disponibles:",[433,8032],{"src":8033,"alt":8034,"style":6585},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fkimi-cli-mcp-authorized-tools-list.webp","Kimi CLI muestra las herramientas disponibles tras una autorización exitosa",[879,8036,8038],{"id":8037},"_7-experiencia-móvil","7. Experiencia móvil",[430,8040,8041],{},"TREK es una PWA (aplicación web progresiva) en dispositivos móviles. Un service worker almacena en caché los mapas y los datos de las API, por lo que podrás leer tu itinerario sin conexión a Internet. Sin embargo, las notificaciones push pueden sufrir cierta latencia comparadas con las de una aplicación nativa.",[879,8043,8045],{"id":8044},"reflexiones-finales","Reflexiones finales",[430,8047,8048],{},"Conectar agentes de IA mediante MCP ahorra gran parte del tedioso trabajo de introducir reservas de vuelos y hoteles. Además, los agentes pueden sugerir puntos de interés según las fechas del viaje y la temporada. Una única conversación con un agente de IA puede cubrir todo el proceso: desde la investigación y la creación del itinerario hasta el control del presupuesto y el equipaje.",[430,8050,8051],{},"Hay algunos pequeños detalles técnicos por pulir. Por ejemplo, al importar reservas desde un PDF, la moneda se establece de forma predeterminada en la moneda base del viaje en lugar de la moneda pagada realmente. Asimismo, al crear una nueva lista en las Colecciones, la imagen de portada añadida desaparece al guardar, aunque se puede volver a añadir manualmente al editar.",[430,8053,8054,8055,8060],{},"Existe una pequeña barrera técnica, ya que necesitas alojar esto en tu propio servidor. TREK está pensado principalmente para personas que viajan con frecuencia y tienen altas expectativas sobre cómo organizar la información de sus viajes. Sugerimos probar la demo oficial en ",[444,8056,8059],{"href":8057,"rel":8058},"https:\u002F\u002Fdemo.liketrek.com\u002F",[448],"demo.liketrek.com"," antes de plantearse el autohospedaje.",[879,8062,1611],{"id":1610},[485,8064,8065,8072,8079],{},[488,8066,8067],{},[444,8068,8071],{"href":8069,"rel":8070},"https:\u002F\u002Fgithub.com\u002Fliketrek\u002FTREK\u002Fwiki\u002FQuick-Start",[448],"Inicio rápido de TREK",[488,8073,8074],{},[444,8075,8078],{"href":8076,"rel":8077},"https:\u002F\u002Fgithub.com\u002Fliketrek\u002FTREK\u002Fwiki\u002FTroubleshooting",[448],"Solución de problemas de TREK",[488,8080,8081],{},[444,8082,8085],{"href":8083,"rel":8084},"https:\u002F\u002Fgithub.com\u002Fliketrek\u002FTREK\u002Fwiki\u002FMCP-Scopes",[448],"Ámbitos MCP de TREK",[1639,8087,8088],{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":425,"searchDepth":1061,"depth":1068,"links":8090},[8091,8096,8097,8107,8115,8121,8127,8128,8129],{"id":6279,"depth":1068,"text":6280,"children":8092},[8093,8094,8095],{"id":6283,"depth":1075,"text":6284},{"id":6429,"depth":1075,"text":6430},{"id":6461,"depth":1075,"text":6462},{"id":6606,"depth":1068,"text":6607},{"id":6649,"depth":1068,"text":6650,"children":8098},[8099,8100,8101,8102,8103,8104,8105,8106],{"id":6752,"depth":1075,"text":6753},{"id":6763,"depth":1075,"text":6764},{"id":6863,"depth":1075,"text":6864},{"id":6883,"depth":1075,"text":6884},{"id":6918,"depth":1075,"text":6919},{"id":6939,"depth":1075,"text":6940},{"id":6955,"depth":1075,"text":6956},{"id":6966,"depth":1075,"text":6967},{"id":6996,"depth":1068,"text":6997,"children":8108},[8109,8110,8111,8112,8113,8114],{"id":7003,"depth":1075,"text":7004},{"id":7037,"depth":1075,"text":7038},{"id":7107,"depth":1075,"text":7108},{"id":7129,"depth":1075,"text":7130},{"id":7148,"depth":1075,"text":7149},{"id":7173,"depth":1075,"text":7174},{"id":7204,"depth":1068,"text":7205,"children":8116},[8117,8118,8119,8120],{"id":7224,"depth":1075,"text":7225},{"id":7322,"depth":1075,"text":7323},{"id":7384,"depth":1075,"text":7385},{"id":7483,"depth":1075,"text":7484},{"id":7504,"depth":1068,"text":7505,"children":8122},[8123,8124,8125,8126],{"id":7515,"depth":1075,"text":7516},{"id":7537,"depth":1075,"text":7538},{"id":7817,"depth":1075,"text":7818},{"id":7930,"depth":1075,"text":7931},{"id":8037,"depth":1068,"text":8038},{"id":8044,"depth":1068,"text":8045},{"id":1610,"depth":1068,"text":1611},[8131,1659],"travel","2026-09-01","Aprende a desplegar TREK con Docker, protegerlo con Cloudflare R2 y Caddy, y usar agentes de IA vía MCP para planificar todos tus itinerarios sin problemas.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002FES-Self-hosted-travel-planner-TREK.webp","Una ilustración 3D minimalista y de alta calidad del panel del planificador de viajes autohospedado TREK sobre un fondo de pergamino cálido.",{"schemaOrg":8137,"robots":1693,"sitemap":8141},[8138,8139],{"@type":1672,"headline":6265,"description":8133},{"@type":4088,"headline":8140,"description":8133},"Guía para alojar TREK, el planificador de viajes con IA",{"lastmod":8132},{"title":8140,"description":8133,"ogTitle":6265,"ogDescription":8133,"twitterTitle":6265,"twitterDescription":8133},"es\u002Farticle\u002Fself-hosted-travel-planner-trek",[6259,8145,6260,6261,6948],"TREK","qKvrSb1XZOooEfCsfqoDg2lYS54cWv-HGkb_snF4UPE",{"id":8148,"title":8149,"author":425,"body":8150,"category":8702,"date":8703,"description":8704,"extension":1664,"image":8705,"imageAlt":8706,"isPublished":1064,"meta":8707,"minRead":1923,"navigation":1064,"path":81,"seo":8711,"stem":8713,"tags":8714,"updatedAt":1702,"__hash__":8718},"article\u002Fes\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts.md","Cómo las habilidades de IA reemplazan scripts de Nuxt",{"type":427,"value":8151,"toc":8695},[8152,8166,8170,8173,8269,8272,8300,8306,8310,8325,8342,8346,8357,8516,8520,8602,8606,8614,8634,8641,8656,8667,8670,8676,8679,8684,8692],[430,8153,8154,8155,575,8158,8161,8162,8165],{},"Cuando iniciamos una nueva aplicación utilizando el framework Nuxt, tenemos que pasar por pasos tediosos como instalar módulos y establecer configuraciones como ",[495,8156,8157],{},"nuxt.config.ts",[495,8159,8160],{},"wrangler.jsonc",". Un script puede resolver este problema, pero alcanza sus límites a medida que aumentan las variaciones. Por eso exploramos y reemplazamos los scripts con una ",[441,8163,8164],{},"habilidad de agente"," (agent skill).",[474,8167,8169],{"id":8168},"en-qué-destacan-los-scripts-de-shell-tradicionales","En qué destacan los scripts de shell tradicionales",[430,8171,8172],{},"Un script es ideal para ejecutar un conjunto fijo de instrucciones en secuencia con decisiones predefinidas en el código.",[923,8174,8176],{"className":1032,"code":8175,"language":1034,"meta":425,"style":425},"#!\u002Fusr\u002Fbin\u002Fenv bash\nset -e\n\nnpx nuxi@latest init \"$1\" --template minimal --packageManager pnpm --no-gitInit -M @nuxt\u002Fui,@nuxthub\u002Fcore,@vueuse\u002Fnuxt\n\ncd \"$1\"\n\ncp ~\u002Ftemplates\u002Fnuxt.config.ts .\ncp ~\u002Ftemplates\u002Fwrangler.jsonc .\n",[495,8177,8178,8183,8190,8194,8233,8237,8247,8251,8260],{"__ignoreMap":425},[931,8179,8180],{"class":933,"line":934},[931,8181,8182],{"class":1071},"#!\u002Fusr\u002Fbin\u002Fenv bash\n",[931,8184,8185,8188],{"class":933,"line":1061},[931,8186,8187],{"class":962},"set",[931,8189,5206],{"class":1045},[931,8191,8192],{"class":933,"line":1068},[931,8193,1065],{"emptyLinePlaceholder":1064},[931,8195,8196,8198,8201,8204,8206,8210,8212,8215,8218,8221,8224,8227,8230],{"class":933,"line":1075},[931,8197,7637],{"class":1041},[931,8199,8200],{"class":1045}," nuxi@latest",[931,8202,8203],{"class":1045}," init",[931,8205,3285],{"class":945},[931,8207,8209],{"class":8208},"sHdIc","$1",[931,8211,3694],{"class":945},[931,8213,8214],{"class":1045}," --template",[931,8216,8217],{"class":1045}," minimal",[931,8219,8220],{"class":1045}," --packageManager",[931,8222,8223],{"class":1045}," pnpm",[931,8225,8226],{"class":1045}," --no-gitInit",[931,8228,8229],{"class":1045}," -M",[931,8231,8232],{"class":1045}," @nuxt\u002Fui,@nuxthub\u002Fcore,@vueuse\u002Fnuxt\n",[931,8234,8235],{"class":933,"line":1923},[931,8236,1065],{"emptyLinePlaceholder":1064},[931,8238,8239,8241,8243,8245],{"class":933,"line":1928},[931,8240,2815],{"class":962},[931,8242,3285],{"class":945},[931,8244,8209],{"class":8208},[931,8246,1955],{"class":945},[931,8248,8249],{"class":933,"line":1934},[931,8250,1065],{"emptyLinePlaceholder":1064},[931,8252,8253,8255,8258],{"class":933,"line":2270},[931,8254,2832],{"class":1041},[931,8256,8257],{"class":1045}," ~\u002Ftemplates\u002Fnuxt.config.ts",[931,8259,4902],{"class":1045},[931,8261,8262,8264,8267],{"class":933,"line":2281},[931,8263,2832],{"class":1041},[931,8265,8266],{"class":1045}," ~\u002Ftemplates\u002Fwrangler.jsonc",[931,8268,4902],{"class":1045},[430,8270,8271],{},"Este script funciona hasta que ocurre lo siguiente:",[485,8273,8274,8280,8290],{},[488,8275,8276,8279],{},[441,8277,8278],{},"Valores predeterminados fijos."," El script incluye de forma fija el módulo Nuxt UI; ¿qué pasa si queremos el módulo Ant Design UI? Cada nueva opción de módulo requiere otro argumento por parte del usuario.",[488,8281,8282,8285,8286,8289],{},[441,8283,8284],{},"No puede leer la intención del usuario."," \"Construye un blog\" necesita ",[495,8287,8288],{},"@nuxt\u002Fcontent","; \"construye un sitio web con boletines informativos\" necesita Cloudflare D1 + Drizzle. Un script no puede distinguir la diferencia: cada variación requiere un nuevo script.",[488,8291,8292,8295,8296,8299],{},[441,8293,8294],{},"Se vuelve obsoleto silenciosamente."," Las convenciones de Nuxt cambian entre versiones principales. Nuxt 4 cambió el directorio de origen a ",[495,8297,8298],{},"app\u002F",". Un script escrito para Nuxt 3 realiza el andamiaje (scaffolding) de la estructura incorrecta sin alertar nunca al usuario.",[430,8301,3552,8302,8305],{},[441,8303,8304],{},"inicialización de proyectos"," (app scaffolding) es un problema de decisión, no de ejecución. El script no escalará cuando aumente el número de decisiones.",[474,8307,8309],{"id":8308},"por-qué-usar-una-habilidad-de-agente-de-ia-en-lugar-de-scripts-tradicionales","¿Por qué usar una habilidad de agente de IA en lugar de scripts tradicionales?",[430,8311,8312,8313,8316,8317,8320,8321,8324],{},"Una habilidad de agente de IA no es un conjunto de código que se ejecuta, sino un ",[441,8314,8315],{},"conjunto de conocimientos que el agente de IA sigue",". Contiene un archivo ",[495,8318,8319],{},"SKILL.md"," y puede empaquetar cualquier otro archivo que requiera la tarea (como documentos de referencia, plantillas y scripts ejecutables). El artículo, ",[444,8322,8323],{"href":351},"Habilidades de los agentes de IA: qué son y cómo crearlas",", explica cómo funciona una habilidad de agente. Una habilidad mantiene la diligencia de un script mientras agrega el juicio razonable del que carece un script:",[485,8326,8327,8330,8333,8336,8339],{},[488,8328,8329],{},"Infiere la intención del usuario para determinar si la aplicación necesita una base de datos.",[488,8331,8332],{},"Decide qué módulos opcionales se necesitan a partir de la lista especificada. Por ejemplo, Nuxt Content, i18n y analíticas son opcionales según lo solicite el usuario.",[488,8334,8335],{},"Se adapta al ecosistema actual utilizando el último framework Nuxt, NuxtHub para los enlaces de Cloudflare y Wrangler para el despliegue.",[488,8337,8338],{},"Se recupera cuando un paso falla.",[488,8340,8341],{},"Realiza una verificación final con una lista de control antes de entregar el proyecto.",[474,8343,8345],{"id":8344},"detrás-de-escena-de-nuestra-habilidad-de-scaffolding-para-nuxt-y-cloudflare","Detrás de escena de nuestra habilidad de scaffolding para Nuxt y Cloudflare",[430,8347,8348,8349,8356],{},"La habilidad, ",[444,8350,8353],{"href":8351,"rel":8352},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fscaffold-nuxt-cloudflare-app-skill",[448],[495,8354,8355],{},"scaffold-nuxt-cloudflare-app-skill",", guía a través de una inicialización orientada a producción:",[533,8358,8359,8390,8409,8433,8462,8496,8502],{},[488,8360,8361,8364,8365],{},[441,8362,8363],{},"Clarifica cualquier aspecto"," que no pueda inferirse:\n",[485,8366,8367,8378,8381],{},[488,8368,8369,8370,8373,8374,8377],{},"El kit de interfaz de usuario (",[441,8371,8372],{},"Nuxt UI"," por defecto o ",[441,8375,8376],{},"Antdv Next",");",[488,8379,8380],{},"Si se requiere una base de datos (como Cloudflare D1);",[488,8382,8383,8384,1518,8387,8389],{},"Módulos adicionales como ",[495,8385,8386],{},"@nuxtjs\u002Fi18n",[495,8388,8288],{}," para funciones de CMS.",[488,8391,8392,758,8395,8398,8399,8401,8402,8405,8406,461],{},[441,8393,8394],{},"Inicializa la aplicación base",[495,8396,8397],{},"pnpm dlx nuxi@latest init"," para obtener la última versión del framework Nuxt con ",[495,8400,3585],{}," como gestor de paquetes. Luego configura las listas de permitidos para compilaciones nativas de modo que el entorno de compilación de Cloudflare pueda compilar ",[495,8403,8404],{},"better-sqlite3","\u002F",[495,8407,8408],{},"sharp",[488,8410,8411,579,8414,1518,8417,742,8420,742,8423,742,8426,742,8429,8432],{},[441,8412,8413],{},"Instala módulos a partir de una tabla de decisiones",[495,8415,8416],{},"@nuxt\u002Fui",[495,8418,8419],{},"@antdv-next\u002Fnuxt",[495,8421,8422],{},"@nuxt\u002Fimage",[495,8424,8425],{},"@nuxtjs\u002Fseo",[495,8427,8428],{},"@nuxthub\u002Fcore",[495,8430,8431],{},"@vueuse\u002Fnuxt",", además de Drizzle\u002FD1, Nuxt Content e i18n solo cuando se seleccionan.",[488,8434,8435,1368,8438],{},[441,8436,8437],{},"Organiza la estructura de directorios",[485,8439,8440,8444,8449,8454,8459],{},[488,8441,8442],{},[495,8443,8298],{},[488,8445,8446],{},[495,8447,8448],{},"server\u002F",[488,8450,8451],{},[495,8452,8453],{},"shared\u002F",[488,8455,8456],{},[495,8457,8458],{},"tests\u002F",[488,8460,8461],{},"archivos de configuración en la raíz.",[488,8463,8464,1368,8468],{},[441,8465,5754,8466],{},[495,8467,8157],{},[485,8469,8470,8479,8486,8491],{},[488,8471,8472,8405,8475,8478],{},[495,8473,8474],{},"site.url",[495,8476,8477],{},"site.name"," para SEO",[488,8480,8481,8482,8485],{},"El bloque ",[495,8483,8484],{},"hub"," de NuxtHub para Cloudflare",[488,8487,8488],{},[495,8489,8490],{},"routeRules",[488,8492,8493],{},[495,8494,8495],{},"compatibilityDate",[488,8497,8498],{},[441,8499,5754,8500],{},[495,8501,8160],{},[488,8503,8504,8507,8508,8511,8512,8515],{},[441,8505,8506],{},"Configura Vitest y ESLint",", luego ejecuta una ",[441,8509,8510],{},"lista de verificación final"," que incluye ",[495,8513,8514],{},"pnpm install && pnpm dev"," antes de considerar el trabajo terminado.",[474,8517,8519],{"id":8518},"scripts-de-shell-frente-a-habilidades-de-agentes-de-ia-una-comparación-directa","Scripts de shell frente a habilidades de agentes de IA: una comparación directa",[604,8521,8522,8534],{},[607,8523,8524],{},[610,8525,8526,8528,8531],{},[613,8527],{},[613,8529,8530],{},"Script",[613,8532,8533],{},"Habilidad",[633,8535,8536,8547,8558,8569,8580,8591],{},[610,8537,8538,8541,8544],{},[638,8539,8540],{},"Intención del usuario",[638,8542,8543],{},"❌ valores fijos",[638,8545,8546],{},"✅ se adapta a la solicitud",[610,8548,8549,8552,8555],{},[638,8550,8551],{},"Toma de decisiones",[638,8553,8554],{},"solo con flags predefinidos",[638,8556,8557],{},"✅ evaluado en tiempo de ejecución",[610,8559,8560,8563,8566],{},[638,8561,8562],{},"Cambios de versión",[638,8564,8565],{},"reescritura manual",[638,8567,8568],{},"✅ verifica el estado actual",[610,8570,8571,8574,8577],{},[638,8572,8573],{},"Recuperación de errores",[638,8575,8576],{},"se detiene",[638,8578,8579],{},"✅ corrige y continúa",[610,8581,8582,8585,8588],{},[638,8583,8584],{},"Verificación de resultados",[638,8586,8587],{},"❌",[638,8589,8590],{},"✅ lista de verificación final",[610,8592,8593,8596,8599],{},[638,8594,8595],{},"Costo de mantenimiento",[638,8597,8598],{},"proliferación de flags, actualizaciones de versiones",[638,8600,8601],{},"editar Markdown, no código",[474,8603,8605],{"id":8604},"cómo-instalar-habilidades-de-agentes-de-ia-con-la-cli-npx-skills","Cómo instalar habilidades de agentes de IA con la CLI npx skills",[430,8607,8608,8609,889],{},"La instalación se realiza con un único comando utilizando la ",[444,8610,8613],{"href":8611,"rel":8612},"https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fskills",[448],"CLI de skills",[923,8615,8617],{"className":1032,"code":8616,"language":1034,"meta":425,"style":425},"npx skills add https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fscaffold-nuxt-cloudflare-app-skill.git -g\n",[495,8618,8619],{"__ignoreMap":425},[931,8620,8621,8623,8626,8628,8631],{"class":933,"line":934},[931,8622,7637],{"class":1041},[931,8624,8625],{"class":1045}," skills",[931,8627,1055],{"class":1045},[931,8629,8630],{"class":1045}," https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fscaffold-nuxt-cloudflare-app-skill.git",[931,8632,8633],{"class":1045}," -g\n",[430,8635,8636,8637],{},"La CLI clona el repositorio, encuentra la habilidad y pregunta a cuál de los 77 agentes compatibles debe asignarse:\n",[433,8638],{"alt":8639,"src":8640},"Interfaz de línea de comandos que muestra la instalación de la habilidad de andamiaje de Nuxt usando el comando CLI npx skills add","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20AI%20Agent%20Skills%20Replace%20Nuxt%20App%20Scaffolding%20Scripts\u002Fnpx-skills-add-scaffold-nuxt-installation.webp",[430,8642,8643,8644,8647,8648,8651,8652],{},"Optamos por ",[441,8645,8646],{},"Symlink"," (el método recomendado), que instala la habilidad una vez en ",[495,8649,8650],{},"~\u002F.agents\u002Fskills"," y apunta cada agente seleccionado a esta copia única.\n",[433,8653],{"alt":8654,"src":8655},"Pantalla de terminal que muestra el resumen de instalación y la configuración del enlace simbólico para las habilidades de agentes centralizadas","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20AI%20Agent%20Skills%20Replace%20Nuxt%20App%20Scaffolding%20Scripts\u002Fnpx-skills-installation-summary-details.webp",[485,8657,8658],{},[488,8659,8660],{},[899,8661,8662,8663,8666],{},"Consulte este artículo, ",[444,8664,8665],{"href":359},"Evita fragmentar habilidades de agentes usando npx skills",", sobre cómo centralizar las habilidades de agentes en una única fuente de verdad.",[430,8668,8669],{},"Al abrir Claude Code se confirma que la habilidad se ha instalado correctamente.",[430,8671,8672],{},[433,8673],{"alt":8674,"src":8675},"Interfaz de línea de comandos de Claude Code que muestra el comando de barra diagonal scaffold-nuxt recién instalado, activo y listo para usar","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20AI%20Agent%20Skills%20Replace%20Nuxt%20App%20Scaffolding%20Scripts\u002Fclaude-code-scaffold-nuxt-slash-command-active.webp",[430,8677,8678],{},"A partir de ahí, una solicitud en lenguaje natural es todo lo que se necesita:",[2504,8680,8681],{},[430,8682,8683],{},"\"Scaffold a new Nuxt app deployed to Cloudflare Workers — Nuxt UI, a blog section, and a D1 database\"",[430,8685,8686,8687,8691],{},"La habilidad es de código abierto; visite el ",[444,8688,8690],{"href":8351,"rel":8689},[448],"repositorio de GitHub"," y pruébela.",[1639,8693,8694],{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":425,"searchDepth":1061,"depth":1068,"links":8696},[8697,8698,8699,8700,8701],{"id":8168,"depth":1061,"text":8169},{"id":8308,"depth":1061,"text":8309},{"id":8344,"depth":1061,"text":8345},{"id":8518,"depth":1061,"text":8519},{"id":8604,"depth":1061,"text":8605},[1659],"2026-08-25","Crea proyectos Nuxt en Cloudflare fácilmente. Descubre por qué los scripts tradicionales se quedan cortos ante las habilidades dinámicas de agentes de IA.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20AI%20Agent%20Skills%20Replace%20Nuxt%20App%20Scaffolding%20Scripts\u002FES-How-AI-Agent-Skills-Replace-Nuxt-App-Scaffolding-Scripts.webp","Nuxt en Cloudflare: Habilidades de IA frente a Scripts - Comparación de scripts tradicionales y habilidades de agentes de IA para el andamiaje de Nuxt.",{"schemaOrg":8708,"robots":1693,"sitemap":8710},[8709],{"@type":1670,"headline":8149,"description":8704,"image":8705},{"lastmod":8703},{"title":8712,"description":8704,"ogTitle":8149,"ogDescription":8704,"twitterTitle":8149,"twitterDescription":8704},"Nuxt en Cloudflare: Habilidades de IA frente a Scripts","es\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",[8715,6261,8716,8717],"Nuxt","AI Agent","Scaffolding","dZ-kSJrrj6PNvVF8SkUu7_xRh4n4upXy9IRbnb5aodM",{"id":8720,"title":8721,"author":1702,"body":8722,"category":9481,"date":9483,"description":9484,"extension":1664,"image":9485,"imageAlt":9486,"isPublished":1064,"meta":9487,"minRead":2270,"navigation":1064,"path":105,"seo":9492,"stem":9493,"tags":9494,"updatedAt":1702,"__hash__":9496},"article\u002Fes\u002Farticle\u002Fuse-cloudflare-as-ai-memory.md","Construir memoria persistente de IA con Cloudflare y MCP",{"type":427,"value":8723,"toc":9463},[8724,8728,8731,8734,8738,8741,8755,8759,8766,8780,8783,8786,8830,8834,8916,8920,8945,9042,9053,9057,9062,9102,9125,9129,9134,9201,9206,9210,9243,9249,9287,9291,9323,9327,9335,9339,9369,9373,9413,9415,9418,9421,9424,9426,9460],[474,8725,8727],{"id":8726},"la-importancia-de-la-memoria-persistente-de-ia-para-los-agentes","La importancia de la memoria persistente de IA para los agentes",[430,8729,8730],{},"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.",[430,8732,8733],{},"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.",[474,8735,8737],{"id":8736},"sistemas-de-memoria-autohospedados-frente-a-integrados","Sistemas de memoria autohospedados frente a integrados",[430,8739,8740],{},"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.",[430,8742,8743,8744,8749,8750,8754],{},"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 ",[444,8745,8748],{"href":8746,"rel":8747},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fsecond-brain-cloudflare\u002Ftree\u002Fmain",[448],"Second Brain",", un fork de ",[444,8751,8752],{"href":8752,"rel":8753},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare",[448],", 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.",[474,8756,8758],{"id":8757},"cómo-construir-un-second-brain-de-memoria-de-ia-en-cloudflare","Cómo construir un Second Brain de memoria de IA en Cloudflare",[430,8760,8761,8762,8765],{},"El sistema de memoria Second Brain se despliega en ",[441,8763,8764],{},"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.",[430,8767,8768,8769,8772,8773,8776,8777,8779],{},"Se utiliza el modelo de embeddings de ",[441,8770,8771],{},"Workers AI"," para generar los vectores. Estos embeddings se almacenan en ",[441,8774,8775],{},"Cloudflare Vectorize",", que es una base de datos vectorial distribuida globalmente. ",[441,8778,8775],{}," realiza la búsqueda de similitud de coseno para encontrar memorias relacionadas semánticamente.",[430,8781,8782],{},"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.",[430,8784,8785],{},"Las siguientes herramientas se exponen como interfaces MCP para ser utilizadas en agentes de IA:",[485,8787,8788,8794,8800,8806,8812,8818,8824],{},[488,8789,8790,8793],{},[495,8791,8792],{},"remember",": Almacena ideas, decisiones, preferencias y contexto del proyecto.",[488,8795,8796,8799],{},[495,8797,8798],{},"append",": Añade una actualización a una memoria existente.",[488,8801,8802,8805],{},[495,8803,8804],{},"update",": Reemplaza una memoria existente.",[488,8807,8808,8811],{},[495,8809,8810],{},"recall",": Busca memorias por significado en lugar de por redacción exacta.",[488,8813,8814,8817],{},[495,8815,8816],{},"list_recent",": Explora las memorias guardadas recientemente.",[488,8819,8820,8823],{},[495,8821,8822],{},"forget",": Elimina permanentemente una memoria.",[488,8825,8826,8829],{},[495,8827,8828],{},"link\u002Fconnections",": Conecta memorias relacionadas (función de grafo de la v2).",[879,8831,8833],{"id":8832},"configuración-de-second-brain-en-cloudflare","Configuración de Second Brain en Cloudflare",[533,8835,8836,8853,8860,8867,8874,8881,8892,8899,8902,8909],{},[488,8837,4262,8838,8841,8842,8847,8848,8852],{},[495,8839,8840],{},"Deploy to Cloudflare"," en la página del ",[444,8843,8846],{"href":8844,"rel":8845},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fsecond-brain-cloudflare",[448],"Github repo",". [[",[433,8849],{"alt":8850,"src":8851},"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","]]",[488,8854,8855,8856],{},"Completa el formulario de Cloudflare Worker.\n",[433,8857],{"alt":8858,"src":8859},"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",[488,8861,8862,8863],{},"Introduce '384' para Dimensions, selecciona 'cosine' para Metric y haz clic en el botón Deploy.\n",[433,8864],{"alt":8865,"src":8866},"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",[488,8868,8869,8870],{},"A continuación se muestra la vista general de Second Brain en Cloudflare Worker:\n",[433,8871],{"alt":8872,"src":8873},"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",[488,8875,8876,8877],{},"Haz clic en 'Settings' y luego en el icono de edición de 'AUTH_TOKEN' para crear un token:\n",[433,8878],{"alt":8879,"src":8880},"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",[488,8882,8883,8884,8888],{},"Haz clic en el enlace 'Rotate' para introducir un nuevo valor: ",[433,8885],{"alt":8886,"src":8887},"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,8889],{"alt":8890,"src":8891},"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",[488,8893,8894,8895,8898],{},"Ejecuta el comando ",[495,8896,8897],{},"openssl rand -base64 32"," en la terminal de macOS para crear un valor aleatorio y pégalo en el campo de entrada 'Value'.",[488,8900,8901],{},"Haz clic en el botón 'Deploy' para actualizar el nuevo valor de 'AUTH_TOKEN'.",[488,8903,8904,8905],{},"Abre la URL del worker de Second Brain en el navegador web:\n",[433,8906],{"alt":8907,"src":8908},"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",[488,8910,8911,8912,8915],{},"Introduce el 'AUTH_TOKEN' creado en el campo de entrada ",[495,8913,8914],{},"Bearer token"," y haz clic en el botón 'Connect' para iniciar sesión en la interfaz web.",[879,8917,8919],{"id":8918},"integración-de-claude-desktop-a-través-de-mcp","Integración de Claude Desktop a través de MCP",[533,8921,8922,8929,8936],{},[488,8923,8924,8925],{},"Haz clic en 'Customize' en Claude Desktop.\n",[433,8926],{"alt":8927,"src":8928},"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",[488,8930,8931,8932],{},"Haz clic en 'Developer' para editar manualmente el archivo de configuración de los servidores MCP:\n",[433,8933],{"alt":8934,"src":8935},"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",[488,8937,8938,8939,8941,8942,889],{},"Añade el siguiente código a la sección ",[495,8940,7601],{}," en ",[495,8943,8944],{},"claude_desktop_config.json",[923,8946,8948],{"className":2904,"code":8947,"language":2906,"meta":425,"style":425},"    \"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",[495,8949,8950,8963,8981,8993,9003,9014,9025,9034,9038],{"__ignoreMap":425},[931,8951,8952,8954,8957,8959,8961],{"class":933,"line":934},[931,8953,7612],{"class":945},[931,8955,8956],{"class":1045},"second-brain",[931,8958,3694],{"class":945},[931,8960,579],{"class":941},[931,8962,2913],{"class":945},[931,8964,8965,8967,8969,8971,8973,8975,8977,8979],{"class":933,"line":1061},[931,8966,7625],{"class":945},[931,8968,7628],{"class":937},[931,8970,3694],{"class":945},[931,8972,889],{"class":945},[931,8974,3285],{"class":945},[931,8976,7637],{"class":1045},[931,8978,3694],{"class":945},[931,8980,7642],{"class":945},[931,8982,8983,8985,8987,8989,8991],{"class":933,"line":1068},[931,8984,7625],{"class":945},[931,8986,7649],{"class":937},[931,8988,3694],{"class":945},[931,8990,889],{"class":945},[931,8992,7656],{"class":945},[931,8994,8995,8997,8999,9001],{"class":933,"line":1075},[931,8996,7661],{"class":945},[931,8998,7664],{"class":1045},[931,9000,3694],{"class":945},[931,9002,7642],{"class":945},[931,9004,9005,9007,9010,9012],{"class":933,"line":1923},[931,9006,7661],{"class":945},[931,9008,9009],{"class":1045},"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp",[931,9011,3694],{"class":945},[931,9013,7642],{"class":945},[931,9015,9016,9018,9021,9023],{"class":933,"line":1928},[931,9017,7661],{"class":945},[931,9019,9020],{"class":1045},"--header",[931,9022,3694],{"class":945},[931,9024,7642],{"class":945},[931,9026,9027,9029,9032],{"class":933,"line":1934},[931,9028,7661],{"class":945},[931,9030,9031],{"class":1045},"Authorization: Bearer \u003Cyour-token>",[931,9033,1955],{"class":945},[931,9035,9036],{"class":933,"line":2270},[931,9037,7740],{"class":945},[931,9039,9040],{"class":933,"line":2281},[931,9041,7745],{"class":945},[430,9043,9044,9048,9049],{},[433,9045],{"alt":9046,"src":9047},"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,9050],{"alt":9051,"src":9052},"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",[879,9054,9056],{"id":9055},"integración-de-claude-code-a-través-de-mcp","Integración de Claude Code a través de MCP",[485,9058,9059],{},[488,9060,9061],{},"Ejecuta el siguiente comando para añadir el MCP:",[923,9063,9065],{"className":2300,"code":9064,"language":2302,"meta":425,"style":425},"claude mcp add --transport http second-brain https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\n",[495,9066,9067],{"__ignoreMap":425},[931,9068,9069,9072,9075,9077,9080,9083,9086,9089,9091,9094,9097,9099],{"class":933,"line":934},[931,9070,9071],{"class":1041},"claude",[931,9073,9074],{"class":1045}," mcp",[931,9076,1055],{"class":1045},[931,9078,9079],{"class":1045}," --transport",[931,9081,9082],{"class":1045}," http",[931,9084,9085],{"class":1045}," second-brain",[931,9087,9088],{"class":1045}," https:\u002F\u002F",[931,9090,5576],{"class":945},[931,9092,9093],{"class":1045},"your-worker-ur",[931,9095,9096],{"class":941},"l",[931,9098,1249],{"class":945},[931,9100,9101],{"class":1045},"\u002Fmcp\n",[485,9103,9104,9110],{},[488,9105,9106,9107,461],{},"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 ",[495,9108,9109],{},"AUTH_TOKEN",[488,9111,9112,9113,7938,9116,9119,9120,461],{},"Crea el archivo ",[495,9114,9115],{},"CLAUDE.md",[495,9117,9118],{},"~\u002F.claude"," con las instrucciones de ",[444,9121,9124],{"href":9122,"rel":9123},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fblob\u002Fmain\u002FAI_Instructions\u002FCLAUDE_INSTRUCTIONS.md",[448],"CLAUDE_INSTRUCTIONS.md",[879,9126,9128],{"id":9127},"integración-de-gemini-cli-a-través-de-mcp","Integración de Gemini CLI a través de MCP",[533,9130,9131],{},[488,9132,9133],{},"Añade los siguientes ajustes del servidor MCP a '.\u002F.gemini\u002Fsettings.json':",[923,9135,9137],{"className":2904,"code":9136,"language":2906,"meta":425,"style":425},"    \"second-brain\": {\n      \"httpUrl\": \"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\",\n      \"oauth\": {\n        \"enabled\": true\n      }\n    }\n",[495,9138,9139,9151,9169,9181,9193,9197],{"__ignoreMap":425},[931,9140,9141,9143,9145,9147,9149],{"class":933,"line":934},[931,9142,7612],{"class":945},[931,9144,8956],{"class":1045},[931,9146,3694],{"class":945},[931,9148,579],{"class":941},[931,9150,2913],{"class":945},[931,9152,9153,9155,9157,9159,9161,9163,9165,9167],{"class":933,"line":1061},[931,9154,7625],{"class":945},[931,9156,7852],{"class":937},[931,9158,3694],{"class":945},[931,9160,889],{"class":945},[931,9162,3285],{"class":945},[931,9164,9009],{"class":1045},[931,9166,3694],{"class":945},[931,9168,7642],{"class":945},[931,9170,9171,9173,9175,9177,9179],{"class":933,"line":1068},[931,9172,7625],{"class":945},[931,9174,7871],{"class":937},[931,9176,3694],{"class":945},[931,9178,889],{"class":945},[931,9180,2943],{"class":945},[931,9182,9183,9185,9187,9189,9191],{"class":933,"line":1075},[931,9184,7661],{"class":945},[931,9186,7884],{"class":1041},[931,9188,3694],{"class":945},[931,9190,889],{"class":945},[931,9192,1379],{"class":945},[931,9194,9195],{"class":933,"line":1923},[931,9196,7895],{"class":945},[931,9198,9199],{"class":933,"line":1928},[931,9200,7745],{"class":945},[533,9202,9203],{"start":1061},[488,9204,9205],{},"Inicia Gemini CLI.",[879,9207,9209],{"id":9208},"prueba-de-second-brain-en-agentes-de-ia","Prueba de Second Brain en agentes de IA",[533,9211,9212,9222,9236],{},[488,9213,9214,9215,9217,9218],{},"Al empezar con una configuración sencilla de paleta de colores de marca en ",[441,9216,7554],{},", no se llama a Second Brain.\n",[433,9219],{"alt":9220,"src":9221},"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",[488,9223,9224,9225,9228,9229,9231,9232],{},"Al probar con la palabra clave 'remember', solo se utilizan las herramientas ",[495,9226,9227],{},"memory_user-edits"," integradas en ",[441,9230,7554],{},", pero no Second Brain.\n",[433,9233],{"alt":9234,"src":9235},"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",[488,9237,9238,9239,9242],{},"Al probar el siguiente prompt en ",[441,9240,9241],{},"Claude Code",", se llamó a Second Brain:",[923,9244,9247],{"className":9245,"code":9246,"language":4643},[4641],"Remember Our brand palette uses `#1a1a2e` as primary, `#16213e` as secondary, and `#e94560` as accent. Never use pure black.\"\n",[495,9248,9246],{"__ignoreMap":425},[430,9250,9251,9255,9256,1368,9259,9263,9264,9267,9268,9270,9271,9275,9276,9279,9280,9263,9284],{},[433,9252],{"alt":9253,"src":9254},"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 ",[441,9257,9258],{},"Second Brain en Cloudflare",[433,9260],{"alt":9261,"src":9262},"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- ",[899,9265,9266],{},"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 ",[441,9269,7554],{},", es necesario especificarlas explícitamente para almacenar y recuperar de la capa de memoria de Second Brain.\n",[433,9272],{"alt":9273,"src":9274},"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 ",[441,9277,9278],{},"Gemini CLI"," para activar el MCP de Second Brain.\n",[433,9281],{"alt":9282,"src":9283},"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",[899,9285,9286],{},"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.",[879,9288,9290],{"id":9289},"extensiones-para-navegadores-web","Extensiones para navegadores web",[485,9292,9293,9296],{},[488,9294,9295],{},"Hay extensiones disponibles para los navegadores Chrome, Firefox y Microsoft Edge.",[488,9297,9298,9299],{},"Estas extensiones sirven para:\n",[485,9300,9301,9307,9313],{},[488,9302,9303,9306],{},[441,9304,9305],{},"Capturar la página actual",": guarda el título y la URL en Second Brain.",[488,9308,9309,9312],{},[441,9310,9311],{},"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.",[488,9314,9315,9318,9319,9322],{},[441,9316,9317],{},"Añadir una nota",": escribe contexto o ",[495,9320,9321],{},"#hashtags"," en la ventana emergente antes de guardar; los hashtags se extraen automáticamente como etiquetas.",[879,9324,9326],{"id":9325},"sincronización-del-conocimiento-personal-con-el-plugin-de-obsidian","Sincronización del conocimiento personal con el plugin de Obsidian",[485,9328,9329,9332],{},[488,9330,9331],{},"Existe un plugin de Obsidian disponible para sincronizar las notas de tu Obsidian Vault con tu Second Brain en Cloudflare.",[488,9333,9334],{},"Las notas pueden ser etiquetadas para su sincronización con Second Brain.",[2158,9336,9338],{"id":9337},"instalar-el-plugin-de-obsidian","Instalar el plugin de Obsidian",[533,9340,9341,9348,9355,9362],{},[488,9342,9343,9344],{},"Abre Obsidian → Settings → Community Plugins\n",[433,9345],{"alt":9346,"src":9347},"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",[488,9349,9350,9351],{},"Haz clic en el botón 'Browse'.\n",[433,9352],{"alt":9353,"src":9354},"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",[488,9356,9357,9358],{},"Busca 'Second Brain Sync'.\n",[433,9359],{"alt":9360,"src":9361},"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",[488,9363,9364,9365],{},"Haz clic en el botón 'Install' y luego en 'Enable'.\n",[433,9366],{"alt":9367,"src":9368},"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",[2158,9370,9372],{"id":9371},"configurar-el-plugin-de-obsidian","Configurar el plugin de Obsidian",[533,9374,9375,9378,9385,9392,9399,9406],{},[488,9376,9377],{},"Abre Obsidian → Settings → Second Brain Sync",[488,9379,9380,9381],{},"Introduce la 'URL' y el 'Auth token'.\n",[433,9382],{"alt":9383,"src":9384},"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",[488,9386,9387,9388],{},"Haz clic en el botón 'Test' para verificar la conexión.\n",[433,9389],{"alt":9390,"src":9391},"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",[488,9393,9394,9395],{},"Configura los comportamientos de sincronización. Establece la 'Sync tag' y habilita 'Auto-sync on save'.\n",[433,9396],{"alt":9397,"src":9398},"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",[488,9400,9401,9402],{},"Crea una nota en Obsidian con la etiqueta 'second-brain', tal como se configuró en 'Sync tag'.\n",[433,9403],{"alt":9404,"src":9405},"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",[488,9407,9408,9409],{},"La nota se ha guardado y sincronizado con el Second Brain desplegado en Cloudflare.\n",[433,9410],{"alt":9411,"src":9412},"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",[474,9414,2569],{"id":2568},[430,9416,9417],{},"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.",[430,9419,9420],{},"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.",[430,9422,9423],{},"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.",[474,9425,1611],{"id":1610},[485,9427,9428,9434,9440,9447,9454],{},[488,9429,9430],{},[444,9431,9432],{"href":9432,"rel":9433},"https:\u002F\u002Fwww.thesecondbrain.dev\u002F",[448],[488,9435,9436],{},[444,9437,9438],{"href":9438,"rel":9439},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FHow-It-Works",[448],[488,9441,9442],{},[444,9443,9446],{"href":9444,"rel":9445},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FConnect-to-AI-Clients",[448],"Connect to AI Clients",[488,9448,9449],{},[444,9450,9453],{"href":9451,"rel":9452},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FObsidian-Plugin",[448],"Second Brain Obsidian Plugin",[488,9455,9456],{},[444,9457,9458],{"href":9458,"rel":9459},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-obsidian-plugin",[448],[1639,9461,9462],{},"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":425,"searchDepth":1061,"depth":1068,"links":9464},[9465,9466,9467,9479,9480],{"id":8726,"depth":1061,"text":8727},{"id":8736,"depth":1061,"text":8737},{"id":8757,"depth":1061,"text":8758,"children":9468},[9469,9470,9471,9472,9473,9474,9475],{"id":8832,"depth":1068,"text":8833},{"id":8918,"depth":1068,"text":8919},{"id":9055,"depth":1068,"text":9056},{"id":9127,"depth":1068,"text":9128},{"id":9208,"depth":1068,"text":9209},{"id":9289,"depth":1068,"text":9290},{"id":9325,"depth":1068,"text":9326,"children":9476},[9477,9478],{"id":9337,"depth":1075,"text":9338},{"id":9371,"depth":1075,"text":9372},{"id":2568,"depth":1061,"text":2569},{"id":1610,"depth":1061,"text":1611},[9482,1659],"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":9488,"robots":1693,"sitemap":9491},[9489],{"@type":1670,"headline":9490,"description":9484},"Sistema de memoria persistente de IA con Cloudflare y MCP",{"lastmod":9483},{"title":9490,"description":9484,"ogTitle":8721,"ogDescription":9484,"twitterTitle":8721,"twitterDescription":9484},"es\u002Farticle\u002Fuse-cloudflare-as-ai-memory",[6261,6948,9495,8748,4097],"Memoria de IA","-wBuyPnmI3SkMsaQHsQngMepodb3zL1KLOZkrSblLew",{"id":9498,"title":2516,"author":425,"body":9499,"category":10015,"date":10016,"description":10017,"extension":1664,"image":10018,"imageAlt":10019,"isPublished":1064,"meta":10020,"minRead":1075,"navigation":1064,"path":97,"seo":10024,"stem":10025,"tags":10026,"updatedAt":1702,"__hash__":10029},"article\u002Fes\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac.md",{"type":427,"value":9500,"toc":10008},[9501,9505,9508,9515,9519,9525,9528,9531,9535,9538,9545,9561,9855,9968,9970,9973,9975,10005],[474,9502,9504],{"id":9503},"qué-es-cloudflare-warp","¿Qué es Cloudflare WARP?",[430,9506,9507],{},"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.",[430,9509,9510,9511,9514],{},"Crea un túnel cifrado basado en el protocolo ",[441,9512,9513],{},"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.",[474,9516,9518],{"id":9517},"por-qué-necesitamos-cloudflare-warp","¿Por qué necesitamos Cloudflare WARP?",[430,9520,9521,9522,461],{},"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 ",[441,9523,9524],{},"Acceso a la Red de Confianza Cero (ZTNA)",[430,9526,9527],{},"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.",[430,9529,9530],{},"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.",[474,9532,9534],{"id":9533},"soporte-de-múltiples-perfiles-warp-en-un-dispositivo","Soporte de múltiples perfiles WARP en un dispositivo",[430,9536,9537],{},"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.",[430,9539,9540,9541,9544],{},"Para lograr esto en macOS, podemos utilizar un archivo de perfil MDM ",[495,9542,9543],{},".mobileconfig"," para definir y registrar los diferentes entornos WARP.",[485,9546,9547,9558],{},[488,9548,9549,9557],{},[444,9550,9553,9554,9556],{"href":9551,"rel":9552},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fstatic\u002Fmdm\u002Fmultiple-orgs\u002FCloudflareWARP.mobileconfig",[448],"Download a sample ",[495,9555,9543],{}," file"," directamente desde Cloudflare.",[488,9559,9560],{},"A continuación se muestra un ejemplo de cómo se ve esta configuración:",[923,9562,9566],{"className":9563,"code":9564,"language":9565,"meta":425,"style":425},"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",[495,9567,9568,9573,9578,9583,9588,9593,9598,9603,9608,9613,9618,9623,9628,9633,9638,9643,9648,9653,9658,9663,9668,9673,9678,9683,9688,9693,9698,9703,9707,9711,9716,9720,9725,9729,9735,9741,9747,9753,9759,9765,9771,9777,9783,9789,9795,9801,9807,9813,9819,9825,9831,9837,9843,9849],{"__ignoreMap":425},[931,9569,9570],{"class":933,"line":934},[931,9571,9572],{},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",[931,9574,9575],{"class":933,"line":1061},[931,9576,9577],{},"\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\" \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n",[931,9579,9580],{"class":933,"line":1068},[931,9581,9582],{},"\u003Cplist version=\"1.0\">\n",[931,9584,9585],{"class":933,"line":1075},[931,9586,9587],{},"\u003Cdict>\n",[931,9589,9590],{"class":933,"line":1923},[931,9591,9592],{},"  \u003Ckey>PayloadContent\u003C\u002Fkey>\n",[931,9594,9595],{"class":933,"line":1928},[931,9596,9597],{},"  \u003Carray>\n",[931,9599,9600],{"class":933,"line":1934},[931,9601,9602],{},"    \u003Cdict>\n",[931,9604,9605],{"class":933,"line":2270},[931,9606,9607],{},"      \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[931,9609,9610],{"class":933,"line":2281},[931,9611,9612],{},"      \u003Cstring>Warp Configuration\u003C\u002Fstring>\n",[931,9614,9615],{"class":933,"line":2377},[931,9616,9617],{},"      \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[931,9619,9620],{"class":933,"line":1695},[931,9621,9622],{},"      \u003Cstring>com.cloudflare.warp.CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[931,9624,9625],{"class":933,"line":2388},[931,9626,9627],{},"      \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[931,9629,9630],{"class":933,"line":2393},[931,9631,9632],{},"      \u003Cstring>Cloudflare Ltd.\u003C\u002Fstring>\n",[931,9634,9635],{"class":933,"line":2399},[931,9636,9637],{},"      \u003Ckey>PayloadType\u003C\u002Fkey>\n",[931,9639,9640],{"class":933,"line":3354},[931,9641,9642],{},"      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n",[931,9644,9645],{"class":933,"line":3365},[931,9646,9647],{},"      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[931,9649,9650],{"class":933,"line":3370},[931,9651,9652],{},"      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[931,9654,9655],{"class":933,"line":3378},[931,9656,9657],{},"      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[931,9659,9660],{"class":933,"line":3907},[931,9661,9662],{},"      \u003Cinteger>1\u003C\u002Finteger>\n",[931,9664,9665],{"class":933,"line":3913},[931,9666,9667],{},"      \u003Ckey>configs\u003C\u002Fkey>\n",[931,9669,9670],{"class":933,"line":3922},[931,9671,9672],{},"      \u003Carray>\n",[931,9674,9675],{"class":933,"line":4573},[931,9676,9677],{},"        \u003Cdict>\n",[931,9679,9680],{"class":933,"line":5029},[931,9681,9682],{},"          \u003Ckey>organization\u003C\u002Fkey>\n",[931,9684,9685],{"class":933,"line":5038},[931,9686,9687],{},"          \u003Cstring>your-team-name-1\u003C\u002Fstring>\n",[931,9689,9690],{"class":933,"line":5046},[931,9691,9692],{},"          \u003Ckey>display_name\u003C\u002Fkey>\n",[931,9694,9695],{"class":933,"line":5054},[931,9696,9697],{},"          \u003Cstring>Team 1\u003C\u002Fstring>\n",[931,9699,9700],{"class":933,"line":5059},[931,9701,9702],{},"        \u003C\u002Fdict>\n",[931,9704,9705],{"class":933,"line":5066},[931,9706,9677],{},[931,9708,9709],{"class":933,"line":5074},[931,9710,9682],{},[931,9712,9713],{"class":933,"line":5082},[931,9714,9715],{},"          \u003Cstring>your-team-name-2\u003C\u002Fstring>\n",[931,9717,9718],{"class":933,"line":5093},[931,9719,9692],{},[931,9721,9722],{"class":933,"line":5101},[931,9723,9724],{},"          \u003Cstring>Team 2\u003C\u002Fstring>\n",[931,9726,9727],{"class":933,"line":5108},[931,9728,9702],{},[931,9730,9732],{"class":933,"line":9731},34,[931,9733,9734],{},"      \u003C\u002Farray>\n",[931,9736,9738],{"class":933,"line":9737},35,[931,9739,9740],{},"    \u003C\u002Fdict>\n",[931,9742,9744],{"class":933,"line":9743},36,[931,9745,9746],{},"  \u003C\u002Farray>\n",[931,9748,9750],{"class":933,"line":9749},37,[931,9751,9752],{},"  \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[931,9754,9756],{"class":933,"line":9755},38,[931,9757,9758],{},"  \u003Cstring>Cloudflare WARP\u003C\u002Fstring>\n",[931,9760,9762],{"class":933,"line":9761},39,[931,9763,9764],{},"  \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[931,9766,9768],{"class":933,"line":9767},40,[931,9769,9770],{},"  \u003Cstring>cloudflare_warp\u003C\u002Fstring>\n",[931,9772,9774],{"class":933,"line":9773},41,[931,9775,9776],{},"  \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[931,9778,9780],{"class":933,"line":9779},42,[931,9781,9782],{},"  \u003Cstring>Cloudflare, Ltd.\u003C\u002Fstring>\n",[931,9784,9786],{"class":933,"line":9785},43,[931,9787,9788],{},"  \u003Ckey>PayloadRemovalDisallowed\u003C\u002Fkey>\n",[931,9790,9792],{"class":933,"line":9791},44,[931,9793,9794],{},"  \u003Cfalse\u002F>\n",[931,9796,9798],{"class":933,"line":9797},45,[931,9799,9800],{},"  \u003Ckey>PayloadScope\u003C\u002Fkey>\n",[931,9802,9804],{"class":933,"line":9803},46,[931,9805,9806],{},"  \u003Cstring>System\u003C\u002Fstring>\n",[931,9808,9810],{"class":933,"line":9809},47,[931,9811,9812],{},"  \u003Ckey>PayloadType\u003C\u002Fkey>\n",[931,9814,9816],{"class":933,"line":9815},48,[931,9817,9818],{},"  \u003Cstring>Configuration\u003C\u002Fstring>\n",[931,9820,9822],{"class":933,"line":9821},49,[931,9823,9824],{},"  \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[931,9826,9828],{"class":933,"line":9827},50,[931,9829,9830],{},"  \u003Cstring>2B7763B8-64F6-41EB-AA5E-7761651B8131\u003C\u002Fstring>\n",[931,9832,9834],{"class":933,"line":9833},51,[931,9835,9836],{},"  \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[931,9838,9840],{"class":933,"line":9839},52,[931,9841,9842],{},"  \u003Cinteger>1\u003C\u002Finteger>\n",[931,9844,9846],{"class":933,"line":9845},53,[931,9847,9848],{},"\u003C\u002Fdict>\n",[931,9850,9852],{"class":933,"line":9851},54,[931,9853,9854],{},"\u003C\u002Fplist>\n",[485,9856,9857,9867,9879,9889,9895,9911,9924,9943,9959],{},[488,9858,9859,9860,575,9863,9866],{},"Reemplace ",[495,9861,9862],{},"your-team-name-1",[495,9864,9865],{},"your-team-name-2"," con sus respectivos nombres de equipo de Cloudflare Zero Trust.",[488,9868,3399,9869,9872,9873,9876,9877,461],{},[495,9870,9871],{},"uuidgen"," en su Terminal para generar UUID únicos y utilícelos para reemplazar los valores de marcador de posición ",[495,9874,9875],{},"PayloadUUID"," en el archivo ",[495,9878,9543],{},[488,9880,9881,9882,9885,9886,9888],{},"Asegúrese de que la cadena ",[495,9883,9884],{},"PayloadIdentifier"," también contenga el ",[495,9887,9875],{}," actualizado para mantener el perfil diferenciado.",[488,9890,9891,9892,9894],{},"Guarde su archivo ",[495,9893,9543],{}," editado.",[488,9896,3937,9897,9900,9901,9904,9905,9907],{},[441,9898,9899],{},"Ajustes del Sistema"," en su Mac, busque ",[441,9902,9903],{},"Perfiles"," y selecciónelo.",[1879,9906],{},[433,9908],{"alt":9909,"src":9910},"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",[488,9912,9913,9914,9917,9918,9920],{},"Haga clic en ",[441,9915,9916],{},"Instalar, ver o eliminar..."," para comenzar a agregar su nuevo perfil de configuración.",[1879,9919],{},[433,9921],{"alt":9922,"src":9923},"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",[488,9925,9926,9927,9929,9930,9932,9933,9935,9939],{},"Haga clic en el icono ",[441,9928,714],{}," (más) en la esquina inferior izquierda y seleccione su archivo ",[495,9931,9543],{}," guardado.",[1879,9934],{},[433,9936],{"alt":9937,"src":9938},"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,9940],{"alt":9941,"src":9942},"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",[488,9944,9945,9946,9948,9949,9952,9953,9955],{},"Seleccione ",[441,9947,1718],{}," y haga clic en ",[441,9950,9951],{},"Instalar"," para aplicar la configuración.",[1879,9954],{},[433,9956],{"alt":9957,"src":9958},"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",[488,9960,9961,9962,9964],{},"Reinicie su cliente Cloudflare WARP. Ahora debería ver el conmutador de múltiples perfiles en la interfaz de usuario:",[1879,9963],{},[433,9965],{"alt":9966,"src":9967},"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",[474,9969,2569],{"id":2568},[430,9971,9972],{},"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.",[474,9974,4030],{"id":1610},[485,9976,9977,9984,9991,9998],{},[488,9978,9979],{},[444,9980,9983],{"href":9981,"rel":9982},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002F#prepare-file-for-mdm-deployment",[448],"Managed Deployment Preparation",[488,9985,9986],{},[444,9987,9990],{"href":9988,"rel":9989},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002Fswitch-organizations\u002F",[448],"Switch Between Zero Trust Organizations",[488,9992,9993],{},[444,9994,9997],{"href":9995,"rel":9996},"https:\u002F\u002Fblog.cloudflare.com\u002Fintroducing-warp-connector-paving-the-path-to-any-to-any-connectivity-2\u002F",[448],"Introducing WARP Connector: Paving the Path to Any-to-Any Connectivity",[488,9999,10000],{},[444,10001,10004],{"href":10002,"rel":10003},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002F",[448],"Cloudflare One Client Documentation",[1639,10006,10007],{},"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":425,"searchDepth":1061,"depth":1068,"links":10009},[10010,10011,10012,10013,10014],{"id":9503,"depth":1061,"text":9504},{"id":9517,"depth":1061,"text":9518},{"id":9533,"depth":1061,"text":9534},{"id":2568,"depth":1061,"text":2569},{"id":1610,"depth":1061,"text":4030},[2602,9482],"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":10021,"robots":1693,"sitemap":10023},[10022],{"@type":1672,"headline":2516,"description":10017},{"lastmod":10016},{"title":10019,"description":10017,"ogTitle":2516,"ogDescription":10017,"twitterTitle":2516,"twitterDescription":10017},"es\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",[10027,1718,10028,2645],"macOS","MDM","aj2L0bjhdmy_g2uOsHqYyd8bbtwlwGp1vCLs4OV9J8U",{"id":10031,"title":8323,"author":425,"body":10032,"category":10406,"date":10407,"description":10408,"extension":1664,"image":10409,"imageAlt":10410,"isPublished":1064,"meta":10411,"minRead":1923,"navigation":1064,"path":73,"seo":10415,"stem":10416,"tags":10417,"updatedAt":1702,"__hash__":10422},"article\u002Fes\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them.md",{"type":427,"value":10033,"toc":10396},[10034,10038,10048,10058,10119,10125,10129,10132,10140,10146,10150,10204,10219,10225,10228,10280,10284,10287,10294,10297,10308,10312,10357,10360,10377,10379,10390,10393],[474,10035,10037],{"id":10036},"qué-es-una-habilidad-de-un-agente-de-ia","¿Qué es una habilidad de un agente de IA?",[430,10039,10040,10041,10044,10045,10047],{},"Una habilidad de un agente (agent skill) es un ",[441,10042,10043],{},"conjunto de instrucciones"," reutilizable: un procedimiento estandarizado que le indica al agente cómo realizar correctamente un tipo específico de tarea. Consiste en un único archivo en formato Markdown, ",[495,10046,8319],{},", y puede incluir cualquier otro archivo que requiera la tarea, como documentos de referencia, plantillas o scripts ejecutables.",[430,10049,10050,10051,889],{},"Tomemos como ejemplo la habilidad ",[444,10052,10055],{"href":10053,"rel":10054},"https:\u002F\u002Fgithub.com\u002Fmattpocock\u002Fskills\u002Fblob\u002F733d312884b3878a9a9cff693c5886943753a741\u002Fskills\u002Fproductivity\u002Fgrill-me\u002FSKILL.md",[448],[495,10056,10057],{},"grill-me",[923,10059,10061],{"className":2202,"code":10060,"language":2204,"meta":425,"style":425},"---\nname: grill-me\ndescription: Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Use when user wants to stress-test a plan, get grilled on their design, or mentions \"grill me\".\n---\n\nInterview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.\n\nAsk the questions one at a time.\n\nIf a question can be answered by exploring the codebase, explore the codebase instead.\n",[495,10062,10063,10068,10078,10088,10092,10096,10101,10105,10110,10114],{"__ignoreMap":425},[931,10064,10065],{"class":933,"line":934},[931,10066,10067],{"class":1041},"---\n",[931,10069,10070,10073,10075],{"class":933,"line":1061},[931,10071,10072],{"class":1354},"name",[931,10074,889],{"class":945},[931,10076,10077],{"class":1045}," grill-me\n",[931,10079,10080,10083,10085],{"class":933,"line":1068},[931,10081,10082],{"class":1354},"description",[931,10084,889],{"class":945},[931,10086,10087],{"class":1045}," Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Use when user wants to stress-test a plan, get grilled on their design, or mentions \"grill me\".\n",[931,10089,10090],{"class":933,"line":1075},[931,10091,10067],{"class":1041},[931,10093,10094],{"class":933,"line":1923},[931,10095,1065],{"emptyLinePlaceholder":1064},[931,10097,10098],{"class":933,"line":1928},[931,10099,10100],{"class":1045},"Interview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.\n",[931,10102,10103],{"class":933,"line":1934},[931,10104,1065],{"emptyLinePlaceholder":1064},[931,10106,10107],{"class":933,"line":2270},[931,10108,10109],{"class":1045},"Ask the questions one at a time.\n",[931,10111,10112],{"class":933,"line":2281},[931,10113,1065],{"emptyLinePlaceholder":1064},[931,10115,10116],{"class":933,"line":2377},[931,10117,10118],{"class":1045},"If a question can be answered by exploring the codebase, explore the codebase instead.\n",[430,10120,10121,10122,10124],{},"Un archivo ",[495,10123,8319],{}," contiene un pequeño bloque de metadatos y un cuerpo de instrucciones. Los metadatos incluyen el nombre y la descripción de la habilidad, que el agente de IA carga al iniciarse.",[474,10126,10128],{"id":10127},"cómo-funcionan-las-habilidades-de-agentes-de-ia-divulgación-progresiva","Cómo funcionan las habilidades de agentes de IA: divulgación progresiva",[430,10130,10131],{},"Inicialmente, solo se cargan en el contexto el nombre y la descripción de la habilidad. Cuando la solicitud del usuario coincide con la descripción de una habilidad, el cuerpo completo de instrucciones se carga en el mismo contexto.",[430,10133,10134,10135,461],{},"Veamos cómo se utiliza la habilidad ",[444,10136,10138],{"href":10053,"rel":10137},[448],[495,10139,10057],{},[430,10141,10142],{},[433,10143],{"alt":10144,"src":10145},"Diagrama de secuencia que ilustra el mecanismo de divulgación progresiva para la ejecución de habilidades de agentes de IA","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FAI%20Agent%20Skills%20What%20They%20Are%20%26%20How%20to%20Create%20Them\u002Fai-agent-skill-progressive-disclosure-sequence-diagram.webp",[879,10147,10149],{"id":10148},"paso-a-paso","Paso a paso",[533,10151,10152,10158,10164,10170,10176,10188,10198],{},[488,10153,10154,10157],{},[441,10155,10156],{},"Solicitud (Request)"," — El usuario le pide algo al agente (\"pon a prueba el diseño de mi flujo de trabajo\").",[488,10159,10160,10163],{},[441,10161,10162],{},"Prompt de selección"," — La solicitud del usuario, junto con las descripciones de todas las habilidades disponibles, se envía al LLM.",[488,10165,10166,10169],{},[441,10167,10168],{},"Selección del LLM"," — El LLM compara la solicitud con cada descripción y devuelve la habilidad o habilidades que coinciden.",[488,10171,10172,10175],{},[441,10173,10174],{},"Confirmación"," — El agente muestra la habilidad propuesta al usuario, quien confirma (or rechaza\u002Fajusta) la elección.",[488,10177,10178,10181,10182,10185,10186,461],{},[441,10179,10180],{},"Carga de instrucciones"," — El agente obtiene las instrucciones ",[899,10183,10184],{},"completas"," de la habilidad confirmada: el cuerpo de ",[495,10187,8319],{},[488,10189,10190,10193,10194,10197],{},[441,10191,10192],{},"Prompt de ejecución"," — La solicitud del usuario ",[441,10195,10196],{},"junto con las instrucciones de la habilidad seleccionada"," se envía al LLM.",[488,10199,10200,10203],{},[441,10201,10202],{},"Respuesta"," — El LLM genera el resultado, que en este caso es la primera pregunta del interrogatorio.",[430,10205,10206,10207,10214,10215,10218],{},"Ahora vamos a usar ",[444,10208,10211],{"href":10209,"rel":10210},"https:\u002F\u002Fgithub.com\u002Fcoleam00\u002Fexcalidraw-diagram-skill",[448],[495,10212,10213],{},"excalidraw-diagram-skill"," para ilustrar cómo se utiliza una ",[899,10216,10217],{},"skill"," con un documento de referencia:",[430,10220,10221],{},[433,10222],{"alt":10223,"src":10224},"Diagrama de secuencia que muestra a un agente de IA ejecutando una habilidad cargada con archivos de referencia y plantillas externas","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FAI%20Agent%20Skills%20What%20They%20Are%20%26%20How%20to%20Create%20Them\u002Fai-agent-skill-with-reference-files-sequence-diagram.webp",[879,10226,10149],{"id":10227},"paso-a-paso-1",[533,10229,10230,10235,10239,10248,10252,10264,10271],{},[488,10231,10232,10234],{},[441,10233,10156],{}," — El usuario le pide algo al agente (\"dibuja el flujo de trabajo del proceso de despliegue\").",[488,10236,10237,10163],{},[441,10238,10162],{},[488,10240,10241,10243,10244,10247],{},[441,10242,10168],{}," — El LLM compara la solicitud con cada descripción y devuelve la habilidad o habilidades que coinciden. En este caso, \"dibuja el flujo de trabajo\" coincide con la descripción de ",[495,10245,10246],{},"excalidraw-diagram",", por lo que se selecciona.",[488,10249,10250,10175],{},[441,10251,10174],{},[488,10253,10254,10181,10256,10185,10258,10260,10261,10263],{},[441,10255,10180],{},[899,10257,10184],{},[495,10259,8319],{}," y cualquier archivo de referencia (para ",[495,10262,10246],{},", esto incluye la paleta de colores, el esquema JSON y las plantillas de elementos).",[488,10265,10266,10193,10268,10270],{},[441,10267,10192],{},[441,10269,10196],{}," se envía al LLM. El modelo dispone ahora de la metodología detallada que necesita.",[488,10272,10273,10275,10276,10279],{},[441,10274,10202],{}," — El LLM genera el resultado (un archivo JSON ",[495,10277,10278],{},".excalidraw","), que el agente devuelve al usuario.",[474,10281,10283],{"id":10282},"habilidades-de-agentes-de-ia-frente-a-herramientas-y-mcp","Habilidades de agentes de IA frente a herramientas y MCP",[430,10285,10286],{},"Las habilidades no sustituyen a los prompts, a las herramientas ni al Model Context Protocol (MCP). Las herramientas y las integraciones MCP amplían el alcance de un agente hacia sistemas externos (como consultar una base de datos, llamar a una API, etc.). Las habilidades, por su parte, profundizan el conocimiento del agente para completar una tarea.",[430,10288,10289,10290,10293],{},"Un MCP como el ",[444,10291,10292],{"href":395},"Configuración de NetSuite MCP en ChatGPT y Claude"," permite que un agente responda a preguntas de los usuarios accediendo a datos financieros y operativos en tiempo real en NetSuite. A su vez, una habilidad de informes operativos de NetSuite guiará al agente sobre cómo redactar ese informe y presentar la respuesta de forma clara al usuario.",[430,10295,10296],{},"Algunos escenarios habituales para usar habilidades son:",[485,10298,10299,10302,10305],{},[488,10300,10301],{},"Flujos de trabajo de varios pasos",[488,10303,10304],{},"Procesamiento de documentos, como la extracción de datos de archivos PDF",[488,10306,10307],{},"Estándares de generación de código",[474,10309,10311],{"id":10310},"cómo-crear-habilidades-de-agentes-de-ia","Cómo crear habilidades de agentes de IA",[533,10313,10314,10324,10338,10347],{},[488,10315,10316,10319,10320,10323],{},[441,10317,10318],{},"Crea una carpeta"," con el nombre de la habilidad (por ejemplo, ",[495,10321,10322],{},"netsuite-operation-report\u002F",").",[488,10325,10326,10331,10332,10334,10335,10337],{},[441,10327,10328,10329],{},"Escribe ",[495,10330,8319],{}," con un campo ",[495,10333,10072],{},", una ",[495,10336,10082],{}," clara y concisa, y un cuerpo de instrucciones breve (menos de 200 palabras).",[488,10339,10340,10343,10344,10346],{},[441,10341,10342],{},"Añade recursos"," que la tarea necesite (documentos de referencia, plantillas, scripts). Mantén el archivo ",[495,10345,8319],{}," corto y enlaza los detalles externos.",[488,10348,10349,10352,10353,10356],{},[441,10350,10351],{},"Instálala"," en un lugar donde los agentes puedan descubrirla. Consulta ",[444,10354,10355],{"href":359},"Centralizar las habilidades de los agentes"," para saber cómo gestionar habilidades en múltiples agentes.",[430,10358,10359],{},"Consejos para escribir buenas habilidades:",[485,10361,10362,10365,10371,10374],{},[488,10363,10364],{},"Escribe la descripción pensando en el disparador del sistema (trigger), no en un lector humano.",[488,10366,10367,10368,10370],{},"Mantén ",[495,10369,8319],{}," ligero (menos de 200 palabras). Describe el caso general en el cuerpo e introduce los casos extremos en documentos de referencia.",[488,10372,10373],{},"Utiliza scripts para cualquier tarea determinista. No le pidas al LLM que realice operaciones aritméticas.",[488,10375,10376],{},"Controla las versiones. Guárdalo en tu repositorio de git.",[474,10378,2569],{"id":2568},[430,10380,10381,10382,10385,10386,10389],{},"A diferencia de las herramientas y MCP, que definen ",[899,10383,10384],{},"con qué conectarse",", las habilidades de los agentes empaquetan ",[899,10387,10388],{},"cómo hacer el trabajo",". Son un complemento esencial, no un sustituto.",[430,10391,10392],{},"Al aprovechar la divulgación progresiva, las habilidades mantienen la ventana de contexto del agente limpia y eficiente, cargando instrucciones detalladas, documentos de referencia y scripts ejecutables únicamente cuando la solicitud del usuario los activa.",[1639,10394,10395],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":425,"searchDepth":1061,"depth":1068,"links":10397},[10398,10399,10403,10404,10405],{"id":10036,"depth":1061,"text":10037},{"id":10127,"depth":1061,"text":10128,"children":10400},[10401,10402],{"id":10148,"depth":1068,"text":10149},{"id":10227,"depth":1068,"text":10149},{"id":10282,"depth":1061,"text":10283},{"id":10310,"depth":1061,"text":10311},{"id":2568,"depth":1061,"text":2569},[1659],"2026-06-26","Descubre qué son las habilidades de los agentes de IA, cómo funciona la divulgación progresiva y aprende a crear flujos de trabajo reutilizables y eficaces.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FAI%20Agent%20Skills%20What%20They%20Are%20%26%20How%20to%20Create%20Them\u002FES-AI-Agent-Skills-What-They-Are-%26-How-to-Create-Them.webp","Guía de habilidades de agentes de IA: Crea flujos de trabajo",{"schemaOrg":10412,"robots":1693,"sitemap":10414},[10413],{"@type":1672,"headline":8323,"description":10408},{"lastmod":10407},{"title":10410,"description":10408,"ogTitle":8323,"ogDescription":10408,"twitterTitle":8323,"twitterDescription":10408},"es\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",[10418,10419,10420,10421],"Agentes de IA","Habilidades de Agente","Flujos de Trabajo Reutilizables","Tutorial de IA","h3yYdb1PxlW2yIGKr5aTDiwHSQ9Wz-ia-nw8HRNNffk",{"id":10424,"title":1729,"author":425,"body":10425,"category":11017,"date":11018,"description":11019,"extension":1664,"image":11020,"imageAlt":11021,"isPublished":1064,"meta":11022,"minRead":1928,"navigation":1064,"path":85,"seo":11036,"stem":11038,"tags":11039,"updatedAt":1702,"__hash__":11043},"article\u002Fes\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server.md",{"type":427,"value":10426,"toc":11006},[10427,10431,10434,10437,10441,10445,10448,10461,10467,10470,10495,10502,10529,10535,10540,10554,10565,10571,10576,10592,10596,10599,10618,10624,10627,10638,10648,10659,10689,10693,10703,10712,10722,10735,10742,10752,10758,10786,10802,10806,10812,10824,10829,10862,10866,10869,10883,10889,10952,10954,10998,11000,11003],[474,10428,10430],{"id":10429},"por-qué-alojar-hermes-agent-en-un-vps-remoto","¿Por qué alojar Hermes Agent en un VPS remoto?",[430,10432,10433],{},"Dado que Hermes Agent es capaz de ejecutar tareas en segundo plano, programar tareas y responder a llamadas de webhooks, necesitamos una máquina que esté activa las 24 horas, los 7 días de la semana. Las computadoras locales pueden sufrir cortes de energía, desconectarse de Internet o agotar sus recursos de hardware. Un servidor remoto garantiza un 99% de disponibilidad y facilita la escalabilidad de los recursos de cómputo cuando sea necesario.",[430,10435,10436],{},"Existen varios proveedores de servidores privados virtuales (VPS) económicos en el mercado, como Hetzner, Hostinger y Contabo. Hemos estado utilizando Contabo por un tiempo y, hasta ahora, todo ha funcionado de maravilla.",[474,10438,10440],{"id":10439},"cómo-configurar-hermes-agent-en-un-vps-linux","Cómo configurar Hermes Agent en un VPS Linux",[879,10442,10444],{"id":10443},"paso-1-conectarse-al-vps","Paso 1: Conectarse al VPS",[430,10446,10447],{},"Abra la terminal y conéctese por SSH a su servidor remoto:",[923,10449,10451],{"className":1032,"code":10450,"language":1034,"meta":425,"style":425},"ssh root@your_server_ip\n",[495,10452,10453],{"__ignoreMap":425},[931,10454,10455,10458],{"class":933,"line":934},[931,10456,10457],{"class":1041},"ssh",[931,10459,10460],{"class":1045}," root@your_server_ip\n",[430,10462,10463],{},[433,10464],{"alt":10465,"src":10466},"Conexión SSH al servidor Linux VPS en la terminal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fvps-terminal-ssh-connection.webp",[430,10468,10469],{},"Asegúrese de que los paquetes de su servidor estén actualizados:",[923,10471,10473],{"className":1032,"code":10472,"language":1034,"meta":425,"style":425},"sudo apt update && sudo apt upgrade -y\n",[495,10474,10475],{"__ignoreMap":425},[931,10476,10477,10479,10481,10484,10486,10488,10490,10493],{"class":933,"line":934},[931,10478,1891],{"class":1041},[931,10480,4475],{"class":1045},[931,10482,10483],{"class":1045}," update",[931,10485,5470],{"class":945},[931,10487,4396],{"class":1041},[931,10489,4475],{"class":1045},[931,10491,10492],{"class":1045}," upgrade",[931,10494,4508],{"class":1045},[430,10496,10497,10498,10501],{},"Añada un nuevo usuario, ",[495,10499,10500],{},"hermes",", o el nombre de usuario de su preferencia:",[923,10503,10505],{"className":1032,"code":10504,"language":1034,"meta":425,"style":425},"sudo adduser hermes \nsudo passwd hermes\n",[495,10506,10507,10519],{"__ignoreMap":425},[931,10508,10509,10511,10514,10517],{"class":933,"line":934},[931,10510,1891],{"class":1041},[931,10512,10513],{"class":1045}," adduser",[931,10515,10516],{"class":1045}," hermes",[931,10518,2025],{"class":941},[931,10520,10521,10523,10526],{"class":933,"line":1061},[931,10522,1891],{"class":1041},[931,10524,10525],{"class":1045}," passwd",[931,10527,10528],{"class":1045}," hermes\n",[430,10530,10531,10532,889],{},"Desactive el inicio de sesión con contraseña para el usuario ",[495,10533,10534],{},"root",[533,10536,10537],{},[488,10538,10539],{},"Abra el archivo de configuración de SSH:",[923,10541,10543],{"className":1032,"code":10542,"language":1034,"meta":425,"style":425},"sudo nano \u002Fetc\u002Fssh\u002Fsshd_config\n",[495,10544,10545],{"__ignoreMap":425},[931,10546,10547,10549,10551],{"class":933,"line":934},[931,10548,1891],{"class":1041},[931,10550,2311],{"class":1045},[931,10552,10553],{"class":1045}," \u002Fetc\u002Fssh\u002Fsshd_config\n",[533,10555,10556],{"start":1061},[488,10557,10558,10559,10562,10563,889],{},"Busque la línea ",[495,10560,10561],{},"PermitRootLogin"," y cambie su valor a ",[495,10564,680],{},[923,10566,10569],{"className":10567,"code":10568,"language":4643,"meta":425},[4641],"PermitRootLogin no\n",[495,10570,10568],{"__ignoreMap":425},[533,10572,10573],{"start":1068},[488,10574,10575],{},"Guarde el archivo y reinicie el servicio SSH:",[923,10577,10579],{"className":1032,"code":10578,"language":1034,"meta":425,"style":425},"sudo systemctl restart ssh\n",[495,10580,10581],{"__ignoreMap":425},[931,10582,10583,10585,10587,10589],{"class":933,"line":934},[931,10584,1891],{"class":1041},[931,10586,1894],{"class":1045},[931,10588,1897],{"class":1045},[931,10590,10591],{"class":1045}," ssh\n",[879,10593,10595],{"id":10594},"paso-2-instalar-hermes-agent","Paso 2: Instalar Hermes Agent",[430,10597,10598],{},"Ejecute el siguiente comando:",[923,10600,10602],{"className":1032,"code":10601,"language":1034,"meta":425,"style":425},"curl -fsSL https:\u002F\u002Fhermes-agent.nousresearch.com\u002Finstall.sh | bash\n",[495,10603,10604],{"__ignoreMap":425},[931,10605,10606,10608,10610,10613,10615],{"class":933,"line":934},[931,10607,2989],{"class":1041},[931,10609,4387],{"class":1045},[931,10611,10612],{"class":1045}," https:\u002F\u002Fhermes-agent.nousresearch.com\u002Finstall.sh",[931,10614,4393],{"class":945},[931,10616,10617],{"class":1041}," bash\n",[430,10619,10620],{},[433,10621],{"alt":10622,"src":10623},"Ejecución del script de instalación de Hermes Agent en la terminal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-agent-installation-terminal.webp",[430,10625,10626],{},"Una vez instalado, verifique la instalación escribiendo:",[923,10628,10630],{"className":1032,"code":10629,"language":1034,"meta":425,"style":425},"hermes --version\n",[495,10631,10632],{"__ignoreMap":425},[931,10633,10634,10636],{"class":933,"line":934},[931,10635,10500],{"class":1041},[931,10637,3617],{"class":1045},[430,10639,1830,10640,10643,10644],{},[495,10641,10642],{},"hermes setup"," para configurar el agente Hermes:\n",[433,10645],{"alt":10646,"src":10647},"Ejecución del comando hermes setup en la terminal para iniciar la configuración","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-agent-setup-wizard.webp",[430,10649,10650,10651,10654,10655],{},"Seleccione un proveedor de LLM, comience con ",[495,10652,10653],{},"DeepSeek"," y añada otros más tarde.\n",[433,10656],{"alt":10657,"src":10658},"Selección de DeepSeek como proveedor de LLM en la configuración de Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-llm-provider-selection.webp",[430,10660,10661,10662,1368,10664,10668,10672,10673,10676,10677,10672,10681,10684,10685],{},"Introduzca la clave de API de ",[495,10663,10653],{},[433,10665],{"alt":10666,"src":10667},"Introducción de la clave de API de DeepSeek en la terminal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-enter-api-key.webp",[433,10669],{"alt":10670,"src":10671},"Confirmación exitosa de la clave de API del proveedor de LLM","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-api-key-success.webp","\nSeleccione ",[495,10674,10675],{},"local machine"," para ejecutar Hermes Agent:\n",[433,10678],{"alt":10679,"src":10680},"Selección de local machine para el entorno de ejecución de Hermes Agent","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-select-local-machine.webp",[495,10682,10683],{},"Telegram"," en los canales de comunicación. Se pueden configurar otros canales más adelante.\n",[433,10686],{"alt":10687,"src":10688},"Selección de Telegram como canal de comunicación en la configuración de Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-select-telegram-channel.webp",[879,10690,10692],{"id":10691},"paso-3-integración-con-telegram","Paso 3: Integración con Telegram",[430,10694,9945,10695,10698,10699],{},[495,10696,10697],{},"[2]"," para usar el bot de Telegram.\n",[433,10700],{"alt":10701,"src":10702},"Selección de la opción para configurar la integración del bot de Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-bot-integration-option.webp",[430,10704,2166,10705,10707,10708],{},[495,10706,10683],{}," y busque 'BotFather'.\n",[433,10709],{"alt":10710,"src":10711},"Búsqueda de BotFather en la aplicación Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-search-botfather.webp",[430,10713,9913,10714,10717,10718],{},[495,10715,10716],{},"Open"," para abrir 'BotFather'.\n",[433,10719],{"alt":10720,"src":10721},"Apertura de la interfaz de chat con BotFather en Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-open-botfather-chat.webp",[430,10723,9913,10724,10727,10728,1796,10731],{},[495,10725,10726],{},"Create a New Bot"," (o use ",[495,10729,10730],{},"\u002Fnewbot",[433,10732],{"alt":10733,"src":10734},"Envío del comando newbot a BotFather para crear un nuevo bot de Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-create-new-bot.webp",[430,10736,10737,10738],{},"Complete los nombres y cree el bot.\n",[433,10739],{"alt":10740,"src":10741},"Configuración del nombre y nombre de usuario para el nuevo bot de Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-bot-details-configured.webp",[430,10743,9913,10744,10747,10748],{},[495,10745,10746],{},"Copy"," para copiar el token y péguelo de nuevo en la terminal.\n",[433,10749],{"alt":10750,"src":10751},"Copia del token de la API HTTP del bot de Telegram recién creado","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-copy-http-api-token.webp",[430,10753,10754,10755,10757],{},"Busque el ID de su cuenta de usuario de ",[495,10756,10683],{}," y agréguelo a la lista de usuarios permitidos ('Allowed user list'):",[485,10759,10760,10770,10783],{},[488,10761,10762,10763,10765,10766],{},"Busque '@raw_data_bot' en ",[495,10764,10683],{},".\n",[433,10767],{"alt":10768,"src":10769},"Búsqueda de raw data bot en Telegram para obtener el ID de usuario","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-search-raw-data-bot.webp",[488,10771,9913,10772,10775,10776,10765,10779],{},[495,10773,10774],{},"RawDataBot"," y luego en el botón Start (Iniciar). El ID de usuario se mostrará después de ",[495,10777,10778],{},"P.S. Your ID:",[433,10780],{"alt":10781,"src":10782},"Inicio de RawDataBot para ver el ID de la cuenta de usuario","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-raw-data-bot-user-id.webp",[488,10784,10785],{},"Copie el ID de usuario y péguelo en la terminal.",[430,10787,10788,10789,10793,10794,10798],{},"Dado que estamos ejecutando esto en la nube, queremos que el servicio se inicie automáticamente.\n",[433,10790],{"alt":10791,"src":10792},"Configuración de la opción de inicio automático para el servicio systemd de Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-autostart-service-option.webp","\nDeje todo con los valores predeterminados:\n",[433,10795],{"alt":10796,"src":10797},"Mantenimiento de las configuraciones de instalación por defecto en la terminal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-leave-defaults-1.webp",[433,10799],{"alt":10800,"src":10801},"Finalización de las opciones de configuración por defecto de Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-leave-defaults-2.webp",[474,10803,10805],{"id":10804},"prueba-de-hermes-agent-con-el-bot-de-telegram","Prueba de Hermes Agent con el bot de Telegram",[430,10807,10808,10809,889],{},"Ejecute el siguiente comando para iniciar ",[495,10810,10811],{},"hermes gateway",[923,10813,10815],{"className":1032,"code":10814,"language":1034,"meta":425,"style":425},"hermes gateway\n",[495,10816,10817],{"__ignoreMap":425},[931,10818,10819,10821],{"class":933,"line":934},[931,10820,10500],{"class":1041},[931,10822,10823],{"class":1045}," gateway\n",[430,10825,2166,10826,10828],{},[495,10827,10683],{}," y añada el bot creado, '@tech_cloud_hermes_bot', a sus chats.",[485,10830,10831,10843,10853],{},[488,10832,10833,10834,10836,10837,10765,10839],{},"Escriba '\u002Fnew' en ",[495,10835,10683],{}," para iniciar una nueva sesión de ",[495,10838,1714],{},[433,10840],{"alt":10841,"src":10842},"Escritura del comando new en Telegram para iniciar una nueva sesión de Hermes Agent","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-new-session.webp",[488,10844,10845,10846,10848,10849],{},"Escribir ",[495,10847,1499],{}," listará todos los comandos disponibles.\n",[433,10850],{"alt":10851,"src":10852},"Escritura de commands en Telegram para ver las instrucciones disponibles de Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-commands-list.webp",[488,10854,10845,10855,10857,10858],{},[495,10856,1529],{}," le mostrará una lista de los LLM disponibles.\n",[433,10859],{"alt":10860,"src":10861},"Escritura de model en Telegram para ver la lista de LLM activos","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-model-selection.webp",[474,10863,10865],{"id":10864},"ejecución-de-hermes-gateway-como-un-servicio-en-segundo-plano","Ejecución de Hermes Gateway como un servicio en segundo plano",[430,10867,10868],{},"Cree el archivo de servicio:",[923,10870,10872],{"className":2300,"code":10871,"language":2302,"meta":425,"style":425},"sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-gateway.service\n",[495,10873,10874],{"__ignoreMap":425},[931,10875,10876,10878,10880],{"class":933,"line":934},[931,10877,1891],{"class":1041},[931,10879,2311],{"class":1045},[931,10881,10882],{"class":1045}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-gateway.service\n",[430,10884,10885,10886,10888],{},"Pegue lo siguiente, reemplazando ",[495,10887,10500],{}," en '\u002Fhome\u002Fhermes' con su nombre de usuario preferido:",[923,10890,10892],{"className":2326,"code":10891,"language":2328,"meta":425,"style":425},"[Unit]\nDescription=Hermes Gateway\nAfter=network.target\n\n[Service]\nUser=hermes\nWorkingDirectory=\u002Fhome\u002Fhermes\nExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes gateway\nRestart=always\nRestartSec=10\nEnvironment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n\n[Install]\nWantedBy=multi-user.target\n",[495,10893,10894,10898,10903,10907,10911,10915,10919,10923,10928,10932,10936,10940,10944,10948],{"__ignoreMap":425},[931,10895,10896],{"class":933,"line":934},[931,10897,2335],{},[931,10899,10900],{"class":933,"line":1061},[931,10901,10902],{},"Description=Hermes Gateway\n",[931,10904,10905],{"class":933,"line":1068},[931,10906,2345],{},[931,10908,10909],{"class":933,"line":1075},[931,10910,1065],{"emptyLinePlaceholder":1064},[931,10912,10913],{"class":933,"line":1923},[931,10914,2354],{},[931,10916,10917],{"class":933,"line":1928},[931,10918,2359],{},[931,10920,10921],{"class":933,"line":1934},[931,10922,2364],{},[931,10924,10925],{"class":933,"line":2270},[931,10926,10927],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes gateway\n",[931,10929,10930],{"class":933,"line":2281},[931,10931,2374],{},[931,10933,10934],{"class":933,"line":2377},[931,10935,2380],{},[931,10937,10938],{"class":933,"line":1695},[931,10939,2385],{},[931,10941,10942],{"class":933,"line":2388},[931,10943,1065],{"emptyLinePlaceholder":1064},[931,10945,10946],{"class":933,"line":2393},[931,10947,2396],{},[931,10949,10950],{"class":933,"line":2399},[931,10951,2402],{},[430,10953,2407],{},[923,10955,10957],{"className":2300,"code":10956,"language":2302,"meta":425,"style":425},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-gateway\nsudo systemctl start hermes-gateway\nsudo systemctl status hermes-gateway\n",[495,10958,10959,10967,10978,10988],{"__ignoreMap":425},[931,10960,10961,10963,10965],{"class":933,"line":934},[931,10962,1891],{"class":1041},[931,10964,1894],{"class":1045},[931,10966,2421],{"class":1045},[931,10968,10969,10971,10973,10975],{"class":933,"line":1061},[931,10970,1891],{"class":1041},[931,10972,1894],{"class":1045},[931,10974,2022],{"class":1045},[931,10976,10977],{"class":1045}," hermes-gateway\n",[931,10979,10980,10982,10984,10986],{"class":933,"line":1068},[931,10981,1891],{"class":1041},[931,10983,1894],{"class":1045},[931,10985,2441],{"class":1045},[931,10987,10977],{"class":1045},[931,10989,10990,10992,10994,10996],{"class":933,"line":1075},[931,10991,1891],{"class":1041},[931,10993,1894],{"class":1045},[931,10995,1918],{"class":1045},[931,10997,10977],{"class":1045},[474,10999,2569],{"id":2568},[430,11001,11002],{},"En este artículo, nos enfocamos en cómo configurar Hermes Agent y usar Telegram para comunicarnos con él. Tener Hermes Agent ejecutándose en un servidor remoto le proporciona un verdadero asistente digital que funciona las 24 horas del día, los 7 días de la semana.",[1639,11004,11005],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":425,"searchDepth":1061,"depth":1068,"links":11007},[11008,11009,11014,11015,11016],{"id":10429,"depth":1061,"text":10430},{"id":10439,"depth":1061,"text":10440,"children":11010},[11011,11012,11013],{"id":10443,"depth":1068,"text":10444},{"id":10594,"depth":1068,"text":10595},{"id":10691,"depth":1068,"text":10692},{"id":10804,"depth":1061,"text":10805},{"id":10864,"depth":1061,"text":10865},{"id":2568,"depth":1061,"text":2569},[1659],"2026-06-19","Despliega Hermes Agent en un VPS remoto para garantizar un soporte 24\u002F7. Sigue nuestra guía paso a paso para integrarlo con tu propio bot de Telegram.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002FES-How%20to%20Setup%20Hermes%20on%20Remote%20Server.webp","Guía paso a paso para desplegar Hermes Agent en un servidor VPS con Linux y conectarlo con un bot de Telegram.",{"schemaOrg":11023,"robots":1693,"sitemap":11035},[11024],{"@type":1672,"name":1729,"description":11019,"image":11020,"step":11025},[11026,11029,11032],{"@type":1675,"name":10444,"text":11027,"image":10466,"url":11028},"Abra la terminal y conéctese por SSH a su servidor remoto: Asegúrese de que los paquetes de su servidor estén actualizados: Añada un nuevo usuario,...","#paso-1-conectarse-al-vps",{"@type":1675,"name":10595,"text":11030,"image":10623,"url":11031},"Ejecute el siguiente comando: Una vez instalado, verifique la instalación escribiendo: Ejecute `hermes setup` para configurar el agente Hermes: Sel...","#paso-2-instalar-hermes-agent",{"@type":1675,"name":10692,"text":11033,"image":10702,"url":11034},"Seleccione `[2]` para usar el bot de Telegram. Diríjase a `Telegram` y busque 'BotFather'. Haga clic en `Open` para abrir 'BotFather'. Haga clic en...","#paso-3-integracin-con-telegram",{"lastmod":11018},{"title":11037,"description":11019,"ogTitle":1729,"ogDescription":11019,"twitterTitle":1729,"twitterDescription":11019},"Instalación de Hermes Agent en VPS: Guía de Telegram Bot","es\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",[1714,11040,11041,11042,8716],"VPS Setup","Telegram Bot","Linux VPS","6D3TvpHyVIeT1fnENGL0sutqYqvCavDEqdOo10qI2fY",{"id":11045,"title":11046,"author":1702,"body":11047,"category":11486,"date":11487,"description":11488,"extension":1664,"image":11489,"imageAlt":11490,"isPublished":1064,"meta":11491,"minRead":2281,"navigation":1064,"path":95,"seo":11495,"stem":11497,"tags":11498,"updatedAt":1702,"__hash__":11502},"article\u002Fes\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude.md","Guía del Conector de IA de NetSuite: Configuración de MCP",{"type":427,"value":11048,"toc":11472},[11049,11052,11066,11070,11081,11097,11101,11232,11236,11290,11294,11346,11350,11354,11360,11365,11369,11375,11387,11391,11401,11417,11421,11427,11432,11436,11442,11445,11449],[430,11050,11051],{},"Oracle NetSuite ha sido durante mucho tiempo una plataforma de planificación de recursos empresariales (ERP) en la nube para pequeñas y medianas empresas. Sin embargo, la interfaz de usuario de su sitio web es famosa por su empinada curva de aprendizaje, una navegación que requiere muchos clics y estructuras de informes rígidas.",[430,11053,11054,11055,11058,11059,1129,11062,11065],{},"Con el reciente lanzamiento de ",[441,11056,11057],{},"NetSuite AI Connector Service",", los usuarios pueden aprovechar el ",[441,11060,11061],{},"Model Context Protocol (MCP)",[441,11063,11064],{},"asistentes de IA (inteligencia artificial)"," para hacer preguntas directamente en lenguaje natural y obtener respuestas en tiempo real de sus datos financieros y operativos.",[474,11067,11069],{"id":11068},"cómo-funciona-el-conector-de-ia-mcp-de-netsuite","Cómo funciona el Conector de IA MCP de NetSuite",[430,11071,11072,11073,11076,11077,11080],{},"El ",[441,11074,11075],{},"MCP de NetSuite"," expone un conjunto de herramientas a la ",[441,11078,11079],{},"IA",", como la ejecución de consultas SuiteQL, la lectura de búsquedas guardadas e informes, o la ejecución de operaciones de registro como la creación de un nuevo registro de cliente. Todas las herramientas están reguladas por los permisos nativos basados en roles de NetSuite.",[430,11082,11083,11084,11086,11087,11089,11090,11093,11094,11096],{},"Cuando un usuario hace una pregunta en lenguaje natural, la ",[441,11085,11079],{}," utiliza el ",[441,11088,11061],{}," para traducir la solicitud en operaciones estructuradas que NetSuite comprende. ",[441,11091,11092],{},"NetSuite"," ejecuta las operaciones utilizando los permisos del usuario y los resultados se devuelven a la ",[441,11095,11079],{}," para su análisis y presentación.",[474,11098,11100],{"id":11099},"guía-de-configuración-de-netsuite-ai-connector","Guía de configuración de NetSuite AI Connector",[533,11102,11103,11155,11169,11178,11185,11192,11213],{},[488,11104,11105,11106,575,11109,11112],{},"Habilitar ",[441,11107,11108],{},"Server SuiteScript",[441,11110,11111],{},"REST Web Services",[533,11113,11114,11124,11150],{},[488,11115,11116,11117,10765,11120],{},"Vaya a ",[899,11118,11119],{},"Configuración > Empresa > Habilitar funciones",[433,11121],{"alt":11122,"src":11123},"Interfaz de configuración de Habilitar Características de Oracle NetSuite para Configuración de Empresa","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-setup-company-enable-features.webp",[488,11125,11126,11127,1368,11130],{},"En la subpestaña ",[441,11128,11129],{},"SuiteCloud",[485,11131,11132,11141],{},[488,11133,11134,11135,10765,11137],{},"En SuiteScript, marque la casilla ",[441,11136,11108],{},[433,11138],{"alt":11139,"src":11140},"Habilitando SuiteScript de Servidor en la pestaña SuiteCloud de NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-enable-features-server-suitescript.webp",[488,11142,11143,11144,10765,11146],{},"En SuiteTalk (servicios web), marque la casilla ",[441,11145,11111],{},[433,11147],{"alt":11148,"src":11149},"Habilitando Servicios Web REST en la pestaña SuiteCloud de NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-enable-features-rest-web-services.webp",[488,11151,9913,11152,461],{},[441,11153,11154],{},"Guardar",[488,11156,11157,11158,11161,11162,10765,11165],{},"Instale primero ",[441,11159,11160],{},"NetSuite MCP Standard Tools",". Haga clic en ",[899,11163,11164],{},"Personalización > Desarrollo de SuiteCloud > SuiteApp Marketplace",[433,11166],{"alt":11167,"src":11168},"Navegación al mercado de aplicaciones SuiteApp Marketplace bajo Personalización en NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-suiteapp-marketplace-navigation.webp",[488,11170,11171,11172,10765,11174],{},"Busque ",[441,11173,11160],{},[433,11175],{"alt":11176,"src":11177},"Búsqueda de NetSuite MCP Standard Tools en el mercado de SuiteApps","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-suiteapp-marketplace-search-mcp-tools.webp",[488,11179,11180,11181],{},"Una vez instalado, verá el estado 'Instalado' a la derecha.\n",[433,11182],{"alt":11183,"src":11184},"NetSuite MCP Standard Tools mostrado como instalado en el mercado de SuiteApps","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-suiteapp-installed-status-mcp-tools.webp",[488,11186,11187,11188],{},"Siga las mismas instrucciones para instalar 'NetSuite AI Connector Service Companion'.\n",[433,11189],{"alt":11190,"src":11191},"NetSuite AI Connector Service Companion mostrado como instalado","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-suiteapp-installed-ai-connector-companion.webp",[488,11193,11194,11195],{},"Configurar un registro de integración\n",[533,11196,11197,11206],{},[488,11198,11116,11199,10765,11202],{},[899,11200,11201],{},"Configuración > Integración > Administrar integraciones",[433,11203],{"alt":11204,"src":11205},"Navegación a Administrar Integraciones en el menú de configuración de NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-integration-manage-integrations-navigation.webp",[488,11207,11208,11209],{},"Cree un registro de integración para ChatGPT, y regresaremos con el token_id real:\n",[433,11210],{"alt":11211,"src":11212},"Creación de un nuevo registro de integración en NetSuite para la conexión con ChatGPT","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-create-integration-record-chatgpt.webp",[488,11214,11215,11216,11220,11224,11228],{},"Cree un rol personalizado para MCP con los permisos mínimos y asígnelo a los usuarios, por ejemplo:\n",[433,11217],{"alt":11218,"src":11219},"Configuración de permisos de rol personalizados para la integración de NetSuite MCP - Parte 1","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-custom-role-mcp-permissions-1.webp",[433,11221],{"alt":11222,"src":11223},"Configuración de permisos de rol personalizados para la integración de NetSuite MCP - Parte 2","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-custom-role-mcp-permissions-2.webp",[433,11225],{"alt":11226,"src":11227},"Configuración de permisos de rol personalizados para la integración de NetSuite MCP - Parte 3","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-custom-role-mcp-permissions-3.webp",[433,11229],{"alt":11230,"src":11231},"Configuración de permisos de rol personalizados para la integración de NetSuite MCP - Parte 4","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-custom-role-mcp-permissions-4.webp",[474,11233,11235],{"id":11234},"cómo-integrar-netsuite-mcp-con-chatgpt","Cómo integrar NetSuite MCP con ChatGPT",[533,11237,11238,11245,11252,11259,11269,11276,11283],{},[488,11239,11240,11241],{},"Haga clic en 'Settings' (Configuración).\n",[433,11242],{"alt":11243,"src":11244},"Navegación a la sección de Configuración en la interfaz de usuario de ChatGPT","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-settings-navigation.webp",[488,11246,11247,11248],{},"Haga clic en 'Apps' > 'Advanced settings' (Configuración avanzada).\n",[433,11249],{"alt":11250,"src":11251},"Navegación a la sección de Aplicaciones y Configuración avanzada en ChatGPT","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-apps-advanced-settings.webp",[488,11253,11254,11255],{},"Active 'Developer mode' (Modo desarrollador), luego haga clic en 'Create app' (Crear aplicación).\n",[433,11256],{"alt":11257,"src":11258},"Habilitación del Modo desarrollador y clic en Crear aplicación en ChatGPT","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-developer-mode-create-app.webp",[488,11260,11261,11262,10765,11265],{},"Introduzca los detalles. Para la conexión, introduzca ",[495,11263,11264],{},"https:\u002F\u002F\u003Caccount_id>.suitetalk.api.netsuite.com\u002Fservices\u002Fmcp\u002Fv1\u002Fall",[433,11266],{"alt":11267,"src":11268},"Introducción de los detalles de la URL de conexión de NetSuite MCP en ChatGPT","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-create-app-netsuite-mcp-connection.webp",[488,11270,11271,11272],{},"Haga clic en 'Create'. Una vez integrado, verá la siguiente ventana emergente.\n",[433,11273],{"alt":11274,"src":11275},"Confirmación de la integración exitosa de NetSuite MCP en ChatGPT","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-netsuite-mcp-integrated-popup.webp",[488,11277,11278,11279],{},"Haga clic en 'Sign in with NetSuite MCP' (Iniciar sesión con NetSuite MCP).\n",[433,11280],{"alt":11281,"src":11282},"Solicitud de inicio de sesión de ChatGPT con las herramientas estándar de NetSuite MCP","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-sign-in-with-netsuite-mcp.webp",[488,11284,11285,11286],{},"Haga clic en el botón 'Continue' para otorgar permisos.\n",[433,11287],{"alt":11288,"src":11289},"Concesión de permisos de conexión para NetSuite MCP en la pantalla de autorización de ChatGPT","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-grant-permissions-netsuite-mcp.webp",[474,11291,11293],{"id":11292},"cómo-integrar-netsuite-mcp-con-claude-ai","Cómo integrar NetSuite MCP con Claude AI",[533,11295,11296,11303,11310,11317,11332,11339],{},[488,11297,11298,11299],{},"Haga clic en 'Customize' (Personalizar).\n",[433,11300],{"alt":11301,"src":11302},"Clic en la opción de Personalizar en la interfaz de usuario de Claude AI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-customize-navigation.webp",[488,11304,11305,11306],{},"Haga clic en 'Connect your apps' (Conectar sus aplicaciones).\n",[433,11307],{"alt":11308,"src":11309},"Clic en Conectar tus aplicaciones en los ajustes de personalización de Claude AI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-connect-your-apps.webp",[488,11311,11312,11313],{},"Busque 'NetSuite'.\n",[433,11314],{"alt":11315,"src":11316},"Búsqueda de la aplicación NetSuite dentro de Claude AI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-search-netsuite-app.webp",[488,11318,11319,11320,11323,11324,11327,11328],{},"Haga clic en 'NetSuite' e introduzca la URL del servidor: ",[495,11321,11322],{},"https:\u002F\u002F\u003Caccount_id>.suitetalk.api.netsuite.com\u002Fservices\u002Fmcp\u002Fv1\u002Fsuiteapp\u002Fcom.netsuite.mcpstandardtools",". Reemplace ",[495,11325,11326],{},"\u003Caccount_id>"," con su ID de cuenta real.\n",[433,11329],{"alt":11330,"src":11331},"Introducción de la URL de conexión del servidor NetSuite MCP en Claude AI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-netsuite-mcp-server-url-setup.webp",[488,11333,11334,11335],{},"Haga clic en el botón 'Continue'.\n",[433,11336],{"alt":11337,"src":11338},"Clic en Continuar para autenticar la conexión del servidor NetSuite MCP en Claude","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-netsuite-mcp-continue-authentication.webp",[488,11340,11341,11342],{},"Haga clic en 'Continue' para autenticar el conector.\n",[433,11343],{"alt":11344,"src":11345},"Verificación final de autenticación para el conector NetSuite MCP en Claude AI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-netsuite-mcp-authenticate-connector.webp",[474,11347,11349],{"id":11348},"casos-de-uso-de-la-ia-en-netsuite","Casos de uso de la IA en NetSuite",[879,11351,11353],{"id":11352},"caso-de-uso-en-chatgpt-mostrar-facturas-vencidas-de-más-de-30-días-en-netsuite","Caso de uso en ChatGPT: Mostrar facturas vencidas de más de 30 días en NetSuite",[430,11355,11356],{},[433,11357],{"alt":11358,"src":11359},"ChatGPT ejecutando una consulta SuiteQL para mostrar facturas vencidas en NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-netsuite-overdue-invoices-query-result.webp",[485,11361,11362],{},[488,11363,11364],{},"ChatGPT creó la consulta SuiteQL y la ejecutó. Esto es muy práctico y ahorra mucho tiempo en comparación con la creación de un informe utilizando la interfaz de usuario web de NetSuite.",[879,11366,11368],{"id":11367},"caso-de-uso-en-chatgpt-y-claude-puedes-dibujar-las-ventas-de-los-últimos-30-días-en-un-gráfico-de-líneas","Caso de uso en ChatGPT y Claude: ¿Puedes dibujar las ventas de los últimos 30 días en un gráfico de líneas?",[430,11370,11371],{},[433,11372],{"alt":11373,"src":11374},"ChatGPT fallando al renderizar un gráfico de líneas de ventas a partir de datos de NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-failed-render-netsuite-sales-line-graph.webp",[485,11376,11377,11380],{},[488,11378,11379],{},"ChatGPT no pudo generar el gráfico de líneas.",[488,11381,11382,11383],{},"Lo probé en Claude y funcionó. La diferencia puede deberse a las capacidades del modelo de lenguaje grande (LLM).\n",[433,11384],{"alt":11385,"src":11386},"Claude AI renderizando con éxito un gráfico de líneas visual de las ventas de NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-successfully-rendered-netsuite-sales-line-graph.webp",[879,11388,11390],{"id":11389},"caso-de-uso-en-claude-crear-un-registro-de-cliente","Caso de uso en Claude: Crear un registro de cliente",[430,11392,11393,11397],{},[433,11394],{"alt":11395,"src":11396},"Solicitud de Claude AI para crear un nuevo registro de cliente en NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-create-netsuite-customer-record-prompt.webp",[433,11398],{"alt":11399,"src":11400},"Confirmación de Claude AI de la creación exitosa del registro de cliente en NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-create-netsuite-customer-record-success.webp",[485,11402,11403,11410],{},[488,11404,11405,11406],{},"Una doble comprobación en la interfaz de usuario web de NetSuite confirma que el registro fue creado.\n",[433,11407],{"alt":11408,"src":11409},"Verificación del registro de cliente recién creado en la interfaz de usuario web de NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-ui-verify-new-customer-record-created.webp",[488,11411,11412,11413],{},"Ejecutarlo en ChatGPT muestra que el registro está disponible:\n",[433,11414],{"alt":11415,"src":11416},"ChatGPT confirmando que el nuevo registro de cliente de NetSuite está disponible","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-verify-netsuite-customer-record-available.webp",[879,11418,11420],{"id":11419},"caso-de-uso-en-claude-ejecutar-consulta-suiteql","Caso de uso en Claude: Ejecutar consulta SuiteQL",[430,11422,11423],{},[433,11424],{"alt":11425,"src":11426},"Claude AI ejecutando y mostrando directamente los resultados de una consulta SuiteQL de NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-run-suiteql-query-result.webp",[485,11428,11429],{},[488,11430,11431],{},"La consulta SuiteQL se puede ejecutar directamente.",[474,11433,11435],{"id":11434},"reflexiones-finales-sobre-el-conector-de-ia-de-netsuite","Reflexiones finales sobre el Conector de IA de NetSuite",[430,11437,11438,11439,11441],{},"La mayor ventaja de utilizar MCP es para los usuarios que no tienen suficientes conocimientos técnicos para crear informes complejos. Estos usuarios pueden utilizar un lenguaje natural para consultar los datos y pedirle a la ",[441,11440,11079],{}," que presente el informe exactamente como lo desean.",[430,11443,11444],{},"Para evitar ataques de inyección de prompts y el uso indebido de operaciones de escritura, otorgue únicamente permisos de escritura para ciertos registros y transacciones. Cuando la IA utiliza MCP para actualizar o crear un registro, lo ejecuta como SuiteScript del lado del servidor, lo que elude por completo cualquier script del lado del cliente o validación de formularios.",[474,11446,11448],{"id":11447},"referencia","Referencia:",[485,11450,11451,11458,11465],{},[488,11452,11453],{},[444,11454,11457],{"href":11455,"rel":11456},"https:\u002F\u002Fdocs.oracle.com\u002Fen\u002Fcloud\u002Fsaas\u002Fnetsuite\u002Fns-online-help\u002Farticle_0902023450.html#subsect_90090238176",[448],"Instalación de la SuiteApp MCP Standard Tools",[488,11459,11460],{},[444,11461,11464],{"href":11462,"rel":11463},"https:\u002F\u002Fdocs.oracle.com\u002Fen\u002Fcloud\u002Fsaas\u002Fnetsuite\u002Fns-online-help\u002Farticle_4160616848.html#subsect_0419123151",[448],"Preguntas frecuentes sobre el servicio NetSuite AI Connector",[488,11466,11467],{},[444,11468,11471],{"href":11469,"rel":11470},"https:\u002F\u002Fdocs.oracle.com\u002Fen\u002Fcloud\u002Fsaas\u002Fnetsuite\u002Fns-online-help\u002Fsection_0714082142.html#bridgehead_0804033331",[448],"Conexión al servicio NetSuite AI Connector",{"title":425,"searchDepth":1061,"depth":1068,"links":11473},[11474,11475,11476,11477,11478,11484,11485],{"id":11068,"depth":1061,"text":11069},{"id":11099,"depth":1061,"text":11100},{"id":11234,"depth":1061,"text":11235},{"id":11292,"depth":1061,"text":11293},{"id":11348,"depth":1061,"text":11349,"children":11479},[11480,11481,11482,11483],{"id":11352,"depth":1068,"text":11353},{"id":11367,"depth":1068,"text":11368},{"id":11389,"depth":1068,"text":11390},{"id":11419,"depth":1068,"text":11420},{"id":11434,"depth":1061,"text":11435},{"id":11447,"depth":1061,"text":11448},[1659],"2026-06-13","Configura el Conector de IA de NetSuite (MCP) con ChatGPT y Claude. Descubre cómo consultar datos de ERP y automatizar tareas usando lenguaje natural.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002FES-Setup-NetSuite-MCP-on-ChatGPT-%26-Claude.webp","Miniatura de la integración de IA de NetSuite MCP que presenta un fondo corporativo azul oscuro con los logotipos de ChatGPT y Claude conectados a la base de datos en la nube de NetSuite",{"schemaOrg":11492,"robots":1693,"sitemap":11494},[11493],{"@type":1670,"headline":11046,"description":11488},{"lastmod":11487},{"title":11496,"description":11488,"ogTitle":11046,"ogDescription":11488,"twitterTitle":11046,"twitterDescription":11488},"Integración de IA con NetSuite MCP: ChatGPT y Claude","es\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",[11092,6948,11499,11500,11501],"ChatGPT","Claude","AI","N6IzqorQNGEFHHUJtvQh3_od4hX1W496Q_rCb09EfUs",{"id":11504,"title":11505,"author":1702,"body":11506,"category":11696,"date":11697,"description":11698,"extension":1664,"image":11699,"imageAlt":11700,"isPublished":1064,"meta":11701,"minRead":1928,"navigation":1064,"path":101,"seo":11705,"stem":11706,"tags":11707,"updatedAt":1702,"__hash__":11711},"article\u002Fes\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis.md","Evaluación de Claude Fable 5 en el Análisis Financiero",{"type":427,"value":11507,"toc":11694},[11508,11519,11530,11533,11539,11555,11565,11571,11577,11583,11603,11612,11626,11634,11652,11655,11666,11675,11678,11691],[430,11509,11510,11511,11514,11515],{},"El 9 de junio de 2026, Anthropic lanzó ",[441,11512,11513],{},"Claude Fable 5",", un modelo de clase Mythos con medidas de seguridad avanzadas en áreas como ciberseguridad, destilación, química y biología.\n",[433,11516],{"alt":11517,"src":11518},"Anuncio de lanzamiento de Anthropic Claude Fable 5 y capacidades de este modelo","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fclaude-fable-5-launch-announcement.webp",[430,11520,11521,11522,11525,11526],{},"Anthropic ha publicado cifras que demuestran que Fable 5 supera a Opus 4.8 y GPT-5.5 en varios puntos de referencia clave. En ",[441,11523,11524],{},"GDPval-AA (trabajo de conocimiento)",", está significativamente por delante de Opus 4.8, GPT 5.5 y Gemini 3.1 Pro.\n",[433,11527],{"alt":11528,"src":11529},"Comparación de benchmarks de Claude Fable 5 incluyendo la puntuación GDPval-AA para trabajo cognitivo","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fclaude-fable-5-benchmarks-gdpval-aa.webp",[430,11531,11532],{},"Según Claude, \"Fable 5 muestra un sólido rendimiento en tareas analíticas complejas\".",[430,11534,11535],{},[433,11536],{"alt":11537,"src":11538},"Declaración del rendimiento de Claude Fable 5 en tareas analíticas de alta complejidad","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fclaude-fable-5-analytical-performance-statement.webp",[430,11540,11541,11542,11545,11546,11549,11550,461],{},"Decidimos poner a prueba a ",[441,11543,11544],{},"Fable 5"," ejecutando un análisis de 'Space Exploration Technologies Corporation (SpaceX)' para fines de investigación de inversiones, utilizando la habilidad '",[441,11547,11548],{},"comps-analysis","'. El archivo 'skill.md' se obtuvo del ",[444,11551,11554],{"href":11552,"rel":11553},"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Ffinancial-services\u002Fblob\u002Fmain\u002Fplugins\u002Fagent-plugins\u002Fmarket-researcher\u002Fskills\u002Fcomps-analysis\u002FSKILL.md",[448],"repositorio de GitHub de servicios financieros de Anthropic",[430,11556,11557,11561],{},[433,11558],{"alt":11559,"src":11560},"Inicio de la habilidad de análisis comparativo financiero de SpaceX en el chat de Claude","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fspacex-comps-analysis-skill-initiation.webp",[433,11562],{"alt":11563,"src":11564},"Claude Fable 5 ejecutando el análisis financiero automatizado para la empresa SpaceX","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fspacex-comps-analysis-running-progress.webp",[430,11566,11567],{},[433,11568],{"alt":11569,"src":11570},"Flujo de trabajo y resultado final del análisis financiero automatizado de SpaceX","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fspacex-comps-analysis-skill-results-terminal.webp",[430,11572,11573,11574,11576],{},"La tarea tomó alrededor de 25 minutos. Claude no hizo preguntas aclaratorias, salvo para solicitar permiso para acceder a sitios web externos. Sorprendentemente, ",[441,11575,11544],{}," fue capaz de encontrar de forma autónoma las empresas competidoras para la comparación.",[430,11578,11579],{},[433,11580],{"alt":11581,"src":11582},"Claude Fable 5 solicitando permiso explícito para acceder de forma segura a sitios web externos","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fclaude-fable-5-external-site-access-permission.webp",[430,11584,11585,11589,11590,11592,11593,575,11598,461],{},[433,11586],{"alt":11587,"src":11588},"Empresas competidoras de SpaceX identificadas de manera autónoma por Claude Fable 5","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fclaude-fable-5-spacex-comps-excel-memo.webp","\n*",[441,11591,7430],{}," Esto tiene fines de investigación y educativos y no constituye asesoramiento de inversión. Los archivos originales generados se pueden descargar aquí: ",[444,11594,11597],{"href":11595,"rel":11596},"https:\u002F\u002Ftechvoyage.dev\u002FSpaceX_Comps_Analysis_2026-06-10.xlsx",[448],"SpaceX_Comps_Analysis_2026-06-10.xlsx",[444,11599,11602],{"href":11600,"rel":11601},"https:\u002F\u002Ftechvoyage.dev\u002FSpaceX_Comps_Memo_2026-06-10.pdf",[448],"SpaceX_Comps_Memo_2026-06-10.pdf",[430,11604,11605,11606,11609,11610,461],{},"Cuando probamos la misma habilidad usando ",[441,11607,11608],{},"Qwen deep research",", tuvimos que introducir manualmente las empresas competidoras. Las cifras numéricas difirieron ligeramente en comparación con las de ",[441,11611,11544],{},[430,11613,11614,11618,11622],{},[433,11615],{"alt":11616,"src":11617},"Inicio de análisis comparativo financiero de SpaceX utilizando el sistema Qwen deep research","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fqwen-deep-research-spacex-comps-initiation.webp",[433,11619],{"alt":11620,"src":11621},"Introducción manual de competidores en Qwen deep research para el análisis financiero de SpaceX","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fqwen-deep-research-spacex-comps-running.webp",[433,11623],{"alt":11624,"src":11625},"Vista previa del informe financiero de SpaceX generado de manera automática por Qwen","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fqwen-deep-research-spacex-comps-report-preview.webp",[430,11627,11628,11629,461],{},"*El informe generado por Qwen se puede descargar aquí: ",[444,11630,11633],{"href":11631,"rel":11632},"https:\u002F\u002Ftechvoyage.dev\u002FThe_SpaceX_Comp_Analysis_A_Statistical_Benchmark_of_Growth_Efficiency_and_Valuation_Against_Public_Peers.pdf",[448],"The_SpaceX_Comp_Analysis_A_Statistical_Benchmark_of_Growth_Efficiency_and_Valuation_Against_Public_Peers.pdf",[430,11635,11636,11637,11640,11641,10765,11644,11648],{},"Aunque ambos informes de Claude y Qwen se produjeron con base en la misma metodología especificada en la habilidad, los números variaron debido a que Claude y Qwen extrajeron información de diferentes fuentes. Por ejemplo, Claude Fable 5 utilizó ",[441,11638,11639],{},"Stock Analysis",", mientras que Qwen utilizó ",[441,11642,11643],{},"SEC.gov",[433,11645],{"alt":11646,"src":11647},"Datos financieros clave extraídos del portal Stock Analysis por el modelo Claude Fable 5","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fclaude-fable-5-data-source-stock-analysis.webp",[433,11649],{"alt":11650,"src":11651},"Presentaciones oficiales ante la SEC y origen de datos de SEC.gov utilizados por Qwen deep research","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fqwen-deep-research-data-source-sec-gov.webp",[430,11653,11654],{},"El informe de Qwen también contenía mucha más información sobre el modelo de negocio, la estructura de capital y las operaciones.",[430,11656,11657,11658,11661,11662],{},"Tras comparar los informes, decidimos intentarlo de nuevo con el comando ",[495,11659,11660],{},"\u002Fresearch"," en la aplicación de escritorio de Claude.\n",[433,11663],{"alt":11664,"src":11665},"Uso del nuevo comando de investigación en la aplicación de escritorio de Claude para análisis empresarial","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fclaude-desktop-research-command-spacex.webp",[430,11667,11668,11669,11674],{},"El informe de análisis recién generado, ",[444,11670,11673],{"href":11671,"rel":11672},"https:\u002F\u002Ftechvoyage.dev\u002FSpaceX_Analysis.pdf",[448],"SpaceX_Analysis.pdf",", incluyó secciones adicionales de recomendaciones y advertencias. En comparación con la búsqueda profunda de Qwen, todavía carecía de información detallada de la empresa, como las operaciones y la estructura de capital.",[430,11676,11677],{},"¿Vale la pena el precio premium de Fable 5? Podría serlo para tareas complejas y largas, así como para la codificación autónoma. Pero para ciertos trabajos de conocimiento, como el análisis de empresas, puede que aún no ofrezca la mejor relación calidad-precio.",[430,11679,11680,11681,11683,11684,10765,11687],{},"Por último, probamos qué tan bien se desempeña ",[441,11682,11544],{}," en la traducción. Curiosamente, el modelo cambió automáticamente de nuevo a ",[441,11685,11686],{},"Opus 4.8",[433,11688],{"alt":11689,"src":11690},"La aplicación de escritorio de Claude cambiando automáticamente el modelo activo de Fable 5 a Opus 4.8","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fclaude-fable-5-translation-opus-switching.webp",[430,11692,11693],{},"¿Significa esto que cualquier conversión de contexto largo se revertirá a Opus 4.8? ¿Es solo una anomalía temporal durante el uso previo al 22 de junio? ¿O el sistema es simplemente lo suficientemente inteligente como para detectar que la traducción no requiere un modelo tan potente?",{"title":425,"searchDepth":1061,"depth":1068,"links":11695},[],[1659],"2026-06-11","Probamos el nuevo Claude Fable 5 de Anthropic contra Qwen Deep Research para análisis financiero. ¿Realmente vale la pena pagar por esta nueva actualización?","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002FES-Testing-Claude-Fable-5-in-Financial-Analysis.webp","Claude Fable 5 vs Qwen: Prueba de Análisis Financiero",{"schemaOrg":11702,"robots":1693,"sitemap":11704},[11703],{"@type":1670,"headline":11505,"description":11698},{"lastmod":11697},{"title":11700,"description":11698,"ogTitle":11505,"ogDescription":11698,"twitterTitle":11505,"twitterDescription":11698},"es\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",[11513,11708,11709,11710],"Análisis Financiero","Qwen Deep Research","Benchmarks de IA","Z5vAtdAscmgwxwO5K1fio-cvZk0ZQ-Mb0KmpaAEvPgI",{"id":11713,"title":11714,"author":1702,"body":11715,"category":11922,"date":11923,"description":11924,"extension":1664,"image":11925,"imageAlt":11926,"isPublished":1064,"meta":11927,"minRead":1923,"navigation":1064,"path":103,"seo":11931,"stem":11932,"tags":11933,"updatedAt":1702,"__hash__":11934},"article\u002Fes\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2.md","Guía completa de Browser y Scheduler en Antigravity 2",{"type":427,"value":11716,"toc":11917},[11717,11730,11734,11740,11749,11764,11770,11773,11784,11788,11791,11798,11805,11816,11819,11825,11836,11842,11852,11865,11875,11885,11888,11894,11896,11906],[430,11718,11719,11720,575,11723,8941,11726,11729],{},"Los comandos ",[495,11721,11722],{},"\u002Fbrowser",[495,11724,11725],{},"\u002Fschedule",[441,11727,11728],{},"Google Antigravity 2"," redefinen nuestra forma de interactuar con la IA. Estos dos comandos transforman Antigravity en una plataforma de automatización proactiva que puede interactuar con la web en tiempo real y ejecutar flujos de trabajo recurrentes.",[474,11731,11733],{"id":11732},"browser-run","Browser Run",[430,11735,11736,11737,11739],{},"El comando ",[495,11738,11722],{}," fuerza el uso del navegador Chrome para completar una tarea. Los usuarios mantienen el control sobre cuándo y cómo los agentes acceden a la web durante el flujo de trabajo. Se toman capturas de pantalla y videoclips durante el proceso.",[430,11741,11742,11745],{},[441,11743,11744],{},"Caso de uso:",[433,11746],{"alt":11747,"src":11748},"Uso del comando \u002Fbrowser para enviar una licencia por enfermedad","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fbrowser-command-sick-leave-prompt.webp",[430,11750,11751,11752,11756,11760],{},"A continuación se muestra el resultado del agente:\n",[433,11753],{"alt":11754,"src":11755},"Subagente de automatización del navegador iniciando la tarea de envío de licencia por enfermedad","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fbrowser-automation-subagent-delegation.webp",[433,11757],{"alt":11758,"src":11759},"Automatizador del navegador configurando Chrome con depuración remota y permisos","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fbrowser-automation-permissions-and-chrome-setup.webp",[433,11761],{"alt":11762,"src":11763},"Subagente del navegador pausado en una pantalla de inicio de sesión solicitando credenciales","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fbrowser-automation-login-wall-encountered.webp",[430,11765,11766],{},[433,11767],{"alt":11768,"src":11769},"Subagente del navegador esperando que el usuario complete el inicio de sesión","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fbrowser-automation-waiting-for-user-login.webp",[430,11771,11772],{},"Antigravity fue capaz de abrir la página y enviar el formulario. Cuando se requiere iniciar sesión, el agente esperará hasta que hayas iniciado sesión en el sitio web.",[430,11774,11775,11780,11781,11783],{},[11776,11777],"video",{"alt":11778,"src":11779,"controls":1064},"Vídeo del subagente del navegador ejecutando el proceso de envío de licencia por enfermedad","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fbrowser-automation-sick-leave-process.webm","\nEl comando ",[495,11782,11722],{}," es útil cuando necesitamos la documentación más reciente de la web, registros de cambios, probar aplicaciones web o verificar estados de API para completar una tarea.",[474,11785,11787],{"id":11786},"schedule-task","Schedule Task",[430,11789,11790],{},"Antigravity 2 tiene funcionalidad incorporada para programar tareas. Lo probaremos ingresando automáticamente una hoja de horas (timesheet) cada 10 minutos.",[430,11792,11793,11794],{},"Haz clic en 'Scheduled Tasks' (Tareas programadas):\n",[433,11795],{"alt":11796,"src":11797},"Opción de menú de tareas programadas en la barra lateral","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fscheduled-tasks-menu-item.webp",[430,11799,11800,11801],{},"Haz clic en el botón '+ New' para crear una nueva tarea programada:\n",[433,11802],{"alt":11803,"src":11804},"Vista vacía de tareas programadas con un botón de nueva tarea","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fscheduled-tasks-empty-state-new-button.webp",[430,11806,11807,11808,11812],{},"Completa el formulario y programa la tarea para que se ejecute cada 10 minutos:\n",[433,11809],{"alt":11810,"src":11811},"Formulario de nueva tarea programada completado para el registro automático de la hoja de horas","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fscheduled-tasks-new-task-form.webp",[433,11813],{"alt":11814,"src":11815},"Tarea activa de registro automático de la hoja de horas en la lista de tareas programadas","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fscheduled-tasks-active-task-list.webp",[430,11817,11818],{},"La tarea se activó, pero resultó en un error.",[430,11820,11821],{},[433,11822],{"alt":11823,"src":11824},"Mensaje de error que indica que no se encontraron modelos disponibles para el nivel flash","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fscheduled-tasks-error-no-models.webp",[430,11826,11827,11828,11831,11832,11835],{},"Intentamos agregar valores 'env' al archivo ",[495,11829,11830],{},"sidecar.json",", que se encuentra en ",[495,11833,11834],{},".gemini\u002Fconfig\u002Fsidecars\u002Fauto-timesheet-entry",", pero seguimos recibiendo el mismo error.",[923,11837,11840],{"className":11838,"code":11839,"language":4643},[4641],"    \"env\": {\n        \"GEMINI_MODEL\": \"gemini-3.5-flash\",\n        \"GOOGLE_CLOUD_PROJECT\": \"your-gcp-project-id\"\n    }\n",[495,11841,11839],{"__ignoreMap":425},[430,11843,11844,11845,11848,11849,461],{},"Al inspeccionar los registros de tareas programadas ubicados en ",[495,11846,11847],{},".gemini\u002Fantigravity\u002Fsidecar_data\u002F",", podemos ver ",[495,11850,11851],{},"[schedule] Triggering command: \"agentapi\" [new-conversation]",[430,11853,11854,11855,11860,11861,11864],{},"La respuesta a nuestro problema publicado en el ",[444,11856,11859],{"href":11857,"rel":11858},"https:\u002F\u002Fdiscuss.ai.google.dev\u002Ft\u002Fscheduled-tasks-in-antigravity-2-ended-with-errors\u002F168013",[448],"Foro de discusión de Build with Google AI"," sugiere que se requiere una clave de API para ",[495,11862,11863],{},"agentapi",". Intentamos usar la clave de API, pero aun así no tuvimos éxito.",[430,11866,11867,11868,11870,11871],{},"Lo intentamos de nuevo con el comando ",[495,11869,11725],{}," directamente en el cuadro de conversación.\n",[433,11872],{"alt":11873,"src":11874},"Uso del comando \u002Fschedule para programar la tarea de automatización de la hoja de horas","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fschedule-command-timesheet-prompt.webp",[430,11876,11877,11878,11880,11881],{},"Las tareas programadas con el comando ",[495,11879,11725],{}," no aparecerán bajo la opción de menú 'Scheduled Tasks'.\n",[433,11882],{"alt":11883,"src":11884},"Lista de tareas programadas que no muestra tareas creadas mediante el comando CLI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fscheduled-tasks-list-missing-cli-task.webp",[430,11886,11887],{},"La tarea cron sí se activó.",[430,11889,11890],{},[433,11891],{"alt":11892,"src":11893},"Registro del trabajo cron confirmando que fue activado","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fcron-job-triggered-log.webp",[474,11895,8045],{"id":8044},[430,11897,11719,11898,575,11900,11902,11903,11905],{},[495,11899,11722],{},[495,11901,11725],{}," en Antigravity 2 no son solo características aisladas; combinarlos crea una herramienta muy potente. Por ejemplo, programar un agente para que use ",[495,11904,11722],{}," para navegar por sitios web de noticias e información todos los lunes por la mañana a las 6:00 AM, sintetice la información y entregue un informe diario completo.",[430,11907,11908,11909,11912,11913,11916],{},"Se pueden usar otros comandos, como ",[495,11910,11911],{},"\u002Fgrill-me"," (mencionado en el artículo ",[444,11914,11915],{"href":419},"Antigravity 2 en acción: agentes de IA, skills y MCP","), al diseñar nuevas tareas programadas. Este comando solicita al agente que pida a los usuarios aclarar ambigüedades y detectar casos extremos antes de finalizar el diseño.",{"title":425,"searchDepth":1061,"depth":1068,"links":11918},[11919,11920,11921],{"id":11732,"depth":1061,"text":11733},{"id":11786,"depth":1061,"text":11787},{"id":8044,"depth":1061,"text":8045},[1659],"2026-06-07","Descubre cómo los comandos \u002Fbrowser y \u002Fschedule potencian Google Antigravity 2 como una plataforma líder de automatización con IA.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002FES-Use-Browser-and-Scheduler-in-Antigravity-2.webp","Google Antigravity 2: Automatización con Browser y Scheduler",{"schemaOrg":11928,"robots":1693,"sitemap":11930},[11929],{"@type":1670,"headline":11926,"description":11924},{"lastmod":11923},{"title":11926,"description":11924,"ogTitle":11714,"ogDescription":11924,"twitterTitle":11714,"twitterDescription":11924},"es\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",[],"U4R3SYyR87zPOut9eoUDBI8gyZF8lH4_z4F1s8AfhvE",{"id":11936,"title":11915,"author":425,"body":11937,"category":12260,"date":12261,"description":12262,"extension":1664,"image":12263,"imageAlt":12264,"isPublished":1064,"meta":12265,"minRead":1923,"navigation":1064,"path":107,"seo":12269,"stem":12270,"tags":12271,"updatedAt":1702,"__hash__":12272},"article\u002Fes\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2.md",{"type":427,"value":11938,"toc":12250},[11939,11942,11949,11953,11959,11962,11966,11972,11975,11981,11987,11993,12003,12008,12012,12020,12024,12030,12036,12042,12045,12051,12057,12062,12067,12070,12074,12082,12088,12092,12098,12104,12110,12113,12117,12120,12124,12130,12136,12142,12145,12225,12231,12242,12244,12247],[430,11940,11941],{},"Antigravity 2, como una aplicación de escritorio diseñada principalmente para agentes, permite a los usuarios coordinar un equipo de subagentes para generar un resumen diario a partir de correos electrónicos y calendarios, o para compilar, probar y desplegar una aplicación. Pero, ¿cómo se ve esto realmente en la práctica?",[430,11943,11944,11945,11948],{},"Exploremos lo que Antigravity 2 puede hacer por ti, desde comandos y habilidades integrados hasta cómo integraciones como los servidores de Firebase Model Context Protocol (MCP) están convirtiendo a los desarrolladores en arquitectos full-stack. Consulta este artículo, ",[444,11946,11947],{"href":391},"Google Antigravity 2: Instalación y Primeras Impresiones",", para la configuración de las habilidades y los servidores MCP.",[474,11950,11952],{"id":11951},"comandos-integrados","Comandos integrados",[879,11954,11956],{"id":11955},"goal",[495,11957,11958],{},"\u002Fgoal",[430,11960,11961],{},"Con este comando, le indicas al agente que se ejecute hasta que una tarea específica esté completamente terminada.",[430,11963,11964],{},[441,11965,11744],{},[430,11967,11968],{},[433,11969],{"alt":11970,"src":11971},"Petición del comando goal de Antigravity 2 para crear un juego de Textris","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-goal-command-prompt.webp",[430,11973,11974],{},"Cuando solicitamos subagentes dinámicos, se generan tres agentes para completar la tarea.",[430,11976,11977],{},[433,11978],{"alt":11979,"src":11980},"Antigravity 2 generando subagentes para completar tareas de forma autónoma","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-spawning-subagents-1.webp",[430,11982,11983],{},[433,11984],{"alt":11985,"src":11986},"Progreso detallado de los subagentes de Antigravity 2 ejecutando pasos","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-spawning-subagents-2.webp",[430,11988,11989],{},[433,11990],{"alt":11991,"src":11992},"Finalización de tareas autónomas por los subagentes de Antigravity 2","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-spawning-subagents-3.webp",[430,11994,11995,11996,1368,11999],{},"Para jugar al juego Textris generado en HTML, haz clic en este ",[444,11997,6895],{"href":11998},"\u002Ftextris",[11776,12000],{"alt":12001,"src":12002,"controls":1064},"AI generated Textris game in HTML","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fai-generated-textri-game-html.webm",[430,12004,11736,12005,12007],{},[495,12006,11958],{}," crea un plan, lo ejecuta paso a paso y te informa del progreso en cada etapa. Además, el agente gestionará la ventana de contexto por sí mismo sin exceder los límites. Esto es ideal para tareas largas, como la optimización del rendimiento o la refactorización de módulos, que requieren múltiples rondas de iteración.",[879,12009,12010],{"id":10057},[495,12011,11911],{},[430,12013,12014,12015,12019],{},"Este comando activa la habilidad ",[444,12016,10057],{"href":12017,"rel":12018},"https:\u002F\u002Fgithub.com\u002Fmattpocock\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fproductivity\u002Fgrill-me\u002FSKILL.md",[448],", creada por Matt Pocock. Es conciso y sumamente eficaz. La idea detrás de esto es hacerte preguntas desde múltiples aspectos, aclarar casos extremos, alinear las estructuras y definir el plan antes de la implementación.",[430,12021,12022],{},[441,12023,11744],{},[430,12025,12026],{},[433,12027],{"alt":12028,"src":12029},"Activando el comando grill-me para la arquitectura de Cloudflare en Antigravity 2","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-grill-me-command-prompt.webp",[430,12031,12032],{},[433,12033],{"alt":12034,"src":12035},"Sesión interactiva de preguntas usando la habilidad grill-me","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-grill-me-interaction-1.webp",[430,12037,12038],{},[433,12039],{"alt":12040,"src":12041},"Aclarando casos extremos y estructurando el plan con grill-me","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-grill-me-interaction-2.webp",[430,12043,12044],{},"Soporta capacidades de selección múltiple:",[430,12046,12047],{},[433,12048],{"alt":12049,"src":12050},"Uso de capacidades de selección múltiple durante el proceso de grill-me","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-grill-me-multi-select-1.webp",[430,12052,12053],{},[433,12054],{"alt":12055,"src":12056},"Finalizando opciones con la función de selección múltiple de grill-me","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-grill-me-multi-select-2.webp",[430,12058,11736,12059,12061],{},[495,12060,11911],{}," es bastante impresionante. Cubre casi todos los aspectos del diseño arquitectónico para el despliegue en Cloudflare. Esto lo hace adecuado para el diseño de la arquitectura de una aplicación, la refactorización en múltiples dominios y otras tareas potencialmente complejas.",[879,12063,12064],{"id":425},[495,12065,12066],{},"@\u002F ",[430,12068,12069],{},"Este comando no aparece en la lista de disponibles, pero a veces lo necesitamos para nuestra ventana de contexto. Se utiliza para añadir una carpeta o archivos (que no sean multimedia) al cuadro de conversación.",[474,12071,12073],{"id":12072},"habilidades-skills","Habilidades (Skills)",[430,12075,12076,12077,12079,12080,461],{},"Podemos escribir ",[495,12078,8405],{}," para activar el cuadro emergente y seleccionar una habilidad. Probemos con ",[495,12081,10246],{},[430,12083,12084],{},[433,12085],{"alt":12086,"src":12087},"Seleccionando la habilidad de diagrama Excalidraw desde la ventana emergente de Antigravity","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-skill-selection-excalidraw.webp",[430,12089,12090],{},[441,12091,11744],{},[430,12093,12094],{},[433,12095],{"alt":12096,"src":12097},"Proporcionando instrucciones para generar un diagrama de Excalidraw","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-excalidraw-diagram-prompt.webp",[430,12099,12100],{},[433,12101],{"alt":12102,"src":12103},"Generación exitosa de un diagrama de arquitectura de Excalidraw","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-excalidraw-diagram-generation.webp",[430,12105,12106],{},[433,12107],{"alt":12108,"src":12109},"Antigravity architecture diagram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-architecture.webp",[430,12111,12112],{},"La habilidad se ejecutó correctamente después de un par de rondas de confirmación de permisos.",[474,12114,12116],{"id":12115},"servidores-mcp","Servidores MCP",[430,12118,12119],{},"Cuando el agente compila un backend, normalmente tienes que abrir una consola web, crear una base de datos, copiar claves API y pegarlas de vuelta. Al aprovechar los servidores MCP directamente en Antigravity, el agente obtiene \"manos\" para manipular tu infraestructura en la nube.",[430,12121,12122],{},[441,12123,11744],{},[430,12125,12126],{},[433,12127],{"alt":12128,"src":12129},"Instruyendo al servidor MCP para crear una aplicación web en Firebase","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-mcp-server-firebase-prompt.webp",[430,12131,12132],{},[433,12133],{"alt":12134,"src":12135},"Antigravity utilizando servidores MCP para manipular la infraestructura de Firebase","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-mcp-server-firebase-execution-1.webp",[430,12137,12138],{},[433,12139],{"alt":12140,"src":12141},"Creación exitosa de una aplicación Firebase a través de servidores MCP de Antigravity","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-mcp-server-firebase-execution-2.webp",[430,12143,12144],{},"El agente logró crear con éxito la aplicación web en Firebase utilizando servidores MCP. Revisemos el repositorio.",[923,12146,12148],{"className":1032,"code":12147,"language":1034,"meta":425,"style":425},"Create a new public GitHub repository called ‘to-do-app-techvoyage’. Then push all the current project files to it with the commit message ‘Initial commit — to-do-app’.\n",[495,12149,12150],{"__ignoreMap":425},[931,12151,12152,12155,12158,12161,12164,12167,12170,12173,12176,12179,12182,12185,12188,12191,12194,12197,12200,12203,12206,12208,12211,12214,12217,12219,12222],{"class":933,"line":934},[931,12153,12154],{"class":1041},"Create",[931,12156,12157],{"class":1045}," a",[931,12159,12160],{"class":1045}," new",[931,12162,12163],{"class":1045}," public",[931,12165,12166],{"class":1045}," GitHub",[931,12168,12169],{"class":1045}," repository",[931,12171,12172],{"class":1045}," called",[931,12174,12175],{"class":1045}," ‘to-do-app-techvoyage’.",[931,12177,12178],{"class":1045}," Then",[931,12180,12181],{"class":1045}," push",[931,12183,12184],{"class":1045}," all",[931,12186,12187],{"class":1045}," the",[931,12189,12190],{"class":1045}," current",[931,12192,12193],{"class":1045}," project",[931,12195,12196],{"class":1045}," files",[931,12198,12199],{"class":1045}," to",[931,12201,12202],{"class":1045}," it",[931,12204,12205],{"class":1045}," with",[931,12207,12187],{"class":1045},[931,12209,12210],{"class":1045}," commit",[931,12212,12213],{"class":1045}," message",[931,12215,12216],{"class":1045}," ‘Initial",[931,12218,12210],{"class":1045},[931,12220,12221],{"class":1045}," —",[931,12223,12224],{"class":1045}," to-do-app’.\n",[430,12226,12227],{},[433,12228],{"alt":12229,"src":12230},"Agente enviando archivos de proyecto automáticamente a un nuevo repositorio de GitHub","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-github-repository-push.webp",[430,12232,12233,12234,12237,12238,461],{},"El repositorio ",[495,12235,12236],{},"to-do-app-techvoyage"," está disponible en GitHub a través de este ",[444,12239,6895],{"href":12240,"rel":12241},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fto-do-app-techvoyage",[448],[474,12243,8045],{"id":8044},[430,12245,12246],{},"Aunque MCP y las habilidades en Antigravity 2 —impulsado por Gemini 3.5 Flash— ofrecen una velocidad vertiginosa, el flujo de los agentes está actualmente limitado por las constantes interrupciones de permisos y la falta de puntos de restauración (checkpoints) para realizar rollbacks. Hasta que se introduzca la función de checkpoints, realizar commits frecuentes de Git es tu red de seguridad obligatoria.",[1639,12248,12249],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":425,"searchDepth":1061,"depth":1068,"links":12251},[12252,12257,12258,12259],{"id":11951,"depth":1061,"text":11952,"children":12253},[12254,12255,12256],{"id":11955,"depth":1068,"text":11958},{"id":10057,"depth":1068,"text":11911},{"id":425,"depth":1068,"text":12066},{"id":12072,"depth":1061,"text":12073},{"id":12115,"depth":1061,"text":12116},{"id":8044,"depth":1061,"text":8045},[1659],"2026-06-06","Explora Antigravity 2, una app de escritorio diseñada para agentes. Aprende a coordinar subagentes de IA, usar skills y conectar servidores MCP.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002FES-What-can-we-do-with-Antigravity-2.webp","Tutorial de Antigravity 2: agentes de IA, skills y servidores MCP",{"schemaOrg":12266,"robots":1693,"sitemap":12268},[12267],{"@type":1670,"headline":11915,"description":12262},{"lastmod":12261},{"title":12264,"description":12262,"ogTitle":11915,"ogDescription":12262,"twitterTitle":11915,"twitterDescription":12262},"es\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",[],"u7Io8ascX4EunTMeVxz7I51iEy8loQYl0ocAnjZsqU0",{"id":12274,"title":11947,"author":1702,"body":12275,"category":12953,"date":12954,"description":12955,"extension":1664,"image":12956,"imageAlt":12957,"isPublished":1064,"meta":12958,"minRead":1075,"navigation":1064,"path":93,"seo":12962,"stem":12963,"tags":12964,"updatedAt":1702,"__hash__":12965},"article\u002Fes\u002Farticle\u002Fsetup-antigravity-2.md",{"type":427,"value":12276,"toc":12942},[12277,12288,12290,12293,12304,12307,12311,12320,12326,12333,12339,12346,12356,12358,12362,12369,12375,12378,12384,12388,12391,12404,12418,12425,12437,12447,12461,12463,12467,12470,12483,12486,12791,12801,12807,12816,12822,12828,12834,12836,12840,12849,12861,12867,12873,12879,12896,12899,12905,12907,12911,12914,12920,12923,12929,12931,12933,12936,12939],[430,12278,12279,12280,12283,12284,12287],{},"At Google I\u002FO 2026, Google anunció ",[441,12281,12282],{},"Antigravity 2",", una aplicación de escritorio independiente que posiciona al ",[441,12285,12286],{},"agente"," como la interfaz de usuario principal. Solo tienes que describir lo que quieres conseguir y el agente generará un plan, lo dividirá en subtareas manejables y las ejecutará.",[879,12289,1756],{"id":1755},[430,12291,12292],{},"Antes de empezar, necesitarás:",[485,12294,12295,12298,12301],{},[488,12296,12297],{},"Un ordenador (en esta guía utilizamos macOS)",[488,12299,12300],{},"Un navegador web moderno",[488,12302,12303],{},"Una cuenta de Gmail",[12305,12306],"hr",{},[474,12308,12310],{"id":12309},"_1-instalar-antigravity-2","1. Instalar Antigravity 2",[430,12312,12313,12314,12319],{},"Descarga Antigravity 2 desde ",[444,12315,12318],{"href":12316,"rel":12317},"https:\u002F\u002Fantigravity.google\u002Fdownload",[448],"antigravity.google"," e instálalo en tu ordenador. La primera vez que lo inicies, se te pedirá que inicies sesión con tu cuenta de Gmail.",[430,12321,12322],{},[433,12323],{"alt":12324,"src":12325},"Pantalla de inicio de sesión con cuenta de Google en el primer lanzamiento de Antigravity 2","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-gmail-login.webp",[430,12327,12328,12329,12332],{},"Una vez iniciada la sesión, verás un ",[441,12330,12331],{},"botón de voz"," en el campo de texto, que te permitirá grabar comandos de voz en lugar de tener que escribirlos.",[430,12334,12335],{},[433,12336],{"alt":12337,"src":12338},"Botón de grabación de voz en el campo de texto de Antigravity 2","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-voice-input-field.webp",[430,12340,12341,12342,12345],{},"Antigravity 2 también introduce el concepto de ",[441,12343,12344],{},"Proyecto"," (Project), que puede abarcar varias carpetas locales y funcionar con sus propios ajustes y permisos específicos del agente.",[430,12347,12348,12352],{},[433,12349],{"alt":12350,"src":12351},"Menú de selección y configuración de proyectos en Antigravity 2","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-project-menu.webp",[433,12353],{"alt":12354,"src":12355},"Creación de un nuevo proyecto de IA con ruta de carpeta en Antigravity 2","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-project-creation.webp",[12305,12357],{},[474,12359,12361],{"id":12360},"_2-configurar-servidores-mcp-y-plugins","2. Configurar servidores MCP y plugins",[430,12363,12364,12365,12368],{},"Todos los servidores del Protocolo de Contexto del Modelo (MCP), plugins y habilidades (skills) se gestionan en la sección ",[441,12366,12367],{},"Customizations"," (Personalizaciones) del menú de configuración:",[430,12370,12371],{},[433,12372],{"alt":12373,"src":12374},"Pestaña de personalizaciones en configuración para gestionar servidores MCP","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-settings-customizations.webp",[430,12376,12377],{},"Actualmente, los únicos plugins disponibles son de Google, pero esperemos que se publiquen más en el futuro.",[430,12379,12380],{},[433,12381],{"alt":12382,"src":12383},"Lista de plugins oficiales de Google e integraciones en Antigravity 2","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-google-plugins-list.webp",[2158,12385,12387],{"id":12386},"añadir-un-servidor-mcp-disponible","Añadir un servidor MCP disponible",[430,12389,12390],{},"Para instalar un servidor MCP preconfigurado (por ejemplo, GitHub):",[533,12392,12393,12398],{},[488,12394,4262,12395,461],{},[441,12396,12397],{},"Add MCP+",[488,12399,12400,12401,461],{},"Selecciona ",[441,12402,12403],{},"GitHub MCP Server",[430,12405,12406,12410,12414],{},[433,12407],{"alt":12408,"src":12409},"Añadir un servidor MCP preconfigurado haciendo clic en el botón Add MCP plus","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-add-mcp-button.webp",[433,12411],{"alt":12412,"src":12413},"Selección de GitHub MCP Server de la lista de integraciones disponibles","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-select-github-mcp.webp",[433,12415],{"alt":12416,"src":12417},"Asistente de configuración y autorización de GitHub MCP Server","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-github-mcp-setup.webp",[430,12419,12420,12421],{},"La configuración del servidor MCP de GitHub finalizó con un error:\n",[433,12422],{"alt":12423,"src":12424},"Error de configuración durante el proceso de instalación de GitHub MCP Server","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-github-mcp-error.webp",[430,12426,12427,12428,12430,12431,12433,12434,12436],{},"Dado que ya tenemos ",[495,12429,2791],{}," instalado en macOS, podemos solucionar esto ejecutando el comando ",[495,12432,2791],{}," directamente en la conversación. No obstante, primero debemos añadir explícitamente el comando ",[495,12435,2791],{}," a los permisos de Antigravity.",[430,12438,12439,12443],{},[433,12440],{"alt":12441,"src":12442},"Diálogo de solicitud para añadir el comando git a los permisos","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-add-git-permission-1.webp",[433,12444],{"alt":12445,"src":12446},"Concesión de permiso de ejecución del comando git en configuración","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-add-git-permission-2.webp",[430,12448,12449,12450,12452,12453,12457],{},"Probemos el comando para ver si ",[495,12451,2791],{}," ya funciona correctamente:\n",[433,12454],{"alt":12455,"src":12456},"Envío de solicitud de git status dentro del cuadro de chat de la IA","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-git-command-test-1.webp",[433,12458],{"alt":12459,"src":12460},"Ejecución exitosa del comando git status dentro del chat","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-git-command-test-2.webp",[12305,12462],{},[474,12464,12466],{"id":12465},"_3-añadir-servidores-mcp-personalizados","3. Añadir servidores MCP personalizados",[430,12468,12469],{},"Si el servidor MCP que buscas no está en la lista predeterminada, puedes añadirlo editando directamente el archivo de configuración de MCP. Dicha configuración se encuentra en:",[923,12471,12473],{"className":1032,"code":12472,"language":1034,"meta":425,"style":425},"~\u002F.gemini\u002Fconfig\u002Fmcp_config.json\n",[495,12474,12475],{"__ignoreMap":425},[931,12476,12477,12480],{"class":933,"line":934},[931,12478,12479],{"class":945},"~",[931,12481,12482],{"class":941},"\u002F.gemini\u002Fconfig\u002Fmcp_config.json\n",[430,12484,12485],{},"Como ejemplo, vamos a añadir algunos servidores MCP de Cloudflare. Dado que Cloudflare admite el registro dinámico de clientes, solo necesitamos activar OAuth. Añade lo siguiente a tu configuración JSON:",[923,12487,12489],{"className":2904,"code":12488,"language":2906,"meta":425,"style":425},"    \"cloudflare-api\": {\n      \"serverUrl\": \"https:\u002F\u002Fmcp.cloudflare.com\u002Fmcp\",\n      \"oauth\": {\n        \"enabled\": true\n      }\n    },\n    \"cloudflare-docs\": {\n      \"serverUrl\": \"https:\u002F\u002Fdocs.mcp.cloudflare.com\u002Fmcp\"\n    },\n    \"cloudflare-bindings\": {\n      \"serverUrl\": \"https:\u002F\u002Fbindings.mcp.cloudflare.com\u002Fmcp\",\n      \"oauth\": {\n        \"enabled\": true\n      }\n    },\n    \"cloudflare-builds\": {\n      \"serverUrl\": \"https:\u002F\u002Fbuilds.mcp.cloudflare.com\u002Fmcp\",\n      \"oauth\": {\n        \"enabled\": true\n      }\n    },\n    \"cloudflare-observability\": {\n      \"serverUrl\": \"https:\u002F\u002Fobservability.mcp.cloudflare.com\u002Fmcp\",\n      \"oauth\": {\n        \"enabled\": true\n      }\n    }\n",[495,12490,12491,12504,12524,12536,12548,12552,12559,12572,12589,12595,12608,12627,12639,12651,12655,12661,12674,12693,12705,12717,12721,12727,12740,12759,12771,12783,12787],{"__ignoreMap":425},[931,12492,12493,12495,12498,12500,12502],{"class":933,"line":934},[931,12494,7612],{"class":945},[931,12496,12497],{"class":1045},"cloudflare-api",[931,12499,3694],{"class":945},[931,12501,579],{"class":941},[931,12503,2913],{"class":945},[931,12505,12506,12508,12511,12513,12515,12517,12520,12522],{"class":933,"line":1061},[931,12507,7625],{"class":945},[931,12509,12510],{"class":937},"serverUrl",[931,12512,3694],{"class":945},[931,12514,889],{"class":945},[931,12516,3285],{"class":945},[931,12518,12519],{"class":1045},"https:\u002F\u002Fmcp.cloudflare.com\u002Fmcp",[931,12521,3694],{"class":945},[931,12523,7642],{"class":945},[931,12525,12526,12528,12530,12532,12534],{"class":933,"line":1068},[931,12527,7625],{"class":945},[931,12529,7871],{"class":937},[931,12531,3694],{"class":945},[931,12533,889],{"class":945},[931,12535,2943],{"class":945},[931,12537,12538,12540,12542,12544,12546],{"class":933,"line":1075},[931,12539,7661],{"class":945},[931,12541,7884],{"class":1041},[931,12543,3694],{"class":945},[931,12545,889],{"class":945},[931,12547,1379],{"class":945},[931,12549,12550],{"class":933,"line":1923},[931,12551,7895],{"class":945},[931,12553,12554,12557],{"class":933,"line":1928},[931,12555,12556],{"class":945},"    }",[931,12558,7642],{"class":941},[931,12560,12561,12563,12566,12568,12570],{"class":933,"line":1934},[931,12562,7612],{"class":945},[931,12564,12565],{"class":1045},"cloudflare-docs",[931,12567,3694],{"class":945},[931,12569,579],{"class":941},[931,12571,2913],{"class":945},[931,12573,12574,12576,12578,12580,12582,12584,12587],{"class":933,"line":2270},[931,12575,7625],{"class":945},[931,12577,12510],{"class":937},[931,12579,3694],{"class":945},[931,12581,889],{"class":945},[931,12583,3285],{"class":945},[931,12585,12586],{"class":1045},"https:\u002F\u002Fdocs.mcp.cloudflare.com\u002Fmcp",[931,12588,1955],{"class":945},[931,12590,12591,12593],{"class":933,"line":2281},[931,12592,12556],{"class":945},[931,12594,7642],{"class":941},[931,12596,12597,12599,12602,12604,12606],{"class":933,"line":2377},[931,12598,7612],{"class":945},[931,12600,12601],{"class":1045},"cloudflare-bindings",[931,12603,3694],{"class":945},[931,12605,579],{"class":941},[931,12607,2913],{"class":945},[931,12609,12610,12612,12614,12616,12618,12620,12623,12625],{"class":933,"line":1695},[931,12611,7625],{"class":945},[931,12613,12510],{"class":937},[931,12615,3694],{"class":945},[931,12617,889],{"class":945},[931,12619,3285],{"class":945},[931,12621,12622],{"class":1045},"https:\u002F\u002Fbindings.mcp.cloudflare.com\u002Fmcp",[931,12624,3694],{"class":945},[931,12626,7642],{"class":945},[931,12628,12629,12631,12633,12635,12637],{"class":933,"line":2388},[931,12630,7625],{"class":945},[931,12632,7871],{"class":937},[931,12634,3694],{"class":945},[931,12636,889],{"class":945},[931,12638,2943],{"class":945},[931,12640,12641,12643,12645,12647,12649],{"class":933,"line":2393},[931,12642,7661],{"class":945},[931,12644,7884],{"class":1041},[931,12646,3694],{"class":945},[931,12648,889],{"class":945},[931,12650,1379],{"class":945},[931,12652,12653],{"class":933,"line":2399},[931,12654,7895],{"class":945},[931,12656,12657,12659],{"class":933,"line":3354},[931,12658,12556],{"class":945},[931,12660,7642],{"class":941},[931,12662,12663,12665,12668,12670,12672],{"class":933,"line":3365},[931,12664,7612],{"class":945},[931,12666,12667],{"class":1045},"cloudflare-builds",[931,12669,3694],{"class":945},[931,12671,579],{"class":941},[931,12673,2913],{"class":945},[931,12675,12676,12678,12680,12682,12684,12686,12689,12691],{"class":933,"line":3370},[931,12677,7625],{"class":945},[931,12679,12510],{"class":937},[931,12681,3694],{"class":945},[931,12683,889],{"class":945},[931,12685,3285],{"class":945},[931,12687,12688],{"class":1045},"https:\u002F\u002Fbuilds.mcp.cloudflare.com\u002Fmcp",[931,12690,3694],{"class":945},[931,12692,7642],{"class":945},[931,12694,12695,12697,12699,12701,12703],{"class":933,"line":3378},[931,12696,7625],{"class":945},[931,12698,7871],{"class":937},[931,12700,3694],{"class":945},[931,12702,889],{"class":945},[931,12704,2943],{"class":945},[931,12706,12707,12709,12711,12713,12715],{"class":933,"line":3907},[931,12708,7661],{"class":945},[931,12710,7884],{"class":1041},[931,12712,3694],{"class":945},[931,12714,889],{"class":945},[931,12716,1379],{"class":945},[931,12718,12719],{"class":933,"line":3913},[931,12720,7895],{"class":945},[931,12722,12723,12725],{"class":933,"line":3922},[931,12724,12556],{"class":945},[931,12726,7642],{"class":941},[931,12728,12729,12731,12734,12736,12738],{"class":933,"line":4573},[931,12730,7612],{"class":945},[931,12732,12733],{"class":1045},"cloudflare-observability",[931,12735,3694],{"class":945},[931,12737,579],{"class":941},[931,12739,2913],{"class":945},[931,12741,12742,12744,12746,12748,12750,12752,12755,12757],{"class":933,"line":5029},[931,12743,7625],{"class":945},[931,12745,12510],{"class":937},[931,12747,3694],{"class":945},[931,12749,889],{"class":945},[931,12751,3285],{"class":945},[931,12753,12754],{"class":1045},"https:\u002F\u002Fobservability.mcp.cloudflare.com\u002Fmcp",[931,12756,3694],{"class":945},[931,12758,7642],{"class":945},[931,12760,12761,12763,12765,12767,12769],{"class":933,"line":5038},[931,12762,7625],{"class":945},[931,12764,7871],{"class":937},[931,12766,3694],{"class":945},[931,12768,889],{"class":945},[931,12770,2943],{"class":945},[931,12772,12773,12775,12777,12779,12781],{"class":933,"line":5046},[931,12774,7661],{"class":945},[931,12776,7884],{"class":1041},[931,12778,3694],{"class":945},[931,12780,889],{"class":945},[931,12782,1379],{"class":945},[931,12784,12785],{"class":933,"line":5054},[931,12786,7895],{"class":945},[931,12788,12789],{"class":933,"line":5059},[931,12790,7745],{"class":945},[430,12792,12793,12794,12796,12797,12800],{},"Vuelve a la sección ",[441,12795,12367],{}," de la aplicación y haz clic en el botón ",[441,12798,12799],{},"Refresh"," (Actualizar). Ahora verás los servidores MCP de Cloudflare en la lista, pendientes de autorización.",[430,12802,12803],{},[433,12804],{"alt":12805,"src":12806},"Servidores MCP de Cloudflare listados pendientes de autorización","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-cloudflare-mcp-pending.webp",[430,12808,4262,12809,12812,12813,10323],{},[441,12810,12811],{},"Authenticate"," al lado del servidor MCP. Esto abrirá una página de autenticación en tu navegador web. Una vez autenticado, se generará un código de autorización (",[441,12814,12815],{},"auth code",[430,12817,12818],{},[433,12819],{"alt":12820,"src":12821},"Navegador web mostrando el código de autorización OAuth dinámico","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-cloudflare-auth-code.webp",[430,12823,12824,12825,461],{},"Copia este código de autorización, pégalo en el campo de texto de Antigravity y haz clic en ",[441,12826,12827],{},"Submit",[430,12829,12830],{},[433,12831],{"alt":12832,"src":12833},"Envío del código de verificación OAuth en la interfaz de Antigravity","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-cloudflare-auth-submit.webp",[12305,12835],{},[474,12837,12839],{"id":12838},"_4-añadir-habilidades-personalizadas","4. Añadir habilidades personalizadas",[430,12841,12842,12843,12845,12846,461],{},"Actualmente, añadir habilidades personalizadas (skills) ",[441,12844,680],{}," se puede hacer directamente desde la interfaz de la aplicación de escritorio. En su lugar, deben añadirse directamente en la carpeta ",[495,12847,12848],{},"~\u002F.gemini\u002Fconfig\u002Fskills",[430,12850,12851,12852,12855,12856],{},"Debido a que utilizamos la CLI de ",[495,12853,12854],{},"npx skills"," para centralizar todas las habilidades de nuestros agentes, cualquier nueva habilidad añadida puede estar disponible para todos los agentes, incluido Antigravity. ",[899,12857,12858,12859,10323],{},"(Para profundizar en esto, consulta nuestro artículo: ",[444,12860,8665],{"href":359},[430,12862,12863,12864,12866],{},"Al principio, al escribir ",[495,12865,8405],{}," en el cuadro de conversación, la lista de habilidades aparece vacía:",[430,12868,12869],{},[433,12870],{"alt":12871,"src":12872},"Cuadro de comandos mostrando la lista de habilidades vacía al escribir barra","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-empty-skills-list.webp",[430,12874,12875,12876,12878],{},"Parece que Antigravity 2 no lee automáticamente de la carpeta global de habilidades (",[495,12877,8650],{},"). Para solucionarlo, debemos crear un enlace simbólico que apunte al directorio de configuración de Antigravity:",[923,12880,12882],{"className":1032,"code":12881,"language":1034,"meta":425,"style":425},"ln -s ~\u002F.agents\u002Fskills\u002Fexcalidraw-diagram ~\u002F.gemini\u002Fconfig\u002Fskills\u002Fexcalidraw-diagram\n",[495,12883,12884],{"__ignoreMap":425},[931,12885,12886,12888,12890,12893],{"class":933,"line":934},[931,12887,3680],{"class":1041},[931,12889,3537],{"class":1045},[931,12891,12892],{"class":1045}," ~\u002F.agents\u002Fskills\u002Fexcalidraw-diagram",[931,12894,12895],{"class":1045}," ~\u002F.gemini\u002Fconfig\u002Fskills\u002Fexcalidraw-diagram\n",[430,12897,12898],{},"¡Una vez vinculado, la habilidad estará disponible en la aplicación!",[430,12900,12901],{},[433,12902],{"alt":12903,"src":12904},"Habilidad de diagramas de Excalidraw apareciendo en la lista","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-excalidraw-skill-available.webp",[12305,12906],{},[474,12908,12910],{"id":12909},"_5-probar-una-tarea-sencilla","5. Probar una tarea sencilla",[430,12912,12913],{},"Ahora que todo está configurado, hagamos una prueba.",[430,12915,12916],{},[433,12917],{"alt":12918,"src":12919},"Envío de una tarea de prueba para listar bases de datos D1","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-test-simple-task-prompt.webp",[430,12921,12922],{},"Como se muestra a continuación, el modelo detecta y utiliza con éxito el servidor MCP de Cloudflare que acabamos de añadir para procesar la solicitud.",[430,12924,12925],{},[433,12926],{"alt":12927,"src":12928},"Agente de IA ejecutando con éxito el listado de bases de datos D1","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-test-task-success.webp",[12305,12930],{},[474,12932,8045],{"id":8044},[430,12934,12935],{},"Antigravity 2 representa un cambio radical: pasa de ser un IDE tradicional a convertirse en una aplicación de escritorio accesible, lo que permite a los usuarios de a pie actuar como directores de orquesta para cualquier tarea.",[430,12937,12938],{},"Sin embargo, Antigravity 2 necesita pulirse. Cuando algo falla, la depuración puede resultar frustrante debido a que los mensajes de error son muy vagos. Además, la documentación oficial parece poco depurada (probablemente generada por IA), ya que varias referencias y rutas de archivos son incorrectas en este momento.",[1639,12940,12941],{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":425,"searchDepth":1061,"depth":1068,"links":12943},[12944,12945,12946,12949,12950,12951,12952],{"id":1755,"depth":1068,"text":1756},{"id":12309,"depth":1061,"text":12310},{"id":12360,"depth":1061,"text":12361,"children":12947},[12948],{"id":12386,"depth":1075,"text":12387},{"id":12465,"depth":1061,"text":12466},{"id":12838,"depth":1061,"text":12839},{"id":12909,"depth":1061,"text":12910},{"id":8044,"depth":1061,"text":8045},[1659],"2026-06-05","Descubre las novedades de Google Antigravity 2. Lee nuestra guía práctica para instalar la aplicación, probar tareas de agentes de IA y añadir servidores MCP personalizados de forma manual.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002FES-Setup-Antigravity-2.0.webp","Análisis y Configuración de Google Antigravity 2: Agentes de IA, MCP y Plugins",{"schemaOrg":12959,"robots":1693,"sitemap":12961},[12960],{"@type":1670,"headline":12957,"description":12955},{"lastmod":12954},{"title":12957,"description":12955,"ogTitle":11947,"ogDescription":12955,"twitterTitle":11947,"twitterDescription":12955},"es\u002Farticle\u002Fsetup-antigravity-2",[],"AFFwIEDIiUo_GLYOtTDYC7igO3Bx9JzPiKddQpIdAGQ",{"id":12967,"title":8665,"author":1702,"body":12968,"category":13383,"date":13384,"description":13385,"extension":1664,"image":13386,"imageAlt":13387,"isPublished":1064,"meta":13388,"minRead":1075,"navigation":1064,"path":77,"seo":13394,"stem":13395,"tags":13396,"updatedAt":1702,"__hash__":13397},"article\u002Fes\u002Farticle\u002Fcentralised-the-skills-for-agents.md",{"type":427,"value":12969,"toc":13373},[12970,12981,12984,13007,13022,13026,13036,13052,13062,13069,13072,13094,13100,13111,13128,13137,13147,13151,13158,13179,13182,13188,13198,13204,13207,13227,13236,13240,13246,13318,13324,13328,13364,13370],[430,12971,12972,12973,12976,12977,12980],{},"Si ejecutas varios agentes de IA o herramientas de línea de comandos (CLIs) en tu ordenador —ya sea Hermes, Claude Code, Codex, Antigravity, Kimi u otras herramientas compatibles—, es muy probable que te hayas topado con un problema bastante frustrante: ",[441,12974,12975],{},"la fragmentación de habilidades"," (skills). Cada agente o CLI mantiene su propia carpeta ",[495,12978,12979],{},"skills"," independiente, lo que provoca duplicidad de instalaciones, desfase de versiones y una gran carga de gestión.",[430,12982,12983],{},"En nuestro trabajo diario con agentes de IA, solíamos enfrentarnos a los siguientes problemas:",[485,12985,12986,12992,12998],{},[488,12987,12988,12991],{},[441,12989,12990],{},"Múltiples instalaciones",": Instalar una nueva habilidad para un agente y luego tener que instalarla una y otra vez para los demás.",[488,12993,12994,12997],{},[441,12995,12996],{},"Desfase de versiones"," (version drift): Personalizar o corregir una habilidad para un agente, olvidarse de actualizar los demás y acabar con agentes que se comportan de forma diferente.",[488,12999,13000,13003,13004,13006],{},[441,13001,13002],{},"Gestión de habilidades",": Tener que revisar la carpeta ",[495,13005,12979],{}," de cada agente en todo el sistema para saber qué habilidades estaban realmente instaladas.",[430,13008,13009,13010,13012,13013,13015,13016,461],{},"La herramienta de línea de comandos ",[495,13011,12854],{},", un CLI de código abierto desarrollado por Vercel, soluciona este problema permitiéndote gestionar una única carpeta ",[495,13014,12979],{}," centralizada y compartirla con todos tus agentes. Puedes echar un vistazo al ",[444,13017,13019,13020],{"href":8611,"rel":13018},[448],"repositorio de GitHub de ",[495,13021,12854],{},[474,13023,13025],{"id":13024},"carpeta-centralizada","Carpeta centralizada",[430,13027,13028,13029,13031,13032,13035],{},"La idea es sencilla: si apuntamos la carpeta ",[495,13030,12979],{}," de cada agente a la ",[441,13033,13034],{},"misma carpeta física",", el problema de la fragmentación desaparece por completo.",[430,13037,13038,13039,13041,13042,13044,13045,13048,13049,13051],{},"Al instalar una habilidad mediante el CLI de ",[495,13040,12854],{},", esta se descarga en la carpeta centralizada de tu equipo (",[495,13043,8650],{},"). A continuación, el CLI crea un ",[441,13046,13047],{},"enlace simbólico"," (symlink, que funciona como un puntero directo) desde la carpeta ",[495,13050,12979],{}," de cada agente hacia esa carpeta centralizada.",[430,13053,13054,13055,13058,13059,13061],{},"Por ejemplo, cuando Claude Code busca habilidades en ",[495,13056,13057],{},"~\u002F.claude\u002Fskills\u002F",", se le redirige de forma transparente a ",[495,13060,8650],{},". Si realizas cualquier ajuste en una habilidad dentro de esa carpeta centralizada, todos los agentes verán la actualización de forma instantánea. Sin copias manuales, sin scripts de sincronización y sin desperdiciar espacio en el disco.",[474,13063,13065,13066,13068],{"id":13064},"instalación-de-npx-skills-y-adición-de-una-habilidad","Instalación de ",[495,13067,12854],{}," y adición de una habilidad",[430,13070,13071],{},"Ejecuta el siguiente comando para empezar y añadir nuestra primera habilidad:",[923,13073,13075],{"className":1032,"code":13074,"language":1034,"meta":425,"style":425},"npx skills add https:\u002F\u002Fgithub.com\u002Fcoleam00\u002Fexcalidraw-diagram-skill --skill excalidraw-diagram\n",[495,13076,13077],{"__ignoreMap":425},[931,13078,13079,13081,13083,13085,13088,13091],{"class":933,"line":934},[931,13080,7637],{"class":1041},[931,13082,8625],{"class":1045},[931,13084,1055],{"class":1045},[931,13086,13087],{"class":1045}," https:\u002F\u002Fgithub.com\u002Fcoleam00\u002Fexcalidraw-diagram-skill",[931,13089,13090],{"class":1045}," --skill",[931,13092,13093],{"class":1045}," excalidraw-diagram\n",[430,13095,13096],{},[433,13097],{"alt":13098,"src":13099},"Uso del comando npx skills add para instalar una habilidad desde GitHub","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FCentralised%20the%20skills%20for%20agents\u002Fnpx-skills-add-command.webp",[430,13101,13102,13103,13106,13107],{},"El CLI te preguntará si deseas configurar esto para un proyecto específico o de forma global. Por lo general, recomendamos elegir ",[441,13104,13105],{},"global"," para que todos los agentes compatibles puedan acceder a ella:\n",[433,13108],{"alt":13109,"src":13110},"Selección de la opción de instalación global en la CLI de npx skills","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FCentralised%20the%20skills%20for%20agents\u002Fnpx-skills-install-global-prompt.webp",[430,13112,13113,13114,13116,13117,1368,13120,13124],{},"A continuación, asegúrate de seleccionar ",[495,13115,8646],{}," para garantizar una ",[441,13118,13119],{},"única fuente de verdad",[433,13121],{"alt":13122,"src":13123},"Elección del método de enlace simbólico para sincronizar habilidades","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FCentralised%20the%20skills%20for%20agents\u002Fnpx-skills-symlink-option.webp",[433,13125],{"alt":13126,"src":13127},"Confirmación de instalación exitosa y creación de enlace simbólico en la CLI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FCentralised%20the%20skills%20for%20agents\u002Fnpx-skills-installation-completed.webp",[430,13129,13130,13131,1368,13133],{},"Una vez hecho esto, podemos verificar que la habilidad se ha instalado en la carpeta centralizada en ",[495,13132,8650],{},[433,13134],{"alt":13135,"src":13136},"Verificación de habilidades instaladas en el directorio centralizado","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FCentralised%20the%20skills%20for%20agents\u002Fnpx-skills-directory-verification.webp",[430,13138,13139,13140,13142,13143],{},"¡Abre el CLI de Kimi (o cualquier otro agente) y la habilidad ",[495,13141,10246],{}," estará disponible y lista para usar!\n",[433,13144],{"alt":13145,"src":13146},"Kimi CLI mostrando las habilidades centralizadas cargadas y listas","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FCentralised%20the%20skills%20for%20agents\u002Fkimi-cli-skills-integration.webp",[474,13148,13150],{"id":13149},"creación-de-una-habilidad-desde-cero","Creación de una habilidad desde cero",[430,13152,13153,13154,13157],{},"Para crear tus propias habilidades, puedes utilizar la herramienta ",[495,13155,13156],{},"skill-creator"," de Anthropic. Instálala de la siguiente manera:",[923,13159,13161],{"className":1032,"code":13160,"language":1034,"meta":425,"style":425},"npx skills add https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills --skill skill-creator\n",[495,13162,13163],{"__ignoreMap":425},[931,13164,13165,13167,13169,13171,13174,13176],{"class":933,"line":934},[931,13166,7637],{"class":1041},[931,13168,8625],{"class":1045},[931,13170,1055],{"class":1045},[931,13172,13173],{"class":1045}," https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills",[931,13175,13090],{"class":1045},[931,13177,13178],{"class":1045}," skill-creator\n",[430,13180,13181],{},"Ahora, en Kimi o en cualquier otro agente, introduce la siguiente instrucción (prompt):",[923,13183,13186],{"className":13184,"code":13185,"language":4643},[4641],"Use the skill-creator to help me build a skill for creating a product landing page\n",[495,13187,13185],{"__ignoreMap":425},[430,13189,13190,13191,13193,13194],{},"¡Kimi o tu agente detectará automáticamente el ",[495,13192,13156],{}," y te guiará paso a paso por todo el proceso!\n",[433,13195],{"alt":13196,"src":13197},"Ejecución del asistente interactivo skill-creator en Kimi CLI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FCentralised%20the%20skills%20for%20agents\u002Fkimi-cli-skill-creator-setup.webp",[474,13199,13201,13202],{"id":13200},"otros-comandos-útiles-de-npx-skills","Otros comandos útiles de ",[495,13203,12854],{},[430,13205,13206],{},"Aquí tienes algunos otros comandos prácticos:",[485,13208,13209,13215,13221],{},[488,13210,13211,13214],{},[495,13212,13213],{},"npx skills ls -g",": Muestra todas las habilidades instaladas globalmente",[488,13216,13217,13220],{},[495,13218,13219],{},"npx skills update",": Mantén todas tus habilidades actualizadas con un solo comando",[488,13222,13223,13226],{},[495,13224,13225],{},"npx skills remove",": Desinstala o elimina una habilidad de forma interactiva",[430,13228,13229,13230,13235],{},"Por favor, consulta el ",[444,13231,13019,13233],{"href":8611,"rel":13232},[448],[495,13234,12854],{}," para ver más comandos y referencias.",[474,13237,13239],{"id":13238},"yendo-un-paso-más-allá","Yendo un paso más allá",[430,13241,13242,13243,13245],{},"Dado que ahora todas las habilidades se encuentran en un único lugar (",[495,13244,8650],{},"), podemos inicializarlo como un repositorio Git y subirlo a GitHub o GitLab.",[923,13247,13249],{"className":1032,"code":13248,"language":1034,"meta":425,"style":425},"cd ~\u002F.agents\u002Fskills\ngit init\ngit add .\ngit commit -m \"Initial skills folder\"\ngit remote add origin https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fskills\ngit push -u origin main\n",[495,13250,13251,13258,13265,13273,13289,13304],{"__ignoreMap":425},[931,13252,13253,13255],{"class":933,"line":934},[931,13254,2815],{"class":962},[931,13256,13257],{"class":1045}," ~\u002F.agents\u002Fskills\n",[931,13259,13260,13262],{"class":933,"line":1061},[931,13261,2791],{"class":1041},[931,13263,13264],{"class":1045}," init\n",[931,13266,13267,13269,13271],{"class":933,"line":1068},[931,13268,2791],{"class":1041},[931,13270,1055],{"class":1045},[931,13272,4902],{"class":1045},[931,13274,13275,13277,13279,13282,13284,13287],{"class":933,"line":1075},[931,13276,2791],{"class":1041},[931,13278,12210],{"class":1045},[931,13280,13281],{"class":1045}," -m",[931,13283,3285],{"class":945},[931,13285,13286],{"class":1045},"Initial skills folder",[931,13288,1955],{"class":945},[931,13290,13291,13293,13296,13298,13301],{"class":933,"line":1923},[931,13292,2791],{"class":1041},[931,13294,13295],{"class":1045}," remote",[931,13297,1055],{"class":1045},[931,13299,13300],{"class":1045}," origin",[931,13302,13303],{"class":1045}," https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fskills\n",[931,13305,13306,13308,13310,13313,13315],{"class":933,"line":1928},[931,13307,2791],{"class":1041},[931,13309,12181],{"class":1045},[931,13311,13312],{"class":1045}," -u",[931,13314,13300],{"class":1045},[931,13316,13317],{"class":1045}," main\n",[430,13319,13320,13321,461],{},"De este modo, dispondremos de un historial completo de todos los cambios en las habilidades, lo que significa que podremos revertirlos fácilmente si una actualización rompe algo. Además, podemos sincronizar las habilidades sin problemas entre varios equipos (como un portátil y un ordenador de sobremesa) ejecutando un rápido ",[495,13322,13323],{},"git pull",[474,13325,13327],{"id":13326},"aspectos-a-tener-en-cuenta-seguridad-y-riesgos","Aspectos a tener en cuenta (Seguridad y riesgos)",[485,13329,13330,13336,13342,13352,13358],{},[488,13331,13332,13335],{},[441,13333,13334],{},"La compatibilidad varía",": No todas las plataformas de agentes admiten aún todas las funciones (como hooks personalizados o herramientas permitidas específicas). Una habilidad puede funcionar de maravilla en un agente pero quedarse corta en otro.",[488,13337,13338,13341],{},[441,13339,13340],{},"Confía en la fuente",": Instala únicamente habilidades procedentes de fuentes de confianza.",[488,13343,13344,13347,13348,13351],{},[441,13345,13346],{},"Revisa antes de ejecutar",": Si utilizas una habilidad personalizada o de terceros, revisa los archivos (especialmente en la carpeta ",[495,13349,13350],{},"scripts\u002F",") antes de permitir que tu agente la ejecute.",[488,13353,13354,13357],{},[441,13355,13356],{},"Principio de mínimo privilegio",": Intenta no conceder a una habilidad más permisos de herramientas o acceso del que sea estrictamente necesario para realizar su trabajo.",[488,13359,13360,13363],{},[441,13361,13362],{},"Nunca expongas credenciales",": Mantén tus claves API y secretos fuera de los archivos de tus habilidades.",[430,13365,13366,13367,13369],{},"Configurar una \"fuente única de verdad\" centralizada con ",[495,13368,12854],{}," ha evitado frustraciones y duplicidad de trabajo a nuestro equipo. Te recomendamos encarecidamente que lo pruebes; ¡las capacidades de la IA se multiplican a medida que crecen tus habilidades!",[1639,13371,13372],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}",{"title":425,"searchDepth":1061,"depth":1068,"links":13374},[13375,13376,13378,13379,13381,13382],{"id":13024,"depth":1061,"text":13025},{"id":13064,"depth":1061,"text":13377},"Instalación de npx skills y adición de una habilidad",{"id":13149,"depth":1061,"text":13150},{"id":13200,"depth":1061,"text":13380},"Otros comandos útiles de npx skills",{"id":13238,"depth":1061,"text":13239},{"id":13326,"depth":1061,"text":13327},[1659],"2026-06-04","¿Usas varios agentes de IA como Claude Code o Kimi? Aprende a solucionar la fragmentación de habilidades con una sola carpeta centralizada usando npx skills.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FCentralised%20the%20skills%20for%20agents\u002FEvita-fragmentar-habilidades-de-agentes-usando-npx-skills.webp","Cómo centralizar habilidades de agentes de IA usando npx skills CLI",{"schemaOrg":13389,"robots":1693,"sitemap":13392},[13390],{"@type":1670,"headline":13391,"description":13385},"Cómo solucionar la fragmentación de habilidades de agentes con npx skills",{"lastmod":13393},"2026-06-03",{"title":13391,"description":13385,"ogTitle":8665,"ogDescription":13385,"twitterTitle":8665,"twitterDescription":13385},"es\u002Farticle\u002Fcentralised-the-skills-for-agents",[],"7H2VMXv4ao3wlYXDlT_MMGeW0Fyix_F7FaPKxjIz-JM",{"id":13399,"title":13400,"author":1702,"body":13401,"category":13638,"date":13639,"description":13640,"extension":1664,"image":13641,"imageAlt":13642,"isPublished":1064,"meta":13643,"minRead":2270,"navigation":1064,"path":83,"seo":13647,"stem":13648,"tags":13649,"updatedAt":1702,"__hash__":13650},"article\u002Fes\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare.md","Deja de exponer tu bóveda: Protege NodeWarden con Cloudflare",{"type":427,"value":13402,"toc":13629},[13403,13406,13409,13423,13427,13434,13436,13440,13443,13447,13477,13481,13484,13551,13555,13558,13622,13626],[430,13404,13405],{},"El momento en que tu instancia de NodeWarden se expone al público en Internet, comienza a atraer a miles de bots automatizados que buscan vulnerabilidades las 24 horas del día, los 7 días de la semana. Para proteger tus datos confidenciales, necesitas aplicar el nivel máximo de bloqueo posible en tu instancia de NodeWarden.",[430,13407,13408],{},"Para asegurar tu instancia de NodeWarden, puedes usar una de estas dos funciones de Cloudflare:",[485,13410,13411,13417],{},[488,13412,13413,13416],{},[441,13414,13415],{},"Cloudflare IP Access Rules (Reglas de acceso por IP):"," Te permite bloquear, solicitar un desafío de seguridad (challenge) o permitir el tráfico en función de direcciones IP o países específicos.",[488,13418,13419,13422],{},[441,13420,13421],{},"Cloudflare Zero Trust (Recomendado):"," Actúa como una pasarela segura que hace que tu instancia de NodeWarden sea completamente invisible al público, permitiendo el acceso únicamente a los usuarios autorizados.",[2158,13424,13426],{"id":13425},"por-qué-recomendamos-cloudflare-zero-trust","Por qué recomendamos Cloudflare Zero Trust",[430,13428,13429,13430,13433],{},"Aconsejamos encarecidamente usar Cloudflare Zero Trust porque las reglas de acceso por IP están vinculadas a direcciones IP o países, lo que significa que tendrías que actualizar manualmente tus reglas cada vez que viajes o si tienes una IP dinámica. Cloudflare Zero Trust, por el contrario, se basa en tu ",[441,13431,13432],{},"identidad",", no en tu ubicación, ofreciéndote un acceso fluido y seguro a NodeWarden.",[12305,13435],{},[474,13437,13439],{"id":13438},"guía-de-configuración","Guía de Configuración",[430,13441,13442],{},"Sigue estos pasos para configurar Cloudflare Zero Trust para NodeWarden.",[2158,13444,13446],{"id":13445},"fase-1-primeros-pasos","Fase 1: Primeros pasos",[533,13448,13449,13456,13463,13470],{},[488,13450,13451,13452],{},"En tu panel de control de Cloudflare, haz clic en 'Zero Trust' en el menú de la izquierda.\n",[433,13453],{"alt":13454,"src":13455},"Barra lateral del panel de Cloudflare que muestra la opción Zero Trust seleccionada en el menú de navegación.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-dashboard-zero-trust-sidebar.webp",[488,13457,13458,13459],{},"Haz clic en 'Access controls' y luego en 'Applications'.\n",[433,13460],{"alt":13461,"src":13462},"Menú de navegación de Cloudflare Zero Trust con la sección de Controles de acceso expandida.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-zero-trust-access-controls-menu.webp",[488,13464,13465,13466],{},"Es posible que se te pida elegir un plan ('Choose a plan').\n",[433,13467],{"alt":13468,"src":13469},"Pantalla de configuración de la cuenta de Cloudflare Zero Trust que solicita al usuario elegir un plan de suscripción.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-zero-trust-choose-plan-setup.webp",[488,13471,13472,13473],{},"Haz clic en el botón 'Choose a plan' y selecciona 'Zero Trust Free'.\n",[433,13474],{"alt":13475,"src":13476},"La página de detalles del plan Zero Trust Free en Cloudflare, destacando el botón Seleccionar plan.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-zero-trust-free-plan-selection.webp",[2158,13478,13480],{"id":13479},"fase-2-protege-tu-interfaz-web","Fase 2: Protege tu interfaz web",[430,13482,13483],{},"Primero, crearemos una aplicación para proteger el panel de control web de NodeWarden.",[533,13485,13486,13493,13500,13507,13514,13521,13528,13531,13538,13541],{},[488,13487,13488,13489],{},"Haz clic en 'Create new application' para crear la primera aplicación.\n",[433,13490],{"alt":13491,"src":13492},"Panel de aplicaciones de Cloudflare Access con el botón Crear nueva aplicación.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-create-new-application.webp",[488,13494,13495,13496],{},"Elige 'Self-hosted and private'.\n",[433,13497],{"alt":13498,"src":13499},"El modal Añadir una aplicación en Cloudflare Access con el tipo de aplicación Autohospedada y privada seleccionado.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-add-self-hosted-application.webp",[488,13501,13502,13503],{},"Introduce el nombre de dominio de NodeWarden.\n",[433,13504],{"alt":13505,"src":13506},"Pantalla de configuración de la aplicación de Cloudflare Access que muestra el nombre de host público configurado como warden.techvoyage.dev.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-application-public-hostname.webp",[488,13508,13509,13510],{},"Haz clic en 'Create new policy' para crear una política.\n",[433,13511],{"alt":13512,"src":13513},"Página de políticas de Cloudflare Access que muestra que no se han añadido políticas y un botón para crear una nueva política.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-no-policies-create-button.webp",[488,13515,13516,13517],{},"Selecciona 'Emails' e introduce un correo electrónico en 'Policy rules'.\n",[433,13518],{"alt":13519,"src":13520},"Pantalla de configuración de la regla de política de Cloudflare Access con una dirección de correo electrónico especificada como criterio de inclusión.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-policy-rule-email.webp",[488,13522,13523,13524],{},"Introduce un nombre y selecciona 'Allow' en 'Policy details'.\n",[433,13525],{"alt":13526,"src":13527},"Pantalla de detalles de la política de Cloudflare Access que muestra el nombre de la política NodeWarden-Web y la acción configurada en Permitir.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-policy-details-allow.webp",[488,13529,13530],{},"Haz clic en 'Save Policy' para guardar la política.",[488,13532,13533,13534],{},"Introduce un nombre y selecciona '1 month' en la sección 'Details'.\n",[433,13535],{"alt":13536,"src":13537},"Resumen final de la configuración para una aplicación de Cloudflare Access llamada NodeWarden-Web con una duración de sesión de un mes.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-application-final-details.webp",[488,13539,13540],{},"Haz clic en 'Create' para crear la aplicación.",[488,13542,13543,13546,13547],{},[441,13544,13545],{},"Pruébalo:"," Abre el dominio en el navegador web; verás que 'Cloudflare Access' te pide un correo electrónico.\n",[433,13548],{"alt":13549,"src":13550},"Una vista previa de la pantalla de inicio de sesión de Cloudflare Access para NodeWarden-Web, solicitando una dirección de correo electrónico.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-login-screen-preview.webp",[2158,13552,13554],{"id":13553},"fase-3-permitir-la-sincronización-de-clientes-bitwarden-omitir-api","Fase 3: Permitir la sincronización de clientes BitWarden (Omitir API)",[430,13556,13557],{},"Las aplicaciones móviles y de escritorio de BitWarden no pueden procesar la pantalla de inicio de sesión por correo de Cloudflare, por lo que necesitamos crear una segunda aplicación que permita al tráfico omitir (bypass) la pantalla de inicio de sesión específicamente para la sincronización de la API.",[533,13559,13560,13571,13586,13591,13598,13605,13608,13615],{},[488,13561,13562,13563,13566,13567,13570],{},"Vuelve a Applications y haz clic en ",[441,13564,13565],{},"Create new application",", eligiendo ",[441,13568,13569],{},"Self-hosted and private"," nuevamente.",[488,13572,13573,13574,13577,13578,13581,13582],{},"Introduce 'api\u002F",[899,13575,13576],{},"', 'identity\u002F","', 'notifications\u002F",[899,13579,13580],{},"' e 'icons\u002F","' en Destinations.\n",[433,13583],{"alt":13584,"src":13585},"Configuración de múltiples nombres de host públicos para omitir la API en Cloudflare Access, incluyendo las rutas api, identity, notifications e icons.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-api-bypass-destinations.webp",[488,13587,13588,13589],{},"Haz clic en 'Create new policy' para crear la política.\n",[433,13590],{"alt":13512,"src":13513},[488,13592,13593,13594],{},"Selecciona 'Everyone' en 'Policy rules'.\n",[433,13595],{"alt":13596,"src":13597},"Configuración de la regla de política de Cloudflare Access con Todos seleccionado para permitir un acceso amplio a rutas específicas.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-policy-rule-everyone.webp",[488,13599,13600,13601],{},"Introduce un nombre y selecciona 'Bypass' en 'Policy details'.\n",[433,13602],{"alt":13603,"src":13604},"Detalles de la política de Cloudflare Access para NodeWarden-API con la acción configurada en Omitir.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-policy-details-bypass.webp",[488,13606,13607],{},"Haz clic en 'Save Policy' para guardarla.",[488,13609,13610,13611],{},"Introduce un nombre y selecciona '1 month' en 'Session Duration'.\n",[433,13612],{"alt":13613,"src":13614},"Pantalla de configuración final para la aplicación NodeWarden-API en Cloudflare Access.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-api-application-final-details.webp",[488,13616,13617,13618],{},"Ahora deberías tener 2 aplicaciones creadas.\n",[433,13619],{"alt":13620,"src":13621},"El panel de aplicaciones de Cloudflare Access que muestra las aplicaciones Web y API creadas con éxito.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-applications-list-final.webp",[474,13623,13625],{"id":13624},"consideraciones-finales","Consideraciones finales",[430,13627,13628],{},"Solo recuerda que Cloudflare es tu escudo exterior. Para mantener una bóveda (vault) verdaderamente segura, asegúrate de seguir utilizando una contraseña maestra fuerte, habilitar la Autenticación de Dos Factores (2FA) y mantener segura tu cuenta de Cloudflare.",{"title":425,"searchDepth":1061,"depth":1068,"links":13630},[13631,13632,13637],{"id":13425,"depth":1075,"text":13426},{"id":13438,"depth":1061,"text":13439,"children":13633},[13634,13635,13636],{"id":13445,"depth":1075,"text":13446},{"id":13479,"depth":1075,"text":13480},{"id":13553,"depth":1075,"text":13554},{"id":13624,"depth":1061,"text":13625},[2602,9482],"2026-05-27","El momento en que tu instancia de NodeWarden se expone al público en Internet, comienza a atraer a miles de bots automatizados que buscan vulnerabilidades las 24 horas del día, los 7 días de la semana.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fasegurar-nodewarden-integracion-cloudflare-guia.webp","Miniatura de una guía paso a paso para asegurar una bóveda de NodeWarden con integración de Cloudflare, que muestra una caja fuerte digital con candado y un rack de servidores protegido.",{"schemaOrg":13644,"robots":1693,"sitemap":13646},[13645],{"@type":1670,"headline":13400,"description":13640},{"lastmod":13639},{"title":13400,"description":13640,"ogTitle":13400,"ogDescription":13640,"twitterTitle":13400,"twitterDescription":13640},"es\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",[],"IpIKvMoPjz83IYI7iHrcD9IXA5I1QQZeXxgQmnK3Ldk",{"id":13652,"title":13653,"author":1702,"body":13654,"category":14227,"date":14228,"description":14229,"extension":1664,"image":14230,"imageAlt":14231,"isPublished":1064,"meta":14232,"minRead":2270,"navigation":1064,"path":91,"seo":14237,"stem":14238,"tags":14239,"updatedAt":1702,"__hash__":14240},"article\u002Fes\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare.md","Cómo alojar tu gestor de contraseñas tipo BitWarden",{"type":427,"value":13655,"toc":14212},[13656,13663,13669,13673,13856,13860,13876,13880,13914,13918,13948,13952,13979,13983,14025,14029,14068,14072,14075,14079,14108,14112,14135,14139,14142,14159,14164,14167,14170,14184,14188,14205,14207],[430,13657,13658,13659,13662],{},"Tus contraseñas son tu propiedad digital más importante, y mantenerlas seguras significa tenerlas en tus propias manos. Al autoalojar (",[899,13660,13661],{},"self-hosting",") tu propio gestor de contraseñas, tomas el control de tu propia seguridad. ",[430,13664,13665,13668],{},[441,13666,13667],{},"BitWarden","​ es ampliamente considerado como uno de los más confiables en el ámbito de la gestión de contraseñas y su código fuente está disponible bajo la licencia AGPL-3.0. NodeWarden es un servidor no oficial compatible con BitWarden, escrito en Typescript, que se puede desplegar de forma gratuita en Cloudflare.",[474,13670,13672],{"id":13671},"comparación-de-características-con-el-servidor-oficial-de-bitwarden","Comparación de características con el servidor oficial de BitWarden",[604,13674,13675,13690],{},[607,13676,13677],{},[610,13678,13679,13682,13684,13687],{},[613,13680,13681],{},"Capacidad",[613,13683,13667],{},[613,13685,13686],{},"NodeWarden",[613,13688,13689],{},"Notas",[633,13691,13692,13708,13723,13735,13747,13762,13778,13793,13808,13820,13832,13845],{},[610,13693,13694,13697,13700,13702],{},[638,13695,13696],{},"Bóveda Web (Web Vault)",[638,13698,13699],{},"✅",[638,13701,13699],{},[638,13703,13704,13707],{},[441,13705,13706],{},"Interfaz original de la Bóveda Web","​",[610,13709,13710,13716,13718,13720],{},[638,13711,13712,13713],{},"Sincronización completa ",[495,13714,13715],{},"\u002Fapi\u002Fsync",[638,13717,13699],{},[638,13719,13699],{},[638,13721,13722],{},"Compatibilidad optimizada para clientes oficiales",[610,13724,13725,13728,13730,13732],{},[638,13726,13727],{},"Subir \u002F descargar archivos adjuntos",[638,13729,13699],{},[638,13731,13699],{},[638,13733,13734],{},"Cloudflare R2 o KV",[610,13736,13737,13740,13742,13744],{},[638,13738,13739],{},"Send (Enviar)",[638,13741,13699],{},[638,13743,13699],{},[638,13745,13746],{},"Soporta envíos de texto y de archivos",[610,13748,13749,13752,13754,13756],{},[638,13750,13751],{},"Importar \u002F Exportar",[638,13753,13699],{},[638,13755,13699],{},[638,13757,13758,13759,13707],{},"Soporta importación de BitWarden JSON \u002F CSV \u002F ",[441,13760,13761],{},"ZIP con adjuntos",[610,13763,13764,13769,13771,13773],{},[638,13765,13766],{},[441,13767,13768],{},"Centro de copias de seguridad en la nube",[638,13770,8587],{},[638,13772,13699],{},[638,13774,13775,13707],{},[441,13776,13777],{},"Copias de seguridad programadas a WebDAV \u002F S3",[610,13779,13780,13783,13786,13788],{},[638,13781,13782],{},"Pista de contraseña (web)",[638,13784,13785],{},"⚠️ Limitado",[638,13787,13699],{},[638,13789,13790,13707],{},[441,13791,13792],{},"No requiere correo electrónico",[610,13794,13795,13798,13800,13802],{},[638,13796,13797],{},"TOTP \u002F Steam TOTP",[638,13799,13699],{},[638,13801,13699],{},[638,13803,13804,13805],{},"Incluye soporte para ",[495,13806,13807],{},"steam:\u002F\u002F",[610,13809,13810,13813,13815,13817],{},[638,13811,13812],{},"Multiusuario",[638,13814,13699],{},[638,13816,13699],{},[638,13818,13819],{},"Registro mediante invitación",[610,13821,13822,13825,13827,13829],{},[638,13823,13824],{},"Organizaciones \u002F Colecciones \u002F Roles",[638,13826,13699],{},[638,13828,8587],{},[638,13830,13831],{},"No implementado",[610,13833,13834,13837,13839,13842],{},[638,13835,13836],{},"Inicio de sesión con 2FA",[638,13838,13699],{},[638,13840,13841],{},"⚠️ Parcial",[638,13843,13844],{},"Actualmente solo TOTP a nivel de usuario",[610,13846,13847,13850,13852,13854],{},[638,13848,13849],{},"SSO \u002F SCIM \u002F Directorio corporativo",[638,13851,13699],{},[638,13853,8587],{},[638,13855,13831],{},[474,13857,13859],{"id":13858},"lo-que-necesitamos","Lo que necesitamos:",[533,13861,13862,13867,13873],{},[488,13863,13864],{},[441,13865,13866],{},"Una cuenta de GitHub",[488,13868,13869,13872],{},[441,13870,13871],{},"Una cuenta de Cloudflare","​ (Gratuita) con el almacenamiento R2 activado.",[488,13874,13875],{},"_Opcional:_Un nombre de dominio personalizado gestionado en Cloudflare.",[879,13877,13879],{"id":13878},"fase-1-preparar-el-código","Fase 1: Preparar el código",[533,13881,13882,13901],{},[488,13883,13884,13885,13889,13890,13894,13895,13897],{},"Haz un _fork_del repositorio de NodeWarden desde ",[444,13886,13887],{"href":13887,"rel":13888},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fnodewarden",[448]," del repositorio original ",[444,13891,13892],{"href":13892,"rel":13893},"https:\u002F\u002Fgithub.com\u002Fshuaiplus\u002Fnodewarden",[448]," GitHub.",[1879,13896],{},[433,13898],{"alt":13899,"src":13900},"Bifurcando el repositorio de NodeWarden en GitHub","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Ffork-nodewarden-repo.webp",[488,13902,13903,13904,13907,13908,13910],{},"Habilita el ",[899,13905,13906],{},"workflow","\"Sync Upstream\".",[1879,13909],{},[433,13911],{"alt":13912,"src":13913},"Habilitando el flujo de trabajo de sincronización ascendente en GitHub Actions","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fenable-sync-upstream.webp",[879,13915,13917],{"id":13916},"fase-2-desplegar-en-cloudflare","Fase 2: Desplegar en Cloudflare",[533,13919,13920,13929,13942],{},[488,13921,13922,13923,13925],{},"Crea una aplicación Worker en Cloudflare.",[1879,13924],{},[433,13926],{"alt":13927,"src":13928},"Creando una nueva aplicación Worker en el panel de Cloudflare","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fcreate-cloudflare-worker.webp",[488,13930,13931,13932,13934,13938],{},"Selecciona 'Continue with GitHub' para desplegar la aplicación.",[1879,13933],{},[433,13935],{"alt":13936,"src":13937},"Desplegando la aplicación NodeWarden conectando con GitHub","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fdeploy-github-repo.webp",[433,13939],{"alt":13940,"src":13941},"Progreso de construcción y despliegue del Worker de Cloudflare","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-deploy-status.webp",[488,13943,13944,13945,461],{},"Espera unos momentos a que Cloudflare construya y despliegue tu app. Te dará una URL por defecto tipo ",[495,13946,13947],{},"worker.dev",[879,13949,13951],{"id":13950},"opcional-añadir-un-dominio-personalizado","(Opcional) Añadir un dominio personalizado:",[485,13953,13954,13960,13966],{},[488,13955,13956,13957,461],{},"En la configuración de tu Cloudflare Worker, ve a la pestaña ",[441,13958,13959],{},"Settings",[488,13961,13962,13963,461],{},"Haz clic en ",[441,13964,13965],{},"+ Add",[488,13967,13968,13969,13971,13975],{},"Escribe el dominio que prefieras y sigue las instrucciones.",[1879,13970],{},[433,13972],{"alt":13973,"src":13974},"Navegando a la configuración de dominio personalizado en el Worker de Cloudflare","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fworker-settings-custom-domain.webp",[433,13976],{"alt":13977,"src":13978},"Añadiendo un dominio personalizado al Worker de Cloudflare","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fadd-custom-domain.webp",[879,13980,13982],{"id":13981},"fase-3-proteger-tu-servidor-el-secreto-jwt","Fase 3: Proteger tu servidor (El secreto JWT)",[533,13984,13985,13988,14000,14019],{},[488,13986,13987],{},"Ve al navegador web e ingresa tu dominio personalizado o el dominio 'worker.dev' generado.",[488,13989,13990,13991,461,13994,13996],{},"Te aparecerá el mensaje '",[441,13992,13993],{},"JWT_SECRET is missing'",[1879,13995],{},[433,13997],{"alt":13998,"src":13999},"Mensaje de error JWT_SECRET is missing en el servidor NodeWarden","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fjwt-secret-missing-error.webp",[488,14001,14002,14003,14005,14006,1868,14009,14011,14015],{},"Copia la clave secreta generada y vuelve a la pestaña de Settings (Configuración) de tu Worker de NodeWarden, luego haz clic en el botón '",[441,14004,13965],{},"' en la sección '",[441,14007,14008],{},"Variables and Secrets",[1879,14010],{},[433,14012],{"alt":14013,"src":14014},"Sección de Variables y Secretos en la configuración del Worker de Cloudflare","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fworker-variables-secrets.webp",[433,14016],{"alt":14017,"src":14018},"Añadiendo el secreto JWT generado a las variables del Worker de Cloudflare","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fadd-jwt-secret.webp",[488,14020,14021,14022,1868],{},"Pega el secreto generado y haz clic en el botón '",[441,14023,14024],{},"Deploy \u002F Save",[879,14026,14028],{"id":14027},"fase-4-crear-tu-cuenta-de-administrador","Fase 4: Crear tu cuenta de administrador",[533,14030,14031,14040,14053,14065],{},[488,14032,14033,14034,14036],{},"Vuelve al navegador web y actualiza la página; verás la siguiente página de inicio de sesión.",[1879,14035],{},[433,14037],{"alt":14038,"src":14039},"Página de inicio de sesión del servidor NodeWarden","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fnodewarden-login.webp",[488,14041,14042,14043,14046,14047,14049],{},"Haz clic en '",[441,14044,14045],{},"Create Account","' para crear la cuenta de administrador.",[1879,14048],{},[433,14050],{"alt":14051,"src":14052},"Haciendo clic en el botón Create Account en la página de inicio de sesión de NodeWarden","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fcreate-account-button.webp",[488,14054,14055,14056,10323,14059,14061],{},"Inicia sesión con la cuenta de administrador que acabas de crear para acceder al panel de control (",[899,14057,14058],{},"Dashboard",[1879,14060],{},[433,14062],{"alt":14063,"src":14064},"Vista general del panel de administración de NodeWarden","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fnodewarden-dashboard.webp",[488,14066,14067],{},"Ahora ya tenemos el servidor desplegado y en funcionamiento. Empezaremos a configurar los clientes de BitWarden.",[879,14069,14071],{"id":14070},"fase-5-conectar-tus-dispositivos","Fase 5: Conectar tus dispositivos",[430,14073,14074],{},"Puedes usar las aplicaciones oficiales de BitWarden en todos tus dispositivos.",[2158,14076,14078],{"id":14077},"extensión-para-chrome","Extensión para Chrome",[533,14080,14081,14084,14087,14096,14105],{},[488,14082,14083],{},"Instala la extensión de Bitwarden para Chrome.",[488,14085,14086],{},"Abre la extensión.",[488,14088,14089,14090,14092],{},"Haz clic en el enlace junto a 'Accessing:' (Accediendo a:) en la parte inferior del menú emergente.",[1879,14091],{},[433,14093],{"alt":14094,"src":14095},"Seleccionando la opción de autoalojado en la extensión de Bitwarden para Chrome","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fbitwarden-extension-self-hosted.webp",[488,14097,14098,14099,14101],{},"Ingresa el nombre de dominio de tu servidor NodeWarden.",[1879,14100],{},[433,14102],{"alt":14103,"src":14104},"Ingresando la URL del servidor en la extensión de Bitwarden para Chrome","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fbitwarden-extension-domain.webp",[488,14106,14107],{},"Guarda la configuración e inicia sesión con tu cuenta.",[2158,14109,14111],{"id":14110},"app-para-ios","App para iOS",[533,14113,14114,14117,14126],{},[488,14115,14116],{},"Instala la app de BitWarden desde la App Store.",[488,14118,14119,14120,14122],{},"Abre la app y haz clic en '' junto a 'Logging in on:' (Iniciando sesión en:).",[1879,14121],{},[433,14123],{"alt":14124,"src":14125},"Accediendo a la configuración de autoalojado en la aplicación de Bitwarden para iOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fbitwarden-ios-self-hosted.webp",[488,14127,14128,14129,14131],{},"Ingresa el nombre de dominio del servidor NodeWarden y haz clic en el botón '✓'.",[1879,14130],{},[433,14132],{"alt":14133,"src":14134},"Configurando la URL del servidor en la aplicación de Bitwarden para iOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fbitwarden-ios-domain.webp",[2158,14136,14138],{"id":14137},"otros-clientes","Otros Clientes",[430,14140,14141],{},"NodeWarden ha sido probado y se ha confirmado que es compatible con estos clientes oficiales de BitWarden:",[485,14143,14144,14147,14150,14153,14156],{},[488,14145,14146],{},"✅ Windows de escritorio",[488,14148,14149],{},"✅ Apps móviles Android\u002FiOS",[488,14151,14152],{},"✅ Extensiones de navegador",[488,14154,14155],{},"✅ Linux de escritorio",[488,14157,14158],{},"⚠️ macOS de escritorio (no verificado completamente)",[14160,14161,14163],"h1",{"id":14162},"copia-de-seguridad-de-la-bóveda","Copia de seguridad de la bóveda",[430,14165,14166],{},"NodeWarden te permite hacer copias de seguridad de tu bóveda en una computadora local o en almacenamiento remoto (almacenamiento compatible con S3 o WebDAV).",[430,14168,14169],{},"Para automatizar las copias de seguridad remotas:",[485,14171,14172,14175],{},[488,14173,14174],{},"Configura los detalles del almacenamiento remoto dentro del panel de control de NodeWarden.",[488,14176,14177,14178,14180],{},"Asegúrate de que la tarea Cron esté configurada en los ajustes de Cloudflare Worker para la copia de seguridad remota automática.",[1879,14179],{},[433,14181],{"alt":14182,"src":14183},"Configurando disparadores Cron para copias de seguridad automáticas en Cloudflare","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-worker-cron.webp",[14160,14185,14187],{"id":14186},"consideraciones-finales-de-seguridad","Consideraciones finales de seguridad",[485,14189,14190,14197,14200],{},[488,14191,14192,14193,14196],{},"Protege el acceso a tu cuenta de Cloudflare, de lo contrario los datos podrían verse comprometidos. Habilita la autenticación de dos factores (2FA) o una ",[899,14194,14195],{},"Passkey","(Clave de acceso) en tu cuenta de Cloudflare de inmediato.",[488,14198,14199],{},"Aloja NodeWarden en una cuenta de Cloudflare dedicada. No compartas recursos con otras aplicaciones web para minimizar los riesgos de seguridad.",[488,14201,14202],{},[444,14203,14204],{"href":371},"Protege NodeWarden con Cloudflare",[14160,14206,4030],{"id":1610},[485,14208,14209],{},[488,14210,14211],{},"Guía de inicio oficial de NodeWarden",{"title":425,"searchDepth":1061,"depth":1068,"links":14213},[14214,14215],{"id":13671,"depth":1061,"text":13672},{"id":13858,"depth":1061,"text":13859,"children":14216},[14217,14218,14219,14220,14221,14222],{"id":13878,"depth":1068,"text":13879},{"id":13916,"depth":1068,"text":13917},{"id":13950,"depth":1068,"text":13951},{"id":13981,"depth":1068,"text":13982},{"id":14027,"depth":1068,"text":14028},{"id":14070,"depth":1068,"text":14071,"children":14223},[14224,14225,14226],{"id":14077,"depth":1075,"text":14078},{"id":14110,"depth":1075,"text":14111},{"id":14137,"depth":1075,"text":14138},[2602,9482],"2026-05-25","Tus contraseñas son tu propiedad digital más importante, y mantenerlas seguras significa tenerlas en tus propias manos.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fservidor-autoalojado-bitwarden.webp","Miniatura del tutorial sobre cómo autoaloja un servidor compatible con Bitwarden, mostrando una bóveda digital y un rack de servidores.",{"schemaOrg":14233,"robots":1693,"sitemap":14236},[14234],{"@type":1670,"headline":14235,"description":14229},"Cómo proteger tus contraseñas en tu propia bóveda autoalojando un servidor compatible con Bitwarden",{"lastmod":14228},{"title":14235,"description":14229,"ogTitle":14235,"ogDescription":14229,"twitterTitle":14235,"twitterDescription":14229},"es\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",[],"bau4otheSwIWxF6AMgMQMI6BnRnf6NrTSUHp9qt3huk",1792489972924]