[{"data":1,"prerenderedAt":5295},["ShallowReactive",2],{"published-article-paths":3,"search-navigation":348,"\u002Ftw\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp":421,"\u002Ftw\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":255,"seo":1364,"stem":1366,"tags":1367,"updatedAt":1363,"__hash__":1371},"article\u002Ftw\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\u002FTW-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 的安全存取","tw\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",[439,1368,435,1369,1370],"Zero Trust","私有網路","教學","HTGJ42xrWk07SDM4iYiDvZunbYRe0lOzZcsR2BGh8No",{"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":271,"seo":2834,"stem":2836,"tags":2837,"updatedAt":2841,"__hash__":2842},"article\u002Ftw\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,1913,1920,1953,1957,1964,2108,2142,2148,2169,2180,2185,2189,2204,2275,2279,2284,2320,2451,2458,2464,2471,2477,2480,2486,2493,2508,2519,2526,2532,2543,2672,2678,2683,2686,2691,2694,2698,2704,2709,2715,2726,2736,2740,2751,2757,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},"\u002Ftw\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"," 命令列用戶端將該本地目錄與我們之前設定的遠端同步筆記庫進行即時同步。",[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,1912],{"id":1911},"將網域添加至-caddyfile","將網域添加至 Caddyfile",[429,1914,1915,1916,1919],{},"在您的 Caddyfile 中以相同的方式為 ",[521,1917,1918],{},"obsidian.pafor.me"," 設定反向代理：",[611,1921,1923],{"className":1631,"code":1922,"language":1633,"meta":424,"style":424},"{$OBSIDIAN_DOMAIN} {\n  encode zstd gzip\n  reverse_proxy host.docker.internal:9898\n}\n",[521,1924,1925,1936,1940,1949],{"__ignoreMap":424},[619,1926,1927,1929,1932,1934],{"class":621,"line":622},[619,1928,1661],{"class":691},[619,1930,1931],{"class":767},"$OBSIDIAN_DOMAIN",[619,1933,1667],{"class":691},[619,1935,1670],{"class":691},[619,1937,1938],{"class":621,"line":639},[619,1939,1675],{"class":767},[619,1941,1942,1944,1946],{"class":621,"line":646},[619,1943,1680],{"class":767},[619,1945,966],{"class":691},[619,1947,1948],{"class":1685},"9898\n",[619,1950,1951],{"class":621,"line":653},[619,1952,1648],{"class":691},[901,1954,1956],{"id":1955},"使用-docker-啟動-ignis","使用 Docker 啟動 Ignis",[429,1958,1959,1960,1963],{},"在 VPS 上將以下 Docker Compose 設定儲存為 ",[521,1961,1962],{},"ignis-docker-compose.yml","：",[611,1965,1969],{"className":1966,"code":1967,"language":1968,"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,1970,1971,1978,1985,1995,2002,2015,2022,2027,2034,2041,2048,2055,2062,2069,2076,2087,2092,2100],{"__ignoreMap":424},[619,1972,1973,1976],{"class":621,"line":622},[619,1974,1975],{"class":954},"services",[619,1977,958],{"class":691},[619,1979,1980,1983],{"class":621,"line":639},[619,1981,1982],{"class":954},"  ignis",[619,1984,958],{"class":691},[619,1986,1987,1990,1992],{"class":621,"line":646},[619,1988,1989],{"class":954},"    image",[619,1991,966],{"class":691},[619,1993,1994],{"class":629}," nobbe\u002Fignis:latest\n",[619,1996,1997,2000],{"class":621,"line":653},[619,1998,1999],{"class":954},"    ports",[619,2001,958],{"class":691},[619,2003,2004,2007,2010,2013],{"class":621,"line":665},[619,2005,2006],{"class":691},"      -",[619,2008,2009],{"class":691}," \"",[619,2011,2012],{"class":629},"9898:8080",[619,2014,698],{"class":691},[619,2016,2017,2020],{"class":621,"line":670},[619,2018,2019],{"class":954},"    environment",[619,2021,958],{"class":691},[619,2023,2024],{"class":621,"line":676},[619,2025,2026],{"class":649},"      # match these to your host user (run: id)\n",[619,2028,2029,2031],{"class":621,"line":1017},[619,2030,2006],{"class":691},[619,2032,2033],{"class":629}," PUID=1000\n",[619,2035,2036,2038],{"class":621,"line":1028},[619,2037,2006],{"class":691},[619,2039,2040],{"class":629}," PGID=1000\n",[619,2042,2043,2045],{"class":621,"line":1124},[619,2044,2006],{"class":691},[619,2046,2047],{"class":629}," WS_ORIGINS=https:\u002F\u002Fobsidian.pafor.me\n",[619,2049,2050,2053],{"class":621,"line":1130},[619,2051,2052],{"class":954},"    volumes",[619,2054,958],{"class":691},[619,2056,2057,2059],{"class":621,"line":1136},[619,2058,2006],{"class":691},[619,2060,2061],{"class":629}," .\u002Fvaults:\u002Fvaults\n",[619,2063,2064,2066],{"class":621,"line":1141},[619,2065,2006],{"class":691},[619,2067,2068],{"class":629}," .\u002Fdata:\u002Fapp\u002Fdata\n",[619,2070,2071,2073],{"class":621,"line":1147},[619,2072,2006],{"class":691},[619,2074,2075],{"class":629}," obsidian-app:\u002Fapp\u002Fobsidian-app\n",[619,2077,2079,2082,2084],{"class":621,"line":2078},15,[619,2080,2081],{"class":954},"    restart",[619,2083,966],{"class":691},[619,2085,2086],{"class":629}," unless-stopped\n",[619,2088,2090],{"class":621,"line":2089},16,[619,2091,643],{"emptyLinePlaceholder":642},[619,2093,2095,2098],{"class":621,"line":2094},17,[619,2096,2097],{"class":954},"volumes",[619,2099,958],{"class":691},[619,2101,2103,2106],{"class":621,"line":2102},18,[619,2104,2105],{"class":954},"  obsidian-app",[619,2107,958],{"class":691},[482,2109,2110,2121,2135],{},[467,2111,2112,2113,2116,2117,2120],{},"在主機端使用 ",[521,2114,2115],{},"9898"," 連接埠，因為 ",[521,2118,2119],{},"8080"," 是一個非常常用且容易衝突的連接埠。",[467,2122,2123,2124,2127,2128,562,2131,2134],{},"在您的 VPS 上執行 ",[521,2125,2126],{},"id"," 命令，獲取目前主機使用者的 ",[521,2129,2130],{},"UID",[521,2132,2133],{},"GID","，並將其填寫到設定檔中，以確保檔案系統具備正確的讀寫權限。",[467,2136,2137,2138,2141],{},"設定 ",[521,2139,2140],{},"WS_ORIGINS","，僅允許來自您指定網域的 WebSocket 連線，提高安全性。",[429,2143,2144,2145,2147],{},"啟動 ",[433,2146,1403],{}," 容器：",[611,2149,2151],{"className":613,"code":2150,"language":615,"meta":424,"style":424},"docker compose -f ignis-docker-compose.yml up -d\n",[521,2152,2153],{"__ignoreMap":424},[619,2154,2155,2157,2159,2162,2165,2167],{"class":621,"line":622},[619,2156,1703],{"class":625},[619,2158,1706],{"class":629},[619,2160,2161],{"class":629}," -f",[619,2163,2164],{"class":629}," ignis-docker-compose.yml",[619,2166,1709],{"class":629},[619,2168,1712],{"class":629},[429,2170,2171,2172,2175,2176,2179],{},"當您在網頁瀏覽器中存取您的網域名稱時，將會彈出 ",[433,2173,2174],{},"'Vault Manager'","（筆記庫管理器）。由於此時資料夾為空，它不會顯示任何本地筆記庫。在下一節中，我們將設定 ",[433,2177,2178],{},"'Synch CLI'","，從我們之前設定的遠端同步伺服器中拉取筆記。",[513,2181],{"src":2182,"alt":2183,"style":2184},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-vault-manager-empty.webp","Ignis 網頁用戶端中當前為空的筆記庫管理器","max-width: 466px; width: 100%; height: auto;",[901,2186,2188],{"id":2187},"解決-docker-帶來的防火牆失效問題","解決 Docker 帶來的防火牆失效問題",[429,2190,2191,2192,2195,2196,2199,2200,2203],{},"預設情況下，Docker 會自動在系統底層插入自己的 DNAT 與 FORWARD 鏈規則，直接將外部公網流量轉發至作用中的容器連接埠。這會完全繞過 Ubuntu 預設的 UFW 或 iptables ",[521,2193,2194],{},"INPUT"," 鏈防火牆保護。為了阻止外部未經授權的存取並保持容器的絕對私有，我們需要手動將以下規則新增至 ",[521,2197,2198],{},"iptables"," 中的 ",[521,2201,2202],{},"DOCKER-USER"," 鏈：",[611,2205,2207],{"className":613,"code":2206,"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,2208,2209,2214,2241,2245,2250],{"__ignoreMap":424},[619,2210,2211],{"class":621,"line":622},[619,2212,2213],{"class":649},"# 阻斷所有外部公網流量的直接存取\n",[619,2215,2216,2218,2221,2224,2227,2230,2233,2236,2239],{"class":621,"line":639},[619,2217,626],{"class":625},[619,2219,2220],{"class":629}," iptables",[619,2222,2223],{"class":629}," -I",[619,2225,2226],{"class":629}," DOCKER-USER",[619,2228,2229],{"class":629}," -i",[619,2231,2232],{"class":629}," ext_if",[619,2234,2235],{"class":629}," -j",[619,2237,2238],{"class":629}," DROP",[619,2240,768],{"class":767},[619,2242,2243],{"class":621,"line":646},[619,2244,643],{"emptyLinePlaceholder":642},[619,2246,2247],{"class":621,"line":653},[619,2248,2249],{"class":649},"# 僅允許來自您的 Cloudflare WARP 用戶端私有 IP 的存取流量\n",[619,2251,2252,2254,2256,2258,2260,2262,2264,2267,2270,2272],{"class":621,"line":665},[619,2253,626],{"class":625},[619,2255,2220],{"class":629},[619,2257,2223],{"class":629},[619,2259,2226],{"class":629},[619,2261,2229],{"class":629},[619,2263,2232],{"class":629},[619,2265,2266],{"class":629}," -s",[619,2268,2269],{"class":1685}," 100.96.0.10",[619,2271,2235],{"class":629},[619,2273,2274],{"class":629}," ACCEPT\n",[901,2276,2278],{"id":2277},"設定-synch-cli-命令列同步工具","設定 Synch CLI 命令列同步工具",[429,2280,2281,2283],{},[433,2282,1887],{}," 是一款無介面的命令列工具，即使在没有安裝 Obsidian 桌面應用的遠端伺服器上，它也能讓本地目錄與遠端筆記庫进行即時同步。",[429,2285,2286,2287,2290,2291,2293,2294,2297,2298,1865,2301,2304,2305,562,2308,2311,2312,2315,2316,2319],{},"從您之前克隆的 ",[521,2288,2289],{},"synch"," 倉庫源碼中建置 ",[433,2292,1887],{},"。建置過程需要 ",[433,2295,2296],{},"Node.js >= 22.5","（因為 CLI 依賴於 ",[521,2299,2300],{},"node:sqlite",[521,2302,2303],{},"fetch","、",[521,2306,2307],{},"WebSocket",[521,2309,2310],{},"WebCrypto"," 等全域瀏覽器原生 API）和 ",[433,2313,2314],{},"pnpm","（由於整個倉庫是一個使用了 ",[521,2317,2318],{},"pnpm@10.33.0"," 版本管理器的 pnpm 工作區）：",[611,2321,2323],{"className":613,"code":2322,"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,2324,2325,2330,2341,2348,2352,2357,2364,2368,2373,2386,2390,2395,2406,2435,2439,2444],{"__ignoreMap":424},[619,2326,2327],{"class":621,"line":622},[619,2328,2329],{"class":649},"# Check versions\n",[619,2331,2332,2335,2338],{"class":621,"line":639},[619,2333,2334],{"class":625},"node",[619,2336,2337],{"class":629}," --version",[619,2339,2340],{"class":649},"   # must be >= 22.5\n",[619,2342,2343,2345],{"class":621,"line":646},[619,2344,2314],{"class":625},[619,2346,2347],{"class":629}," --version\n",[619,2349,2350],{"class":621,"line":653},[619,2351,643],{"emptyLinePlaceholder":642},[619,2353,2354],{"class":621,"line":665},[619,2355,2356],{"class":649},"# In the repos root\n",[619,2358,2359,2361],{"class":621,"line":670},[619,2360,2314],{"class":625},[619,2362,2363],{"class":629}," install\n",[619,2365,2366],{"class":621,"line":676},[619,2367,643],{"emptyLinePlaceholder":642},[619,2369,2370],{"class":621,"line":1017},[619,2371,2372],{"class":649},"# Build the CLI bundle\n",[619,2374,2375,2377,2380,2383],{"class":621,"line":1028},[619,2376,2314],{"class":625},[619,2378,2379],{"class":629}," -C",[619,2381,2382],{"class":629}," apps\u002Fcli",[619,2384,2385],{"class":629}," build\n",[619,2387,2388],{"class":621,"line":1124},[619,2389,643],{"emptyLinePlaceholder":642},[619,2391,2392],{"class":621,"line":1130},[619,2393,2394],{"class":649},"# After a successful build you have `apps\u002Fcli\u002Fdist\u002Fsynch.js`. Make it executable and put it on your PATH\n",[619,2396,2397,2400,2403],{"class":621,"line":1136},[619,2398,2399],{"class":625},"chmod",[619,2401,2402],{"class":629}," +x",[619,2404,2405],{"class":629}," apps\u002Fcli\u002Fdist\u002Fsynch.js\n",[619,2407,2408,2411,2414,2416,2419,2422,2425,2427,2430,2433],{"class":621,"line":1141},[619,2409,2410],{"class":625},"ln",[619,2412,2413],{"class":629}," -sf",[619,2415,2009],{"class":691},[619,2417,2418],{"class":767},"$PWD",[619,2420,2421],{"class":629},"\u002Fapps\u002Fcli\u002Fdist\u002Fsynch.js",[619,2423,2424],{"class":691},"\"",[619,2426,2009],{"class":691},[619,2428,2429],{"class":767},"$HOME",[619,2431,2432],{"class":629},"\u002F.local\u002Fbin\u002Fsynch",[619,2434,698],{"class":691},[619,2436,2437],{"class":621,"line":1147},[619,2438,643],{"emptyLinePlaceholder":642},[619,2440,2441],{"class":621,"line":2078},[619,2442,2443],{"class":649},"# Verification\n",[619,2445,2446,2448],{"class":621,"line":2089},[619,2447,2289],{"class":625},[619,2449,2450],{"class":629}," --help\n",[429,2452,2453,2454,2457],{},"由於 Synch CLI 執行在与您的 Synch 遠端同步伺服端相同的 VPS 上，它能够直接自動連線至本地的 API 服務連接埠。如果您將它們部署在不同的伺服器上，請執行 ",[521,2455,2456],{},"synch login --api-url \u003Cremote-synch-api-url>"," 来手動定義您的遠端目標 API 端點。",[429,2459,2460],{},[513,2461],{"alt":2462,"src":2463},"在終端機中輸入自訂 API URL 執行 synch login 登入指令","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-login-api-url-terminal.webp",[429,2465,2466,2467,2470],{},"在您的 VPS 終端機中執行 ",[521,2468,2469],{},"synch login"," 命令，您將獲得一個用於身份驗證的登入 URL：",[429,2472,2473],{},[513,2474],{"alt":2475,"src":2476},"終端機輸出顯示的 Synch CLI 認證 URL","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-login-auth-url-terminal.webp",[429,2478,2479],{},"使用與您在 Obsidian 桌面端 Synchrun 插件中註冊的相同信箱地址，透過該網頁連結進行登入授權。",[429,2481,2482],{},[513,2483],{"alt":2484,"src":2485},"Synch CLI 授權網頁端登入成功","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-web-login-success.webp",[429,2487,2488,2489,2492],{},"執行 ",[521,2490,2491],{},"synch vault connect --vault ~\u002Fvaults\u002F\u003Cvaultname> --vault-id asadqe-7b29-4677-fsad-234asdafasd"," 來將您 VPS 上的本地筆記庫目錄與遠端自建伺服器上的筆記庫進行關聯：",[429,2494,2495,2496,2499,2500,2503,2504,2507],{},"您可以透過打開桌面端 Obsidian 中的 ",[433,2497,2498],{},"Synchrun"," 外掛設定，點擊 ",[433,2501,2502],{},"「管理遠端筆記庫」（Manage remote vaults）"," 來找到您的遠端筆記庫 ID。該操作會打開一個網頁並列出您所有的遠端筆記庫，每個庫旁邊都附帶有一個 GUID 格式的唯一識別碼（例如：",[521,2505,2506],{},"123e4567-e89b-12d3-a456-426614174000","）：",[429,2509,2510,2515],{},[513,2511],{"src":2512,"alt":2513,"style":2514},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-manage-remote-vaults.webp","在 Synchrun 外掛中管理遠端筆記庫","max-width: 582px; width: 100%; height: auto;",[513,2516],{"alt":2517,"src":2518},"在 Synchrun 中定位唯一的遠端筆記庫 ID","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-remote-vault-id.webp",[429,2520,2521,2522,2525],{},"在提示時輸入您的筆記庫密碼以確立關聯。關聯成功後，執行 ",[521,2523,2524],{},"synch sync --vault ~\u002Fvaults\u002F\u003Cvault-name>"," 來進行您的首次全量同步。首次同步根據您的檔案大小，可能會耗費一些時間。",[429,2527,2528],{},[513,2529],{"alt":2530,"src":2531},"Synch CLI 中顯示首次拉取同步筆記庫的進度","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-cli-initial-sync-progress.webp",[429,2533,2534,2535,2538,2539,2542],{},"為了讓同步全自動進行，我們可以設定並啟用一個 ",[521,2536,2537],{},"systemd"," 系統守護服務，在背景持續執行 ",[521,2540,2541],{},"synch watch"," 監聽檔案變化，以確保 VPS 上的筆記在系統開機時即可實現毫秒級自動同步：",[611,2544,2546],{"className":613,"code":2545,"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,2547,2548,2564,2568,2573,2578,2583,2587,2591,2596,2601,2606,2611,2616,2621,2625,2630,2634,2638,2642,2648,2657],{"__ignoreMap":424},[619,2549,2550,2552,2555,2558,2561],{"class":621,"line":622},[619,2551,626],{"class":625},[619,2553,2554],{"class":629}," tee",[619,2556,2557],{"class":629}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fsynch-watch.service",[619,2559,2560],{"class":691}," \u003C\u003C",[619,2562,2563],{"class":691},"'EOF'\n",[619,2565,2566],{"class":621,"line":639},[619,2567,1082],{"class":629},[619,2569,2570],{"class":621,"line":646},[619,2571,2572],{"class":629},"Description=Synch vault watcher\n",[619,2574,2575],{"class":621,"line":653},[619,2576,2577],{"class":629},"After=network-online.target\n",[619,2579,2580],{"class":621,"line":665},[619,2581,2582],{"class":629},"Wants=network-online.target\n",[619,2584,2585],{"class":621,"line":670},[619,2586,643],{"emptyLinePlaceholder":642},[619,2588,2589],{"class":621,"line":676},[619,2590,1101],{"class":629},[619,2592,2593],{"class":621,"line":1017},[619,2594,2595],{"class":629},"Type=simple\n",[619,2597,2598],{"class":621,"line":1028},[619,2599,2600],{"class":629},"User=\u003Cusername>\n",[619,2602,2603],{"class":621,"line":1124},[619,2604,2605],{"class":629},"ExecStart=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin\u002Fsynch watch --vault \u002Fhome\u002F\u003Cusername>\u002Fvaults\u002F\u003Cvault-name>\n",[619,2607,2608],{"class":621,"line":1130},[619,2609,2610],{"class":629},"WorkingDirectory=\u002Fhome\u002F\u003Cusername>\u002Fvaults\n",[619,2612,2613],{"class":621,"line":1136},[619,2614,2615],{"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,2617,2618],{"class":621,"line":1141},[619,2619,2620],{"class":629},"Environment=\"HOME=\u002Fhome\u002F\u003Cusername>\"\n",[619,2622,2623],{"class":621,"line":1147},[619,2624,1121],{"class":629},[619,2626,2627],{"class":621,"line":2078},[619,2628,2629],{"class":629},"RestartSec=5\n",[619,2631,2632],{"class":621,"line":2089},[619,2633,643],{"emptyLinePlaceholder":642},[619,2635,2636],{"class":621,"line":2094},[619,2637,1144],{"class":629},[619,2639,2640],{"class":621,"line":2102},[619,2641,1150],{"class":629},[619,2643,2645],{"class":621,"line":2644},19,[619,2646,2647],{"class":691},"EOF\n",[619,2649,2651,2653,2655],{"class":621,"line":2650},20,[619,2652,626],{"class":625},[619,2654,630],{"class":629},[619,2656,1169],{"class":629},[619,2658,2660,2662,2664,2666,2669],{"class":621,"line":2659},21,[619,2661,626],{"class":625},[619,2663,630],{"class":629},[619,2665,764],{"class":629},[619,2667,2668],{"class":629}," --now",[619,2670,2671],{"class":629}," synch-watch.service\n",[429,2673,2674,2675,2677],{},"現在，在瀏覽器中打開 ",[521,2676,1918],{},"，您會發現其使用者介面和排版版面與桌面端原生 App 幾乎完全一致：",[513,2679],{"src":2680,"alt":2681,"style":2682},"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,2684,2685],{},"點擊左下角的設定圖示可以發現，除了需要手動重新安裝第三方社群外掛外，幾乎所有的 Obsidian 核心設定與功能均已完美保留：",[513,2687],{"src":2688,"alt":2689,"style":2690},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-settings-community-plugins.webp","Ignis 網頁介面中的社群第三方外掛設定","max-width: 597px; width: 100%; height: auto;",[429,2692,2693],{},"為了測試整個同步閉環，您可以透過 Ignis 網頁端直接新增一篇筆記：",[513,2695],{"src":2696,"alt":2697,"style":2690},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-create-new-note-web.webp","透過 Ignis 網頁介面新增一篇 Markdown 筆記",[429,2699,2700,2701,2703],{},"該筆記會立即被同步回您的 Obsidian 桌面用戶端。需要注意的是，空白資料夾不會在 ",[433,2702,1403],{}," 網頁端中顯示。",[513,2705],{"src":2706,"alt":2707,"style":2708},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-desktop-synced-note.webp","新建立的筆記已成功同步到本地 Obsidian 桌面用戶端","max-width: 502px; width: 100%; height: auto;",[429,2710,2711,2712,2714],{},"在行動端手機瀏覽器上存取 ",[521,2713,1918],{}," 的實際效果：",[429,2716,2717,2722],{},[513,2718],{"src":2719,"alt":2720,"style":2721},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-mobile-view-sidebar.webp","在行動端手機瀏覽器上存取 Ignis 網頁用戶端的側邊欄選單","max-width: 269px; width: 100%; height: auto;",[513,2723],{"src":2724,"alt":2725,"style":2721},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-mobile-view-editor.webp","在行動端手機瀏覽器上存取 Ignis 網頁用戶端的 Markdown 編輯器",[429,2727,2728,2729,2731,2732,2735],{},"當您在 ",[433,2730,1403],{}," 網頁端中刪除筆記時，它們會被安全地移至本地筆記庫的 ",[521,2733,2734],{},"~\u002Fvaults\u002F\u003Cvault-name>\u002F.trash"," 垃圾桶資料夾中，以防誤刪。",[457,2737,2739],{"id":2738},"自建-obsidian-同步服務的一些結語","自建 Obsidian 同步服務的一些結語",[429,2741,2742,2743,440,2745,2747,2748,2750],{},"透過將 ",[433,2744,1394],{},[433,2746,1403],{}," 結合，您可以使用完全處於自己掌控之下的 VPS 伺服器硬體，無縫地實現 Obsidian 筆記庫的多端同步與網頁端存取。而將這些服務整體託管於 ",[433,2749,443],{}," 私有網路之中，又為您提供了極致的安全物理邊界，從根本上阻断了公網暴露帶來的安全隱患。",[429,2752,2753,2754,2756],{},"當然，",[433,2755,1403],{}," 的初衷並不是為了完全替代本地的 Obsidian 桌面用戶端。相反，它更像是一個極其便利的臨時橋梁，供您在沒有攜帶主力電腦時，能夠隨時隨地透過任意瀏覽器快速存取和編輯自己的筆記。對於日常高強度的寫作與重度筆記庫管理，本地原生用戶端仍然是更加舒適、高效的選擇。",[429,2758,2759,2760,2762],{},"由於 Synch 採用了堅固的端到端加密機制，您的遠端筆記庫密碼必須具備足夠強的複雜度以抵禦暴力破解攻擊。同時，請務必牢記該密碼，因為同步伺服端不會儲存任何未加密的",[433,2761,1466],{},"。一旦遺忘該密碼，您的全部筆記資料將徹底無法復原。此外，由於所有資料均保存在您的自建 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":1912},{"id":1955,"depth":653,"text":1956},{"id":2187,"depth":653,"text":2188},{"id":2277,"depth":653,"text":2278},{"id":2738,"depth":639,"text":2739},{"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\u002FTW-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 跨裝置安全同步","tw\u002Farticle\u002Fsync-obsidian-across-devices",[2838,2839,2840,1368],"自建服务","Obsidian","云端同步",null,"6DsOPDA5q5K5tiypqYFvhyUvxHAduTMMII_8Mf-xVXM",{"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":1147,"navigation":642,"path":251,"seo":4094,"stem":4096,"tags":4097,"updatedAt":2841,"__hash__":4100},"article\u002Ftw\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、WeChat 等多種主流即時通訊平台。該外掛程式倉庫已被 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\u002FTW-Self-Hosting-Buzz-As-The-Workspace-Where-AI-Agents-Become-Colleagues.webp","一張高顏值的 16:9 科技質感卡片，具有深藍色 and 橙色色調，插圖展示如何在 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,1963,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,1963,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,1963],{},"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":1966,"code":3742,"language":1968,"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,2304,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\u002FTW-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 協定閘道與即時串流輸出的完整教學","tw\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",[3005,3501,4098,4099,2863],"Nostr","AI智能體","6tP_wMoFaCRxYZzuqtIt-fglvdLziQctY0T6KrEqia4",[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\u002Ftw\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":2078},[619,4243,4244],{},"      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n",[619,4246,4247],{"class":621,"line":2089},[619,4248,4249],{},"      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[619,4251,4252],{"class":621,"line":2094},[619,4253,4254],{},"      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[619,4256,4257],{"class":621,"line":2102},[619,4258,4259],{},"      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[619,4261,4262],{"class":621,"line":2644},[619,4263,4264],{},"      \u003Cinteger>1\u003C\u002Finteger>\n",[619,4266,4267],{"class":621,"line":2650},[619,4268,4269],{},"      \u003Ckey>configs\u003C\u002Fkey>\n",[619,4271,4272],{"class":621,"line":2659},[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\u002FTW-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},"tw\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",[4646,439,4647,1368],"macOS","MDM","zclGoAFYNMezL6vd0bCfBa4isSiwsXYfCQa7Cwm9YLI",{"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\u002Ftw\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,1963],{},"找到 ",[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,2347],{"class":629},[429,4876,2488,4877,4880,4881],{},[521,4878,4879],{},"hermes setup"," 命令列工具來設定 Hermes Agent：\n",[513,4882],{"alt":4883,"src":4884},"In terminal, run hermes setup command to initiate setup wizard","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,2199,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\u002FTW-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 機器人雙向整合指南","tw\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",[435,5289,5290,5291,5292],"VPS Setup","Telegram Bot","Linux VPS","AI Agent","eiDUNI72ExCUCFln1uzuVunlhhybTJO26B1iuQ4qUaM",{"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":1147,"navigation":642,"path":355,"seo":4094,"stem":4096,"tags":4097,"updatedAt":2841,"__hash__":4100},1792490003420]