[{"data":1,"prerenderedAt":5295},["ShallowReactive",2],{"published-article-paths":3,"search-navigation":348,"\u002Fzh\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp":421,"\u002Fzh\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp-surround":1372},[4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346],{"path":5},"\u002Fde\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":7},"\u002Fde\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":9},"\u002Fde\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":11},"\u002Fde\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":13},"\u002Fde\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":15},"\u002Fde\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":17},"\u002Fde\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":19},"\u002Fde\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":21},"\u002Fde\u002Farticle\u002Fsetup-antigravity-2",{"path":23},"\u002Fde\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":25},"\u002Fde\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":27},"\u002Fde\u002Farticle\u002Fsync-obsidian-across-devices",{"path":29},"\u002Fde\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":31},"\u002Fde\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":33},"\u002Fde\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":35},"\u002Fde\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":37},"\u002Fen\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":39},"\u002Fen\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":41},"\u002Fen\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":43},"\u002Fen\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":45},"\u002Fen\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":47},"\u002Fen\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":49},"\u002Fen\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":51},"\u002Fen\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":53},"\u002Fen\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":55},"\u002Fen\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":57},"\u002Fen\u002Farticle\u002Fsetup-antigravity-2",{"path":59},"\u002Fen\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":61},"\u002Fen\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":63},"\u002Fen\u002Farticle\u002Fsync-obsidian-across-devices",{"path":65},"\u002Fen\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":67},"\u002Fen\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":69},"\u002Fen\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":71},"\u002Fen\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":73},"\u002Fes\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":75},"\u002Fes\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":77},"\u002Fes\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":79},"\u002Fes\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":81},"\u002Fes\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":83},"\u002Fes\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":85},"\u002Fes\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":87},"\u002Fes\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":89},"\u002Fes\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":91},"\u002Fes\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":93},"\u002Fes\u002Farticle\u002Fsetup-antigravity-2",{"path":95},"\u002Fes\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":97},"\u002Fes\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":99},"\u002Fes\u002Farticle\u002Fsync-obsidian-across-devices",{"path":101},"\u002Fes\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":103},"\u002Fes\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":105},"\u002Fes\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":107},"\u002Fes\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":109},"\u002Ffr\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":111},"\u002Ffr\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":113},"\u002Ffr\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":115},"\u002Ffr\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":117},"\u002Ffr\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":119},"\u002Ffr\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":121},"\u002Ffr\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":123},"\u002Ffr\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":125},"\u002Ffr\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":127},"\u002Ffr\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":129},"\u002Ffr\u002Farticle\u002Fsetup-antigravity-2",{"path":131},"\u002Ffr\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":133},"\u002Ffr\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":135},"\u002Ffr\u002Farticle\u002Fsync-obsidian-across-devices",{"path":137},"\u002Ffr\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":139},"\u002Ffr\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":141},"\u002Ffr\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":143},"\u002Ffr\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":145},"\u002Fid\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":147},"\u002Fid\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":149},"\u002Fid\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":151},"\u002Fid\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":153},"\u002Fid\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":155},"\u002Fid\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":157},"\u002Fid\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":159},"\u002Fid\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":161},"\u002Fid\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":163},"\u002Fid\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":165},"\u002Fid\u002Farticle\u002Fsetup-antigravity-2",{"path":167},"\u002Fid\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":169},"\u002Fid\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":171},"\u002Fid\u002Farticle\u002Fsync-obsidian-across-devices",{"path":173},"\u002Fid\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":175},"\u002Fid\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":177},"\u002Fid\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":179},"\u002Fid\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":181},"\u002Fja\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":183},"\u002Fja\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":185},"\u002Fja\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":187},"\u002Fja\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":189},"\u002Fja\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":191},"\u002Fja\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":193},"\u002Fja\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":195},"\u002Fja\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":197},"\u002Fja\u002Farticle\u002Fsetup-antigravity-2",{"path":199},"\u002Fja\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":201},"\u002Fja\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":203},"\u002Fja\u002Farticle\u002Fsync-obsidian-across-devices",{"path":205},"\u002Fja\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":207},"\u002Fja\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":209},"\u002Fja\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":211},"\u002Fja\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":213},"\u002Fpt\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":215},"\u002Fpt\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":217},"\u002Fpt\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":219},"\u002Fpt\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":221},"\u002Fpt\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":223},"\u002Fpt\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":225},"\u002Fpt\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":227},"\u002Fpt\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":229},"\u002Fpt\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":231},"\u002Fpt\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":233},"\u002Fpt\u002Farticle\u002Fsetup-antigravity-2",{"path":235},"\u002Fpt\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":237},"\u002Fpt\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":239},"\u002Fpt\u002Farticle\u002Fsync-obsidian-across-devices",{"path":241},"\u002Fpt\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":243},"\u002Fpt\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":245},"\u002Fpt\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":247},"\u002Fpt\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":249},"\u002Ftw\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":251},"\u002Ftw\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":253},"\u002Ftw\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":255},"\u002Ftw\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":257},"\u002Ftw\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":259},"\u002Ftw\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":261},"\u002Ftw\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":263},"\u002Ftw\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":265},"\u002Ftw\u002Farticle\u002Fsetup-antigravity-2",{"path":267},"\u002Ftw\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":269},"\u002Ftw\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":271},"\u002Ftw\u002Farticle\u002Fsync-obsidian-across-devices",{"path":273},"\u002Ftw\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":275},"\u002Ftw\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":277},"\u002Ftw\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":279},"\u002Ftw\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":281},"\u002Fvi\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":283},"\u002Fvi\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":285},"\u002Fvi\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":287},"\u002Fvi\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":289},"\u002Fvi\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":291},"\u002Fvi\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":293},"\u002Fvi\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":295},"\u002Fvi\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":297},"\u002Fvi\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":299},"\u002Fvi\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":301},"\u002Fvi\u002Farticle\u002Fsetup-antigravity-2",{"path":303},"\u002Fvi\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":305},"\u002Fvi\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":307},"\u002Fvi\u002Farticle\u002Fsync-obsidian-across-devices",{"path":309},"\u002Fvi\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":311},"\u002Fvi\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":313},"\u002Fvi\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":315},"\u002Fvi\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":317},"\u002Fzh\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":319},"\u002Fzh\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":321},"\u002Fzh\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":323},"\u002Fzh\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":325},"\u002Fzh\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":327},"\u002Fzh\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":329},"\u002Fzh\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":331},"\u002Fzh\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":333},"\u002Fzh\u002Farticle\u002Fsetup-antigravity-2",{"path":335},"\u002Fzh\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":337},"\u002Fzh\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":339},"\u002Fzh\u002Farticle\u002Fsync-obsidian-across-devices",{"path":341},"\u002Fzh\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":343},"\u002Fzh\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":345},"\u002Fzh\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":347},"\u002Fzh\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",[349,353,357,361,365,369,373,377,381,385,389,393,397,401,405,409,413,417],{"title":350,"path":351,"stem":352},"AI Agent Skills: What They Are & How to Create Them","\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them","en\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"title":354,"path":355,"stem":356},"Bringing Buzz to DeepSeek Harness: Taught to Speak Nostr","\u002Farticle\u002Fbringing-buzz-to-deepseek-harness","en\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"title":358,"path":359,"stem":360},"Solving AI Agent Skills Fragmentation with npx skills","\u002Farticle\u002Fcentralised-the-skills-for-agents","en\u002Farticle\u002Fcentralised-the-skills-for-agents",{"title":362,"path":363,"stem":364},"How to Expose Hermes Agent Privately with Cloudflare WARP","\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp","en\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"title":366,"path":367,"stem":368},"How AI Agent Skills Replace Nuxt App Scaffolding Scripts","\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts","en\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"title":370,"path":371,"stem":372},"Stop Exposing Your Vault: Secure NodeWarden with Cloudflare","\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare","en\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"title":374,"path":375,"stem":376},"How to Deploy Hermes Agent on a Linux VPS","\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server","en\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"title":378,"path":379,"stem":380},"Self-Host Your Travel Itineraries with TREK and Docker","\u002Farticle\u002Fself-hosted-travel-planner-trek","en\u002Farticle\u002Fself-hosted-travel-planner-trek",{"title":382,"path":383,"stem":384},"Self-Host Block's Buzz: Shared AI Agent Workspace","\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues","en\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"title":386,"path":387,"stem":388},"How to Self-Host a BitWarden Compatible Server Nodewarden","\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare","en\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"title":390,"path":391,"stem":392},"Google Antigravity 2 Hands-On: Setup & First Impressions","\u002Farticle\u002Fsetup-antigravity-2","en\u002Farticle\u002Fsetup-antigravity-2",{"title":394,"path":395,"stem":396},"NetSuite AI Connector Guide: MCP Setup & Use Cases","\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude","en\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"title":398,"path":399,"stem":400},"Switch Between Multiple Cloudflare WARP Orgs on Mac","\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac","en\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"title":402,"path":403,"stem":404},"How to Sync Obsidian Vaults Across Devices Securely","\u002Farticle\u002Fsync-obsidian-across-devices","en\u002Farticle\u002Fsync-obsidian-across-devices",{"title":406,"path":407,"stem":408},"Testing Claude Fable 5: A Financial Analysis Review","\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis","en\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"title":410,"path":411,"stem":412},"Guide to Browser and Scheduler in Antigravity 2","\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2","en\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"title":414,"path":415,"stem":416},"Build a Persistent AI Memory System on Cloudflare","\u002Farticle\u002Fuse-cloudflare-as-ai-memory","en\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"title":418,"path":419,"stem":420},"Antigravity 2 in Action: AI Agents, Skills, and MCP","\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2","en\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"id":422,"title":423,"author":424,"body":425,"category":1349,"date":1352,"description":1353,"extension":1354,"image":1355,"imageAlt":1356,"isPublished":642,"meta":1357,"minRead":665,"navigation":642,"path":323,"seo":1364,"stem":1366,"tags":1367,"updatedAt":1363,"__hash__":1371},"article\u002Fzh\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp.md","教程：使用 Cloudflare WARP 安全地将 Hermes Agent 暴露至私有网络","",{"type":426,"value":427,"toc":1331},"minimark",[428,445,456,460,463,477,481,490,493,497,550,554,706,710,743,747,750,817,820,856,859,886,890,900,904,943,1036,1040,1045,1062,1071,1151,1156,1202,1206,1252,1267,1271,1314,1317,1327],[429,430,431,432,436,437,440,441,444],"p",{},"当我们希望通过笔记本电脑、平板或手机等其他设备访问 ",[433,434,435],"strong",{},"Hermes Agent","，同时又不想将其暴露在公共互联网上时，这往往是一个普遍的挑战。利用 ",[433,438,439],{},"Cloudflare WARP"," 与 ",[433,442,443],{},"Cloudflare Zero Trust","，您可以在无需打开任何防火墙入站端口的情况下，将其安全地暴露并在全球范围内进行访问。",[429,446,447,448,452,453,455],{},"如果您之前已经阅读并遵循了我们的指南 '",[449,450,451],"a",{"href":375},"如何在 Linux VPS 上部署 Hermes Agent","'，那么您应该已经拥有了一个全天候运行的 Hermes Agent。相比于配置传统 VPN 带来的繁琐步骤，我们将使用 ",[433,454,439],{}," 客户端，通过互联网将 Hermes Agent 暴露到私有网络中。",[457,458,459],"h2",{"id":459},"架构解析",[429,461,462],{},"此方案涉及的两个核心组件：",[464,465,466,472],"ol",{},[467,468,469,471],"li",{},[433,470,443],{},"：Cloudflare 的云端仪表板，您可以在此定义路由规则和访问策略。",[467,473,474,476],{},[433,475,439],{},"：安装在您的设备（VPS、笔记本电脑、手机）上的客户端应用程序。它能够拦截发往私有网络的流量，并安全地进行路由。",[478,479,480],"h3",{"id":480},"前置条件",[482,483,484,487],"ul",{},[467,485,486],{},"一台已经运行 Hermes Agent 的 VPS。",[467,488,489],{},"一个免费的 Cloudflare 账号。",[457,491,492],{"id":492},"详细步骤指南",[478,494,496],{"id":495},"第-1-步配置-cloudflare-zero-trust","第 1 步：配置 Cloudflare Zero Trust",[464,498,499,509,517,529,536,543],{},[467,500,501,502,508],{},"登录您的 ",[449,503,507],{"href":504,"rel":505},"https:\u002F\u002Fdash.cloudflare.com\u002F",[506],"nofollow","Cloudflare 仪表板 (Dashboard)","。",[467,510,511,512],{},"点击左侧菜单栏中的 'Zero Trust'。\n",[513,514],"img",{"alt":515,"src":516},"Cloudflare 仪表板左侧侧边栏导航菜单中的 Zero Trust 选项","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-left-menu.webp",[467,518,519,520,524,525],{},"如果这是您第一次使用，系统会提示您选择套餐（免费版对本教程完全足够）并为您的团队命名（例如，",[521,522,523],"code",{},"ai-team","）。\n",[513,526],{"alt":527,"src":528},"首次设置 Cloudflare Zero Trust 帐户并为团队命名","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-team-setup.webp",[467,530,531,532],{},"点击 'Access'，然后点击 'Policies' 来创建访问策略，以定义谁有权限访问网络。\n",[513,533],{"alt":534,"src":535},"Cloudflare Zero Trust Access 策略页面，显示新配置的访问规则","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-access-policies-page.webp",[467,537,538,539],{},"点击 'Create new policy'。\n",[513,540],{"alt":541,"src":542},"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",[467,544,545,546],{},"选择 'Emails' 并在 'Policy rules' 下方输入您的电子邮件地址。\n",[513,547],{"alt":548,"src":549},"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",[478,551,553],{"id":552},"第-2-步在-vps-上配置-cloudflare-warp-客户端","第 2 步：在 VPS 上配置 Cloudflare WARP 客户端",[464,555,556,566,572,579,582,597,600,699],{},[467,557,558,559,562,563,508],{},"在 VPS 终端中运行 ",[521,560,561],{},"sudo apt update"," 和 ",[521,564,565],{},"sudo apt install cloudflare-warp",[467,567,558,568,571],{},[521,569,570],{},"warp-cli registration new \u003CTEAM-NAME>","，该命令将输出一个 URL。",[467,573,574,575,578],{},"复制输出的 URL（其格式类似于 ",[521,576,577],{},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fwarp","），并将其粘贴到浏览器中进行认证。",[467,580,581],{},"由于前面的策略设置中使用了电子邮件认证，请输入您的电子邮件以进行认证。",[467,583,584,585,588,589,592,593,596],{},"当浏览器中显示 '",[433,586,587],{},"Success","' 页面后，右键点击蓝色的 '",[433,590,591],{},"Open Cloudflare WARP","' 按钮并选择“",[433,594,595],{},"检查 (Inspect)","”。",[467,598,599],{},"复制该按钮链接中的长 Token 字符串。",[467,601,558,602,605,606,609,610],{},[521,603,604],{},"warp-cli --accept-tos registration token \"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>\"","，将您的 VPS 连接到 Cloudflare Zero Trust。",[607,608],"br",{},"如果在 Ubuntu 26 上遇到 'Error: Failed to communicate with the WARP API'，请运行以下命令：",[611,612,616],"pre",{"className":613,"code":614,"language":615,"meta":424,"style":424},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sudo systemctl restart warp-svc.service\n\n# Check status\nsudo systemctl status warp-svc.service\n\n# Run the warp-cli registration token again\nwarp-cli --accept-tos registration token   \"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>\"\n","bash",[521,617,618,637,644,651,663,668,674],{"__ignoreMap":424},[619,620,623,627,631,634],"span",{"class":621,"line":622},"line",1,[619,624,626],{"class":625},"sBMFI","sudo",[619,628,630],{"class":629},"sfazB"," systemctl",[619,632,633],{"class":629}," restart",[619,635,636],{"class":629}," warp-svc.service\n",[619,638,640],{"class":621,"line":639},2,[619,641,643],{"emptyLinePlaceholder":642},true,"\n",[619,645,647],{"class":621,"line":646},3,[619,648,650],{"class":649},"sHwdD","# Check status\n",[619,652,654,656,658,661],{"class":621,"line":653},4,[619,655,626],{"class":625},[619,657,630],{"class":629},[619,659,660],{"class":629}," status",[619,662,636],{"class":629},[619,664,666],{"class":621,"line":665},5,[619,667,643],{"emptyLinePlaceholder":642},[619,669,671],{"class":621,"line":670},6,[619,672,673],{"class":649},"# Run the warp-cli registration token again\n",[619,675,677,680,683,686,689,693,696],{"class":621,"line":676},7,[619,678,679],{"class":625},"warp-cli",[619,681,682],{"class":629}," --accept-tos",[619,684,685],{"class":629}," registration",[619,687,688],{"class":629}," token",[619,690,692],{"class":691},"sMK4o","   \"",[619,694,695],{"class":629},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>",[619,697,698],{"class":691},"\"\n",[467,700,701,702],{},"回到 Cloudflare Zero Trust 仪表板，点击 'Devices'。您现在应该能看到您的 VPS 设备。\n",[513,703],{"alt":704,"src":705},"Zero Trust 设备仪表板，确认 Linux VPS 已成功连接","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-devices-vps-connected.webp",[478,707,709],{"id":708},"第-3-步配置流量路由","第 3 步：配置流量路由",[464,711,712,719,726,733],{},[467,713,714,715],{},"在 Devices 仪表板中点击您 VPS 设备的配置文件。\n",[513,716],{"alt":717,"src":718},"访问已注册 VPS 设备的详细信息与拆分隧道设置","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-device-profile.webp",[467,720,721,722],{},"向下滚动至 'Split Tunnels' 部分。\n",[513,723],{"alt":724,"src":725},"VPS 设备配置文件下的 Split Tunnels 拆分隧道区域","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-split-tunnels-section.webp",[467,727,728,729],{},"点击 'Manage' 按钮，并按照下图配置设置。如有需要请替换相应的 IP 地址。\n",[513,730],{"alt":731,"src":732},"在 Cloudflare 设置中管理拆分隧道 IP 与主机名排除规则","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-manage-split-tunnels.webp",[467,734,735,736,562,739,742],{},"暴露 ",[521,737,738],{},"address",[521,740,741],{},"host"," 会将发往您服务的流量路由到该私有网络内。",[478,744,746],{"id":745},"第-4-步配置-vps-防火墙","第 4 步：配置 VPS 防火墙",[429,748,749],{},"启用防火墙，仅允许 '100.96.0.0\u002F12' 子网的流量通过，并阻止其他所有公共入站访问。",[611,751,753],{"className":613,"code":752,"language":615,"meta":424,"style":424},"sudo ufw enable \nsudo ufw default allow outgoing \nsudo ufw default deny incoming\nsudo ufw allow in from 100.96.0.0\u002F12\n",[521,754,755,769,786,800],{"__ignoreMap":424},[619,756,757,759,762,765],{"class":621,"line":622},[619,758,626],{"class":625},[619,760,761],{"class":629}," ufw",[619,763,764],{"class":629}," enable",[619,766,768],{"class":767},"sTEyZ"," \n",[619,770,771,773,775,778,781,784],{"class":621,"line":639},[619,772,626],{"class":625},[619,774,761],{"class":629},[619,776,777],{"class":629}," default",[619,779,780],{"class":629}," allow",[619,782,783],{"class":629}," outgoing",[619,785,768],{"class":767},[619,787,788,790,792,794,797],{"class":621,"line":646},[619,789,626],{"class":625},[619,791,761],{"class":629},[619,793,777],{"class":629},[619,795,796],{"class":629}," deny",[619,798,799],{"class":629}," incoming\n",[619,801,802,804,806,808,811,814],{"class":621,"line":653},[619,803,626],{"class":625},[619,805,761],{"class":629},[619,807,780],{"class":629},[619,809,810],{"class":629}," in",[619,812,813],{"class":629}," from",[619,815,816],{"class":629}," 100.96.0.0\u002F12\n",[429,818,819],{},"允许回环网络 (loopback) 的流量，避免导致本地服务异常：",[611,821,823],{"className":613,"code":822,"language":615,"meta":424,"style":424},"sudo ufw allow in on lo\nsudo ufw allow out on lo\n",[521,824,825,841],{"__ignoreMap":424},[619,826,827,829,831,833,835,838],{"class":621,"line":622},[619,828,626],{"class":625},[619,830,761],{"class":629},[619,832,780],{"class":629},[619,834,810],{"class":629},[619,836,837],{"class":629}," on",[619,839,840],{"class":629}," lo\n",[619,842,843,845,847,849,852,854],{"class":621,"line":639},[619,844,626],{"class":625},[619,846,761],{"class":629},[619,848,780],{"class":629},[619,850,851],{"class":629}," out",[619,853,837],{"class":629},[619,855,840],{"class":629},[429,857,858],{},"重载防火墙规则并验证状态：",[611,860,862],{"className":613,"code":861,"language":615,"meta":424,"style":424},"sudo ufw reload \nsudo ufw status verbose\n",[521,863,864,875],{"__ignoreMap":424},[619,865,866,868,870,873],{"class":621,"line":622},[619,867,626],{"class":625},[619,869,761],{"class":629},[619,871,872],{"class":629}," reload",[619,874,768],{"class":767},[619,876,877,879,881,883],{"class":621,"line":639},[619,878,626],{"class":625},[619,880,761],{"class":629},[619,882,660],{"class":629},[619,884,885],{"class":629}," verbose\n",[478,887,889],{"id":888},"第-5-步将-hermes-agent-暴露至私有网络","第 5 步：将 Hermes Agent 暴露至私有网络",[429,891,892,893,896,897,508],{},"我们将把 ",[433,894,895],{},"Hermes Agent Web Dashboard"," 暴露至私有网络，并使用默认的认证提供商 ",[433,898,899],{},"Nous Research",[901,902,903],"h4",{"id":903},"配置认证提供商",[464,905,906,915,922,929,936],{},[467,907,908,909,914],{},"前往 ",[449,910,913],{"href":911,"rel":912},"https:\u002F\u002Fportal.nousresearch.com",[506],"portal.nousresearch.com"," 注册一个账号。",[467,916,917,918],{},"选择 'Local Dashboards'。\n",[513,919],{"alt":920,"src":921},"在 Nous Research 门户网站中选择 Local Dashboards 本地仪表板选项","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-local-dashboards-selection.webp",[467,923,924,925],{},"点击 'Register Dashboard'。\n",[513,926],{"alt":927,"src":928},"点击 Register Dashboard 按钮以创建新的仪表板项目","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-register-dashboard.webp",[467,930,931,932],{},"将 VPS 在私有网络中的 IP 地址填入 'Dashboard redirect URI' 并点击 'Save'。\n",[513,933],{"alt":934,"src":935},"在 Nous Research 门户中注册私有网络 VPS IP 地址作为重定向 URI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-register-redirect-uri.webp",[467,937,938,939,942],{},"复制 'OAuth client ID' 并将其粘贴到您的 ",[521,940,941],{},"config.yaml"," 文件中：",[611,944,948],{"className":945,"code":946,"language":947,"meta":424,"style":424},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","dashboard:\n  theme: default\n  show_token_analytics: false\n  oauth:\n    client_id: agent:cmq02x7ha0002jk0ba3kfnb\n    portal_url: https:\u002F\u002Fportal.nousresearch.com\n  basic_auth:\n    username: ''\n    password_hash: ''\n","yaml",[521,949,950,959,970,981,988,998,1008,1015,1026],{"__ignoreMap":424},[619,951,952,956],{"class":621,"line":622},[619,953,955],{"class":954},"swJcz","dashboard",[619,957,958],{"class":691},":\n",[619,960,961,964,967],{"class":621,"line":639},[619,962,963],{"class":954},"  theme",[619,965,966],{"class":691},":",[619,968,969],{"class":629}," default\n",[619,971,972,975,977],{"class":621,"line":646},[619,973,974],{"class":954},"  show_token_analytics",[619,976,966],{"class":691},[619,978,980],{"class":979},"sfNiH"," false\n",[619,982,983,986],{"class":621,"line":653},[619,984,985],{"class":954},"  oauth",[619,987,958],{"class":691},[619,989,990,993,995],{"class":621,"line":665},[619,991,992],{"class":954},"    client_id",[619,994,966],{"class":691},[619,996,997],{"class":629}," agent:cmq02x7ha0002jk0ba3kfnb\n",[619,999,1000,1003,1005],{"class":621,"line":670},[619,1001,1002],{"class":954},"    portal_url",[619,1004,966],{"class":691},[619,1006,1007],{"class":629}," https:\u002F\u002Fportal.nousresearch.com\n",[619,1009,1010,1013],{"class":621,"line":676},[619,1011,1012],{"class":954},"  basic_auth",[619,1014,958],{"class":691},[619,1016,1018,1021,1023],{"class":621,"line":1017},8,[619,1019,1020],{"class":954},"    username",[619,1022,966],{"class":691},[619,1024,1025],{"class":691}," ''\n",[619,1027,1029,1032,1034],{"class":621,"line":1028},9,[619,1030,1031],{"class":954},"    password_hash",[619,1033,966],{"class":691},[619,1035,1025],{"class":691},[901,1037,1039],{"id":1038},"使用-systemd-确保-hermes-dashboard-开机自启","使用 Systemd 确保 Hermes Dashboard 开机自启",[464,1041,1042],{},[467,1043,1044],{},"创建服务文件：",[611,1046,1050],{"className":1047,"code":1048,"language":1049,"meta":424,"style":424},"language-shell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n","shell",[521,1051,1052],{"__ignoreMap":424},[619,1053,1054,1056,1059],{"class":621,"line":622},[619,1055,626],{"class":625},[619,1057,1058],{"class":629}," nano",[619,1060,1061],{"class":629}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[464,1063,1064],{"start":639},[467,1065,1066,1067,1070],{},"粘贴以下配置，确保 ",[521,1068,1069],{},"--host 0.0.0.0"," 包含在命令中：",[611,1072,1076],{"className":1073,"code":1074,"language":1075,"meta":424,"style":424},"language-ini shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[Unit]\nDescription=Hermes Dashboard\nAfter=network.target\n\n[Service]\nUser=hermes\nWorkingDirectory=\u002Fhome\u002Fhermes\nExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes dashboard --host 0.0.0.0\nRestart=always\nRestartSec=10\nEnvironment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n\n[Install]\nWantedBy=multi-user.target\n","ini",[521,1077,1078,1083,1088,1093,1097,1102,1107,1112,1117,1122,1128,1134,1139,1145],{"__ignoreMap":424},[619,1079,1080],{"class":621,"line":622},[619,1081,1082],{},"[Unit]\n",[619,1084,1085],{"class":621,"line":639},[619,1086,1087],{},"Description=Hermes Dashboard\n",[619,1089,1090],{"class":621,"line":646},[619,1091,1092],{},"After=network.target\n",[619,1094,1095],{"class":621,"line":653},[619,1096,643],{"emptyLinePlaceholder":642},[619,1098,1099],{"class":621,"line":665},[619,1100,1101],{},"[Service]\n",[619,1103,1104],{"class":621,"line":670},[619,1105,1106],{},"User=hermes\n",[619,1108,1109],{"class":621,"line":676},[619,1110,1111],{},"WorkingDirectory=\u002Fhome\u002Fhermes\n",[619,1113,1114],{"class":621,"line":1017},[619,1115,1116],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes dashboard --host 0.0.0.0\n",[619,1118,1119],{"class":621,"line":1028},[619,1120,1121],{},"Restart=always\n",[619,1123,1125],{"class":621,"line":1124},10,[619,1126,1127],{},"RestartSec=10\n",[619,1129,1131],{"class":621,"line":1130},11,[619,1132,1133],{},"Environment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n",[619,1135,1137],{"class":621,"line":1136},12,[619,1138,643],{"emptyLinePlaceholder":642},[619,1140,1142],{"class":621,"line":1141},13,[619,1143,1144],{},"[Install]\n",[619,1146,1148],{"class":621,"line":1147},14,[619,1149,1150],{},"WantedBy=multi-user.target\n",[464,1152,1153],{"start":646},[467,1154,1155],{},"启用并启动服务：",[611,1157,1159],{"className":1047,"code":1158,"language":1049,"meta":424,"style":424},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-dashboard\nsudo systemctl start hermes-dashboard\nsudo systemctl status hermes-dashboard\n",[521,1160,1161,1170,1181,1192],{"__ignoreMap":424},[619,1162,1163,1165,1167],{"class":621,"line":622},[619,1164,626],{"class":625},[619,1166,630],{"class":629},[619,1168,1169],{"class":629}," daemon-reload\n",[619,1171,1172,1174,1176,1178],{"class":621,"line":639},[619,1173,626],{"class":625},[619,1175,630],{"class":629},[619,1177,764],{"class":629},[619,1179,1180],{"class":629}," hermes-dashboard\n",[619,1182,1183,1185,1187,1190],{"class":621,"line":646},[619,1184,626],{"class":625},[619,1186,630],{"class":629},[619,1188,1189],{"class":629}," start",[619,1191,1180],{"class":629},[619,1193,1194,1196,1198,1200],{"class":621,"line":653},[619,1195,626],{"class":625},[619,1197,630],{"class":629},[619,1199,660],{"class":629},[619,1201,1180],{"class":629},[478,1203,1205],{"id":1204},"第-6-步在桌面上安装-cloudflare-warp-客户端","第 6 步：在桌面上安装 Cloudflare WARP 客户端",[464,1207,1208,1217,1220,1227,1234,1241],{},[467,1209,1210,1211,1216],{},"从 ",[449,1212,1215],{"href":1213,"rel":1214},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fwarp-client\u002Fget-started\u002F",[506],"Cloudflare 官网"," 下载 Cloudflare WARP 客户端。",[467,1218,1219],{},"安装完成后打开并运行 Cloudflare WARP 客户端。",[467,1221,1222,1223],{},"按提示登录。\n",[513,1224],{"alt":1225,"src":1226},"台式电脑上的 Cloudflare WARP 客户端登录提示","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-login-prompt.webp",[467,1228,1229,1230],{},"登录成功后会显示 'Success' 页面。\n",[513,1231],{"alt":1232,"src":1233},"在台式电脑登录 Cloudflare Zero Trust 后的验证成功网页","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-login-success.webp",[467,1235,1236,1237],{},"此时 WARP 客户端应显示已连接至您的 Zero Trust 团队。\n",[513,1238],{"alt":1239,"src":1240},"桌面版 Cloudflare WARP 客户端确认已连接至 Zero Trust 私有网络","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-client-connected.webp",[467,1242,1243,1244,1247,1248],{},"在浏览器中输入您的私有 IP 地址（例如 ",[521,1245,1246],{},"100.96.0.3","），即可成功加载 Hermes Web Dashboard。\n",[513,1249],{"alt":1250,"src":1251},"在桌面浏览器中访问私有 Hermes Agent 网页仪表板","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fhermes-agent-dashboard-desktop-view.webp",[1253,1254,1255],"blockquote",{},[429,1256,1257,1260,1261,1266],{},[433,1258,1259],{},"macOS 用户进阶提示："," 如果您需要使用 WARP 客户端访问多个 Cloudflare 账号，请参阅我们的快速指南 ",[433,1262,1263],{},[449,1264,1265],{"href":399},"使用MDM配置文件在macOS上无缝切换与配置多个Cloudflare WARP零信任组织的完整指南","，实现账号间的无缝切换。",[478,1268,1270],{"id":1269},"第-7-步在-ios-设备上安装-cloudflare-warp-客户端","第 7 步：在 iOS 设备上安装 Cloudflare WARP 客户端",[464,1272,1273,1279,1287,1295,1303],{},[467,1274,1275,1276,508],{},"在 App Store 中安装 ",[433,1277,1278],{},"Cloudflare One",[467,1280,1281,1282],{},"打开 Cloudflare One 应用并在提示时输入您的团队名称。\n",[513,1283],{"alt":1284,"src":1285,"width":1286},"在 iOS 上的 Cloudflare One 应用程序中输入 Cloudflare Zero Trust 团队名称","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-team-name-prompt.webp",239,[467,1288,1289,1290],{},"使用前面在策略规则中配置的同一个电子邮箱地址进行登录。\n",[513,1291],{"alt":1292,"src":1293,"width":1294},"iOS 上的 Cloudflare Zero Trust 电子邮件验证提示","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-email-login.webp",229,[467,1296,1297,1298],{},"连接成功后，界面应如下所示：\n",[513,1299],{"alt":1300,"src":1301,"width":1302},"iOS 移动设备上 Cloudflare One 应用程序显示的已连接状态","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-client-connected.webp",322,[467,1304,1305,1306,1308,1309],{},"在手机浏览器中输入私有 IP ",[521,1307,1246],{}," 即可在移动设备上访问 Hermes Web Dashboard。\n",[513,1310],{"alt":1311,"src":1312,"width":1313},"在手机浏览器上访问 Hermes Agent 网页仪表板界面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fhermes-agent-dashboard-mobile-view.webp",345,[457,1315,1316],{"id":1316},"结语",[429,1318,1319,1320,1322,1323,1326],{},"借助 ",[433,1321,443],{}," 管理身份策略以及 ",[433,1324,1325],{},"WARP"," 客户端通过加密隧道路由流量，您的 Hermes Agent 现在可以被您的设备在全球范围内安全访问。该配置为构建并访问完全远程、私有的 AI 基础设施奠定了坚实而安全的根基。",[1328,1329,1330],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":424,"searchDepth":639,"depth":646,"links":1332},[1333,1336,1348],{"id":459,"depth":639,"text":459,"children":1334},[1335],{"id":480,"depth":646,"text":480},{"id":492,"depth":639,"text":492,"children":1337},[1338,1339,1340,1341,1342,1346,1347],{"id":495,"depth":646,"text":496},{"id":552,"depth":646,"text":553},{"id":708,"depth":646,"text":709},{"id":745,"depth":646,"text":746},{"id":888,"depth":646,"text":889,"children":1343},[1344,1345],{"id":903,"depth":653,"text":903},{"id":1038,"depth":653,"text":1039},{"id":1204,"depth":646,"text":1205},{"id":1269,"depth":646,"text":1270},{"id":1316,"depth":639,"text":1316},[1350,1351],"ai-agents","security","2026-07-09","本文深入探讨如何使用 Cloudflare WARP 与 Zero Trust 技术，在完全不需要开启任何防火墙入站端口的情况下，安全地将您的 Hermes Agent 暴露到私有网络中，从而实现全球范围内的安全访问。这为您构建专属私有远程 AI 基础设施打下坚实基础。","md","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002FZH-Exposing-Hermes-Agent-to-Private-Network-Using-Cloudflare-WARP.webp","通过 Cloudflare Zero Trust 和 WARP 隧道安全地将 Hermes Agent 暴露至私有网络",{"schemaOrg":1358,"robots":1361,"sitemap":1362},[1359],{"@type":1360,"headline":423,"description":1353,"name":423,"image":1355},"HowTo","index, follow",{"lastmod":1363},"2026-09-28",{"title":1365,"description":1353,"ogTitle":423,"ogDescription":1353,"twitterTitle":423,"twitterDescription":1353},"通过 Cloudflare Zero Trust 实现对 Hermes Agent 的安全访问","zh\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",[439,1368,435,1369,1370],"Zero Trust","私有网络","教程","ishCX4pAaZiNmcl6lotlFfav2RLbIjIFUuYwHpzosd4",{"surround":1373,"related":4101},[1374,2843],{"id":1375,"title":1376,"author":424,"body":1377,"category":2821,"date":2823,"description":2824,"extension":1354,"image":2825,"imageAlt":2826,"isPublished":642,"meta":2827,"minRead":1017,"navigation":642,"path":339,"seo":2834,"stem":2836,"tags":2837,"updatedAt":2841,"__hash__":2842},"article\u002Fzh\u002Farticle\u002Fsync-obsidian-across-devices.md","如何在多台设备之间安全地同步 Obsidian 本地知识库",{"type":426,"value":1378,"toc":2799},[1379,1382,1387,1396,1405,1422,1427,1436,1440,1445,1459,1475,1478,1482,1485,1492,1497,1501,1505,1563,1571,1603,1607,1614,1622,1629,1691,1694,1713,1720,1732,1736,1740,1747,1752,1763,1784,1789,1802,1807,1812,1817,1832,1835,1840,1843,1848,1852,1857,1871,1875,1889,1900,1904,1909,1912,1919,1952,1956,1963,2107,2141,2147,2168,2179,2184,2188,2203,2274,2278,2283,2319,2450,2457,2463,2470,2476,2479,2485,2492,2507,2518,2525,2531,2542,2671,2677,2682,2685,2690,2693,2697,2703,2708,2714,2725,2735,2739,2750,2756,2763,2769,2773,2796],[429,1380,1381],{},"Obsidian 是一款本地优先的知识管理应用。每一个笔记在设备上都是一个本地 Markdown 文件，并完全处于您的掌控之中。然而，我们通常希望在笔记本电脑、手机和其他设备上共享同一个本地知识库，或者希望在某些时候能够通过网页浏览器远程访问它。",[513,1383],{"src":1384,"alt":1385,"style":1386},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-multi-device-sync-illustration.webp","跨多设备同步的 Obsidian 本地知识库的插图","max-width: 667px; width: 100%; height: auto;",[429,1388,1389,1390,1395],{},"市面上有很多针对 Obsidian 的同步方案，但在冲突处理、加密和数据自主权方面，它们或多或少都做出了一些妥协。",[449,1391,1394],{"href":1392,"rel":1393},"https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch",[506],"Synch"," 是一款开源应用，它可以在自建服务器上实现具备端到端加密和冲突解决机制的 Obsidian 知识库同步。",[429,1397,1398,1399,1404],{},"虽然 Obsidian 的本地优先方案在绝大多数情况下都能完美工作，但在某些场景下，我们可能仍需要通过网页浏览器远程访问并编辑笔记。",[449,1400,1403],{"href":1401,"rel":1402},"https:\u002F\u002Fgithub.com\u002FNystik-gh\u002Fignis",[506],"Ignis"," 是一款开源应用，它能够在网页浏览器中以接近原生的体验运行 Obsidian，让您能够直接读取和编辑知识库。",[429,1406,1407,1408,1411,1412,562,1414,1416,1417,1421],{},"在本文中，我们将在一台 ",[433,1409,1410],{},"VPS","（虚拟专用服务器）上部署 ",[433,1413,1394],{},[433,1415,1403],{},"，并将它们安全地托管在 ",[433,1418,1419],{},[449,1420,443],{"href":363}," 私有网络中，而无需将它们直接暴露在公网上。",[513,1423],{"src":1424,"alt":1425,"style":1426},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-sync-cloudflare-zero-trust-architecture.webp","使用 Cloudflare Zero Trust 安全网络同步 Obsidian 的架构图","max-width: 671px; width: 100%; height: auto;",[1428,1429],"article-card",{"description":1430,"image":1431,"image-alt":1432,"label":1433,"min-read":1434,"title":1435,"to":363},"学习如何使用 Cloudflare WARP 和 Zero Trust 安全地在全球范围内暴露和访问您的 Hermes Agent，而无需在防火墙上开启任何入站端口。","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","使用 Cloudflare Zero Trust 和 WARP 隧道安全地将 Hermes Agent 暴露到私有网络中","相关指南","8","如何使用 Cloudflare WARP 私密地公开暴露 Hermes Agent",[457,1437,1439],{"id":1438},"使用-synch-安全同步-obsidian-知识库","使用 Synch 安全同步 Obsidian 知识库",[429,1441,1442,1444],{},[433,1443,1394],{}," 提供以下特性：",[482,1446,1447,1450,1453,1456],{},[467,1448,1449],{},"检测到更改时立即实时同步您的知识库",[467,1451,1452],{},"并在上传前对知识库数据进行端到端加密",[467,1454,1455],{},"支持从历史版本记录中进行恢复",[467,1457,1458],{},"内置自动冲突解决机制",[429,1460,1461,1463,1464,1467,1468,1471,1472,1474],{},[433,1462,1394],{}," 会在您的本地设备上生成一个随机的 32 字节",[433,1465,1466],{},"知识库密钥","（Vault Key），该密钥专门用于加密您的知识库数据。当您创建远程知识库时，您需要设置一个",[433,1469,1470],{},"知识库密码","。该密码用于保护您的",[433,1473,1466],{},"，以便能够将密钥安全地存储在服务器上，并在其他设备上进行解密。",[429,1476,1477],{},"笔记的冲突解决是在客户端设备上完成的，而不是在服务器端。如果两台设备同时编辑同一个笔记，服务器会保留最先到达的版本，并通知另一台设备其本地版本已过时。随后，该设备会自动将服务器上的最新版本与其本地更改进行合并，然后再将合并后的最终笔记上传。",[478,1479,1481],{"id":1480},"在您的-vps-上部署-synch","在您的 VPS 上部署 Synch",[901,1483,1484],{"id":1484},"创建域名解析",[429,1486,1487,1488,1491],{},"在 Cloudflare 中创建一条 A 记录，并将其代理状态设置为",[433,1489,1490],{},"仅限 DNS","（绕过 Cloudflare CDN）。",[513,1493],{"src":1494,"alt":1495,"style":1496},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fcloudflare-dns-a-record-synch-server.webp","在 Cloudflare 中为 Synch 同步服务器配置 DNS A 记录","max-width: 538px; width: 100%; height: auto;",[901,1498,1500],{"id":1499},"在-ubuntu-上使用-docker-安装-synch","在 Ubuntu 上使用 Docker 安装 Synch",[1502,1503,1504],"h5",{"id":1504},"克隆仓库",[611,1506,1508],{"className":613,"code":1507,"language":615,"meta":424,"style":424},"git clone https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch.git       \n        \n# Navigate to the API folder\ncd synch\u002Fapps\u002Fapi\n        \n# Copy the example environment file:\ncp .env.example .env\n",[521,1509,1510,1524,1529,1534,1543,1547,1552],{"__ignoreMap":424},[619,1511,1512,1515,1518,1521],{"class":621,"line":622},[619,1513,1514],{"class":625},"git",[619,1516,1517],{"class":629}," clone",[619,1519,1520],{"class":629}," https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch.git",[619,1522,1523],{"class":767},"       \n",[619,1525,1526],{"class":621,"line":639},[619,1527,1528],{"class":767},"        \n",[619,1530,1531],{"class":621,"line":646},[619,1532,1533],{"class":649},"# Navigate to the API folder\n",[619,1535,1536,1540],{"class":621,"line":653},[619,1537,1539],{"class":1538},"s2Zo4","cd",[619,1541,1542],{"class":629}," synch\u002Fapps\u002Fapi\n",[619,1544,1545],{"class":621,"line":665},[619,1546,1528],{"class":767},[619,1548,1549],{"class":621,"line":670},[619,1550,1551],{"class":649},"# Copy the example environment file:\n",[619,1553,1554,1557,1560],{"class":621,"line":676},[619,1555,1556],{"class":625},"cp",[619,1558,1559],{"class":629}," .env.example",[619,1561,1562],{"class":629}," .env\n",[1502,1564,1566,1567,1570],{"id":1565},"编辑-env-环境变量","编辑 ",[521,1568,1569],{},".env"," 环境变量",[482,1572,1573,1579,1597],{},[467,1574,1575,1578],{},[521,1576,1577],{},"PUBLIC_URL=synch.pafor.me","：输入您的 Synch 服务器公网域名（即在上一步中创建的域名）。",[467,1580,1581,562,1584,1587,1588,1592,1593,1596],{},[521,1582,1583],{},"BETTER_AUTH_SECRET",[521,1585,1586],{},"SYNC_TOKEN_SECRET","：请使用此 ",[449,1589,1591],{"href":1590},"\u002Fzh\u002Ftools\u002Fsecret-key-hex","在线秘钥生成工具"," 或在终端中运行两次 ",[521,1594,1595],{},"openssl rand -hex 32"," 来生成高强度的随机秘钥。",[467,1598,1599,1602],{},[521,1600,1601],{},"AUTH_ALLOWED_EMAILS","：允许注册并创建账户的邮箱地址列表（用英文逗号分隔）。",[1502,1604,1606],{"id":1605},"将域名添加至-caddyfile","将域名添加至 Caddyfile",[429,1608,1609,1610,508],{},"有关如何将 Cloudflare DNS 模块集成到 Caddy 中并使用 Docker 容器启动的详细配置方法，请参阅我们的 ",[449,1611,1613],{"href":1612},"\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#_4-enable-https-with-caddy","自建 Buzz 协作平台文章",[1428,1615],{"description":1616,"image":1617,"image-alt":1618,"label":1619,"min-read":1620,"title":1621,"to":1612},"学习如何在 Docker 容器中配置 Caddy 反向代理，并利用 Cloudflare DNS Challenge 自动申请和管理 SSL\u002FTLS 证书。","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","在自建工作区中配置带有 Cloudflare DNS API 令牌的 Caddy，实现 SSL\u002FTLS 证书的自动申请与管理","自建指南","12","自建 Block 旗下 Buzz 协作平台：轻松构建人类与 AI 智能体高效协同工作的全新共享工作空间",[429,1623,1624,1625,1628],{},"在您的 Caddyfile 中添加 ",[521,1626,1627],{},"SYNCH_DOMAIN"," 配置，并将其反向代理指向 8787 端口（Synch 容器内部运行的端口）：",[611,1630,1634],{"className":1631,"code":1632,"language":1633,"meta":424,"style":424},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}\n}\n\n{$SYNCH_DOMAIN} {\n  encode zstd gzip\n  reverse_proxy host.docker.internal:8787\n}\n","json",[521,1635,1636,1641,1649,1653,1657,1671,1676,1687],{"__ignoreMap":424},[619,1637,1638],{"class":621,"line":622},[619,1639,1640],{"class":691},"{\n",[619,1642,1643,1646],{"class":621,"line":639},[619,1644,1645],{"class":767},"  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN",[619,1647,1648],{"class":691},"}\n",[619,1650,1651],{"class":621,"line":646},[619,1652,1648],{"class":767},[619,1654,1655],{"class":621,"line":653},[619,1656,643],{"emptyLinePlaceholder":642},[619,1658,1659,1662,1665,1668],{"class":621,"line":665},[619,1660,1661],{"class":691},"{",[619,1663,1664],{"class":767},"$SYNCH_DOMAIN",[619,1666,1667],{"class":691},"}",[619,1669,1670],{"class":691}," {\n",[619,1672,1673],{"class":621,"line":670},[619,1674,1675],{"class":767},"  encode zstd gzip\n",[619,1677,1678,1681,1683],{"class":621,"line":676},[619,1679,1680],{"class":767},"  reverse_proxy host.docker.internal",[619,1682,966],{"class":691},[619,1684,1686],{"class":1685},"sbssI","8787\n",[619,1688,1689],{"class":621,"line":1017},[619,1690,1648],{"class":691},[429,1692,1693],{},"启动容器：",[611,1695,1697],{"className":613,"code":1696,"language":615,"meta":424,"style":424},"docker compose up -d\n",[521,1698,1699],{"__ignoreMap":424},[619,1700,1701,1704,1707,1710],{"class":621,"line":622},[619,1702,1703],{"class":625},"docker",[619,1705,1706],{"class":629}," compose",[619,1708,1709],{"class":629}," up",[619,1711,1712],{"class":629}," -d\n",[429,1714,1715,1716,1719],{},"运行以下 ",[521,1717,1718],{},"curl"," 命令以验证服务的可用性：",[611,1721,1723],{"className":613,"code":1722,"language":615,"meta":424,"style":424},"curl https:\u002F\u002Fsynch.pafor.me\u002Fhealth\n",[521,1724,1725],{"__ignoreMap":424},[619,1726,1727,1729],{"class":621,"line":622},[619,1728,1718],{"class":625},[619,1730,1731],{"class":629}," https:\u002F\u002Fsynch.pafor.me\u002Fhealth\n",[478,1733,1735],{"id":1734},"将-obsidian-客户端连接至您的-synch-服务器","将 Obsidian 客户端连接至您的 Synch 服务器",[901,1737,1739],{"id":1738},"在-obsidian-中安装-synch-插件","在 Obsidian 中安装 Synch 插件",[429,1741,1742,1743,1746],{},"打开 Obsidian 的“设置”（Settings），导航至“第三方插件”（Community plugins），然后点击 ",[433,1744,1745],{},"“浏览”（Browse）"," 按钮：",[513,1748],{"src":1749,"alt":1750,"style":1751},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-community-plugins-browse.webp","在 Obsidian 设置中浏览第三方社区插件","max-width: 523px; width: 100%; height: auto;",[429,1753,1754,1755,1758,1759],{},"搜索并安装 ",[433,1756,1757],{},"'Synchrun'"," 插件：\n",[513,1760],{"src":1761,"alt":1762,"style":1496},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-install-synchrun-plugin.webp","在 Obsidian 中安装 Synchrun 同步插件",[429,1764,1765,1766,1768,1769,1772,1773,1776,1777,1780,1781,508],{},"安装完成后，打开 ",[433,1767,1757],{}," 插件设置，并启用 ",[433,1770,1771],{},"“使用自建服务器”（Use a self-hosted server）","。随后，在 ",[433,1774,1775],{},"“服务器 URL”（Server URL）"," 字段中输入 ",[521,1778,1779],{},"https:\u002F\u002Fsynch.pafor.me","，并点击 ",[433,1782,1783],{},"“保存”（Save）",[513,1785],{"src":1786,"alt":1787,"style":1788},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-plugin-settings-self-hosted.webp","在 Synchrun 插件设置中配置您的自建服务器 URL","max-width: 525px; width: 100%; height: auto;",[429,1790,1791,1792,1795,1796,1798,1799,1801],{},"点击 ",[433,1793,1794],{},"“在当前设备上登录”（Sign in on this device）"," 按钮。接着，使用您在 ",[521,1797,1569],{}," 中 ",[521,1800,1601],{}," 列表中指定的邮箱地址进行注册，注册成功后您将看到以下授权页面：",[513,1803],{"src":1804,"alt":1805,"style":1806},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-account-authorization-page.webp","Synchrun 插件的账户授权登录页面","max-width: 494px; width: 100%; height: auto;",[429,1808,1791,1809,1746],{},[433,1810,1811],{},"“允许 Obsidian 登录”（Allow Obsidian sign-in）",[513,1813],{"src":1814,"alt":1815,"style":1816},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-allow-obsidian-signin.webp","允许 Obsidian 通过 Synch 登录","max-width: 498px; width: 100%; height: auto;",[429,1818,1791,1819,1822,1823,1826,1827],{},[433,1820,1821],{},"“返回 Obsidian”（Return to Obsidian）"," 按钮，随后点击 ",[433,1824,1825],{},"“创建知识库”（Create vault）","：\n",[513,1828],{"src":1829,"alt":1830,"style":1831},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-create-remote-vault.webp","在 Synchrun 中创建新的远程同步知识库","max-width: 496px; width: 100%; height: auto;",[429,1833,1834],{},"输入您自定义的知识库名称与高强度密码来创建远程知识库。",[513,1836],{"src":1837,"alt":1838,"style":1839},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-vault-password-setup.webp","为 Obsidian 远程知识库设置高强度安全密码","max-width: 500px; width: 100%; height: auto;",[429,1841,1842],{},"同步过程将立即开始，根据您的知识库文件大小，这可能会需要一些时间。同步完成后，界面将显示您所使用的总存储空间。",[513,1844],{"src":1845,"alt":1846,"style":1847},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-sync-completed-storage.webp","Synchrun 同步完成并显示所使用的总存储空间","max-width: 508px; width: 100%; height: auto;",[457,1849,1851],{"id":1850},"使用-ignis-实现基于浏览器的-obsidian-访问","使用 Ignis 实现基于浏览器的 Obsidian 访问",[429,1853,1854,1856],{},[433,1855,1403],{}," 通过将 Obsidian 的 Electron API 替换为 Web API，使得 Obsidian 的 JavaScript 代码能够直接在标准网页浏览器中运行。您所有的 Markdown 笔记和附件都将直接存储在托管服务器的本地文件系统中。",[429,1858,1859,1860,1865,1866,508],{},"不过，相比于独立运行的 Obsidian 桌面客户端，网页端还存在一些局限性。由于浏览器沙箱环境的限制，某些依赖于 Electron 或 Node.js 特有 API 的功能或第三方插件将无法正常工作。详情请参阅 Ignis 官方文档中的 ",[449,1861,1864],{"href":1862,"rel":1863},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fusing\u002Flimitations\u002F",[506],"局限性说明"," 以及 ",[449,1867,1870],{"href":1868,"rel":1869},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fusing\u002Fplugin-compatibility\u002F",[506],"插件兼容性列表",[478,1872,1874],{"id":1873},"部署-ignis","部署 Ignis",[429,1876,1877,1878,1880,1881,1884,1885,1888],{},"我们将使用 Docker 在 VPS 上安装 ",[433,1879,1403],{},"，并将其映射挂载到本地的 ",[521,1882,1883],{},".\u002Fvaults"," 文件夹中。随后，我们将在服务器上通过 ",[433,1886,1887],{},"Synch CLI"," 命令行客户端将该本地目录与我们之前设置 of 远程同步知识库进行实时同步。",[429,1890,1891,1892,1894,1895,1899],{},"由于 ",[433,1893,1403],{}," 本身没有内置的身份验证机制，为了确保隐私，我们必须将其安全地隐藏在 ",[433,1896,1897],{},[449,1898,443],{"href":363}," 私有网络中。",[901,1901,1903],{"id":1902},"创建-dns-记录","创建 DNS 记录",[513,1905],{"src":1906,"alt":1907,"style":1908},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fcloudflare-dns-a-record-ignis.webp","在 Cloudflare 中为 Ignis 网页端配置 DNS A 记录","max-width: 552px; width: 100%; height: auto;",[901,1910,1606],{"id":1911},"将域名添加至-caddyfile-1",[429,1913,1914,1915,1918],{},"在您的 Caddyfile 中以相同的方式为 ",[521,1916,1917],{},"obsidian.pafor.me"," 配置反向代理：",[611,1920,1922],{"className":1631,"code":1921,"language":1633,"meta":424,"style":424},"{$OBSIDIAN_DOMAIN} {\n  encode zstd gzip\n  reverse_proxy host.docker.internal:9898\n}\n",[521,1923,1924,1935,1939,1948],{"__ignoreMap":424},[619,1925,1926,1928,1931,1933],{"class":621,"line":622},[619,1927,1661],{"class":691},[619,1929,1930],{"class":767},"$OBSIDIAN_DOMAIN",[619,1932,1667],{"class":691},[619,1934,1670],{"class":691},[619,1936,1937],{"class":621,"line":639},[619,1938,1675],{"class":767},[619,1940,1941,1943,1945],{"class":621,"line":646},[619,1942,1680],{"class":767},[619,1944,966],{"class":691},[619,1946,1947],{"class":1685},"9898\n",[619,1949,1950],{"class":621,"line":653},[619,1951,1648],{"class":691},[901,1953,1955],{"id":1954},"使用-docker-启动-ignis","使用 Docker 启动 Ignis",[429,1957,1958,1959,1962],{},"在 VPS 上将以下 Docker Compose 配置保存为 ",[521,1960,1961],{},"ignis-docker-compose.yml","：",[611,1964,1968],{"className":1965,"code":1966,"language":1967,"meta":424,"style":424},"language-yml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","services:\n  ignis:\n    image: nobbe\u002Fignis:latest\n    ports:\n      - \"9898:8080\"\n    environment:\n      # match these to your host user (run: id)\n      - PUID=1000\n      - PGID=1000\n      - WS_ORIGINS=https:\u002F\u002Fobsidian.pafor.me\n    volumes:\n      - .\u002Fvaults:\u002Fvaults\n      - .\u002Fdata:\u002Fapp\u002Fdata\n      - obsidian-app:\u002Fapp\u002Fobsidian-app\n    restart: unless-stopped\n\nvolumes:\n  obsidian-app:\n","yml",[521,1969,1970,1977,1984,1994,2001,2014,2021,2026,2033,2040,2047,2054,2061,2068,2075,2086,2091,2099],{"__ignoreMap":424},[619,1971,1972,1975],{"class":621,"line":622},[619,1973,1974],{"class":954},"services",[619,1976,958],{"class":691},[619,1978,1979,1982],{"class":621,"line":639},[619,1980,1981],{"class":954},"  ignis",[619,1983,958],{"class":691},[619,1985,1986,1989,1991],{"class":621,"line":646},[619,1987,1988],{"class":954},"    image",[619,1990,966],{"class":691},[619,1992,1993],{"class":629}," nobbe\u002Fignis:latest\n",[619,1995,1996,1999],{"class":621,"line":653},[619,1997,1998],{"class":954},"    ports",[619,2000,958],{"class":691},[619,2002,2003,2006,2009,2012],{"class":621,"line":665},[619,2004,2005],{"class":691},"      -",[619,2007,2008],{"class":691}," \"",[619,2010,2011],{"class":629},"9898:8080",[619,2013,698],{"class":691},[619,2015,2016,2019],{"class":621,"line":670},[619,2017,2018],{"class":954},"    environment",[619,2020,958],{"class":691},[619,2022,2023],{"class":621,"line":676},[619,2024,2025],{"class":649},"      # match these to your host user (run: id)\n",[619,2027,2028,2030],{"class":621,"line":1017},[619,2029,2005],{"class":691},[619,2031,2032],{"class":629}," PUID=1000\n",[619,2034,2035,2037],{"class":621,"line":1028},[619,2036,2005],{"class":691},[619,2038,2039],{"class":629}," PGID=1000\n",[619,2041,2042,2044],{"class":621,"line":1124},[619,2043,2005],{"class":691},[619,2045,2046],{"class":629}," WS_ORIGINS=https:\u002F\u002Fobsidian.pafor.me\n",[619,2048,2049,2052],{"class":621,"line":1130},[619,2050,2051],{"class":954},"    volumes",[619,2053,958],{"class":691},[619,2055,2056,2058],{"class":621,"line":1136},[619,2057,2005],{"class":691},[619,2059,2060],{"class":629}," .\u002Fvaults:\u002Fvaults\n",[619,2062,2063,2065],{"class":621,"line":1141},[619,2064,2005],{"class":691},[619,2066,2067],{"class":629}," .\u002Fdata:\u002Fapp\u002Fdata\n",[619,2069,2070,2072],{"class":621,"line":1147},[619,2071,2005],{"class":691},[619,2073,2074],{"class":629}," obsidian-app:\u002Fapp\u002Fobsidian-app\n",[619,2076,2078,2081,2083],{"class":621,"line":2077},15,[619,2079,2080],{"class":954},"    restart",[619,2082,966],{"class":691},[619,2084,2085],{"class":629}," unless-stopped\n",[619,2087,2089],{"class":621,"line":2088},16,[619,2090,643],{"emptyLinePlaceholder":642},[619,2092,2094,2097],{"class":621,"line":2093},17,[619,2095,2096],{"class":954},"volumes",[619,2098,958],{"class":691},[619,2100,2102,2105],{"class":621,"line":2101},18,[619,2103,2104],{"class":954},"  obsidian-app",[619,2106,958],{"class":691},[482,2108,2109,2120,2134],{},[467,2110,2111,2112,2115,2116,2119],{},"在主机端使用 ",[521,2113,2114],{},"9898"," 端口，因为 ",[521,2117,2118],{},"8080"," 是一个非常常用且容易冲突的端口。",[467,2121,2122,2123,2126,2127,562,2130,2133],{},"在您的 VPS 上运行 ",[521,2124,2125],{},"id"," 命令，获取当前主机用户的 ",[521,2128,2129],{},"UID",[521,2131,2132],{},"GID","，并将其填写到配置文件中，以确保文件系统具备正确的读写权限。",[467,2135,2136,2137,2140],{},"配置 ",[521,2138,2139],{},"WS_ORIGINS","，仅允许来自您指定域名的 WebSocket 连接，提高安全性。",[429,2142,2143,2144,2146],{},"启动 ",[433,2145,1403],{}," 容器：",[611,2148,2150],{"className":613,"code":2149,"language":615,"meta":424,"style":424},"docker compose -f ignis-docker-compose.yml up -d\n",[521,2151,2152],{"__ignoreMap":424},[619,2153,2154,2156,2158,2161,2164,2166],{"class":621,"line":622},[619,2155,1703],{"class":625},[619,2157,1706],{"class":629},[619,2159,2160],{"class":629}," -f",[619,2162,2163],{"class":629}," ignis-docker-compose.yml",[619,2165,1709],{"class":629},[619,2167,1712],{"class":629},[429,2169,2170,2171,2174,2175,2178],{},"当您在网页浏览器中访问您的域名时，将会弹出 ",[433,2172,2173],{},"'Vault Manager'","（知识库管理器）。由于此时文件夹为空，它不会显示任何本地知识库。在下一节中，我们将配置 ",[433,2176,2177],{},"'Synch CLI'","，从我们之前配置的远程同步服务器中拉取笔记。",[513,2180],{"src":2181,"alt":2182,"style":2183},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-vault-manager-empty.webp","Ignis 网页客户端中当前为空的知识库管理器","max-width: 466px; width: 100%; height: auto;",[901,2185,2187],{"id":2186},"解决-docker-带来的防火墙失效问题","解决 Docker 带来的防火墙失效问题",[429,2189,2190,2191,2194,2195,2198,2199,2202],{},"默认情况下，Docker 会自动在系统底层插入自己的 DNAT 与 FORWARD 链规则，直接将外部公网流量转发至活动的容器端口。这会完全绕过 Ubuntu 默认的 UFW 或 iptables ",[521,2192,2193],{},"INPUT"," 链防火墙保护。为了阻止外部未经授权的访问并保持容器的绝对私有，我们需要手动将以下规则添加至 ",[521,2196,2197],{},"iptables"," 中的 ",[521,2200,2201],{},"DOCKER-USER"," 链：",[611,2204,2206],{"className":613,"code":2205,"language":615,"meta":424,"style":424},"# 阻断所有外部公网流量的直接访问\nsudo iptables -I DOCKER-USER -i ext_if -j DROP \n\n# 仅允许来自您的 Cloudflare WARP 客户端私有 IP 的访问流量\nsudo iptables -I DOCKER-USER -i ext_if -s 100.96.0.10 -j ACCEPT\n",[521,2207,2208,2213,2240,2244,2249],{"__ignoreMap":424},[619,2209,2210],{"class":621,"line":622},[619,2211,2212],{"class":649},"# 阻断所有外部公网流量的直接访问\n",[619,2214,2215,2217,2220,2223,2226,2229,2232,2235,2238],{"class":621,"line":639},[619,2216,626],{"class":625},[619,2218,2219],{"class":629}," iptables",[619,2221,2222],{"class":629}," -I",[619,2224,2225],{"class":629}," DOCKER-USER",[619,2227,2228],{"class":629}," -i",[619,2230,2231],{"class":629}," ext_if",[619,2233,2234],{"class":629}," -j",[619,2236,2237],{"class":629}," DROP",[619,2239,768],{"class":767},[619,2241,2242],{"class":621,"line":646},[619,2243,643],{"emptyLinePlaceholder":642},[619,2245,2246],{"class":621,"line":653},[619,2247,2248],{"class":649},"# 仅允许来自您的 Cloudflare WARP 客户端私有 IP 的访问流量\n",[619,2250,2251,2253,2255,2257,2259,2261,2263,2266,2269,2271],{"class":621,"line":665},[619,2252,626],{"class":625},[619,2254,2219],{"class":629},[619,2256,2222],{"class":629},[619,2258,2225],{"class":629},[619,2260,2228],{"class":629},[619,2262,2231],{"class":629},[619,2264,2265],{"class":629}," -s",[619,2267,2268],{"class":1685}," 100.96.0.10",[619,2270,2234],{"class":629},[619,2272,2273],{"class":629}," ACCEPT\n",[901,2275,2277],{"id":2276},"配置-synch-cli-命令行同步工具","配置 Synch CLI 命令行同步工具",[429,2279,2280,2282],{},[433,2281,1887],{}," 是一款无界面的命令行工具，即使在没有安装 Obsidian 桌面应用的远程服务器上，它也能让本地目录与远程知识库进行实时同步。",[429,2284,2285,2286,2289,2290,2292,2293,2296,2297,1865,2300,2303,2304,562,2307,2310,2311,2314,2315,2318],{},"从您之前克隆的 ",[521,2287,2288],{},"synch"," 仓库源码中构建 ",[433,2291,1887],{},"。构建过程需要 ",[433,2294,2295],{},"Node.js >= 22.5","（因为 CLI 依赖于 ",[521,2298,2299],{},"node:sqlite",[521,2301,2302],{},"fetch","、",[521,2305,2306],{},"WebSocket",[521,2308,2309],{},"WebCrypto"," 等全局浏览器原生 API）和 ",[433,2312,2313],{},"pnpm","（由于整个仓库是一个使用了 ",[521,2316,2317],{},"pnpm@10.33.0"," 版本管理器的 pnpm 工作区）：",[611,2320,2322],{"className":613,"code":2321,"language":615,"meta":424,"style":424},"# Check versions\nnode --version   # must be >= 22.5\npnpm --version\n\n# In the repos root\npnpm install\n\n# Build the CLI bundle\npnpm -C apps\u002Fcli build\n\n# After a successful build you have `apps\u002Fcli\u002Fdist\u002Fsynch.js`. Make it executable and put it on your PATH\nchmod +x apps\u002Fcli\u002Fdist\u002Fsynch.js\nln -sf \"$PWD\u002Fapps\u002Fcli\u002Fdist\u002Fsynch.js\" \"$HOME\u002F.local\u002Fbin\u002Fsynch\"\n\n# Verification\nsynch --help\n",[521,2323,2324,2329,2340,2347,2351,2356,2363,2367,2372,2385,2389,2394,2405,2434,2438,2443],{"__ignoreMap":424},[619,2325,2326],{"class":621,"line":622},[619,2327,2328],{"class":649},"# Check versions\n",[619,2330,2331,2334,2337],{"class":621,"line":639},[619,2332,2333],{"class":625},"node",[619,2335,2336],{"class":629}," --version",[619,2338,2339],{"class":649},"   # must be >= 22.5\n",[619,2341,2342,2344],{"class":621,"line":646},[619,2343,2313],{"class":625},[619,2345,2346],{"class":629}," --version\n",[619,2348,2349],{"class":621,"line":653},[619,2350,643],{"emptyLinePlaceholder":642},[619,2352,2353],{"class":621,"line":665},[619,2354,2355],{"class":649},"# In the repos root\n",[619,2357,2358,2360],{"class":621,"line":670},[619,2359,2313],{"class":625},[619,2361,2362],{"class":629}," install\n",[619,2364,2365],{"class":621,"line":676},[619,2366,643],{"emptyLinePlaceholder":642},[619,2368,2369],{"class":621,"line":1017},[619,2370,2371],{"class":649},"# Build the CLI bundle\n",[619,2373,2374,2376,2379,2382],{"class":621,"line":1028},[619,2375,2313],{"class":625},[619,2377,2378],{"class":629}," -C",[619,2380,2381],{"class":629}," apps\u002Fcli",[619,2383,2384],{"class":629}," build\n",[619,2386,2387],{"class":621,"line":1124},[619,2388,643],{"emptyLinePlaceholder":642},[619,2390,2391],{"class":621,"line":1130},[619,2392,2393],{"class":649},"# After a successful build you have `apps\u002Fcli\u002Fdist\u002Fsynch.js`. Make it executable and put it on your PATH\n",[619,2395,2396,2399,2402],{"class":621,"line":1136},[619,2397,2398],{"class":625},"chmod",[619,2400,2401],{"class":629}," +x",[619,2403,2404],{"class":629}," apps\u002Fcli\u002Fdist\u002Fsynch.js\n",[619,2406,2407,2410,2413,2415,2418,2421,2424,2426,2429,2432],{"class":621,"line":1141},[619,2408,2409],{"class":625},"ln",[619,2411,2412],{"class":629}," -sf",[619,2414,2008],{"class":691},[619,2416,2417],{"class":767},"$PWD",[619,2419,2420],{"class":629},"\u002Fapps\u002Fcli\u002Fdist\u002Fsynch.js",[619,2422,2423],{"class":691},"\"",[619,2425,2008],{"class":691},[619,2427,2428],{"class":767},"$HOME",[619,2430,2431],{"class":629},"\u002F.local\u002Fbin\u002Fsynch",[619,2433,698],{"class":691},[619,2435,2436],{"class":621,"line":1147},[619,2437,643],{"emptyLinePlaceholder":642},[619,2439,2440],{"class":621,"line":2077},[619,2441,2442],{"class":649},"# Verification\n",[619,2444,2445,2447],{"class":621,"line":2088},[619,2446,2288],{"class":625},[619,2448,2449],{"class":629}," --help\n",[429,2451,2452,2453,2456],{},"由于 Synch CLI 运行在与您的 Synch remote 虚拟同步服务端相同的 VPS 上，它能够直接自动连接至本地的 API 服务端口。如果您将它们部署在不同的服务器上，请运行 ",[521,2454,2455],{},"synch login --api-url \u003Cremote-synch-api-url>"," 来手动定义您的远程目标 API 端点。",[429,2458,2459],{},[513,2460],{"alt":2461,"src":2462},"在终端中输入自定义 API URL 运行 synch login 登录命令","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-login-api-url-terminal.webp",[429,2464,2465,2466,2469],{},"在您的 VPS 终端中运行 ",[521,2467,2468],{},"synch login"," 命令，您将获得一个用于身份验证的登录 URL：",[429,2471,2472],{},[513,2473],{"alt":2474,"src":2475},"终端输出显示的 Synch CLI 认证 URL","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-login-auth-url-terminal.webp",[429,2477,2478],{},"使用与您在 Obsidian 桌面端 Synchrun 插件中注册的相同邮箱地址，通过该网页链接进行登录授权。",[429,2480,2481],{},[513,2482],{"alt":2483,"src":2484},"Synch CLI 授权网页端登录成功","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-web-login-success.webp",[429,2486,2487,2488,2491],{},"运行 ",[521,2489,2490],{},"synch vault connect --vault ~\u002Fvaults\u002F\u003Cvaultname> --vault-id asadqe-7b29-4677-fsad-234asdafasd"," 来将您 VPS 上的本地知识库目录与远程自建服务器上的知识库进行关联：",[429,2493,2494,2495,2498,2499,2502,2503,2506],{},"您可以通过打开桌面端 Obsidian 中的 ",[433,2496,2497],{},"Synchrun"," 插件设置，点击 ",[433,2500,2501],{},"“管理远程知识库”（Manage remote vaults）"," 来找到您的远程知识库 ID。该操作会打开一个网页并列出您所有的远程知识库，每个库旁边都附带有一个 GUID 格式的唯一标识符（例如：",[521,2504,2505],{},"123e4567-e89b-12d3-a456-426614174000","）：",[429,2508,2509,2514],{},[513,2510],{"src":2511,"alt":2512,"style":2513},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-manage-remote-vaults.webp","在 Synchrun 插件中管理远程知识库","max-width: 582px; width: 100%; height: auto;",[513,2515],{"alt":2516,"src":2517},"在 Synchrun 中定位唯一的远程知识库 ID","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-remote-vault-id.webp",[429,2519,2520,2521,2524],{},"在提示时输入您的知识库密码以确立关联。关联成功后，运行 ",[521,2522,2523],{},"synch sync --vault ~\u002Fvaults\u002F\u003Cvault-name>"," 来进行您的首次全量同步。首次同步根据您的文件大小，可能会耗费一些时间。",[429,2526,2527],{},[513,2528],{"alt":2529,"src":2530},"Synch CLI 中显示首次拉取同步知识库的进度","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-cli-initial-sync-progress.webp",[429,2532,2533,2534,2537,2538,2541],{},"为了让同步全自动进行，我们可以配置并启用一个 ",[521,2535,2536],{},"systemd"," 系统守护服务，在后台持续运行 ",[521,2539,2540],{},"synch watch"," 监听文件变化，以确保 VPS 上的笔记在系统开机时即可实现毫秒级自动同步：",[611,2543,2545],{"className":613,"code":2544,"language":615,"meta":424,"style":424},"sudo tee \u002Fetc\u002Fsystemd\u002Fsystem\u002Fsynch-watch.service \u003C\u003C'EOF'\n[Unit]\nDescription=Synch vault watcher\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nType=simple\nUser=\u003Cusername>\nExecStart=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin\u002Fsynch watch --vault \u002Fhome\u002F\u003Cusername>\u002Fvaults\u002F\u003Cvault-name>\nWorkingDirectory=\u002Fhome\u002F\u003Cusername>\u002Fvaults\nEnvironment=\"PATH=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin:\u002Fhome\u002F\u003Cusername>\u002F.cargo\u002Fbin:\u002Fusr\u002Flocal\u002Fsbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fsbin:\u002Fusr\u002Fbin:\u002Fsbin:\u002Fbin\"\nEnvironment=\"HOME=\u002Fhome\u002F\u003Cusername>\"\nRestart=always\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target\nEOF\nsudo systemctl daemon-reload\nsudo systemctl enable --now synch-watch.service\n",[521,2546,2547,2563,2567,2572,2577,2582,2586,2590,2595,2600,2605,2610,2615,2620,2624,2629,2633,2637,2641,2647,2656],{"__ignoreMap":424},[619,2548,2549,2551,2554,2557,2560],{"class":621,"line":622},[619,2550,626],{"class":625},[619,2552,2553],{"class":629}," tee",[619,2555,2556],{"class":629}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fsynch-watch.service",[619,2558,2559],{"class":691}," \u003C\u003C",[619,2561,2562],{"class":691},"'EOF'\n",[619,2564,2565],{"class":621,"line":639},[619,2566,1082],{"class":629},[619,2568,2569],{"class":621,"line":646},[619,2570,2571],{"class":629},"Description=Synch vault watcher\n",[619,2573,2574],{"class":621,"line":653},[619,2575,2576],{"class":629},"After=network-online.target\n",[619,2578,2579],{"class":621,"line":665},[619,2580,2581],{"class":629},"Wants=network-online.target\n",[619,2583,2584],{"class":621,"line":670},[619,2585,643],{"emptyLinePlaceholder":642},[619,2587,2588],{"class":621,"line":676},[619,2589,1101],{"class":629},[619,2591,2592],{"class":621,"line":1017},[619,2593,2594],{"class":629},"Type=simple\n",[619,2596,2597],{"class":621,"line":1028},[619,2598,2599],{"class":629},"User=\u003Cusername>\n",[619,2601,2602],{"class":621,"line":1124},[619,2603,2604],{"class":629},"ExecStart=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin\u002Fsynch watch --vault \u002Fhome\u002F\u003Cusername>\u002Fvaults\u002F\u003Cvault-name>\n",[619,2606,2607],{"class":621,"line":1130},[619,2608,2609],{"class":629},"WorkingDirectory=\u002Fhome\u002F\u003Cusername>\u002Fvaults\n",[619,2611,2612],{"class":621,"line":1136},[619,2613,2614],{"class":629},"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",[619,2616,2617],{"class":621,"line":1141},[619,2618,2619],{"class":629},"Environment=\"HOME=\u002Fhome\u002F\u003Cusername>\"\n",[619,2621,2622],{"class":621,"line":1147},[619,2623,1121],{"class":629},[619,2625,2626],{"class":621,"line":2077},[619,2627,2628],{"class":629},"RestartSec=5\n",[619,2630,2631],{"class":621,"line":2088},[619,2632,643],{"emptyLinePlaceholder":642},[619,2634,2635],{"class":621,"line":2093},[619,2636,1144],{"class":629},[619,2638,2639],{"class":621,"line":2101},[619,2640,1150],{"class":629},[619,2642,2644],{"class":621,"line":2643},19,[619,2645,2646],{"class":691},"EOF\n",[619,2648,2650,2652,2654],{"class":621,"line":2649},20,[619,2651,626],{"class":625},[619,2653,630],{"class":629},[619,2655,1169],{"class":629},[619,2657,2659,2661,2663,2665,2668],{"class":621,"line":2658},21,[619,2660,626],{"class":625},[619,2662,630],{"class":629},[619,2664,764],{"class":629},[619,2666,2667],{"class":629}," --now",[619,2669,2670],{"class":629}," synch-watch.service\n",[429,2672,2673,2674,2676],{},"现在，在浏览器中打开 ",[521,2675,1917],{},"，您会发现其用户界面和排版布局与桌面端原生 App 几乎完全一致：",[513,2678],{"src":2679,"alt":2680,"style":2681},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-web-interface-desktop-view.webp","在桌面端显示 Obsidian 知识库的 Ignis 网页界面","max-width: 593px; width: 100%; height: auto;",[429,2683,2684],{},"点击左下角的设置图标可以发现，除了需要手动重新安装第三方社区插件外，几乎所有的 Obsidian 核心配置与功能均已完美保留：",[513,2686],{"src":2687,"alt":2688,"style":2689},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-settings-community-plugins.webp","Ignis 网页界面中的社区第三方插件设置","max-width: 597px; width: 100%; height: auto;",[429,2691,2692],{},"为了测试整个同步闭环，您可以通过 Ignis 网页端直接新建一篇笔记：",[513,2694],{"src":2695,"alt":2696,"style":2689},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-create-new-note-web.webp","通过 Ignis 网页界面新建一篇 Markdown 笔记",[429,2698,2699,2700,2702],{},"该笔记会立即被同步回您的 Obsidian 桌面客户端。需要注意的是，空白文件夹不会在 ",[433,2701,1403],{}," 网页端中显示。",[513,2704],{"src":2705,"alt":2706,"style":2707},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-desktop-synced-note.webp","新创建的笔记已成功同步到本地 Obsidian 桌面客户端","max-width: 502px; width: 100%; height: auto;",[429,2709,2710,2711,2713],{},"在移动端手机浏览器上访问 ",[521,2712,1917],{}," 的实际效果：",[429,2715,2716,2721],{},[513,2717],{"src":2718,"alt":2719,"style":2720},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-mobile-view-sidebar.webp","在移动端手机浏览器上访问 Ignis 网页客户端的侧边栏菜单","max-width: 269px; width: 100%; height: auto;",[513,2722],{"src":2723,"alt":2724,"style":2720},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-mobile-view-editor.webp","在移动端手机浏览器上访问 Ignis 网页客户端的 Markdown 编辑器",[429,2726,2727,2728,2730,2731,2734],{},"当您在 ",[433,2729,1403],{}," 网页端中删除笔记时，它们会被安全地移至本地知识库的 ",[521,2732,2733],{},"~\u002Fvaults\u002F\u003Cvault-name>\u002F.trash"," 垃圾桶文件夹中，以防误删。",[457,2736,2738],{"id":2737},"自建-obsidian-同步服务的一些结语","自建 Obsidian 同步服务的一些结语",[429,2740,2741,2742,440,2744,2746,2747,2749],{},"通过将 ",[433,2743,1394],{},[433,2745,1403],{}," 结合，您可以使用完全处于自己掌控之下的 VPS 服务器硬件，无缝地实现 Obsidian 笔记库的多端同步与网页端访问。而将这些服务整体托管于 ",[433,2748,443],{}," 私有网络之中，又为您提供了极致的安全物理边界，从根本上阻断了公网暴露带来的安全隐患。",[429,2751,2752,2753,2755],{},"当然，",[433,2754,1403],{}," 的初衷 spiritual 并客套不是为了完全替代本地的 Obsidian 桌面客户端。相反，它更像是一个极其便利的临时桥梁，供您在没有携带主力电脑时，能够随时随地通过任意浏览器快速存取和编辑自己的笔记。对于日常高强度的写作与重度笔记库管理，本地原生客户端仍然是更加舒适、高效的选择。",[429,2757,2758,2759,2762],{},"由于 Synch 采用了坚固的端到端加密机制，您的远程知识库密码必须具备足够强的复杂度以抵御暴力破解攻击。同时，请务必牢记该密码，因为同步服务端不会存储任何未加密的",[433,2760,2761],{},"知识库秘钥","。一旦遗忘该密码，您的全部笔记数据将彻底无法恢复。此外，由于所有数据均保存在您的自建 VPS 上，您需要自行承担并妥善做好服务器的主机安全防护、以及自动快照与备份管理。",[429,2764,2765,2766,2768],{},"尽管 ",[433,2767,1394],{}," 内置了加密的历史版本管理和已删除文件恢复机制，能为您规避绝大多数意外数据丢失，但为了万无一失，我们依然强烈建议您在第三方物理介质上定期保留一份独立的 Obsidian 知识库离线备份。",[457,2770,2772],{"id":2771},"references","References",[482,2774,2775,2782,2789],{},[467,2776,2777],{},[449,2778,2781],{"href":2779,"rel":2780},"https:\u002F\u002Fsynch.run\u002Fself-hosting-docker\u002F",[506],"Synch Deploy with Docker Compose",[467,2783,2784],{},[449,2785,2788],{"href":2786,"rel":2787},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fserver\u002Fdeploy\u002F",[506],"Ignis Deploy with Docker",[467,2790,2791],{},[449,2792,2795],{"href":2793,"rel":2794},"https:\u002F\u002Fsynch.run\u002Fblog\u002Fencryption-and-decryption\u002F",[506],"How does end-to-end encryption work in Synch?",[1328,2797,2798],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":424,"searchDepth":639,"depth":646,"links":2800},[2801,2810,2819,2820],{"id":1438,"depth":639,"text":1439,"children":2802},[2803,2807],{"id":1480,"depth":646,"text":1481,"children":2804},[2805,2806],{"id":1484,"depth":653,"text":1484},{"id":1499,"depth":653,"text":1500},{"id":1734,"depth":646,"text":1735,"children":2808},[2809],{"id":1738,"depth":653,"text":1739},{"id":1850,"depth":639,"text":1851,"children":2811},[2812],{"id":1873,"depth":646,"text":1874,"children":2813},[2814,2815,2816,2817,2818],{"id":1902,"depth":653,"text":1903},{"id":1911,"depth":653,"text":1606},{"id":1954,"depth":653,"text":1955},{"id":2186,"depth":653,"text":2187},{"id":2276,"depth":653,"text":2277},{"id":2737,"depth":639,"text":2738},{"id":2771,"depth":639,"text":2772},[2822],"productivity","2026-09-15","本文详细介绍如何利用开源工具 Synch 与 Ignis 在您的 VPS 上搭建私有同步服务器，从而在多台电脑、手机以及平板设备之间安全地同步您的 Obsidian 知识库。我们还将所有服务全部部署在 Cloudflare Zero Trust 私有网络中，从而完全阻断来自公网的恶意扫描与未授权访问，保障数据隐私安全。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002FZH-Sync-Obsidian-Across-Devices.webp","使用自建 Synch 平台和 Ignis 网页端在 Cloudflare Zero Trust 安全私有网络中同步多端 Obsidian 本地知识库的架构图",{"schemaOrg":2828,"robots":1361,"sitemap":2832},[2829,2831],{"@type":2830,"headline":1376,"description":2824,"image":2825},"Article",{"@type":1360,"name":1376,"description":2824,"image":2825},{"lastmod":2833},"2026-09-16",{"title":2835,"description":2824,"ogTitle":1376,"ogDescription":2824,"twitterTitle":1376,"twitterDescription":2824},"基于自建 Synch 与 Ignis 实现 Obsidian 跨设备安全同步","zh\u002Farticle\u002Fsync-obsidian-across-devices",[2838,2839,2840,1368],"自建服务","Obsidian","云端同步",null,"qUymzYxHVbtcLzhIfa6H_SfwK2NWnW9W0EcGJC30Pbc",{"id":2844,"title":2845,"author":424,"body":2846,"category":4061,"date":4064,"description":4065,"extension":1354,"image":4066,"imageAlt":4067,"isPublished":642,"meta":4068,"minRead":1141,"navigation":642,"path":319,"seo":4094,"stem":4096,"tags":4097,"updatedAt":2841,"__hash__":4100},"article\u002Fzh\u002Farticle\u002Fbringing-buzz-to-deepseek-harness.md","为 DeepSeek Harness 接入 Buzz 协作平台：构建自托管 Nostr 消息网关的完整实践",{"type":426,"value":2847,"toc":4045},[2848,2854,2875,2881,2884,2888,2893,2934,2937,2996,3000,3007,3288,3291,3295,3299,3305,3309,3323,3327,3338,3385,3392,3396,3399,3431,3434,3439,3480,3488,3494,3503,3509,3540,3554,3558,3567,3596,3618,3666,3673,3679,3685,3692,3698,3703,3711,3724,3730,3740,3775,3778,3784,3791,3797,3801,3804,3958,3961,4002,4006,4012,4016,4042],[429,2849,2850],{},[513,2851],{"alt":2852,"src":2853},"DeepSeek Harness 消息网关连接至 Block Buzz 频道的运行概览","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-nostr-gateway-overview.webp",[429,2855,2856,2857,2864,2865,2869,2870,2874],{},"DeepSeek Harness（DSH）的官方插件 ",[433,2858,2859],{},[449,2860,2863],{"href":2861,"rel":2862},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway",[506],"dsh-message-gateway","，能够将 DeepSeek Harness 助手无缝扩展至 Discord、Telegram、微信等多种主流即时通讯平台。该插件仓库已被 Fork 并进行了二次开发，旨在将 ",[433,2866,2867],{},[449,2868,1621],{"href":383}," 接入支持列表。Fork 后的开源代码仓库位于 GitHub：",[449,2871,2872],{"href":2872,"rel":2873},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway",[506]," 。",[1428,2876],{"description":2877,"image":2878,"image-alt":2879,"label":2880,"min-read":1620,"title":1621,"to":383},"本教程将手把手带您在 Ubuntu VPS 上部署自托管的 Block 旗下 Nostr 中继服务 Buzz，并配置 Cloudflare DNS 安全网络。我们将帮助您搭建起一个安全性的共享工作空间，让您的团队成员与多个 AI 智能体（如 Claude、Kimi）能够基于加密身份进行高效沟通、共享项目上下文并实现无缝协作。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002FZH-Self-Hosting-Buzz-As-The-Workspace-Where-AI-Agents-Become-Colleagues.webp","一张高颜值的 16:9 科技质感卡片，具有深蓝色和橙色色调，插图展示如何在 Ubuntu VPS 上部署自托管的 Block 旗下 Buzz 协作中继服务器，其中包含一个带有居中文字的毛玻璃微动质感面板。","前置准备指南",[429,2882,2883],{},"DSH 助手作为一个全功能成员加入 Buzz Nostr 中继，既能接收私信（DM），也能接收被 @mention 提及的频道消息，并通过与 Web UI 完全相同的独立会话智能体管线输出响应。",[457,2885,2887],{"id":2886},"dsh-message-gateway-插件架构剖析","dsh-message-gateway 插件架构剖析",[429,2889,2890,2892],{},[433,2891,2863],{}," 插件的系统架构清晰划分为宿主端与客户端两大部分：",[482,2894,2895,2924],{},[467,2896,2897,1962,2900,2903,2904,2907,2908,2911,2912,2915,2916,2919,2920,2923],{},[433,2898,2899],{},"宿主端（Node 环境）",[521,2901,2902],{},"gateway-store","（凭证与配置持久化存储，位于 ",[521,2905,2906],{},"~\u002F.dsh\u002Fgateway.json","）、",[521,2909,2910],{},"platforms.ts","（支持平台定义与连通性自检）、",[521,2913,2914],{},"routes.ts","（对外暴露的 ",[521,2917,2918],{},"\u002Fgateway\u002F*"," 路由端点）以及 ",[521,2921,2922],{},"bridge-manager.ts","（常驻网关桥接器：负责按会话维护独立 Agent 实例并统一管理流式响应推送）。",[467,2925,2926,2929,2930,2933],{},[433,2927,2928],{},"客户端（浏览器前端）","：侧边栏的“",[433,2931,2932],{},"Message platforms","”可视化配置页面，负责录入密钥参数、发起连通性测试以及直观监控网关实时在线状态。",[429,2935,2936],{},"为网关接入一个全新通讯平台通常需要经历以下三步：",[464,2938,2939,2957,2971],{},[467,2940,2941,2944,2945,2948,2949,2952,2953,2956],{},[433,2942,2943],{},"实现 Bridge 桥接类","：提供 ",[521,2946,2947],{},"start\u002Fstop\u002Fstatus"," 生命周期方法以及 ",[521,2950,2951],{},"onText(text, frame)"," 消息回调，结构规范与现有的 ",[521,2954,2955],{},"wecom-bridge.ts"," 完全一致。",[467,2958,2959,2962,2963,2966,2967,2970],{},[433,2960,2961],{},"接入 bridge-manager 调度器","：复用既有的多会话调度管线（",[521,2964,2965],{},"ensureAgentForKey"," + ",[521,2968,2969],{},"pendingMap","），并将底层文本输出流挂载至该平台的专用回复接收器。",[467,2972,2973,2976,2977,440,2980,2983,2984,2987,2988,2991,2992,2995],{},[433,2974,2975],{},"对接持久化存储与配置路由","：在 ",[521,2978,2979],{},"\u002Fgateway\u002Fsave",[521,2981,2982],{},"\u002Fgateway\u002Fdelete"," 逻辑中实现：",[433,2985,2986],{},"保存配置即自动启动桥接服务，删除配置则优雅停止桥接服务","，配合 ",[521,2989,2990],{},"autoStartXxx"," 状态标记确保 ",[521,2993,2994],{},"dsh web"," 守护进程开机自动重连。",[457,2997,2999],{"id":2998},"buzz-网关桥接实现nostr-协议标准与事件生命周期","Buzz 网关桥接实现：Nostr 协议标准与事件生命周期",[429,3001,3002,3003,3006],{},"本次接入直接使用 ",[433,3004,3005],{},"DeepSeek Harness"," 自行编写完成了完整的 Buzz 适配桥接器。底层严格遵循了如下 Nostr 协议规范标准：",[3008,3009,3010,3025],"table",{},[3011,3012,3013],"thead",{},[3014,3015,3016,3022],"tr",{},[3017,3018,3019],"th",{},[433,3020,3021],{},"维度 \u002F 阶段",[3017,3023,3024],{},"协议实现规范与技术细节",[3026,3027,3028,3050,3068,3095,3113,3138,3163,3185,3199,3213,3232,3249,3263],"tbody",{},[3014,3029,3030,3036],{},[3031,3032,3033],"td",{},[433,3034,3035],{},"底层传输（Transport）",[3031,3037,3038,3039,3042,3043,3046,3047],{},"单条经过 NIP-42 鉴权认证的 WebSocket 链路；默认中继连接地址为 ",[521,3040,3041],{},"ws:\u002F\u002Flocalhost:3000","；输入的 ",[521,3044,3045],{},"http(s):\u002F\u002F"," 会自动规整为 ",[521,3048,3049],{},"ws(s):\u002F\u002F",[3014,3051,3052,3057],{},[3031,3053,3054],{},[433,3055,3056],{},"鉴权认证（Auth）",[3031,3058,3059,3060,3063,3064,3067],{},"AUTH 事件 ",[521,3061,3062],{},"kind 22242","，携带标签 ",[521,3065,3066],{},"[[\"relay\", url], [\"challenge\", challenge]]","，内容为空字符串，由 Agent 的私钥完成签名",[3014,3069,3070,3075],{},[3031,3071,3072],{},[433,3073,3074],{},"订阅机制（Subs）",[3031,3076,3077,1962,3080,3083,3084,3087,3088,3091,3092],{},[433,3078,3079],{},"严格基于频道隔离",[521,3081,3082],{},"REQ {\"kinds\":[9], \"#h\":[\u003Cuuid>]}"," — 每个频道独立建立一条订阅。全局性的 ",[521,3085,3086],{},"kinds:[9]"," 虽能收到 EOSE 但绝不广播推送；多值 ",[521,3089,3090],{},"#h"," 标签过滤在协议中",[433,3093,3094],{},"无法正常分发",[3014,3096,3097,3102],{},[3031,3098,3099],{},[433,3100,3101],{},"频道发现（Discovery）",[3031,3103,3104,3105,3108,3109,3112],{},"历史元数据回溯查询 ",[521,3106,3107],{},"REQ {kinds:[39000]}"," 提取频道详情（其中 ",[521,3110,3111],{},"type == \"dm\""," 用于标记单聊私信频道）",[3014,3114,3115,3120],{},[3031,3116,3117],{},[433,3118,3119],{},"成员变动订阅",[3031,3121,3122,3123,3126,3127,3129,3130,3133,3134,3137],{},"实时长连接订阅 ",[521,3124,3125],{},"REQ {kinds:[44100,44101], \"#p\":[Agent 公钥], since: now-60s}"," — 44100 为入群，44101 为被移出，均附带 ",[521,3128,429],{},"+",[521,3131,3132],{},"h","；成员关系变更时",[433,3135,3136],{},"无需重连","即可动态热更新订阅状态",[3014,3139,3140,3145],{},[3031,3141,3142],{},[433,3143,3144],{},"即时聊天事件",[3031,3146,3147,3150,3151,3154,3155,3158,3159,3162],{},[521,3148,3149],{},"kind 9"," 事件，携带 ",[521,3152,3153],{},"[\"h\", channel]"," 频道标签，可选附带 ",[521,3156,3157],{},"[\"e\", replyTo]"," 回复目标与 ",[521,3160,3161],{},"[\"p\", mention]"," 被提及者标签",[3014,3164,3165,3170],{},[3031,3166,3167],{},[433,3168,3169],{},"原位更新编辑",[3031,3171,3172,3175,3176,440,3178,3181,3182,3184],{},[521,3173,3174],{},"kind 40003"," 事件，附带 ",[521,3177,3132],{},[521,3179,3180],{},"e"," 目标标签；内容完全替换；中继单包上限 64 KB → 严控载荷 ≤ 60,000 B；超长回复分块处理 — 首块用于原位编辑替换，超出部分作为回复串线程的 ",[521,3183,3149],{}," 消息追加",[3014,3186,3187,3192],{},[3031,3188,3189],{},[433,3190,3191],{},"CLOSED 异常帧处理",[3031,3193,3194,3195,3198],{},"鉴权未完成前收到 ",[521,3196,3197],{},"auth-required"," 属于正常引导阶段（完成 AUTH 后重新拉起订阅）；鉴权完成后遇断连 → 阶梯式限次重试（最多 3 次，间隔 0\u002F1\u002F2 秒退避）；整链重连时全量重构上下文",[3014,3200,3201,3206],{},[3031,3202,3203],{},[433,3204,3205],{},"中继拉取上限",[3031,3207,3208,3209,3212],{},"每次订阅最多拉取 2000 条历史事件，即使配置了 ",[521,3210,3211],{},"since"," 过滤参数，中继仍按自最新向过去的时间倒序返回",[3014,3214,3215,3220],{},[3031,3216,3217],{},[433,3218,3219],{},"消息命中判定",[3031,3221,3222,3223,3225,3226,3228,3229,3231],{},"仅当满足以下任一条件时才激活处理入站 ",[521,3224,3149],{},"：(a) ",[521,3227,429],{}," 标签明确包含自身公钥，(b) 处于 DM 私信频道，(c) 回复关联的 ",[521,3230,3180],{}," 根事件为自身发出的消息。自动过滤自身公钥发送的内容（彻底杜绝自环）",[3014,3233,3234,3239],{},[3031,3235,3236],{},[433,3237,3238],{},"出站 @ 提及",[3031,3240,3241,3242,3245,3246,3248],{},"出站内容按纯文本原样发布 — 中继端不对正文中的 ",[521,3243,3244],{},"@"," 符号进行预校验；",[521,3247,429],{}," 标签填入当前对话原作者以及至多 7 位其他被提及者的公钥（单条上限 8 位）",[3014,3250,3251,3256],{},[3031,3252,3253],{},[433,3254,3255],{},"私聊消息（DM）",[3031,3257,3258,3259,3262],{},"依赖中继作用域内的明文受限频道（元数据标注 ",[521,3260,3261],{},"type: \"dm\"","） — 当前桥接实现中未引入 NIP-04\u002F44 复杂非对称端到端加密",[3014,3264,3265,3270],{},[3031,3266,3267],{},[433,3268,3269],{},"媒体附件（入站）",[3031,3271,3272,3273,3276,3277,3280,3281,3280,3284,3287],{},"NIP-92 ",[521,3274,3275],{},"imeta"," 规范（",[521,3278,3279],{},"url",", ",[521,3282,3283],{},"sha256",[521,3285,3286],{},"m","）→ 常规 HTTP(S) 流式下载，本地校验 SHA-256 完整性，单文件限制 20 MB，每条消息最多 4 张；出站图片发布暂无官方中继协议路径，现阶段不支持出站图片",[429,3289,3290],{},"Buzz 适配网关的启动引导时序图如下：",[513,3292],{"src":3293,"alt":3294},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-bootstrap.webp","展示 Buzz 网关引导连接与 NIP-42 协议身份鉴权流程的时序图",[478,3296,3298],{"id":3297},"基于-nostr-40003-事件原位编辑实现的实时流式输出","基于 Nostr 40003 事件原位编辑实现的实时流式输出",[429,3300,3301,3302,1962],{},"Nostr 协议缺乏原生打字中（Typing）状态通知，且底层事件设计为严格只增不改。为了让对话过程具备行云流水的实时交互感，Buzz 适配网关",[433,3303,3304],{},"通过原位编辑巧妙模拟了流式打字输出",[513,3306],{"src":3307,"alt":3308},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-reply.webp","基于 kind 40003 事件原位编辑模拟打字流式响应的逻辑流程图",[482,3310,3311],{},[467,3312,3313],{},[3314,3315,3316,3317,3319,3320,3322],"em",{},"网关首先秒级发出一条 ",[521,3318,3149],{}," 占位消息，随后在 Agent 推理过程中按设定的节流阈值连续发射 ",[521,3321,3174],{}," 原位编辑事件逐步追加渲染内容，并在推理终点落定最终文本。这一设计思路与 Telegram、Discord 桥接器的实现方式一脉相承。",[478,3324,3326],{"id":3325},"通过聊天指令打通-deepseek-harness-本地工作区","通过聊天指令打通 DeepSeek Harness 本地工作区",[429,3328,3329,3330,3333,3334,3337],{},"DSH Web 界面所支持的“工作区（Workspaces）”核心能力依赖于底层 ",[521,3331,3332],{},"@deepseek-ai\u002Fdsh-workspace"," 模块中的 ",[521,3335,3336],{},"workspaceRegistry"," 服务：",[611,3339,3343],{"className":3340,"code":3341,"language":3342,"meta":424,"style":424},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const existing = await ctx.workspaceRegistry.resolveByPath(request.path);\n","typescript",[521,3344,3345],{"__ignoreMap":424},[619,3346,3347,3351,3354,3357,3361,3364,3367,3369,3371,3374,3377,3379,3382],{"class":621,"line":622},[619,3348,3350],{"class":3349},"spNyl","const",[619,3352,3353],{"class":767}," existing ",[619,3355,3356],{"class":691},"=",[619,3358,3360],{"class":3359},"s7zQu"," await",[619,3362,3363],{"class":767}," ctx",[619,3365,3366],{"class":691},".",[619,3368,3336],{"class":767},[619,3370,3366],{"class":691},[619,3372,3373],{"class":1538},"resolveByPath",[619,3375,3376],{"class":767},"(request",[619,3378,3366],{"class":691},[619,3380,3381],{"class":767},"path)",[619,3383,3384],{"class":691},";\n",[429,3386,3387,3388,3391],{},"Buzz 桥接器通过引入全新的聊天斜杠指令 ",[521,3389,3390],{},"\u002Fworkspace \u003C目录路径>","，允许在群聊中直接向 DSH 注册并绑定本地现存的文件夹。在此之后，该会话下的所有交互都将牢牢锚定在此目录中，并能实时无缝同步在 DSH Web UI 端查看。",[513,3393],{"src":3394,"alt":3395},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace.webp","通过网关聊天指令动态注册并绑定 DeepSeek Harness 本地工作区的架构示意图",[429,3397,3398],{},"开发与使用过程中需重点明确的三大设计机制：",[482,3400,3401,3411,3421],{},[467,3402,3403,3406,3407,3410],{},[433,3404,3405],{},"变更目录等同于开启全新会话","：会话的工作目录（",[521,3408,3409],{},"cwd","）在初始化生成 Session Header 时即完成写入，后续在生命周期内不可直接原地篡改。",[467,3412,3413,3416,3417,3420],{},[433,3414,3415],{},"目标本地目录必须预先存在","：底层 ",[521,3418,3419],{},"create"," 注册函数会对路径进行强校验，若路径在宿主机不存在将直接抛出异常拒绝绑定。",[467,3422,3423,3426,3427,3430],{},[433,3424,3425],{},"高度安全敏感指令","：通过网关衍生的会话均赋予 ",[433,3428,3429],{},"auto-approve","（自动批准命令执行）特权，拥有对目标文件夹直接进行读写和工具操作的完全访问权。",[457,3432,3433],{"id":3433},"安装与配置全流程指南",[464,3435,3436],{},[467,3437,3438],{},"在终端运行以下指令完成插件拉取与启动：",[611,3440,3442],{"className":613,"code":3441,"language":615,"meta":424,"style":424},"dsh plugin --profile web add https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway.git\n\n# Start DSH web\ndsh web\n",[521,3443,3444,3464,3468,3473],{"__ignoreMap":424},[619,3445,3446,3449,3452,3455,3458,3461],{"class":621,"line":622},[619,3447,3448],{"class":625},"dsh",[619,3450,3451],{"class":629}," plugin",[619,3453,3454],{"class":629}," --profile",[619,3456,3457],{"class":629}," web",[619,3459,3460],{"class":629}," add",[619,3462,3463],{"class":629}," https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway.git\n",[619,3465,3466],{"class":621,"line":639},[619,3467,643],{"emptyLinePlaceholder":642},[619,3469,3470],{"class":621,"line":646},[619,3471,3472],{"class":649},"# Start DSH web\n",[619,3474,3475,3477],{"class":621,"line":653},[619,3476,3448],{"class":625},[619,3478,3479],{"class":629}," web\n",[464,3481,3482],{"start":639},[467,3483,3484,3485,3487],{},"待 DSH Web 界面启动并用浏览器打开后，点击界面侧边栏中的“",[433,3486,2932],{},"”图标：",[429,3489,3490],{},[513,3491],{"alt":3492,"src":3493},"DeepSeek Harness Web UI 侧边栏高亮显示的 Message platforms 配置菜单项","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-web-ui-message-platforms-sidebar-icon.webp",[464,3495,3496],{"start":646},[467,3497,3498,3499,3502],{},"在左侧平台列表中选择“",[433,3500,3501],{},"Buzz","”：",[429,3504,3505],{},[513,3506],{"alt":3507,"src":3508},"DeepSeek Harness 消息网关内的 Buzz 协议参数与密钥对配置面板","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-message-gateway-buzz-config-panel.webp",[464,3510,3511,3522,3533],{"start":653},[467,3512,3513,3514,3517,3518,3521],{},"点击“",[433,3515,3516],{},"Generate keypair","”按钮即时生成全新的 Nostr 身份密钥对。请务必将生成的 ",[521,3519,3520],{},"npub"," 公钥妥善复制暂存，后续步骤将作为关键身份凭证。",[467,3523,3524,3525,3528,3529,3532],{},"准确填入您的 ",[433,3526,3527],{},"Relay URL","（中继地址）以及需要监听订阅的 ",[433,3530,3531],{},"Channels","（允许访问的频道 UUID 白名单列表）。",[467,3534,3535,3536,3539],{},"点击底部的“",[433,3537,3538],{},"Save","”按钮完成保存。",[429,3541,3542,3543,3546,3547,3550,3551,3553],{},"表单提交后，系统将持久化保存配置并",[433,3544,3545],{},"立即启动 Buzz 网关服务","。私钥 ",[521,3548,3549],{},"nsec"," 作为最高机密凭证被自动保护，仅独立存放在宿主机本地的 ",[521,3552,2906],{}," 文件中。",[478,3555,3557],{"id":3556},"将-dsh-智能体注册至-buzz-nostr-中继服务","将 DSH 智能体注册至 Buzz Nostr 中继服务",[429,3559,3560,3563,3564,3566],{},[433,3561,3562],{},"将 DSH 助手作为新成员注册加入中继","。此处公钥填入上文所生成的 ",[521,3565,3520],{}," 字符串：",[611,3568,3570],{"className":613,"code":3569,"language":615,"meta":424,"style":424},"docker compose exec relay buzz-admin add-member --pubkey npub123123123\n",[521,3571,3572],{"__ignoreMap":424},[619,3573,3574,3576,3578,3581,3584,3587,3590,3593],{"class":621,"line":622},[619,3575,1703],{"class":625},[619,3577,1706],{"class":629},[619,3579,3580],{"class":629}," exec",[619,3582,3583],{"class":629}," relay",[619,3585,3586],{"class":629}," buzz-admin",[619,3588,3589],{"class":629}," add-member",[619,3591,3592],{"class":629}," --pubkey",[619,3594,3595],{"class":629}," npub123123123\n",[429,3597,3598,3601,3602,3605,3606,3609,3610,3613,3614,3617],{},[433,3599,3600],{},"将 DSH 助手加入特定的沟通频道","。仅加入中继并不会让助手自动出现在频道成员列表中。需要通过 ",[521,3603,3604],{},"buzz-cli"," 进一步执行入群操作。注意此处 ",[521,3607,3608],{},"--pubkey"," 参数必须使用 ",[433,3611,3612],{},"HEX 16 进制公钥","格式，而非 npub 格式（在上一步执行 ",[521,3615,3616],{},"buzz-admin add-member"," 时，终端输出中会打印对应的 HEX 公钥）：",[611,3619,3621],{"className":613,"code":3620,"language":615,"meta":424,"style":424},"buzz channels add-member --channel \u003CCHANNEL_UUID> --pubkey \u003CAGENT_HEX> --role member\n",[521,3622,3623],{"__ignoreMap":424},[619,3624,3625,3628,3631,3633,3636,3639,3642,3645,3648,3650,3652,3655,3658,3660,3663],{"class":621,"line":622},[619,3626,3627],{"class":625},"buzz",[619,3629,3630],{"class":629}," channels",[619,3632,3589],{"class":629},[619,3634,3635],{"class":629}," --channel",[619,3637,3638],{"class":691}," \u003C",[619,3640,3641],{"class":629},"CHANNEL_UUI",[619,3643,3644],{"class":767},"D",[619,3646,3647],{"class":691},">",[619,3649,3592],{"class":629},[619,3651,3638],{"class":691},[619,3653,3654],{"class":629},"AGENT_HE",[619,3656,3657],{"class":767},"X",[619,3659,3647],{"class":691},[619,3661,3662],{"class":629}," --role",[619,3664,3665],{"class":629}," member\n",[1428,3667],{"description":3668,"image":2878,"image-alt":2879,"label":3669,"min-read":3670,"title":3671,"to":3672},"手把手教您安装和配置 buzz-cli，以便在 Nostr 中继上管理频道、成员密钥以及 AI 智能体的角色权限。","CLI 指南","5","如何安装并使用 buzz-cli","\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#install-buzz-cli",[429,3674,3675,3676,3678],{},"随后可通过 ",[521,3677,3604],{}," 灵活更新 DSH 助手在 Nostr 中继中的公开资料，设置更具辨识度的昵称：",[429,3680,3681],{},[513,3682],{"alt":3683,"src":3684},"使用 buzz-cli 命令行工具更新 DSH 助手在 Nostr 中继上的公开个人资料","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-assistant-buzz-cli-profile-update.webp",[429,3686,3687,3688,3691],{},"在客户端向 DSH 助手发送一次 ",[433,3689,3690],{},"Wave","（Buzz 平台独特的 DM 私信打招呼动作）。助手随后返回回复，代表网关通讯已完全就绪：",[429,3693,3694],{},[513,3695],{"alt":3696,"src":3697},"在 Buzz 客户端向 DeepSeek Harness 助手发送 Wave 私信进行连通性验证","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-dm-wave-greeting-reply.webp",[429,3699,3700],{},[3314,3701,3702],{},"向 DSH 助手发送 Wave 私信打招呼 — 桥接网关正常秒级响应。",[478,3704,3706,3707,3710],{"id":3705},"通过-workspace-指令开启本地工作区联动","通过 ",[521,3708,3709],{},"\u002Fworkspace"," 指令开启本地工作区联动",[429,3712,1891,3713,3716,3717,3720,3721,3723],{},[521,3714,3715],{},"allowWorkspace"," 配置项出于环境安全考虑默认处于禁用（",[521,3718,3719],{},"false","）状态，未经配置直接向助手发送 ",[521,3722,3709],{}," 命令会被系统拦截拒绝：",[429,3725,3726],{},[513,3727],{"alt":3728,"src":3729},"在未开启 allowWorkspace 权限时发送 \u002Fworkspace 命令被系统安全拦截的提示","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace-command-rejected-error.webp",[429,3731,3732,3733,3736,3737,3739],{},"打开配置文件 ",[521,3734,3735],{},"~\u002F.dsh\u002Fprofiles\u002Fweb\u002Fcordis.patch.yml"," 添加开关配置，随后重启 ",[521,3738,2994],{}," 服务即可：",[611,3741,3743],{"className":1965,"code":3742,"language":1967,"meta":424,"style":424},"- id: ui-message-gateway\n  config:\n    allowWorkspace: true\n",[521,3744,3745,3758,3765],{"__ignoreMap":424},[619,3746,3747,3750,3753,3755],{"class":621,"line":622},[619,3748,3749],{"class":691},"-",[619,3751,3752],{"class":954}," id",[619,3754,966],{"class":691},[619,3756,3757],{"class":629}," ui-message-gateway\n",[619,3759,3760,3763],{"class":621,"line":639},[619,3761,3762],{"class":954},"  config",[619,3764,958],{"class":691},[619,3766,3767,3770,3772],{"class":621,"line":646},[619,3768,3769],{"class":954},"    allowWorkspace",[619,3771,966],{"class":691},[619,3773,3774],{"class":979}," true\n",[429,3776,3777],{},"配置生效并重启后即可顺利绑定：",[429,3779,3780],{},[513,3781],{"alt":3782,"src":3783},"在 Buzz 频道成功执行 \u002Fworkspace 命令完成本地工作区绑定的确认消息","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace-command-success-confirmation.webp",[429,3785,3786,3787,3790],{},"实用贴士：此命令默认假设工作区目录名（例如截图中的 ",[521,3788,3789],{},"TechVoyage","）直接位于当前用户的个人主目录之下；若目录处于其他深层路径，请务必传入完整绝对路径。通过 Buzz 频道中注册绑定好的新会话，也都会完全同步在 DeepSeek Harness Web 界面上显示。",[429,3792,3793],{},[513,3794],{"alt":3795,"src":3796},"DeepSeek Harness Web UI 中展示从 Buzz 频道自动同步关联的活跃工作区会话","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-web-ui-synced-workspace-session.webp",[478,3798,3800],{"id":3799},"buzz-频道支持的完整可用指令","Buzz 频道支持的完整可用指令",[429,3802,3803],{},"其他平台支持的几乎全部原生功能在 Buzz 中均可顺畅运行：",[3008,3805,3806,3816],{},[3011,3807,3808],{},[3014,3809,3810,3813],{},[3017,3811,3812],{},"指令语法",[3017,3814,3815],{},"功能说明",[3026,3817,3818,3828,3838,3848,3858,3868,3878,3888,3898,3921,3941],{},[3014,3819,3820,3825],{},[3031,3821,3822],{},[521,3823,3824],{},"\u002Fworkspace \u003Cfolder>",[3031,3826,3827],{},"将本地已存在的文件夹注册绑定为当前对话专属的工作区环境（受配置项开关保护）",[3014,3829,3830,3835],{},[3031,3831,3832],{},[521,3833,3834],{},"\u002Fhelp",[3031,3836,3837],{},"打印并列出所有支持的命令清单",[3014,3839,3840,3845],{},[3031,3841,3842],{},[521,3843,3844],{},"\u002Ftime",[3031,3846,3847],{},"获取并输出当前服务器系统时间",[3014,3849,3850,3855],{},[3031,3851,3852],{},[521,3853,3854],{},"\u002Fnew",[3031,3856,3857],{},"丢弃旧上下文，原地重置开启全新会话",[3014,3859,3860,3865],{},[3031,3861,3862],{},[521,3863,3864],{},"\u002Fclear",[3031,3866,3867],{},"清空当前上下文所有历史对话流",[3014,3869,3870,3875],{},[3031,3871,3872],{},[521,3873,3874],{},"\u002Fstatus",[3031,3876,3877],{},"查看当前 Buzz 消息桥接器的实时在线状态",[3014,3879,3880,3885],{},[3031,3881,3882],{},[521,3883,3884],{},"\u002Fstats",[3031,3886,3887],{},"查看当前系统活跃会话总量及所有接入平台（包含 Buzz）的桥接连接详细状态",[3014,3889,3890,3895],{},[3031,3891,3892],{},[521,3893,3894],{},"\u002Fcommands",[3031,3896,3897],{},"输出全量指令的底层规范与参数描述文档",[3014,3899,3900,3905],{},[3031,3901,3902],{},[521,3903,3904],{},"@path\u002Fto\u002Ffile",[3031,3906,3907,3908,3910,3911,2303,3913,3916,3917,3920],{},"与 Web 端的 ",[521,3909,3244],{}," 文件提及功能完全一致：Agent 自动相对于工作区读取文件内容；单独发送 ",[521,3912,3244],{},[521,3914,3915],{},"@前缀"," 或使用 ",[521,3918,3919],{},"\u002Ffiles \u003C前缀>"," 可返回文件\u002F文件夹列表",[3014,3922,3923,3928],{},[3031,3924,3925],{},[521,3926,3927],{},"\u002Fmodel",[3031,3929,3930,3933,3934,3936,3937,3940],{},[521,3931,3932],{},"[provider model effort]"," — 校验有效后实时切换该会话的底层推理大模型与思考深度；单独输入 ",[521,3935,3927],{}," 显示支持的候选列表，",[521,3938,3939],{},"\u002Fmodel reset"," 恢复系统默认设置",[3014,3942,3943,3948],{},[3031,3944,3945],{},[521,3946,3947],{},"\u002Feffort",[3031,3949,3950,3953,3954,3957],{},[521,3951,3952],{},"\u003Cid>"," 仅针对支持思考深度的模型调整 reasoning effort；",[521,3955,3956],{},"\u002Feffort reset"," 恢复默认推理深度配置",[478,3959,3960],{"id":3960},"核心安全架构总结",[482,3962,3963,3975,3989],{},[467,3964,3965,3968,3969,3971,3972,3974],{},[433,3966,3967],{},"私钥资产隔离保护","：Agent 专属的私钥 ",[433,3970,3549],{}," 仅保存在宿主机的 ",[521,3973,2906],{}," 中（0600 文件只读权限，原子写入机制） — 永远不会通过 API 端点对外暴露，也不会打印至日常调试日志中。",[467,3976,3977,3980,3981,3984,3985,3988],{},[433,3978,3979],{},"全链路加密签名验签","：每一个入站的 Nostr 事件在投递给 Agent 执行之前，都会严密执行",[433,3982,3983],{},"密码学数字签名检验","（",[521,3986,3987],{},"verifyEvent","）、消息防重放判重、自发自收环路过滤以及 @提及权限校验。",[467,3990,3991,3994,3995,3997,3998,4001],{},[433,3992,3993],{},"本地工作区指令受限保护","：由于网关会话默认开启特权自动批准机制，",[521,3996,3709],{}," 目录注册能力默认处于禁用状态，必须由开发者在配置文件中明确开启（",[521,3999,4000],{},"allowWorkspace: true","），严防非预期提权暴露敏感目录。",[457,4003,4005],{"id":4004},"结语拥抱-buzz-去中心化人机协作时代","结语：拥抱 Buzz 去中心化人机协作时代",[429,4007,4008,4009,4011],{},"在将 Buzz 接入 ",[521,4010,2863],{}," 的探索过程中，最大的技术挑战在于严密契合 Nostr 协议的去中心化事件生命周期与事件约束规范。所幸插件本身优秀的架构底座已经将多 Agent 会话管理与命令分发高度抽象，一旦建立起可靠的事件监听与原位流式编辑链路，整个桥接网关便能呈现出超预期的流畅度与生产级稳定性。",[457,4013,4015],{"id":4014},"参考文献与资料","参考文献与资料：",[482,4017,4018,4026,4034],{},[467,4019,4020,4025],{},[449,4021,4024],{"href":4022,"rel":4023},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway\u002Fblob\u002Fmain\u002Fdocs\u002Farchitecture.md",[506],"dsh-message-gateway architecture guide"," — 官方网关架构指南、扩展实践与安全规范",[467,4027,4028,4033],{},[449,4029,4032],{"href":4030,"rel":4031},"https:\u002F\u002Fgithub.com\u002Fnbd-wtf\u002Fnostr-tools",[506],"nostr-tools"," — 底层调用的核心 Nostr JavaScript 客户端库",[467,4035,4036,4041],{},[449,4037,4040],{"href":4038,"rel":4039},"https:\u002F\u002Fgithub.com\u002Fbytedance\u002Fdeer-flow\u002Fblob\u002Fmain\u002Fbackend\u002Fdocs\u002FIM_CHANNEL_CONNECTIONS.md",[506],"deer-flow IM channel connections"," — 即时通讯平台多通道连接架构设计参考",[1328,4043,4044],{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":424,"searchDepth":639,"depth":646,"links":4046},[4047,4048,4052,4059,4060],{"id":2886,"depth":639,"text":2887},{"id":2998,"depth":639,"text":2999,"children":4049},[4050,4051],{"id":3297,"depth":646,"text":3298},{"id":3325,"depth":646,"text":3326},{"id":3433,"depth":639,"text":3433,"children":4053},[4054,4055,4057,4058],{"id":3556,"depth":646,"text":3557},{"id":3705,"depth":646,"text":4056},"通过 \u002Fworkspace 指令开启本地工作区联动",{"id":3799,"depth":646,"text":3800},{"id":3960,"depth":646,"text":3960},{"id":4004,"depth":639,"text":4005},{"id":4014,"depth":639,"text":4015},[1350,4062,3627,4063],"collaboration","deepseek-harness","2026-09-30","深入解析如何通过 Nostr 协议将 DeepSeek Harness 接入 Block Buzz 协作平台：手把手配置 NIP-42 鉴权认证、基于 40003 事件的原位流式编辑输出、频道独立会话管理与本地工作区指令联动，为开发团队构建起安全可控、开箱即用的人机协同智能体开发环境与全新工作流程。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002FZH-Bringing-Buzz-to-DeepSeek-Harness.webp","一张高颜值的 16:9 科技质感卡片，具有深蓝色与琥珀色调，插图展示如何为 DeepSeek Harness 接入 Block Buzz 协作平台并构建自托管 Nostr 协议网关，中央配有高对比度毛玻璃面板与精致中文排版。",{"schemaOrg":4069,"robots":1361,"sitemap":4093},[4070,4072],{"@type":4071,"headline":2845,"description":4065,"image":4066},"TechArticle",{"@type":1360,"name":2845,"description":4065,"image":4066,"step":4073},[4074,4078,4081,4084,4087,4090],{"@type":4075,"name":4076,"text":4077},"HowToStep","阶段一：安装与启动消息网关插件","执行 dsh plugin add 命令安装 dsh-message-gateway 并启动 dsh web 服务。",{"@type":4075,"name":4079,"text":4080},"阶段二：访问 Message platforms 配置中心","通过浏览器打开 DSH Web 界面并导航至 Message platforms 菜单。",{"@type":4075,"name":4082,"text":4083},"阶段三：配置 Buzz 桥接参数与生成密钥对","即时生成 Nostr 身份密钥对，准确填入 Relay URL 与订阅频道 UUID 列表。",{"@type":4075,"name":4085,"text":4086},"阶段四：将智能体注册加入 Buzz 中继服务","使用 buzz-admin 命令行工具将 DSH 助手的 npub 公钥加入中继成员。",{"@type":4075,"name":4088,"text":4089},"阶段五：将智能体加入指定的团队频道","使用 buzz-cli 命令行工具将 16 进制 HEX 公钥加入频道成员名单。",{"@type":4075,"name":4091,"text":4092},"阶段六：开启本地工作区绑定权限","在 cordis.patch.yml 中开启 allowWorkspace 配置以允许目录挂载指令。",{"lastmod":4064},{"title":4095,"description":4065,"ogTitle":2845,"ogDescription":4065,"twitterTitle":2845,"twitterDescription":4065},"DeepSeek Harness Buzz 插件开发：构建 Nostr 协议网关与实时流式输出的完整教程","zh\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",[3005,3501,4098,4099,2863],"Nostr","AI智能体","-Uv9S6aUiVlNLLDrGF-a3NbzGbjT5AnW8AjMaIbu1Ao",[4102,4649,5294],{"id":4103,"title":1265,"author":424,"body":4104,"category":4633,"date":4635,"description":4636,"extension":1354,"image":4637,"imageAlt":4638,"isPublished":642,"meta":4639,"minRead":639,"navigation":642,"path":399,"seo":4643,"stem":4644,"tags":4645,"updatedAt":2841,"__hash__":4648},"article\u002Fzh\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac.md",{"type":426,"value":4105,"toc":4626},[4106,4110,4113,4120,4124,4127,4130,4133,4137,4140,4147,4163,4469,4584,4587,4590,4593,4623],[457,4107,4109],{"id":4108},"什么是-cloudflare-warp","什么是 Cloudflare WARP？",[429,4111,4112],{},"Cloudflare WARP 是一款客户端应用程序，它将指定设备的数据流量通过 Cloudflare 的全球网络进行路由，而不是直接发送到公共互联网。",[429,4114,4115,4116,4119],{},"它基于 ",[433,4117,4118],{},"WireGuard"," 协议建立一条加密隧道，从而保护从设备到最近的 Cloudflare 数据中心之间的流量安全。随后，您可以在 Cloudflare 控制面板中创建策略，对这些流入的流量进行过滤、记录、检查或路由。",[457,4121,4123],{"id":4122},"为什么我们需要-cloudflare-warp","为什么我们需要 Cloudflare WARP？",[429,4125,4126],{},"为了向员工、承包商和其他利益相关者安全地公开内部资源（如私有 Web 服务或 SaaS 应用程序），Cloudflare WARP 客户端被用作**零信任网络访问 (ZTNA)**的客户端强制执行点。",[429,4128,4129],{},"Cloudflare WARP 客户端安装在用户的笔记本电脑或手机上。它要求用户在授予访问权限之前进行身份验证，并满足特定的安全状态检查（例如来自经过批准的 IP 范围、使用已注册的邮箱域名或运行处于活动状态的防火墙）。",[429,4131,4132],{},"通过将设备流量直接隧道化传输到 Cloudflare，用户的身份、设备和策略将在请求到达内部资源之前得到验证。因此，内部资源永远不会暴露在公共互联网上，每一次请求都将得到完整的记录和审计。",[457,4134,4136],{"id":4135},"在单台设备上支持多个-warp-配置文件","在单台设备上支持多个 WARP 配置文件",[429,4138,4139],{},"当用户需要在个人和企业 Cloudflare 账户之间进行切换，或者当系统管理员需要管理多个租户（tenant）时，在单台设备上支持多个 WARP 配置文件就显得至关重要。",[429,4141,4142,4143,4146],{},"要在 macOS 上实现这一目标，我们可以使用 ",[521,4144,4145],{},".mobileconfig"," MDM 配置文件来定义和注册不同的 WARP 环境。",[482,4148,4149,4160],{},[467,4150,4151,4152,508],{},"直接从 Cloudflare ",[449,4153,4156,4157,4159],{"href":4154,"rel":4155},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fstatic\u002Fmdm\u002Fmultiple-orgs\u002FCloudflareWARP.mobileconfig",[506],"下载 ",[521,4158,4145],{}," 示例文件",[467,4161,4162],{},"以下是该配置文件的示例文本：",[611,4164,4168],{"className":4165,"code":4166,"language":4167,"meta":424,"style":424},"language-xml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\" \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n\u003Cplist version=\"1.0\">\n\u003Cdict>\n  \u003Ckey>PayloadContent\u003C\u002Fkey>\n  \u003Carray>\n    \u003Cdict>\n      \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n      \u003Cstring>Warp Configuration\u003C\u002Fstring>\n      \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n      \u003Cstring>com.cloudflare.warp.CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n      \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n      \u003Cstring>Cloudflare Ltd.\u003C\u002Fstring>\n      \u003Ckey>PayloadType\u003C\u002Fkey>\n      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n      \u003Cinteger>1\u003C\u002Finteger>\n      \u003Ckey>configs\u003C\u002Fkey>\n      \u003Carray>\n        \u003Cdict>\n          \u003Ckey>organization\u003C\u002Fkey>\n          \u003Cstring>your-team-name-1\u003C\u002Fstring>\n          \u003Ckey>display_name\u003C\u002Fkey>\n          \u003Cstring>Team 1\u003C\u002Fstring>\n        \u003C\u002Fdict>\n        \u003Cdict>\n          \u003Ckey>organization\u003C\u002Fkey>\n          \u003Cstring>your-team-name-2\u003C\u002Fstring>\n          \u003Ckey>display_name\u003C\u002Fkey>\n          \u003Cstring>Team 2\u003C\u002Fstring>\n        \u003C\u002Fdict>\n      \u003C\u002Farray>\n    \u003C\u002Fdict>\n  \u003C\u002Farray>\n  \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n  \u003Cstring>Cloudflare WARP\u003C\u002Fstring>\n  \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n  \u003Cstring>cloudflare_warp\u003C\u002Fstring>\n  \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n  \u003Cstring>Cloudflare, Ltd.\u003C\u002Fstring>\n  \u003Ckey>PayloadRemovalDisallowed\u003C\u002Fkey>\n  \u003Cfalse\u002F>\n  \u003Ckey>PayloadScope\u003C\u002Fkey>\n  \u003Cstring>System\u003C\u002Fstring>\n  \u003Ckey>PayloadType\u003C\u002Fkey>\n  \u003Cstring>Configuration\u003C\u002Fstring>\n  \u003Ckey>PayloadUUID\u003C\u002Fkey>\n  \u003Cstring>2B7763B8-64F6-41EB-AA5E-7761651B8131\u003C\u002Fstring>\n  \u003Ckey>PayloadVersion\u003C\u002Fkey>\n  \u003Cinteger>1\u003C\u002Finteger>\n\u003C\u002Fdict>\n\u003C\u002Fplist>\n","xml",[521,4169,4170,4175,4180,4185,4190,4195,4200,4205,4210,4215,4220,4225,4230,4235,4240,4245,4250,4255,4260,4265,4270,4275,4281,4287,4293,4299,4305,4311,4316,4321,4327,4332,4338,4343,4349,4355,4361,4367,4373,4379,4385,4391,4397,4403,4409,4415,4421,4427,4433,4439,4445,4451,4457,4463],{"__ignoreMap":424},[619,4171,4172],{"class":621,"line":622},[619,4173,4174],{},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",[619,4176,4177],{"class":621,"line":639},[619,4178,4179],{},"\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\" \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n",[619,4181,4182],{"class":621,"line":646},[619,4183,4184],{},"\u003Cplist version=\"1.0\">\n",[619,4186,4187],{"class":621,"line":653},[619,4188,4189],{},"\u003Cdict>\n",[619,4191,4192],{"class":621,"line":665},[619,4193,4194],{},"  \u003Ckey>PayloadContent\u003C\u002Fkey>\n",[619,4196,4197],{"class":621,"line":670},[619,4198,4199],{},"  \u003Carray>\n",[619,4201,4202],{"class":621,"line":676},[619,4203,4204],{},"    \u003Cdict>\n",[619,4206,4207],{"class":621,"line":1017},[619,4208,4209],{},"      \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[619,4211,4212],{"class":621,"line":1028},[619,4213,4214],{},"      \u003Cstring>Warp Configuration\u003C\u002Fstring>\n",[619,4216,4217],{"class":621,"line":1124},[619,4218,4219],{},"      \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[619,4221,4222],{"class":621,"line":1130},[619,4223,4224],{},"      \u003Cstring>com.cloudflare.warp.CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[619,4226,4227],{"class":621,"line":1136},[619,4228,4229],{},"      \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[619,4231,4232],{"class":621,"line":1141},[619,4233,4234],{},"      \u003Cstring>Cloudflare Ltd.\u003C\u002Fstring>\n",[619,4236,4237],{"class":621,"line":1147},[619,4238,4239],{},"      \u003Ckey>PayloadType\u003C\u002Fkey>\n",[619,4241,4242],{"class":621,"line":2077},[619,4243,4244],{},"      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n",[619,4246,4247],{"class":621,"line":2088},[619,4248,4249],{},"      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[619,4251,4252],{"class":621,"line":2093},[619,4253,4254],{},"      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[619,4256,4257],{"class":621,"line":2101},[619,4258,4259],{},"      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[619,4261,4262],{"class":621,"line":2643},[619,4263,4264],{},"      \u003Cinteger>1\u003C\u002Finteger>\n",[619,4266,4267],{"class":621,"line":2649},[619,4268,4269],{},"      \u003Ckey>configs\u003C\u002Fkey>\n",[619,4271,4272],{"class":621,"line":2658},[619,4273,4274],{},"      \u003Carray>\n",[619,4276,4278],{"class":621,"line":4277},22,[619,4279,4280],{},"        \u003Cdict>\n",[619,4282,4284],{"class":621,"line":4283},23,[619,4285,4286],{},"          \u003Ckey>organization\u003C\u002Fkey>\n",[619,4288,4290],{"class":621,"line":4289},24,[619,4291,4292],{},"          \u003Cstring>your-team-name-1\u003C\u002Fstring>\n",[619,4294,4296],{"class":621,"line":4295},25,[619,4297,4298],{},"          \u003Ckey>display_name\u003C\u002Fkey>\n",[619,4300,4302],{"class":621,"line":4301},26,[619,4303,4304],{},"          \u003Cstring>Team 1\u003C\u002Fstring>\n",[619,4306,4308],{"class":621,"line":4307},27,[619,4309,4310],{},"        \u003C\u002Fdict>\n",[619,4312,4314],{"class":621,"line":4313},28,[619,4315,4280],{},[619,4317,4319],{"class":621,"line":4318},29,[619,4320,4286],{},[619,4322,4324],{"class":621,"line":4323},30,[619,4325,4326],{},"          \u003Cstring>your-team-name-2\u003C\u002Fstring>\n",[619,4328,4330],{"class":621,"line":4329},31,[619,4331,4298],{},[619,4333,4335],{"class":621,"line":4334},32,[619,4336,4337],{},"          \u003Cstring>Team 2\u003C\u002Fstring>\n",[619,4339,4341],{"class":621,"line":4340},33,[619,4342,4310],{},[619,4344,4346],{"class":621,"line":4345},34,[619,4347,4348],{},"      \u003C\u002Farray>\n",[619,4350,4352],{"class":621,"line":4351},35,[619,4353,4354],{},"    \u003C\u002Fdict>\n",[619,4356,4358],{"class":621,"line":4357},36,[619,4359,4360],{},"  \u003C\u002Farray>\n",[619,4362,4364],{"class":621,"line":4363},37,[619,4365,4366],{},"  \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[619,4368,4370],{"class":621,"line":4369},38,[619,4371,4372],{},"  \u003Cstring>Cloudflare WARP\u003C\u002Fstring>\n",[619,4374,4376],{"class":621,"line":4375},39,[619,4377,4378],{},"  \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[619,4380,4382],{"class":621,"line":4381},40,[619,4383,4384],{},"  \u003Cstring>cloudflare_warp\u003C\u002Fstring>\n",[619,4386,4388],{"class":621,"line":4387},41,[619,4389,4390],{},"  \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[619,4392,4394],{"class":621,"line":4393},42,[619,4395,4396],{},"  \u003Cstring>Cloudflare, Ltd.\u003C\u002Fstring>\n",[619,4398,4400],{"class":621,"line":4399},43,[619,4401,4402],{},"  \u003Ckey>PayloadRemovalDisallowed\u003C\u002Fkey>\n",[619,4404,4406],{"class":621,"line":4405},44,[619,4407,4408],{},"  \u003Cfalse\u002F>\n",[619,4410,4412],{"class":621,"line":4411},45,[619,4413,4414],{},"  \u003Ckey>PayloadScope\u003C\u002Fkey>\n",[619,4416,4418],{"class":621,"line":4417},46,[619,4419,4420],{},"  \u003Cstring>System\u003C\u002Fstring>\n",[619,4422,4424],{"class":621,"line":4423},47,[619,4425,4426],{},"  \u003Ckey>PayloadType\u003C\u002Fkey>\n",[619,4428,4430],{"class":621,"line":4429},48,[619,4431,4432],{},"  \u003Cstring>Configuration\u003C\u002Fstring>\n",[619,4434,4436],{"class":621,"line":4435},49,[619,4437,4438],{},"  \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[619,4440,4442],{"class":621,"line":4441},50,[619,4443,4444],{},"  \u003Cstring>2B7763B8-64F6-41EB-AA5E-7761651B8131\u003C\u002Fstring>\n",[619,4446,4448],{"class":621,"line":4447},51,[619,4449,4450],{},"  \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[619,4452,4454],{"class":621,"line":4453},52,[619,4455,4456],{},"  \u003Cinteger>1\u003C\u002Finteger>\n",[619,4458,4460],{"class":621,"line":4459},53,[619,4461,4462],{},"\u003C\u002Fdict>\n",[619,4464,4466],{"class":621,"line":4465},54,[619,4467,4468],{},"\u003C\u002Fplist>\n",[482,4470,4471,4481,4495,4505,4511,4528,4541,4559,4575],{},[467,4472,4473,4474,562,4477,4480],{},"将 ",[521,4475,4476],{},"your-team-name-1",[521,4478,4479],{},"your-team-name-2"," 替换为您各自的 Cloudflare Zero Trust 团队名称。",[467,4482,4483,4484,4487,4488,4490,4491,4494],{},"在终端中运行命令 ",[521,4485,4486],{},"uuidgen"," 生成唯一的 UUID，并使用它们替换 ",[521,4489,4145],{}," 文件中的占位符 ",[521,4492,4493],{},"PayloadUUID"," 值。",[467,4496,4497,4498,4501,4502,4504],{},"确保 ",[521,4499,4500],{},"PayloadIdentifier"," 字符串中也包含更新后的 ",[521,4503,4493],{},"，以保证配置文件的唯一性。",[467,4506,4507,4508,4510],{},"保存编辑后的 ",[521,4509,4145],{}," 文件。",[467,4512,4513,4514,4517,4518,4521,4522,4524],{},"打开 Mac 上的",[433,4515,4516],{},"系统设置","，搜索并选择",[433,4519,4520],{},"描述文件","（Profiles）。",[607,4523],{},[513,4525],{"alt":4526,"src":4527},"macOS 系统设置中的描述档面板","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-system-settings-profiles.webp",[467,4529,4530,4531,4534,4535,4537],{},"点击",[433,4532,4533],{},"安装、查看或移除...","（Install, view or remove...）开始添加您的新配置文件。",[607,4536],{},[513,4538],{"alt":4539,"src":4540},"macOS 描述档安装、查看或移除按钮","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-profiles-view-remove.webp",[467,4542,4543,4544,4546,4547,4510,4549,4551,4555],{},"点击左下角的 ",[433,4545,3129],{},"（加号）图标，并选择您保存的 ",[521,4548,4145],{},[607,4550],{},[513,4552],{"alt":4553,"src":4554},"macOS 描述档左下角新增（+）按钮","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-profiles-add-profile.webp",[513,4556],{"alt":4557,"src":4558},"在 macOS 上选择 .mobileconfig 配置文件","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-select-mobileconfig-file.webp",[467,4560,4561,4562,4564,4565,4568,4569,4571],{},"选择 ",[433,4563,439],{}," 并点击",[433,4566,4567],{},"安装","以应用此配置。",[607,4570],{},[513,4572],{"alt":4573,"src":4574},"在 macOS 上确认安装 Cloudflare WARP 描述档","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-install-cloudflare-warp-profile.webp",[467,4576,4577,4578,4580],{},"重新启动您的 Cloudflare WARP 客户端。您现在应该可以在用户界面中看到多组织切换器：",[607,4579],{},[513,4581],{"alt":4582,"src":4583},"macOS 上支持多组织切换的 Cloudflare WARP 客户端界面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fcloudflare-warp-multi-profile-switcher.webp",[457,4585,4586],{"id":4586},"结论",[429,4588,4589],{},"Cloudflare WARP 客户端在用户设备上扮演着关键的安全边界角色，使零信任网络访问（ZTNA）既稳固又极具实用性。通过将内部资源与公共互联网隔离开来，可确保每一次连接尝试都经过安全的身份验证、评估与审计。",[457,4591,4592],{"id":4592},"参考资料",[482,4594,4595,4602,4609,4616],{},[467,4596,4597],{},[449,4598,4601],{"href":4599,"rel":4600},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002F#prepare-file-for-mdm-deployment",[506],"Managed Deployment Preparation",[467,4603,4604],{},[449,4605,4608],{"href":4606,"rel":4607},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002Fswitch-organizations\u002F",[506],"Switch Between Zero Trust Organizations",[467,4610,4611],{},[449,4612,4615],{"href":4613,"rel":4614},"https:\u002F\u002Fblog.cloudflare.com\u002Fintroducing-warp-connector-paving-the-path-to-any-to-any-connectivity-2\u002F",[506],"Introducing WARP Connector: Paving the Path to Any-to-Any Connectivity",[467,4617,4618],{},[449,4619,4622],{"href":4620,"rel":4621},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002F",[506],"Cloudflare One Client Documentation",[1328,4624,4625],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":424,"searchDepth":639,"depth":646,"links":4627},[4628,4629,4630,4631,4632],{"id":4108,"depth":639,"text":4109},{"id":4122,"depth":639,"text":4123},{"id":4135,"depth":639,"text":4136},{"id":4586,"depth":639,"text":4586},{"id":4592,"depth":639,"text":4592},[1351,4634],"cloudflare","2026-07-04","本指南将详细介绍如何在macOS系统上，通过使用MDM .mobileconfig配置文件，实现多个Cloudflare WARP零信任组织或账户之间的无缝切换。本文为企业IT系统管理员提供了一套完整的、可直接落地部署的操作指南与配置步骤模板，帮助企业轻松管理并确保终端用户的网络安全与合规审计要求。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002FZH-Switch-Between-Multiple-Cloudflare-WARP-Orgs-on-Mac.webp","在Mac上配置和切换多个Cloudflare WARP组织账户",{"schemaOrg":4640,"robots":1361,"sitemap":4642},[4641],{"@type":1360,"headline":1265,"description":4636},{"lastmod":4635},{"title":4638,"description":4636,"ogTitle":1265,"ogDescription":4636,"twitterTitle":1265,"twitterDescription":4636},"zh\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",[4646,439,4647,1368],"macOS","MDM","PqQ8V7tDnvy35zbYhRFeP2qlFyG5TcvpZCHoKbf9GqU",{"id":4650,"title":4651,"author":424,"body":4652,"category":5266,"date":5267,"description":5268,"extension":1354,"image":5269,"imageAlt":5270,"isPublished":642,"meta":5271,"minRead":653,"navigation":642,"path":375,"seo":5285,"stem":5287,"tags":5288,"updatedAt":2841,"__hash__":5293},"article\u002Fzh\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server.md","如何在 Linux VPS 远程服务器上从零开始安装、部署与配置 Hermes Agent",{"type":426,"value":4653,"toc":5255},[4654,4658,4661,4664,4668,4672,4675,4688,4694,4697,4726,4733,4760,4767,4772,4786,4798,4806,4811,4827,4831,4834,4855,4861,4864,4875,4885,4896,4927,4931,4942,4952,4962,4976,4983,4993,4999,5029,5045,5049,5055,5067,5072,5106,5110,5113,5127,5136,5199,5202,5246,5249,5252],[457,4655,4657],{"id":4656},"为什么在远程-vps-上托管-hermes-agent","为什么在远程 VPS 上托管 Hermes Agent？",[429,4659,4660],{},"由于 Hermes Agent 能够执行后台任务、调度作业以及响应 webhook 调用，我们需要一台机器保持 24\u002F7 全天候待命。本地设备可能会断电、断网，或者面临硬件资源耗尽的风险。而远程服务器（VPS）则能保证 99% 以上的在线率（Uptime），并在需要时轻松对计算资源进行弹性扩容。",[429,4662,4663],{},"目前市面上有好几家性价比极高的虚拟专用服务器（VPS）提供商，比如 Hetzner、Hostinger 和 Contabo。我们已经使用 Contabo 有一段时间了，到目前为止，它的表现非常稳定和出色。",[457,4665,4667],{"id":4666},"如何在-linux-vps-上配置-hermes-agent","如何在 Linux VPS 上配置 Hermes Agent",[478,4669,4671],{"id":4670},"第一步连接到您的-vps","第一步：连接到您的 VPS",[429,4673,4674],{},"打开终端并使用 SSH 登录您的远程服务器：",[611,4676,4678],{"className":613,"code":4677,"language":615,"meta":424,"style":424},"ssh root@your_server_ip\n",[521,4679,4680],{"__ignoreMap":424},[619,4681,4682,4685],{"class":621,"line":622},[619,4683,4684],{"class":625},"ssh",[619,4686,4687],{"class":629}," root@your_server_ip\n",[429,4689,4690],{},[513,4691],{"alt":4692,"src":4693},"在终端中通过 SSH 连接到 Linux VPS 服务器","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fvps-terminal-ssh-connection.webp",[429,4695,4696],{},"确保服务器的软件包都是最新的：",[611,4698,4700],{"className":613,"code":4699,"language":615,"meta":424,"style":424},"sudo apt update && sudo apt upgrade -y\n",[521,4701,4702],{"__ignoreMap":424},[619,4703,4704,4706,4709,4712,4715,4718,4720,4723],{"class":621,"line":622},[619,4705,626],{"class":625},[619,4707,4708],{"class":629}," apt",[619,4710,4711],{"class":629}," update",[619,4713,4714],{"class":691}," &&",[619,4716,4717],{"class":625}," sudo",[619,4719,4708],{"class":629},[619,4721,4722],{"class":629}," upgrade",[619,4724,4725],{"class":629}," -y\n",[429,4727,4728,4729,4732],{},"添加一个新用户 ",[521,4730,4731],{},"hermes","，或者您自定义的其他用户名：",[611,4734,4736],{"className":613,"code":4735,"language":615,"meta":424,"style":424},"sudo adduser hermes \nsudo passwd hermes\n",[521,4737,4738,4750],{"__ignoreMap":424},[619,4739,4740,4742,4745,4748],{"class":621,"line":622},[619,4741,626],{"class":625},[619,4743,4744],{"class":629}," adduser",[619,4746,4747],{"class":629}," hermes",[619,4749,768],{"class":767},[619,4751,4752,4754,4757],{"class":621,"line":639},[619,4753,626],{"class":625},[619,4755,4756],{"class":629}," passwd",[619,4758,4759],{"class":629}," hermes\n",[429,4761,4762,4763,4766],{},"关闭 ",[521,4764,4765],{},"root"," 用户的密码登录以增强安全性：",[464,4768,4769],{},[467,4770,4771],{},"打开 SSH 配置文件：",[611,4773,4775],{"className":613,"code":4774,"language":615,"meta":424,"style":424},"sudo nano \u002Fetc\u002Fssh\u002Fsshd_config\n",[521,4776,4777],{"__ignoreMap":424},[619,4778,4779,4781,4783],{"class":621,"line":622},[619,4780,626],{"class":625},[619,4782,1058],{"class":629},[619,4784,4785],{"class":629}," \u002Fetc\u002Fssh\u002Fsshd_config\n",[464,4787,4788],{"start":639},[467,4789,4790,4791,4794,4795,1962],{},"找到 ",[521,4792,4793],{},"PermitRootLogin"," 这一行，将其值修改为 ",[521,4796,4797],{},"no",[611,4799,4804],{"className":4800,"code":4802,"language":4803,"meta":424},[4801],"language-text","PermitRootLogin no\n","text",[521,4805,4802],{"__ignoreMap":424},[464,4807,4808],{"start":646},[467,4809,4810],{},"保存文件并重启 SSH 服务：",[611,4812,4814],{"className":613,"code":4813,"language":615,"meta":424,"style":424},"sudo systemctl restart ssh\n",[521,4815,4816],{"__ignoreMap":424},[619,4817,4818,4820,4822,4824],{"class":621,"line":622},[619,4819,626],{"class":625},[619,4821,630],{"class":629},[619,4823,633],{"class":629},[619,4825,4826],{"class":629}," ssh\n",[478,4828,4830],{"id":4829},"第二步安装-hermes-agent","第二步：安装 Hermes Agent",[429,4832,4833],{},"运行以下命令：",[611,4835,4837],{"className":613,"code":4836,"language":615,"meta":424,"style":424},"curl -fsSL https:\u002F\u002Fhermes-agent.nousresearch.com\u002Finstall.sh | bash\n",[521,4838,4839],{"__ignoreMap":424},[619,4840,4841,4843,4846,4849,4852],{"class":621,"line":622},[619,4842,1718],{"class":625},[619,4844,4845],{"class":629}," -fsSL",[619,4847,4848],{"class":629}," https:\u002F\u002Fhermes-agent.nousresearch.com\u002Finstall.sh",[619,4850,4851],{"class":691}," |",[619,4853,4854],{"class":625}," bash\n",[429,4856,4857],{},[513,4858],{"alt":4859,"src":4860},"在终端中运行 Hermes Agent 的一键安装脚本","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-agent-installation-terminal.webp",[429,4862,4863],{},"安装完成后，输入以下命令验证是否安装成功：",[611,4865,4867],{"className":613,"code":4866,"language":615,"meta":424,"style":424},"hermes --version\n",[521,4868,4869],{"__ignoreMap":424},[619,4870,4871,4873],{"class":621,"line":622},[619,4872,4731],{"class":625},[619,4874,2346],{"class":629},[429,4876,2487,4877,4880,4881],{},[521,4878,4879],{},"hermes setup"," 命令行工具来配置 Hermes Agent：\n",[513,4882],{"alt":4883,"src":4884},"在终端中运行 hermes setup 命令开始向导配置","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-agent-setup-wizard.webp",[429,4886,4887,4888,4891,4892],{},"选择大语言模型（LLM）提供商，我们可以先选择 ",[521,4889,4890],{},"DeepSeek","，后续再根据需要添加其他模型。\n",[513,4893],{"alt":4894,"src":4895},"在 Hermes 设置中选择 DeepSeek 作为 LLM 大模型提供商","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-llm-provider-selection.webp",[429,4897,4898,4899,4901,4902,4906,4910,4911,1826,4914,4918,4919,4922,4923],{},"输入您的 ",[521,4900,4890],{}," API 密钥：\n",[513,4903],{"alt":4904,"src":4905},"在终端命令行中输入 DeepSeek API 密钥","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-enter-api-key.webp",[513,4907],{"alt":4908,"src":4909},"成功验证并确认大模型提供商的 API 密钥","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-api-key-success.webp","\n在运行 Hermes Agent 的环境选项中选择 ",[521,4912,4913],{},"local machine",[513,4915],{"alt":4916,"src":4917},"选择 local machine 本地设备作为 Hermes Agent 的执行环境","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-select-local-machine.webp","\n在通信渠道（Channels）中选择 ",[521,4920,4921],{},"Telegram","，其他渠道可以在后续随时配置。\n",[513,4924],{"alt":4925,"src":4926},"在 Hermes 设置中选择 Telegram 作为通信管道渠道","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-select-telegram-channel.webp",[478,4928,4930],{"id":4929},"第三步与-telegram-进行集成","第三步：与 Telegram 进行集成",[429,4932,4933,4934,4937,4938],{},"选择选项 ",[521,4935,4936],{},"[2]"," 来使用 Telegram 机器人。\n",[513,4939],{"alt":4940,"src":4941},"选择选项开始集成并配置 Telegram 机器人","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-bot-integration-option.webp",[429,4943,4944,4945,4947,4948],{},"打开 ",[521,4946,4921],{}," 并搜索 'BotFather' 官方账号。\n",[513,4949],{"alt":4950,"src":4951},"在 Telegram 应用中搜索官方 BotFather 账号","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-search-botfather.webp",[429,4953,1791,4954,4957,4958],{},[521,4955,4956],{},"Open"," 打开与 'BotFather' 的对话框。\n",[513,4959],{"alt":4960,"src":4961},"在 Telegram 中打开与 BotFather 的对话框","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-open-botfather-chat.webp",[429,4963,1791,4964,4967,4968,4971,4972],{},[521,4965,4966],{},"Create a New Bot","（或输入 ",[521,4969,4970],{},"\u002Fnewbot"," 指令）。\n",[513,4973],{"alt":4974,"src":4975},"向 BotFather 发送 \u002Fnewbot 指令以创建全新的机器人","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-create-new-bot.webp",[429,4977,4978,4979],{},"按照提示填写名称和用户名，完成机器人的创建。\n",[513,4980],{"alt":4981,"src":4982},"配置新 Telegram 机器人的昵称和唯一用户名","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-bot-details-configured.webp",[429,4984,1791,4985,4988,4989],{},[521,4986,4987],{},"Copy"," 复制机器人 Token（令牌），并将其粘贴回终端中。\n",[513,4990],{"alt":4991,"src":4992},"复制新创建的 Telegram 机器人的 HTTP API 访问 Token","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-copy-http-api-token.webp",[429,4994,4995,4996,4998],{},"获取您的 ",[521,4997,4921],{}," 账号 ID 并将其添加到允许访问的用户列表（'Allowed user list'）中：",[482,5000,5001,5011,5026],{},[467,5002,5003,5004,5006,5007],{},"在 ",[521,5005,4921],{}," 中搜索 '@raw_data_bot'。\n",[513,5008],{"alt":5009,"src":5010},"在 Telegram 中搜索 raw data bot 机器人以检索账号 ID","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-search-raw-data-bot.webp",[467,5012,5013,5014,5017,5018,5021,5022],{},"点击进入 ",[521,5015,5016],{},"RawDataBot"," 并点击 Start（开始）按钮。您的用户 ID 将显示在 ",[521,5019,5020],{},"P.S. Your ID:"," 后面。\n",[513,5023],{"alt":5024,"src":5025},"启动 RawDataBot 机器人以获取当前用户的账号 ID","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-raw-data-bot-user-id.webp",[467,5027,5028],{},"复制该用户 ID 并粘贴到终端中。",[429,5030,5031,5032,5036,5037,5041],{},"由于我们在云端运行此服务，我们希望它能在系统启动时自动运行。\n",[513,5033],{"alt":5034,"src":5035},"配置 Hermes systemd 服务开机自启自动运行的选项","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-autostart-service-option.webp","\n将其他设置均保持默认值即可：\n",[513,5038],{"alt":5039,"src":5040},"在终端设置中将各项基础配置保持默认推荐值","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-leave-defaults-1.webp",[513,5042],{"alt":5043,"src":5044},"在 Hermes 配置向导中完成默认选项的设置","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-leave-defaults-2.webp",[457,5046,5048],{"id":5047},"使用-telegram-机器人测试您的-hermes-agent","使用 Telegram 机器人测试您的 Hermes Agent",[429,5050,5051,5052,3337],{},"运行以下命令启动 ",[521,5053,5054],{},"hermes gateway",[611,5056,5058],{"className":613,"code":5057,"language":615,"meta":424,"style":424},"hermes gateway\n",[521,5059,5060],{"__ignoreMap":424},[619,5061,5062,5064],{"class":621,"line":622},[619,5063,4731],{"class":625},[619,5065,5066],{"class":629}," gateway\n",[429,5068,4944,5069,5071],{},[521,5070,4921],{},"，将刚刚创建的机器人，例如 '@tech_cloud_hermes_bot'，添加到对话中。",[482,5073,5074,5087,5097],{},[467,5075,5076,5077,5079,5080,5082,5083],{},"在对话框中输入 ",[521,5078,3854],{}," 启动一个新的 ",[521,5081,435],{}," 对话会话。\n",[513,5084],{"alt":5085,"src":5086},"在 Telegram 聊天框中输入 \u002Fnew 指令开启新的智能体对话会话","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-new-session.webp",[467,5088,5089,5090,5092,5093],{},"输入 ",[521,5091,3894],{}," 指令将列出所有可用的操作命令。\n",[513,5094],{"alt":5095,"src":5096},"在 Telegram 聊天框中输入 \u002Fcommands 指令查看可用操作指令列表","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-commands-list.webp",[467,5098,5089,5099,5101,5102],{},[521,5100,3927],{}," 指令即可查看当前可用的 LLM 大模型列表。\n",[513,5103],{"alt":5104,"src":5105},"在 Telegram 聊天框中输入 \u002Fmodel 指令查看可切换的 LLM 列表","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-model-selection.webp",[457,5107,5109],{"id":5108},"将-hermes-gateway-配置为后台常驻服务","将 Hermes Gateway 配置为后台常驻服务",[429,5111,5112],{},"创建 systemd 守护进程服务文件：",[611,5114,5116],{"className":1047,"code":5115,"language":1049,"meta":424,"style":424},"sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-gateway.service\n",[521,5117,5118],{"__ignoreMap":424},[619,5119,5120,5122,5124],{"class":621,"line":622},[619,5121,626],{"class":625},[619,5123,1058],{"class":629},[619,5125,5126],{"class":629}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-gateway.service\n",[429,5128,5129,5130,2198,5133,5135],{},"粘贴以下配置，注意将 ",[521,5131,5132],{},"\u002Fhome\u002Fhermes",[521,5134,4731],{}," 替换为您自己的用户名：",[611,5137,5139],{"className":1073,"code":5138,"language":1075,"meta":424,"style":424},"[Unit]\nDescription=Hermes Gateway\nAfter=network.target\n\n[Service]\nUser=hermes\nWorkingDirectory=\u002Fhome\u002Fhermes\nExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes gateway\nRestart=always\nRestartSec=10\nEnvironment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n\n[Install]\nWantedBy=multi-user.target\n",[521,5140,5141,5145,5150,5154,5158,5162,5166,5170,5175,5179,5183,5187,5191,5195],{"__ignoreMap":424},[619,5142,5143],{"class":621,"line":622},[619,5144,1082],{},[619,5146,5147],{"class":621,"line":639},[619,5148,5149],{},"Description=Hermes Gateway\n",[619,5151,5152],{"class":621,"line":646},[619,5153,1092],{},[619,5155,5156],{"class":621,"line":653},[619,5157,643],{"emptyLinePlaceholder":642},[619,5159,5160],{"class":621,"line":665},[619,5161,1101],{},[619,5163,5164],{"class":621,"line":670},[619,5165,1106],{},[619,5167,5168],{"class":621,"line":676},[619,5169,1111],{},[619,5171,5172],{"class":621,"line":1017},[619,5173,5174],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes gateway\n",[619,5176,5177],{"class":621,"line":1028},[619,5178,1121],{},[619,5180,5181],{"class":621,"line":1124},[619,5182,1127],{},[619,5184,5185],{"class":621,"line":1130},[619,5186,1133],{},[619,5188,5189],{"class":621,"line":1136},[619,5190,643],{"emptyLinePlaceholder":642},[619,5192,5193],{"class":621,"line":1141},[619,5194,1144],{},[619,5196,5197],{"class":621,"line":1147},[619,5198,1150],{},[429,5200,5201],{},"启用并启动该背景服务：",[611,5203,5205],{"className":1047,"code":5204,"language":1049,"meta":424,"style":424},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-gateway\nsudo systemctl start hermes-gateway\nsudo systemctl status hermes-gateway\n",[521,5206,5207,5215,5226,5236],{"__ignoreMap":424},[619,5208,5209,5211,5213],{"class":621,"line":622},[619,5210,626],{"class":625},[619,5212,630],{"class":629},[619,5214,1169],{"class":629},[619,5216,5217,5219,5221,5223],{"class":621,"line":639},[619,5218,626],{"class":625},[619,5220,630],{"class":629},[619,5222,764],{"class":629},[619,5224,5225],{"class":629}," hermes-gateway\n",[619,5227,5228,5230,5232,5234],{"class":621,"line":646},[619,5229,626],{"class":625},[619,5231,630],{"class":629},[619,5233,1189],{"class":629},[619,5235,5225],{"class":629},[619,5237,5238,5240,5242,5244],{"class":621,"line":653},[619,5239,626],{"class":625},[619,5241,630],{"class":629},[619,5243,660],{"class":629},[619,5245,5225],{"class":629},[457,5247,5248],{"id":5248},"总结与展望",[429,5250,5251],{},"在本文中，我们主要分享了如何在云端服务器上搭建并配置 Hermes Agent，并通过 Telegram 实现与其双向的高效沟通。让 Hermes Agent 运行在远程 VPS 上，能够为您打造一个 24 小时永不下线的、真正的 AI 数字化个人助手。",[1328,5253,5254],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":424,"searchDepth":639,"depth":646,"links":5256},[5257,5258,5263,5264,5265],{"id":4656,"depth":639,"text":4657},{"id":4666,"depth":639,"text":4667,"children":5259},[5260,5261,5262],{"id":4670,"depth":646,"text":4671},{"id":4829,"depth":646,"text":4830},{"id":4929,"depth":646,"text":4930},{"id":5047,"depth":639,"text":5048},{"id":5108,"depth":639,"text":5109},{"id":5248,"depth":639,"text":5248},[1350],"2026-06-19","在本篇非常详尽的实战教程中，我们将一步步向您展示如何在远程 Linux VPS 服务器上成功安装与部署 Hermes Agent，并实现 24 小时稳定常驻运行。我们还会手把手教您如何通过自定义的 Telegram 机器人，快速与Hermes进行无缝对接，轻松实现自动化的任务管理，确保系统能随时在线响应。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002FZH-How%20to%20Setup%20Hermes%20on%20Remote%20Server.webp","手把手教您如何在远程 Linux VPS 服务器上成功部署 Hermes Agent，并实现与自定义 Telegram 机器人的双向集成。",{"schemaOrg":5272,"robots":1361,"sitemap":5284},[5273],{"@type":1360,"name":4651,"description":5268,"image":5269,"step":5274},[5275,5278,5281],{"@type":4075,"name":4671,"text":5276,"image":4693,"url":5277},"打开终端并使用 SSH 登录您的远程服务器： 确保服务器的软件包都是最新的： 添加一个新用户 `hermes`，或者您自定义的其他用户名： 关闭 `root` 用户的密码登录以增强安全性： 1. 打开 SSH 配置文件： 2. 找到 `PermitRootLogin` 这一行，将其值修改为 `...","#-vps",{"@type":4075,"name":4830,"text":5279,"image":4860,"url":5280},"运行以下命令： 安装完成后，输入以下命令验证是否安装成功： 运行 `hermes setup` 命令行工具来配置 Hermes Agent： 选择大语言模型（LLM）提供商，我们可以先选择 `DeepSeek`，后续再根据需要添加其他模型。 输入您的 `DeepSeek` API 密钥： 在运...","#-hermes-agent",{"@type":4075,"name":4930,"text":5282,"image":4941,"url":5283},"选择选项 `[2]` 来使用 Telegram 机器人。 打开 `Telegram` 并搜索 'BotFather' 官方账号。 点击 `Open` 打开与 'BotFather' 的对话框。 点击 `Create a New Bot`（或输入 `\u002Fnewbot` 指令）。 按照提示填写名称和...","#-telegram-",{"lastmod":5267},{"title":5286,"description":5268,"ogTitle":4651,"ogDescription":5268,"twitterTitle":4651,"twitterDescription":5268},"Hermes Agent VPS 部署：Telegram 机器人双向集成指南","zh\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",[435,5289,5290,5291,5292],"VPS Setup","Telegram Bot","Linux VPS","AI Agent","3W7iQIun_QDbvFC66RehnT4AHrYJJQhyta-BATtk8wc",{"id":2844,"title":2845,"author":424,"body":2846,"category":4061,"date":4064,"description":4065,"extension":1354,"image":4066,"imageAlt":4067,"isPublished":642,"meta":4068,"minRead":1141,"navigation":642,"path":355,"seo":4094,"stem":4096,"tags":4097,"updatedAt":2841,"__hash__":4100},1792490001314]